cli/rpc: test-invoke deployment script to get the system fee value

Fix #1134.
This commit is contained in:
Roman Khimov 2020-07-02 16:22:49 +03:00
parent 17ea6411a2
commit 0819583413
2 changed files with 11 additions and 8 deletions

View file

@ -654,12 +654,17 @@ func contractDeploy(ctx *cli.Context) error {
return err return err
} }
txScript, sysfee, err := request.CreateDeploymentScript(nefFile.Script, m) txScript, err := request.CreateDeploymentScript(nefFile.Script, m)
if err != nil { if err != nil {
return cli.NewExitError(fmt.Errorf("failed to create deployment script: %v", err), 1) return cli.NewExitError(fmt.Errorf("failed to create deployment script: %v", err), 1)
} }
// It doesn't require any cosigners.
invRes, err := c.InvokeScript(hex.EncodeToString(txScript), nil)
if err != nil {
return cli.NewExitError(fmt.Errorf("failed to test-invoke deployment script: %v", err), 1)
}
txHash, err := c.SignAndPushInvocationTx(txScript, acc, sysfee, gas) txHash, err := c.SignAndPushInvocationTx(txScript, acc, invRes.GasConsumed, gas)
if err != nil { if err != nil {
return cli.NewExitError(fmt.Errorf("failed to push invocation tx: %v", err), 1) return cli.NewExitError(fmt.Errorf("failed to push invocation tx: %v", err), 1)
} }

View file

@ -5,7 +5,6 @@ import (
"fmt" "fmt"
"strconv" "strconv"
"github.com/nspcc-dev/neo-go/pkg/core"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/io"
"github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/smartcontract"
@ -16,18 +15,17 @@ import (
) )
// CreateDeploymentScript returns a script that deploys given smart contract // CreateDeploymentScript returns a script that deploys given smart contract
// with its metadata and system fee require for this. // with its metadata.
func CreateDeploymentScript(avm []byte, manif *manifest.Manifest) ([]byte, int64, error) { func CreateDeploymentScript(avm []byte, manif *manifest.Manifest) ([]byte, error) {
script := io.NewBufBinWriter() script := io.NewBufBinWriter()
rawManifest, err := manif.MarshalJSON() rawManifest, err := manif.MarshalJSON()
if err != nil { if err != nil {
return nil, 0, err return nil, err
} }
emit.Bytes(script.BinWriter, rawManifest) emit.Bytes(script.BinWriter, rawManifest)
emit.Bytes(script.BinWriter, avm) emit.Bytes(script.BinWriter, avm)
emit.Syscall(script.BinWriter, "System.Contract.Create") emit.Syscall(script.BinWriter, "System.Contract.Create")
sysfee := int64(core.StoragePrice * (len(avm) + len(rawManifest))) return script.Bytes(), nil
return script.Bytes(), sysfee, nil
} }
// expandArrayIntoScript pushes all FuncParam parameters from the given array // expandArrayIntoScript pushes all FuncParam parameters from the given array