forked from TrueCloudLab/frostfs-node
6830d54a3c
Signed-off-by: ZhangTao1596 <zhangtao@ngd.neo.org>
167 lines
3.4 KiB
Go
167 lines
3.4 KiB
Go
package wrapper
|
|
|
|
import (
|
|
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
|
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client/balance"
|
|
"github.com/nspcc-dev/neofs-sdk-go/owner"
|
|
)
|
|
|
|
// TransferPrm groups parameters of TransferX method.
|
|
type TransferPrm struct {
|
|
Amount int64
|
|
|
|
From, To *owner.ID
|
|
|
|
Details []byte
|
|
|
|
client.InvokePrmOptional
|
|
}
|
|
|
|
// TransferX transfers p.Amount of GASe-12 from p.From to p.To
|
|
// with details p.Details through direct smart contract call.
|
|
//
|
|
// If TryNotary is provided, calls notary contract.
|
|
func (w *Wrapper) TransferX(p TransferPrm) error {
|
|
from, err := address.StringToUint160(p.From.String())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
to, err := address.StringToUint160(p.To.String())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// prepare invocation arguments
|
|
args := balance.TransferXArgs{}
|
|
args.SetSender(from.BytesBE())
|
|
args.SetRecipient(to.BytesBE())
|
|
args.SetAmount(p.Amount)
|
|
args.SetDetails(p.Details)
|
|
args.InvokePrmOptional = p.InvokePrmOptional
|
|
|
|
return w.client.TransferX(args)
|
|
}
|
|
|
|
// MintPrm groups parameters of Mint operation.
|
|
type MintPrm struct {
|
|
to util.Uint160
|
|
amount int64
|
|
id []byte
|
|
|
|
client.InvokePrmOptional
|
|
}
|
|
|
|
// SetTo sets receiver of the transfer.
|
|
func (m *MintPrm) SetTo(to util.Uint160) {
|
|
m.to = to
|
|
}
|
|
|
|
// SetAmount sets amount of the transfer.
|
|
func (m *MintPrm) SetAmount(amount int64) {
|
|
m.amount = amount
|
|
}
|
|
|
|
// SetID sets ID.
|
|
func (m *MintPrm) SetID(id []byte) {
|
|
m.id = id
|
|
}
|
|
|
|
// Mint sends funds to the account.
|
|
func (w *Wrapper) Mint(prm MintPrm) error {
|
|
args := balance.MintPrm{}
|
|
|
|
args.SetTo(prm.to.BytesBE())
|
|
args.SetAmount(prm.amount)
|
|
args.SetID(prm.id)
|
|
args.InvokePrmOptional = prm.InvokePrmOptional
|
|
|
|
return w.client.Mint(args)
|
|
}
|
|
|
|
// BurnPrm groups parameters of Burn operation.
|
|
type BurnPrm struct {
|
|
to util.Uint160
|
|
amount int64
|
|
id []byte
|
|
|
|
client.InvokePrmOptional
|
|
}
|
|
|
|
// SetTo sets receiver.
|
|
func (b *BurnPrm) SetTo(to util.Uint160) {
|
|
b.to = to
|
|
}
|
|
|
|
// SetAmount sets amount.
|
|
func (b *BurnPrm) SetAmount(amount int64) {
|
|
b.amount = amount
|
|
}
|
|
|
|
// SetID sets ID
|
|
func (b *BurnPrm) SetID(id []byte) {
|
|
b.id = id
|
|
}
|
|
|
|
// Burn destroys funds from the account.
|
|
func (w *Wrapper) Burn(prm BurnPrm) error {
|
|
args := balance.BurnPrm{}
|
|
|
|
args.SetTo(prm.to.BytesBE())
|
|
args.SetAmount(prm.amount)
|
|
args.SetID(prm.id)
|
|
args.InvokePrmOptional = prm.InvokePrmOptional
|
|
|
|
return w.client.Burn(args)
|
|
}
|
|
|
|
// LockPrm groups parameters of Lock operation.
|
|
type LockPrm struct {
|
|
id []byte
|
|
user util.Uint160
|
|
lock util.Uint160
|
|
amount int64
|
|
dueEpoch int64
|
|
|
|
client.InvokePrmOptional
|
|
}
|
|
|
|
// SetID sets ID.
|
|
func (l *LockPrm) SetID(id []byte) {
|
|
l.id = id
|
|
}
|
|
|
|
// SetUser set user.
|
|
func (l *LockPrm) SetUser(user util.Uint160) {
|
|
l.user = user
|
|
}
|
|
|
|
// SetLock sets lock.
|
|
func (l *LockPrm) SetLock(lock util.Uint160) {
|
|
l.lock = lock
|
|
}
|
|
|
|
// SetAmount sets amount.
|
|
func (l *LockPrm) SetAmount(amount int64) {
|
|
l.amount = amount
|
|
}
|
|
|
|
// SetDueEpoch sets end of the lock.
|
|
func (l *LockPrm) SetDueEpoch(dueEpoch int64) {
|
|
l.dueEpoch = dueEpoch
|
|
}
|
|
|
|
// Lock locks fund on the user account.
|
|
func (w *Wrapper) Lock(prm LockPrm) error {
|
|
args := balance.LockPrm{}
|
|
|
|
args.SetID(prm.id)
|
|
args.SetUser(prm.user.BytesBE())
|
|
args.SetLock(prm.lock.BytesBE())
|
|
args.SetAmount(prm.amount)
|
|
args.SetDueEpoch(prm.dueEpoch)
|
|
args.InvokePrmOptional = prm.InvokePrmOptional
|
|
|
|
return w.client.Lock(args)
|
|
}
|