From b7e7225485ae05f33c49fbd8e9c2235290d2ced6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=BF=97=E5=BC=BA?= <652732310@qq.com> Date: Wed, 16 Mar 2022 00:12:19 +0800 Subject: [PATCH 1/2] refactor compiler.Solidity --- common/compiler/solidity.go | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/common/compiler/solidity.go b/common/compiler/solidity.go index 01de3d4c65f3..81e65cb99120 100644 --- a/common/compiler/solidity.go +++ b/common/compiler/solidity.go @@ -31,6 +31,7 @@ import ( type Solidity struct { Path, Version, FullVersion string Major, Minor, Patch int + ExtraAllowedPath []string } // --combined-output format @@ -58,11 +59,19 @@ type solcOutputV8 struct { Version string } +func (s *Solidity) allowedPaths() string { + paths := []string{".", "./", "../"} // default to support relative paths + if len(s.ExtraAllowedPath) > 0 { + paths = append(paths, s.ExtraAllowedPath...) + } + return strings.Join(paths, ", ") +} + func (s *Solidity) makeArgs() []string { p := []string{ "--combined-json", "bin,bin-runtime,srcmap,srcmap-runtime,abi,userdoc,devdoc", - "--optimize", // code optimizer switched on - "--allow-paths", "., ./, ../", // default to support relative paths + "--optimize", // code optimizer switched on + "--allow-paths", s.allowedPaths(), } if s.Major > 0 || s.Minor > 4 || s.Patch > 6 { p[1] += ",metadata,hashes" @@ -108,10 +117,7 @@ func CompileSolidityString(solc, source string) (map[string]*Contract, error) { if err != nil { return nil, err } - args := append(s.makeArgs(), "--") - cmd := exec.Command(s.Path, append(args, "-")...) - cmd.Stdin = strings.NewReader(source) - return s.run(cmd, source) + return s.CompileSource(source) } // CompileSolidity compiles all given Solidity source files. @@ -119,11 +125,23 @@ func CompileSolidity(solc string, sourcefiles ...string) (map[string]*Contract, if len(sourcefiles) == 0 { return nil, errors.New("solc: no source files") } - source, err := slurpFiles(sourcefiles) + s, err := SolidityVersion(solc) if err != nil { return nil, err } - s, err := SolidityVersion(solc) + + return s.CompileFiles(sourcefiles...) +} + +func (s *Solidity) CompileSource(source string) (map[string]*Contract, error) { + args := append(s.makeArgs(), "--") + cmd := exec.Command(s.Path, append(args, "-")...) + cmd.Stdin = strings.NewReader(source) + return s.run(cmd, source) +} + +func (s *Solidity) CompileFiles(sourcefiles ...string) (map[string]*Contract, error) { + source, err := slurpFiles(sourcefiles) if err != nil { return nil, err } From 5268ca9a0c4f4394845230cad051ab2ac335b7aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=BF=97=E5=BC=BA?= <652732310@qq.com> Date: Mon, 21 Mar 2022 16:20:04 +0800 Subject: [PATCH 2/2] add docs --- common/compiler/solidity.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/compiler/solidity.go b/common/compiler/solidity.go index 81e65cb99120..ffda0193c853 100644 --- a/common/compiler/solidity.go +++ b/common/compiler/solidity.go @@ -133,6 +133,7 @@ func CompileSolidity(solc string, sourcefiles ...string) (map[string]*Contract, return s.CompileFiles(sourcefiles...) } +// CompileSource builds and returns all the contracts contained within a source string. func (s *Solidity) CompileSource(source string) (map[string]*Contract, error) { args := append(s.makeArgs(), "--") cmd := exec.Command(s.Path, append(args, "-")...) @@ -140,6 +141,7 @@ func (s *Solidity) CompileSource(source string) (map[string]*Contract, error) { return s.run(cmd, source) } +// CompileFiles compiles all given Solidity source files. func (s *Solidity) CompileFiles(sourcefiles ...string) (map[string]*Contract, error) { source, err := slurpFiles(sourcefiles) if err != nil {