github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/cli/util/dump.go (about)

     1  package util
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  
     7  	"github.com/nspcc-dev/neo-go/cli/options"
     8  	"github.com/nspcc-dev/neo-go/cli/paramcontext"
     9  	"github.com/nspcc-dev/neo-go/cli/query"
    10  	"github.com/nspcc-dev/neo-go/pkg/core/transaction"
    11  	"github.com/urfave/cli"
    12  )
    13  
    14  func txDump(ctx *cli.Context) error {
    15  	args := ctx.Args()
    16  	if len(args) == 0 {
    17  		return cli.NewExitError("missing input file", 1)
    18  	} else if len(args) > 1 {
    19  		return cli.NewExitError("only one input file is accepted", 1)
    20  	}
    21  
    22  	c, err := paramcontext.Read(args[0])
    23  	if err != nil {
    24  		return cli.NewExitError(err, 1)
    25  	}
    26  
    27  	tx, ok := c.Verifiable.(*transaction.Transaction)
    28  	if !ok {
    29  		return cli.NewExitError("verifiable item is not a transaction", 1)
    30  	}
    31  
    32  	err = query.DumpApplicationLog(ctx, nil, tx, nil, true)
    33  	if err != nil {
    34  		return cli.NewExitError(err, 1)
    35  	}
    36  
    37  	if ctx.String(options.RPCEndpointFlag) != "" {
    38  		gctx, cancel := options.GetTimeoutContext(ctx)
    39  		defer cancel()
    40  
    41  		var err error
    42  		cl, err := options.GetRPCClient(gctx, ctx)
    43  		if err != nil {
    44  			return cli.NewExitError(err, 1)
    45  		}
    46  		res, err := cl.InvokeScript(tx.Script, tx.Signers)
    47  		if err != nil {
    48  			return cli.NewExitError(err, 1)
    49  		}
    50  		resS, err := json.MarshalIndent(res, "", " ")
    51  		if err != nil {
    52  			return cli.NewExitError(err, 1)
    53  		}
    54  		fmt.Fprintln(ctx.App.Writer, string(resS))
    55  	}
    56  	return nil
    57  }