Skip to content

Commit

Permalink
feat(protocol): update ric0 & sp1 verification contract (#18269)
Browse files Browse the repository at this point in the history
Co-authored-by: Gavin Yu <[email protected]>
Co-authored-by: YoGhurt111 <[email protected]>
  • Loading branch information
3 people authored Oct 21, 2024
1 parent 94d0dfb commit 684a909
Show file tree
Hide file tree
Showing 9 changed files with 149 additions and 84 deletions.
4 changes: 2 additions & 2 deletions packages/protocol/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
6 changes: 3 additions & 3 deletions packages/protocol/script/layer1/DeployProtocolOnL1.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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",
Expand Down
6 changes: 3 additions & 3 deletions packages/protocol/script/layer1/DeploySP1Verifier.s.sol
Original file line number Diff line number Diff line change
@@ -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";

Expand All @@ -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",
Expand Down
21 changes: 21 additions & 0 deletions packages/protocol/script/layer1/UpdateRisc0Verifier.s.sol
Original file line number Diff line number Diff line change
@@ -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();
}
}
23 changes: 23 additions & 0 deletions packages/protocol/script/layer1/UpdateSP1Verifier.s.sol
Original file line number Diff line number Diff line change
@@ -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();
}
}
5 changes: 5 additions & 0 deletions packages/protocol/script/layer1/config_dcap_sgx_verifier.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ contract RiscZeroGroth16VerifierTest is TaikoL1TestBase {
);

rv.setImageIdTrusted(
bytes32(0x4f6beb0c538971a81491c22de3995c82e6fd7938d5090366d7b618d5f6df504d), true
bytes32(0x7669d1059d0dfa9537c2b3581569b8bc244495e6c406d07dea628bc8cf480392), true
);
}

Expand All @@ -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);

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -145,7 +145,7 @@ contract RiscZeroGroth16VerifierTest is TaikoL1TestBase {
});

bytes memory seal =
hex"310fe59810425afc4ed2bae56dfd76e9045f6cd41da30ae8f07a239e86fdb157bf37b0f51b937cb8deccab0d201623d530d0800c208f66dad3f6a38bc1df34408994dec1179209a5f94411e015b20e723512150cfb7e295debeb7ef4f8186cddcf19ba6527ee0d2a0fb8825568682a2fe48e2f73fe9fa052379824751c3bd3f1353f44fe1857e07f5b4801846637b68eafb93aba0c8de8fdfffc76af62a513966f92d9750a977bce0568eb7438fa3497848bfce3e5fd815d9c24b4600e12d0d405d1fd76301ccf27547bddd49a2fa12d1a414f49c2030d0cdf29a87684964a171eefb7e82a5f86acbaacd8cd24d6c3bab06a568f4869087e825ee79237770f23315f3c5c";
hex"50bd176901a68e3f05b0e651b6e5ff18e5463be794699597908b42b9ac3195a464c2b67320fb89c8199909a5ef1ff32366d1047009f4758294090f4ce613129f64a9ff58109cf0f6cb0f22e194dab522a2938631b138f4afeb075117a05d1ad75093515e15de11d9b231b79be5d42b0c7921ba22d62a6594258745f3e5c2e10508741fd813581ea8fab28ee1d07cb1f2e84500e2993cff3ca2e37284cfb5cfec5fe301d92f4246b2dbffc17d2ef5d889f50b8f28c51d1bacd6b0c55399e574969bb0a77207ceda541460cfec3e0c315889d62c0c91c5cf0cecd515ada96712735e5cf0ea1664af11012004ba7cb6adea3751911c8afe5eb5979b1adf43da6f9c18837f3d";
// TierProof
TaikoData.TierProof memory proof = TaikoData.TierProof({
tier: 100,
Expand Down
21 changes: 10 additions & 11 deletions packages/protocol/test/layer1/verifiers/SP1PlonkVerifier.t.sol
Original file line number Diff line number Diff line change
@@ -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: "" })));
Expand All @@ -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
Expand All @@ -29,7 +29,7 @@ contract SP1PlonkVerifierTest is TaikoL1TestBase {
);

sp1.setProgramTrusted(
bytes32(0x00851c6ce0153ea4f7a6b8f9923ae1ad15d47476925777f4375d1a4b13137231), true
bytes32(0x00b6e596137c781eb0d53073d86d8a7ab56cffc5b5f04b5297ef2e62ac0c56bf), true
);
}

Expand All @@ -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 =
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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()`
Expand Down
Loading

0 comments on commit 684a909

Please sign in to comment.