Skip to content

Commit 94c8de0

Browse files
authored
Merge pull request #24936 from holiman/no_compilers
common/compiler, cmd/abigen: remove solc/vyper compiler integration
2 parents ba47d80 + 8541ddb commit 94c8de0

File tree

8 files changed

+3
-485
lines changed

8 files changed

+3
-485
lines changed

cmd/abigen/main.go

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,9 @@ import (
2121
"fmt"
2222
"io"
2323
"os"
24-
"path/filepath"
2524
"regexp"
2625
"strings"
2726

28-
"github.com/ethereum/go-ethereum/accounts/abi"
2927
"github.com/ethereum/go-ethereum/accounts/abi/bind"
3028
"github.com/ethereum/go-ethereum/cmd/utils"
3129
"github.com/ethereum/go-ethereum/common/compiler"
@@ -59,24 +57,6 @@ var (
5957
Name: "combined-json",
6058
Usage: "Path to the combined-json file generated by compiler",
6159
}
62-
solFlag = cli.StringFlag{
63-
Name: "sol",
64-
Usage: "Path to the Ethereum contract Solidity source to build and bind",
65-
}
66-
solcFlag = cli.StringFlag{
67-
Name: "solc",
68-
Usage: "Solidity compiler to use if source builds are requested",
69-
Value: "solc",
70-
}
71-
vyFlag = cli.StringFlag{
72-
Name: "vy",
73-
Usage: "Path to the Ethereum contract Vyper source to build and bind",
74-
}
75-
vyperFlag = cli.StringFlag{
76-
Name: "vyper",
77-
Usage: "Vyper compiler to use if source builds are requested",
78-
Value: "vyper",
79-
}
8060
excFlag = cli.StringFlag{
8161
Name: "exc",
8262
Usage: "Comma separated types to exclude from binding",
@@ -107,10 +87,6 @@ func init() {
10787
binFlag,
10888
typeFlag,
10989
jsonFlag,
110-
solFlag,
111-
solcFlag,
112-
vyFlag,
113-
vyperFlag,
11490
excFlag,
11591
pkgFlag,
11692
outFlag,
@@ -122,7 +98,7 @@ func init() {
12298
}
12399

124100
func abigen(c *cli.Context) error {
125-
utils.CheckExclusive(c, abiFlag, jsonFlag, solFlag, vyFlag) // Only one source can be selected.
101+
utils.CheckExclusive(c, abiFlag, jsonFlag) // Only one source can be selected.
126102
if c.GlobalString(pkgFlag.Name) == "" {
127103
utils.Fatalf("No destination package specified (--pkg)")
128104
}
@@ -186,33 +162,9 @@ func abigen(c *cli.Context) error {
186162
for _, kind := range strings.Split(c.GlobalString(excFlag.Name), ",") {
187163
exclude[strings.ToLower(kind)] = true
188164
}
189-
var err error
190165
var contracts map[string]*compiler.Contract
191166

192-
switch {
193-
case c.GlobalIsSet(solFlag.Name):
194-
contracts, err = compiler.CompileSolidity(c.GlobalString(solcFlag.Name), c.GlobalString(solFlag.Name))
195-
if err != nil {
196-
utils.Fatalf("Failed to build Solidity contract: %v", err)
197-
}
198-
case c.GlobalIsSet(vyFlag.Name):
199-
output, err := compiler.CompileVyper(c.GlobalString(vyperFlag.Name), c.GlobalString(vyFlag.Name))
200-
if err != nil {
201-
utils.Fatalf("Failed to build Vyper contract: %v", err)
202-
}
203-
contracts = make(map[string]*compiler.Contract)
204-
for n, contract := range output {
205-
name := n
206-
// Sanitize the combined json names to match the
207-
// format expected by solidity.
208-
if !strings.Contains(n, ":") {
209-
// Remove extra path components
210-
name = abi.ToCamelCase(strings.TrimSuffix(filepath.Base(name), ".vy"))
211-
}
212-
contracts[name] = contract
213-
}
214-
215-
case c.GlobalIsSet(jsonFlag.Name):
167+
if c.GlobalIsSet(jsonFlag.Name) {
216168
jsonOutput, err := os.ReadFile(c.GlobalString(jsonFlag.Name))
217169
if err != nil {
218170
utils.Fatalf("Failed to read combined-json from compiler: %v", err)

common/compiler/helpers.go

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,6 @@
1717
// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper).
1818
package compiler
1919

20-
import (
21-
"bytes"
22-
"os"
23-
"regexp"
24-
)
25-
26-
var versionRegexp = regexp.MustCompile(`([0-9]+)\.([0-9]+)\.([0-9]+)`)
27-
2820
// Contract contains information about a compiled contract, alongside its code and runtime code.
2921
type Contract struct {
3022
Code string `json:"code"`
@@ -51,15 +43,3 @@ type ContractInfo struct {
5143
DeveloperDoc interface{} `json:"developerDoc"`
5244
Metadata string `json:"metadata"`
5345
}
54-
55-
func slurpFiles(files []string) (string, error) {
56-
var concat bytes.Buffer
57-
for _, file := range files {
58-
content, err := os.ReadFile(file)
59-
if err != nil {
60-
return "", err
61-
}
62-
concat.Write(content)
63-
}
64-
return concat.String(), nil
65-
}

common/compiler/solidity.go

Lines changed: 1 addition & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,14 @@
1414
// You should have received a copy of the GNU Lesser General Public License
1515
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
1616

17-
// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper).
17+
// Package compiler wraps the ABI compilation outputs.
1818
package compiler
1919

2020
import (
21-
"bytes"
2221
"encoding/json"
23-
"errors"
2422
"fmt"
25-
"os/exec"
26-
"strconv"
27-
"strings"
2823
)
2924

30-
// Solidity contains information about the solidity compiler.
31-
type Solidity struct {
32-
Path, Version, FullVersion string
33-
Major, Minor, Patch int
34-
ExtraAllowedPath []string
35-
}
36-
3725
// --combined-output format
3826
type solcOutput struct {
3927
Contracts map[string]struct {
@@ -59,109 +47,6 @@ type solcOutputV8 struct {
5947
Version string
6048
}
6149

62-
func (s *Solidity) allowedPaths() string {
63-
paths := []string{".", "./", "../"} // default to support relative paths
64-
if len(s.ExtraAllowedPath) > 0 {
65-
paths = append(paths, s.ExtraAllowedPath...)
66-
}
67-
return strings.Join(paths, ", ")
68-
}
69-
70-
func (s *Solidity) makeArgs() []string {
71-
p := []string{
72-
"--combined-json", "bin,bin-runtime,srcmap,srcmap-runtime,abi,userdoc,devdoc",
73-
"--optimize", // code optimizer switched on
74-
"--allow-paths", s.allowedPaths(),
75-
}
76-
if s.Major > 0 || s.Minor > 4 || s.Patch > 6 {
77-
p[1] += ",metadata,hashes"
78-
}
79-
return p
80-
}
81-
82-
// SolidityVersion runs solc and parses its version output.
83-
func SolidityVersion(solc string) (*Solidity, error) {
84-
if solc == "" {
85-
solc = "solc"
86-
}
87-
var out bytes.Buffer
88-
cmd := exec.Command(solc, "--version")
89-
cmd.Stdout = &out
90-
err := cmd.Run()
91-
if err != nil {
92-
return nil, err
93-
}
94-
matches := versionRegexp.FindStringSubmatch(out.String())
95-
if len(matches) != 4 {
96-
return nil, fmt.Errorf("can't parse solc version %q", out.String())
97-
}
98-
s := &Solidity{Path: cmd.Path, FullVersion: out.String(), Version: matches[0]}
99-
if s.Major, err = strconv.Atoi(matches[1]); err != nil {
100-
return nil, err
101-
}
102-
if s.Minor, err = strconv.Atoi(matches[2]); err != nil {
103-
return nil, err
104-
}
105-
if s.Patch, err = strconv.Atoi(matches[3]); err != nil {
106-
return nil, err
107-
}
108-
return s, nil
109-
}
110-
111-
// CompileSolidityString builds and returns all the contracts contained within a source string.
112-
func CompileSolidityString(solc, source string) (map[string]*Contract, error) {
113-
if len(source) == 0 {
114-
return nil, errors.New("solc: empty source string")
115-
}
116-
s, err := SolidityVersion(solc)
117-
if err != nil {
118-
return nil, err
119-
}
120-
return s.CompileSource(source)
121-
}
122-
123-
// CompileSolidity compiles all given Solidity source files.
124-
func CompileSolidity(solc string, sourcefiles ...string) (map[string]*Contract, error) {
125-
if len(sourcefiles) == 0 {
126-
return nil, errors.New("solc: no source files")
127-
}
128-
s, err := SolidityVersion(solc)
129-
if err != nil {
130-
return nil, err
131-
}
132-
133-
return s.CompileFiles(sourcefiles...)
134-
}
135-
136-
// CompileSource builds and returns all the contracts contained within a source string.
137-
func (s *Solidity) CompileSource(source string) (map[string]*Contract, error) {
138-
args := append(s.makeArgs(), "--")
139-
cmd := exec.Command(s.Path, append(args, "-")...)
140-
cmd.Stdin = strings.NewReader(source)
141-
return s.run(cmd, source)
142-
}
143-
144-
// CompileFiles compiles all given Solidity source files.
145-
func (s *Solidity) CompileFiles(sourcefiles ...string) (map[string]*Contract, error) {
146-
source, err := slurpFiles(sourcefiles)
147-
if err != nil {
148-
return nil, err
149-
}
150-
args := append(s.makeArgs(), "--")
151-
cmd := exec.Command(s.Path, append(args, sourcefiles...)...)
152-
return s.run(cmd, source)
153-
}
154-
155-
func (s *Solidity) run(cmd *exec.Cmd, source string) (map[string]*Contract, error) {
156-
var stderr, stdout bytes.Buffer
157-
cmd.Stderr = &stderr
158-
cmd.Stdout = &stdout
159-
if err := cmd.Run(); err != nil {
160-
return nil, fmt.Errorf("solc: %v\n%s", err, stderr.Bytes())
161-
}
162-
return ParseCombinedJSON(stdout.Bytes(), source, s.Version, s.Version, strings.Join(s.makeArgs(), " "))
163-
}
164-
16550
// ParseCombinedJSON takes the direct output of a solc --combined-output run and
16651
// parses it into a map of string contract name to Contract structs. The
16752
// provided source, language and compiler version, and compiler options are all

common/compiler/solidity_test.go

Lines changed: 0 additions & 78 deletions
This file was deleted.

common/compiler/test.v.py

Lines changed: 0 additions & 3 deletions
This file was deleted.

common/compiler/test_bad.v.py

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)