Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
7862cc4
chore: fix worker wallet in jest (#20725)
alexghr Feb 23, 2026
424bef6
fix: pxe native prover log level (#20724)
alexghr Feb 23, 2026
c1fdd54
chore: encode LOG_LEVEL (#20678)
alexghr Feb 23, 2026
8608a35
chore: fix worker wallet log level (#20754)
alexghr Feb 23, 2026
afcc415
chore: Removed dead code (#20740)
PhilWindle Feb 23, 2026
eb86fbb
fix: getVotes return empty instead of stale data (#20756)
LHerskind Feb 23, 2026
71427af
fix: pass log level to AVM simulator (#20762)
alexghr Feb 23, 2026
2faa03f
chore: double Node.js libuv thread count (#20709)
ludamad Feb 23, 2026
a6af375
chore: deploy staging-public
alexghr Feb 23, 2026
bf6077b
fix: underflow in snapshot synch (#20780)
alexghr Feb 23, 2026
cebecd4
fix: separate rejected and aborted proving jobs (#20777)
alexghr Feb 23, 2026
9d63a64
fix: evicted transactions could reappear after a node restart (#20773)
mrzeszutko Feb 24, 2026
d9add9d
fix: (A-575) prevent checkpoint event spam in L2BlockStream on restar…
danielntmd Feb 24, 2026
e278ac6
chore: dedupe release notes
alexghr Feb 18, 2026
c5ae90d
fix: charge 3.6M for epoch verification (#20765)
LHerskind Feb 24, 2026
b526b3e
chore: Configs for next-net, testnet etc
PhilWindle Feb 24, 2026
7c56e46
fix(ethereum): remove viem NonceManager to fix nonce gap after failed…
spypsy Feb 24, 2026
2116fb9
fix: limit number of threads when verifying server-side proofs (#20818)
alexghr Feb 24, 2026
6c0b7e9
chore: Comment update (#20820)
PhilWindle Feb 24, 2026
7aec1a8
feat: add support for signed integers on contract functions (#20784)
nventuro Feb 24, 2026
514106d
feat: expose blockheader getters (#20790)
nventuro Feb 24, 2026
84dc4bf
docs: minor clarification (#20788)
nventuro Feb 24, 2026
76d44d5
fix: Use async poseidon (#20826)
PhilWindle Feb 24, 2026
b81dae0
chore: update rollup config for testnet and mainnet (#20827)
aminsammara Feb 25, 2026
528119f
fix: Reduce tx hash conversions inside tx pool (#20829)
PhilWindle Feb 25, 2026
089f15d
refactor: Consolidate transaction validators (#20631)
PhilWindle Feb 23, 2026
628f662
Merge fix
PhilWindle Feb 25, 2026
4ac055c
feat: use native crypto to compute p2p message ID (#20846)
alexghr Feb 25, 2026
91e29ea
chore: fix compilation error in tests
alexghr Feb 25, 2026
0fe36e0
fix(p2p): wait for GossipSub mesh formation before sending txs in e2e…
alexghr Feb 18, 2026
70ad9b6
chore: jump to next slop on local network if there are pending txs
LeilaWang Feb 19, 2026
7d48472
chore: send alert to slack on CI3 failures (#20860)
alexghr Feb 25, 2026
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
7 changes: 4 additions & 3 deletions .github/release-please-v4.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
"include-component-in-tag": false,
"release-search-depth": 50,
"commit-search-depth": 150,
"bootstrap-sha": "60d353cded21d7ebeed9bc64b5ae87ebba5f9a38",
"sequential-calls": true,
"changelog-sections": [
{ "type": "feat", "section": "Features", "hidden": false },
{ "type": "fix", "section": "Bug Fixes", "hidden": false },
{ "type": "chore", "section": "Miscellaneous", "hidden": false },
{ "type": "test", "section": "Miscellaneous", "hidden": false },
{ "type": "refactor", "section": "Miscellaneous", "hidden": false },
{ "type": "chore", "section": "Miscellaneous", "hidden": true },
{ "type": "test", "section": "Miscellaneous", "hidden": true },
{ "type": "refactor", "section": "Miscellaneous", "hidden": true },
{ "type": "docs", "section": "Documentation", "hidden": false }
],
"packages": {
Expand Down
18 changes: 18 additions & 0 deletions .github/workflows/ci3.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,24 @@ jobs:
PR_BASE_SHA: ${{ github.event.pull_request.base.sha }}
run: ./.github/ci3_success.sh

- name: Notify Slack on backport CI failure
if: failure() && startsWith(github.event.pull_request.head.ref, 'backport-to-') && endsWith(github.event.pull_request.head.ref, '-staging')
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
run: |
if [ -n "${SLACK_BOT_TOKEN}" ]; then
read -r -d '' data <<EOF || true
{
"channel": "#team-alpha",
"text": "CI3 failed on backport PR: <${{ github.event.pull_request.html_url }}|#${{ github.event.pull_request.number }} - ${{ github.event.pull_request.title }}>\n<https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Run>"
}
EOF
curl -X POST https://slack.com/api/chat.postMessage \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-type: application/json" \
--data "$data"
fi

- name: Upload benchmarks
if: env.SHOULD_UPLOAD_BENCHMARKS == '1'
uses: benchmark-action/github-action-benchmark@4de1bed97a47495fc4c5404952da0499e31f5c29
Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/deploy-network.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ on:
required: false
type: boolean
default: false
source_tag:
description: "Source tag that triggered this deploy"
required: false
type: string
workflow_dispatch:
inputs:
network:
Expand Down Expand Up @@ -59,6 +63,10 @@ on:
required: false
type: boolean
default: false
source_tag:
description: "Source tag that triggered this deploy"
required: false
type: string

concurrency:
group: deploy-network-${{ inputs.network }}-${{ inputs.namespace || inputs.network }}-${{ inputs.semver }}-${{ github.ref || github.ref_name }}
Expand Down Expand Up @@ -170,6 +178,22 @@ jobs:
echo "cluster=" >> $GITHUB_OUTPUT
fi

- name: Step summary
if: always()
run: |
{
echo "## Deploy Network"
echo ""
echo "| Item | Value |"
echo "|------|-------|"
echo "| Network | \`${{ inputs.network }}\` |"
echo "| Semver | \`${{ inputs.semver }}\` |"
echo "| Ref | \`${{ steps.checkout-ref.outputs.ref }}\` |"
if [[ -n "${{ inputs.source_tag }}" ]]; then
echo "| Source Tag | [\`${{ inputs.source_tag }}\`](https://github.com/${{ github.repository }}/releases/tag/${{ inputs.source_tag }}) |"
fi
} >> "$GITHUB_STEP_SUMMARY"

- name: Notify Slack on failure
if: failure()
env:
Expand Down
94 changes: 94 additions & 0 deletions .github/workflows/deploy-staging-public.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: Deploy to staging-public

on:
push:
branches:
- v4
workflow_dispatch: {}

concurrency:
group: deploy-staging-public
cancel-in-progress: true

env:
GITHUB_TOKEN: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}

jobs:
determine-tag:
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.poll-tag.outputs.tag }}
semver: ${{ steps.poll-tag.outputs.semver }}
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
fetch-depth: 0

- name: Read version from manifest
id: manifest
run: |
VERSION=$(jq -r '."."' .release-please-manifest.json)
echo "version=$VERSION"
echo "version=$VERSION" >> $GITHUB_OUTPUT

- name: Poll for tag at HEAD
id: poll-tag
run: |
# wait for tag to be pushed (either RC or stable release)
VERSION="${{ steps.manifest.outputs.version }}"
HEAD_SHA=$(git rev-parse HEAD)
MAX_ATTEMPTS=60
echo "Looking for tag matching v${VERSION} or v${VERSION}-rc.* at HEAD ($HEAD_SHA)"

for i in $(seq 1 $MAX_ATTEMPTS); do
git fetch --tags --force

TAG=$(git tag --points-at HEAD | grep -E "^v${VERSION}(-rc\.[0-9]+)?$" | sort -V | tail -n 1 || true)

if [ -n "$TAG" ]; then
echo "Found tag: $TAG"
SEMVER="${VERSION}"
echo "tag=$TAG" >> $GITHUB_OUTPUT
echo "semver=$SEMVER" >> $GITHUB_OUTPUT
exit 0
fi

echo "Attempt $i/$MAX_ATTEMPTS: No matching tag yet, waiting 10s..."
sleep 10
done

echo "Error: No tag found for v${VERSION} at HEAD after 10 minutes"
exit 1

wait-for-ci3:
needs: determine-tag
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
fetch-depth: 1

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22

- name: Wait for CI3
run: spartan/scripts/wait_for_ci3.ts "${{ needs.determine-tag.outputs.tag }}"

deploy:
needs: [determine-tag, wait-for-ci3]
runs-on: ubuntu-latest
steps:
- name: Trigger deploy-network on next branch
run: |
echo "Triggering deploy-network for staging-public with semver=${{ needs.determine-tag.outputs.semver }}"
gh workflow run deploy-network.yml \
--repo "${{ github.repository }}" \
--ref next \
-f network=staging-public \
-f semver="${{ needs.determine-tag.outputs.semver }}" \
-f source_tag="${{ needs.determine-tag.outputs.tag }}"
68 changes: 68 additions & 0 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,74 @@ jobs:

echo "✅ Created tag: $TAG_NAME"

dedupe-release-notes:
name: Deduplicate release notes
needs: [release-please]
if: ${{ needs.release-please.outputs.release-pr }}
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Check if release notes branch exists
id: check-branch
env:
GH_TOKEN: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
run: |
NOTES_BRANCH="${{ fromJSON(needs.release-please.outputs.release-pr).headBranchName }}--release-notes"
if git ls-remote --exit-code "https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git" "refs/heads/$NOTES_BRANCH" >/dev/null 2>&1; then
echo "exists=true" >> $GITHUB_OUTPUT
echo "branch=$NOTES_BRANCH" >> $GITHUB_OUTPUT
else
echo "exists=false" >> $GITHUB_OUTPUT
echo "Release notes branch $NOTES_BRANCH does not exist, skipping deduplication"
fi

- name: Checkout release notes branch
if: steps.check-branch.outputs.exists == 'true'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
ref: ${{ steps.check-branch.outputs.branch }}
fetch-depth: 1
token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}

- name: Fetch dedupe script from target branch
if: steps.check-branch.outputs.exists == 'true'
run: |
git fetch origin ${{ github.ref_name }} --depth=1
git show origin/${{ github.ref_name }}:scripts/dedupe_release_notes.py > /tmp/dedupe_release_notes.py

- name: Configure Git
if: steps.check-branch.outputs.exists == 'true'
run: |
git config --global user.name AztecBot
git config --global user.email tech@aztecprotocol.com

- name: Deduplicate release notes
if: steps.check-branch.outputs.exists == 'true'
run: |
if [ -f release-notes.md ]; then
python3 /tmp/dedupe_release_notes.py release-notes.md
git add release-notes.md
if ! git diff --cached --quiet; then
git commit -m "chore: deduplicate release notes"
git push
fi
fi

- name: Update PR body with deduped notes
if: steps.check-branch.outputs.exists == 'true'
env:
GH_TOKEN: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
run: |
if [ -f release-notes.md ]; then
PR_NUMBER=${{ fromJSON(needs.release-please.outputs.release-pr).number }}
NOTES_SIZE=$(wc -c < release-notes.md)
if [ "$NOTES_SIZE" -lt 60000 ]; then
gh pr edit "$PR_NUMBER" --body "$(cat release-notes.md)"
fi
fi

update-docs:
name: Update docs
env:
Expand Down
2 changes: 1 addition & 1 deletion l1-contracts/script/deploy/DeploymentConfiguration.sol
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ contract DeploymentConfiguration is IDeploymentConfiguration, Test {
}),
votingDelay: Timestamp.wrap(3 * 24 * 60 * 60),
votingDuration: Timestamp.wrap(7 * 24 * 60 * 60),
executionDelay: Timestamp.wrap(7 * 24 * 60 * 60),
executionDelay: Timestamp.wrap(30 * 24 * 60 * 60),
gracePeriod: Timestamp.wrap(7 * 24 * 60 * 60),
quorum: 0.2e18,
requiredYeaMargin: 0.33e18,
Expand Down
2 changes: 1 addition & 1 deletion l1-contracts/script/deploy/RollupConfiguration.sol
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ contract RollupConfiguration is IRollupConfiguration, Test {
uint16 sequencerBps;
uint96 checkpointReward;
sequencerBps = 7000;
checkpointReward = 400e18;
checkpointReward = 500e18;

return RewardConfig({
rewardDistributor: _rewardDistributor,
Expand Down
2 changes: 1 addition & 1 deletion l1-contracts/src/core/libraries/rollup/FeeLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ uint256 constant MAX_ETH_PER_FEE_ASSET = 1e14;
uint256 constant MAX_FEE_ASSET_PRICE_MODIFIER_BPS = 100;

uint256 constant L1_GAS_PER_CHECKPOINT_PROPOSED = 300_000;
uint256 constant L1_GAS_PER_EPOCH_VERIFIED = 1_000_000;
uint256 constant L1_GAS_PER_EPOCH_VERIFIED = 3_600_000;

uint256 constant MINIMUM_CONGESTION_MULTIPLIER = 1e9;

Expand Down
13 changes: 8 additions & 5 deletions l1-contracts/src/core/slashing/TallySlashingProposer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -594,13 +594,16 @@ contract TallySlashingProposer is EIP712 {
function getVotes(SlashRound _round, uint256 _index) external view returns (bytes memory) {
uint256 expectedLength = COMMITTEE_SIZE * ROUND_SIZE_IN_EPOCHS / 4;

// _getRoundVotes reverts if _round is out of the roundabout range.
// But within-range the storage slot may still hold stale data from a
// previous round that mapped to the same circular index. Guard against
// that by checking the authoritative round metadata first.
// _getRoundData reverts if _round is out of the roundabout range and
// returns empty metadata if this circular slot still contains round data
// from an older round number.
SlashRound currentRound = getCurrentRound();
RoundData memory roundData = _getRoundData(_round, currentRound);
if (roundData.voteCount == 0) {

// Vote storage is not cleared when a circular slot is reused. If this
// round has fewer votes than a previous one that shared the same slot,
// indices >= voteCount would otherwise return stale vote bytes.
if (_index >= roundData.voteCount) {
return new bytes(expectedLength);
}

Expand Down
3 changes: 2 additions & 1 deletion l1-contracts/test/fees/FeeRollup.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,11 @@ import {MinimalFeeModel} from "./MinimalFeeModel.sol";
import {RollupBuilder} from "../builder/RollupBuilder.sol";
import {AttestationLibHelper} from "@test/helper_libraries/AttestationLibHelper.sol";
import {Signature} from "@aztec/shared/libraries/SignatureLib.sol";
import {TestConstants} from "../harnesses/TestConstants.sol";

// solhint-disable comprehensive-interface

uint256 constant MANA_TARGET = 100_000_000;
uint256 constant MANA_TARGET = TestConstants.AZTEC_MANA_TARGET;

contract FeeRollupTest is FeeModelTestPoints, DecoderBase {
using stdStorage for StdStorage;
Expand Down
3 changes: 2 additions & 1 deletion l1-contracts/test/fees/MinimalFeeModel.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Copyright 2024 Aztec Labs.
pragma solidity >=0.8.27;

import {TestConstants} from "../harnesses/TestConstants.sol";
import {
FeeLib,
FeeHeaderLib,
Expand Down Expand Up @@ -55,7 +56,7 @@ contract MinimalFeeModel {
uint256 internal constant BLOB_GAS_PER_BLOB = 2 ** 17;
uint256 internal constant GAS_PER_BLOB_POINT_EVALUATION = 50_000;

uint256 internal constant MANA_TARGET = 100_000_000;
uint256 internal constant MANA_TARGET = TestConstants.AZTEC_MANA_TARGET;

Slot public constant LIFETIME = Slot.wrap(5);
Slot public constant LAG = Slot.wrap(2);
Expand Down
Loading
Loading