diff --git a/prover/src/proof/proof_v2.rs b/prover/src/proof/proof_v2.rs index 7101098197..e54de279b6 100644 --- a/prover/src/proof/proof_v2.rs +++ b/prover/src/proof/proof_v2.rs @@ -223,8 +223,7 @@ impl BundleProofV2 { /// [ public_input_bytes | accumulator_bytes | proof ] pub fn calldata(&self) -> Vec { std::iter::empty() - .chain(self.instances[ACCUMULATOR_BYTES..].iter()) - .chain(self.instances[0..ACCUMULATOR_BYTES].iter()) + .chain(self.instances.iter()) .chain(self.proof.iter()) .cloned() .collect::>() @@ -347,13 +346,35 @@ impl Proof for BundleProofV2Metadata { mod tests { use tempdir::TempDir; - use crate::{read_json, BundleProofV2, EvmProof}; + use crate::{deploy_and_call, read, read_json, BundleProofV2, EvmProof}; #[test] - fn serde_bundle_proof() -> anyhow::Result<()> { + fn bundle_proof_backwards_compat() -> anyhow::Result<()> { // Read [`EvmProof`] from test data. let evm_proof = read_json::<_, EvmProof>("test_data/evm-proof.json")?; + // Build bundle proofs. + let bundle_proof_v2 = BundleProofV2::new_from_raw( + &evm_proof.proof.proof, + &evm_proof.proof.instances, + &evm_proof.proof.vk, + )?; + let bundle_proof = crate::BundleProof::from(evm_proof.proof); + + assert_eq!(bundle_proof.calldata(), bundle_proof_v2.calldata()); + + Ok(()) + } + + #[test] + fn verify_bundle_proof() -> anyhow::Result<()> { + // Create a tmp test directory. + let dir = TempDir::new("proof_v2")?; + + // Read [`EvmProof`] from test data. + let evm_proof = read_json::<_, EvmProof>("test_data/evm-proof.json")?; + let verifier = read("test_data/evm-verifier.bin")?; + // Build bundle proof v2. let bundle_proof = BundleProofV2::new_from_raw( &evm_proof.proof.proof, @@ -361,11 +382,12 @@ mod tests { &evm_proof.proof.vk, )?; - // Dump the bundle proof v2 into a tmp dir. - let dir = TempDir::new("proof_v2")?; + // Dump the bundle proof v2. bundle_proof.dump(&dir, "suffix")?; - dir.close()?; - Ok(()) + // Verify the bundle proof v2 with EVM verifier contract. + assert!(deploy_and_call(verifier, bundle_proof.calldata()).is_ok()); + + Ok(dir.close()?) } } diff --git a/prover/test_data/evm-proof.json b/prover/test_data/evm-proof.json index 9f67ef9385..1ef86b2551 100644 --- a/prover/test_data/evm-proof.json +++ b/prover/test_data/evm-proof.json @@ -1 +1 @@ -{"proof":{"proof":"BjJEevMsXHDtIPlxUeoCX2bSA8c6sqLX/XpKPQk1QJMfRyLL0SIzrU4UZl0kkMGv1Q5dU2v6I4aaBHZpHse0rQoEpct3/KDuf92bE18CidMcavWWPqswUV52unUKKCHoECN5on4o8DnBbQ6Bu0qRLBDEKo7Fe61/+IOcXJMrzhgEoTwgJfK5R/+u0bTlA+7MMfjvm3rhXy3PVUqcwcPMdw9mMUzPBr4JEFKkuGbM7P2uknzxjGtmby4lfS19mRsUC3QG3RFcKdoW5O2k2eHJmG2Pdq+2i0phMowSP/Wsm7YCqLoukIfpkO8M8InHTgPeNEFCJuumc3CUBEuq0jaMVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDE/Ph/AFv/U/tskFm3jTNlLczNnwacW99NKCUlt3IfhB4B7CRvE7yx4czXJwIfVyQuHYG3piUh96g2pKm7prWKjqGnKyLjtR+5jpS1/hrCl5JRBhhGI36yY1U9BDeMsYcZh6LddY9cSopo2WsQs85EKAC93m/jaKfgvkHbm1NCRUrP3TbKZrzy4ykqkCI08b4967gJf5KcU3O6+44jrSeLoIhKUb3LEC58xBb9+zU9dG6LvK3olr9g+NG1FAaLN0IgK35iGcfCdWygichS0m6BZ7IKWkKFt2Ejbkx0DT+mC5XlTgVNOYjfI0kV7s+Dze0xtRAFI0xrPsYaZeL7vtwHbr3cnq4YIjCRFqc5v9SCcrCtCEBa2vZOrm1ALotLYMaw8296Wxn9dkxiqPFQdELreApeRkjBDGtC8BB/pbGKywT4Bs+1hdymaWaSm4chJIM+NRvhx+Tj760zDWgoVCoJpy53KEBojp+1cRSvRqjIRSmOUsaNVzJLdttqJC/e8oGvIIhrwYqIcqyRSuZUyZhje8X/vM5BurgJ6rB/VZOYgQl7/gvxF8YMZugw1o3yysRm/Ty1PIB7aQ3QI3xq1MLB97zm+dMbKBBcdpoHaafLEpSCoVk/k5j3via0wLc2E8rzU2CjhBcb2/5J3AJaFdAtDMJzfjer7Nl+pEaNUpA9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABI0YVLzRfhvaF/BWexkAPTcXD/OArMbzDFCYDwsZwaCQhODMrc3pLx9Idn0tWogUZhNcshXeT1ZvoQihoUGYe5CWjNYkUQL/BU6NNOVR/Qu9zAAIvmIrFUehI6uGk+U0VJzdibN6HYeTcl71HIFZg2U2cRQJf6w0DTakiNi7yw1AkFLzHoiZAK3A64qERAJZABceofub8iukNXqWZye//cBF/QGDV5PZpJ5MkKsSs1ZAvhaikkIYC2yS7Z961UixaD48hlVz4oSu9gSrVSaKWh11rdeAc0+0QR9vpcCbVpRsdFMx3UUNKsyqfLhGqFdUMEjtOBJtaPiZpEUbaFE9pfRiMQoJ2CUhMLqMdPat6I68lKVomI+B7dUTdnQE2z5paC6ANsRTqFe+XFs02jMWs8Fzdzem+1mtAD/kg8EVCpAMEfNVwpN5k7IIrNR85wYrLHJv2BjPZ96rVWbzcwA9iahlV8ffi7tRx9nyktFDyqkRnt4rOhG5fnOXeYgHBCyjH","instances":"AAAAAAAAAAAAAAAAAAAAAAAAAAAATsr77L180+rltu8AAAAAAAAAAAAAAAAAAAAAAAAAAABefY5cxwF38vJYzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAArCDECPfov4UFWAAAAAAAAAAAAAAAAAAAAAAAAAAAALenFkSCzypvd/0cAAAAAAAAAAAAAAAAAAAAAAAAAAABMjhObP1Tk4LaWwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZxrJuGpKtbvScAAAAAAAAAAAAAAAAAAAAAAAAAAAA9zQeyDLK1z8vwKAAAAAAAAAAAAAAAAAAAAAAAAAAAABiemRbiOBgZTMKvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHDamTZozsaVMAAAAAAAAAAAAAAAAAAAAAAAAAAAAUn2flHFfjCUj8UAAAAAAAAAAAAAAAAAAAAAAAAAAAABuIYooZldvq5UVqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQnf90hS3Tv9G91vMloktkEfTw520n9B8XWr92uzMdjzvot29jacqJcAAAAAAAAAAAAAAAAAAAAAIY+4Be1mT6hzdgY13HkZNAAAAAAAAAAAAAAAAAAAAAAOYRdBTeI/h1ABow+afQfsAAAAAAAAAAAAAAAAAAAAAKusra6vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkBSU3y4mikWSpekX65K5IAAAAAAAAAAAAAAAAAAAAAFwhiTka2U7nZgae8vzYraAAAAAAAAAAAAAAAAAAAAAAz7n6jeqFPuxKFRp/OqlKdgAAAAAAAAAAAAAAAAAAAAAkccTpus5BBCOxH2Be8HGTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJ1AAAAAAAAAAAAAAAAAAAAAAsG6UZ0iMzttF8QL7yOb5WAAAAAAAAAAAAAAAAAAAAAAf8LIRd7c5Qinatn5XK//xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=","vk":"AAAAGgAAAARX2S0K1wF333B1waOsnG/vcASJmWG9YM6SNWCBy1ywDypuNyCQrqoPJvIVXOq6I7k0FOLtC23/wUlpV5XZJVYRvnTQT732GsQk9SbLYKO0HXDQX74zc4W6+04/WbBby2RE5Xpxs7SS+QefbTL8QYR7MnzElOK8gyZFf346gyd1DEa15Vck1FpZYwhhPwHa8a9F3fkVWmKrWs8XIHYU4hNSiyVw+UEuc4FYFVc7I6aoactklYnAfIPu3D9rzH4+i1+gXJJEqDXgfWfK+9szR4ysEnkuzgFrCcTvIG1U2mAJJg==","git_version":"33191d8"},"num_instance":[25]} \ No newline at end of file +{"proof":{"proof":"H9nMdYzj5J/33rD6goSN9lyy4Jr666ENcw2pHAGn1FkEsFvhOT3NDdgsgfuiDoNWIadyYYUdmHONHTwH7ebzmB+lQSAvm0OFmwElTI/LjM6IIVdAb1RHPEabJdbr2iwbL/Anwh0qGMuhVu/KxZYddBTI49kkMylk3rDC2/ezd8whHpfxlQrBKQ4YbOuCe67ibS2HJuvPNbcrVc6rduvdmhzSwe+0+ibrpqKlZDCTRiIFMf9vvl/xDCX2MItcMTquEkOLzwDz/ZpQOzXeU4bKHQJ2o/uIuHPuxZGz1JRsbtMsC8WkxGkEdI9wYWCzb1RTAF04ysuEB2fz5Rs1AcKwNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIVha6PsHnYu2BMF65H1r5w3t8TDIQpkpd995gpNT+DlC6kAeR8PfuaYNInRCz+bZ+v+WudB+JkLAaSViDf6NzXIw1csn4q0bjhiOw2O1CkHlSP0fs6BYUXfadwSDiPJ3gexxH60j3mSuo4tq/dJKs0YDz65yYAkXiEjzzYoaCXzg91GCdfm371zZ7YX3tTT4f3Xf90sC+6GOSlDlycCUL/CaCjm576YHtlW9A9jMuvrTx9rvAjHvIdX9kvKj+P87cZ0jJB0tfogiUUYygyxerjdzf9qALmyEpYCtoaRzRhMg2POREZV3dSL6Ig5ABpn0ho3bwRzFKo3HtSKwWuI6amFY8H9ZAh4Y52euPMCfV7q/QuwgXppXuOOxs0Hdjyg5oSgt/476d8RhM0NYdcj4qQ/8jeUmuzJRJl+1B/AaIEEBoLFRvstt2BjTP2UqvGtSxmSt/d48ENpTXzUbZLN4/0K57FWnMJcMZ66soZtR08Wa7W1DNugZa2j0RzZftR25AWWKVZBxuCxCKt8vbXWG4+NdXK2MFpt0SO7lplFp7b5Qe7bpb4LSttaKFhpDGnAb1zbh+7/6IDnVV6uFGM5WdbFSyOIAPdI7bxRIN7quKNsZrRuGG4MGhjivu2b2XNrT0GEQ31QFiYIMWWQCfAD3RaTTgCVkEacNr0afmtJdDHkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGvjx4l2EnqDG51SVmUPBMGFSv/BlgRVBFvbnedZmmGIwKiZd+x176Npu9HfELgNk0Qd8FX+1zO4UhZxuLwB92A5Bx53+YGkeFiKN1Hcv1c/XNEL8nIDW+RrbjgJYNCAlJr3v84qH0QrdD/H6Y4EIIe7J1FBvcaNpjV2ahYpebq4sO1DUWcELW0jibLZGkuQmotGtgUkAYZ3tfv669SadwQx3dkZQV/iTP4ELf7DuEXeZy4zlq89uijd1xiklf0MVLrclJnwNwkvXrTjaYH8m6lA9UlAhTBFItuvseQek7qAcWbyt4pE6G/93cyYIsV6iWWQKDuosoKNKyE+NwsyAii8Llv2TuPdmRMSYTd8Y+0BCzjhqrmOOmEmu5COZem/sCwQH92CC2W2Oq2Jtvik9/bwvSMfdOd+sOfbWM/scRwQLxqk1yPYeGtPnB4wcTDV5xEX2TdpD2IVCEf863NnOhSZOwDvbZNgDvA3LJjCJ04C+O2VoGzkNdpTgMJ84E5lm","instances":"AAAAAAAAAAAAAAAAAAAAAAAAAAAATsr77L180+rltu8AAAAAAAAAAAAAAAAAAAAAAAAAAABefY5cxwF38vJYzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAArCDECPfov4UFWAAAAAAAAAAAAAAAAAAAAAAAAAAAALenFkSCzypvd/0cAAAAAAAAAAAAAAAAAAAAAAAAAAABMjhObP1Tk4LaWwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZxrJuGpKtbvScAAAAAAAAAAAAAAAAAAAAAAAAAAAA9zQeyDLK1z8vwKAAAAAAAAAAAAAAAAAAAAAAAAAAAABiemRbiOBgZTMKvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHDamTZozsaVMAAAAAAAAAAAAAAAAAAAAAAAAAAAAUn2flHFfjCUj8UAAAAAAAAAAAAAAAAAAAAAAAAAAAABuIYooZldvq5UVqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQnf90hS3Tv9G91vMloktkEfTw520n9B8XWr92uzMdjzvot29jacqJcAAAAAAAAAAAAAAAAAAAAAIY+4Be1mT6hzdgY13HkZNAAAAAAAAAAAAAAAAAAAAAAOYRdBTeI/h1ABow+afQfsAAAAAAAAAAAAAAAAAAAAAKusra6vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkBSU3y4mikWSpekX65K5IAAAAAAAAAAAAAAAAAAAAAFwhiTka2U7nZgae8vzYraAAAAAAAAAAAAAAAAAAAAAAz7n6jeqFPuxKFRp/OqlKdgAAAAAAAAAAAAAAAAAAAAAkccTpus5BBCOxH2Be8HGTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJ1AAAAAAAAAAAAAAAAAAAAAAsG6UZ0iMzttF8QL7yOb5WAAAAAAAAAAAAAAAAAAAAAAf8LIRd7c5Qinatn5XK//xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=","vk":"AAAAGgAAAARX2S0K1wF333B1waOsnG/vcASJmWG9YM6SNWCBy1ywDypuNyCQrqoPJvIVXOq6I7k0FOLtC23/wUlpV5XZJVYRvnTQT732GsQk9SbLYKO0HXDQX74zc4W6+04/WbBby2RE5Xpxs7SS+QefbTL8QYR7MnzElOK8gyZFf346gyd1DEa15Vck1FpZYwhhPwHa8a9F3fkVWmKrWs8XIHYU4hNSiyVw+UEuc4FYFVc7I6aoactklYnAfIPu3D9rzH4+i1+gXJJEqDXgfWfK+9szR4ysEnkuzgFrCcTvIG1U2mAJJg==","git_version":"33191d8"},"num_instance":[25]} \ No newline at end of file diff --git a/prover/test_data/evm-verifier.bin b/prover/test_data/evm-verifier.bin new file mode 100644 index 0000000000..2e94c1a343 Binary files /dev/null and b/prover/test_data/evm-verifier.bin differ