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  }