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