github.com/mavryk-network/mvgo@v1.19.9/internal/compose/alpha/task/call.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/micheline" 11 "github.com/mavryk-network/mvgo/rpc" 12 "github.com/mavryk-network/mvgo/signer" 13 14 "github.com/pkg/errors" 15 ) 16 17 var _ alpha.TaskBuilder = (*CallTask)(nil) 18 19 func init() { 20 alpha.RegisterTask("call", NewCallTask) 21 } 22 23 type CallTask struct { 24 TargetTask 25 } 26 27 func NewCallTask() alpha.TaskBuilder { 28 return &CallTask{} 29 } 30 31 func (c *CallTask) Type() string { 32 return "call" 33 } 34 35 func (t *CallTask) 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 params, err := alpha.ParseParams(ctx, task) 40 if err != nil { 41 return nil, nil, errors.Wrap(err, "params") 42 } 43 opts := rpc.NewCallOptions() 44 opts.Signer = signer.NewFromKey(t.Key) 45 op := codec.NewOp(). 46 WithSource(t.Source). 47 WithCallExt(t.Destination, micheline.Parameters{ 48 Entrypoint: task.Params.Entrypoint, 49 Value: *params, 50 }, int64(task.Amount)) 51 return op, opts, nil 52 } 53 54 func (t *CallTask) Validate(ctx compose.Context, task alpha.Task) error { 55 if err := t.parse(ctx, task); err != nil { 56 return err 57 } 58 if _, err := alpha.ParseParams(ctx, task); err != nil { 59 return errors.Wrap(err, "params") 60 } 61 return nil 62 } 63 64 func (t *CallTask) parse(ctx compose.Context, task alpha.Task) (err error) { 65 if err = t.TargetTask.parse(ctx, task); err != nil { 66 return err 67 } 68 return 69 }