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  }