github.com/mavryk-network/mvgo@v1.19.9/internal/compose/alpha/task/transfer.go (about) 1 // Copyright (c) 2023 Blockwatch Data Inc. 2 // Author: alex@blockwatch.cc, abdul@blockwatch.cc 3 4 package task 5 6 import ( 7 "github.com/mavryk-network/mvgo/codec" 8 "github.com/mavryk-network/mvgo/internal/compose" 9 "github.com/mavryk-network/mvgo/internal/compose/alpha" 10 "github.com/mavryk-network/mvgo/rpc" 11 "github.com/mavryk-network/mvgo/signer" 12 13 "github.com/pkg/errors" 14 ) 15 16 var _ alpha.TaskBuilder = (*TransferTask)(nil) 17 18 func init() { 19 alpha.RegisterTask("transfer", NewTransferTask) 20 } 21 22 type TransferTask struct { 23 TargetTask 24 Amount int64 25 } 26 27 func NewTransferTask() alpha.TaskBuilder { 28 return &TransferTask{} 29 } 30 31 func (t *TransferTask) Type() string { 32 return "transfer" 33 } 34 35 func (t *TransferTask) Build(ctx compose.Context, task alpha.Task) (*codec.Op, *rpc.CallOptions, error) { 36 if err := t.parse(ctx, task); err != nil { 37 return nil, nil, errors.Wrap(err, "parse") 38 } 39 opts := rpc.NewCallOptions() 40 opts.Signer = signer.NewFromKey(t.Key) 41 op := codec.NewOp().WithSource(t.Source).WithTransfer(t.Destination, t.Amount) 42 return op, opts, nil 43 } 44 45 func (t *TransferTask) Validate(ctx compose.Context, task alpha.Task) error { 46 return t.parse(ctx, task) 47 } 48 49 func (t *TransferTask) parse(ctx compose.Context, task alpha.Task) (err error) { 50 if err = t.TargetTask.parse(ctx, task); err != nil { 51 return err 52 } 53 t.Amount = int64(task.Amount) 54 return 55 }