github.com/mavryk-network/mvgo@v1.19.9/internal/compose/alpha/task/stake.go (about) 1 // Copyright (c) 2024 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 = (*StakeTask)(nil) 17 18 func init() { 19 alpha.RegisterTask("stake", NewStakeTask) 20 } 21 22 type StakeTask struct { 23 BaseTask 24 Amount int64 25 } 26 27 func NewStakeTask() alpha.TaskBuilder { 28 return &StakeTask{} 29 } 30 31 func (t *StakeTask) Type() string { 32 return "stake" 33 } 34 35 func (t *StakeTask) 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(). 42 WithSource(t.Source). 43 WithStake(t.Amount) 44 return op, opts, nil 45 } 46 47 func (t *StakeTask) Validate(ctx compose.Context, task alpha.Task) error { 48 return t.parse(ctx, task) 49 } 50 51 func (t *StakeTask) parse(ctx compose.Context, task alpha.Task) (err error) { 52 if err = t.BaseTask.parse(ctx, task); err != nil { 53 return err 54 } 55 t.Amount = int64(task.Amount) 56 return 57 }