diff --git a/util/snatives/cmd/main.go b/util/snatives/cmd/main.go index 5b1f6b49938e17bb27e986c7dc8aef6f20d8f4da..a04bca2c6fabacd937ac194d5cb7afb77383457f 100644 --- a/util/snatives/cmd/main.go +++ b/util/snatives/cmd/main.go @@ -9,12 +9,21 @@ import ( // Dump SNative contracts func main() { - for _, contract := range vm.SNativeContracts() { + contracts := vm.SNativeContracts() + // Index of next contract + i := 1 + for _, contract := range contracts { solidity, err := templates.NewSolidityContract(contract).Solidity() if err != nil { fmt.Printf("Error generating solidity for contract %s: %s\n", contract.Name, err) } fmt.Println(solidity) + if i < len(contracts) { + // Two new lines between contracts as per Solidity style guide + // (the template gives us 1 trailing new line) + fmt.Println() + } + i++ } } diff --git a/util/snatives/templates/solidity_templates.go b/util/snatives/templates/solidity_templates.go index 9fd0faf5c62c706637e7156fc0af56c2d0eb31f3..f4d87f16b566b6f21d2afcb2bd510f9b97574571 100644 --- a/util/snatives/templates/solidity_templates.go +++ b/util/snatives/templates/solidity_templates.go @@ -11,6 +11,7 @@ import ( const contractTemplateText = `/** [[.Comment]] +* @dev These functions can be accessed as if this contract were deployed at the address [[.Address]] */ contract [[.Name]] {[[range .Functions]] [[.SolidityIndent 1]] @@ -31,13 +32,13 @@ var functionTemplate *template.Template func init() { var err error functionTemplate, err = template.New("SolidityFunctionTemplate"). - Delims("[[", "]]"). + Delims("[[", "]]"). Parse(functionTemplateText) if err != nil { panic(fmt.Errorf("Couldn't parse SNative function template: %s", err)) } contractTemplate, err = template.New("SolidityContractTemplate"). - Delims("[[", "]]"). + Delims("[[", "]]"). Parse(contractTemplateText) if err != nil { panic(fmt.Errorf("Couldn't parse SNative contract template: %s", err)) @@ -57,6 +58,11 @@ func NewSolidityContract(contract *vm.SNativeContractDescription) *solidityContr return &solidityContract{contract} } +func (contract *solidityContract) Address() string { + return fmt.Sprintf("0x%x", + contract.SNativeContractDescription.Address().Postfix(20)) +} + // Generate Solidity code for this SNative contract func (contract *solidityContract) Solidity() (string, error) { buf := new(bytes.Buffer)