github.com/mavryk-network/mvgo@v1.19.9/internal/compose/alpha/task/deploy.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 "fmt" 8 9 "github.com/mavryk-network/mvgo/codec" 10 "github.com/mavryk-network/mvgo/internal/compose" 11 "github.com/mavryk-network/mvgo/internal/compose/alpha" 12 "github.com/mavryk-network/mvgo/rpc" 13 "github.com/mavryk-network/mvgo/signer" 14 15 "github.com/pkg/errors" 16 ) 17 18 var _ alpha.TaskBuilder = (*DeployTask)(nil) 19 20 func init() { 21 alpha.RegisterTask("deploy", NewDeployTask) 22 } 23 24 type DeployTask struct { 25 TargetTask 26 Amount int64 27 } 28 29 func NewDeployTask() alpha.TaskBuilder { 30 return &DeployTask{} 31 } 32 33 func (c *DeployTask) Type() string { 34 return "deploy" 35 } 36 37 func (t *DeployTask) Build(ctx compose.Context, task alpha.Task) (*codec.Op, *rpc.CallOptions, error) { 38 if err := t.parse(ctx, task); err != nil { 39 return nil, nil, errors.Wrap(err, "parse") 40 } 41 script, err := alpha.ParseScript(ctx, task) 42 if err != nil { 43 return nil, nil, errors.Wrap(err, "script") 44 } 45 opts := rpc.NewCallOptions() 46 opts.Signer = signer.NewFromKey(t.Key) 47 op := codec.NewOp(). 48 WithSource(t.Source). 49 WithOriginationExt(*script, t.Destination, t.Amount) 50 return op, opts, nil 51 } 52 53 func (t *DeployTask) Validate(ctx compose.Context, task alpha.Task) error { 54 if err := t.parse(ctx, task); err != nil { 55 return err 56 } 57 if _, err := alpha.ParseScript(ctx, task); err != nil { 58 return errors.Wrap(err, "script") 59 } 60 return nil 61 } 62 63 func (t *DeployTask) parse(ctx compose.Context, task alpha.Task) (err error) { 64 if err = t.BaseTask.parse(ctx, task); err != nil { 65 return 66 } 67 t.Amount = int64(task.Amount) 68 if task.Alias == "" { 69 return fmt.Errorf("alias name required") 70 } 71 return 72 }