Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
ea588ff
feat(CHAIN-3293) Migrate Multiproof Contracts to base/contracts (#196)
jjtny1 Mar 6, 2026
a176098
setImplementation calls in dev deploy scripts to pass required args p…
leopoldjoy Mar 7, 2026
0ed5c6e
feat(CHAIN-3446): add signer enumeration to SystemConfigGlobal (#204)
leopoldjoy Mar 11, 2026
0e6419b
Simplify and modularize aggregate verifier + verifiers (#201)
roger-bai-coinbase Mar 11, 2026
88ac6bd
Rename SystemConfigGlobal to TEEProverRegistry (#205)
leopoldjoy Mar 12, 2026
b6c4689
Add custom NitroEnclaveVerifier contract and update multiproof contra…
roger-bai-coinbase Mar 14, 2026
ad8e096
feat: add FlashblockIndex contract
xenoliss Mar 3, 2026
ca8553c
refactor: make FlashblockIndex upgradeable and emit FlashblockIndexUp…
xenoliss Mar 3, 2026
a0a7b8c
feat: setup rust bindings crate
xenoliss Mar 3, 2026
9d223e5
refactor: move bindings into bindings/go and bindings/rust
xenoliss Mar 4, 2026
364e9ce
chore: strip binding artifacts and add justfile recipes for bindings
xenoliss Mar 4, 2026
de2e8ee
chore: update semver-lock snapshot
xenoliss Mar 4, 2026
6097477
fix: use robust PascalCase to snake_case conversion in bindings-add
xenoliss Mar 5, 2026
5ee149c
chore: remove Cargo.lock from library crate
xenoliss Mar 5, 2026
cc50730
chore: add CI step to verify Rust bindings compile
xenoliss Mar 5, 2026
a460315
chore: minor change + cleaning
xenoliss Mar 17, 2026
6dcf6aa
chore: remove FlashblockIndex contract
xenoliss Mar 17, 2026
7f575f7
chore: regenerate snapshots
xenoliss Mar 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
6 changes: 6 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,12 @@ jobs:
just semver-lock-no-build
git diff --exit-code snapshots/semver-lock.json

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Check Rust bindings
run: just bindings-check

- name: Run Forge tests
run: just test
id: test
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Artifacts and Cache
artifacts
!bindings/rust/artifacts/
forge-artifacts
target
Cargo.lock
cache
broadcast
kout-proofs
Expand Down Expand Up @@ -44,5 +47,8 @@ deploy-config/getting-started.json
# IDE
/.idea/

# Foundry
foundry.lock

# OS
.DS_Store
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ deps: clean-lib
github.com/OpenZeppelin/openzeppelin-contracts-upgradeable@0a2cb9a445c365870ed7a8ab461b12acf3e27d63 \
github.com/transmissions11/solmate@8f9b23f8838670afda0fd8983f2c41e8037ae6bc \
github.com/safe-global/safe-contracts@bf943f80fec5ac647159d26161446ac5d716a294 \
github.com/Vectorized/solady@502cc1ea718e6fa73b380635ee0868b0740595f0
github.com/Vectorized/solady@502cc1ea718e6fa73b380635ee0868b0740595f0 \
github.com/base/nitro-validator@0f006d2075637dd9640e530c4a7065f5c8bb2132 \
github.com/base/op-enclave@a2d5398f04c3a8e4df929d58ee638ba4a037bfec \
github.com/automata-network/aws-nitro-enclave-attestation@10fe7be8d9840490f5655e4b2a2aba3a95ec88c1
forge install --no-git \
github.com/ethereum-optimism/superchain-registry@84bce73573f130008d84bae6e924163bab589a11
@# openzeppelin-contracts-v5 and solady-v0.0.245 use the same orgs as their
Expand Down
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion bindings/go.mod → bindings/go/go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/base/contracts/bindings
module github.com/base/contracts/bindings/go

go 1.23.0

Expand Down
File renamed without changes.
8 changes: 8 additions & 0 deletions bindings/rust/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
name = "base-contracts-bindings"
version = "0.1.0"
edition = "2021"

[dependencies]
alloy-contract = "1.5.0"
alloy-sol-types = { version = "1.5.0", features = ["json"] }
1 change: 1 addition & 0 deletions bindings/rust/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

12 changes: 11 additions & 1 deletion deploy-config/hardhat.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,5 +72,15 @@
"gasPayingTokenName": "",
"gasPayingTokenSymbol": "",
"nativeAssetLiquidityAmount": null,
"liquidityControllerOwner": "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc"
"liquidityControllerOwner": "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc",
"teeImageHash": "0x0000000000000000000000000000000000000000000000000000000000000001",
"multiproofConfigHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"multiproofGameType": 621,
"teeProposer": "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc",
"nitroEnclaveVerifier": "0x0000000000000000000000000000000000000000",
"multiproofGenesisOutputRoot": "0x0000000000000000000000000000000000000000000000000000000000000001",
"multiproofGenesisBlockNumber": 0,
"multiproofBlockInterval": 100,
"multiproofIntermediateBlockInterval": 10,
"multiproofProofThreshold": 1
}
12 changes: 11 additions & 1 deletion deploy-config/sepolia.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,15 @@
"gasPayingTokenName": "",
"gasPayingTokenSymbol": "",
"nativeAssetLiquidityAmount": null,
"liquidityControllerOwner": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301"
"liquidityControllerOwner": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301",
"teeImageHash": "0x0000000000000000000000000000000000000000000000000000000000000001",
"multiproofConfigHash": "0x12e9c45f19f9817c6d4385fad29e7a70c355502cf0883e76a9a7e478a85d1360",
"multiproofGameType": 621,
"teeProposer": "0xb28E6890Cffa969dA9851c1BF1Ac34B76EbFEe98",
"nitroEnclaveVerifier": "0x0000000000000000000000000000000000000000",
"multiproofGenesisOutputRoot": "0xbc273d5876d1858ecd5aaf4ce4eaf16c73f0187ca4271b774ed5da7d2254ba79",
"multiproofGenesisBlockNumber": 37223829,
"multiproofBlockInterval": 100,
"multiproofIntermediateBlockInterval": 10,
"multiproofProofThreshold": 1
}
1 change: 1 addition & 0 deletions deployments/11155111-dev-no-nitro.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"TEEProverRegistry":"0x8897f8E1379C7548caE146e0ee26f6b1108A8570","TEEVerifier":"0xB319EA8fAac05BB01ABcce3671BC66c5A1f9A077","DisputeGameFactory":"0xF2e2f5F97e1aE0899924bE4Dd1D1795052Ea7551","AnchorStateRegistry":"0x59C17E560057A1cF2327E6Be35b070E46e4EC8b4","DelayedWETH":"0xD455276eF429eE495d91567BF3e78066bdfAc2b8","AggregateVerifier":"0x3EE78cfac34D7Cbe49D35B901B354272d2084951"}
21 changes: 20 additions & 1 deletion foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ additional_compiler_profiles = [
{ name = "dispute", optimizer_runs = 5000 },
]
compilation_restrictions = [
{ paths = "src/dispute/DisputeGameFactory.sol", optimizer_runs = 5000 },
{ paths = "src/dispute/FaultDisputeGame.sol", optimizer_runs = 5000 },
{ paths = "src/dispute/v2/FaultDisputeGameV2.sol", optimizer_runs = 5000 },
{ paths = "src/dispute/PermissionedDisputeGame.sol", optimizer_runs = 5000 },
Expand All @@ -29,7 +30,15 @@ compilation_restrictions = [
{ paths = "src/L1/OPContractsManager.sol", optimizer_runs = 5000 },
{ paths = "src/L1/OPContractsManagerStandardValidator.sol", optimizer_runs = 5000 },
{ paths = "src/L1/OptimismPortal2.sol", optimizer_runs = 5000 },
{ paths = "src/L1/ProtocolVersions.sol", optimizer_runs = 5000 }
{ paths = "src/L1/ProtocolVersions.sol", optimizer_runs = 5000 },
{ paths = "src/L1/SystemConfig.sol", optimizer_runs = 5000 },
{ paths = "src/universal/OptimismMintableERC20Factory.sol", optimizer_runs = 5000 },
{ paths = "src/dispute/AnchorStateRegistry.sol", optimizer_runs = 5000 },
{ paths = "src/dispute/DelayedWETH.sol", optimizer_runs = 5000 },
{ paths = "src/universal/ProxyAdmin.sol", optimizer_runs = 5000 },
{ paths = "src/universal/Proxy.sol", optimizer_runs = 5000 },
{ paths = "src/L2/OptimismMintableERC721.sol", optimizer_runs = 5000 },
{ paths = "src/L2/OptimismMintableERC721Factory.sol", optimizer_runs = 5000 },
]

extra_output = ['devdoc', 'userdoc', 'metadata', 'storageLayout']
Expand All @@ -43,6 +52,7 @@ remappings = [
'@openzeppelin/contracts-v5/=lib/openzeppelin-contracts-v5/contracts',
'@rari-capital/solmate/=lib/solmate',
'@lib-keccak/=lib/lib-keccak/contracts/lib',
'solady/=lib/solady/src/',
'@solady/=lib/solady/src',
'@solady-v0.0.245/=lib/solady-v0.0.245/src',
'forge-std/=lib/forge-std/src',
Expand Down Expand Up @@ -153,6 +163,7 @@ additional_compiler_profiles = [
{ name = "dispute", optimizer_runs = 0 },
]
compilation_restrictions = [
{ paths = "src/dispute/DisputeGameFactory.sol", optimizer_runs = 0 },
{ paths = "src/dispute/FaultDisputeGame.sol", optimizer_runs = 0 },
{ paths = "src/dispute/v2/FaultDisputeGameV2.sol", optimizer_runs = 0 },
{ paths = "src/dispute/PermissionedDisputeGame.sol", optimizer_runs = 0 },
Expand All @@ -162,6 +173,14 @@ compilation_restrictions = [
{ paths = "src/L1/OPContractsManagerStandardValidator.sol", optimizer_runs = 0 },
{ paths = "src/L1/OptimismPortal2.sol", optimizer_runs = 0 },
{ paths = "src/L1/ProtocolVersions.sol", optimizer_runs = 0 },
{ paths = "src/L1/SystemConfig.sol", optimizer_runs = 0 },
{ paths = "src/universal/OptimismMintableERC20Factory.sol", optimizer_runs = 0 },
{ paths = "src/dispute/AnchorStateRegistry.sol", optimizer_runs = 0 },
{ paths = "src/dispute/DelayedWETH.sol", optimizer_runs = 0 },
{ paths = "src/universal/ProxyAdmin.sol", optimizer_runs = 0 },
{ paths = "src/universal/Proxy.sol", optimizer_runs = 0 },
{ paths = "src/L2/OptimismMintableERC721.sol", optimizer_runs = 0 },
{ paths = "src/L2/OptimismMintableERC721Factory.sol", optimizer_runs = 0 },
]

################################################################
Expand Down
9 changes: 9 additions & 0 deletions interfaces/dispute/IDisputeGameFactory.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,15 @@ interface IDisputeGameFactory is IProxyAdminOwnedBase, IReinitializableBase {
external
payable
returns (IDisputeGame proxy_);
function createWithInitData(
GameType _gameType,
Claim _rootClaim,
bytes memory _extraData,
bytes memory initData
)
external
payable
returns (IDisputeGame proxy_);
function findLatestGames(
GameType _gameType,
uint256 _start,
Expand Down
1 change: 1 addition & 0 deletions interfaces/dispute/IInitializable.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ pragma solidity ^0.8.0;

interface IInitializable {
function initialize() external payable;
function initializeWithInitData(bytes calldata initData) external payable;
}
16 changes: 16 additions & 0 deletions interfaces/multiproof/IVerifier.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

interface IVerifier {
/// @notice Verifies a proof.
/// @param proofBytes The proof.
/// @param imageId The image ID.
/// @param journal The journal.
/// @return valid Whether the proof is valid.
function verify(bytes calldata proofBytes, bytes32 imageId, bytes32 journal) external view returns (bool);

/// @notice Nullifies the prover to prevent further proof verification.
/// @dev Should only occur if a soundness issue is found.
/// @dev Should only be callable by a proper dispute game.
function nullify() external;
}
Loading
Loading