From 1f421ff82ca26a5e8d19317c6f3c1e8327c53abd Mon Sep 17 00:00:00 2001 From: Silas Davis <silas@erisindustries.com> Date: Tue, 21 Feb 2017 00:42:50 +0000 Subject: [PATCH] Include magic SNative contract address in generated solidity code --- util/snatives/cmd/main.go | 11 ++++++++++- util/snatives/templates/solidity_templates.go | 10 ++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/util/snatives/cmd/main.go b/util/snatives/cmd/main.go index 5b1f6b49..a04bca2c 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 9fd0faf5..f4d87f16 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) -- GitLab