Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
c574668
feat: add a POC for proposing with real time proofs
AnshuJalan Jan 22, 2026
686bac2
chore: add debug
AnshuJalan Jan 22, 2026
9e03c71
chore: add debug
AnshuJalan Jan 22, 2026
450eb1f
Jc/refac catalyst docker build (#806)
nmjustinchan Jan 22, 2026
1978daf
feat: nits
AnshuJalan Jan 22, 2026
8fbd4a9
feat: nits
AnshuJalan Jan 23, 2026
43f86c4
fix: recovery
AnshuJalan Jan 23, 2026
71a4d79
feat: add same slot composability
AnshuJalan Jan 28, 2026
4f8671d
fix: rpc channel blocked
AnshuJalan Jan 29, 2026
d7a6c19
refac: only publish latest tag for master branch
nmjustinchan Jan 29, 2026
85434f3
refac: only publish latest tag for master branch
nmjustinchan Jan 29, 2026
1b36fb0
feat: first working demo
AnshuJalan Feb 3, 2026
11223ea
feat: add new rpc endpoint
AnshuJalan Feb 12, 2026
cc9f35c
docs: poc explainer
AnshuJalan Feb 13, 2026
7315f40
feat: surge actual real time proving (#891)
AnshuJalan Mar 29, 2026
5c661ce
Merge branch 'master' into surge-real-time-poc
smartprogrammer93 Mar 29, 2026
7fd8608
fix: restore fork selection, gate realtime mode behind FORK=realtime …
smartprogrammer93 Mar 29, 2026
fe1b29a
fix: address code review findings from PR #804
smartprogrammer93 Mar 29, 2026
bf2323a
fix: resolve CI lint and security audit failures
smartprogrammer93 Mar 29, 2026
9cf65ca
fix: resolve all clippy warnings and security audit failures
smartprogrammer93 Mar 29, 2026
8edd2a6
fix: correct typo 'intitiated' -> 'initiated'
smartprogrammer93 Mar 29, 2026
0765f7a
fix: gh action to promote tag on prod (#924)
gehlotanish Mar 30, 2026
ab9f6b0
feat: auto-reorg on L1 failure, surge_txStatus RPC, and recovery fixe…
smartprogrammer93 Apr 2, 2026
d6085c7
Merge branch 'master' into surge-real-time-poc
smartprogrammer93 Apr 3, 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
74 changes: 74 additions & 0 deletions .env.sample.migration
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# =============================================================================
# SHARED WITH SHASTA (existing env variables)
# =============================================================================

CATALYST_NODE_ECDSA_PRIVATE_KEY=
# PRECONFER_ADDRESS=
# WEB3SIGNER_L1_URL=
# WEB3SIGNER_L2_URL=

L1_RPC_URLS=
L1_BEACON_URL=
BLOB_INDEXER_URL=

TAIKO_GETH_RPC_URL=ws://127.0.0.1:1234
TAIKO_GETH_AUTH_RPC_URL=http://127.0.0.1:1235
TAIKO_DRIVER_URL=http://127.0.0.1:1236
JWT_SECRET_FILE_PATH=/tmp/jwtsecret

L1_SLOT_DURATION_SEC=12
L1_SLOTS_PER_EPOCH=32
PRECONF_HEARTBEAT_MS=2000

TAIKO_ANCHOR_ADDRESS=0x1670010000000000000000000000000000010001
TAIKO_BRIDGE_L2_ADDRESS=0x0000000000000000000000000000000000000000

BLOBS_PER_BATCH=3
MAX_BLOCKS_PER_BATCH=1
MAX_TIME_SHIFT_BETWEEN_BLOCKS_SEC=255
MAX_ANCHOR_HEIGHT_OFFSET_REDUCTION_VALUE=10

MAX_BYTES_PER_TX_LIST=126976
MIN_BYTES_PER_TX_LIST=8192
THROTTLING_FACTOR=2
PRECONF_MIN_TXS=3
PRECONF_MAX_SKIPPED_L2_SLOTS=2

MIN_PRIORITY_FEE_PER_GAS_WEI=1000000000
TX_FEES_INCREASE_PERCENTAGE=0
MAX_ATTEMPTS_TO_SEND_TX=4
MAX_ATTEMPTS_TO_WAIT_TX=5
DELAY_BETWEEN_TX_ATTEMPTS_SEC=63
EXTRA_GAS_PERCENTAGE=100

RPC_L2_EXECUTION_LAYER_TIMEOUT_MS=1000
RPC_DRIVER_PRECONF_TIMEOUT_MS=60000
RPC_DRIVER_STATUS_TIMEOUT_MS=1000

FUNDS_MONITOR_INTERVAL_SEC=60
THRESHOLD_ETH=500000000000000000
THRESHOLD_TAIKO=0

DISABLE_BRIDGING=true
AMOUNT_TO_BRIDGE_FROM_L2_TO_L1=1000000000000000000
BRIDGE_RELAYER_FEE=3047459064000000
BRIDGE_TRANSACTION_FEE=1000000000000000

FORK_SWITCH_TRANSITION_PERIOD_SEC=60
PACAYA_TIMESTAMP_SEC=0
SHASTA_TIMESTAMP_SEC=99999999999
WHITELIST_MONITOR_INTERVAL_SEC=60

# =============================================================================
# NEW FOR REALTIME FORK
# =============================================================================

REALTIME_INBOX_ADDRESS=
PROPOSER_MULTICALL_ADDRESS=
L1_BRIDGE_ADDRESS=

RAIKO_URL=http://localhost:8080
RAIKO_API_KEY=
RAIKO_PROOF_TYPE=sgx
RAIKO_L2_NETWORK=taiko_mainnet
RAIKO_L1_NETWORK=ethereum
170 changes: 114 additions & 56 deletions .github/workflows/node_docker_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
DOCKER_PUBLIC_REGISTRY: docker.io
DOCKER_PUBLIC_REPOSITORY: nethermind/catalyst-node
DOCKER_REGISTRY: nethermind.jfrog.io
DOCKER_REPOSITORY_STAGING: core-oci-local-staging/catalyst-node
DOCKER_REPOSITORY_PROD: core-oci-local-prod/catalyst-node
MASTER_BRANCH: refs/heads/master

jobs:
build:
Expand Down Expand Up @@ -50,7 +51,8 @@
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- uses: docker/login-action@v3
- name: Login to JFrog Artifactory
uses: docker/login-action@v3
with:
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ secrets.ARTIFACTORY_CORE_USERNAME }}
Expand All @@ -64,24 +66,20 @@
file: Dockerfile
platforms: ${{ matrix.platform }}
push: true
outputs: type=image,name=${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REPOSITORY_STAGING }},push-by-digest=true,name-canonical=true
outputs: type=image,name=${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REPOSITORY_PROD }},push-by-digest=true,name-canonical=true

- name: Set digest output
id: digest
run: |
if [ "${{ matrix.short }}" = "amd64" ]; then
echo "amd64=${{ steps.build.outputs.digest }}" >> $GITHUB_OUTPUT
fi
if [ "${{ matrix.short }}" = "arm64" ]; then
echo "arm64=${{ steps.build.outputs.digest }}" >> $GITHUB_OUTPUT
fi
echo "${{ matrix.short }}=${{ steps.build.outputs.digest }}" >> $GITHUB_OUTPUT

merge:
name: Merge and push multi-arch manifest
runs-on: ubuntu-latest
needs: build
steps:
- uses: docker/login-action@v3
- name: Login to JFrog Artifactory
uses: docker/login-action@v3
with:
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ secrets.ARTIFACTORY_CORE_USERNAME }}
Expand All @@ -90,79 +88,139 @@
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Determine event type and set tags
id: event
- name: Calculate SHA tag
id: sha
run: |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
echo "is_tag=true" >> $GITHUB_OUTPUT
echo "is_branch=false" >> $GITHUB_OUTPUT
VERSION=${GITHUB_REF#refs/tags/}
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag_list=type=raw,value=$VERSION" >> $GITHUB_OUTPUT
else
echo "is_tag=false" >> $GITHUB_OUTPUT
echo "is_branch=true" >> $GITHUB_OUTPUT
SHORT_SHA="${{ github.sha }}"
SHORT_SHA=${SHORT_SHA:0:7}
echo "tag=sha-${SHORT_SHA}" >> $GITHUB_OUTPUT
echo "short=${SHORT_SHA}" >> $GITHUB_OUTPUT

- name: Determine tags and event type
id: tags
run: |
REF="${{ github.ref }}"
REALTIME_TAG="realtime-${{ steps.sha.outputs.short }}"
SOURCE_PROMOTE_TAG="${{ steps.sha.outputs.tag }}"
IS_MASTER=false
IS_TAG=false
VERSION_TAG=""
PROMOTE_TAGS="$REALTIME_TAG"

if [[ "$REF" == refs/tags/* ]]; then
IS_TAG=true
VERSION_TAG=${REF#refs/tags/}
echo "tag_list=type=raw,value=$VERSION_TAG" >> $GITHUB_OUTPUT
elif [[ "$REF" == ${{ env.MASTER_BRANCH }} ]]; then
IS_MASTER=true
echo "tag_list=type=raw,value=latest" >> $GITHUB_OUTPUT
else
echo "tag_list=type=sha,value=${{ github.sha }}" >> $GITHUB_OUTPUT
fi

- name: Docker meta
echo "is_master=$IS_MASTER" >> $GITHUB_OUTPUT
echo "is_tag=$IS_TAG" >> $GITHUB_OUTPUT
echo "version_tag=$VERSION_TAG" >> $GITHUB_OUTPUT
echo "source_promote_tag=$SOURCE_PROMOTE_TAG" >> $GITHUB_OUTPUT
echo "promote_tags=$PROMOTE_TAGS" >> $GITHUB_OUTPUT
echo "PROMOTE_TAGS=$PROMOTE_TAGS" >> $GITHUB_ENV

- name: Generate Docker metadata
id: meta
uses: docker/metadata-action@v5

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow Medium

Unpinned 3rd party Action 'Catalyst Node - Docker build and push' step
Uses Step: meta
uses 'docker/metadata-action' with ref 'v5', not a pinned commit hash
with:
images: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REPOSITORY_STAGING }}
tags: ${{ steps.event.outputs.tag_list }}
images: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REPOSITORY_PROD }}
tags: ${{ steps.tags.outputs.tag_list }}

- name: Create manifest list and push
- name: Create and push manifest list
run: |
# Filter out "latest" tag if not on master branch
if [[ "${{ steps.tags.outputs.is_master }}" != "true" ]]; then
FILTERED_TAGS=$(jq -cr '.tags | map(select(. | endswith(":latest") | not)) | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON")
else
FILTERED_TAGS=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON")
fi

if [ -n "$FILTERED_TAGS" ]; then
docker buildx imagetools create \
$FILTERED_TAGS \
${{ needs.build.outputs.digest-amd64 }} \
${{ needs.build.outputs.digest-arm64 }}
fi

- name: Tag with commit SHA
run: |
docker buildx imagetools create \
$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
-t ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REPOSITORY_PROD }}:${{ steps.sha.outputs.tag }} \
${{ needs.build.outputs.digest-amd64 }} \
${{ needs.build.outputs.digest-arm64 }}

- name: Setup ORAS
uses: oras-project/setup-oras@v1

- name: Check ORAS version
run: oras version

- name: Determine tags to promote
id: promote-tags
- name: Login to JFrog Artifactory with ORAS
run: |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
BASE_VERSION=${VERSION%}
echo "TAGS=latest $BASE_VERSION" >> $GITHUB_ENV
else
echo "TAGS=latest" >> $GITHUB_ENV
fi
oras login ${{ env.DOCKER_REGISTRY }} \
-u ${{ secrets.ARTIFACTORY_CORE_USERNAME }} \
-p ${{ secrets.ARTIFACTORY_CORE_TOKEN_DEVELOPER }}

- name: Login to Dockerhub registry with ORAS
- name: Login to Docker Hub
run: |
oras login ${{ env.DOCKER_PUBLIC_REGISTRY }} \
-u ${{ secrets.DOCKER_USERNAME }} \
-p ${{ secrets.DOCKER_PASSWORD }}

- name: Promote to Dockerhub Production
- name: Promote to Docker Hub Production
run: |
for tag in $TAGS; do
echo "Current tag: $tag"
source_image="${DOCKER_REGISTRY}/${DOCKER_REPOSITORY_STAGING}:${tag}"
prod_image="${DOCKER_PUBLIC_REGISTRY}/${DOCKER_PUBLIC_REPOSITORY}:${tag}"
echo "Promoting ${source_image} to ${prod_image}"
oras cp -r "${source_image}" "${prod_image}"
set -e
SOURCE_TAG="${{ steps.tags.outputs.source_promote_tag }}"
echo "Tags to promote: $PROMOTE_TAGS"
for tag in $PROMOTE_TAGS; do
source_image="${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REPOSITORY_PROD }}:${SOURCE_TAG}"
prod_image="${{ env.DOCKER_PUBLIC_REGISTRY }}/${{ env.DOCKER_PUBLIC_REPOSITORY }}:${tag}"
echo ""
echo "=== Promoting tag: ${tag} ==="
echo "Source: ${source_image}"
echo "Target: ${prod_image}"

if ! oras cp -r "${source_image}" "${prod_image}"; then
echo "ERROR: Failed to promote tag ${tag}" >&2
echo "Source: ${source_image}" >&2
echo "Target: ${prod_image}" >&2
exit 1
fi
echo "✓ Successfully promoted ${tag}"
done
echo ""
echo "All tags promoted successfully"

- name: Summary
run: |
echo "## Catalyst Node Docker build Completed" >> $GITHUB_STEP_SUMMARY
echo "### Tags" >> $GITHUB_STEP_SUMMARY
for tag in $TAGS; do
echo "- $tag" >> $GITHUB_STEP_SUMMARY
done
echo "### Notes" >> $GITHUB_STEP_SUMMARY
echo "- The images have been pushed to ${DOCKER_REPOSITORY_STAGING} repo" >> $GITHUB_STEP_SUMMARY
echo "- **STAGING Repository**: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REPOSITORY_STAGING }}" >> $GITHUB_STEP_SUMMARY
echo "- **PROD Repository**: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_PUBLIC_REGISTRY }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Tags Promoted" >> $GITHUB_STEP_SUMMARY

# Get tags from step output (more reliable than env var)
TAGS_STRING="${{ steps.tags.outputs.promote_tags }}"

# If step output is empty, try environment variable
if [ -z "$TAGS_STRING" ]; then
TAGS_STRING="$PROMOTE_TAGS"
fi

# Split tags by space and display each one
if [ -n "$TAGS_STRING" ]; then
# Convert space-separated string to array and iterate
for tag in $TAGS_STRING; do
echo "- \`${tag}\`" >> $GITHUB_STEP_SUMMARY
done
else
echo "- No tags available" >> $GITHUB_STEP_SUMMARY
fi

echo "" >> $GITHUB_STEP_SUMMARY
echo "### Repository Information" >> $GITHUB_STEP_SUMMARY
echo "- **Production**: \`${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REPOSITORY_PROD }}\`" >> $GITHUB_STEP_SUMMARY
echo "- **Production**: \`${{ env.DOCKER_PUBLIC_REGISTRY }}/${{ env.DOCKER_PUBLIC_REPOSITORY }}\`" >> $GITHUB_STEP_SUMMARY
echo "- **Platforms**: linux/amd64, linux/arm64" >> $GITHUB_STEP_SUMMARY
echo "- **Commit**: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY

echo "- **Commit**: \`${{ github.sha }}\` (\`${{ steps.sha.outputs.short }}\`)" >> $GITHUB_STEP_SUMMARY
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ venv
.DS_Store
.sum
.devcontainer
.idea
.idea
data/
Loading
Loading