github.com/mavryk-network/mvgo@v1.19.9/internal/compose/alpha/task/undelegate.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/mavryk" 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 = (*UndelegateTask)(nil) 18 19 func init() { 20 alpha.RegisterTask("undelegate", NewUndelegateTask) 21 } 22 23 type UndelegateTask struct { 24 BaseTask 25 } 26 27 func NewUndelegateTask() alpha.TaskBuilder { 28 return &UndelegateTask{} 29 } 30 31 func (t *UndelegateTask) Type() string { 32 return "undelegate" 33 } 34 35 func (t *UndelegateTask) 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 opts.IgnoreLimits = true 42 op := codec.NewOp(). 43 WithSource(t.Source). 44 WithUndelegation(). 45 WithLimits([]mavryk.Limits{rpc.DefaultDelegationLimitsEOA}, 0) 46 return op, opts, nil 47 } 48 49 func (t *UndelegateTask) Validate(ctx compose.Context, task alpha.Task) error { 50 return t.parse(ctx, task) 51 } 52 53 func (t *UndelegateTask) parse(ctx compose.Context, task alpha.Task) error { 54 return t.BaseTask.parse(ctx, task) 55 }