forked from TrueCloudLab/frostfs-node
Initial commit
Initial public review release v0.10.0
This commit is contained in:
commit
dadfd90dcd
276 changed files with 46331 additions and 0 deletions
141
lib/implementations/balance.go
Normal file
141
lib/implementations/balance.go
Normal file
|
@ -0,0 +1,141 @@
|
|||
package implementations
|
||||
|
||||
import (
|
||||
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
|
||||
"github.com/nspcc-dev/neofs-api-go/refs"
|
||||
"github.com/nspcc-dev/neofs-node/lib/blockchain/goclient"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// MorphBalanceContract is a wrapper over NeoFS Balance contract client
|
||||
// that provides an interface of manipulations with user funds.
|
||||
type MorphBalanceContract struct {
|
||||
// NeoFS Balance smart-contract
|
||||
balanceContract StaticContractClient
|
||||
|
||||
// "balance of" method name of balance contract
|
||||
balanceOfMethodName string
|
||||
|
||||
// decimals method name of balance contract
|
||||
decimalsMethodName string
|
||||
}
|
||||
|
||||
// BalanceOfParams is a structure that groups the parameters
|
||||
// for NeoFS user balance receiving operation.
|
||||
type BalanceOfParams struct {
|
||||
owner refs.OwnerID
|
||||
}
|
||||
|
||||
// BalanceOfResult is a structure that groups the values
|
||||
// of the result of NeoFS user balance receiving operation.
|
||||
type BalanceOfResult struct {
|
||||
amount int64
|
||||
}
|
||||
|
||||
// DecimalsParams is a structure that groups the parameters
|
||||
// for NeoFS token decimals receiving operation.
|
||||
type DecimalsParams struct {
|
||||
}
|
||||
|
||||
// DecimalsResult is a structure that groups the values
|
||||
// of the result of NeoFS token decimals receiving operation.
|
||||
type DecimalsResult struct {
|
||||
dec int64
|
||||
}
|
||||
|
||||
// SetBalanceContractClient is a Balance contract client setter.
|
||||
func (s *MorphBalanceContract) SetBalanceContractClient(v StaticContractClient) {
|
||||
s.balanceContract = v
|
||||
}
|
||||
|
||||
// SetBalanceOfMethodName is a Balance contract balanceOf method name setter.
|
||||
func (s *MorphBalanceContract) SetBalanceOfMethodName(v string) {
|
||||
s.balanceOfMethodName = v
|
||||
}
|
||||
|
||||
// SetDecimalsMethodName is a Balance contract decimals method name setter.
|
||||
func (s *MorphBalanceContract) SetDecimalsMethodName(v string) {
|
||||
s.decimalsMethodName = v
|
||||
}
|
||||
|
||||
// BalanceOf performs the test invocation call of balanceOf method of NeoFS Balance contract.
|
||||
func (s MorphBalanceContract) BalanceOf(p BalanceOfParams) (*BalanceOfResult, error) {
|
||||
owner := p.OwnerID()
|
||||
|
||||
u160, err := address.StringToUint160(owner.String())
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not convert wallet address to Uint160")
|
||||
}
|
||||
|
||||
prms, err := s.balanceContract.TestInvoke(
|
||||
s.balanceOfMethodName,
|
||||
u160.BytesBE(),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not perform test invocation")
|
||||
} else if ln := len(prms); ln != 1 {
|
||||
return nil, errors.Errorf("unexpected stack item count (balanceOf): %d", ln)
|
||||
}
|
||||
|
||||
amount, err := goclient.IntFromStackParameter(prms[0])
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not get integer stack item from stack item (amount)")
|
||||
}
|
||||
|
||||
res := new(BalanceOfResult)
|
||||
res.SetAmount(amount)
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// Decimals performs the test invocation call of decimals method of NeoFS Balance contract.
|
||||
func (s MorphBalanceContract) Decimals(DecimalsParams) (*DecimalsResult, error) {
|
||||
prms, err := s.balanceContract.TestInvoke(
|
||||
s.decimalsMethodName,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not perform test invocation")
|
||||
} else if ln := len(prms); ln != 1 {
|
||||
return nil, errors.Errorf("unexpected stack item count (decimals): %d", ln)
|
||||
}
|
||||
|
||||
dec, err := goclient.IntFromStackParameter(prms[0])
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not get integer stack item from stack item (decimal)")
|
||||
}
|
||||
|
||||
res := new(DecimalsResult)
|
||||
res.SetDecimals(dec)
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// SetOwnerID is an owner ID setter.
|
||||
func (s *BalanceOfParams) SetOwnerID(v refs.OwnerID) {
|
||||
s.owner = v
|
||||
}
|
||||
|
||||
// OwnerID is an owner ID getter.
|
||||
func (s BalanceOfParams) OwnerID() refs.OwnerID {
|
||||
return s.owner
|
||||
}
|
||||
|
||||
// SetAmount is an funds amount setter.
|
||||
func (s *BalanceOfResult) SetAmount(v int64) {
|
||||
s.amount = v
|
||||
}
|
||||
|
||||
// Amount is an funds amount getter.
|
||||
func (s BalanceOfResult) Amount() int64 {
|
||||
return s.amount
|
||||
}
|
||||
|
||||
// SetDecimals is a decimals setter.
|
||||
func (s *DecimalsResult) SetDecimals(v int64) {
|
||||
s.dec = v
|
||||
}
|
||||
|
||||
// Decimals is a decimals getter.
|
||||
func (s DecimalsResult) Decimals() int64 {
|
||||
return s.dec
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue