Skip to content

Commit

Permalink
common/compiler: add extra include paths to solidity compiler (ethere…
Browse files Browse the repository at this point in the history
…um#24541)

This PR adds a ExtraAllowedPath field to Solidity and exposes two APIs: CompileSource and CompileFiles, which were hidden inside CompileSolidityString and CompileSolidity before.
  • Loading branch information
zhiqiangxu authored and cp-wjhan committed Nov 28, 2022
1 parent a369377 commit 7e68b72
Showing 1 changed file with 28 additions and 8 deletions.
36 changes: 28 additions & 8 deletions common/compiler/solidity.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
type Solidity struct {
Path, Version, FullVersion string
Major, Minor, Patch int
ExtraAllowedPath []string
}

// --combined-output format
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -108,22 +117,33 @@ 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.
func CompileSolidity(solc string, sourcefiles ...string) (map[string]*Contract, error) {
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...)
}

// 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, "-")...)
cmd.Stdin = strings.NewReader(source)
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 {
return nil, err
}
Expand Down

0 comments on commit 7e68b72

Please sign in to comment.