cli: deploy contract using manifest.json instead of yaml config

1. We have all necessary information in manifest.json, so don't need
   config.yaml for deployment anymore. It also allow us to be consistent
   with C# cli (it uses only .manifest.json and .nef files for contract
   deployment)
2. Remove EntryPoint and Methods from ProjectConfig as compiler is able
   to generate this information by itself.
This commit is contained in:
Anna Shaleva 2020-06-30 14:24:07 +03:00
parent 4dfb0eb438
commit 3875c0a923

View file

@ -33,6 +33,7 @@ import (
var ( var (
errNoInput = errors.New("no input file was found, specify an input file with the '--in or -i' flag") errNoInput = errors.New("no input file was found, specify an input file with the '--in or -i' flag")
errNoConfFile = errors.New("no config file was found, specify a config file with the '--config' or '-c' flag") errNoConfFile = errors.New("no config file was found, specify a config file with the '--config' or '-c' flag")
errNoManifestFile = errors.New("no manifest file was found, specify a manifest file with the '--manifest' flag")
errNoMethod = errors.New("no method specified for function invocation command") errNoMethod = errors.New("no method specified for function invocation command")
errNoWallet = errors.New("no wallet parameter found, specify it with the '--wallet or -w' flag") errNoWallet = errors.New("no wallet parameter found, specify it with the '--wallet or -w' flag")
errNoScriptHash = errors.New("no smart contract hash was provided, specify one as the first argument") errNoScriptHash = errors.New("no smart contract hash was provided, specify one as the first argument")
@ -83,8 +84,8 @@ func NewCommands() []cli.Command {
Usage: "Input file for the smart contract (*.nef)", Usage: "Input file for the smart contract (*.nef)",
}, },
cli.StringFlag{ cli.StringFlag{
Name: "config, c", Name: "manifest",
Usage: "configuration input file (*.yml)", Usage: "Manifest input file (*.manifest.json)",
}, },
walletFlag, walletFlag,
addressFlag, addressFlag,
@ -316,16 +317,7 @@ func initSmartContract(ctx *cli.Context) error {
return cli.NewExitError(err, 1) return cli.NewExitError(err, 1)
} }
m := ProjectConfig{ m := ProjectConfig{}
EntryPoint: manifest.Method{
Name: "Main",
Parameters: []manifest.Parameter{
manifest.NewParameter("Method", smartcontract.StringType),
manifest.NewParameter("Arguments", smartcontract.ArrayType),
},
ReturnType: smartcontract.ByteArrayType,
},
}
b, err := yaml.Marshal(m) b, err := yaml.Marshal(m)
if err != nil { if err != nil {
return cli.NewExitError(err, 1) return cli.NewExitError(err, 1)
@ -538,8 +530,6 @@ func testInvokeScript(ctx *cli.Context) error {
type ProjectConfig struct { type ProjectConfig struct {
HasStorage bool HasStorage bool
IsPayable bool IsPayable bool
EntryPoint manifest.Method
Methods []manifest.Method
Events []manifest.Event Events []manifest.Event
} }
@ -555,17 +545,6 @@ func (p *ProjectConfig) GetFeatures() smartcontract.PropertyState {
return fs return fs
} }
// ToManifest converts project config to the manifest.
func (p *ProjectConfig) ToManifest(file nef.File) *manifest.Manifest {
m := manifest.NewManifest(file.Header.ScriptHash)
m.Features = p.GetFeatures()
m.ABI.Hash = file.Header.ScriptHash
m.ABI.EntryPoint = p.EntryPoint
m.ABI.Methods = p.Methods
m.ABI.Events = p.Events
return m
}
func inspect(ctx *cli.Context) error { func inspect(ctx *cli.Context) error {
in := ctx.String("in") in := ctx.String("in")
compile := ctx.Bool("compile") compile := ctx.Bool("compile")
@ -638,9 +617,9 @@ func contractDeploy(ctx *cli.Context) error {
if len(in) == 0 { if len(in) == 0 {
return cli.NewExitError(errNoInput, 1) return cli.NewExitError(errNoInput, 1)
} }
confFile := ctx.String("config") manifestFile := ctx.String("manifest")
if len(confFile) == 0 { if len(manifestFile) == 0 {
return cli.NewExitError(errNoConfFile, 1) return cli.NewExitError(errNoManifestFile, 1)
} }
gas := flags.Fixed8FromContext(ctx, "gas") gas := flags.Fixed8FromContext(ctx, "gas")
@ -656,9 +635,15 @@ func contractDeploy(ctx *cli.Context) error {
if err != nil { if err != nil {
return cli.NewExitError(errors.Wrapf(err, "failed to restore .nef file"), 1) return cli.NewExitError(errors.Wrapf(err, "failed to restore .nef file"), 1)
} }
conf, err := parseContractConfig(confFile)
manifestBytes, err := ioutil.ReadFile(manifestFile)
if err != nil { if err != nil {
return err return cli.NewExitError(errors.Wrapf(err, "failed to read manifest file"), 1)
}
m := &manifest.Manifest{}
err = json.Unmarshal(manifestBytes, m)
if err != nil {
return cli.NewExitError(errors.Wrapf(err, "failed to restore manifest file"), 1)
} }
gctx, cancel := options.GetTimeoutContext(ctx) gctx, cancel := options.GetTimeoutContext(ctx)
@ -669,7 +654,6 @@ func contractDeploy(ctx *cli.Context) error {
return err return err
} }
m := conf.ToManifest(nefFile)
txScript, sysfee, err := request.CreateDeploymentScript(nefFile.Script, m) txScript, sysfee, 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)