From 03089eaeee1193ff44c532c7038611ae123e7ef3 Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 18 Dec 2023 13:12:43 +0800 Subject: [PATCH] fix (contracts): update verifier contract to mainnet version `v0.9.8` (#1049) --- .../integration-test/ZkEvmVerifierV1.spec.ts | 40 ++---------------- .../testdata/plonk_verifier_0.5.1_pi.data | Bin 1024 -> 0 bytes .../testdata/plonk_verifier_0.5.1_proof.data | Bin 2624 -> 0 bytes .../testdata/plonk_verifier_0.9.8_pi.data | Bin 0 -> 1024 bytes .../testdata/plonk_verifier_0.9.8_proof.data | Bin 0 -> 1760 bytes .../plonk-verifier/plonk_verifier_0.5.1.bin | Bin 21783 -> 0 bytes .../plonk-verifier/plonk_verifier_0.9.8.bin | Bin 0 -> 18047 bytes 7 files changed, 4 insertions(+), 36 deletions(-) delete mode 100644 contracts/integration-test/testdata/plonk_verifier_0.5.1_pi.data delete mode 100644 contracts/integration-test/testdata/plonk_verifier_0.5.1_proof.data create mode 100644 contracts/integration-test/testdata/plonk_verifier_0.9.8_pi.data create mode 100644 contracts/integration-test/testdata/plonk_verifier_0.9.8_proof.data delete mode 100644 contracts/src/libraries/verifier/plonk-verifier/plonk_verifier_0.5.1.bin create mode 100644 contracts/src/libraries/verifier/plonk-verifier/plonk_verifier_0.9.8.bin diff --git a/contracts/integration-test/ZkEvmVerifierV1.spec.ts b/contracts/integration-test/ZkEvmVerifierV1.spec.ts index 4258ac4565..d070b62e6c 100644 --- a/contracts/integration-test/ZkEvmVerifierV1.spec.ts +++ b/contracts/integration-test/ZkEvmVerifierV1.spec.ts @@ -15,7 +15,7 @@ describe("ZkEvmVerifierV1", async () => { beforeEach(async () => { [deployer] = await ethers.getSigners(); - const bytecode = hexlify(fs.readFileSync("./src/libraries/verifier/plonk-verifier/plonk_verifier_0.5.1.bin")); + const bytecode = hexlify(fs.readFileSync("./src/libraries/verifier/plonk-verifier/plonk_verifier_0.9.8.bin")); const tx = await deployer.sendTransaction({ data: bytecode }); const receipt = await tx.wait(); @@ -25,47 +25,15 @@ describe("ZkEvmVerifierV1", async () => { }); it("should succeed", async () => { - const proof = hexlify(fs.readFileSync("./integration-test/testdata/plonk_verifier_0.5.1_proof.data")); - const instances = fs.readFileSync("./integration-test/testdata/plonk_verifier_0.5.1_pi.data"); + const proof = hexlify(fs.readFileSync("./integration-test/testdata/plonk_verifier_0.9.8_proof.data")); + const instances = fs.readFileSync("./integration-test/testdata/plonk_verifier_0.9.8_pi.data"); const publicInputHash = new Uint8Array(32); for (let i = 0; i < 32; i++) { publicInputHash[i] = instances[i * 32 + 31]; } - // chunk1: https://github.com/scroll-tech/test-traces/blob/674ad743beab04b57da369fa5958fb6824155bfe/erc20/1_transfer.json - // 0000000000000005 blockNumber - // 0000000064c3ca7c timestamp - // 0000000000000000000000000000000000000000000000000000000000000000 baseFee - // 00000000007a1200 gasLimit - // 0001 numTransactions - // 8da3fedb103b6da8ccc2514094336d1a76df166238f4d8e8558fbe54cce2516a tx hash 0 - // chunk2: https://github.com/scroll-tech/test-traces/blob/674ad743beab04b57da369fa5958fb6824155bfe/erc20/10_transfer.json - // 0000000000000006 blockNumber - // 0000000064c3ca7f timestamp - // 0000000000000000000000000000000000000000000000000000000000000000 baseFee - // 00000000007a1200 gasLimit - // 000a numTransactions - // 419164c1a7213e4e52f8578463c47a01549f69a7ff220d93221ce02909f5b919 tx hash 0 - // 6c1b03d1a9b5156e189ad2e7ba73ba71d9a83b24f9830f38dd7a597fe1e67167 tx hash 1 - // 94f981938d02b2c1d91ff370b3ed759dadc617c7347cd4b8552b275edbffd767 tx hash 2 - // bfe98147fc808a916bdff90e838e77609fd59634787443f6fc58f9a371790d09 tx hash 3 - // beb9dd0259e7c4f0a8d5ac3ba6aa3940c3e53947395f64e8ee88c7067c6d210e tx hash 4 - // 208c6c767356552ad8085fa77a99d9154e0c8cf8777e329cb76bcbc969d21fca tx hash 5 - // 37c8969833fbc6cbb88a63ccef324d7b42d0607ac0094f14e1f6d4e50f84d87f tx hash 6 - // 088c5ad45a990694ac783207fe6bda9bf97da40e1f3eb468c73941d51b99932c tx hash 7 - // c3d8ddbdfc67877a253255b9357aabfd062ce80d39eba67547f964c288660065 tx hash 8 - // ff26ca52c02b97b1a6677263d5d6dec0321fb7b49be44ae0a66ba5482b1180b4 tx hash 9 - // => chunk 0 data hash: 9390886a7d22aa43aae87e62a350c904fabc5db4487d9b25bdca446ba7ed15a1 - // => chunk 1 data hash: a8846bf9bc53f30a391ae452b5fd456cb86a99ab7bd2e1e47898ffbe3509e8eb - // => batch data hash: ee64d77c2f2e0b2c4ac952a0f54fdba4a217c42eb26a07b28de9fbc7b009acae - // 000000000000cf55 layer2ChainId - // 02040e949809e8d2e56d35b4dfb876e08ee7b4608d22f23f52052425857c31ba prevStateRoot - // 1532cdb7732da0a4ca3044914c6959b7e2b7ba4e913a9f5f0b55051e467412d9 postStateRoot - // 0000000000000000000000000000000000000000000000000000000000000000 withdrawRoot - // ee64d77c2f2e0b2c4ac952a0f54fdba4a217c42eb26a07b28de9fbc7b009acae batchDataHash - // public input hash: 9ea439164727042e029464a40901e52800095c1ade301b63b4b7453880f5723e - expect(hexlify(publicInputHash)).to.eq("0x9ea439164727042e029464a40901e52800095c1ade301b63b4b7453880f5723e"); + expect(hexlify(publicInputHash)).to.eq("0x31b430667bc9e8a8b7eda5e5c76f2250c64023f5f8e0689ac9f4e53f5362da66"); // verify ok await zkEvmVerifier.verify(proof, publicInputHash); diff --git a/contracts/integration-test/testdata/plonk_verifier_0.5.1_pi.data b/contracts/integration-test/testdata/plonk_verifier_0.5.1_pi.data deleted file mode 100644 index 2911414890110c3e703d7490fba0cdbf5dec8fa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmajbu@OX26a~=FY@z`H1rQk_$!10qGFyQP6d@KV!HjNXN|0{{|Gf0fy>sV<5WPLB zAsp}?p2J6Y1^>VscnaU(Ke+yvA)mk>cnue8--Ln!e#2XM37_F7{DKeg4!*))_yYg_ E0V|sd{{R30 diff --git a/contracts/integration-test/testdata/plonk_verifier_0.5.1_proof.data b/contracts/integration-test/testdata/plonk_verifier_0.5.1_proof.data deleted file mode 100644 index ceb41082490564830651d67b642d2bb15540350f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2624 zcmZwGc{~#g7zgleh&du7*K!|ij!hC7a}+|DBXUy;MU1zXGR9mvqL^E=lFAig?qfvm zQrS$+5iiPp<;eB^*I#@7`hA}7=l9?9001lowyq8N$u!Hx`@mT!0I)IegrG<|C9W=Z zz|sK{=dpILoVz;C2e5Q=g~<5g*erh_gmvHjrm~kjTJS0{=M&35fagN+r&jEzclr%1 zz1TG;?{uFeY+w2-OQ*SNlUCPFLq^%_SvmmryS2>0DZO@KlBNIP);JNMJehlQsG6lC zC4JXZ*sgnA@+e~I0BBBM`~#5y@T==5EW1SNA!t5ZNTScNA zyT1b7pESPoAE)}dZ1OejhouS2O0-h?>^b4ciyk8TzB0EE(^h=<)5_Rl{#f?yxyP6k zMHTS10YC%IBx;o^ddfxg=}=TrV{@yrch%u)Ke+Mp`eC}~)M{)^-8^~fQnJGt#!$C$ z_tG^EGt674LyuS1(ZwPFhe)6OxU?0m+%ZV8l&?_(MGK5)eh>PFR`Nf^~!=h6eC*Va&t6wjhv zZ>bpY6_q?4;yad}ic$6DGrO(Pr43CvqdpsEBXXzmhabDx(u!ti3K-$r8&R#~6y@Q5+ssz>Lk7r@vS`tGH*)99_mLk0c-6qb-M!EzWwcZC=d4 zTaVq+tPBmoj6LP%<_DP7HCntj6~(E({>TolOK=nq5K)%SP85fyi}C2^aLpES4#cJY zG8rmpLp{6`&n`vcup1CB|6N`Hl>5V!1-mW|YB|OVk+QMP?il|2}h8e95L(JZV|cWLh&emJjCz zj^MPE5L{j|;1{_6xqdhrnp<%P=v#QIermH*ly=Y(bwg~zFTVsV$#DYz(T4C%;L3e^ zHcjEZ;5Xr`Hs$t3I~KRf#i%GowBF7GjThDz)g0$e$jl~+k~gsW*J%t=%fqrW+j}+P zo$Mog9pn7m>>K5E$pJW`)sva-M4lIn`XV;-HRKAMTh%`4V0eoH)q4)~8T*u|d*yT> zMlu8Ryml!9wwfHkL<`4B)~I0B`W~?%az$ zXd96g(=!M9`B~ok=IDis?*Lr-uQwXw(H)syUuBiJXxi?=hg@w&j+I)=&% zEl&!)<}8xHZ^Jp7XM_mL#n|f(hf9q4G=@A>2F1IVt&Y55%Y2c#hf*QjmoUampqN-W z*k*g^KmGZXo6Oaust+=q>IfGGhho*}?WN8szGH%2SFJ93M#x- zUZ96t=du1MUfn_SO^{7U)b0;LZbns{VS{R(S}1Qm$5~i4MZzp2^0LMe9;c)Wni)*B z4+J4nt})V|jmh_90zPffrAA^Gw=<6sv3Ka00GM4j&3taMJ?pFWwkva5dH17~QdE>i zOT{x44Er9o>pfVZsQ5|iBdBs-f{Pv^CUDFGsI{e%Q`)R*n zLm1~7*-r1V)xOyka2TaP{mMuFU!oZcV}wBCZKR)T!~kQ7eb6P}&316w3b$_&df&Nc z1)*8%R{Ds)tkhWjuw`=?=qZS4ZAboVBWry($Uw<^#B|%PDPo;ypHt`3K!2Cbd8N|V z6kzY;awkWHs3mzmrK=7oYK5H~EHqdsrPhec9_57j3oL-i;%K`U=~9Ir)jNxX1eqFU zlWu2PX*2l*_2C-o4{XLmsuVr#PkncQQ+>q^JL7UnS)&0hf7Aw~kPWue`fp3z;KU!} zo=97@ZGANv{8nL)6&eZt;4;J2l1;`pCwA}oNo@=Do`)pNbH5hrLD*WW^!I4ybTWBj z##DcUOSViV?C*y%FGCA$sfq9RgetGAUQ?_}<%*INF0CcvKnJR8o<)gTUlNZf9C~9M vy@9UHTD${x$UvS~DaH8f7Rk$vX4SUh&c~v{8svRMPC5Og{DqGBs-OP@6|q=9 diff --git a/contracts/integration-test/testdata/plonk_verifier_0.9.8_pi.data b/contracts/integration-test/testdata/plonk_verifier_0.9.8_pi.data new file mode 100644 index 0000000000000000000000000000000000000000..c941d525b5ab237c22326eca9307fe768903e53e GIT binary patch literal 1024 zcmajdu?p-|D0FY9k zHO`FRxQ13q=IQ{Yoqg4!h{6i5bz%K9*?^5a$;ua$(@eY1Wy=qiPipDTl75zh9K8PF_Jhw?eo!`9IQN zh-sc5mgv*|L47ug09)GRcBo~qI!J1l+>!O{m3xcZ$)jMkjw-4@I=fWhz#;@F^t+pv z`;d{mjMJteNyE5&F>&EUZlZzjT2B{H2_+N~h$Ie?tK zhwZU`5`TL$IrJ@-O{7nUcO!(Uu$hiMxn+syn@*QNcT)@a)v;y({xO5>tq`DhXMDN^ zAeR%K$u`*-x*;yph|a&IWZ-%;RrLcDHvwLTHtJe2@)WMpg2G(UqL*2^nNhyLszB*^ zld1mD!Gu2=>{1J9)K957&_Tp}Oj~UttaSyMyXa6G-PDojk&DOoO|?xe1a;tpb@Gtr z7bzK$qRvRHNNf6}KnMo$V#Kc;ic_Se?-!KOW1(Sj?OEHl%EDWB9ZcWrxnC?9tTZCW zyWL6ud?t}D8jVb|ie%H0MI?Vg*Pg8N3Z9_Jo@;9o(;NIu4=G=@QPu^UMam+XqbB9B ziW@ZmX?!;ZXNM`M%iP*1Q2TTYsws@JJxo)!k=G%$VO2Zv@#!gbL}z+4zByC{NvrcX zR;ud#^J>JJH019EJL-QoDNU|(KH_wO432PnW~vWjesFz3>EzHySrIVmDAe7mP^^3E zV=c$fhl#7pzv@A62DZaXzb*Bg%d~4v)~|Da-2Z?sKGwg*GY~kJC%)vpnG{3rg_N9C zHMrWGuhTepxI#LcD7oYhx!u1*>Pm^b21&3lt1jK+{uV#GK$z&jF2~ZX5~DF(QD;#@ z4W?!WYBvREom&*!+?E~?<-y)3+A*=>c?}X7J+77{FWyT}pU??p$Ls-%5o19h6sc0r z*wYQy6q}Y*>C-^W<(OE$l&-{;``yz^FN(2;v52LGRY$4aK30-mF{A;J!voL{%mbFMA#o)Hi+VDPnS!%4Di+m8GeQ=QvwCY$!q9g_tx3eV NnT?QUw*XN-?|=Bys#5>} literal 0 HcmV?d00001 diff --git a/contracts/src/libraries/verifier/plonk-verifier/plonk_verifier_0.5.1.bin b/contracts/src/libraries/verifier/plonk-verifier/plonk_verifier_0.5.1.bin deleted file mode 100644 index a5dd9fb072dfb4058b82b19bbc480493f603d191..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21783 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