From 275cd4988dbef4b81e856a6c6ae8cb12242e3976 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet Date: Mon, 16 Dec 2019 13:37:15 +0100 Subject: [PATCH] cmd/abigen: Sanitize vyper's combined json names (#20419) * cmd/abigen: Sanitize vyper's combined json names * Review feedback: handle full paths --- cmd/abigen/main.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/cmd/abigen/main.go b/cmd/abigen/main.go index 252d8ef80..ed4a3b887 100644 --- a/cmd/abigen/main.go +++ b/cmd/abigen/main.go @@ -21,9 +21,11 @@ import ( "fmt" "io/ioutil" "os" + "path/filepath" "regexp" "strings" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common/compiler" @@ -193,10 +195,22 @@ func abigen(c *cli.Context) error { utils.Fatalf("Failed to build Solidity contract: %v", err) } case c.GlobalIsSet(vyFlag.Name): - contracts, err = compiler.CompileVyper(c.GlobalString(vyperFlag.Name), c.GlobalString(vyFlag.Name)) + output, err := compiler.CompileVyper(c.GlobalString(vyperFlag.Name), c.GlobalString(vyFlag.Name)) if err != nil { utils.Fatalf("Failed to build Vyper contract: %v", err) } + contracts = make(map[string]*compiler.Contract) + for n, contract := range output { + name := n + // Sanitize the combined json names to match the + // format expected by solidity. + if !strings.Contains(n, ":") { + // Remove extra path components + name = abi.ToCamelCase(strings.TrimSuffix(filepath.Base(name), ".vy")) + } + contracts[name] = contract + } + case c.GlobalIsSet(jsonFlag.Name): jsonOutput, err := ioutil.ReadFile(c.GlobalString(jsonFlag.Name)) if err != nil {