diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 905503de6026..58edd3fa9c2e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -7,4 +7,5 @@ * @ava-labs/platform-avalanchego /graft/coreth @ava-labs/platform-evm +/graft/evm @ava-labs/platform-evm /graft/subnet-evm @ava-labs/platform-evm diff --git a/.github/workflows/evm-ci.yml b/.github/workflows/evm-ci.yml new file mode 100644 index 000000000000..80c9651ad61d --- /dev/null +++ b/.github/workflows/evm-ci.yml @@ -0,0 +1,39 @@ +name: EVM Shared +on: + push: + branches: + - master + pull_request: + merge_group: + types: [checks_requested] + +jobs: + lint_test: + name: Lint + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./graft/evm + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/setup-go-for-project + - name: Run all lint checks + run: ../../scripts/run_task.sh lint-all-ci + - name: Check go.mod and go.sum are up-to-date + run: ../../scripts/run_task.sh check-go-mod-tidy + + unit_test: + name: Unit Tests (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + defaults: + run: + working-directory: ./graft/evm + strategy: + fail-fast: false + matrix: + os: [macos-latest, ubuntu-22.04, ubuntu-latest] + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/setup-go-for-project + - run: ../../scripts/run_task.sh build-test + - run: ../../scripts/run_task.sh coverage \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index e83e6c9b5076..436a8af47e78 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,6 +13,7 @@ COPY go.mod . COPY go.sum . COPY graft/coreth ./graft/coreth COPY graft/subnet-evm ./graft/subnet-evm +COPY graft/evm ./graft/evm RUN go mod download # Copy the code into the container diff --git a/go.mod b/go.mod index 39447b1db617..ed08b5e0dd22 100644 --- a/go.mod +++ b/go.mod @@ -87,6 +87,8 @@ require ( k8s.io/utils v0.0.0-20230726121419-3b25d923346b ) +require github.com/ava-labs/avalanchego/graft/evm v0.0.0-00010101000000-000000000000 // indirect + require ( github.com/Microsoft/go-winio v0.6.1 // indirect github.com/VictoriaMetrics/fastcache v1.12.1 // indirect @@ -209,3 +211,5 @@ tool ( replace github.com/ava-labs/avalanchego/graft/coreth => ./graft/coreth replace github.com/ava-labs/avalanchego/graft/subnet-evm => ./graft/subnet-evm + +replace github.com/ava-labs/avalanchego/graft/evm => ./graft/evm diff --git a/graft/coreth/Taskfile.yml b/graft/coreth/Taskfile.yml index ca109e533a12..dee5c4f28dcd 100644 --- a/graft/coreth/Taskfile.yml +++ b/graft/coreth/Taskfile.yml @@ -70,7 +70,7 @@ tasks: lint: desc: Run golangci-lint and check for allowed Ethereum imports in Go code - cmd: ../evm-shared/scripts/lint.sh + cmd: ../evm/scripts/lint.sh lint-all: desc: Runs all lint checks in parallel @@ -92,7 +92,7 @@ tasks: lint-fix: desc: Run golangci-lint with auto-fix where possible - cmd: ../evm-shared/scripts/lint_fix.sh + cmd: ../evm/scripts/lint_fix.sh shellcheck: desc: Run shellcheck static analysis on all shell scripts with version management diff --git a/graft/coreth/ethclient/simulated/backend.go b/graft/coreth/ethclient/simulated/backend.go index 08c4aa63f740..fcb205c9add3 100644 --- a/graft/coreth/ethclient/simulated/backend.go +++ b/graft/coreth/ethclient/simulated/backend.go @@ -33,7 +33,6 @@ import ( "time" "github.com/ava-labs/avalanchego/graft/coreth/consensus/dummy" - "github.com/ava-labs/avalanchego/graft/coreth/constants" "github.com/ava-labs/avalanchego/graft/coreth/core" "github.com/ava-labs/avalanchego/graft/coreth/eth" "github.com/ava-labs/avalanchego/graft/coreth/eth/ethconfig" @@ -42,6 +41,7 @@ import ( "github.com/ava-labs/avalanchego/graft/coreth/node" "github.com/ava-labs/avalanchego/graft/coreth/params" "github.com/ava-labs/avalanchego/graft/coreth/rpc" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/utils/timer/mockable" ethereum "github.com/ava-labs/libevm" "github.com/ava-labs/libevm/common" diff --git a/graft/coreth/go.mod b/graft/coreth/go.mod index 23b145b12e86..eb965913a091 100644 --- a/graft/coreth/go.mod +++ b/graft/coreth/go.mod @@ -10,6 +10,7 @@ go 1.24.9 require ( github.com/VictoriaMetrics/fastcache v1.12.1 github.com/ava-labs/avalanchego v1.14.1-0.20251120155522-df4a8e531761 + github.com/ava-labs/avalanchego/graft/evm v0.0.0-00010101000000-000000000000 github.com/ava-labs/firewood-go-ethhash/ffi v0.0.16 github.com/ava-labs/libevm v1.13.15-0.20251016142715-1bccf4f2ddb2 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc @@ -184,3 +185,5 @@ tool ( ) replace github.com/ava-labs/avalanchego => ../../ + +replace github.com/ava-labs/avalanchego/graft/evm => ../evm diff --git a/graft/coreth/plugin/evm/vm.go b/graft/coreth/plugin/evm/vm.go index 63e8642c7f8d..e1a926874715 100644 --- a/graft/coreth/plugin/evm/vm.go +++ b/graft/coreth/plugin/evm/vm.go @@ -43,7 +43,6 @@ import ( "github.com/ava-labs/avalanchego/database" "github.com/ava-labs/avalanchego/database/versiondb" "github.com/ava-labs/avalanchego/graft/coreth/consensus/dummy" - "github.com/ava-labs/avalanchego/graft/coreth/constants" "github.com/ava-labs/avalanchego/graft/coreth/core" "github.com/ava-labs/avalanchego/graft/coreth/core/txpool" "github.com/ava-labs/avalanchego/graft/coreth/eth" @@ -65,6 +64,7 @@ import ( "github.com/ava-labs/avalanchego/graft/coreth/sync/handlers" "github.com/ava-labs/avalanchego/graft/coreth/triedb/hashdb" "github.com/ava-labs/avalanchego/graft/coreth/warp" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/ids" "github.com/ava-labs/avalanchego/network/p2p" "github.com/ava-labs/avalanchego/network/p2p/acp118" diff --git a/graft/coreth/plugin/evm/vm_test.go b/graft/coreth/plugin/evm/vm_test.go index ca4c6bcf655e..7bbd216e58d9 100644 --- a/graft/coreth/plugin/evm/vm_test.go +++ b/graft/coreth/plugin/evm/vm_test.go @@ -28,7 +28,6 @@ import ( "github.com/ava-labs/avalanchego/database" "github.com/ava-labs/avalanchego/database/memdb" "github.com/ava-labs/avalanchego/graft/coreth/consensus/dummy" - "github.com/ava-labs/avalanchego/graft/coreth/constants" "github.com/ava-labs/avalanchego/graft/coreth/core" "github.com/ava-labs/avalanchego/graft/coreth/eth" "github.com/ava-labs/avalanchego/graft/coreth/miner" @@ -45,6 +44,7 @@ import ( "github.com/ava-labs/avalanchego/graft/coreth/rpc" "github.com/ava-labs/avalanchego/graft/coreth/utils" "github.com/ava-labs/avalanchego/graft/coreth/utils/utilstest" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/ids" "github.com/ava-labs/avalanchego/snow/snowtest" "github.com/ava-labs/avalanchego/upgrade" diff --git a/graft/coreth/plugin/evm/vmtest/test_syncervm.go b/graft/coreth/plugin/evm/vmtest/test_syncervm.go index 2a4d745cb714..14b448d57e3a 100644 --- a/graft/coreth/plugin/evm/vmtest/test_syncervm.go +++ b/graft/coreth/plugin/evm/vmtest/test_syncervm.go @@ -23,7 +23,6 @@ import ( "github.com/ava-labs/avalanchego/database/prefixdb" "github.com/ava-labs/avalanchego/graft/coreth/consensus/dummy" - "github.com/ava-labs/avalanchego/graft/coreth/constants" "github.com/ava-labs/avalanchego/graft/coreth/core" "github.com/ava-labs/avalanchego/graft/coreth/core/coretest" "github.com/ava-labs/avalanchego/graft/coreth/params/paramstest" @@ -32,6 +31,7 @@ import ( "github.com/ava-labs/avalanchego/graft/coreth/plugin/evm/vmsync" "github.com/ava-labs/avalanchego/graft/coreth/sync/statesync/statesynctest" "github.com/ava-labs/avalanchego/graft/coreth/utils/utilstest" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/ids" "github.com/ava-labs/avalanchego/snow" "github.com/ava-labs/avalanchego/snow/engine/enginetest" diff --git a/graft/coreth/plugin/evm/wrapped_block.go b/graft/coreth/plugin/evm/wrapped_block.go index 2db44fa8b263..c7600a9bf2cc 100644 --- a/graft/coreth/plugin/evm/wrapped_block.go +++ b/graft/coreth/plugin/evm/wrapped_block.go @@ -18,7 +18,6 @@ import ( "github.com/ava-labs/libevm/rlp" "github.com/ava-labs/libevm/trie" - "github.com/ava-labs/avalanchego/graft/coreth/constants" "github.com/ava-labs/avalanchego/graft/coreth/core" "github.com/ava-labs/avalanchego/graft/coreth/params" "github.com/ava-labs/avalanchego/graft/coreth/params/extras" @@ -28,6 +27,7 @@ import ( "github.com/ava-labs/avalanchego/graft/coreth/plugin/evm/upgrade/ap0" "github.com/ava-labs/avalanchego/graft/coreth/plugin/evm/upgrade/ap1" "github.com/ava-labs/avalanchego/graft/coreth/precompile/precompileconfig" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/ids" "github.com/ava-labs/avalanchego/snow/consensus/snowman" "github.com/ava-labs/avalanchego/snow/engine/snowman/block" diff --git a/graft/coreth/precompile/modules/registerer.go b/graft/coreth/precompile/modules/registerer.go index e84da42062ce..79379c755105 100644 --- a/graft/coreth/precompile/modules/registerer.go +++ b/graft/coreth/precompile/modules/registerer.go @@ -10,8 +10,8 @@ import ( "github.com/ava-labs/libevm/common" - "github.com/ava-labs/avalanchego/graft/coreth/constants" "github.com/ava-labs/avalanchego/graft/coreth/utils" + "github.com/ava-labs/avalanchego/graft/evm/constants" ) var ( diff --git a/graft/coreth/precompile/modules/registerer_test.go b/graft/coreth/precompile/modules/registerer_test.go index d84220b87e1a..238ad218e854 100644 --- a/graft/coreth/precompile/modules/registerer_test.go +++ b/graft/coreth/precompile/modules/registerer_test.go @@ -10,7 +10,7 @@ import ( "github.com/ava-labs/libevm/common" "github.com/stretchr/testify/require" - "github.com/ava-labs/avalanchego/graft/coreth/constants" + "github.com/ava-labs/avalanchego/graft/evm/constants" ) func TestInsertSortedByAddress(t *testing.T) { diff --git a/graft/evm/.golangci.yml b/graft/evm/.golangci.yml new file mode 100644 index 000000000000..c85b064589b8 --- /dev/null +++ b/graft/evm/.golangci.yml @@ -0,0 +1,77 @@ +version: "2" +run: + tests: true + +linters: + default: none + enable: + - bidichk + - copyloopvar + - durationcheck + - gocheckcompilerdirectives + - govet + - ineffassign + - mirror + - misspell + - reassign + # - revive # only certain checks enabled + - staticcheck + - unconvert + - unused + - whitespace + settings: + goconst: + min-len: 3 # minimum length of string constant + min-occurrences: 6 # minimum number of occurrences + staticcheck: + checks: + - all + + # There's a lot of legacy code that triggers these warnings after upgrading golangci-lint. + # These checks are removed. + - -QF1001 # Apply De Morgan’s law + - -QF1002 # Convert an untagged switch comparing the same variable into a “tagged” switch + - -QF1003 # Convert if / else-if chains comparing the same variable into a tagged switch + - -QF1006 # Lift if + break into loop condition + - -QF1008 # Omit embedded fields from selector expression + - -QF1010 # Convert slice of bytes to string when printing it + - -SA1019 # Use of deprecated identifiers: triggers when you import or use something marked deprecated. + - -SA4009 # A function argument is overwritten before its first use. + - -SA9003 # Empty body in an if or else branch. + - -ST1003 # Poorly chosen identifier. + - -ST1008 # A function’s error value should be its last return value. + - -ST1016 # Use consistent method receiver names (e.g. avoid mixing `s *S`, `s S`, `t *T` in same type). + + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - unused + # Exclude unused geth symbols from ethclient/ethclient.go to simplify upgrading Geth to a newer version. + path: ethclient\/ethclient\.go + text: (type `rpcProgress`|func `\(\*rpcProgress\)\.toSyncProgress`) is unused + - linters: + - goconst + path: (.+)_test\.go + paths: + - third_party$ + - builtin$ + - examples$ + +formatters: + enable: + - goimports + settings: + gofmt: + simplify: true + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/graft/evm/Taskfile.yml b/graft/evm/Taskfile.yml new file mode 100644 index 000000000000..ccb2526b00f8 --- /dev/null +++ b/graft/evm/Taskfile.yml @@ -0,0 +1,46 @@ +# https://taskfile.dev +# To run on a system without task installed, `./scripts/run_task.sh` will execute it with `go run`. +# If in the nix dev shell, `task` is available. + +version: '3' + +env: + AVALANCHEGO_BUILD_PATH: '{{.AVALANCHEGO_BUILD_PATH | default (printf "%s/avalanchego/build" .TASKFILE_DIR) }}' + +tasks: + default: ./scripts/run_task.sh --list + + build-test: + desc: Run all Go tests with retry logic for flaky tests, race detection, and coverage reporting + cmd: ./scripts/build_test.sh # ci.yml + + check-clean-branch: + desc: Checks that the git working tree is clean + cmds: + - cmd: git add --all + - cmd: git update-index --really-refresh >> /dev/null + - cmd: git status --short # Show the status of the working tree. + - cmd: git diff-index --quiet HEAD # Exits if any uncommitted changes are found. + + check-go-mod-tidy: + desc: Checks that all go.mod and go.sum files are up-to-date (requires a clean git working tree) + cmds: + - cmd: go mod tidy + - task: check-clean-branch + + coverage: + desc: Display test coverage statistics from coverage.out file + cmd: ./scripts/coverage.sh # ci.yml + + lint: + desc: Run golangci-lint and check for allowed Ethereum imports in Go code + cmd: ./scripts/lint.sh + + lint-all-ci: + desc: Runs all lint checks one-by-one + cmds: + - task: lint + + lint-fix: + desc: Run golangci-lint with auto-fix where possible + cmd: ./scripts/lint_fix.sh \ No newline at end of file diff --git a/graft/coreth/constants/constants.go b/graft/evm/constants/constants.go similarity index 100% rename from graft/coreth/constants/constants.go rename to graft/evm/constants/constants.go diff --git a/graft/evm/go.mod b/graft/evm/go.mod new file mode 100644 index 000000000000..855ca12e1a9a --- /dev/null +++ b/graft/evm/go.mod @@ -0,0 +1,13 @@ +module github.com/ava-labs/avalanchego/graft/evm + +go 1.24.9 + +require github.com/ava-labs/libevm v1.13.15-0.20251016142715-1bccf4f2ddb2 + +require ( + github.com/holiman/uint256 v1.2.4 // indirect + golang.org/x/crypto v0.45.0 // indirect + golang.org/x/sys v0.38.0 // indirect +) + +replace github.com/ava-labs/avalanchego => ../../ diff --git a/graft/evm/go.sum b/graft/evm/go.sum new file mode 100644 index 000000000000..b59abce5d4bf --- /dev/null +++ b/graft/evm/go.sum @@ -0,0 +1,8 @@ +github.com/ava-labs/libevm v1.13.15-0.20251016142715-1bccf4f2ddb2 h1:hQ15IJxY7WOKqeJqCXawsiXh0NZTzmoQOemkWHz7rr4= +github.com/ava-labs/libevm v1.13.15-0.20251016142715-1bccf4f2ddb2/go.mod h1:DqSotSn4Dx/UJV+d3svfW8raR+cH7+Ohl9BpsQ5HlGU= +github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= +github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= diff --git a/graft/evm/scripts/build_test.sh b/graft/evm/scripts/build_test.sh new file mode 100755 index 000000000000..94cc38f1b723 --- /dev/null +++ b/graft/evm/scripts/build_test.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +set -euo pipefail + +REPO_ROOT=$( cd "$( dirname "${BASH_SOURCE[0]}" )"; cd ../../../ && pwd ) +# shellcheck disable=SC1091 +source "$REPO_ROOT"/scripts/constants.sh + +# We pass in the arguments to this script directly to enable easily passing parameters such as enabling race detection, +# parallelism, and test coverage. +# DO NOT RUN tests from the top level "tests" directory since they are run by ginkgo +race="-race" +if [[ -n "${NO_RACE:-}" ]]; then + race="" +fi + +cd "$REPO_ROOT/graft/evm" +# shellcheck disable=SC2046 +go test -shuffle=on ${race:-} -timeout="${TIMEOUT:-600s}" -coverprofile=coverage.out -covermode=atomic "$@" ./... diff --git a/graft/evm/scripts/coverage.sh b/graft/evm/scripts/coverage.sh new file mode 100755 index 000000000000..e5975b8b8e63 --- /dev/null +++ b/graft/evm/scripts/coverage.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +if [ ! -f "coverage.out" ]; then + echo "no coverage file" + exit 0 +fi + +totalCoverage=$(go tool cover -func=coverage.out | grep total | grep -Eo '[0-9]+\.[0-9]+') +echo "Current test coverage : $totalCoverage %" +echo "========================================" + +go tool cover -func=coverage.out diff --git a/graft/evm-shared/scripts/lint.sh b/graft/evm/scripts/lint.sh similarity index 98% rename from graft/evm-shared/scripts/lint.sh rename to graft/evm/scripts/lint.sh index b3d62c98219f..89eaf1bb2bcf 100755 --- a/graft/evm-shared/scripts/lint.sh +++ b/graft/evm/scripts/lint.sh @@ -1,13 +1,13 @@ #!/usr/bin/env bash # -# lint.sh - Comprehensive linting script for modules using evm-shared +# lint.sh - Comprehensive linting script for modules using evm # # Usage: -# This script must be run from the root of a module that uses evm-shared +# This script must be run from the root of a module that uses evm # (e.g., coreth/ or subnet-evm/). # # From the module root: -# ../evm-shared/scripts/lint.sh +# ../evm/scripts/lint.sh # TESTS='license_header' ./scripts/lint.sh # Run specific test only # # Requirements: diff --git a/graft/evm-shared/scripts/lint_fix.sh b/graft/evm/scripts/lint_fix.sh similarity index 94% rename from graft/evm-shared/scripts/lint_fix.sh rename to graft/evm/scripts/lint_fix.sh index 707793d96473..a95286b9e801 100755 --- a/graft/evm-shared/scripts/lint_fix.sh +++ b/graft/evm/scripts/lint_fix.sh @@ -3,8 +3,8 @@ # lint_fix.sh - Runs golangci-lint with automatic fixes # # Usage: -# This script must be run from the root of a module that uses evm-shared -# (e.g., coreth/ or subnet-evm/), NOT from evm-shared itself. +# This script must be run from the root of a module that uses evm +# (e.g., coreth/ or subnet-evm/), NOT from evm itself. # # From the repository root: # ./scripts/lint_fix.sh diff --git a/graft/evm-shared/scripts/lint_setup.sh b/graft/evm/scripts/lint_setup.sh similarity index 89% rename from graft/evm-shared/scripts/lint_setup.sh rename to graft/evm/scripts/lint_setup.sh index afc5e3f8009a..0cef4127d4e0 100755 --- a/graft/evm-shared/scripts/lint_setup.sh +++ b/graft/evm/scripts/lint_setup.sh @@ -11,7 +11,7 @@ # to each category of files. # # Usage: -# This script must be sourced from the root of a module that uses evm-shared: +# This script must be sourced from the root of a module that uses evm: # # source ./scripts/lint_setup.sh # setup_lint @@ -38,8 +38,13 @@ function setup_lint { fi local upstream_folders_file="./scripts/upstream_files.txt" - # Read the upstream_folders file into an array - mapfile -t upstream_folders <"$upstream_folders_file" + if [[ ! -f "$upstream_folders_file" ]]; then + # if the file doesn't exist, assume no upstream files + upstream_folders=() + else + # Read the upstream_folders file into an array + mapfile -t upstream_folders <"$upstream_folders_file" + fi # Shared find filters local -a find_filters=( @@ -69,7 +74,9 @@ function setup_lint { fi done # Remove the last '-o' from the arrays - unset 'upstream_find_args[${#upstream_find_args[@]}-1]' + if [ ${#upstream_find_args[@]} -ne 0 ]; then + unset 'upstream_find_args[${#upstream_find_args[@]}-1]' + fi # Find upstream files # shellcheck disable=SC2034 # used by external scripts after sourcing diff --git a/graft/evm/scripts/upstream_files.txt b/graft/evm/scripts/upstream_files.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/graft/subnet-evm/Taskfile.yml b/graft/subnet-evm/Taskfile.yml index 71f56405edc4..d1926f45903a 100644 --- a/graft/subnet-evm/Taskfile.yml +++ b/graft/subnet-evm/Taskfile.yml @@ -100,7 +100,7 @@ tasks: lint: desc: Run golangci-lint and check for allowed Ethereum imports in Go code - cmd: ../evm-shared/scripts/lint.sh + cmd: ../evm/scripts/lint.sh lint-all: desc: Runs all lint checks in parallel @@ -124,7 +124,7 @@ tasks: lint-fix: desc: Run golangci-lint with auto-fix where possible - cmd: ../evm-shared/scripts/lint_fix.sh + cmd: ../evm/scripts/lint_fix.sh shellcheck: desc: Run shellcheck static analysis on all shell scripts with version management diff --git a/graft/subnet-evm/accounts/abi/bind/precompilebind/precompile_bind_test.go b/graft/subnet-evm/accounts/abi/bind/precompilebind/precompile_bind_test.go index 16757d1efefe..ffa511e96995 100644 --- a/graft/subnet-evm/accounts/abi/bind/precompilebind/precompile_bind_test.go +++ b/graft/subnet-evm/accounts/abi/bind/precompilebind/precompile_bind_test.go @@ -689,6 +689,11 @@ func TestPrecompileBind(t *testing.T) { out, err = replacer.CombinedOutput() require.NoError(t, err, "failed to replace binding test dependency to current source tree: %v\n%s", err, out) + replacer = exec.Command(gocmd, "mod", "edit", "-x", "-require", "github.com/ava-labs/avalanchego/graft/evm@v0.0.0", "-replace", "github.com/ava-labs/avalanchego/graft/evm="+filepath.Join(pwd, "..", "..", "..", "..", "..", "evm")) + replacer.Dir = pkg + out, err = replacer.CombinedOutput() + require.NoError(t, err, "failed to replace binding test dependency to current source tree: %v\n%s", err, out) + tidier := exec.Command(gocmd, "mod", "tidy", "-compat=1.24") tidier.Dir = pkg out, err = tidier.CombinedOutput() diff --git a/graft/subnet-evm/constants/constants.go b/graft/subnet-evm/constants/constants.go deleted file mode 100644 index 974096020c9e..000000000000 --- a/graft/subnet-evm/constants/constants.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (C) 2019-2025, Ava Labs, Inc. All rights reserved. -// See the file LICENSE for licensing terms. - -package constants - -import "github.com/ava-labs/libevm/common" - -var BlackholeAddr = common.Address{ - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -} diff --git a/graft/subnet-evm/core/blockchain_reader.go b/graft/subnet-evm/core/blockchain_reader.go index 23dc0cac97ae..0c65f0e21780 100644 --- a/graft/subnet-evm/core/blockchain_reader.go +++ b/graft/subnet-evm/core/blockchain_reader.go @@ -30,9 +30,9 @@ package core import ( "math/big" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/commontype" "github.com/ava-labs/avalanchego/graft/subnet-evm/consensus" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/core/state/snapshot" "github.com/ava-labs/avalanchego/graft/subnet-evm/params" "github.com/ava-labs/avalanchego/graft/subnet-evm/precompile/contracts/feemanager" diff --git a/graft/subnet-evm/core/chain_makers.go b/graft/subnet-evm/core/chain_makers.go index feabb180b945..f3234110ce34 100644 --- a/graft/subnet-evm/core/chain_makers.go +++ b/graft/subnet-evm/core/chain_makers.go @@ -31,9 +31,9 @@ import ( "fmt" "math/big" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/commontype" "github.com/ava-labs/avalanchego/graft/subnet-evm/consensus" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/core/extstate" "github.com/ava-labs/avalanchego/graft/subnet-evm/params" "github.com/ava-labs/avalanchego/graft/subnet-evm/plugin/evm/customheader" diff --git a/graft/subnet-evm/ethclient/simulated/backend.go b/graft/subnet-evm/ethclient/simulated/backend.go index e43043fd2a16..2a1f4ec53123 100644 --- a/graft/subnet-evm/ethclient/simulated/backend.go +++ b/graft/subnet-evm/ethclient/simulated/backend.go @@ -32,8 +32,8 @@ import ( "math/big" "time" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/consensus/dummy" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/core" "github.com/ava-labs/avalanchego/graft/subnet-evm/eth" "github.com/ava-labs/avalanchego/graft/subnet-evm/eth/ethconfig" diff --git a/graft/subnet-evm/go.mod b/graft/subnet-evm/go.mod index 12245aabfe3e..bf2425df45a5 100644 --- a/graft/subnet-evm/go.mod +++ b/graft/subnet-evm/go.mod @@ -17,6 +17,7 @@ require ( github.com/VictoriaMetrics/fastcache v1.12.1 github.com/antithesishq/antithesis-sdk-go v0.3.8 github.com/ava-labs/avalanchego v1.14.1-antithesis-docker-image-fix + github.com/ava-labs/avalanchego/graft/evm v0.0.0-00010101000000-000000000000 github.com/ava-labs/firewood-go-ethhash/ffi v0.0.16 github.com/ava-labs/libevm v1.13.15-0.20251016142715-1bccf4f2ddb2 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc @@ -207,3 +208,5 @@ tool ( ) replace github.com/ava-labs/avalanchego => ../../ + +replace github.com/ava-labs/avalanchego/graft/evm => ../evm diff --git a/graft/subnet-evm/plugin/evm/syncervm_test.go b/graft/subnet-evm/plugin/evm/syncervm_test.go index 062bd87256c6..4b182b40b77d 100644 --- a/graft/subnet-evm/plugin/evm/syncervm_test.go +++ b/graft/subnet-evm/plugin/evm/syncervm_test.go @@ -24,8 +24,8 @@ import ( "github.com/ava-labs/avalanchego/api/metrics" "github.com/ava-labs/avalanchego/database/prefixdb" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/consensus/dummy" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/core" "github.com/ava-labs/avalanchego/graft/subnet-evm/core/coretest" "github.com/ava-labs/avalanchego/graft/subnet-evm/params/paramstest" diff --git a/graft/subnet-evm/plugin/evm/vm.go b/graft/subnet-evm/plugin/evm/vm.go index 61fabbeb45d1..c92027de58de 100644 --- a/graft/subnet-evm/plugin/evm/vm.go +++ b/graft/subnet-evm/plugin/evm/vm.go @@ -41,9 +41,9 @@ import ( "github.com/ava-labs/avalanchego/codec" "github.com/ava-labs/avalanchego/database" "github.com/ava-labs/avalanchego/database/versiondb" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/commontype" "github.com/ava-labs/avalanchego/graft/subnet-evm/consensus/dummy" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/core" "github.com/ava-labs/avalanchego/graft/subnet-evm/core/txpool" "github.com/ava-labs/avalanchego/graft/subnet-evm/eth" diff --git a/graft/subnet-evm/plugin/evm/vm_test.go b/graft/subnet-evm/plugin/evm/vm_test.go index 758e89cf2d38..2db384e2cb7c 100644 --- a/graft/subnet-evm/plugin/evm/vm_test.go +++ b/graft/subnet-evm/plugin/evm/vm_test.go @@ -29,8 +29,8 @@ import ( "github.com/ava-labs/avalanchego/database" "github.com/ava-labs/avalanchego/database/memdb" "github.com/ava-labs/avalanchego/database/prefixdb" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/commontype" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/core" "github.com/ava-labs/avalanchego/graft/subnet-evm/core/txpool" "github.com/ava-labs/avalanchego/graft/subnet-evm/eth" diff --git a/graft/subnet-evm/precompile/contracts/nativeminter/unpack_pack_test.go b/graft/subnet-evm/precompile/contracts/nativeminter/unpack_pack_test.go index 502a249add26..4048674cfdb9 100644 --- a/graft/subnet-evm/precompile/contracts/nativeminter/unpack_pack_test.go +++ b/graft/subnet-evm/precompile/contracts/nativeminter/unpack_pack_test.go @@ -12,8 +12,8 @@ import ( "github.com/ava-labs/libevm/crypto" "github.com/stretchr/testify/require" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/accounts/abi" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/precompile/contract" ) diff --git a/graft/subnet-evm/precompile/contracts/rewardmanager/contract.go b/graft/subnet-evm/precompile/contracts/rewardmanager/contract.go index 94dee2964680..8629cd1205aa 100644 --- a/graft/subnet-evm/precompile/contracts/rewardmanager/contract.go +++ b/graft/subnet-evm/precompile/contracts/rewardmanager/contract.go @@ -11,11 +11,11 @@ import ( "errors" "fmt" - "github.com/ava-labs/libevm/core/types" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/accounts/abi" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/precompile/allowlist" "github.com/ava-labs/avalanchego/graft/subnet-evm/precompile/contract" + "github.com/ava-labs/libevm/core/types" "github.com/ava-labs/libevm/common" "github.com/ava-labs/libevm/core/vm" diff --git a/graft/subnet-evm/precompile/contracts/rewardmanager/contract_test.go b/graft/subnet-evm/precompile/contracts/rewardmanager/contract_test.go index 6ed2f568d09c..946abe43b86c 100644 --- a/graft/subnet-evm/precompile/contracts/rewardmanager/contract_test.go +++ b/graft/subnet-evm/precompile/contracts/rewardmanager/contract_test.go @@ -11,8 +11,8 @@ import ( "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/commontype" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/core/extstate" "github.com/ava-labs/avalanchego/graft/subnet-evm/precompile/allowlist/allowlisttest" "github.com/ava-labs/avalanchego/graft/subnet-evm/precompile/contracts/rewardmanager" diff --git a/graft/subnet-evm/precompile/contracts/rewardmanager/simulated_test.go b/graft/subnet-evm/precompile/contracts/rewardmanager/simulated_test.go index 57d73dc525b7..915cd01d814a 100644 --- a/graft/subnet-evm/precompile/contracts/rewardmanager/simulated_test.go +++ b/graft/subnet-evm/precompile/contracts/rewardmanager/simulated_test.go @@ -14,8 +14,8 @@ import ( "github.com/ava-labs/libevm/crypto" "github.com/stretchr/testify/require" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/accounts/abi/bind" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/core" "github.com/ava-labs/avalanchego/graft/subnet-evm/eth/ethconfig" "github.com/ava-labs/avalanchego/graft/subnet-evm/node" diff --git a/graft/subnet-evm/precompile/modules/registerer.go b/graft/subnet-evm/precompile/modules/registerer.go index 086dce3f0e0b..e3a1f5e09f2e 100644 --- a/graft/subnet-evm/precompile/modules/registerer.go +++ b/graft/subnet-evm/precompile/modules/registerer.go @@ -10,7 +10,7 @@ import ( "github.com/ava-labs/libevm/common" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" + "github.com/ava-labs/avalanchego/graft/evm/constants" "github.com/ava-labs/avalanchego/graft/subnet-evm/utils" ) diff --git a/graft/subnet-evm/precompile/modules/registerer_test.go b/graft/subnet-evm/precompile/modules/registerer_test.go index 8b42eac62adb..238ad218e854 100644 --- a/graft/subnet-evm/precompile/modules/registerer_test.go +++ b/graft/subnet-evm/precompile/modules/registerer_test.go @@ -10,7 +10,7 @@ import ( "github.com/ava-labs/libevm/common" "github.com/stretchr/testify/require" - "github.com/ava-labs/avalanchego/graft/subnet-evm/constants" + "github.com/ava-labs/avalanchego/graft/evm/constants" ) func TestInsertSortedByAddress(t *testing.T) { diff --git a/vms/example/xsvm/Dockerfile b/vms/example/xsvm/Dockerfile index 03c670968af1..ad3a7ea065ff 100644 --- a/vms/example/xsvm/Dockerfile +++ b/vms/example/xsvm/Dockerfile @@ -15,6 +15,7 @@ COPY go.mod . COPY go.sum . COPY graft/coreth ./graft/coreth COPY graft/subnet-evm ./graft/subnet-evm +COPY graft/evm ./graft/evm RUN go mod download # Copy the code into the container