Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
45a7404
chore(deps): bump actions/setup-node from 5 to 6
dependabot[bot] May 2, 2026
b62b1d8
chore(deps): bump actions/upload-artifact from 4 to 7
dependabot[bot] May 2, 2026
a797411
chore(deps): bump actions/checkout from 5 to 6
dependabot[bot] May 2, 2026
e504b6a
chore(deps): bump actions/github-script from 7 to 9
dependabot[bot] May 2, 2026
deff8a2
chore(deps): bump the frontend-minor-patch group with 13 updates
dependabot[bot] May 2, 2026
05e3c98
Merge pull request #7 from iap/dependabot/npm_and_yarn/frontend-minor…
iap May 3, 2026
d3152b6
Merge pull request #5 from iap/dependabot/github_actions/actions/chec…
iap May 3, 2026
da1bd9c
Merge pull request #3 from iap/dependabot/github_actions/actions/setu…
iap May 3, 2026
39efb7f
Merge pull request #4 from iap/dependabot/github_actions/actions/uplo…
iap May 3, 2026
bef8732
Merge pull request #6 from iap/dependabot/github_actions/actions/gith…
iap May 3, 2026
729b438
fix(readiness): run pre-checks before contracts working directory exists
iap May 3, 2026
42160a7
fix(frontend): remove non-component export from button ui
iap May 3, 2026
62c7c34
ci(security): add codeql and dependency review gates
iap May 3, 2026
dd0b1a8
chore(security): add local slither install and core scan targets
iap May 3, 2026
1dcab6c
docs(phase1): add comprehensive contributor & deployment runbooks
iap May 5, 2026
b763d4e
chore(deps): bump github/codeql-action from 3 to 4 (#16)
dependabot[bot] May 5, 2026
81574ac
chore(ci): bump dependency-review-action from v4 to v5
iap May 5, 2026
ee8a183
chore(ci): disable CodeQL triggers until repo transferred to org with…
iap May 5, 2026
ff58873
Enable org-transfer governance: CodeQL, Gitleaks, release-gate contai…
iap May 6, 2026
7fb3338
fix(ci): add USER root in release-gate Dockerfile for apt-get permiss…
iap May 6, 2026
8925df3
ci(security): fix dependency review tag and use OSS gitleaks CLI
iap May 6, 2026
3ed0b08
ci(security): fix gitleaks PATH on github runner
iap May 6, 2026
71f688f
ci(security): run gitleaks scan via docker image
iap May 6, 2026
8128007
ci(security): remove hardcoded key and scope gitleaks to workspace
iap May 6, 2026
afb066c
ci(contracts): fix anvil key extraction for release check
iap May 6, 2026
c98f13a
ci(contracts): require 64-byte anvil private key extraction
iap May 6, 2026
773f284
ci: always run contracts/frontend checks on protected branches (#21)
iap May 6, 2026
0573b9b
ci: phase-1 reusable workflows for frontend, slither, and secrets sca…
iap May 6, 2026
51c8f1c
fix(contracts): bridge approval safety + IRYLA interface decoupling
iap May 6, 2026
24b716e
docs: sync governance and CI docs with current protections
iap May 6, 2026
4064cab
chore(deps): bump frontend minor/patch dependencies
dependabot[bot] May 7, 2026
280faa8
fix(deps): bump vite 6.1.0 → 6.4.2 (security)
iap May 7, 2026
91b6a69
test(contracts): add missing unit test coverage
iap May 7, 2026
0a8ded7
chore(governance): migrate CODEOWNERS to @trade/maintainers team
iap May 7, 2026
df25264
chore(ci): switch CodeRabbit to assertive profile
iap May 7, 2026
fbc3ce4
fix(docs): add VALIDATE_MODE to staging checklist prerequisites
iap May 7, 2026
e5ecd9e
chore(docs): remove stale pre-transfer planning documents
iap May 7, 2026
98e49c1
chore(governance): clean up CODEOWNERS
iap May 7, 2026
638344e
fix(ci): workflow correctness and consistency fixes
iap May 7, 2026
35009d8
feat(contracts): migrate AttestedSettlementVerifier to EIP-712
iap May 7, 2026
d2e24c3
chore: improve gitignore coverage
iap May 7, 2026
9c45f70
fix(ci): reliability and correctness fixes
iap May 7, 2026
8bfc148
chore(deps): ignore transitive alerts from super-cli
iap May 7, 2026
3cbd048
docs: add SECURITY.md
iap May 7, 2026
5fa1d83
chore(deps): bump @types/node from 22.13.1 to 25.6.1
dependabot[bot] May 7, 2026
ee25173
chore(deps): bump typescript from 5.7.3 to 6.0.3
dependabot[bot] May 7, 2026
71dc94c
chore(deps): bump frontend-minor-patch group
dependabot[bot] May 7, 2026
b6e9060
chore(deps): bump docker/setup-buildx-action from 3 to 4
dependabot[bot] May 8, 2026
9d85729
chore(deps): bump frontend-minor-patch group
dependabot[bot] May 8, 2026
79a9295
fix: stale references and check name mismatches
iap May 8, 2026
d3ea0f5
test(contracts): add bridge integration test against supersim
iap May 8, 2026
bd423c0
test(contracts): add bridge adapter invariant fuzz tests
iap May 8, 2026
85c8c00
fix(governance): sync check lists and fix ruleset condition
iap May 8, 2026
9f93aa8
chore(governance): document new ruleset structure
iap May 8, 2026
55d374d
feat(token): rename RYLA display name to 'RYLA Credits'
iap May 8, 2026
2f21c7d
test
iap May 9, 2026
4de5277
fix(ci): use matrix language as CodeQL job name
iap May 9, 2026
fdfa7d3
chore(config): harden staging profile and document environment setup
iap May 9, 2026
30cedd5
feat(frontend): replace dev dashboard with protocol info page
iap May 9, 2026
889b926
chore(docs): cleanup and NatSpec improvements
iap May 10, 2026
44a9400
fix(contracts): document setVerifier interface check limitation
iap May 10, 2026
384880a
docs: add protocol philosophy to README
iap May 10, 2026
22d9276
fix(ci): add working-directory override to pre-checkout branch enforc…
iap May 10, 2026
c31b5bd
fix(ops): enable post-deploy in rehearse-production-lock
iap May 10, 2026
98811e0
fix(ops): export deployed verifier address to env before PostDeployMA…
iap May 10, 2026
8d590eb
fix(ci): exclude Anvil default key from secrets drift guard
iap May 10, 2026
6e74b1e
test
iap May 10, 2026
3b5720b
fix(docs): correct two inaccurate invariants in THREAT_MODEL.md
iap May 10, 2026
8627f4b
fix(contracts): move consumedIntents assignment before external call …
iap May 10, 2026
bdcc79e
chore(governance): set canary to 0 required approvals for solo mainta…
iap May 10, 2026
4057da5
docs(contracts): add NatSpec to settleMint and settleBurn
iap May 10, 2026
aa6fa73
fix(ops): wait for tx confirmation in staging rehearsal
iap May 10, 2026
7d7569c
fix(governance): set all branches to 0 required approvals
iap May 10, 2026
cb479f3
fix(governance): restrict direct pushes to trade/maintainers team
iap May 10, 2026
9ce6d97
fix(deps): update drizzle-orm dependabot ignore rule to 0.38.4
iap May 11, 2026
6c02586
feat(contracts): add Groth16SettlementVerifier
iap May 11, 2026
cead944
feat(circuits): add UTXOSettlement circom circuit
iap May 11, 2026
8e080bd
feat(contracts): add MARKPool ZK UTXO pool domain
iap May 11, 2026
fc29df6
fix(contracts): rewrite MARKPool for MARK's 4-signal circuit
iap May 11, 2026
e0a8937
fix(circuits): add range constraints and isMint burn path
iap May 11, 2026
ba6d3df
feat(pool): add MARKPool ZK UTXO pool domain (#100)
iap May 14, 2026
77d6814
fix(settlement): return false on malformed proof in Groth16Settlement…
iap May 14, 2026
218d460
fix(ci): exclude integration tests from test-core target (#102)
iap May 15, 2026
8ef172e
fix(test): remove unverifiable cross-chain assertion from integration…
iap May 15, 2026
79fb4f1
docs(pool): correct KI-8 — PoseidonT3 inlined via via_ir, MARKPool de…
iap May 15, 2026
86aa621
security: harden pool domain before testnet (#105)
iap May 15, 2026
6c62b68
ci: fix 4 workflow issues pre-testnet (#106)
iap May 15, 2026
8e7f2d3
fix(pool): resolve PoseidonT3 deployment blocker via external interfa…
iap May 15, 2026
33baaa6
chore(circuits): remove stale UTXOSettlement artifacts (#108)
iap May 16, 2026
defecd3
fix: address codebase review findings (#109)
iap May 16, 2026
4e41eaa
ci: pin action-shellcheck to commit SHA (#110)
iap May 16, 2026
4c7bb8f
chore(deps): bump actions/dependency-review-action from 4 to 5 (#90)
dependabot[bot] May 16, 2026
0924115
chore(deps): bump the frontend-minor-patch group across 1 directory w…
dependabot[bot] May 16, 2026
8f30724
chore: update LICENSE copyright to Trade 2026 (#111)
iap May 16, 2026
fd428ff
chore: remove stale deploy-contracts step from mprocs.yaml (#112)
iap May 17, 2026
87f9d45
chore: promote dev to canary for OP Sepolia staging
iap May 17, 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
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,6 @@ updates:
- dependency-name: "@hono/node-server"
versions: ["<= 1.13.8"]
- dependency-name: "drizzle-orm"
versions: ["<= 0.38.1"]
versions: ["<= 0.38.4"]
- dependency-name: "@stablelib/ed25519"
versions: ["<= 1.0.3"]
25 changes: 2 additions & 23 deletions .github/workflows/_reusable-contracts-slither.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,6 @@ name: Reusable Contracts Slither

on:
workflow_call:
inputs:
foundry_version:
description: Foundry version used for Slither compile path
required: false
default: "1.5.0"
type: string

jobs:
slither-core:
Expand All @@ -29,23 +23,8 @@ jobs:
run: pip install slither-analyzer==0.11.5

- name: Setup Foundry
uses: ./.github/actions/setup-foundry
with:
foundry-version: ${{ inputs.foundry_version }}
uses: foundry-rs/foundry-toolchain@c7450ba673e133f5ee30098b3b54f444d3a2ca2d # v1.8.0

- name: Run Slither on MARK core contracts
working-directory: contracts
run: |
for target in \
src/token/RYLA.sol \
src/bridge/MARKBridgeAdapter.sol \
src/settlement/MARKSettlementModule.sol \
src/settlement/verifier/AttestedSettlementVerifier.sol
do
slither "$target" \
--solc-remaps "@interop-lib/=lib/interop-lib/src/ @openzeppelin/=lib/createx/lib/openzeppelin-contracts/" \
--exclude-dependencies \
--exclude "naming-convention,timestamp,arbitrary-send-erc20,reentrancy-balance,reentrancy-benign" \
--filter-paths "lib|test|script|out|cache" \
--fail-medium
done
run: make slither-core
43 changes: 43 additions & 0 deletions .github/workflows/circuits-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Circuits CI

on:
pull_request:
push:
branches:
- main
- canary
- dev

jobs:
circuits-test:
name: Circuits Witness Tests
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
run:
working-directory: circuits

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'

- name: Install circom
run: |
CIRCOM_VERSION="v2.2.3"
CIRCOM_URL="https://github.com/iden3/circom/releases/download/${CIRCOM_VERSION}/circom-linux-amd64"
curl -L "$CIRCOM_URL" -o circom
chmod +x circom
sudo mv circom /usr/local/bin/circom
circom --version

- name: Install dependencies
run: npm ci

- name: Run witness tests
run: npm test
6 changes: 0 additions & 6 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,6 @@ name: CodeQL
on:
pull_request:
branches: [main, canary, dev]
paths:
- "src/**"
- "contracts/**"
- "package.json"
- "pnpm-lock.yaml"
- ".github/workflows/codeql.yml"
push:
branches: [main, canary, dev]
paths:
Expand Down
39 changes: 34 additions & 5 deletions .github/workflows/contracts-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
submodules: recursive

- name: Setup Foundry
uses: foundry-rs/foundry-toolchain@v1
uses: foundry-rs/foundry-toolchain@c7450ba673e133f5ee30098b3b54f444d3a2ca2d # v1.8.0

- name: Enforce architecture boundaries
run: make architecture-guard
Expand Down Expand Up @@ -66,7 +66,7 @@ jobs:
submodules: recursive

- name: Setup Foundry
uses: foundry-rs/foundry-toolchain@v1
uses: foundry-rs/foundry-toolchain@c7450ba673e133f5ee30098b3b54f444d3a2ca2d # v1.8.0

- name: Start anvil
run: anvil --host 127.0.0.1 --port 8545 > /tmp/anvil.log 2>&1 &
Expand Down Expand Up @@ -120,6 +120,28 @@ jobs:
.gitCommit != null
' broadcast/mark-release-ci.json

- name: Run pool release orchestrator dry-run
run: |
TOKEN=$(jq -r '.token' broadcast/mark-release-ci.json)
POOL_VERIFIER=$(forge create src/pool/verifier/MARKPoolVerifier.sol:MARKPoolVerifier \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY \
--broadcast \
--json | jq -r '.deployedTo')
if [ -z "$POOL_VERIFIER" ] || [ "$POOL_VERIFIER" = "null" ]; then
echo "failed to deploy MARKPoolVerifier for pool dry-run" >&2
exit 1
fi
MARK_RYLA_TOKEN="$TOKEN" \
MARK_POOL_VERIFIER="$POOL_VERIFIER" \
forge script script/ops/pool/ReleasePool.s.sol --rpc-url $RPC_URL -vv

# Pool execute smoke is omitted: Foundry's contract size check rejects the
# PoseidonT3 library artifact (55,856 bytes) during broadcast even though
# via_ir inlines it into MARKPool at compile time (MARKPool itself is 24,298
# bytes and deployable). The dry-run above validates the pool release script
# logic without triggering the size check. See KI-8 in KNOWN_ISSUES.md.

- name: Print anvil logs on failure
if: failure()
run: tail -n 200 /tmp/anvil.log || true
Expand All @@ -140,7 +162,7 @@ jobs:
submodules: recursive

- name: Setup Foundry
uses: foundry-rs/foundry-toolchain@v1
uses: foundry-rs/foundry-toolchain@c7450ba673e133f5ee30098b3b54f444d3a2ca2d # v1.8.0

- name: Run production mode smoke target
run: make smoke-production-mode
Expand Down Expand Up @@ -184,14 +206,21 @@ jobs:
working-directory: .

- name: Setup Foundry
uses: foundry-rs/foundry-toolchain@v1
uses: foundry-rs/foundry-toolchain@c7450ba673e133f5ee30098b3b54f444d3a2ca2d # v1.8.0

- name: Start supersim
run: pnpm dev:supersim > /tmp/supersim.log 2>&1 &
working-directory: .

- name: Wait for supersim readiness
run: pnpm wait-port 8420
run: |
for _ in $(seq 1 30); do
if nc -z 127.0.0.1 9545 && nc -z 127.0.0.1 9546; then exit 0; fi
sleep 2
done
echo "supersim did not become ready on ports 9545/9546" >&2
tail -n 100 /tmp/supersim.log || true
exit 1
working-directory: .

- name: Run integration suite
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/contracts-mainnet-readiness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
run: pip install slither-analyzer==0.11.5

- name: Setup Foundry
uses: foundry-rs/foundry-toolchain@v1
uses: foundry-rs/foundry-toolchain@c7450ba673e133f5ee30098b3b54f444d3a2ca2d # v1.8.0

- name: Run mainnet readiness gate
working-directory: contracts
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/contracts-production-lock-verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ jobs:
submodules: recursive

- name: Setup Foundry
uses: foundry-rs/foundry-toolchain@v1
uses: foundry-rs/foundry-toolchain@c7450ba673e133f5ee30098b3b54f444d3a2ca2d # v1.8.0

- name: Run production lock verification
run: make verify-production-lock
Expand Down
3 changes: 0 additions & 3 deletions .github/workflows/contracts-release-gate-container.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ name: Contracts Release Gate (Containerized)

on:
pull_request:
paths:
- "contracts/**"
- ".github/workflows/contracts-release-gate-container.yml"
workflow_dispatch:
inputs:
gate_mode:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/contracts-staging-rehearsal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ jobs:
}

- name: Setup Foundry
uses: foundry-rs/foundry-toolchain@v1
uses: foundry-rs/foundry-toolchain@c7450ba673e133f5ee30098b3b54f444d3a2ca2d # v1.8.0

- name: Run staging rehearsal (release + production lock verify)
run: make rehearse-production-lock
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
uses: actions/checkout@v6

- name: Review dependency changes
uses: actions/dependency-review-action@v4
uses: actions/dependency-review-action@v5
with:
fail-on-severity: high
warn-only: false
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/scripts-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ jobs:
uses: actions/checkout@v6

- name: Run shellcheck
uses: ludeeus/action-shellcheck@2.0.0
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # v2.0.0
with:
scandir: "scripts contracts/script"
26 changes: 26 additions & 0 deletions DEPLOYMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,32 @@ make verify-evidence-manifest
make sign-evidence-manifest
```

#### Step 18: Wire Groth16SettlementVerifier (if using ZK settlement)

After deploying `Groth16SettlementVerifier`, two post-deploy calls are required
before ZK-based settlement is active. `AttestedSettlementVerifier` remains the
fallback until this is complete.

```bash
# 1. Bind the verifier to the settlement module (prevents cross-module replay)
cast send $GROTH16_VERIFIER_ADDRESS \
"setSettlementModule(address)" $SETTLEMENT_MODULE_ADDRESS \
--rpc-url $MAINNET_RPC --private-key $DEPLOYER_KEY

# 2. Set the MARKPoolVerifier contract
cast send $GROTH16_VERIFIER_ADDRESS \
"setVerifierContract(address)" $MARK_POOL_VERIFIER_ADDRESS \
--rpc-url $MAINNET_RPC --private-key $DEPLOYER_KEY

# 3. Wire into settlement module
cast send $SETTLEMENT_MODULE_ADDRESS \
"setVerifier(address,bool)" $GROTH16_VERIFIER_ADDRESS true \
--rpc-url $MAINNET_RPC --private-key $DEPLOYER_KEY
```

See `contracts/RUNBOOK.md` → "Groth16 Direction Rollout" for the full
migration sequence before enabling production mode.

---

## Verification & Monitoring
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(The MIT License)

Copyright 2020-2025 Optimism
Copyright 2026 Trade

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
Expand Down
9 changes: 9 additions & 0 deletions circuits/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
build/
node_modules/
*.zkey
*.ptau
witness.wtns

# Prototype files (superseded by circuits/mark/MARKPool.circom)
utxo/
setup.js
Loading
Loading