Skip to content

Commit

Permalink
Fix
Browse files Browse the repository at this point in the history
  • Loading branch information
ferranbt committed Jan 9, 2024
1 parent fd8574d commit 930a76b
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 13 deletions.
34 changes: 34 additions & 0 deletions .github/workflows/check-gen-code.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: CI
on:
push:
branches:
- main
pull_request:

env:
FOUNDRY_PROFILE: ci

jobs:
run-ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Install deps
run: forge install

- name: Generate forge-gen
run: go run tools/forge-gen --apply

- name: Compare the expected and actual src/forge/ directories
run: |
if [ "$(git diff --ignore-space-at-eol src/forge/ | wc -l)" -gt "0" ]; then
echo "Detected uncommitted changes after build. See status below:"
git diff
exit 1
fi
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: CI
on:
push:
branches:
- master
- main
pull_request:

env:
Expand Down
2 changes: 1 addition & 1 deletion src/forge/Registry.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ library Registry {
function enableLib(address addr) public {
// code for Wrapper
bytes memory code =
hex"608060405234801561001057600080fd5b506004361061002b5760003560e01c8063671ff786146100a1575b6040516bffffffffffffffffffffffff193060601b1660208201526000906100959060340160408051808303601f19018152602036601f8101829004820285018201909352828452909291600091819084018382808284376000920191909152506100ca92505050565b90508081518060208301f35b6100b46100af366004610491565b61025e565b6040516100c19190610561565b60405180910390f35b606060006100d78461025e565b905060006100e48461025e565b60408051600480825260a0820190925291925060009190816020015b60608152602001906001900390816101005790505090506040518060400160405280600a8152602001690e6eac2ecca5acecae8d60b31b8152508160008151811061014d5761014d61057b565b602002602001018190525060405180604001604052806005815260200164666f72676560d81b815250816001815181106101895761018961057b565b602002602001018190525082816002815181106101a8576101a861057b565b602002602001018190525081816003815181106101c7576101c761057b565b6020908102919091010152604051638916046760e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063891604679061020c908590600401610591565b600060405180830381865afa158015610229573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261025191908101906105f3565b9450505050505b92915050565b60606000825160026102709190610680565b67ffffffffffffffff81111561028857610288610422565b6040519080825280601f01601f1916602001820160405280156102b2576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156103f8578182518683815181106102fe576102fe61057b565b0160200151610310919060f81c6106ad565b815181106103205761032061057b565b01602001516001600160f81b0319168361033b836002610680565b8151811061034b5761034b61057b565b60200101906001600160f81b031916908160001a9053508182518683815181106103775761037761057b565b0160200151610389919060f81c6106c1565b815181106103995761039961057b565b01602001516001600160f81b031916836103b4836002610680565b6103bf9060016106d5565b815181106103cf576103cf61057b565b60200101906001600160f81b031916908160001a905350806103f0816106e8565b9150506102e0565b508160405160200161040a9190610701565b60405160208183030381529060405292505050919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561046157610461610422565b604052919050565b600067ffffffffffffffff82111561048357610483610422565b50601f01601f191660200190565b6000602082840312156104a357600080fd5b813567ffffffffffffffff8111156104ba57600080fd5b8201601f810184136104cb57600080fd5b80356104de6104d982610469565b610438565b8181528560208385010111156104f357600080fd5b81602084016020830137600091810160200191909152949350505050565b60005b8381101561052c578181015183820152602001610514565b50506000910152565b6000815180845261054d816020860160208601610511565b601f01601f19169290920160200192915050565b6020815260006105746020830184610535565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156105e657603f198886030184526105d4858351610535565b945092850192908501906001016105b8565b5092979650505050505050565b60006020828403121561060557600080fd5b815167ffffffffffffffff81111561061c57600080fd5b8201601f8101841361062d57600080fd5b805161063b6104d982610469565b81815285602083850101111561065057600080fd5b610661826020830160208601610511565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176102585761025861066a565b634e487b7160e01b600052601260045260246000fd5b6000826106bc576106bc610697565b500490565b6000826106d0576106d0610697565b500690565b808201808211156102585761025861066a565b6000600182016106fa576106fa61066a565b5060010190565b61060f60f31b81526000825161071e816002850160208701610511565b919091016002019291505056fea2646970667358221220918efca7b62d20c0fa19067dd7a091ef7cf76b94f70985c100a506284cf9d54664736f6c63430008130033";
hex"608060405234801561001057600080fd5b506004361061002b5760003560e01c8063671ff786146100a1575b6040516bffffffffffffffffffffffff193060601b1660208201526000906100959060340160408051808303601f19018152602036601f8101829004820285018201909352828452909291600091819084018382808284376000920191909152506100ca92505050565b90508081518060208301f35b6100b46100af366004610487565b61025e565b6040516100c19190610557565b60405180910390f35b606060006100d78461025e565b905060006100e48461025e565b60408051600480825260a0820190925291925060009190816020015b60608152602001906001900390816101005790505090506040518060400160405280600a8152602001690e6eac2ecca5acecae8d60b31b8152508160008151811061014d5761014d610571565b602002602001018190525060405180604001604052806005815260200164666f72676560d81b8152508160018151811061018957610189610571565b602002602001018190525082816002815181106101a8576101a8610571565b602002602001018190525081816003815181106101c7576101c7610571565b6020908102919091010152604051638916046760e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063891604679061020c908590600401610587565b600060405180830381865afa158015610229573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261025191908101906105eb565b9450505050505b92915050565b60606000825160026102709190610678565b67ffffffffffffffff81111561028857610288610418565b6040519080825280601f01601f1916602001820160405280156102b2576020820181803683370190505b5060408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015290915060005b84518110156103ee578182518683815181106102fe576102fe610571565b0160200151610310919060f81c6106a5565b8151811061032057610320610571565b01602001516001600160f81b0319168361033b836002610678565b8151811061034b5761034b610571565b60200101906001600160f81b031916908160001a90535081825186838151811061037757610377610571565b0160200151610389919060f81c6106b9565b8151811061039957610399610571565b01602001516001600160f81b031916836103b4836002610678565b6103bf9060016106cd565b815181106103cf576103cf610571565b60200101906001600160f81b031916908160001a9053506001016102e0565b508160405160200161040091906106e0565b60405160208183030381529060405292505050919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561045757610457610418565b604052919050565b600067ffffffffffffffff82111561047957610479610418565b50601f01601f191660200190565b60006020828403121561049957600080fd5b813567ffffffffffffffff8111156104b057600080fd5b8201601f810184136104c157600080fd5b80356104d46104cf8261045f565b61042e565b8181528560208385010111156104e957600080fd5b81602084016020830137600091810160200191909152949350505050565b60005b8381101561052257818101518382015260200161050a565b50506000910152565b60008151808452610543816020860160208601610507565b601f01601f19169290920160200192915050565b60208152600061056a602083018461052b565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156105de57603f198886030184526105cc85835161052b565b945092850192908501906001016105b0565b5092979650505050505050565b6000602082840312156105fd57600080fd5b815167ffffffffffffffff81111561061457600080fd5b8201601f8101841361062557600080fd5b80516106336104cf8261045f565b81815285602083850101111561064857600080fd5b610659826020830160208601610507565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761025857610258610662565b634e487b7160e01b600052601260045260246000fd5b6000826106b4576106b461068f565b500490565b6000826106c8576106c861068f565b500690565b8082018082111561025857610258610662565b61060f60f31b8152600082516106fd816002850160208701610507565b919091016002019291505056fea164736f6c6343000817000a";
vm.etch(addr, code);
}

Expand Down
6 changes: 6 additions & 0 deletions tools/forge-gen/foundry.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[profile.default]
solc_version = "0.8.23"
src = "../../src"
out = "./out"
libs = ["../../lib"]
bytecode_hash = "none"
41 changes: 30 additions & 11 deletions tools/forge-gen/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ import (
"html/template"
"os"
"os/exec"
"path/filepath"
"regexp"
"runtime"
"strings"
)

Expand Down Expand Up @@ -85,7 +87,7 @@ func applyTemplate(bytecode string, precompileNames []string) error {
}

if applyFlag {
if err := os.WriteFile("./src/forge/Registry.sol", []byte(str), 0644); err != nil {
if err := os.WriteFile(resolvePath("../../src/forge/Registry.sol"), []byte(str), 0644); err != nil {
return err
}
} else {
Expand All @@ -95,7 +97,12 @@ func applyTemplate(bytecode string, precompileNames []string) error {
}

func getForgeConnectorBytecode() (string, error) {
abiContent, err := os.ReadFile("./out/Connector.sol/Connector.json")
// compile the Connector contract with forge and the local configuration
if _, err := execForgeCommand([]string{"build", "--config-path", resolvePath("./foundry.toml")}, ""); err != nil {
return "", err
}

abiContent, err := os.ReadFile(resolvePath("./out/Connector.sol/Connector.json"))
if err != nil {
return "", err
}
Expand Down Expand Up @@ -138,31 +145,43 @@ func getPrecompileNames() ([]string, error) {
}

func formatSolidity(code string) (string, error) {
// Check if "forge" command is available in PATH
return execForgeCommand([]string{"fmt", "--raw", "-"}, code)
}

func execForgeCommand(args []string, stdin string) (string, error) {
_, err := exec.LookPath("forge")
if err != nil {
return "", fmt.Errorf("forge command not found in PATH: %v", err)
}

// Command and arguments for forge fmt
command := "forge"
args := []string{"fmt", "--raw", "-"}

// Create a command to run the forge fmt command
cmd := exec.Command(command, args...)
// Create a command to run the forge command
cmd := exec.Command("forge", args...)

// Set up input from stdin
cmd.Stdin = bytes.NewBufferString(code)
if stdin != "" {
cmd.Stdin = bytes.NewBufferString(stdin)
}

// Set up output buffer
var outBuf, errBuf bytes.Buffer
cmd.Stdout = &outBuf
cmd.Stderr = &errBuf

// Run the command
if err = cmd.Run(); err != nil {
if err := cmd.Run(); err != nil {
return "", fmt.Errorf("error running command: %v", err)
}

return outBuf.String(), nil
}

func resolvePath(path string) string {
// Get the caller's file path.
_, filename, _, _ := runtime.Caller(1)

// Resolve the directory of the caller's file.
callerDir := filepath.Dir(filename)

// Construct the absolute path to the target file.
return filepath.Join(callerDir, path)
}

0 comments on commit 930a76b

Please sign in to comment.