compiler: add ability to generate .abi.json file
A part of integration with NEO Blockchain Toolkit (see #902). To be able to deploy smart-contract compiled with neo-go compiler via NEO Express, we have to generate additional .abi.json file. This file contains the following information: - hash of the compiled contract - smart-contract metadata (title, description, version, author, email, has-storage, has-dynamic-invoke, is-payable) - smart-contract entry point - functions - events However, this .abi.json file is slightly different from the one, described in manifest.go, so we have to add auxilaury stractures for json marshalling. The .abi.json format used by NEO-Express is described [here](https://github.com/neo-project/neo-devpack-dotnet/blob/master/src/Neo.Compiler.MSIL/FuncExport.cs#L66).
This commit is contained in:
parent
ab7f2cb4fb
commit
2ec1d76320
4 changed files with 186 additions and 11 deletions
|
@ -97,6 +97,14 @@ func NewCommands() []cli.Command {
|
|||
Name: "debug, d",
|
||||
Usage: "Emit debug info in a separate file",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "abi, a",
|
||||
Usage: "Emit application binary interface (.abi.json) file into separate file using configuration input file (*.yml)",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "config, c",
|
||||
Usage: "Configuration input file (*.yml)",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -349,11 +357,25 @@ func contractCompile(ctx *cli.Context) error {
|
|||
if len(src) == 0 {
|
||||
return cli.NewExitError(errNoInput, 1)
|
||||
}
|
||||
abi := ctx.String("abi")
|
||||
confFile := ctx.String("config")
|
||||
if len(abi) != 0 && len(confFile) == 0 {
|
||||
return cli.NewExitError(errNoConfFile, 1)
|
||||
}
|
||||
|
||||
o := &compiler.Options{
|
||||
Outfile: ctx.String("out"),
|
||||
|
||||
DebugInfo: ctx.String("debug"),
|
||||
ABIInfo: abi,
|
||||
}
|
||||
|
||||
if len(confFile) != 0 {
|
||||
conf, err := parseContractConfig(confFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
o.ContractDetails = &conf.Contract
|
||||
}
|
||||
|
||||
result, err := compiler.CompileAndSave(src, o)
|
||||
|
@ -614,15 +636,9 @@ func contractDeploy(ctx *cli.Context) error {
|
|||
if err != nil {
|
||||
return cli.NewExitError(err, 1)
|
||||
}
|
||||
confBytes, err := ioutil.ReadFile(confFile)
|
||||
conf, err := parseContractConfig(confFile)
|
||||
if err != nil {
|
||||
return cli.NewExitError(err, 1)
|
||||
}
|
||||
|
||||
conf := ProjectConfig{}
|
||||
err = yaml.Unmarshal(confBytes, &conf)
|
||||
if err != nil {
|
||||
return cli.NewExitError(fmt.Errorf("bad config: %v", err), 1)
|
||||
return err
|
||||
}
|
||||
|
||||
c, err := client.New(context.TODO(), endpoint, client.Options{})
|
||||
|
@ -644,3 +660,17 @@ func contractDeploy(ctx *cli.Context) error {
|
|||
fmt.Printf("Sent deployment transaction %s for contract %s\n", txHash.StringLE(), hash.Hash160(avm).StringLE())
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseContractConfig(confFile string) (ProjectConfig, error) {
|
||||
conf := ProjectConfig{}
|
||||
confBytes, err := ioutil.ReadFile(confFile)
|
||||
if err != nil {
|
||||
return conf, cli.NewExitError(err, 1)
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(confBytes, &conf)
|
||||
if err != nil {
|
||||
return conf, cli.NewExitError(fmt.Errorf("bad config: %v", err), 1)
|
||||
}
|
||||
return conf, nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue