diff --git a/.github/workflows/eventindexer.yml b/.github/workflows/eventindexer.yml index 30ded6382ab..9b5f47bc2bb 100644 --- a/.github/workflows/eventindexer.yml +++ b/.github/workflows/eventindexer.yml @@ -32,7 +32,7 @@ jobs: # Optional: working directory, useful for monorepos working-directory: ./packages/eventindexer - args: --config=.golangci.yml --timeout=4m + args: --config=.golangci.yml --timeout=10m test-eventindexer: runs-on: [arc-runner-set] diff --git a/.github/workflows/taiko-client--test.yml b/.github/workflows/taiko-client--test.yml index 698c31c8140..fb0a26b4fd1 100644 --- a/.github/workflows/taiko-client--test.yml +++ b/.github/workflows/taiko-client--test.yml @@ -35,6 +35,10 @@ jobs: runs-on: [ubuntu-latest] timeout-minutes: 15 + strategy: + matrix: + execution_node: [l2_geth] + steps: - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.11.0 @@ -55,8 +59,10 @@ jobs: - name: Install pnpm dependencies uses: ./.github/actions/install-pnpm-dependencies - - name: Test + - name: Run Tests on ${{ matrix.execution_node }} execution engine working-directory: packages/taiko-client + env: + L2_NODE: ${{ matrix.execution_node }} run: make test - name: Codecov.io diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6c1613ada2a..8ad86e806be 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,15 +1,15 @@ { "packages/bridge-ui": "2.12.0", - "packages/docs-site": "1.12.1", + "packages/docs-site": "1.14.0", "packages/eventindexer": "0.13.0", "packages/fork-diff": "0.6.1", "packages/guardian-prover-health-check": "0.1.0", "packages/guardian-prover-health-check-ui": "0.2.0", - "packages/protocol": "1.9.0", + "packages/protocol": "1.10.0", "packages/relayer": "0.12.0", "packages/snaefell-ui": "1.1.0", "packages/supplementary-contracts": "1.0.0", - "packages/taiko-client": "0.38.0", + "packages/taiko-client": "0.39.2", "packages/taikoon-ui": "1.3.0", "packages/ui-lib": "1.0.0" } diff --git a/go.mod b/go.mod index 4c5ee52f395..31dcefa4c84 100644 --- a/go.mod +++ b/go.mod @@ -235,13 +235,7 @@ require ( sigs.k8s.io/yaml v1.3.0 // indirect ) -exclude ( - github.com/ethereum/go-ethereum v1.14.5 - github.com/ethereum/go-ethereum v1.14.6 - github.com/ethereum/go-ethereum v1.14.7 -) - -replace github.com/ethereum/go-ethereum v1.14.11 => github.com/taikoxyz/taiko-geth v1.8.1-0.20241003040603-5c84a2082747 +replace github.com/ethereum/go-ethereum v1.14.11 => github.com/taikoxyz/taiko-geth v1.11.1 replace github.com/ethereum-optimism/optimism v1.7.4 => github.com/taikoxyz/optimism v0.0.0-20241003061504-cdf8af288f39 diff --git a/go.sum b/go.sum index 9ddee77dab9..f7be24097ed 100644 --- a/go.sum +++ b/go.sum @@ -610,8 +610,8 @@ github.com/taikoxyz/hive v0.0.0-20240827015317-405b241dd082 h1:ymZR+Y88LOnA8i3Ke github.com/taikoxyz/hive v0.0.0-20240827015317-405b241dd082/go.mod h1:RHnIu3EFehrWX3JhFAMQSXD5uz7l0xaNroTzXrap7EQ= github.com/taikoxyz/optimism v0.0.0-20241003061504-cdf8af288f39 h1:JssMxaDmORjQ9RPZNulVJhAD8zSPd6LZFq5wsr6Nwz8= github.com/taikoxyz/optimism v0.0.0-20241003061504-cdf8af288f39/go.mod h1:ym7scR7ZHvEmwx1DLGVDzFlAdR+uhP1+Z4XCiFuSD5s= -github.com/taikoxyz/taiko-geth v1.8.1-0.20241003040603-5c84a2082747 h1:QRB8VHGmlRgm7ze/4Fzuce08Ypbq5Mr5q/piTfsck1A= -github.com/taikoxyz/taiko-geth v1.8.1-0.20241003040603-5c84a2082747/go.mod h1:+l/fr42Mma+xBnhefL/+z11/hcmJ2egl+ScIVPjhc7E= +github.com/taikoxyz/taiko-geth v1.11.1 h1:pur1WP6YJkwKhLVeN3Zf7dOwbPq6tS88gYod6QKlJc4= +github.com/taikoxyz/taiko-geth v1.11.1/go.mod h1:+l/fr42Mma+xBnhefL/+z11/hcmJ2egl+ScIVPjhc7E= github.com/testcontainers/testcontainers-go v0.30.0 h1:jmn/XS22q4YRrcMwWg0pAwlClzs/abopbsBzrepyc4E= github.com/testcontainers/testcontainers-go v0.30.0/go.mod h1:K+kHNGiM5zjklKjgTtcrEetF3uhWbMUyqAQoyoh8Pf0= github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e h1:cR8/SYRgyQCt5cNCMniB/ZScMkhI9nk8U5C7SbISXjo= diff --git a/packages/docs-site/CHANGELOG.md b/packages/docs-site/CHANGELOG.md index 2bb67297683..aec0022e570 100644 --- a/packages/docs-site/CHANGELOG.md +++ b/packages/docs-site/CHANGELOG.md @@ -1,5 +1,33 @@ # Changelog +## [1.14.0](https://github.com/taikoxyz/taiko-mono/compare/docs-site-v1.13.0...docs-site-v1.14.0) (2024-10-25) + + +### Features + +* **docs-site:** add banner for mainnet protocol upgrade ([#18306](https://github.com/taikoxyz/taiko-mono/issues/18306)) ([550dda3](https://github.com/taikoxyz/taiko-mono/commit/550dda334dfa2d53a757ce46091acaba4248371a)) + +## [1.13.0](https://github.com/taikoxyz/taiko-mono/compare/docs-site-v1.12.3...docs-site-v1.13.0) (2024-10-25) + + +### Features + +* **docs-site:** add pyth to taiko docs ([#18294](https://github.com/taikoxyz/taiko-mono/issues/18294)) ([59832f1](https://github.com/taikoxyz/taiko-mono/commit/59832f1324cbf98de339552fd8d5039afe3d0e9c)) + +## [1.12.3](https://github.com/taikoxyz/taiko-mono/compare/docs-site-v1.12.2...docs-site-v1.12.3) (2024-10-20) + + +### Chores + +* **docs-site:** remove banner ([#18267](https://github.com/taikoxyz/taiko-mono/issues/18267)) ([1a46093](https://github.com/taikoxyz/taiko-mono/commit/1a460932a704d3660269336540812f33d7e8cbc4)) + +## [1.12.2](https://github.com/taikoxyz/taiko-mono/compare/docs-site-v1.12.1...docs-site-v1.12.2) (2024-10-14) + + +### Bug Fixes + +* **docs-site:** fix edit link ([#18243](https://github.com/taikoxyz/taiko-mono/issues/18243)) ([ea55bc2](https://github.com/taikoxyz/taiko-mono/commit/ea55bc24ea7184655804b88cc3c424b69fc87103)) + ## [1.12.1](https://github.com/taikoxyz/taiko-mono/compare/docs-site-v1.12.0...docs-site-v1.12.1) (2024-09-30) diff --git a/packages/docs-site/astro.config.ts b/packages/docs-site/astro.config.ts index 7a6d4cfbbd0..479104944e6 100644 --- a/packages/docs-site/astro.config.ts +++ b/packages/docs-site/astro.config.ts @@ -42,7 +42,7 @@ export default defineConfig({ title: "Docs", editLink: { baseUrl: - "https://github.com/taikoxyz/taiko-mono/tree/main/packages/docs-site", + "https://github.com/taikoxyz/taiko-mono/edit/main/packages/docs-site", }, customCss: ["./src/styles/custom.css"], logo: { diff --git a/packages/docs-site/package.json b/packages/docs-site/package.json index 543113ec4d8..89aa71af7ed 100644 --- a/packages/docs-site/package.json +++ b/packages/docs-site/package.json @@ -1,7 +1,7 @@ { "name": "docs-site", "type": "module", - "version": "1.12.1", + "version": "1.14.0", "scripts": { "dev": "astro dev", "start": "astro dev", diff --git a/packages/docs-site/src/content/config.ts b/packages/docs-site/src/content/config.ts index 9129eb8d987..6770faff3b0 100644 --- a/packages/docs-site/src/content/config.ts +++ b/packages/docs-site/src/content/config.ts @@ -9,7 +9,7 @@ export const collections = { .string() .max(160, { message: "Must be 160 characters or less." }).optional(), banner: z.object({ content: z.string() }).default({ - content: 'All Hekla Node Runners: Imminent Ontake fork Sep 30th, upgrade needed. Please update your provers to raiko 1.2.0! Click here for more info', + content: 'All Mainnet Node Runners: Protocol upgrade on Oct 31st in preparation for Ontake fork, upgrade needed. Please ensure your nodes are using the software tags listed in the announcement! Click here for more info', }), }), }), diff --git a/packages/docs-site/src/content/docs/resources/developer-tools.mdx b/packages/docs-site/src/content/docs/resources/developer-tools.mdx index 681e736a0f0..fef29e880ef 100644 --- a/packages/docs-site/src/content/docs/resources/developer-tools.mdx +++ b/packages/docs-site/src/content/docs/resources/developer-tools.mdx @@ -38,6 +38,11 @@ import { LinkCard, CardGrid } from "@astrojs/starlight/components"; description="API3 offers over 200 first-party, OEV-enabled price feeds on Taiko Mainnet and Testnet, providing reliable and decentralized data through the API3 Market." href="https://market.api3.org/taiko" /> + ## Node Providers diff --git a/packages/eventindexer/.golangci.yml b/packages/eventindexer/.golangci.yml index 2f3a3d4742f..f8f1767ce33 100644 --- a/packages/eventindexer/.golangci.yml +++ b/packages/eventindexer/.golangci.yml @@ -9,7 +9,7 @@ # ], output: - format: colored-line-number + formats: colored-line-number linters: enable: diff --git a/packages/nfts/package.json b/packages/nfts/package.json index 20e26b85176..6f7be4c873c 100644 --- a/packages/nfts/package.json +++ b/packages/nfts/package.json @@ -35,7 +35,9 @@ "pfp:deploy:hekla": "forge clean && pnpm compile && forge script script/profile/Deploy.s.sol --rpc-url https://rpc.hekla.taiko.xyz --broadcast --gas-estimate-multiplier 200", "pfp:deploy:mainnet": "forge clean && pnpm compile && forge script script/profile/Deploy.s.sol --rpc-url https://rpc.mainnet.taiko.xyz --broadcast --gas-estimate-multiplier 200", "tbz:airdrop:hekla": "forge clean && pnpm compile && forge script script/trailblazers-airdrop/Deploy.s.sol --rpc-url https://rpc.hekla.taiko.xyz --broadcast --gas-estimate-multiplier 200", - "tbz:airdrop:mainnet": "forge clean && pnpm compile && forge script script/trailblazers-airdrop/Deploy.s.sol --rpc-url https://rpc.mainnet.taiko.xyz --broadcast --gas-estimate-multiplier 100" + "tbz:airdrop:mainnet": "forge clean && pnpm compile && forge script script/trailblazers-airdrop/Deploy.s.sol --rpc-url https://rpc.mainnet.taiko.xyz --broadcast --gas-estimate-multiplier 100", + "tbz:upgradeV3:hekla": "forge clean && pnpm compile && forge script script/trailblazers-badges/sol/UpgradeV3.s.sol --rpc-url https://rpc.hekla.taiko.xyz --broadcast --gas-estimate-multiplier 200", + "tbz:upgradeV3:mainnet": "forge clean && pnpm compile && forge script script/trailblazers-badges/sol/UpgradeV3.s.sol --rpc-url https://rpc.mainnet.taiko.xyz --broadcast --gas-estimate-multiplier 100" }, "devDependencies": { "@types/node": "^20.11.30", diff --git a/packages/nfts/script/trailblazers-badges/sol/UpgradeV3.sol b/packages/nfts/script/trailblazers-badges/sol/UpgradeV3.s.sol similarity index 94% rename from packages/nfts/script/trailblazers-badges/sol/UpgradeV3.sol rename to packages/nfts/script/trailblazers-badges/sol/UpgradeV3.s.sol index d51919abf5f..e212f866987 100644 --- a/packages/nfts/script/trailblazers-badges/sol/UpgradeV3.sol +++ b/packages/nfts/script/trailblazers-badges/sol/UpgradeV3.s.sol @@ -10,7 +10,7 @@ import { IMinimalBlacklist } from "@taiko/blacklist/IMinimalBlacklist.sol"; import { TrailblazersBadgesV3 } from "../../../contracts/trailblazers-badges/TrailblazersBadgesV3.sol"; -contract UpgradeV2 is Script { +contract UpgradeV3 is Script { UtilsScript public utils; string public jsonLocation; uint256 public deployerPrivateKey; @@ -37,7 +37,7 @@ contract UpgradeV2 is Script { address(new TrailblazersBadgesV3()), abi.encodeCall(TrailblazersBadgesV3.version, ()) ); - tokenV3 = TrailblazersBadgesV3(tokenV3); + tokenV3 = TrailblazersBadgesV3(address(tokenV2)); console.log("Upgraded TrailblazersBadgesV3 to:", address(tokenV3)); } diff --git a/packages/protocol/CHANGELOG.md b/packages/protocol/CHANGELOG.md index e3cd132ef6a..b53dda5f470 100644 --- a/packages/protocol/CHANGELOG.md +++ b/packages/protocol/CHANGELOG.md @@ -1,5 +1,82 @@ # Changelog +## [1.10.0](https://github.com/taikoxyz/taiko-mono/compare/protocol-v1.9.0...protocol-v1.10.0) (2024-10-29) + + +### Features + +* **protocol:** add `proposeBlocksV2` method to `ProverSet` ([#18115](https://github.com/taikoxyz/taiko-mono/issues/18115)) ([0743a99](https://github.com/taikoxyz/taiko-mono/commit/0743a99ee6ab403024bab5834178399fbeebb4e5)) +* **protocol:** add aggregated sgx verify test ([#18160](https://github.com/taikoxyz/taiko-mono/issues/18160)) ([8dda47b](https://github.com/taikoxyz/taiko-mono/commit/8dda47bf9ee47faa8a0d16dde0b4398d5e7019f8)) +* **protocol:** add Hekla Ontake hardfork upgrade scripts ([#18103](https://github.com/taikoxyz/taiko-mono/issues/18103)) ([a3436e8](https://github.com/taikoxyz/taiko-mono/commit/a3436e8cafbc96ebfa5742ada995adae39c572ce)) +* **protocol:** allow owner to update recipient in TokenUnlock ([#18184](https://github.com/taikoxyz/taiko-mono/issues/18184)) ([773ae1b](https://github.com/taikoxyz/taiko-mono/commit/773ae1b11f309ee8c4e0b1c0d22b9bfa41beae0d)) +* **protocol:** check-in `HeklaTaikoToken` ([#18189](https://github.com/taikoxyz/taiko-mono/issues/18189)) ([60c38d8](https://github.com/taikoxyz/taiko-mono/commit/60c38d8d179f2c02a0ed87f97bd34dc708b38df4)) +* **protocol:** enable sp1 batch aggregation ([#18199](https://github.com/taikoxyz/taiko-mono/issues/18199)) ([038cd32](https://github.com/taikoxyz/taiko-mono/commit/038cd326668b3a882798ecb4e7f9e3ecadc6dc28)) +* **protocol:** improve `getTransitions` ([#18181](https://github.com/taikoxyz/taiko-mono/issues/18181)) ([868d733](https://github.com/taikoxyz/taiko-mono/commit/868d733db962a76261036c3e583cb50feaec901f)) +* **protocol:** Increase the probability of sgx proof for lab proposer ([#18288](https://github.com/taikoxyz/taiko-mono/issues/18288)) ([fd0dbbb](https://github.com/taikoxyz/taiko-mono/commit/fd0dbbbb3df0db27873e0ba87e45a5165fb7c0f1)) +* **protocol:** introduce `getTransitions` in TaikoL1 ([#18154](https://github.com/taikoxyz/taiko-mono/issues/18154)) ([273bf53](https://github.com/taikoxyz/taiko-mono/commit/273bf53fad763b8504353e7cc14c8585e341f9d0)) +* **protocol:** make sure `init()` covers logics in `init2()`, `init3()`.. ([#18292](https://github.com/taikoxyz/taiko-mono/issues/18292)) ([9d06958](https://github.com/taikoxyz/taiko-mono/commit/9d06958e713e530fdd610c439c7b93199d0dcc69)) +* **protocol:** rename B_BLOCK_PROPOSER to B_PRECONF_REGISTRY ([#18255](https://github.com/taikoxyz/taiko-mono/issues/18255)) ([bf3caf7](https://github.com/taikoxyz/taiko-mono/commit/bf3caf7d986d7b03cf3bd0aa69ea97602bff80aa)) +* **protocol:** update mainnet `ontakeForkHeight` config ([#18252](https://github.com/taikoxyz/taiko-mono/issues/18252)) ([7550882](https://github.com/taikoxyz/taiko-mono/commit/75508828d3755e1a831380cdd2ab321e67fa22fc)) +* **protocol:** update ric0 & sp1 verification contract ([#18269](https://github.com/taikoxyz/taiko-mono/issues/18269)) ([684a909](https://github.com/taikoxyz/taiko-mono/commit/684a909e83705c59b2b7a0a991424b7a8e9e03ad)) +* **protocol:** update sp1 contracts ([#18097](https://github.com/taikoxyz/taiko-mono/issues/18097)) ([6f26434](https://github.com/taikoxyz/taiko-mono/commit/6f264342fe48f8d193559ac0712cc875d643b6fd)) + + +### Bug Fixes + +* **protocl:** check blockId in getBlock and getBlockV2 ([#18327](https://github.com/taikoxyz/taiko-mono/issues/18327)) ([4288fb6](https://github.com/taikoxyz/taiko-mono/commit/4288fb6e0c8c76651d2db866cab55f32a9a25075)) +* **protocol:** avoid invocation in Bridge message processing if calldata is "" and value is 0 ([#18137](https://github.com/taikoxyz/taiko-mono/issues/18137)) ([10c2972](https://github.com/taikoxyz/taiko-mono/commit/10c29727081bd8f8b94bbfc4472b162ec552ef64)) +* **protocol:** correct the wrong router address for mainnet ([#18291](https://github.com/taikoxyz/taiko-mono/issues/18291)) ([ae0a9da](https://github.com/taikoxyz/taiko-mono/commit/ae0a9daf83ab8f323c216978724ebcb71de54cfe)) +* **protocol:** fix a new bug in LibProposing ([#18328](https://github.com/taikoxyz/taiko-mono/issues/18328)) ([7436bae](https://github.com/taikoxyz/taiko-mono/commit/7436bae9660cfcf1d430ca111df8c75d50908eae)) +* **protocol:** fix an issue in same transition check ([#18254](https://github.com/taikoxyz/taiko-mono/issues/18254)) ([233806e](https://github.com/taikoxyz/taiko-mono/commit/233806e4838aa12e8de436a37979ff3e614119f2)) +* **protocol:** fix DCAP configuration script ([#18088](https://github.com/taikoxyz/taiko-mono/issues/18088)) ([e8618c5](https://github.com/taikoxyz/taiko-mono/commit/e8618c54a58993499e852ec2ffc2468d4f0274ba)) +* **protocol:** fix issue in mainnet deployment script ([#18283](https://github.com/taikoxyz/taiko-mono/issues/18283)) ([5c371a1](https://github.com/taikoxyz/taiko-mono/commit/5c371a181af444999f611e03774ec096ffbd1226)) +* **protocol:** fix LibAddress.supportsInterface to handle undecodeable return data ([#18286](https://github.com/taikoxyz/taiko-mono/issues/18286)) ([299b4c9](https://github.com/taikoxyz/taiko-mono/commit/299b4c9ecf96644c909df70a3527ae5c2e728a07)) +* **protocol:** fix permission in ComposeVerifier ([#18302](https://github.com/taikoxyz/taiko-mono/issues/18302)) ([4c45d8b](https://github.com/taikoxyz/taiko-mono/commit/4c45d8bcdb52521ac1738ca271316d82689537b0)) +* **protocol:** fix proposeBlock()'s block id check ([#18227](https://github.com/taikoxyz/taiko-mono/issues/18227)) ([3a9d6c1](https://github.com/taikoxyz/taiko-mono/commit/3a9d6c166b7c6666eb2515893b6a3fbd00f4b1ea)) +* **protocol:** fix test related to SendMessageToDelegateOwner.s.sol ([#18300](https://github.com/taikoxyz/taiko-mono/issues/18300)) ([65daa3e](https://github.com/taikoxyz/taiko-mono/commit/65daa3e631b471d17dbffb1001dab66efa67c499)) +* **protocol:** fix wrong Bridged ERC20 address cache ([#18287](https://github.com/taikoxyz/taiko-mono/issues/18287)) ([49267ab](https://github.com/taikoxyz/taiko-mono/commit/49267abaa6d27d16fe4fb62ca0bb28d49b09d2f9)) +* **protocol:** revert a change to maintain taiko-geth compatibility ([#18331](https://github.com/taikoxyz/taiko-mono/issues/18331)) ([9d18d59](https://github.com/taikoxyz/taiko-mono/commit/9d18d598fe3e890a1f35e2d39916d554282ee4a0)) +* **protocol:** revert changes related to `proposedIn` and `proposedAt` to fix a bug ([#18333](https://github.com/taikoxyz/taiko-mono/issues/18333)) ([5cb43ab](https://github.com/taikoxyz/taiko-mono/commit/5cb43ab1e29422353de549f8386eff613291c7df)) +* **protocol:** reward non-assigned prover 7/8 liveness bond ([#18132](https://github.com/taikoxyz/taiko-mono/issues/18132)) ([9f99099](https://github.com/taikoxyz/taiko-mono/commit/9f99099ac271e6e2a0973a43084e29169386f2cd)) +* **protocol:** small fix to 1559 error check ([#18339](https://github.com/taikoxyz/taiko-mono/issues/18339)) ([4428661](https://github.com/taikoxyz/taiko-mono/commit/44286615a0e0b0a17892fe83aad96546a6b1aca1)) + + +### Chores + +* **docs:** redirect the contribution.md path ([#18316](https://github.com/taikoxyz/taiko-mono/issues/18316)) ([0607ef7](https://github.com/taikoxyz/taiko-mono/commit/0607ef718dbe34c0ffe125825b12001b36a43fc5)) +* **protocol:** add functions to ITaikoL1 for Nethermind Preconf ([#18217](https://github.com/taikoxyz/taiko-mono/issues/18217)) ([e349d22](https://github.com/taikoxyz/taiko-mono/commit/e349d2237a1830edab305b2f0eaaeb0eaf3c623f)) +* **protocol:** change Hekla gas issuance per sec to 100000 ([#18335](https://github.com/taikoxyz/taiko-mono/issues/18335)) ([3d448d4](https://github.com/taikoxyz/taiko-mono/commit/3d448d4a78608ea7daf1d50e877c32f8d30f1e7a)) +* **protocol:** change Hekla sharingPctg to 80% & gasIssuancePerSecond to 1000000 ([#18322](https://github.com/taikoxyz/taiko-mono/issues/18322)) ([75feb5b](https://github.com/taikoxyz/taiko-mono/commit/75feb5b36560b786a54e97280352c0d70c3e2f06)) +* **protocol:** fix lint issue in SP1Verifier ([#18213](https://github.com/taikoxyz/taiko-mono/issues/18213)) ([7874dd3](https://github.com/taikoxyz/taiko-mono/commit/7874dd3ff8a6053da8c09377b52c83e7a506f45f)) +* **protocol:** improve the usage of `initializer` and `reinitializer` ([#18319](https://github.com/taikoxyz/taiko-mono/issues/18319)) ([13cc007](https://github.com/taikoxyz/taiko-mono/commit/13cc0074a2295c5939cf83e23f531cb25c43bd64)) +* **protocol:** revert Hekla `baseFeeConfig` updates ([#18340](https://github.com/taikoxyz/taiko-mono/issues/18340)) ([ae8ac3c](https://github.com/taikoxyz/taiko-mono/commit/ae8ac3c2e686b136de8c68853ecb91a39260a93f)) +* **protocol:** set mainnet Ontake fork height ([#18112](https://github.com/taikoxyz/taiko-mono/issues/18112)) ([8812eb2](https://github.com/taikoxyz/taiko-mono/commit/8812eb2a8de367311b8ada6bd3587bfe5efee090)) +* **protocol:** shorten imports in solidity files ([#18221](https://github.com/taikoxyz/taiko-mono/issues/18221)) ([9b2ba6a](https://github.com/taikoxyz/taiko-mono/commit/9b2ba6a2a2fae24d1fb34e23b29b3146e96f575e)) +* **protoco:** remove unused delegate owner deployment ([#18290](https://github.com/taikoxyz/taiko-mono/issues/18290)) ([63ba863](https://github.com/taikoxyz/taiko-mono/commit/63ba863dcf322b2cf04d7dcaf6d8905bf28de6bc)) + + +### Documentation + +* **protocol:** fix invalid links in docs ([#18144](https://github.com/taikoxyz/taiko-mono/issues/18144)) ([c62f3f6](https://github.com/taikoxyz/taiko-mono/commit/c62f3f6b4a21f3af44f7df908fd8aac198721d5b)) +* **protocol:** update code4rena-2024-03-taiko-final-report.md ([#18062](https://github.com/taikoxyz/taiko-mono/issues/18062)) ([fd68794](https://github.com/taikoxyz/taiko-mono/commit/fd68794a2de24b7a32d2d5a1c3f52c2156b6d61a)) +* **protocol:** update Hekla deployments ([#18152](https://github.com/taikoxyz/taiko-mono/issues/18152)) ([6c7ff61](https://github.com/taikoxyz/taiko-mono/commit/6c7ff617b913b21b8b12b035f0d653c068830de3)) +* **protocol:** update Hekla deployments ([#18257](https://github.com/taikoxyz/taiko-mono/issues/18257)) ([fbb1c82](https://github.com/taikoxyz/taiko-mono/commit/fbb1c824e35adb452176d988f32cf06d0c72b9bf)) +* **protocol:** update L1 deployment ([#18299](https://github.com/taikoxyz/taiko-mono/issues/18299)) ([f60ce3e](https://github.com/taikoxyz/taiko-mono/commit/f60ce3e78bb9a2717718c3a9d7016346d5305488)) +* **protocol:** update mainnet deployment ([#18258](https://github.com/taikoxyz/taiko-mono/issues/18258)) ([eeeb4af](https://github.com/taikoxyz/taiko-mono/commit/eeeb4afeff8572115c2cf82db149cee7a723f30c)) +* **protocol:** upgrade sp1 plonk verifier 2.0.0 ([#18098](https://github.com/taikoxyz/taiko-mono/issues/18098)) ([cfd0e9e](https://github.com/taikoxyz/taiko-mono/commit/cfd0e9e4af2e42ead309e0c571b09dd20ddfe0f9)) +* **protocol:** upgrade zk verifiers in Hekla ([#18279](https://github.com/taikoxyz/taiko-mono/issues/18279)) ([e98a1d5](https://github.com/taikoxyz/taiko-mono/commit/e98a1d5cdaa14af86340081ee42ad263a41bfdb5)) + + +### Code Refactoring + +* **protocol:** simplify some protocol code based on OpenZeppelin's recommendation ([#18308](https://github.com/taikoxyz/taiko-mono/issues/18308)) ([fbad703](https://github.com/taikoxyz/taiko-mono/commit/fbad703739f09d4524f9d808c3bad31d0122ec2c)) +* **protocol:** slightly change defender monitors ([#18086](https://github.com/taikoxyz/taiko-mono/issues/18086)) ([b93d056](https://github.com/taikoxyz/taiko-mono/commit/b93d056479adfc4a1f557578d8b66eda48b104a9)) + + +### Tests + +* **protocol:** fix another L2 test failure ([#18304](https://github.com/taikoxyz/taiko-mono/issues/18304)) ([b3dd4dc](https://github.com/taikoxyz/taiko-mono/commit/b3dd4dccd261a9ebda69325661d2941001268ec2)) + ## [1.9.0](https://github.com/taikoxyz/taiko-mono/compare/protocol-v1.8.0...protocol-v1.9.0) (2024-09-12) diff --git a/packages/protocol/README.md b/packages/protocol/README.md index 547fa503d66..f71ac8c7eb1 100644 --- a/packages/protocol/README.md +++ b/packages/protocol/README.md @@ -136,7 +136,7 @@ This command runs the deployment script located at `script/deploy_protocol_on_l1 ## Style Guide -Refer to [CONTRIBUTING.md](https://www.notion.so/CONTRIBUTING.md) for code style guidelines. +Refer to [CONTRIBUTING.md](../../CONTRIBUTING.md) for code style guidelines. Before committing code, format and lint it using: diff --git a/packages/protocol/contract_layout_layer1.md b/packages/protocol/contract_layout_layer1.md index f1ff0bd4fbf..b8a329cd8ef 100644 --- a/packages/protocol/contract_layout_layer1.md +++ b/packages/protocol/contract_layout_layer1.md @@ -511,10 +511,6 @@ | state | struct TaikoData.State | 251 | 0 | 1600 | TaikoL1 | | __gap | uint256[50] | 301 | 0 | 1600 | TaikoL1 | -## TierProviderV2 -| Name | Type | Slot | Offset | Bytes | Contract | -|------|------|------|--------|-------|----------| - ## HeklaTaikoL1 | Name | Type | Slot | Offset | Bytes | Contract | |----------------|------------------------|------|--------|-------|------------------------------------------------------| @@ -534,7 +530,7 @@ | state | struct TaikoData.State | 251 | 0 | 1600 | HeklaTaikoL1 | | __gap | uint256[50] | 301 | 0 | 1600 | HeklaTaikoL1 | -## HeklaTierProvider +## HeklaTierRouter | Name | Type | Slot | Offset | Bytes | Contract | |------|------|------|--------|-------|----------| diff --git a/packages/protocol/contracts/layer1/based/LibProposing.sol b/packages/protocol/contracts/layer1/based/LibProposing.sol index b564ac34261..857a760c1b1 100644 --- a/packages/protocol/contracts/layer1/based/LibProposing.sol +++ b/packages/protocol/contracts/layer1/based/LibProposing.sol @@ -14,6 +14,8 @@ import "./LibVerifying.sol"; library LibProposing { using LibAddress for address; + uint256 internal constant SECONDS_PER_BLOCK = 12; + struct Local { TaikoData.SlotB b; TaikoData.BlockParamsV2 params; @@ -150,9 +152,9 @@ library LibProposing { revert L1_TOO_MANY_BLOCKS(); } - address permittedProposer = _resolver.resolve(LibStrings.B_BLOCK_PROPOSER, true); - if (permittedProposer != address(0)) { - if (permittedProposer != msg.sender) revert L1_INVALID_PROPOSER(); + address preconfRegistry = _resolver.resolve(LibStrings.B_PRECONF_REGISTRY, true); + if (preconfRegistry != address(0)) { + if (preconfRegistry != msg.sender) revert L1_INVALID_PROPOSER(); local.allowCustomProposer = true; } @@ -178,17 +180,21 @@ library LibProposing { local.params.coinbase = local.params.proposer; } - if (!local.postFork || local.params.anchorBlockId == 0) { - local.params.anchorBlockId = uint64(block.number - 1); + if (local.params.anchorBlockId == 0) { + unchecked { + local.params.anchorBlockId = uint64(block.number - 1); + } } - if (!local.postFork || local.params.timestamp == 0) { + if (local.params.timestamp == 0) { local.params.timestamp = uint64(block.timestamp); } // Verify params against the parent block. - TaikoData.BlockV2 storage parentBlk = - _state.blocks[(local.b.numBlocks - 1) % _config.blockRingBufferSize]; + TaikoData.BlockV2 storage parentBlk; + unchecked { + parentBlk = _state.blocks[(local.b.numBlocks - 1) % _config.blockRingBufferSize]; + } if (local.postFork) { // Verify the passed in L1 state block number. @@ -208,8 +214,8 @@ library LibProposing { // The other constraint is that the timestamp needs to be larger than or equal the // one in the previous L2 block. if ( - local.params.timestamp + _config.maxAnchorHeightOffset * 12 < block.timestamp - || local.params.timestamp > block.timestamp + local.params.timestamp + _config.maxAnchorHeightOffset * SECONDS_PER_BLOCK + < block.timestamp || local.params.timestamp > block.timestamp || local.params.timestamp < parentBlk.proposedAt ) { revert L1_INVALID_TIMESTAMP(); @@ -228,35 +234,31 @@ library LibProposing { // the block data to be stored on-chain for future integrity checks. // If we choose to persist all data fields in the metadata, it will // require additional storage slots. - unchecked { - meta_ = TaikoData.BlockMetadataV2({ - anchorBlockHash: blockhash(local.params.anchorBlockId), - difficulty: keccak256(abi.encode("TAIKO_DIFFICULTY", local.b.numBlocks)), - blobHash: 0, // to be initialized below - // To make sure each L2 block can be exexucated deterministiclly by the client - // without referering to its metadata on Ethereum, we need to encode - // config.sharingPctg into the extraData. - extraData: local.postFork - ? _encodeBaseFeeConfig(_config.baseFeeConfig) - : local.extraData, - coinbase: local.params.coinbase, - id: local.b.numBlocks, - gasLimit: _config.blockMaxGasLimit, - timestamp: local.params.timestamp, - anchorBlockId: local.params.anchorBlockId, - minTier: 0, // to be initialized below - blobUsed: _txList.length == 0, - parentMetaHash: local.params.parentMetaHash, - proposer: local.params.proposer, - livenessBond: _config.livenessBond, - proposedAt: uint64(block.timestamp), - proposedIn: uint64(block.number), - blobTxListOffset: local.params.blobTxListOffset, - blobTxListLength: local.params.blobTxListLength, - blobIndex: local.params.blobIndex, - baseFeeConfig: _config.baseFeeConfig - }); - } + meta_ = TaikoData.BlockMetadataV2({ + anchorBlockHash: blockhash(local.params.anchorBlockId), + difficulty: keccak256(abi.encode("TAIKO_DIFFICULTY", local.b.numBlocks)), + blobHash: 0, // to be initialized below + // To make sure each L2 block can be exexucated deterministiclly by the client + // without referering to its metadata on Ethereum, we need to encode + // config.sharingPctg into the extraData. + extraData: local.postFork ? _encodeBaseFeeConfig(_config.baseFeeConfig) : local.extraData, + coinbase: local.params.coinbase, + id: local.b.numBlocks, + gasLimit: _config.blockMaxGasLimit, + timestamp: local.params.timestamp, + anchorBlockId: local.params.anchorBlockId, + minTier: 0, // to be initialized below + blobUsed: _txList.length == 0, + parentMetaHash: local.params.parentMetaHash, + proposer: local.params.proposer, + livenessBond: _config.livenessBond, + proposedAt: uint64(block.timestamp), + proposedIn: uint64(block.number), + blobTxListOffset: local.params.blobTxListOffset, + blobTxListLength: local.params.blobTxListLength, + blobIndex: local.params.blobIndex, + baseFeeConfig: _config.baseFeeConfig + }); // Update certain meta fields if (meta_.blobUsed) { diff --git a/packages/protocol/contracts/layer1/based/LibProving.sol b/packages/protocol/contracts/layer1/based/LibProving.sol index 0c96335ec8d..39a50636965 100644 --- a/packages/protocol/contracts/layer1/based/LibProving.sol +++ b/packages/protocol/contracts/layer1/based/LibProving.sol @@ -34,6 +34,7 @@ library LibProving { bool sameTransition; bool postFork; uint64 proposedAt; + bool isSyncBlock; } /// @notice Emitted when a transition is proved. @@ -261,7 +262,9 @@ library LibProving { local.proposedAt = local.postFork ? local.meta.proposedAt : blk.proposedAt; - if (LibUtils.shouldSyncStateRoot(_config.stateRootSyncInternal, local.blockId)) { + local.isSyncBlock = + LibUtils.shouldSyncStateRoot(_config.stateRootSyncInternal, local.blockId); + if (local.isSyncBlock) { local.stateRoot = ctx_.tran.stateRoot; } @@ -311,6 +314,7 @@ library LibProving { local.tier = tierProvider.getTier(local.proof.tier); local.minTier = tierProvider.getTier(local.meta.minTier); + local.isTopTier = local.tier.contestBond == 0; } local.inProvingWindow = !LibUtils.isPostDeadline({ @@ -323,8 +327,8 @@ library LibProving { // The assigned prover is granted exclusive permission to prove only the first // transition. if ( - local.tier.contestBond != 0 && ts.contester == address(0) && local.tid == 1 - && ts.tier == 0 && local.inProvingWindow + !local.isTopTier && ts.contester == address(0) && local.tid == 1 && ts.tier == 0 + && local.inProvingWindow ) { if (msg.sender != local.assignedProver) revert L1_NOT_ASSIGNED_PROVER(); } @@ -350,7 +354,7 @@ library LibProving { prover: msg.sender, msgSender: msg.sender, blockId: local.blockId, - isContesting: local.proof.tier == ts.tier && local.tier.contestBond != 0, + isContesting: local.proof.tier == ts.tier && !local.isTopTier, blobUsed: local.meta.blobUsed, tran: ctx_.tran }); @@ -365,10 +369,9 @@ library LibProving { } } - local.isTopTier = local.tier.contestBond == 0; - - local.sameTransition = - ctx_.tran.blockHash == ts.blockHash && local.stateRoot == ts.stateRoot; + local.sameTransition = local.isSyncBlock + ? ctx_.tran.blockHash == ts.blockHash && local.stateRoot == ts.stateRoot + : ctx_.tran.blockHash == ts.blockHash; if (local.proof.tier > ts.tier) { // Handles the case when an incoming tier is higher than the current transition's tier. @@ -644,7 +647,7 @@ library LibProving { /// @dev Returns the reward after applying 12.5% friction. function _rewardAfterFriction(uint256 _amount) private pure returns (uint256) { - return _amount == 0 ? 0 : (_amount * 7) >> 3; + return (_amount * 7) >> 3; } /// @dev Returns if the liveness bond shall be returned. diff --git a/packages/protocol/contracts/layer1/based/LibVerifying.sol b/packages/protocol/contracts/layer1/based/LibVerifying.sol index 0957acb859f..82cdba18bd3 100644 --- a/packages/protocol/contracts/layer1/based/LibVerifying.sol +++ b/packages/protocol/contracts/layer1/based/LibVerifying.sol @@ -98,20 +98,21 @@ library LibVerifying { if (ts.contester != address(0)) { break; - } else { - if (local.tierRouter == ITierRouter(address(0))) { - local.tierRouter = - ITierRouter(_resolver.resolve(LibStrings.B_TIER_ROUTER, false)); - } + } - uint24 cooldown = ITierProvider(local.tierRouter.getProvider(local.blockId)) - .getTier(local.tier).cooldownWindow; + if (local.tierRouter == ITierRouter(address(0))) { + local.tierRouter = + ITierRouter(_resolver.resolve(LibStrings.B_TIER_ROUTER, false)); + } - if (!LibUtils.isPostDeadline(ts.timestamp, local.b.lastUnpausedAt, cooldown)) { - // If cooldownWindow is 0, the block can theoretically - // be proved and verified within the same L1 block. - break; - } + uint24 cooldown = ITierProvider(local.tierRouter.getProvider(local.blockId)).getTier( + local.tier + ).cooldownWindow; + + if (!LibUtils.isPostDeadline(ts.timestamp, local.b.lastUnpausedAt, cooldown)) { + // If cooldownWindow is 0, the block can theoretically + // be proved and verified within the same L1 block. + break; } // Update variables diff --git a/packages/protocol/contracts/layer1/based/TaikoL1.sol b/packages/protocol/contracts/layer1/based/TaikoL1.sol index 225a698ca6c..a7a33982dc6 100644 --- a/packages/protocol/contracts/layer1/based/TaikoL1.sol +++ b/packages/protocol/contracts/layer1/based/TaikoL1.sol @@ -56,6 +56,7 @@ contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents { if (_toPause) _pause(); } + /// @notice This function shall be called by previously deployed contracts. function init2() external onlyOwner reinitializer(2) { // reset some previously used slots for future reuse state.slotB.__reservedB1 = 0; @@ -77,8 +78,10 @@ contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents { returns (TaikoData.BlockMetadata memory meta_, TaikoData.EthDeposit[] memory deposits_) { TaikoData.Config memory config = getConfig(); - (meta_,) = LibProposing.proposeBlock(state, config, this, _params, _txList); - if (meta_.id >= config.ontakeForkHeight) revert L1_FORK_ERROR(); + + TaikoData.BlockMetadataV2 memory metaV2; + (meta_, metaV2) = LibProposing.proposeBlock(state, config, this, _params, _txList); + if (metaV2.id >= config.ontakeForkHeight) revert L1_FORK_ERROR(); deposits_ = new TaikoData.EthDeposit[](0); } diff --git a/packages/protocol/contracts/layer1/devnet/DevnetTierProvider.sol b/packages/protocol/contracts/layer1/devnet/DevnetTierRouter.sol similarity index 80% rename from packages/protocol/contracts/layer1/devnet/DevnetTierProvider.sol rename to packages/protocol/contracts/layer1/devnet/DevnetTierRouter.sol index 0b842926633..134265349a6 100644 --- a/packages/protocol/contracts/layer1/devnet/DevnetTierProvider.sol +++ b/packages/protocol/contracts/layer1/devnet/DevnetTierRouter.sol @@ -4,16 +4,16 @@ pragma solidity ^0.8.24; import "../tiers/TierProviderBase.sol"; import "../tiers/ITierRouter.sol"; -/// @title DevnetTierProvider +/// @title DevnetTierRouter /// @custom:security-contact security@taiko.xyz -contract DevnetTierProvider is TierProviderBase, ITierRouter { +contract DevnetTierRouter is TierProviderBase, ITierRouter { /// @inheritdoc ITierRouter function getProvider(uint256) external view returns (address) { return address(this); } /// @inheritdoc ITierProvider - function getTierIds() public pure override returns (uint16[] memory tiers_) { + function getTierIds() external pure returns (uint16[] memory tiers_) { tiers_ = new uint16[](3); tiers_[0] = LibTiers.TIER_OPTIMISTIC; tiers_[1] = LibTiers.TIER_GUARDIAN_MINORITY; diff --git a/packages/protocol/contracts/layer1/hekla/HeklaTierProvider.sol b/packages/protocol/contracts/layer1/hekla/HeklaTierProvider.sol deleted file mode 100644 index 0876e367d5d..00000000000 --- a/packages/protocol/contracts/layer1/hekla/HeklaTierProvider.sol +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "../tiers/TierProviderBase.sol"; -import "../tiers/ITierRouter.sol"; - -/// @title HeklaTierProvider -/// @custom:security-contact security@taiko.xyz -contract HeklaTierProvider is TierProviderBase, ITierRouter { - address public constant LAB_PROPOSER = 0xD3f681bD6B49887A48cC9C9953720903967E9DC0; - - /// @inheritdoc ITierRouter - function getProvider(uint256) external view returns (address) { - return address(this); - } - - /// @inheritdoc ITierProvider - function getTierIds() public pure override returns (uint16[] memory tiers_) { - tiers_ = new uint16[](6); - tiers_[0] = LibTiers.TIER_OPTIMISTIC; - tiers_[1] = LibTiers.TIER_SGX; - tiers_[2] = LibTiers.TIER_ZKVM_RISC0; - tiers_[3] = LibTiers.TIER_GUARDIAN_MINORITY; - tiers_[4] = LibTiers.TIER_GUARDIAN; - tiers_[5] = LibTiers.TIER_ZKVM_SP1; - } - - /// @inheritdoc ITierProvider - function getMinTier(address _proposer, uint256 _rand) public pure override returns (uint16) { - if (_proposer == LAB_PROPOSER && _rand % 1000 == 0) { - // 0.1% of the total blocks will require ZKVM Risc0 proofs. - return LibTiers.TIER_ZKVM_RISC0; - } else if (_proposer == LAB_PROPOSER && _rand % 1000 == 1) { - // 0.1% of the total blocks will require ZKVM Sp1 proofs. - return LibTiers.TIER_ZKVM_SP1; - } else if (_rand % 2 == 0) { - // 50% of the total blocks will require SGX proofs. - return LibTiers.TIER_SGX; - } else { - return LibTiers.TIER_OPTIMISTIC; - } - } -} diff --git a/packages/protocol/contracts/layer1/hekla/HeklaTierRouter.sol b/packages/protocol/contracts/layer1/hekla/HeklaTierRouter.sol new file mode 100644 index 00000000000..f62fdf51e53 --- /dev/null +++ b/packages/protocol/contracts/layer1/hekla/HeklaTierRouter.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "../tiers/TierProviderBase.sol"; +import "../tiers/ITierRouter.sol"; + +/// @title HeklaTierRouter +/// @custom:security-contact security@taiko.xyz +contract HeklaTierRouter is TierProviderBase, ITierRouter { + address public immutable DAO_FALLBACK_PROPOSER; + + constructor(address _daoFallbackProposer) { + // 0xD3f681bD6B49887A48cC9C9953720903967E9DC0 + DAO_FALLBACK_PROPOSER = _daoFallbackProposer; + } + + /// @inheritdoc ITierRouter + function getProvider(uint256) external view returns (address) { + return address(this); + } + + /// @inheritdoc ITierProvider + function getTierIds() external pure returns (uint16[] memory tiers_) { + tiers_ = new uint16[](6); + tiers_[0] = LibTiers.TIER_OPTIMISTIC; + tiers_[1] = LibTiers.TIER_SGX; + tiers_[2] = LibTiers.TIER_ZKVM_RISC0; + tiers_[3] = LibTiers.TIER_ZKVM_SP1; + tiers_[4] = LibTiers.TIER_GUARDIAN_MINORITY; + tiers_[5] = LibTiers.TIER_GUARDIAN; + } + + /// @inheritdoc ITierProvider + function getMinTier(address _proposer, uint256 _rand) public view override returns (uint16) { + if (_proposer == DAO_FALLBACK_PROPOSER) { + if (_rand % 1000 == 0) return LibTiers.TIER_ZKVM_RISC0; + else if (_rand % 1000 == 1) return LibTiers.TIER_ZKVM_SP1; + else return LibTiers.TIER_SGX; + } + + return _rand % 2 == 0 ? LibTiers.TIER_SGX : LibTiers.TIER_OPTIMISTIC; + } +} diff --git a/packages/protocol/contracts/layer1/mainnet/addrcache/RollupAddressCache.sol b/packages/protocol/contracts/layer1/mainnet/addrcache/RollupAddressCache.sol index 4936556e01f..fc7cf509295 100644 --- a/packages/protocol/contracts/layer1/mainnet/addrcache/RollupAddressCache.sol +++ b/packages/protocol/contracts/layer1/mainnet/addrcache/RollupAddressCache.sol @@ -34,7 +34,7 @@ contract RollupAddressCache is AddressCache { return (true, 0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a); } if (_name == LibStrings.B_TIER_ROUTER) { - return (true, 0x6E997f1F22C40ba37F633B08f3b07E10Ed43155a); + return (true, 0x2cD242BfD58E6D1810323D07b065413095c7AFd0); } if (_name == LibStrings.B_TIER_SGX) { return (true, 0xb0f3186FC1963f774f52ff455DC86aEdD0b31F81); @@ -48,11 +48,11 @@ contract RollupAddressCache is AddressCache { if (_name == LibStrings.B_AUTOMATA_DCAP_ATTESTATION) { return (true, 0x8d7C954960a36a7596d7eA4945dDf891967ca8A3); } - if (_name == LibStrings.B_BLOCK_PROPOSER) { + if (_name == LibStrings.B_PRECONF_REGISTRY) { return (true, address(0)); } if (_name == LibStrings.B_CHAIN_WATCHDOG) { - return (true, address(0)); + return (true, 0xE3D777143Ea25A6E031d1e921F396750885f43aC); } return (false, address(0)); } diff --git a/packages/protocol/contracts/layer1/mainnet/addrcache/SharedAddressCache.sol b/packages/protocol/contracts/layer1/mainnet/addrcache/SharedAddressCache.sol index ee2e6b68676..b870f54aeeb 100644 --- a/packages/protocol/contracts/layer1/mainnet/addrcache/SharedAddressCache.sol +++ b/packages/protocol/contracts/layer1/mainnet/addrcache/SharedAddressCache.sol @@ -28,7 +28,7 @@ contract SharedAddressCache is AddressCache { return (true, 0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC); } if (_name == LibStrings.B_BRIDGED_ERC20) { - return (true, 0x79BC0Aada00fcF6E7AB514Bfeb093b5Fae3653e3); + return (true, 0x65666141a541423606365123Ed280AB16a09A2e1); } if (_name == LibStrings.B_BRIDGED_ERC721) { return (true, 0xC3310905E2BC9Cfb198695B75EF3e5B69C6A1Bf7); diff --git a/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTaikoL1.sol b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTaikoL1.sol index 1ca0b14089a..8c43054d500 100644 --- a/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTaikoL1.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTaikoL1.sol @@ -35,8 +35,8 @@ contract MainnetTaikoL1 is TaikoL1, RollupAddressCache { minGasExcess: 1_340_000_000, // correspond to 0.008847185 gwei basefee maxGasIssuancePerBlock: 600_000_000 // two minutes: 5_000_000 * 120 }), - ontakeForkHeight: 576_000 // = 7200 * 80 - }); + ontakeForkHeight: 538_304 + }); } function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { diff --git a/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTierRouter.sol b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTierRouter.sol index 2c9a8966106..6268c73946b 100644 --- a/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTierRouter.sol +++ b/packages/protocol/contracts/layer1/mainnet/rollup/MainnetTierRouter.sol @@ -2,13 +2,38 @@ pragma solidity ^0.8.24; import "src/layer1/tiers/ITierRouter.sol"; +import "src/layer1/tiers/TierProviderBase.sol"; /// @title MainnetTierRouter /// @dev Labeled in AddressResolver as "tier_router" /// @custom:security-contact security@taiko.xyz -contract MainnetTierRouter is ITierRouter { +contract MainnetTierRouter is ITierRouter, TierProviderBase { + address public immutable DAO_FALLBACK_PROPOSER; + + constructor(address _daoFallbackProposer) { + // 0xD3f681bD6B49887A48cC9C9953720903967E9DC0 + DAO_FALLBACK_PROPOSER = _daoFallbackProposer; + } + /// @inheritdoc ITierRouter - function getProvider(uint256) external pure returns (address) { - return 0x4cffe56C947E26D07C14020499776DB3e9AE3a23; // TierProviderV2 + function getProvider(uint256) external view returns (address) { + return address(this); + } + + /// @inheritdoc ITierProvider + function getTierIds() external pure returns (uint16[] memory tiers_) { + tiers_ = new uint16[](4); + tiers_[0] = LibTiers.TIER_SGX; + tiers_[1] = LibTiers.TIER_ZKVM_ANY; + tiers_[2] = LibTiers.TIER_GUARDIAN_MINORITY; + tiers_[3] = LibTiers.TIER_GUARDIAN; + } + + /// @inheritdoc ITierProvider + function getMinTier(address _proposer, uint256 _rand) public view override returns (uint16) { + if (_proposer == DAO_FALLBACK_PROPOSER) { + return _rand % 500 == 0 ? LibTiers.TIER_ZKVM_ANY : LibTiers.TIER_SGX; + } + return LibTiers.TIER_SGX; } } diff --git a/packages/protocol/contracts/layer1/tiers/TierProviderBase.sol b/packages/protocol/contracts/layer1/tiers/TierProviderBase.sol index 9f781db3d49..facaf1392c3 100644 --- a/packages/protocol/contracts/layer1/tiers/TierProviderBase.sol +++ b/packages/protocol/contracts/layer1/tiers/TierProviderBase.sol @@ -21,8 +21,8 @@ abstract contract TierProviderBase is ITierProvider { /// previous tier. Additionally, each tier's contest bond is 6.5625 times its validity bond. function getTier(uint16 _tierId) public pure virtual returns (ITierProvider.Tier memory) { if (_tierId == LibTiers.TIER_OPTIMISTIC) { - // cooldownWindow is 1440 minutes and provingWindow is 15 minutes - return _buildTier("", BOND_UNIT, 1440, 15); + // cooldownWindow is 24 hours and provingWindow is 15 minutes + return _buildTier("", BOND_UNIT, 24, 15); } // TEE Tiers @@ -37,19 +37,20 @@ abstract contract TierProviderBase is ITierProvider { // ZKVM+TEE Tier if (_tierId == LibTiers.TIER_ZKVM_AND_TEE) { - return _buildTier(LibStrings.B_TIER_ZKVM_AND_TEE, BOND_UNIT * 4, 1440, 180); + // cooldownWindow is 2 hours and provingWindow is 3 hours + return _buildTier(LibStrings.B_TIER_ZKVM_AND_TEE, BOND_UNIT * 4, 2, 180); } // Guardian Minority Tiers if (_tierId == LibTiers.TIER_GUARDIAN_MINORITY) { - // cooldownWindow is 240 minutes and provingWindow is 2880 minutes - return _buildTier(LibStrings.B_TIER_GUARDIAN_MINORITY, BOND_UNIT * 4, 240, 2880); + // cooldownWindow is 4 hours + return _buildTier(LibStrings.B_TIER_GUARDIAN_MINORITY, BOND_UNIT * 4, 4, 0); } // Guardian Major Tiers if (_tierId == LibTiers.TIER_GUARDIAN) { - // cooldownWindow is 1440 minutes and provingWindow is 2880 minutes - return _buildTier(LibStrings.B_TIER_GUARDIAN, 0, 1440, 2880); + // cooldownWindow is 4 hours + return _buildTier(LibStrings.B_TIER_GUARDIAN, 0, 4, 0); } revert TIER_NOT_FOUND(); @@ -63,22 +64,22 @@ abstract contract TierProviderBase is ITierProvider { pure returns (ITierProvider.Tier memory) { - // cooldownWindow is 1440 minutes and provingWindow is 60 minutes - return _buildTier(_verifierName, BOND_UNIT * 2, 1440, 60); + // cooldownWindow is 4 hours and provingWindow is 60 minutes + return _buildTier(_verifierName, BOND_UNIT * 2, 4, 60); } /// @dev Builds a ZK tier with a specific verifier name. /// @param _verifierName The name of the verifier. /// @return A Tier struct with predefined parameters for ZK. function _buildZkTier(bytes32 _verifierName) private pure returns (ITierProvider.Tier memory) { - // cooldownWindow is 1440 minutes and provingWindow is 180 minutes - return _buildTier(_verifierName, BOND_UNIT * 3, 1440, 180); + // cooldownWindow is 4 hours and provingWindow is 3 hours + return _buildTier(_verifierName, BOND_UNIT * 3, 4, 180); } /// @dev Builds a generic tier with specified parameters. /// @param _verifierName The name of the verifier. /// @param _validityBond The validity bond amount. - /// @param _cooldownWindow The cooldown window duration in minutes. + /// @param _cooldownWindow The cooldown window duration in hours. /// @param _provingWindow The proving window duration in minutes. /// @return A Tier struct with the provided parameters. function _buildTier( @@ -95,7 +96,7 @@ abstract contract TierProviderBase is ITierProvider { verifierName: _verifierName, validityBond: _validityBond, contestBond: _validityBond / 10_000 * 65_625, - cooldownWindow: _cooldownWindow, + cooldownWindow: _cooldownWindow * 60, provingWindow: GRACE_PERIOD + _provingWindow, maxBlocksToVerifyPerProof: 0 }); diff --git a/packages/protocol/contracts/layer1/tiers/TierProviderV2.sol b/packages/protocol/contracts/layer1/tiers/TierProviderV2.sol deleted file mode 100644 index 69f1541bf14..00000000000 --- a/packages/protocol/contracts/layer1/tiers/TierProviderV2.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "./TierProviderBase.sol"; - -/// @title TierProviderV2 -/// @custom:security-contact security@taiko.xyz -contract TierProviderV2 is TierProviderBase { - /// @inheritdoc ITierProvider - function getTierIds() public pure override returns (uint16[] memory tiers_) { - tiers_ = new uint16[](3); - tiers_[0] = LibTiers.TIER_SGX; - tiers_[1] = LibTiers.TIER_GUARDIAN_MINORITY; - tiers_[2] = LibTiers.TIER_GUARDIAN; - } - - /// @inheritdoc ITierProvider - function getMinTier(address, uint256) public pure override returns (uint16) { - return LibTiers.TIER_SGX; - } -} diff --git a/packages/protocol/contracts/layer1/verifiers/compose/ComposeVerifier.sol b/packages/protocol/contracts/layer1/verifiers/compose/ComposeVerifier.sol index 71fe03d6acc..345d354cbd2 100644 --- a/packages/protocol/contracts/layer1/verifiers/compose/ComposeVerifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/compose/ComposeVerifier.sol @@ -78,7 +78,7 @@ abstract contract ComposeVerifier is EssentialContract, IVerifier { TaikoData.TierProof calldata _proof ) external - onlyFromNamed(LibStrings.B_TAIKO) + onlyAuthorizedCaller nonReentrant { (address[] memory verifiers, uint256 numSubProofs_) = getSubVerifiersAndThreshold(); diff --git a/packages/protocol/contracts/layer2/based/Lib1559Math.sol b/packages/protocol/contracts/layer2/based/Lib1559Math.sol index 44f91ff2484..99502d13dd3 100644 --- a/packages/protocol/contracts/layer2/based/Lib1559Math.sol +++ b/packages/protocol/contracts/layer2/based/Lib1559Math.sol @@ -57,7 +57,7 @@ library Lib1559Math { uint256 f = FixedPointMathLib.WAD; uint256 ratio = f * _newGasTarget / _gasTarget; - if (ratio > uint256(type(int256).max)) revert EIP1559_INVALID_PARAMS(); + if (ratio == 0 || ratio > uint256(type(int256).max)) revert EIP1559_INVALID_PARAMS(); int256 lnRatio = FixedPointMathLib.lnWad(int256(ratio)); // may be negative diff --git a/packages/protocol/contracts/shared/bridge/Bridge.sol b/packages/protocol/contracts/shared/bridge/Bridge.sol index d160c5a7436..9805db23013 100644 --- a/packages/protocol/contracts/shared/bridge/Bridge.sol +++ b/packages/protocol/contracts/shared/bridge/Bridge.sol @@ -108,6 +108,7 @@ contract Bridge is EssentialContract, IBridge { __Essential_init(_owner, _sharedAddressManager); } + /// @notice This function shall be called by previously deployed contracts. function init2() external onlyOwner reinitializer(2) { // reset some previously used slots for future reuse __reserved1 = 0; diff --git a/packages/protocol/contracts/shared/common/AddressManager.sol b/packages/protocol/contracts/shared/common/AddressManager.sol index ad064952fe2..0fe5dddc5c7 100644 --- a/packages/protocol/contracts/shared/common/AddressManager.sol +++ b/packages/protocol/contracts/shared/common/AddressManager.sol @@ -24,12 +24,12 @@ contract AddressManager is EssentialContract, IAddressManager { error AM_ADDRESS_ALREADY_SET(); /// @notice Initializes the contract. - /// @param _owner The owner of this contract. msg.sender will be used if this value is zero. + /// @param _owner The owner of this contract. function init(address _owner) external initializer { - __Essential_init(_owner); - addressManager = address(this); + __Essential_init(_owner, address(this)); } + /// @notice This function shall be called by previously deployed contracts. function init2() external onlyOwner reinitializer(2) { addressManager = address(this); } diff --git a/packages/protocol/contracts/shared/common/LibAddress.sol b/packages/protocol/contracts/shared/common/LibAddress.sol index f79bad2610b..6e14eddfff7 100644 --- a/packages/protocol/contracts/shared/common/LibAddress.sol +++ b/packages/protocol/contracts/shared/common/LibAddress.sol @@ -1,9 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; -import "@openzeppelin/contracts/interfaces/IERC1271.sol"; /// @title LibAddress /// @dev Provides utilities for address-related operations. @@ -74,10 +72,10 @@ library LibAddress { view returns (bool result_) { - if (!Address.isContract(_addr)) return false; - - try IERC165(_addr).supportsInterface(_interfaceId) returns (bool _result) { - result_ = _result; - } catch { } + (bool success, bytes memory data) = + _addr.staticcall(abi.encodeCall(IERC165.supportsInterface, (_interfaceId))); + if (success && data.length == 32) { + result_ = abi.decode(data, (bool)); + } } } diff --git a/packages/protocol/contracts/shared/common/LibStrings.sol b/packages/protocol/contracts/shared/common/LibStrings.sol index 2d889bd22b9..db4c00a20ae 100644 --- a/packages/protocol/contracts/shared/common/LibStrings.sol +++ b/packages/protocol/contracts/shared/common/LibStrings.sol @@ -5,7 +5,6 @@ pragma solidity ^0.8.24; /// @custom:security-contact security@taiko.xyz library LibStrings { bytes32 internal constant B_AUTOMATA_DCAP_ATTESTATION = bytes32("automata_dcap_attestation"); - bytes32 internal constant B_BLOCK_PROPOSER = bytes32("block_proposer"); bytes32 internal constant B_BRIDGE = bytes32("bridge"); bytes32 internal constant B_BRIDGE_WATCHDOG = bytes32("bridge_watchdog"); bytes32 internal constant B_BRIDGED_ERC1155 = bytes32("bridged_erc1155"); @@ -15,6 +14,7 @@ library LibStrings { bytes32 internal constant B_ERC1155_VAULT = bytes32("erc1155_vault"); bytes32 internal constant B_ERC20_VAULT = bytes32("erc20_vault"); bytes32 internal constant B_ERC721_VAULT = bytes32("erc721_vault"); + bytes32 internal constant B_PRECONF_REGISTRY = bytes32("preconf_registry"); bytes32 internal constant B_PROVER_ASSIGNMENT = bytes32("PROVER_ASSIGNMENT"); bytes32 internal constant B_PROVER_SET = bytes32("prover_set"); bytes32 internal constant B_QUOTA_MANAGER = bytes32("quota_manager"); diff --git a/packages/protocol/contracts/shared/tokenvault/BridgedERC20V2.sol b/packages/protocol/contracts/shared/tokenvault/BridgedERC20V2.sol index cc2b58ffa76..85cdfafefc6 100644 --- a/packages/protocol/contracts/shared/tokenvault/BridgedERC20V2.sol +++ b/packages/protocol/contracts/shared/tokenvault/BridgedERC20V2.sol @@ -29,7 +29,9 @@ contract BridgedERC20V2 is BridgedERC20, IERC20PermitUpgradeable, EIP712Upgradea error BTOKEN_INVALID_SIG(); /// @inheritdoc IBridgedERC20Initializable - /// @dev Calling this function will change the initialized version to 2. + /// @dev This function is called when the bridge deploys a new bridged ERC20 token, so this + /// function must also cover the logic in init2(), we use + /// `reinitializer(2)` instead of `initializer`. function init( address _owner, address _sharedAddressManager, @@ -48,31 +50,27 @@ contract BridgedERC20V2 is BridgedERC20, IERC20PermitUpgradeable, EIP712Upgradea LibBridgedToken.validateInputs(_srcToken, _srcChainId); __Essential_init(_owner, _sharedAddressManager); __ERC20_init(_name, _symbol); - __EIP712_init_unchained(_name, "1"); - // Set contract properties srcToken = _srcToken; srcChainId = _srcChainId; __srcDecimals = _decimals; + + // Cover logics from `init2()` + __EIP712_init_unchained(_name, "1"); } - /// @dev This function shall be called when upgrading a deployed contract from {BridgedERC20} to - /// {BridgedERC20V2}. + /// @notice This function shall be called by previously deployed contracts. function init2() external reinitializer(2) { __EIP712_init_unchained(name(), "1"); } - /** - * @inheritdoc IERC20PermitUpgradeable - */ - // solhint-disable-next-line func-name-mixedcase + /// @inheritdoc IERC20PermitUpgradeable + // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view override returns (bytes32) { return _domainSeparatorV4(); } - /** - * @inheritdoc IERC20PermitUpgradeable - */ + /// @inheritdoc IERC20PermitUpgradeable function permit( address owner, address spender, @@ -100,9 +98,7 @@ contract BridgedERC20V2 is BridgedERC20, IERC20PermitUpgradeable, EIP712Upgradea _approve(owner, spender, value); } - /** - * @inheritdoc IERC20PermitUpgradeable - */ + /// @inheritdoc IERC20PermitUpgradeable function nonces(address owner) public view virtual override returns (uint256) { return _nonces[owner].current(); } @@ -113,11 +109,7 @@ contract BridgedERC20V2 is BridgedERC20, IERC20PermitUpgradeable, EIP712Upgradea || super.supportsInterface(_interfaceId); } - /** - * @dev "Consume a nonce": return the current value and increment. - * - * _Available since v4.1._ - */ + /// @dev "Consume a nonce": return the current value and increment. function _useNonce(address owner) internal virtual returns (uint256 current) { CountersUpgradeable.Counter storage nonce = _nonces[owner]; current = nonce.current(); diff --git a/packages/protocol/deployments/hekla-contract-logs.md b/packages/protocol/deployments/hekla-contract-logs.md index 18a3f4e41e8..c6381f3dd16 100644 --- a/packages/protocol/deployments/hekla-contract-logs.md +++ b/packages/protocol/deployments/hekla-contract-logs.md @@ -9,13 +9,14 @@ ### shared_address_manager - proxy: `0x7D3338FD5e654CAC5B10028088624CA1D64e74f7` -- impl: `0xba8C3B09AA3FbFD2bcf62cBDaA71c2c49C1e6200` +- impl: `0xAcA2a9f774e540CF592c07bBaAC9Ebae40e7C175` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - transferred ownership on Jul 8, 2024 - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### taiko_token @@ -40,13 +41,14 @@ ### bridge - proxy: `0xA098b76a3Dd499D3F6D58D8AcCaFC8efBFd06807` -- impl: `0xFf9a9A5CC30C59AD0383E8914efc84b33C4Ed5B2` +- impl: `0xE3d424D6D752dBcc6e19Dfd6755D518118f3d93b` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - transferred ownership on Jul 8, 2024 - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### erc20_vault @@ -100,18 +102,19 @@ ### rollup_address_manager - proxy: `0x1F027871F286Cf4B7F898B21298E7B3e090a8403` -- impl: `0xF27440B4Bd3c9cabe858261F0BD500831ce7E1bD` +- impl: `0x97Ece9dC33e8442ED6e61aA378bf3FdC7dF17213` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `13ad99d` - upgraded on Jun 10, 2024 at commit `d5965bb` - transferred ownership on Jul 8, 2024 - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### taikoL1 - proxy: `0x79C9109b764609df928d16fC4a91e9081F7e87DB` -- impl: `0xb179D4038DD6084c548EEf674DAC262F51264e5e.` +- impl: `0x97cBaB3D9CFC4458321767B42A3760294d0A7076.` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` @@ -126,6 +129,8 @@ - upgraded on Jul 15, 2024 at commit `45281b8` - upgraded on Aug 15, 2024 at `protocol-v1.8.0` with [#17919](https://github.com/taikoxyz/taiko-mono/pull/17919) - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 16, 2024 at commit `233806e` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### assignmentHook @@ -148,61 +153,68 @@ ### tierRouter -- impl: `0xE17dBD745f0144b8b7133cbBA044B74Ff34A7aA2` +- impl: `0x45f63AF6ff5803BF4F2817FEe690f1cd5d5bc681` - logs: - deployed on Jun 10, 2024 at commit `d5965bb` - upgraded on Jun 14, 2024 at commit `cc10b04` - upgraded on Jun 19, 2024 at commit `b7e12e3` - upgraded on Aug 15, 2024 at commit `05d49b0` - upgraded on Sep 02, 2024 at commit `9dae5c8` + - upgraded on Oct 24, 2024 at commit `78f9ac0` + - upgraded on Oct 30, 2024 at commit `63455f9` ### prover_set - proxy: `0xD3f681bD6B49887A48cC9C9953720903967E9DC0` -- impl: `0x2dd26aa9D68A2a629aae2f3AA588119362787300.` +- impl: `0x7840556da7E6E74C01a8334a9e6a6d3F4Ae094A0.` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - deployed on Jun 17, 2024 at commit `b7e12e3` - upgraded on Jul 11, 2024 at commit `30631a9` - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### prover_set_contester - proxy: `0x335103c4fa2F55451975082136F1478eCFeB84B9` -- impl: `0xfED83D74c35D29cb2E9cC0514D2B7DcfDA965E3a.` +- impl: `0x93Df4e369fb916ccc78e94e85017d18e367ba9B5.` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - deployed on Jun 21, 2024 at commit `099ce22` - upgraded on Jul 11, 2024 at commit `30631a9` - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### guardian_prover - proxy: `0x92F195a8702da2104aE8E3E10779176E7C35d6BC` -- impl: `0x7a5858e6A57776dc8f5E1E3a7C9631ED2c272673` +- impl: `0x426A2DA100727d8f3e89252Ba125acbd0e048aDe` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - transferred ownership on Jul 8, 2024 - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### guardian_minority - proxy: `0x31d4d27da5c299d4b6CE19c869B8891C0002795d` -- impl: `0x31DC2Cb5986555994d4aa7d4A25aE96203deDFb8` +- impl: `0x8ACaB96A6e8bf611E21A6eA332C6509c8d0b699f` - owner: `0x1D2D1bb9D180541E88a6a682aCf3f61c1605B190` - logs: - deployed on May 20, 2024 at commit `6e56475` - upgraded on Jun 10, 2024 at commit `d5965bb` - transferred ownership on Jul 8, 2024 - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### risc0_groth16_verifier -- addr : 0xc2c2676E31b59085dfDA9b1B066519b20e756D9d +- addr : 0x5fd84014c62D5ea28D4533D5B1B48Ca44e571057 - logs: - deployed on August 14, 2024 at commit `cba2a1e` + - upgraded on October 22, 2024 at commit `684a909` ### tier_zkvm_risc0 @@ -214,10 +226,11 @@ ### sp1_plonk_verifier -- addr : 0x2D3EdD345fC785172c456b086e6672366c6235b7 +- addr : 0xa5287276f63b669E09cF6Dc6F44e941d77D7139e - logs: - deployed on September 02, 2024 at commit `16ac02e` - upgraded on September 15, 2024 at commit `6f26434` + - upgraded on October 22, 2024 at commit `684a909` ### tier_zkvm_sp1 @@ -233,12 +246,13 @@ ### bridge - proxy: `0x1670090000000000000000000000000000000001` -- impl: `0x07781C4C8a972C2a9Bd7b2a2d6EB649cD1a31f45` +- impl: `0x50216f60163ef399E22026fa1300aEa8eebA3462` - owner: `0x95F6077C7786a58FA070D98043b16DF2B1593D2b` - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### erc20_vault @@ -282,39 +296,43 @@ ### shared_address_manager - proxy: `0x1670090000000000000000000000000000000006` -- impl: `0xd4ec1C9622958AFCE7f9E21f758D2edfa2df0Cf0` +- impl: `0x1063F4cF9eaAA67B5dc9750d96eC0BD885D10AeE` - owner: `0x95F6077C7786a58FA070D98043b16DF2B1593D2b` - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### taikoL2 - proxy: `0x1670090000000000000000000000000000010001` -- impl: `0x8b9700D5c4212C3467e3f25989897293B06e147D` +- impl: `0x637B1e6E71007d033B5d4385179037C90665A203` - owner: `0x95F6077C7786a58FA070D98043b16DF2B1593D2b` - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### rollup_address_manager - proxy: `0x1670090000000000000000000000000000010002` -- impl: `0xd4ec1C9622958AFCE7f9E21f758D2edfa2df0Cf0` +- impl: `0x1063F4cF9eaAA67B5dc9750d96eC0BD885D10AeE` - owner: `0x95F6077C7786a58FA070D98043b16DF2B1593D2b` - logs: - upgraded on May 10, 2024 at commit `4903bec` - upgraded on Jun 10, 2024 at commit `d5965bb` - upgraded on Sep 20, 2024 at commit `fd1c039` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### bridged_erc20 -- impl: `0xBF040d7C27cddFE9b4a91ebD79a4dc94e5bec677` +- impl: `0x1BAF1AB3686Ace2fD47E11Ac627F3Cc626aEc0FF` - logs: - deployed on May 10, 2024 at commit `4903bec` - deployed on Jul 25, 2024 at commit `3d89d24` + - upgraded on Oct 29, 2024 at commit `3d12cb2` ### bridged_erc721 diff --git a/packages/protocol/deployments/mainnet-contract-logs-L1.md b/packages/protocol/deployments/mainnet-contract-logs-L1.md index 68f25ddce32..0ddbcd8596d 100644 --- a/packages/protocol/deployments/mainnet-contract-logs-L1.md +++ b/packages/protocol/deployments/mainnet-contract-logs-L1.md @@ -122,14 +122,14 @@ - ens: `v721.based.taiko.eth` - proxy: `0x0b470dd3A0e1C41228856Fb319649E7c08f419Aa` -- impl: `0x6e88046ff7Af8ef14ECa80e06C734bf59851896a` +- impl: `0xD961e3Ef2D7DF58cDc67BFd9055255430E5e3fEc` - owner: `admin.taiko.eth` - logs: - deployed on May 1, 2024 @commit`56dddf2b6` - upgraded from `0xEC04849E7722Fd69797a155796Db75aC8F94f692` to `0x41A7BDD153a5AfFb10Ed1AD3D6a4e5ad001495FA` @commit`b90b932` @tx`0x416560cd96dc75ccffebe889e8d1ab3e08b33f814dc4a2bf7c6f9555071d1f6f` - upgraded from `0x41A7BDD153a5AfFb10Ed1AD3D6a4e5ad001495FA` to `0x2dfef0339009Ce10786fc118C883BB97af3163eD` @commit`fa481c1` @tx`0x02ed558762eae5f0a930ba4a1047a02d4a793ea48890268c32df04e882f138ff` - upgraded from `0x2dfef0339009Ce10786fc118C883BB97af3163eD` to `0x55B5df6B53466446221180498BfD1C59e54732c4` @commit`d907359` @tx`0xdb5e926c96d112ce1389da77a927fba6c7d04a711839b9e14777530ebcf83914` - - upgraded from `0x55B5df6B53466446221180498BfD1C59e54732c4` to `0x6e88046ff7Af8ef14ECa80e06C734bf59851896a` @commit`bb2abc5` @tx`0x7d584f0a645cad61e634f64ffaf7e1bbfb92749878eb25b39ce0e5cf698897c7` + - upgraded from `0x55B5df6B53466446221180498BfD1C59e54732c4` to `0xD961e3Ef2D7DF58cDc67BFd9055255430E5e3fEc` @commit`bb2abc5` @tx`0x7d584f0a645cad61e634f64ffaf7e1bbfb92749878eb25b39ce0e5cf698897c7` #### erc1155_vault @@ -209,7 +209,7 @@ - ens: `based.taiko.eth` - proxy: `0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a` -- impl: `0xBA1d90BCfA74163bFE09e8eF609b346507D83231` +- impl: `0xf0E6d34937701622cA887a75c150cC23d4FFDf2F` - owner: `admin.taiko.eth` - logs: - deployed on May 1, 2024 @commit`56dddf2b6` @@ -226,14 +226,13 @@ - Upgrade to `0x5fc54737ECC1de49D58AE1195d4A296257F1E31b` @commit`04d8c87` @tx`0x13f54109cb7f7507ad03562b06ea8d8b472043186e44252302583bc64acfb20b` - Upgrade to `0xcEe590fACd976B9BDE87BC1B7620B284c5edD2C3` @commit`2dd30ab` @tx`0xc1f91c375713f601b99cf6d2cdb80c129e036a7c9ec5f75871c4d13216dbbb5c` - Upgrade to `0xBA1d90BCfA74163bFE09e8eF609b346507D83231` @commit`bb2abc5` @tx`0x7d584f0a645cad61e634f64ffaf7e1bbfb92749878eb25b39ce0e5cf698897c7` + - Upgrade to `0xf0E6d34937701622cA887a75c150cC23d4FFDf2F` @commit`b4f8547` @tx`0x8778064404816273804d74c97b051f3865bc03062cfa4b0e9567f4556ad31981` -#### tier_provider +#### tier_router -- impl: `0x3a1A900680BaADb889202faf12915F7E47B71ddd` +- impl: `0x2cD242BfD58E6D1810323D07b065413095c7AFd0` - logs: - - deployed on May 1, 2024 @commit`56dddf2b6` - - deployed on May 15, 2024 @commit`cd5144255` - - deployed on Jul 2, 2024 @commit`d2b00ce` + - deployed on Oct 24, 2024 @commit`7334b1d` #### tier_sgx @@ -327,6 +326,7 @@ - Upgraded from `0xde1b1FBe7D721af4A56651272ef91A59B7303323` to `0x5f73f0AdC7dAA6134Fe751C4a78d524f9384e0B5` @commit`3740dc0` @tx`0x46a6d47c15505a1259c64d1e09353680e525b2706dd9e095e15019dda7c1b295` - Called `configureTcbInfoJson` @commit`3740dc0` @tx`0x46a6d47c15505a1259c64d1e09353680e525b2706dd9e095e15019dda7c1b295` - Update mrenclave & mrsign on May 28, 2024 @commit`b335b70` @tx`0x6a240314c6a48f3ab58e0a3d5bf0e915668dac5eec19c694656eeb3d66c12465` + - Called `setMrEnclave` @commit`9d06958` @tx`0x0aa35e03c521f8e4b4d03662a6ecc6de5dd3e336f63e6ea00eff7b4184eae9be` ### token_unlock diff --git a/packages/protocol/deployments/mainnet-contract-logs-L2.md b/packages/protocol/deployments/mainnet-contract-logs-L2.md index 153a3ca1873..ecfb81db0bd 100644 --- a/packages/protocol/deployments/mainnet-contract-logs-L2.md +++ b/packages/protocol/deployments/mainnet-contract-logs-L2.md @@ -41,7 +41,7 @@ - set erc1155_vault@1 to `0xaf145913EA4a56BE22E120ED9C24589659881702` @tx`0x4a16a8a7d02f696b753208bbf8e7e3501d6b70b9a764fa2b4e115add46c13cb3` - changed owner to `0xCa5b76Cc7A38b86Db11E5aE5B1fc9740c3bA3DE8` @tx`0xf68861171c602e3e75ca69e950957fcb908c7949c6df9a9ea3026c238ebb1e9c` - register `taiko_token` to `0xA9d23408b9bA935c230493c40C73824Df71A0975` @tx`0xc77434f4e37959cdc0eac125303b78dd192d8727173373cc7a6158ca7d829dad` - - register `bridged_erc20` to `0x98161D67f762A9E589E502348579FA38B1Ac47A8` @tx`` + - register `bridged_erc20` to `0x98161D67f762A9E589E502348579FA38B1Ac47A8` @tx`0xf377885a94467d520bd765a186d3c3524099fe28e936d05656d0da2509628e65` #### bridge @@ -116,16 +116,6 @@ - todo: - change owner to DelegateOwner -#### delegate_owner - -- proxy: `0x5995941Df88F30Ac140515AA39832db963E2f863` -- impl: `0x1f0511cDae2fbfD93563469dA02b82dEd320C8Bd` -- admin: `0x3c181965C5cFAE61a9010A283e5e0C1445649810` // owned by Daniel W -- remoteOwner: `0x3c181965C5cFAE61a9010A283e5e0C1445649810` // owned by Daniel W -- todo: - - test various use cases - - transfer remote owner to `admin.taiko.eth` - ## Rollup Specific #### rollup_address_manager (ram) diff --git a/packages/protocol/package.json b/packages/protocol/package.json index a066d9a0ad6..864bcdb5467 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -1,6 +1,6 @@ { "name": "@taiko/protocol", - "version": "1.9.0", + "version": "1.10.0", "private": true, "scripts": { "buildMerkle": "ts-node ./utils/airdrop/buildMerkleTree.ts ./utils/airdrop/airdrop_db/example_claimList.json", @@ -48,8 +48,8 @@ "merkletreejs": "^0.4.0", "optimism": "github:ethereum-optimism/optimism#v1.8.0", "p256-verifier": "github:taikoxyz/p256-verifier#v0.1.0", - "risc0-ethereum": "github:risc0/risc0-ethereum#v1.0.0", + "risc0-ethereum": "github:risc0/risc0-ethereum#v1.1.2", "solady": "github:Vectorized/solady#v0.0.231", - "sp1-contracts": "github:succinctlabs/sp1-contracts#v2.0.0" + "sp1-contracts": "github:succinctlabs/sp1-contracts#v3.0.0-rc3" } } diff --git a/packages/protocol/script/gen-layouts.sh b/packages/protocol/script/gen-layouts.sh index 6216cbc7630..25d53ffe77d 100755 --- a/packages/protocol/script/gen-layouts.sh +++ b/packages/protocol/script/gen-layouts.sh @@ -31,9 +31,8 @@ contracts_layer1=( "contracts/layer1/verifiers/SgxVerifier.sol:SgxVerifier" "contracts/layer1/automata-attestation/AutomataDcapV3Attestation.sol:AutomataDcapV3Attestation" "contracts/layer1/based/TaikoL1.sol:TaikoL1" -"contracts/layer1/tiers/TierProviderV2.sol:TierProviderV2" "contracts/layer1/hekla/HeklaTaikoL1.sol:HeklaTaikoL1" -"contracts/layer1/hekla/HeklaTierProvider.sol:HeklaTierProvider" +"contracts/layer1/hekla/HeklaTierRouter.sol:HeklaTierRouter" "contracts/layer1/mainnet/multirollup/MainnetBridge.sol:MainnetBridge" "contracts/layer1/mainnet/multirollup/MainnetSignalService.sol:MainnetSignalService" "contracts/layer1/mainnet/multirollup/MainnetERC20Vault.sol:MainnetERC20Vault" diff --git a/packages/protocol/script/layer1/DeployHeklaL2Contracts.s.sol b/packages/protocol/script/layer1/DeployHeklaL2Contracts.s.sol new file mode 100644 index 00000000000..94d2c612f35 --- /dev/null +++ b/packages/protocol/script/layer1/DeployHeklaL2Contracts.s.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "test/shared/DeployCapability.sol"; +import "src/shared/bridge/Bridge.sol"; +import "src/shared/common/AddressManager.sol"; +import "../../contracts/layer2/hekla/HeklaTaikoL2.sol"; +import "../../contracts/shared/tokenvault/BridgedERC20V2.sol"; + +contract DeployHeklaL2Contracts is DeployCapability { + uint256 public privateKey = vm.envUint("PRIVATE_KEY"); + + modifier broadcast() { + require(privateKey != 0, "invalid private key"); + vm.startBroadcast(privateKey); + _; + vm.stopBroadcast(); + } + + function run() external broadcast { + // TaikoL2 + address heklaTaikoL2 = address(new HeklaTaikoL2()); + // Bridge + address bridge = address(new Bridge()); + // Address manager + address addressManager = address(new AddressManager()); + // Bridged ERC20 V2 + address bridgedERC20V2 = address(new BridgedERC20V2()); + + console2.log("> hekla_taiko_l2@", heklaTaikoL2); + console2.log("> bridge@", bridge); + console2.log("> address_manager@", addressManager); + console2.log("> bridged_erc20_v2@", bridgedERC20V2); + } +} diff --git a/packages/protocol/script/layer1/DeployProtocolOnL1.s.sol b/packages/protocol/script/layer1/DeployProtocolOnL1.s.sol index c50953405e8..085fbd47b2e 100644 --- a/packages/protocol/script/layer1/DeployProtocolOnL1.s.sol +++ b/packages/protocol/script/layer1/DeployProtocolOnL1.s.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.24; import "@openzeppelin/contracts/utils/Strings.sol"; import "@risc0/contracts/groth16/RiscZeroGroth16Verifier.sol"; -import { SP1Verifier as SP1Verifier200rc } from "@sp1-contracts/src/v2.0.0/SP1VerifierPlonk.sol"; +import { SP1Verifier as SuccinctVerifier } from "@sp1-contracts/src/v3.0.0-rc3/SP1VerifierPlonk.sol"; // Actually this one is deployed already on mainnet, but we are now deploying our own (non via-ir) // version. For mainnet, it is easier to go with one of: @@ -19,9 +19,10 @@ import "src/layer1/automata-attestation/AutomataDcapV3Attestation.sol"; import "src/layer1/automata-attestation/lib/PEMCertChainLib.sol"; import "src/layer1/automata-attestation/utils/SigVerifyLib.sol"; import "src/layer1/devnet/DevnetTaikoL1.sol"; -import "src/layer1/devnet/DevnetTierProvider.sol"; +import "src/layer1/devnet/DevnetTierRouter.sol"; import "src/layer1/mainnet/rollup/MainnetGuardianProver.sol"; import "src/layer1/mainnet/rollup/MainnetTaikoL1.sol"; +import "src/layer1/mainnet/rollup/MainnetTierRouter.sol"; import "src/layer1/mainnet/rollup/verifiers/MainnetSgxVerifier.sol"; import "src/layer1/mainnet/multirollup/MainnetBridge.sol"; import "src/layer1/mainnet/multirollup/MainnetERC1155Vault.sol"; @@ -30,11 +31,10 @@ import "src/layer1/mainnet/multirollup/MainnetERC721Vault.sol"; import "src/layer1/mainnet/multirollup/MainnetSignalService.sol"; import "src/layer1/provers/GuardianProver.sol"; import "src/layer1/provers/ProverSet.sol"; -import "src/layer1/tiers/TierProviderV2.sol"; import "src/layer1/token/TaikoToken.sol"; import "src/layer1/verifiers/Risc0Verifier.sol"; import "src/layer1/verifiers/SP1Verifier.sol"; -import "test/layer1/based/TestTierProvider.sol"; +import "test/layer1/based/TestTierRouter.sol"; import "test/shared/token/FreeMintERC20.sol"; import "test/shared/token/MayFailFreeMintERC20.sol"; import "test/shared/DeployCapability.sol"; @@ -45,6 +45,7 @@ import "test/shared/DeployCapability.sol"; contract DeployProtocolOnL1 is DeployCapability { uint256 public NUM_MIN_MAJORITY_GUARDIANS = vm.envUint("NUM_MIN_MAJORITY_GUARDIANS"); uint256 public NUM_MIN_MINORITY_GUARDIANS = vm.envUint("NUM_MIN_MINORITY_GUARDIANS"); + address public DAO_FALLBACK_PROPOSER = 0xD3f681bD6B49887A48cC9C9953720903967E9DC0; address public constant MAINNET_CONTRACT_OWNER = 0x9CBeE534B5D8a6280e01a14844Ee8aF350399C7F; // admin.taiko.eth @@ -291,8 +292,7 @@ contract DeployProtocolOnL1 is DeployCapability { }); TaikoL1 taikoL1; - if (keccak256(abi.encode(vm.envString("TIER_PROVIDER"))) == keccak256(abi.encode("devnet"))) - { + if (keccak256(abi.encode(vm.envString("TIER_ROUTER"))) == keccak256(abi.encode("devnet"))) { taikoL1 = TaikoL1(address(new DevnetTaikoL1())); } else { taikoL1 = TaikoL1(address(new TaikoL1())); @@ -353,7 +353,7 @@ contract DeployProtocolOnL1 is DeployCapability { register( rollupAddressManager, "tier_router", - address(deployTierProvider(vm.envString("TIER_PROVIDER"))) + address(deployTierRouter(vm.envString("TIER_ROUTER"))) ); address[] memory guardians = vm.envAddress("GUARDIAN_PROVERS", ","); @@ -416,8 +416,8 @@ contract DeployProtocolOnL1 is DeployCapability { }); // Deploy sp1 plonk verifier - SP1Verifier200rc sp1Verifier200rc = new SP1Verifier200rc(); - register(rollupAddressManager, "sp1_remote_verifier", address(sp1Verifier200rc)); + SuccinctVerifier succinctVerifier = new SuccinctVerifier(); + register(rollupAddressManager, "sp1_remote_verifier", address(succinctVerifier)); deployProxy({ name: "tier_zkvm_sp1", @@ -427,13 +427,13 @@ contract DeployProtocolOnL1 is DeployCapability { }); } - function deployTierProvider(string memory tierProviderName) private returns (address) { - if (keccak256(abi.encode(tierProviderName)) == keccak256(abi.encode("devnet"))) { - return address(new DevnetTierProvider()); - } else if (keccak256(abi.encode(tierProviderName)) == keccak256(abi.encode("testnet"))) { - return address(new TestTierProvider()); - } else if (keccak256(abi.encode(tierProviderName)) == keccak256(abi.encode("mainnet"))) { - return address(new TierProviderV2()); + function deployTierRouter(string memory tierRouterName) private returns (address) { + if (keccak256(abi.encode(tierRouterName)) == keccak256(abi.encode("devnet"))) { + return address(new DevnetTierRouter()); + } else if (keccak256(abi.encode(tierRouterName)) == keccak256(abi.encode("testnet"))) { + return address(new TestTierRouter()); + } else if (keccak256(abi.encode(tierRouterName)) == keccak256(abi.encode("mainnet"))) { + return address(new MainnetTierRouter(DAO_FALLBACK_PROPOSER)); } else { revert("invalid tier provider"); } diff --git a/packages/protocol/script/layer1/DeploySP1Verifier.s.sol b/packages/protocol/script/layer1/DeploySP1Verifier.s.sol index bc504254a34..a77280321ce 100644 --- a/packages/protocol/script/layer1/DeploySP1Verifier.s.sol +++ b/packages/protocol/script/layer1/DeploySP1Verifier.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -import { SP1Verifier as SP1Verifier200rc } from "@sp1-contracts/src/v2.0.0/SP1VerifierPlonk.sol"; +import { SP1Verifier as SuccinctVerifier } from "@sp1-contracts/src/v3.0.0-rc3/SP1VerifierPlonk.sol"; import "test/shared/DeployCapability.sol"; import "src/layer1/verifiers/SP1Verifier.sol"; @@ -16,8 +16,8 @@ contract DeploySP1Verifier is DeployCapability { vm.startBroadcast(deployerPrivKey); // Deploy sp1 plonk verifier - SP1Verifier200rc sp1Verifier200rc = new SP1Verifier200rc(); - register(rollupAddressManager, "sp1_remote_verifier", address(sp1Verifier200rc)); + SuccinctVerifier succinctVerifier = new SuccinctVerifier(); + register(rollupAddressManager, "sp1_remote_verifier", address(succinctVerifier)); deployProxy({ name: "tier_zkvm_sp1", diff --git a/packages/protocol/script/layer1/SendMessageToDelegateOwner.s.sol b/packages/protocol/script/layer1/SendMessageToDelegateOwner.s.sol index c5989001fee..acb6ec105f8 100644 --- a/packages/protocol/script/layer1/SendMessageToDelegateOwner.s.sol +++ b/packages/protocol/script/layer1/SendMessageToDelegateOwner.s.sol @@ -11,7 +11,7 @@ contract SendMessageToDelegateOwner is Script { address public delegateOwnerImpl = 0x1f0511cDae2fbfD93563469dA02b82dEd320C8Bd; address public multicall3 = 0xcA11bde05977b3631167028862bE2a173976CA11; address public l1Bridge = 0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC; - address public testAccount1 = 0x3c181965C5cFAE61a9010A283e5e0C1445649810; // owned by Daniel W + address public testAccount1 = 0x3c181965C5cFAE61a9010A283e5e0C1445649810; modifier broadcast() { vm.startBroadcast(); @@ -23,8 +23,7 @@ contract SendMessageToDelegateOwner is Script { Multicall3.Call3[] memory calls = new Multicall3.Call3[](2); calls[0].target = delegateOwner; calls[0].allowFailure = false; - calls[0].callData = - abi.encodeCall(DelegateOwner.setAdmin, (0x4757D97449acA795510b9f3152C6a9019A3545c3)); + calls[0].callData = abi.encodeCall(DelegateOwner.setAdmin, (testAccount1)); calls[1].target = delegateOwner; calls[1].allowFailure = false; diff --git a/packages/protocol/script/layer1/UpdateRisc0Verifier.s.sol b/packages/protocol/script/layer1/UpdateRisc0Verifier.s.sol new file mode 100644 index 00000000000..f63398eb35a --- /dev/null +++ b/packages/protocol/script/layer1/UpdateRisc0Verifier.s.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.24; + +import "@risc0/contracts/groth16/RiscZeroGroth16Verifier.sol"; +import "test/shared/DeployCapability.sol"; + +contract UpdateRisc0Verifier is DeployCapability { + uint256 public deployerPrivKey = vm.envUint("PRIVATE_KEY"); + address public rollupAddressManager = vm.envAddress("ROLLUP_ADDRESS_MANAGER"); + + function run() external { + require(deployerPrivKey != 0, "invalid deployer priv key"); + require(rollupAddressManager != address(0), "invalid rollup address manager address"); + + vm.startBroadcast(deployerPrivKey); + RiscZeroGroth16Verifier verifier = + new RiscZeroGroth16Verifier(ControlID.CONTROL_ROOT, ControlID.BN254_CONTROL_ID); + register(rollupAddressManager, "risc0_groth16_verifier", address(verifier)); + vm.stopBroadcast(); + } +} diff --git a/packages/protocol/script/layer1/UpdateSP1Verifier.s.sol b/packages/protocol/script/layer1/UpdateSP1Verifier.s.sol new file mode 100644 index 00000000000..3e5fd060e0f --- /dev/null +++ b/packages/protocol/script/layer1/UpdateSP1Verifier.s.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "@sp1-contracts/src/v3.0.0-rc3/SP1VerifierPlonk.sol"; +import "test/shared/DeployCapability.sol"; + +contract UpdateSP1Verifier is DeployCapability { + uint256 public deployerPrivKey = vm.envUint("PRIVATE_KEY"); + address public rollupAddressManager = vm.envAddress("ROLLUP_ADDRESS_MANAGER"); + + function run() external { + require(deployerPrivKey != 0, "invalid deployer priv key"); + require(rollupAddressManager != address(0), "invalid rollup address manager address"); + + vm.startBroadcast(deployerPrivKey); + + // Deploy sp1 plonk verifier + SP1Verifier sp1Verifier = new SP1Verifier(); + register(rollupAddressManager, "sp1_remote_verifier", address(sp1Verifier)); + + vm.stopBroadcast(); + } +} diff --git a/packages/protocol/script/layer1/UpgradeHeklaOntakeL2.s.sol b/packages/protocol/script/layer1/UpgradeHeklaOntakeL2.s.sol index 0c665b0fb9f..c6b7cfd815f 100644 --- a/packages/protocol/script/layer1/UpgradeHeklaOntakeL2.s.sol +++ b/packages/protocol/script/layer1/UpgradeHeklaOntakeL2.s.sol @@ -17,6 +17,7 @@ contract UpgradeHeklaOntakeL2 is DeployCapability { address public newHeklaTaikoL2 = vm.envAddress("NEW_HEKLA_TAIKO_L2"); address public newBridge = vm.envAddress("NEW_BRIDGE"); address public newAddressManager = vm.envAddress("NEW_ADDRESS_MANAGER"); + address public newBridgedERC20 = vm.envAddress("NEW_BRIDGED_ERC20"); modifier broadcast() { require(privateKey != 0, "invalid private key"); @@ -26,7 +27,7 @@ contract UpgradeHeklaOntakeL2 is DeployCapability { } function run() external broadcast { - Multicall3.Call3[] memory calls = new Multicall3.Call3[](4); + Multicall3.Call3[] memory calls = new Multicall3.Call3[](5); // TaikoL2 calls[0].target = 0x1670090000000000000000000000000000010001; calls[0].allowFailure = false; @@ -43,6 +44,12 @@ contract UpgradeHeklaOntakeL2 is DeployCapability { calls[3].target = 0x1670090000000000000000000000000000000006; calls[3].allowFailure = false; calls[3].callData = abi.encodeCall(UUPSUpgradeable.upgradeTo, (newAddressManager)); + // Register Bridged ERC20 + calls[4].target = 0x1670090000000000000000000000000000000006; + calls[4].allowFailure = false; + calls[4].callData = abi.encodeCall( + AddressManager.setAddress, (167_009, bytes32(bytes("bridged_erc20")), newBridgedERC20) + ); DelegateOwner.Call memory dcall = DelegateOwner.Call({ txId: 0, diff --git a/packages/protocol/script/layer1/config_dcap_sgx_verifier.sh b/packages/protocol/script/layer1/config_dcap_sgx_verifier.sh index 9327476178d..ae55b2683a5 100755 --- a/packages/protocol/script/layer1/config_dcap_sgx_verifier.sh +++ b/packages/protocol/script/layer1/config_dcap_sgx_verifier.sh @@ -29,6 +29,11 @@ if [ $# -eq 0 ]; then exit 1 fi +# dev addresses of the verifier/attester/pemCertChain. +# export SGX_VERIFIER_ADDRESS=0xebB0DA61818F639f460F67940EB269b36d1F104E +# export ATTESTATION_ADDRESS=0xCFd1a900c9C0aB14443460b8F011d8076db636c2 +# export PEM_CERTCHAIN_ADDRESS=0xaa22e95F5Bf27E07c02e6cc41A700597832FA30d + # Hekla addresses of the verifier/attester/pemCertChain. export SGX_VERIFIER_ADDRESS=0x532EFBf6D62720D0B2a2Bb9d11066E8588cAE6D9 export ATTESTATION_ADDRESS=0xC6cD3878Fc56F2b2BaB0769C580fc230A95e1398 diff --git a/packages/protocol/script/layer1/deploy_protocol_on_l1.sh b/packages/protocol/script/layer1/deploy_protocol_on_l1.sh index b225c2279a6..391fd31cca2 100755 --- a/packages/protocol/script/layer1/deploy_protocol_on_l1.sh +++ b/packages/protocol/script/layer1/deploy_protocol_on_l1.sh @@ -21,7 +21,7 @@ PAUSE_TAIKO_L1=true \ PAUSE_BRIDGE=true \ NUM_MIN_MAJORITY_GUARDIANS=7 \ NUM_MIN_MINORITY_GUARDIANS=2 \ -TIER_PROVIDER="devnet" \ +TIER_ROUTER="devnet" \ FOUNDRY_PROFILE="layer1" \ forge script ./script/layer1/DeployProtocolOnL1.s.sol:DeployProtocolOnL1 \ --fork-url http://localhost:8545 \ diff --git a/packages/protocol/script/layer2/DeployDelegateOwner.s.sol b/packages/protocol/script/layer2/DeployDelegateOwner.s.sol index 79da323364c..935686fb00c 100644 --- a/packages/protocol/script/layer2/DeployDelegateOwner.s.sol +++ b/packages/protocol/script/layer2/DeployDelegateOwner.s.sol @@ -7,7 +7,7 @@ import "src/layer2/DelegateOwner.sol"; // forge script --rpc-url https://rpc.mainnet.taiko.xyz script/DeployDelegateOwner.s.sol contract DeployDelegateOwner is DeployCapability { address public l2Sam = 0x1670000000000000000000000000000000000006; - address public testAccount2 = 0x3c181965C5cFAE61a9010A283e5e0C1445649810; // owned by Daniel W + address public testAccount2 = 0x3c181965C5cFAE61a9010A283e5e0C1445649810; address public l1Owner = testAccount2; address public l2Admin = testAccount2; diff --git a/packages/protocol/test/layer1/TaikoL1Test.sol b/packages/protocol/test/layer1/TaikoL1Test.sol index 5f660fee478..e77e24220b9 100644 --- a/packages/protocol/test/layer1/TaikoL1Test.sol +++ b/packages/protocol/test/layer1/TaikoL1Test.sol @@ -9,7 +9,7 @@ import "src/layer1/verifiers/Risc0Verifier.sol"; import "src/layer1/provers/GuardianProver.sol"; import "src/layer1/team/airdrop/ERC20Airdrop.sol"; import "src/shared/bridge/QuotaManager.sol"; -import "../layer1/based/TestTierProvider.sol"; +import "../layer1/based/TestTierRouter.sol"; import "../shared/TaikoTest.sol"; abstract contract TaikoL1Test is TaikoTest { } diff --git a/packages/protocol/test/layer1/based/TaikoL1.t.sol b/packages/protocol/test/layer1/based/TaikoL1.t.sol index 39918e9d14a..1d06387c1d8 100644 --- a/packages/protocol/test/layer1/based/TaikoL1.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1.t.sol @@ -224,16 +224,6 @@ contract TaikoL1Tests is TaikoL1TestBase { proposeBlock(Alice, 1024); } - function test_getTierIds() external { - uint16[] memory tiers = cp.getTierIds(); - assertEq(tiers[0], LibTiers.TIER_OPTIMISTIC); - assertEq(tiers[1], LibTiers.TIER_SGX); - assertEq(tiers[2], LibTiers.TIER_GUARDIAN); - - vm.expectRevert(); - cp.getTier(123); - } - function proposeButRevert(address proposer, uint24 txListSize, bytes4 revertReason) internal { uint256 msgValue = 2 ether; TaikoData.HookCall[] memory hookcalls = new TaikoData.HookCall[](0); diff --git a/packages/protocol/test/layer1/based/TaikoL1TestBase.sol b/packages/protocol/test/layer1/based/TaikoL1TestBase.sol index f3620aaad02..8dad90a69e0 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestBase.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestBase.sol @@ -14,7 +14,7 @@ abstract contract TaikoL1TestBase is TaikoTest { SP1Verifier public sp1; SgxVerifier public sv; GuardianProver public gp; - TestTierProvider public cp; + TestTierRouter public tr; Bridge public bridge; bytes32 public GENESIS_BLOCK_HASH = keccak256("GENESIS_BLOCK_HASH"); @@ -75,7 +75,7 @@ abstract contract TaikoL1TestBase is TaikoTest { setupGuardianProverMultisig(); - cp = new TestTierProvider(); + tr = new TestTierRouter(); bridge = Bridge( payable( @@ -91,7 +91,7 @@ abstract contract TaikoL1TestBase is TaikoTest { registerAddress("taiko", address(L1)); registerAddress("tier_sgx", address(sv)); registerAddress("tier_guardian", address(gp)); - registerAddress("tier_router", address(cp)); + registerAddress("tier_router", address(tr)); registerAddress("signal_service", address(ss)); registerL2Address("taiko", address(L2)); registerL2Address("signal_service", address(L2SS)); diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol index 93aff49bbe5..a6725bc2296 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup1.t.sol @@ -14,7 +14,7 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -117,7 +117,7 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -212,7 +212,7 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -263,7 +263,7 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -314,7 +314,7 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { giveEthAndTko(Taylor, 10_000 ether, 1000 ether); giveEthAndTko(William, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -364,7 +364,7 @@ contract TaikoL1TestGroup1 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup2.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup2.t.sol index 9bb5f5cf8a7..49cee986060 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup2.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup2.t.sol @@ -17,8 +17,8 @@ contract TaikoL1TestGroup2 is TaikoL1TestGroupBase { giveEthAndTko(Taylor, 10_000 ether, 1000 ether); giveEthAndTko(William, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); - ITierProvider.Tier memory tierSgx = TestTierProvider(cp).getTier(LibTiers.TIER_SGX); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierSgx = ITierProvider(tr).getTier(LibTiers.TIER_SGX); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -123,8 +123,8 @@ contract TaikoL1TestGroup2 is TaikoL1TestGroupBase { giveEthAndTko(Taylor, 10_000 ether, 1000 ether); giveEthAndTko(William, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); - ITierProvider.Tier memory tierSgx = TestTierProvider(cp).getTier(LibTiers.TIER_SGX); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierSgx = ITierProvider(tr).getTier(LibTiers.TIER_SGX); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol index 000fefb99ea..832aa341988 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup3.t.sol @@ -18,8 +18,8 @@ contract TaikoL1TestGroup3 is TaikoL1TestGroupBase { giveEthAndTko(James, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); giveEthAndTko(William, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); - ITierProvider.Tier memory tierSgx = TestTierProvider(cp).getTier(LibTiers.TIER_SGX); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierSgx = ITierProvider(tr).getTier(LibTiers.TIER_SGX); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -131,8 +131,8 @@ contract TaikoL1TestGroup3 is TaikoL1TestGroupBase { giveEthAndTko(James, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); giveEthAndTko(William, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); - ITierProvider.Tier memory tierSgx = TestTierProvider(cp).getTier(LibTiers.TIER_SGX); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierSgx = ITierProvider(tr).getTier(LibTiers.TIER_SGX); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol index 01b503f5cd6..ce0bbdde373 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup4.t.sol @@ -16,8 +16,8 @@ contract TaikoL1TestGroup4 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); - ITierProvider.Tier memory tierSgx = TestTierProvider(cp).getTier(LibTiers.TIER_SGX); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierSgx = ITierProvider(tr).getTier(LibTiers.TIER_SGX); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -95,8 +95,8 @@ contract TaikoL1TestGroup4 is TaikoL1TestGroupBase { giveEthAndTko(David, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); - ITierProvider.Tier memory tierSgx = TestTierProvider(cp).getTier(LibTiers.TIER_SGX); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierSgx = ITierProvider(tr).getTier(LibTiers.TIER_SGX); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol index ac7d7fc0efe..ebbaa4eea57 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup5.t.sol @@ -135,7 +135,7 @@ contract TaikoL1TestGroup5 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(William, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -223,7 +223,7 @@ contract TaikoL1TestGroup5 is TaikoL1TestGroupBase { giveEthAndTko(David, 10_000 ether, 1000 ether); giveEthAndTko(William, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup6.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup6.t.sol index 15fa6b57fb0..cb42f8ea7a2 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup6.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup6.t.sol @@ -15,8 +15,8 @@ contract TaikoL1TestGroup6 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); - ITierProvider.Tier memory tierSgx = TestTierProvider(cp).getTier(LibTiers.TIER_SGX); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierSgx = ITierProvider(tr).getTier(LibTiers.TIER_SGX); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup7.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup7.t.sol index d255a89328d..78c85f1a00b 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup7.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup7.t.sol @@ -13,7 +13,7 @@ contract TaikoL1TestGroup7 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -52,7 +52,7 @@ contract TaikoL1TestGroup7 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(Taylor, 10_000 ether, 1000 ether); giveEthAndTko(William, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); diff --git a/packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol b/packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol index 563512ef66b..ba98ebd1799 100644 --- a/packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol +++ b/packages/protocol/test/layer1/based/TaikoL1TestGroup9.t.sol @@ -159,7 +159,7 @@ contract TaikoL1TestGroup5 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(William, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); @@ -249,7 +249,7 @@ contract TaikoL1TestGroup5 is TaikoL1TestGroupBase { giveEthAndTko(Alice, 10_000 ether, 1000 ether); giveEthAndTko(Carol, 10_000 ether, 1000 ether); giveEthAndTko(William, 10_000 ether, 1000 ether); - ITierProvider.Tier memory tierOp = TestTierProvider(cp).getTier(LibTiers.TIER_OPTIMISTIC); + ITierProvider.Tier memory tierOp = ITierProvider(tr).getTier(LibTiers.TIER_OPTIMISTIC); console2.log("====== Alice propose a block"); TaikoData.BlockMetadata memory meta = proposeBlock(Alice, ""); diff --git a/packages/protocol/test/layer1/based/TestTierProvider.sol b/packages/protocol/test/layer1/based/TestTierRouter.sol similarity index 96% rename from packages/protocol/test/layer1/based/TestTierProvider.sol rename to packages/protocol/test/layer1/based/TestTierRouter.sol index 09beb43d033..173ebd033d4 100644 --- a/packages/protocol/test/layer1/based/TestTierProvider.sol +++ b/packages/protocol/test/layer1/based/TestTierRouter.sol @@ -6,18 +6,18 @@ import "src/layer1/tiers/ITierProvider.sol"; import "src/layer1/tiers/LibTiers.sol"; import "src/layer1/tiers/ITierRouter.sol"; -/// @title TestTierProvider +/// @title TestTierRouter /// @dev Labeled in AddressResolver as "tier_router" /// @custom:security-contact security@taiko.xyz -contract TestTierProvider is ITierProvider, ITierRouter { +contract TestTierRouter is ITierProvider, ITierRouter { uint256[50] private __gap; /// @inheritdoc ITierRouter function getProvider(uint256) external view returns (address) { return address(this); } - /// @inheritdoc ITierProvider + /// @inheritdoc ITierProvider function getTier(uint16 _tierId) public pure override returns (ITierProvider.Tier memory) { if (_tierId == LibTiers.TIER_OPTIMISTIC) { return ITierProvider.Tier({ diff --git a/packages/protocol/test/layer1/verifiers/RiscZeroGroth16Verifier.t.sol b/packages/protocol/test/layer1/verifiers/RiscZeroGroth16Verifier.t.sol index 05ba5dab8e2..fabebf4101a 100644 --- a/packages/protocol/test/layer1/verifiers/RiscZeroGroth16Verifier.t.sol +++ b/packages/protocol/test/layer1/verifiers/RiscZeroGroth16Verifier.t.sol @@ -31,7 +31,7 @@ contract RiscZeroGroth16VerifierTest is TaikoL1TestBase { ); rv.setImageIdTrusted( - bytes32(0x4f6beb0c538971a81491c22de3995c82e6fd7938d5090366d7b618d5f6df504d), true + bytes32(0x7669d1059d0dfa9537c2b3581569b8bc244495e6c406d07dea628bc8cf480392), true ); } @@ -44,9 +44,9 @@ contract RiscZeroGroth16VerifierTest is TaikoL1TestBase { vm.startPrank(Emma); bytes memory seal = - hex"310fe59815ffa3b596af0bdccd0aaa064495d5db94fe367414d3a9212c8ce17383717e531ced511d89956c7c8aa0cc8531dac8660093581c5ae19c48a39fc14fd98dc1050684083592dab0fd9a2482c47ab4833c4f9b9a6770a7ce439a4f0e94bc035809138a7566873e34d202708ce4858665202417e645aeb299d4f7633fead7c667562b9104bdc79a0c379145ca2431598beec20b75a722915ff0a872771652583f9206e75bd317e73b1af7705f70aa52c30bc33ea6792b9e080177502fe074b87beb1add2ebe112c7bd17667a418fd9ef6d8e89e606c5efff14b5df24f7aa40c5c4f2bcaaa6f206d2d1e15356c533c5210258a6f1b1d1d22cb63cff0323863d7fe3b"; + hex"50bd1769220929ac1ac3f9d3a8a4e7f4bcec136f8ea44be5a7248785d83b13879b409b762480f0ca5f38b164091e2def50b35829e453d1418492c01cc1b924e851580fe208d3808a925ce28724f0a862b944074f5277c4bd4b3153c1a1ff87056740628008fcc8d7edef53215db823e4773334e6f5fe08fed84c7ebd005fe4f42b80891724044cadde535253739049d99abc1a91a4a987ad93b0fcedbdb2440c9c2d662101509acb5f869bdb2e15d2609aa1a6c6c1a5a83e04fb2f77d25163b5675351be2204a497f20d43277d211adcc66b730b5d8d7635bb4a456cbf9029904ef2493a0346cd8e1aa2c270a160bc28bca77336bf18fe91b9dc8790a15f1618188dafa9"; bytes32 imageId = - bytes32(0x4f6beb0c538971a81491c22de3995c82e6fd7938d5090366d7b618d5f6df504d); + bytes32(0x7669d1059d0dfa9537c2b3581569b8bc244495e6c406d07dea628bc8cf480392); bytes32 journalDigest = bytes32(0xa82287ae36a69b51f8013851b3814ff1243da5dfa071f6fd9b46b85445895553); @@ -101,8 +101,8 @@ contract RiscZeroGroth16VerifierTest is TaikoL1TestBase { function test_risc0_verifyBatchProof() public { vm.startPrank(Emma); - bytes32 aggProofImageId = 0x83e7411adcc296e0a021ff032a868434aa2a519b9d11ad44d11d443832280b44; - bytes32 blkProofImageId = 0x28879b90699846864c97f8f32e1b12aabd8ce13135302345d6ad242fa81ab40d; + bytes32 aggProofImageId = 0x8e192ebe6872b47645367692838b2d697c467f5e4543d605b0ef7d10365fb11a; + bytes32 blkProofImageId = 0x7669d1059d0dfa9537c2b3581569b8bc244495e6c406d07dea628bc8cf480392; // proof generation elf rv.setImageIdTrusted(aggProofImageId, true); @@ -145,7 +145,7 @@ contract RiscZeroGroth16VerifierTest is TaikoL1TestBase { }); bytes memory seal = - hex"310fe59810425afc4ed2bae56dfd76e9045f6cd41da30ae8f07a239e86fdb157bf37b0f51b937cb8deccab0d201623d530d0800c208f66dad3f6a38bc1df34408994dec1179209a5f94411e015b20e723512150cfb7e295debeb7ef4f8186cddcf19ba6527ee0d2a0fb8825568682a2fe48e2f73fe9fa052379824751c3bd3f1353f44fe1857e07f5b4801846637b68eafb93aba0c8de8fdfffc76af62a513966f92d9750a977bce0568eb7438fa3497848bfce3e5fd815d9c24b4600e12d0d405d1fd76301ccf27547bddd49a2fa12d1a414f49c2030d0cdf29a87684964a171eefb7e82a5f86acbaacd8cd24d6c3bab06a568f4869087e825ee79237770f23315f3c5c"; + hex"50bd176901a68e3f05b0e651b6e5ff18e5463be794699597908b42b9ac3195a464c2b67320fb89c8199909a5ef1ff32366d1047009f4758294090f4ce613129f64a9ff58109cf0f6cb0f22e194dab522a2938631b138f4afeb075117a05d1ad75093515e15de11d9b231b79be5d42b0c7921ba22d62a6594258745f3e5c2e10508741fd813581ea8fab28ee1d07cb1f2e84500e2993cff3ca2e37284cfb5cfec5fe301d92f4246b2dbffc17d2ef5d889f50b8f28c51d1bacd6b0c55399e574969bb0a77207ceda541460cfec3e0c315889d62c0c91c5cf0cecd515ada96712735e5cf0ea1664af11012004ba7cb6adea3751911c8afe5eb5979b1adf43da6f9c18837f3d"; // TierProof TaikoData.TierProof memory proof = TaikoData.TierProof({ tier: 100, diff --git a/packages/protocol/test/layer1/verifiers/SP1PlonkVerifier.t.sol b/packages/protocol/test/layer1/verifiers/SP1PlonkVerifier.t.sol index 90a59361860..0ac7dd6c365 100644 --- a/packages/protocol/test/layer1/verifiers/SP1PlonkVerifier.t.sol +++ b/packages/protocol/test/layer1/verifiers/SP1PlonkVerifier.t.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -import { SP1Verifier as SP1PlonkVerifier } from "@sp1-contracts/src/v2.0.0/SP1VerifierPlonk.sol"; +import { SP1Verifier as SuccinctVerifier } from "@sp1-contracts/src/v3.0.0-rc3/SP1VerifierPlonk.sol"; import "../based/TaikoL1TestBase.sol"; -contract SP1PlonkVerifierTest is TaikoL1TestBase { +contract SuccinctVerifierTest is TaikoL1TestBase { function deployTaikoL1() internal override returns (TaikoL1) { return TaikoL1(payable(deployProxy({ name: "taiko", impl: address(new TaikoL1()), data: "" }))); @@ -15,8 +15,8 @@ contract SP1PlonkVerifierTest is TaikoL1TestBase { // Call the TaikoL1TestBase setUp() super.setUp(); - SP1PlonkVerifier verifier = new SP1PlonkVerifier(); - console2.log("Deployed SP1PlonkVerifier to", address(verifier)); + SuccinctVerifier verifier = new SuccinctVerifier(); + console2.log("Deployed SuccinctVerifier to", address(verifier)); registerAddress("sp1_remote_verifier", address(verifier)); // Deploy Taiko's SP1 proof verifier @@ -29,7 +29,7 @@ contract SP1PlonkVerifierTest is TaikoL1TestBase { ); sp1.setProgramTrusted( - bytes32(0x00851c6ce0153ea4f7a6b8f9923ae1ad15d47476925777f4375d1a4b13137231), true + bytes32(0x00b6e596137c781eb0d53073d86d8a7ab56cffc5b5f04b5297ef2e62ac0c56bf), true ); } @@ -42,9 +42,8 @@ contract SP1PlonkVerifierTest is TaikoL1TestBase { vm.startPrank(Emma); bytes memory sp1Proof = - hex"4aca240a1f6e9f5f6927e5468a58a7ca24addf975aacc9293e89729bbb84f814725c911c2488230b0922c072f3261a6480dca80af7d3f1ac54aaef2d1929f06a89f92cb71fd0f2015f1bf32ae904e221d342e1efcbd2b1f2275acda3e2dc1e779297937903643bcbbe5a4f7261d091c264d47810e1a5ca2e1ba20b7b1b069567d3ba895d0e088f70848009522bb67c39c108eb1b29272902fbb5d18bb74b5c4085569879188b5c8f0730da420f6da4e656b66eb9a7ce01da7aff3efe9033e02df0549dc214195b64ca178b9e50b2b35c8449eeeef60a6a0056d9c6a525d5684a544088322a14f46d15740fe42ba83c8c6c57548c415610a545d6b2c7b4146a76a2c957ea2a1975915e864e420c006176e00e6ed26810e80d5c6cec4143daa50b61ec0cb207661ad396db21744b713c0454d78752e5e6eee2e9f5273f30322461fa32b2932d7c8a467de8fac07d8363238245369f3bd196e443ff90aec1754537019eaa4928ab7b0a34d973a5c15123d2820923153f47c0b742ebf1e8d952626a77aa957804446347f03aee26e4bddadba1a3b0f275b7271ff1cbcca1ca0756e22113165f2d0472fc2ac3fa2b4593b472c3333cef81bde5fddb31fed8a52fb450de3b74cd0ab415777a733c22d1aab02d794dac192ca2d3088a7b379dba8896c842bf599d15ab8792e980773a131bfdaa0ab4ff7dfae9c98fb5d6774a8007c3927ffd99ce1acd527de2273f9c1163019cfca98e9bea7a56ff0ca0e8cac93c2096860f6aff14ec69181f6554bca186646d1002a8c2ac0fbdde5d4440242360bb9344399a6429bebc7f97f56090217c091b0e655579d598e3979a1acc8a516cfee2dd43c3341c81a4163221e6a4980fdfb2af09d30c9fa18ad3fb9d10bf4d35fe48663dc597277c25927396fb8d8501b3829f8eccc672515d2a249dec90057d3fe53ca105851257092388f2823fecbf09a8ae35e4e0dcf0ec615366a4db47b7d7e1af480a431957268d2e5283a690f9168c215d481e07188c7bfd5bd227d034d74a035119410eb23b74bd2fb0711eefb7502fc61119161d207c42e88cf73640719305a753052f8665d2222b4ae696fa541c99ffcc9c38153a46675fbdf596d00104b4b0b41708da9b30c70462422bba87bdc2b011a8a302649b7249250ce71793cedfb3f5db1622a7ec48ba7ed576f9ced6b2c9c661e9bed64e6f484f1862b0cd71be2aa628"; - bytes32 vKey = bytes32(0x00851c6ce0153ea4f7a6b8f9923ae1ad15d47476925777f4375d1a4b13137231); - + hex"8fd4de722cab7cfc38b19720f0152ca6311a0a907219bf8dd0c449fe0b3e919f786053d124bd3e9bf8cfa21c98cbea4a43cf70c9c96af9a867a57277a763f5d19331cb772086bb134e1a27d16405dde7b59a654d2146a7d822fa9782e461b3cb4eb272000dc4d93a25a6be5cf1006217fb4be228102117d0a317052b4dd0434482ded2021ab08599ceadcf1cc15c9348dd32ec50d2b6c4b646e0c12472b266832b269d0926a6e6b95b473aa3fdce76052ca64818631c2bcdbe603ad8f87ed0bdd01ab9a00c2e00635547b918704c8ea4b5c7d3e1e8ddf7720f1f58178d10b254ce1090e20fcbdc1f89ccfc9ff88cc25ff96ebc683eed7f9792584446f923a7b30e0d248b133655fcdba58c2c6b8f4b79f4276211df7a78ef5ce97063fed0ebcbb005d47804fd8a75f57cc5f0524ce41601dcbbbc21f73eeac25cc28ec8b66f1e03e8a7202a878463c8ac8038639e4fd211be2b095055e8f06392e0c82c1bae65f791f0c92a6e77bec5e2b62812a9060949dbcca69f714c8b0cca0272d718c9c9b5d410cd2ebbdbb9a143dea6eeb17f39115475409169245f3b61b1c46a9ea6a3296797820c8892a15001619923a972ddbbd8c7dc16df8a698b63ff84f5b34236d464ab252495aebe4902046fb4879e5ca9be9a51b26d672718491adb533ab900b40ef3e70138310b399d6c544e35d4750d3ef44cfa8b721dcff6f5c55a5587da65c1216a26550a3e35dfa4bf583b90e99b3ac051901b689b17ac0390f6e49a334c62d6f1082cda2cafad0d059e00b61173d7ce925fbea86e03c8fe76d47d98ac2090e6051f4d0528029ff31747260bdd9692dc105bd598fb4816a45ef9e13705714fcdda1c19e82a87e5dbf0caff752ce3396a4ebe6d9399c4d422285bcfff0cdf81bddf19ffeb7b405da2dceb60e661c597226eaba2e753e81a92ad19cec6510bd82de50beeff70200e2241cf7fe9d8270c9a4779480c49995d5c99cd9ae7d5c1f9acdf1b4635b78b4a2d8975ce0f587eccce699f590594d837426c5bd59fc078f811ba2717e3816f83cb191077a3ccbb5cd09adf92ff69bcbc9fcaf0fd22bc0c573750251553c7f2cec501e12761e48a9c7377e307c5202ec5707ff6b9e41b3a3085380fc07b0fed0e3abf32aaa6922d7d9649f8a13a1083fe58ccfa9501757be0e85a2ecfd9c2bbeffce6922a421a2ccdca93c7632974a8c6618558e5a33eb4d8ed1d"; + bytes32 vKey = bytes32(0x00b6e596137c781eb0d53073d86d8a7ab56cffc5b5f04b5297ef2e62ac0c56bf); console2.logBytes(abi.encodePacked(vKey, sp1Proof)); // TierProof TaikoData.TierProof memory proof = @@ -105,11 +104,11 @@ contract SP1PlonkVerifierTest is TaikoL1TestBase { // proof generation elf vk digest which is not a bn254 hash // but a sha256 hash from the same Sp1Verifykey. sp1.setProgramTrusted( - bytes32(0x25a022bd2d3ceba748620b63401e94bb156f195a0dc2cf445c2bdfc20358d393), true + bytes32(0x5b72cb095f1e07ac1aa60e7b06d8a7ab2b67fe2d57c12d4a2fde5cc52c0c56bf), true ); // proof aggregation elf sp1.setProgramTrusted( - bytes32(0x000b55d1eea2d844974b3449118e4221bdf44534897d530dd9ae54201a36ad97), true + bytes32(0x0041b4e466ae95d8e71c376eac1f45b8999d5eb1509b39edc12bf97521097880), true ); vm.startPrank(address(L1)); @@ -149,7 +148,7 @@ contract SP1PlonkVerifierTest is TaikoL1TestBase { // TierProof bytes memory data = - hex"000b55d1eea2d844974b3449118e4221bdf44534897d530dd9ae54201a36ad9725a022bd2d3ceba748620b63401e94bb156f195a0dc2cf445c2bdfc20358d3934aca240a294f40587144c884ce9b2326d1b8e002218abeb9535dbfb27fde012f1eba3fba17ee609acf6acf73790d3063da18707342809998f3d8db3fcd5d094b29bb48d22ff04e45f4de3c6026cd67256e45ca562e786db8b36d51c1c5f2f862c993e38f0851ef22ac10ea44ae5b62899650d8a8bc76a983caef459e88c514e1cbd34aea1b6f71f91410d6365b9e635cb4c56b1f6b98eb883d7815273d49fff1c5a4addb0cca4a2f394210ff2d7fc1c33059201a663c9f38f01ef198ef345d4d3d3810b70c99d241029c4a099d3f5ab3b6f5602e04344cc55c821f97fcc163dd472b252119f2940b56f0eee79a0fd5062b20c3445c79d70c773d69abaeced5b68c25f5ae1c385a7f9e8d4c2bc24f9627fa814d8269f2cf73f704b3c46ea8dd0219d41db81e1dc0ac4f62d8d6b8715c5b1637d160c67cde18ee3c66c860830297cc875656120418336954c73523765728f31a0a0bdbf630ad9d937ddf9a1f8dbf88ca281a280e466fe7f8fe8c000826c01930b0d6af20210003b5eac307cd107dff2239340b36e4cbe03ffa0e3bf434aea3252b9b05504321916ac8110f83de55bc9635c62cb569714ad44343866aa1e60e3dd93c4789c0ae94207861bf09838f83cb32a9033d94d3a4d674fcc435cd1b86afd5260c0f6d1501737120d070b950aff9ce5e2821b54d7df5bc8fb28e4f4312f217e9bca61bde4b57cda1075f7bbaedbc259b0f6c6e92661ad9404e0bcb3f15b9839f09fa87d278c2f0f9d99e7eea9ff1f7f023b455edeac48de876a7943796ffba85f3bf1c662081e7e563255f4c268e8711123094ccd2d38b1d3f1ce2c485529b26ab6372fbc3638ffec3aeff657f21a8cf13152c305d2fb084234246dbad615832e98b8c63e8fe582a6fad6efb41642c0018100a1b2f3e2479cb09eaf1d86e530ad63d1d117430a87dcae5182540ad05fd1a17cd482143e3d18c0c82554c71b16c1a62cbad06037c0c61b9894717e681b12e42a110b132225dd8af852412f687ec229710fe17db56c28aad002d5d1313762864a7e8d79b65b9f59f3adcba9c82b891721f7c488d482d5b715f059e3d299602ea0e25424ef254362ac70781e66d35349755e76683c045f4824a6c3b38a9481ace0378d91f74a89cf1138c78f676a1a72931469f8016d9fe1246ae2ccf83422cfeb943fee210a39abcd0551f545f6929fce1722585de936142b2fe1736ccec"; + hex"0041b4e466ae95d8e71c376eac1f45b8999d5eb1509b39edc12bf975210978805b72cb095f1e07ac1aa60e7b06d8a7ab2b67fe2d57c12d4a2fde5cc52c0c56bf8fd4de721f01f0d571dab506ab0a8c4b99f357f11b4fc8b47ab97c2efa686437fc053872083c9e70147649c2fbaa5e68e77b014a024b20206b865bd3a1c28ced4d21cba41de4ac423e9fd71b6a0193f33ebb9e06805e13d95032fe8862548800823b85b3132160d62dddcc882a51c62aab4ba196f6fcf09fd0943ef8153ac99f9982f01a30052e27bb82d88f5506537c18880f36219fe17751b562ecf6e08685cdafcafe2bec9ca35246370a51e4570ee437eca2d9fd373fc26f74dc3c5658ed6fc9a5c60a2245b77dd711b1a96992551bd101a9ce764dff8704c87f95f8d4669b8bf65c25c086d160405532b0eff81477135ae6b3ef791c7539ded4f525ab0c4d0bc179029836461907f0cf3c04d681395a10c8240ced3da9d30dfabd9ef5e4adb75dda11027bad2cc8e8b4ab2648137fa9bb44e6c21ec3cff40c1e356dd9e2d0db572f2f030b9e591c91cc5210beb693fc66ce5d51ecbb23b3f24af0e0e280ea1e62a3036d2da06fdcde9a0c8db3a3773e03e1476588ff54e47543e86f7cdaf37bbaa8124b1d2544e423be363a8a07aed33b1fd242631902f91bcdcf8405e59886d9ae073a20596079eb474c33bb9d14bc8d84d9cc6033b211ddbb97039734bedaccef163c7ac8df54a7760434563ad4e90a5526e9ac1e3535707cb1cb1867aa83e6ca0ecc4fd402eda1c35213f546e3d171c9660965c08e3d5f3e4de6d0163e0a18d922d56ba61565738167c49d8b1262c48ae47d749ab7ddbd7caf8a235115649ef32817e387937415e50aecb1e4614b183d4e8813e5809100e8b36843c9e29291d21b6e3309c6f534b3e6a40443d0efee93b2fceae0e2a39e59c95dbd672dbefb1827d46c1e9794a4bea891fa3fcd8403916185369c0c94fd4e93a45f53d2fe3b3e15e8d2114f9afcb7a3863d92a3259fb315d5c0bc9ad09e887e119de3e74a49b60bb47a4d3901835087c7fd1d9686fd83f81fc1eb7d0498b1c5f9a4d299af7ded192d8fe5e012fded12f7f7238926fa8b5207220d524756c49076abaf6e8327120e7bb56699fcd13d94cb50bc01e306552db7e8af06efbb954bff76efc844da0e14952b5b8480b0522296e67a8ebc2581bf8a8c6bcb36228949b483d8ce592cd2186c2c8ea51515ae38ceaac637dc170bb9a1755cdb3d94ffdeee7d0c5f78ecb60fb12b04f1951c38a5520feffe350aeb4046a1909d478f0605933fb5edfe50d9"; TaikoData.TierProof memory proof = TaikoData.TierProof({ tier: 0, data: data }); // `verifyProof()` diff --git a/packages/protocol/test/layer2/Lib1559Math.t.sol b/packages/protocol/test/layer2/Lib1559Math.t.sol index dd821e0e13e..b650f231e23 100644 --- a/packages/protocol/test/layer2/Lib1559Math.t.sol +++ b/packages/protocol/test/layer2/Lib1559Math.t.sol @@ -36,7 +36,7 @@ contract TestLib1559Math is TaikoL2Test { console2.log("Mainnet minimal basefee: ", Lib1559Math.basefee(1_340_000_000, 5_000_000 * 8)); } - function test_change_of_quotient_and_gips() public { + function test_change_of_quotient_and_gasIssuancePerSecond() public { uint64 excess = 150 * 2_000_000; uint64 target = 4 * 2_000_000; uint256 unit = 10_000_000; // 0.01 gwei @@ -74,7 +74,7 @@ contract TestLib1559Math is TaikoL2Test { } } - function test_change_of_quotient_and_gips2() public { + function test_change_of_quotient_and_gasIssuancePerSecond2() public { uint64 excess = 1; uint64 target = 60_000_000 * 8; uint256 unit = 10_000_000; // 0.01 gwei diff --git a/packages/protocol/test/shared/thirdparty/Multicall3.sol b/packages/protocol/test/shared/thirdparty/Multicall3.sol index 2b15bc3d116..38b96a3e872 100644 --- a/packages/protocol/test/shared/thirdparty/Multicall3.sol +++ b/packages/protocol/test/shared/thirdparty/Multicall3.sol @@ -1,7 +1,3 @@ -/** - * Submitted for verification at taikoscan.io on 2024-05-30 - */ - // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; diff --git a/packages/relayer/.golangci.yml b/packages/relayer/.golangci.yml index 56dcebe883c..f47cd722a6f 100644 --- a/packages/relayer/.golangci.yml +++ b/packages/relayer/.golangci.yml @@ -9,7 +9,7 @@ # ], output: - format: colored-line-number + formats: colored-line-number linters: enable: @@ -34,6 +34,8 @@ linters-settings: min-complexity: 75 issues: + exclude-dirs: + - contracts/* exclude-rules: # Exclude some linters from running on tests files. - path: _test\.go @@ -42,7 +44,3 @@ issues: - path: / linters: - typecheck - -run: - skip-dirs: - - contracts/* diff --git a/packages/relayer/pkg/mock/mock_tx_sender.go b/packages/relayer/pkg/mock/mock_tx_sender.go index df88966b6ae..5dd941b5fd0 100644 --- a/packages/relayer/pkg/mock/mock_tx_sender.go +++ b/packages/relayer/pkg/mock/mock_tx_sender.go @@ -2,10 +2,12 @@ package mock import ( "context" + "math/big" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rpc" ) type TxManager struct { @@ -34,3 +36,20 @@ func (t *TxManager) Close() { func (t *TxManager) IsClosed() bool { return false } + +func (t *TxManager) SendAsync(ctx context.Context, candidate txmgr.TxCandidate, ch chan txmgr.SendResponse) { + panic("unimplemented") +} + +func (t *TxManager) SuggestGasPriceCaps(ctx context.Context) ( + tipCap *big.Int, + baseFee *big.Int, + blobBaseFee *big.Int, + err error, +) { + panic("unimplemented") +} + +func (t *TxManager) API() rpc.API { + panic("unimplemented") +} diff --git a/packages/taiko-client/CHANGELOG.md b/packages/taiko-client/CHANGELOG.md index 43d81ace672..99eceb0e43e 100644 --- a/packages/taiko-client/CHANGELOG.md +++ b/packages/taiko-client/CHANGELOG.md @@ -1,5 +1,37 @@ # Changelog +## [0.39.2](https://github.com/taikoxyz/taiko-mono/compare/taiko-client-v0.39.1...taiko-client-v0.39.2) (2024-10-24) + + +### Bug Fixes + +* **protocol:** fix issue in mainnet deployment script ([#18283](https://github.com/taikoxyz/taiko-mono/issues/18283)) ([5c371a1](https://github.com/taikoxyz/taiko-mono/commit/5c371a181af444999f611e03774ec096ffbd1226)) +* **taiko-client:** fix path parsing in `/eth/v1/config/spec` ([#18295](https://github.com/taikoxyz/taiko-mono/issues/18295)) ([6633c80](https://github.com/taikoxyz/taiko-mono/commit/6633c80fbcabb6f06ce5467501da4207bc84be84)) + +## [0.39.1](https://github.com/taikoxyz/taiko-mono/compare/taiko-client-v0.39.0...taiko-client-v0.39.1) (2024-10-22) + + +### Bug Fixes + +* **taiko-client:** fix `lastVerifiedBlockHash` fetch ([#18277](https://github.com/taikoxyz/taiko-mono/issues/18277)) ([8512f45](https://github.com/taikoxyz/taiko-mono/commit/8512f456f033130ecb0e5493a3c36be025908228)) + +## [0.39.0](https://github.com/taikoxyz/taiko-mono/compare/taiko-client-v0.38.0...taiko-client-v0.39.0) (2024-10-21) + + +### Features + +* **taiko-client:** update `OntakeForkHeight` in mainnet ([#18253](https://github.com/taikoxyz/taiko-mono/issues/18253)) ([21c6235](https://github.com/taikoxyz/taiko-mono/commit/21c62355575adae6d99e1a117f357c6429d79b4c)) + + +### Documentation + +* **taiko-client:** update readme how to do integration test ([#18256](https://github.com/taikoxyz/taiko-mono/issues/18256)) ([b12b32e](https://github.com/taikoxyz/taiko-mono/commit/b12b32e92b5803f15047a6da2b73135f12b9406d)) + + +### Tests + +* **taiko-client:** introduce `taiko-reth` as another L2 node in testing ([#18223](https://github.com/taikoxyz/taiko-mono/issues/18223)) ([e856273](https://github.com/taikoxyz/taiko-mono/commit/e85627365d423fd8353b5bff92e80978774e9c50)) + ## [0.38.0](https://github.com/taikoxyz/taiko-mono/compare/taiko-client-v0.37.0...taiko-client-v0.38.0) (2024-10-09) diff --git a/packages/taiko-client/Makefile b/packages/taiko-client/Makefile index 8454ee49e41..3bfdd7396e6 100644 --- a/packages/taiko-client/Makefile +++ b/packages/taiko-client/Makefile @@ -18,8 +18,9 @@ lint: && goimports -local "github.com/taikoxyz/taiko-mono/packages/taiko-client" -w ./ \ && golangci-lint run -test: lint +test: @PACKAGE=${PACKAGE} \ + L2_NODE=$${L2_NODE:-l2_geth} \ RUN_TESTS=true \ ./integration_test/entrypoint.sh diff --git a/packages/taiko-client/bindings/.githead b/packages/taiko-client/bindings/.githead index c43bce274c9..d214b1e728d 100644 --- a/packages/taiko-client/bindings/.githead +++ b/packages/taiko-client/bindings/.githead @@ -1 +1 @@ -b93d056479adfc4a1f557578d8b66eda48b104a9 +13cc0074a2295c5939cf83e23f531cb25c43bd64 diff --git a/packages/taiko-client/bindings/encoding/protocol_config.go b/packages/taiko-client/bindings/encoding/protocol_config.go index 21f7f9d4403..ee2163db681 100644 --- a/packages/taiko-client/bindings/encoding/protocol_config.go +++ b/packages/taiko-client/bindings/encoding/protocol_config.go @@ -55,10 +55,10 @@ var ( LivenessBond: livenessBond, StateRootSyncInternal: 16, MaxAnchorHeightOffset: 64, - // TODO: update this value when mainnet fork height is decided - OntakeForkHeight: 9_000_000, + OntakeForkHeight: 538_304, BaseFeeConfig: bindings.LibSharedDataBaseFeeConfig{ AdjustmentQuotient: 8, + SharingPctg: 75, GasIssuancePerSecond: 5_000_000, MinGasExcess: 1_340_000_000, MaxGasIssuancePerBlock: 600_000_000, diff --git a/packages/taiko-client/driver/chain_syncer/beaconsync/syncer.go b/packages/taiko-client/driver/chain_syncer/beaconsync/syncer.go index cc2c65a5150..b901b356c2b 100644 --- a/packages/taiko-client/driver/chain_syncer/beaconsync/syncer.go +++ b/packages/taiko-client/driver/chain_syncer/beaconsync/syncer.go @@ -5,6 +5,7 @@ import ( "fmt" "math/big" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/beacon/engine" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/eth/downloader" @@ -71,9 +72,24 @@ func (s *Syncer) TriggerBeaconSync(blockID uint64) error { return fmt.Errorf("unexpected NewPayload response status: %s", status.Status) } - lastVerifiedBlockHash, err := s.rpc.GetLastVerifiedBlockHash(s.ctx) - if err != nil { - return fmt.Errorf("failed to fetch the last verified block hash: %w", err) + var lastVerifiedBlockHash common.Hash + if lastVerifiedBlockHash, err = s.rpc.GetLastVerifiedBlockHash(s.ctx); err != nil { + log.Debug("Failed to fetch the last verified block hash", "err", err) + + stateVars, err := s.rpc.GetProtocolStateVariables(&bind.CallOpts{Context: s.ctx}) + if err != nil { + return fmt.Errorf("failed to fetch protocol state variables: %w", err) + } + + lastVerifiedBlockHeader, err := s.rpc.L2CheckPoint.HeaderByNumber( + s.ctx, + new(big.Int).SetUint64(stateVars.B.LastVerifiedBlockId), + ) + if err != nil { + return fmt.Errorf("failed to fetch the last verified block hash: %w", err) + } + + lastVerifiedBlockHash = lastVerifiedBlockHeader.Hash() } fcRes, err := s.rpc.L2Engine.ForkchoiceUpdate(s.ctx, &engine.ForkchoiceStateV1{ diff --git a/packages/taiko-client/driver/chain_syncer/blob/syncer.go b/packages/taiko-client/driver/chain_syncer/blob/syncer.go index c850bb52ad7..53a49961a0b 100644 --- a/packages/taiko-client/driver/chain_syncer/blob/syncer.go +++ b/packages/taiko-client/driver/chain_syncer/blob/syncer.go @@ -409,9 +409,24 @@ func (s *Syncer) insertNewHead( return nil, fmt.Errorf("failed to create execution payloads: %w", err) } - lastVerifiedBlockHash, err := s.rpc.GetLastVerifiedBlockHash(ctx) - if err != nil { - return nil, fmt.Errorf("failed to fetch the last verified block hash: %w", err) + var lastVerifiedBlockHash common.Hash + if lastVerifiedBlockHash, err = s.rpc.GetLastVerifiedBlockHash(ctx); err != nil { + log.Debug("Failed to fetch last verified block hash", "error", err) + + stateVars, err := s.rpc.GetProtocolStateVariables(&bind.CallOpts{Context: ctx}) + if err != nil { + return nil, fmt.Errorf("failed to fetch protocol state variables: %w", err) + } + + lastVerifiedBlockHeader, err := s.rpc.L2.HeaderByNumber( + ctx, + new(big.Int).SetUint64(stateVars.B.LastVerifiedBlockId), + ) + if err != nil { + return nil, fmt.Errorf("failed to fetch last verified block: %w", err) + } + + lastVerifiedBlockHash = lastVerifiedBlockHeader.Hash() } fc := &engine.ForkchoiceStateV1{ diff --git a/packages/taiko-client/driver/chain_syncer/blob/syncer_test.go b/packages/taiko-client/driver/chain_syncer/blob/syncer_test.go index 22b27b665a2..7c9c6546249 100644 --- a/packages/taiko-client/driver/chain_syncer/blob/syncer_test.go +++ b/packages/taiko-client/driver/chain_syncer/blob/syncer_test.go @@ -111,6 +111,10 @@ func (s *BlobSyncerTestSuite) TestInsertNewHead() { } func (s *BlobSyncerTestSuite) TestTreasuryIncomeAllAnchors() { + // TODO: Temporarily skip this test case when using l2_reth node. + if os.Getenv("L2_NODE") == "l2_reth" { + s.T().Skip() + } treasury := common.HexToAddress(os.Getenv("TREASURY")) s.NotZero(treasury.Big().Uint64()) @@ -133,6 +137,10 @@ func (s *BlobSyncerTestSuite) TestTreasuryIncomeAllAnchors() { } func (s *BlobSyncerTestSuite) TestTreasuryIncome() { + // TODO: Temporarily skip this test case when using l2_reth node. + if os.Getenv("L2_NODE") == "l2_reth" { + s.T().Skip() + } treasury := common.HexToAddress(os.Getenv("TREASURY")) s.NotZero(treasury.Big().Uint64()) diff --git a/packages/taiko-client/driver/driver_test.go b/packages/taiko-client/driver/driver_test.go index cbae3bf9525..b0a97cc4818 100644 --- a/packages/taiko-client/driver/driver_test.go +++ b/packages/taiko-client/driver/driver_test.go @@ -98,6 +98,10 @@ func (s *DriverTestSuite) TestProcessL1Blocks() { } func (s *DriverTestSuite) TestCheckL1ReorgToHigherFork() { + // TODO: Temporarily skip this test case when use l2_reth node. + if os.Getenv("L2_NODE") == "l2_reth" { + s.T().Skip() + } var ( testnetL1SnapshotID = s.SetL1Snapshot() ) diff --git a/packages/taiko-client/integration_test/README.md b/packages/taiko-client/integration_test/README.md index 056dbacf88d..2e3d99cb137 100644 --- a/packages/taiko-client/integration_test/README.md +++ b/packages/taiko-client/integration_test/README.md @@ -1,4 +1,8 @@ # How to debug test cases? +- set up config +``` +export L2_NODE=l2_geth +``` - start docker compose diff --git a/packages/taiko-client/integration_test/l1_env.sh b/packages/taiko-client/integration_test/l1_env.sh index 3fd0923f49b..7bde57f70aa 100755 --- a/packages/taiko-client/integration_test/l1_env.sh +++ b/packages/taiko-client/integration_test/l1_env.sh @@ -10,7 +10,7 @@ export PROVER_SET_ADMIN=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 export TAIKO_TOKEN_PREMINT_RECIPIENT=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 export TAIKO_TOKEN_NAME="Taiko Token Test" export TAIKO_TOKEN_SYMBOL="TTKOt" -export TIER_PROVIDER="devnet" +export TIER_ROUTER="devnet" export PAUSE_TAIKO_L1="false" export PAUSE_BRIDGE="false" export TAIKO_TOKEN=0x0000000000000000000000000000000000000000 diff --git a/packages/taiko-client/internal/docker/docker_env.sh b/packages/taiko-client/internal/docker/docker_env.sh index cb3ad4358c9..b5ae4ffdd4c 100755 --- a/packages/taiko-client/internal/docker/docker_env.sh +++ b/packages/taiko-client/internal/docker/docker_env.sh @@ -9,7 +9,7 @@ until cast chain-id --rpc-url "$L1_PROBE_URL" 2> /dev/null; do done # check until L2 chain is ready -L2_PROBE_URL=ws://localhost:$(docker port l2_node | grep "0.0.0.0" | awk -F ':' 'NR==2 {print $2}') +L2_PROBE_URL=ws://localhost:$(docker port $L2_NODE | grep "0.0.0.0" | awk -F ':' 'NR==2 {print $2}') until cast chain-id --rpc-url "$L2_PROBE_URL" 2> /dev/null; do sleep 1 done @@ -18,13 +18,13 @@ L1_NODE_PORT=$(docker port l1_node | grep '0.0.0.0' | awk -F ':' '{print $2}') export L1_HTTP=http://localhost:$L1_NODE_PORT export L1_WS=ws://localhost:$L1_NODE_PORT -export L2_HTTP=http://localhost:$(docker port l2_node | grep "0.0.0.0" | awk -F ':' 'NR==1 {print $2}') -export L2_WS=ws://localhost:$(docker port l2_node | grep "0.0.0.0" | awk -F ':' 'NR==2 {print $2}') -export L2_AUTH=http://localhost:$(docker port l2_node | grep "0.0.0.0" | awk -F ':' 'NR==3 {print $2}') +export L2_HTTP=http://localhost:$(docker port $L2_NODE | grep "0.0.0.0" | awk -F ':' 'NR==1 {print $2}') +export L2_WS=ws://localhost:$(docker port $L2_NODE | grep "0.0.0.0" | awk -F ':' 'NR==2 {print $2}') +export L2_AUTH=http://localhost:$(docker port $L2_NODE | grep "0.0.0.0" | awk -F ':' 'NR==3 {print $2}') export JWT_SECRET=$DIR/nodes/jwt.hex -echo -e "L1_NODE PORTS: \n$(docker port l1_node)" -echo -e "L2_NODE PORTS: \n$(docker port l2_node)" +echo -e "L1_NODE PORTS: \n\t$(docker port l1_node)" +echo -e "L2_NODE PORTS: \n\t$(docker port $L2_NODE)" echo "L1_HTTP: $L1_HTTP" echo "L1_WS: $L1_WS" diff --git a/packages/taiko-client/internal/docker/nodes/docker-compose.yml b/packages/taiko-client/internal/docker/nodes/docker-compose.yml index 4880101823c..1c81f01f92c 100644 --- a/packages/taiko-client/internal/docker/nodes/docker-compose.yml +++ b/packages/taiko-client/internal/docker/nodes/docker-compose.yml @@ -16,8 +16,8 @@ services: - --hardfork - cancun - l2_execution_engine: - container_name: l2_node + l2_geth: + container_name: l2_geth image: us-docker.pkg.dev/evmchain/images/taiko-geth:taiko restart: unless-stopped pull_policy: always @@ -67,3 +67,41 @@ services: - --ws.api - admin,debug,eth,net,web3,txpool,miner,taiko - --taiko + + l2_reth: + container_name: l2_reth + image: us-docker.pkg.dev/evmchain/images/taiko-reth:v1.0.0 + restart: unless-stopped + pull_policy: always + volumes: + - .:/host + ports: + - "8545" + - "8546" + - "8551" + command: + - node + - --datadir + - /data/taiko-geth + - --chain + - "167001" + - --http + - --http.addr + - "0.0.0.0" + - --http.corsdomain + - "*" + - --ws + - --ws.addr + - "0.0.0.0" + - --ws.origins + - "*" + - --authrpc.addr + - "0.0.0.0" + - --authrpc.port + - "8551" + - --authrpc.jwtsecret + - /host/jwt.hex + - --http.api + - admin,debug,eth,net,web3,txpool,taiko + - --ws.api + - admin,debug,eth,net,web3,txpool,taiko diff --git a/packages/taiko-client/internal/docker/start.sh b/packages/taiko-client/internal/docker/start.sh index cde4a56a28c..c8710765a9d 100755 --- a/packages/taiko-client/internal/docker/start.sh +++ b/packages/taiko-client/internal/docker/start.sh @@ -2,7 +2,14 @@ source scripts/common.sh -DOCKER_SERVICE_LIST=("l1_node" "l2_execution_engine") +if [ "$L2_NODE" == "l2_reth" ];then + DOCKER_SERVICE_LIST=("l1_node" "l2_reth") + elif [ "$L2_NODE" == "l2_geth" ];then + DOCKER_SERVICE_LIST=("l1_node" "l2_geth") + else + echo "unsupported L2_NODE: $L2_NODE" + exit 1 +fi # start docker compose service list echo "start docker compose service: ${DOCKER_SERVICE_LIST[*]}" diff --git a/packages/taiko-client/internal/docker/stop.sh b/packages/taiko-client/internal/docker/stop.sh index 0a69ade3282..38e36534a96 100755 --- a/packages/taiko-client/internal/docker/stop.sh +++ b/packages/taiko-client/internal/docker/stop.sh @@ -2,7 +2,14 @@ source scripts/common.sh -DOCKER_SERVICE_LIST=("l1_node" "l2_execution_engine") +if [ "$L2_NODE" == "l2_reth" ];then + DOCKER_SERVICE_LIST=("l1_node" "l2_reth") + elif [ "$L2_NODE" == "l2_geth" ];then + DOCKER_SERVICE_LIST=("l1_node" "l2_geth") + else + echo "unsupported L2_NODE: $L2_NODE" + exit 1 +fi echo "stop docker compose service: ${DOCKER_SERVICE_LIST[*]}" diff --git a/packages/taiko-client/internal/testutils/helper.go b/packages/taiko-client/internal/testutils/helper.go index d93e3499f15..36d7adc9331 100644 --- a/packages/taiko-client/internal/testutils/helper.go +++ b/packages/taiko-client/internal/testutils/helper.go @@ -282,6 +282,50 @@ func SignatureFromRSV(r, s string, v byte) []byte { return append(append(hexutil.MustDecode(r), hexutil.MustDecode(s)...), v) } +func AssembleTestTx( + client *rpc.EthClient, + priv *ecdsa.PrivateKey, + nonce uint64, + to *common.Address, + value *big.Int, + data []byte, +) (*types.Transaction, error) { + head, err := client.HeaderByNumber(context.Background(), nil) + if err != nil { + return nil, err + } + + auth, err := bind.NewKeyedTransactorWithChainID(priv, client.ChainID) + if err != nil { + return nil, err + } + + gasTipCap, err := client.SuggestGasTipCap(context.Background()) + if err != nil { + return nil, err + } + + tx, err := auth.Signer(auth.From, types.NewTx(&types.DynamicFeeTx{ + To: to, + Nonce: nonce, + Value: value, + GasTipCap: gasTipCap, + GasFeeCap: new(big.Int).Add( + gasTipCap, + new(big.Int).Mul(head.BaseFee, big.NewInt(2)), + ), + Gas: 2100_000, + Data: data, + })) + if err != nil { + return nil, err + } + if err = client.SendTransaction(context.Background(), tx); err != nil { + return nil, err + } + return tx, nil +} + // SendDynamicFeeTx sends a dynamic transaction, used for tests. func SendDynamicFeeTx( client *rpc.EthClient, diff --git a/packages/taiko-client/package.json b/packages/taiko-client/package.json index 8a029b201d3..53409674e4f 100644 --- a/packages/taiko-client/package.json +++ b/packages/taiko-client/package.json @@ -1,5 +1,5 @@ { "name": "taiko-client", - "version": "0.38.0", + "version": "0.39.2", "private": true } diff --git a/packages/taiko-client/pkg/rpc/beaconclient.go b/packages/taiko-client/pkg/rpc/beaconclient.go index e907acf4608..acf70c86b79 100644 --- a/packages/taiko-client/pkg/rpc/beaconclient.go +++ b/packages/taiko-client/pkg/rpc/beaconclient.go @@ -9,6 +9,7 @@ import ( "time" "github.com/ethereum/go-ethereum/log" + "github.com/pkg/errors" "github.com/prysmaticlabs/prysm/v5/api/client" "github.com/prysmaticlabs/prysm/v5/api/client/beacon" "github.com/prysmaticlabs/prysm/v5/api/server/structs" @@ -18,6 +19,7 @@ var ( // Request urls. sidecarsRequestURL = "/eth/v1/beacon/blob_sidecars/%d" genesisRequestURL = "/eth/v1/beacon/genesis" + getConfigSpecPath = "/eth/v1/config/spec" ) type ConfigSpec struct { @@ -67,7 +69,7 @@ func NewBeaconClient(endpoint string, timeout time.Duration) (*BeaconClient, err log.Info("L1 genesis time", "time", genesisTime) // Get the seconds per slot. - spec, err := cli.GetConfigSpec(ctx) + spec, err := getConfigSpec(ctx, cli) if err != nil { return nil, err } @@ -111,3 +113,17 @@ func (c *BeaconClient) timeToSlot(timestamp uint64) (uint64, error) { } return (timestamp - c.genesisTime) / c.secondsPerSlot, nil } + +// getConfigSpec retrieve the current configs of the network used by the beacon node. +func getConfigSpec(ctx context.Context, c *beacon.Client) (*structs.GetSpecResponse, error) { + body, err := c.Get(ctx, c.BaseURL().Path+getConfigSpecPath) + if err != nil { + return nil, errors.Wrap(err, "error requesting configSpecPath") + } + fsr := &structs.GetSpecResponse{} + err = json.Unmarshal(body, fsr) + if err != nil { + return nil, err + } + return fsr, nil +} diff --git a/packages/taiko-client/proposer/proposer_test.go b/packages/taiko-client/proposer/proposer_test.go index 360e6217268..3f3d4e6ed3b 100644 --- a/packages/taiko-client/proposer/proposer_test.go +++ b/packages/taiko-client/proposer/proposer_test.go @@ -2,12 +2,16 @@ package proposer import ( "context" + "crypto/ecdsa" + "fmt" + "maps" "math/big" "os" "testing" "time" "github.com/ethereum-optimism/optimism/op-service/txmgr" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core/types" @@ -119,6 +123,112 @@ func (s *ProposerTestSuite) SetupTest() { s.cancel = cancel } +func (s *ProposerTestSuite) TestTxPoolContentWithMinTip() { + if os.Getenv("L2_NODE") == "l2_reth" { + s.T().Skip() + } + defer s.Nil(s.s.ProcessL1Blocks(context.Background())) + + privetKeyHexList := []string{ + "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d", // 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 + "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a", // 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC + "0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6", // 0x90F79bf6EB2c4f870365E785982E1f101E93b906 + "0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a", // 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 + "0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba", // 0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc + } + + var ( + p = s.p + privKeys []*ecdsa.PrivateKey + l2Cli = s.RPCClient.L2 + chainID = l2Cli.ChainID + ) + + for _, sk := range privetKeyHexList { + priv, err := crypto.ToECDSA(common.FromHex(sk)) + s.Nil(err) + privKeys = append(privKeys, priv) + } + + originNonces := make(map[common.Address]uint64) + for _, priv := range privKeys { + auth, err := bind.NewKeyedTransactorWithChainID(priv, chainID) + s.Nil(err) + nonce, err := l2Cli.PendingNonceAt(context.Background(), auth.From) + s.Nil(err) + originNonces[auth.From] = nonce + for i := 0; i < 300; i++ { + _, err = testutils.AssembleTestTx(s.RPCClient.L2, priv, nonce+uint64(i), &auth.From, big.NewInt(1), nil) + s.Nil(err) + } + } + + signer := types.LatestSignerForChainID(chainID) + for _, testCase := range []struct { + blockMaxGasLimit uint32 + blockMaxTxListBytes uint64 + maxTransactionsLists uint64 + + txLengthList []int + }{ + { + p.protocolConfigs.BlockMaxGasLimit, + rpc.BlockMaxTxListBytes, + p.MaxProposedTxListsPerEpoch, + []int{1500}, + }, + { + p.protocolConfigs.BlockMaxGasLimit, + rpc.BlockMaxTxListBytes, + p.MaxProposedTxListsPerEpoch * 5, + []int{1500}, + }, + { + p.protocolConfigs.BlockMaxGasLimit / 50, + rpc.BlockMaxTxListBytes, + 200, + []int{129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 81}, + }, + } { + res, err := s.RPCClient.GetPoolContent( + context.Background(), + p.proposerAddress, + testCase.blockMaxGasLimit, + testCase.blockMaxTxListBytes, + p.LocalAddresses, + testCase.maxTransactionsLists, + 0, + p.chainConfig, + ) + s.Nil(err) + + checkNonces := maps.Clone(originNonces) + // Make sure all the nonce are in order. + for _, txList := range res { + for _, tx := range txList.TxList { + sender, err := types.Sender(signer, tx) + s.Nil(err) + s.Equalf(checkNonces[sender], tx.Nonce(), + fmt.Sprintf("%s nonce check, expect: %d, actual: %d", + sender.String(), + checkNonces[sender], + tx.Nonce(), + )) + checkNonces[sender]++ + } + } + + s.GreaterOrEqual(int(testCase.maxTransactionsLists), len(res)) + for i, txsLen := range testCase.txLengthList { + s.Equal(txsLen, res[i].TxList.Len()) + s.GreaterOrEqual(uint64(testCase.blockMaxGasLimit), res[i].EstimatedGasUsed) + s.GreaterOrEqual(testCase.blockMaxTxListBytes, res[i].BytesLength) + } + } + + s.Nil(p.ProposeOp(context.Background())) +} + func (s *ProposerTestSuite) TestProposeTxLists() { p := s.p ctx := p.ctx @@ -171,6 +281,10 @@ func (s *ProposerTestSuite) TestProposeTxLists() { } func (s *ProposerTestSuite) TestProposeOpNoEmptyBlock() { + // TODO: Temporarily skip this test case when using l2_reth node. + if os.Getenv("L2_NODE") == "l2_reth" { + s.T().Skip() + } defer s.Nil(s.s.ProcessL1Blocks(context.Background())) p := s.p diff --git a/packages/taiko-client/scripts/gen_bindings.sh b/packages/taiko-client/scripts/gen_bindings.sh index 8a527663d7a..6848dde2e5c 100755 --- a/packages/taiko-client/scripts/gen_bindings.sh +++ b/packages/taiko-client/scripts/gen_bindings.sh @@ -66,7 +66,7 @@ cat ../protocol/out/layer1/ProverSet.sol/ProverSet.json | jq .abi | ${ABIGEN_BIN} --abi - --type ProverSet --pkg bindings --out $DIR/../bindings/gen_prover_set.go -cat ../protocol/out/layer1/DevnetTierProvider.sol/DevnetTierProvider.json | +cat ../protocol/out/layer1/MainnetTierRouter.sol/MainnetTierRouter.json | jq .abi | ${ABIGEN_BIN} --abi - --type TierProvider --pkg bindings --out $DIR/../bindings/gen_tier_provider.go diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d706304da68..a2afee63b23 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,10 +24,10 @@ importers: version: 2.26.2(debug@4.3.4) '@wagmi/connectors': specifier: ^4.3.1 - version: 4.3.10(yrxxgsr3s6m7a4itnzsb2c7inm) + version: 4.3.10(vnbhrjghrun7rfuxsawo7otej4) '@wagmi/core': specifier: ^2.8.1 - version: 2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) + version: 2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) '@walletconnect/ethereum-provider': specifier: ^2.12.2 version: 2.12.2(@react-native-async-storage/async-storage@1.22.0(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10)))(@types/react@18.3.5)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10) @@ -36,7 +36,7 @@ importers: version: 2.6.2(@types/react@18.3.5)(react@18.2.0) '@web3modal/wagmi': specifier: ^4.1.11 - version: 4.1.11(@types/react@18.3.5)(@wagmi/connectors@4.3.10(yrxxgsr3s6m7a4itnzsb2c7inm))(@wagmi/core@2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4)) + version: 4.1.11(@types/react@18.3.5)(@wagmi/connectors@4.3.10(vnbhrjghrun7rfuxsawo7otej4))(@wagmi/core@2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8)) '@zerodevx/svelte-toast': specifier: ^0.9.5 version: 0.9.5(svelte@4.2.17) @@ -63,7 +63,7 @@ importers: version: 4.0.0(svelte@4.2.17) viem: specifier: ^2.9.29 - version: 2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) + version: 2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) devDependencies: '@playwright/test': specifier: ^1.43.1 @@ -97,7 +97,7 @@ importers: version: 2.1.4(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10) abitype: specifier: ^1.0.2 - version: 1.0.2(typescript@5.4.3)(zod@3.22.4) + version: 1.0.2(typescript@5.4.3)(zod@3.23.8) ajv: specifier: ^8.12.0 version: 8.12.0 @@ -437,14 +437,14 @@ importers: specifier: github:taikoxyz/p256-verifier#v0.1.0 version: p256-verifier#v0.1.0@https://codeload.github.com/taikoxyz/p256-verifier/tar.gz/6ef45b117642786b08a37b4c37c6a6ce151166da risc0-ethereum: - specifier: github:risc0/risc0-ethereum#v1.0.0 - version: risc0-ethereum#v1.0.0@https://codeload.github.com/risc0/risc0-ethereum/tar.gz/5fbbc7cb44ab37ce438c14c087ba6c4e0a669900 + specifier: github:risc0/risc0-ethereum#v1.1.2 + version: risc0-ethereum#v1.1.2@https://codeload.github.com/risc0/risc0-ethereum/tar.gz/b8a14213d92fff07dacda993804e7edb7946ca58 solady: specifier: github:Vectorized/solady#v0.0.231 version: https://codeload.github.com/Vectorized/solady/tar.gz/a12a2575c899a328c1bafdada632dabbff27cf6b sp1-contracts: - specifier: github:succinctlabs/sp1-contracts#v2.0.0 - version: sp1-contracts#v2.0.0@https://codeload.github.com/succinctlabs/sp1-contracts/tar.gz/af1ae093ef8a8f68b022aa8f0f7ad9ffd94aa6fb + specifier: github:succinctlabs/sp1-contracts#v3.0.0-rc3 + version: sp1-contracts#v3.0.0-rc3@https://codeload.github.com/succinctlabs/sp1-contracts/tar.gz/a6f13bf51f02ee8ef99234ce0d77c153ed98e4be devDependencies: '@types/node': specifier: ^20.11.30 @@ -733,10 +733,10 @@ importers: version: 2.1.4(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10) '@wagmi/connectors': specifier: ^4.1.18 - version: 4.1.18(@react-native-async-storage/async-storage@1.22.0(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10)))(@types/react@18.3.5)(@wagmi/core@2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10))(react@18.2.0)(rollup@4.21.3)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + version: 4.1.18(@react-native-async-storage/async-storage@1.22.0(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10)))(@types/react@18.3.5)(@wagmi/core@2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10))(react@18.2.0)(rollup@4.21.3)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) '@wagmi/core': specifier: ^2.8.0 - version: 2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + version: 2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) '@web3modal/common': specifier: ^5.0.11 version: 5.1.8 @@ -745,7 +745,7 @@ importers: version: 4.1.11 '@web3modal/wagmi': specifier: ^4.1.1 - version: 4.1.11(xgqwdfny5esqdjztzawvofqbai) + version: 4.1.11(7bejpi3a2bqeihrssz3xbwxki4) '@zerodevx/svelte-toast': specifier: ^0.9.5 version: 0.9.5(svelte@4.2.13) @@ -772,7 +772,7 @@ importers: version: 3.4.3(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.3)) viem: specifier: ^2.15.1 - version: 2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) + version: 2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) devDependencies: '@chromatic-com/storybook': specifier: ^1.3.1 @@ -10819,8 +10819,8 @@ packages: ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - risc0-ethereum#v1.0.0@https://codeload.github.com/risc0/risc0-ethereum/tar.gz/5fbbc7cb44ab37ce438c14c087ba6c4e0a669900: - resolution: {tarball: https://codeload.github.com/risc0/risc0-ethereum/tar.gz/5fbbc7cb44ab37ce438c14c087ba6c4e0a669900} + risc0-ethereum#v1.1.2@https://codeload.github.com/risc0/risc0-ethereum/tar.gz/b8a14213d92fff07dacda993804e7edb7946ca58: + resolution: {tarball: https://codeload.github.com/risc0/risc0-ethereum/tar.gz/b8a14213d92fff07dacda993804e7edb7946ca58} version: 0.0.0 rlp@2.2.7: @@ -11146,8 +11146,8 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - sp1-contracts#v2.0.0@https://codeload.github.com/succinctlabs/sp1-contracts/tar.gz/af1ae093ef8a8f68b022aa8f0f7ad9ffd94aa6fb: - resolution: {tarball: https://codeload.github.com/succinctlabs/sp1-contracts/tar.gz/af1ae093ef8a8f68b022aa8f0f7ad9ffd94aa6fb} + sp1-contracts#v3.0.0-rc3@https://codeload.github.com/succinctlabs/sp1-contracts/tar.gz/a6f13bf51f02ee8ef99234ce0d77c153ed98e4be: + resolution: {tarball: https://codeload.github.com/succinctlabs/sp1-contracts/tar.gz/a6f13bf51f02ee8ef99234ce0d77c153ed98e4be} version: 0.0.0 space-separated-tokens@2.0.2: @@ -13097,8 +13097,8 @@ snapshots: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0 - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-bucket-endpoint': 3.577.0 @@ -13155,11 +13155,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.577.0': + '@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -13198,6 +13198,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: + - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.577.0': @@ -13243,11 +13244,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': + '@aws-sdk/client-sts@3.577.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -13286,7 +13287,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/core@3.576.0': @@ -13320,7 +13320,7 @@ snapshots: '@aws-sdk/credential-provider-ini@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/credential-provider-env': 3.577.0 '@aws-sdk/credential-provider-process': 3.577.0 '@aws-sdk/credential-provider-sso': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) @@ -13377,7 +13377,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/types': 3.0.0 @@ -13504,7 +13504,7 @@ snapshots: '@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/shared-ini-file-loader': 3.0.0 @@ -19102,16 +19102,16 @@ snapshots: - bufferutil - utf-8-validate - '@wagmi/connectors@4.1.18(@react-native-async-storage/async-storage@1.22.0(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10)))(@types/react@18.3.5)(@wagmi/core@2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10))(react@18.2.0)(rollup@4.21.3)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + '@wagmi/connectors@4.1.18(@react-native-async-storage/async-storage@1.22.0(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10)))(@types/react@18.3.5)(@wagmi/core@2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10))(react@18.2.0)(rollup@4.21.3)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4)': dependencies: '@coinbase/wallet-sdk': 3.9.1 '@metamask/sdk': 0.14.3(@types/react@18.3.5)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10))(react@18.2.0)(rollup@4.21.3)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.1(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) - '@safe-global/safe-apps-sdk': 8.1.0(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) - '@wagmi/core': 2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + '@safe-global/safe-apps-provider': 0.18.1(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@safe-global/safe-apps-sdk': 8.1.0(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@wagmi/core': 2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) '@walletconnect/ethereum-provider': 2.11.2(@react-native-async-storage/async-storage@1.22.0(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10)))(@types/react@18.3.5)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10) '@walletconnect/modal': 2.6.2(@types/react@18.3.5)(react@18.2.0) - viem: 2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) optionalDependencies: typescript: 5.4.3 transitivePeerDependencies: @@ -19138,16 +19138,16 @@ snapshots: - utf-8-validate - zod - '@wagmi/connectors@4.3.10(yrxxgsr3s6m7a4itnzsb2c7inm)': + '@wagmi/connectors@4.3.10(vnbhrjghrun7rfuxsawo7otej4)': dependencies: '@coinbase/wallet-sdk': 3.9.1 '@metamask/sdk': 0.20.3(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10))(react@18.2.0))(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10))(react@18.2.0)(rollup@4.21.3)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.1(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) - '@safe-global/safe-apps-sdk': 8.1.0(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) - '@wagmi/core': 2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) + '@safe-global/safe-apps-provider': 0.18.1(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) + '@safe-global/safe-apps-sdk': 8.1.0(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) + '@wagmi/core': 2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) '@walletconnect/ethereum-provider': 2.13.0(@react-native-async-storage/async-storage@1.22.0(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10)))(@types/react@18.3.5)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10) '@walletconnect/modal': 2.6.2(@types/react@18.3.5)(react@18.2.0) - viem: 2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) optionalDependencies: typescript: 5.4.3 transitivePeerDependencies: @@ -19212,11 +19212,11 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4)': + '@wagmi/core@2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': dependencies: eventemitter3: 5.0.1 - mipd: 0.0.5(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) - viem: 2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) + mipd: 0.0.5(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) zustand: 4.4.1(@types/react@18.3.5)(react@18.2.0) optionalDependencies: typescript: 5.4.3 @@ -19241,11 +19241,11 @@ snapshots: - immer - react - '@wagmi/core@2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + '@wagmi/core@2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4)': dependencies: eventemitter3: 5.0.1 - mipd: 0.0.5(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) - viem: 2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) + mipd: 0.0.5(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) zustand: 4.4.1(@types/react@18.3.5)(react@18.2.0) optionalDependencies: typescript: 5.4.3 @@ -20415,34 +20415,34 @@ snapshots: lit: 3.1.0 qrcode: 1.5.3 - '@web3modal/wagmi@4.1.11(@types/react@18.3.5)(@wagmi/connectors@4.3.10(yrxxgsr3s6m7a4itnzsb2c7inm))(@wagmi/core@2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))': + '@web3modal/wagmi@4.1.11(7bejpi3a2bqeihrssz3xbwxki4)': dependencies: - '@wagmi/connectors': 4.3.10(yrxxgsr3s6m7a4itnzsb2c7inm) - '@wagmi/core': 2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) + '@wagmi/connectors': 4.1.18(@react-native-async-storage/async-storage@1.22.0(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10)))(@types/react@18.3.5)(@wagmi/core@2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10))(react@18.2.0)(rollup@4.21.3)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) + '@wagmi/core': 2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) '@web3modal/polyfills': 4.1.11 '@web3modal/scaffold': 4.1.11(@types/react@18.3.5)(react@18.2.0) '@web3modal/scaffold-react': 4.1.11(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@web3modal/scaffold-utils': 4.1.11(@types/react@18.3.5)(react@18.2.0) '@web3modal/scaffold-vue': 4.1.11(@types/react@18.3.5)(react@18.2.0) '@web3modal/siwe': 4.1.11(@types/react@18.3.5)(react@18.2.0) - viem: 2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4) optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@types/react' - '@web3modal/wagmi@4.1.11(xgqwdfny5esqdjztzawvofqbai)': + '@web3modal/wagmi@4.1.11(@types/react@18.3.5)(@wagmi/connectors@4.3.10(vnbhrjghrun7rfuxsawo7otej4))(@wagmi/core@2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))': dependencies: - '@wagmi/connectors': 4.1.18(@react-native-async-storage/async-storage@1.22.0(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10)))(@types/react@18.3.5)(@wagmi/core@2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8))(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.4(@babel/core@7.25.2)(@babel/preset-env@7.23.9(@babel/core@7.25.2))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.2.0)(utf-8-validate@5.0.10))(react@18.2.0)(rollup@4.21.3)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) - '@wagmi/core': 2.8.0(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + '@wagmi/connectors': 4.3.10(vnbhrjghrun7rfuxsawo7otej4) + '@wagmi/core': 2.10.2(@types/react@18.3.5)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.4.3)(utf-8-validate@5.0.10)(viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) '@web3modal/polyfills': 4.1.11 '@web3modal/scaffold': 4.1.11(@types/react@18.3.5)(react@18.2.0) '@web3modal/scaffold-react': 4.1.11(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@web3modal/scaffold-utils': 4.1.11(@types/react@18.3.5)(react@18.2.0) '@web3modal/scaffold-vue': 4.1.11(@types/react@18.3.5)(react@18.2.0) '@web3modal/siwe': 4.1.11(@types/react@18.3.5)(react@18.2.0) - viem: 2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8) optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -20528,15 +20528,15 @@ snapshots: typescript: 5.4.3 zod: 3.23.8 - abitype@1.0.2(typescript@5.4.3)(zod@3.22.4): + abitype@1.0.2(typescript@5.4.3)(zod@3.23.8): optionalDependencies: typescript: 5.4.3 - zod: 3.22.4 + zod: 3.23.8 - abitype@1.0.5(typescript@5.4.3)(zod@3.23.8): + abitype@1.0.5(typescript@5.4.3)(zod@3.22.4): optionalDependencies: typescript: 5.4.3 - zod: 3.23.8 + zod: 3.22.4 abitype@1.0.5(typescript@5.4.5)(zod@3.23.8): optionalDependencies: @@ -27340,7 +27340,7 @@ snapshots: hash-base: 3.1.0 inherits: 2.0.4 - risc0-ethereum#v1.0.0@https://codeload.github.com/risc0/risc0-ethereum/tar.gz/5fbbc7cb44ab37ce438c14c087ba6c4e0a669900: {} + risc0-ethereum#v1.1.2@https://codeload.github.com/risc0/risc0-ethereum/tar.gz/b8a14213d92fff07dacda993804e7edb7946ca58: {} rlp@2.2.7: dependencies: @@ -27863,7 +27863,7 @@ snapshots: source-map@0.7.4: {} - sp1-contracts#v2.0.0@https://codeload.github.com/succinctlabs/sp1-contracts/tar.gz/af1ae093ef8a8f68b022aa8f0f7ad9ffd94aa6fb: {} + sp1-contracts#v3.0.0-rc3@https://codeload.github.com/succinctlabs/sp1-contracts/tar.gz/a6f13bf51f02ee8ef99234ce0d77c153ed98e4be: {} space-separated-tokens@2.0.2: {} @@ -29070,14 +29070,14 @@ snapshots: - utf-8-validate - zod - viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8): + viem@2.21.7(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 '@scure/bip32': 1.4.0 '@scure/bip39': 1.4.0 - abitype: 1.0.5(typescript@5.4.3)(zod@3.23.8) + abitype: 1.0.5(typescript@5.4.3)(zod@3.22.4) isows: 1.0.4(ws@8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) webauthn-p256: 0.0.5 ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -29123,6 +29123,23 @@ snapshots: - utf-8-validate - zod + viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@5.0.10)(zod@3.23.8): + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 1.0.0(typescript@5.4.3)(zod@3.23.8) + isows: 1.0.3(ws@8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + ws: 8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.4.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + viem@2.9.29(bufferutil@4.0.8)(typescript@5.4.3)(utf-8-validate@6.0.3)(zod@3.23.8): dependencies: '@adraffy/ens-normalize': 1.10.0