Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 4 additions & 14 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,20 +115,6 @@ jobs:
name: unitTest-coverage
path: cover.out

# - name: Data race tests
# run: make test-race

# # TODO: make it work
# - name: Reproducible build test
# run: |
# make geth
# shasum -a256 ./build/bin/geth > bor1.sha256
# make geth
# shasum -a256 ./build/bin/geth > bor2.sha256
# if ! cmp -s bor1.sha256 bor2.sha256; then
# echo >&2 "Reproducible build broken"; cat bor1.sha256; cat bor2.sha256; exit 1
# fi

integration-tests:
if: (github.event.action != 'closed' || github.event.pull_request.merged == true)
strategy:
Expand Down Expand Up @@ -180,3 +166,7 @@ jobs:
uses: actions/download-artifact@v6.0.0
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
verbose: true
6 changes: 3 additions & 3 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ jobs:
go-version-file: go.mod

- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}

- name: Autobuild
uses: github/codeql-action/autobuild@v2
uses: github/codeql-action/autobuild@v3

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3
with:
category: '/language:${{matrix.language}}'
64 changes: 42 additions & 22 deletions .github/workflows/kurtosis-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ concurrency:

env:
ENCLAVE_NAME: kurtosis-e2e
POLYCLI_VERSION: v0.1.103

jobs:
build-bor:
Expand All @@ -26,13 +27,13 @@ jobs:
- name: Checkout bor
uses: actions/checkout@v5

- name: Build docker image
- name: Build bor docker image
run: docker build -t bor:local --file Dockerfile .

- name: Save image
- name: Save bor docker image
run: docker save bor:local | gzip > bor-image.tar.gz

- name: Upload image
- name: Upload bor docker image
uses: actions/upload-artifact@v4
with:
name: bor-image
Expand All @@ -49,13 +50,13 @@ jobs:
repository: 0xPolygon/heimdall-v2
ref: develop

- name: Build docker image
- name: Build heimdall-v2 docker image
run: docker build -t heimdall-v2:local --file Dockerfile .

- name: Save image
- name: Save heimdall-v2 docker image
run: docker save heimdall-v2:local | gzip > heimdall-v2-image.tar.gz

- name: Upload image
- name: Upload heimdall-v2 docker image
uses: actions/upload-artifact@v4
with:
name: heimdall-v2-image
Expand All @@ -79,12 +80,13 @@ jobs:
uses: actions/checkout@v5
with:
repository: 0xPolygon/kurtosis-pos
ref: hv2/tx-eip1559-gas-price-configs
ref: hv2/eip1559-and-rio-at-128

# This step will free disk space and thus remove any docker images previously built
- name: Pre kurtosis run
uses: ./.github/actions/kurtosis-pre-run
uses: ./.github/actions/setup
with:
main_branch: develop
docker_username: ${{ secrets.DOCKERHUB }}
docker_token: ${{ secrets.DOCKERHUB_KEY }}

Expand All @@ -96,29 +98,29 @@ jobs:
path: pos-workflows

- name: Copy kurtosis config
run: cp ./pos-workflows/.github/configs/kurtosis-e2e.yml ./kurtosis-e2e.yml
run: cp ./pos-workflows/configs/kurtosis-e2e.yml ./kurtosis-e2e.yml

# Load images
- name: Download bor image
- name: Download bor docker image
uses: actions/download-artifact@v4
with:
name: bor-image

- name: Download heimdall-v2 image
- name: Download heimdall-v2 docker image
uses: actions/download-artifact@v4
with:
name: heimdall-v2-image

- name: Load bor image
- name: Load bor docker image
run: |
gunzip -c bor-image.tar.gz | docker load
echo "Loaded bor image:"
echo "Loaded bor docker image:"
docker images bor:local --format "{{.ID}} {{.CreatedAt}}"

- name: Load heimdall-v2 image
- name: Load heimdall-v2 docker image
run: |
gunzip -c heimdall-v2-image.tar.gz | docker load
echo "Loaded heimdall-v2 image:"
echo "Loaded heimdall-v2 docker image:"
docker images heimdall-v2:local --format "{{.ID}} {{.CreatedAt}}"

# Deploy kurtosis enclave
Expand All @@ -128,29 +130,47 @@ jobs:
- name: Inspect enclave
run: kurtosis enclave inspect ${{ env.ENCLAVE_NAME }}

# Run e2e tests
- name: Test state syncs
run: kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "bats --filter 'bridge MATIC/POL, ERC20, and ERC721 from L1 to L2 and confirm L2 balances increased' tests/pos/bridge.bats"
- name: Install polycli
run: |
tmp_dir=$(mktemp -d)
curl -L https://github.com/0xPolygon/polygon-cli/releases/download/${{ env.POLYCLI_VERSION }}/polycli_${{ env.POLYCLI_VERSION }}_linux_amd64.tar.gz | tar -xz -C "$tmp_dir"
mv "$tmp_dir"/* /usr/local/bin/polycli
rm -rf "$tmp_dir"
sudo chmod +x /usr/local/bin/polycli
polycli version

- name: Run smoke tests
id: smoke-tests
working-directory: pos-workflows/tests
run: bash kurtosis_smoke_test.sh

- name: Install Go
uses: actions/setup-go@v6
with:
go-version: 'stable'

- name: Run RPC tests
id: rpc-tests
working-directory: pos-workflows/tests/rpc_tests
run: |
export RPC_URL=$(kurtosis port print ${{ env.ENCLAVE_NAME }} l2-el-1-bor-heimdall-v2-validator rpc)
export PRIV_KEY="0xd40311b5a5ca5eaeb48dfba5403bde4993ece8eccf4190e98e19fcd4754260ea"
go run . --priv-key "$PRIV_KEY" --rpc-url "$RPC_URL" --log-req-res true

- name: Run smoke tests (Checkpoints and Milestones)
working-directory: pos-workflows/tests
run: bash ./kurtosis_smoke_test.sh
# Collect diagnostics on failure
- name: Collect network diagnostics and state dump
if: >-
always() && (
steps.smoke-tests.outcome == 'failure' ||
steps.rpc-tests.outcome == 'failure')
uses: ./pos-workflows/.github/actions/network-diagnostics-and-state-dump
with:
enclave_name: ${{ env.ENCLAVE_NAME }}

# Clean up
- name: Post kurtosis run
if: always()
uses: ./.github/actions/kurtosis-post-run
uses: ./.github/actions/cleanup
with:
main_branch: develop
enclave_name: ${{ env.ENCLAVE_NAME }}
67 changes: 43 additions & 24 deletions .github/workflows/kurtosis-stateless-e2e.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Stateless Sync E2E Tests
name: Kurtosis Stateless E2E Tests

on:
push:
Expand All @@ -12,12 +12,12 @@ on:
types: [opened, synchronize]

concurrency:
group: stateless-sync-${{ github.event.pull_request.number || github.ref }}
group: kurtosis-stateless-e2e-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
ENCLAVE_NAME: kurtosis-stateless-e2e
POLYCLI_VERSION: v0.1.102
POLYCLI_VERSION: v0.1.103

jobs:
build-bor:
Expand All @@ -27,13 +27,13 @@ jobs:
- name: Checkout bor
uses: actions/checkout@v5

- name: Build docker image
- name: Build bor docker image
run: docker build -t bor:local --file Dockerfile .

- name: Save image
- name: Save bor docker image
run: docker save bor:local | gzip > bor-image.tar.gz

- name: Upload image
- name: Upload bor docker image
uses: actions/upload-artifact@v4
with:
name: bor-image
Expand All @@ -50,13 +50,13 @@ jobs:
repository: 0xPolygon/heimdall-v2
ref: develop

- name: Build docker image
- name: Build heimdall-v2 docker image
run: docker build -t heimdall-v2:local --file Dockerfile .

- name: Save image
- name: Save heimdall-v2 docker image
run: docker save heimdall-v2:local | gzip > heimdall-v2-image.tar.gz

- name: Upload image
- name: Upload heimdall-v2 docker image
uses: actions/upload-artifact@v4
with:
name: heimdall-v2-image
Expand All @@ -67,7 +67,7 @@ jobs:
needs:
- build-bor
- build-heimdall-v2
runs-on: ubuntu24.04-16core-64GB-600SSD-bor
runs-on: ubuntu-latest
timeout-minutes: 45
# These permissions are required to log in to GCR
permissions:
Expand All @@ -80,15 +80,28 @@ jobs:
uses: actions/checkout@v5
with:
repository: 0xPolygon/kurtosis-pos
ref: hv2/tx-eip1559-gas-price-configs
ref: hv2/eip1559-and-rio-at-128

# This step will free disk space and thus remove any docker images previously built
- name: Pre kurtosis run
uses: ./.github/actions/kurtosis-pre-run
uses: ./.github/actions/setup
with:
main_branch: develop
docker_username: ${{ secrets.DOCKERHUB }}
docker_token: ${{ secrets.DOCKERHUB_KEY }}

- name: Configure Docker API compatibility for Pumba
run: |
# Pumba uses Docker SDK v23.0.3 (API v1.42), but Docker 29+ requires minimum API v1.44
# Lower the daemon's minimum API version to maintain compatibility
if [ -f /etc/docker/daemon.json ]; then
sudo jq '. + {"min-api-version": "1.42"}' /etc/docker/daemon.json | sudo tee /etc/docker/daemon.json.tmp > /dev/null
sudo mv /etc/docker/daemon.json.tmp /etc/docker/daemon.json
else
echo '{"min-api-version": "1.42"}' | sudo tee /etc/docker/daemon.json > /dev/null
fi
sudo systemctl restart docker

- name: Checkout pos-workflows
uses: actions/checkout@v5
with:
Expand All @@ -97,31 +110,31 @@ jobs:
path: pos-workflows

- name: Copy kurtosis config
run: cp ./pos-workflows/.github/configs/kurtosis-stateless-e2e.yml ./kurtosis-stateless-e2e.yml
run: cp ./pos-workflows/configs/kurtosis-stateless-e2e.yml ./kurtosis-stateless-e2e.yml

# Load images
- name: Download bor image
- name: Download bor docker image
uses: actions/download-artifact@v4
with:
name: bor-image

- name: Download heimdall-v2 image
- name: Download heimdall-v2 docker image
uses: actions/download-artifact@v4
with:
name: heimdall-v2-image

- name: Load bor image
- name: Load bor docker image
run: |
gunzip -c bor-image.tar.gz | docker load
echo "Loaded bor image:"
echo "Loaded bor docker image:"
docker images bor:local --format "{{.ID}} {{.CreatedAt}}"

- name: Load heimdall-v2 image
- name: Load heimdall-v2 docker image
run: |
gunzip -c heimdall-v2-image.tar.gz | docker load
echo "Loaded heimdall-v2 image:"
echo "Loaded heimdall-v2 docker image:"
docker images heimdall-v2:local --format "{{.ID}} {{.CreatedAt}}"

# Deploy kurtosis enclave
- name: Kurtosis run
run: kurtosis run --args-file=kurtosis-stateless-e2e.yml --enclave ${{ env.ENCLAVE_NAME }} .
Expand All @@ -139,16 +152,22 @@ jobs:
sudo chmod +x /usr/local/bin/polycli
polycli version

- name: Run stateless sync tests
- name: Run stateless e2e tests
id: stateless-tests
working-directory: pos-workflows/tests/stateless_tests
run: bash kurtosis_stateless_test.sh

- name: Test state syncs (post VeBlop HF)
run: kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "bats --filter 'bridge MATIC/POL, ERC20, and ERC721 from L1 to L2 and confirm L2 balances increased' tests/pos/bridge.bats"
# Collect diagnostics on failure
- name: Collect network diagnostics and state dump
if: always() && steps.stateless-tests.outcome == 'failure'
uses: ./pos-workflows/.github/actions/network-diagnostics-and-state-dump
with:
enclave_name: ${{ env.ENCLAVE_NAME }}

# Clean up
- name: Post kurtosis run
if: always()
uses: ./.github/actions/kurtosis-post-run
uses: ./.github/actions/cleanup
with:
main_branch: develop
enclave_name: ${{ env.ENCLAVE_NAME }}
2 changes: 1 addition & 1 deletion .golangci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# This file configures github.com/golangci/golangci-lint.
version: '2'
run:
go: 1.25.5
go: 1.25.7
tests: true
linters:
default: none
Expand Down
7 changes: 6 additions & 1 deletion consensus/bor/bor.go
Original file line number Diff line number Diff line change
Expand Up @@ -507,10 +507,15 @@ func (c *Bor) verifyCascadingFields(chain consensus.ChainHeaderReader, header *t
parent = chain.GetHeader(header.ParentHash, number-1)
}

if parent == nil || parent.Number.Uint64() != number-1 || parent.Hash() != header.ParentHash {
if parent == nil || parent.Hash() != header.ParentHash {
return consensus.ErrUnknownAncestor
}

// Verify block number continuity
if diff := new(big.Int).Sub(header.Number, parent.Number); diff.Cmp(big.NewInt(1)) != 0 {
return consensus.ErrInvalidNumber
}

// Verify that the gasUsed is <= gasLimit
if header.GasUsed > header.GasLimit {
return fmt.Errorf("invalid gasUsed: have %d, gasLimit %d", header.GasUsed, header.GasLimit)
Expand Down
Loading
Loading