diff --git a/halo2_gadgets/src/ecc.rs b/halo2_gadgets/src/ecc.rs index 1070aad187..7fe4efa31e 100644 --- a/halo2_gadgets/src/ecc.rs +++ b/halo2_gadgets/src/ecc.rs @@ -794,13 +794,15 @@ pub(crate) mod tests { struct MyEccCircuit { test_errors: bool, + test_zsa_additions: bool, _lookup_marker: PhantomData, } impl MyEccCircuit { - fn new(test_errors: bool) -> Self { + fn new(test_errors: bool, test_zsa_additions: bool) -> Self { Self { test_errors, + test_zsa_additions, _lookup_marker: PhantomData, } } @@ -812,7 +814,7 @@ pub(crate) mod tests { type FloorPlanner = SimpleFloorPlanner; fn without_witnesses(&self) -> Self { - MyEccCircuit::new(false) + MyEccCircuit::new(false, false) } fn configure(meta: &mut ConstraintSystem) -> Self::Config { @@ -912,6 +914,14 @@ pub(crate) mod tests { ) } + // Test constant witness + if self.test_zsa_additions { + super::chip::witness_point::tests::test_witness_constant( + chip.clone(), + layouter.namespace(|| "witness constant"), + ) + } + // Test complete addition { super::chip::add::tests::test_add( @@ -988,17 +998,25 @@ pub(crate) mod tests { #[test] fn ecc_chip() { let k = 13; - let circuit = MyEccCircuit::::new(true); + let circuit = MyEccCircuit::::new(true, false); let prover = MockProver::run(k, &circuit, vec![]).unwrap(); assert_eq!(prover.verify(), Ok(())) } #[test] fn test_ecc_chip_against_stored_circuit() { - let circuit = MyEccCircuit::::new(false); + let circuit = MyEccCircuit::::new(false, false); test_against_stored_circuit(circuit, "ecc_chip", 3872); } + #[test] + fn ecc_chip_with_zsa_additions() { + let k = 13; + let circuit = MyEccCircuit::::new(true, true); + let prover = MockProver::run(k, &circuit, vec![]).unwrap(); + assert_eq!(prover.verify(), Ok(())) + } + #[cfg(feature = "test-dev-graph")] #[test] fn print_ecc_chip() { @@ -1008,7 +1026,7 @@ pub(crate) mod tests { root.fill(&WHITE).unwrap(); let root = root.titled("Ecc Chip Layout", ("sans-serif", 60)).unwrap(); - let circuit = MyEccCircuit::::new(false); + let circuit = MyEccCircuit::::new(false, false); halo2_proofs::dev::CircuitLayout::default() .render(13, &circuit, &root) .unwrap(); @@ -1017,7 +1035,7 @@ pub(crate) mod tests { #[test] fn ecc_chip_4_5b() { let k = 13; - let circuit = MyEccCircuit::::new(true); + let circuit = MyEccCircuit::::new(true, false); let prover = MockProver::run(k, &circuit, vec![]).unwrap(); assert_eq!(prover.verify(), Ok(())) @@ -1025,7 +1043,7 @@ pub(crate) mod tests { #[test] fn test_against_stored_ecc_chip_4_5b() { - let circuit = MyEccCircuit::::new(false); + let circuit = MyEccCircuit::::new(false, false); test_against_stored_circuit(circuit, "ecc_chip_4_5b", 3968); } @@ -1038,7 +1056,7 @@ pub(crate) mod tests { root.fill(&WHITE).unwrap(); let root = root.titled("Ecc Chip Layout", ("sans-serif", 60)).unwrap(); - let circuit = MyEccCircuit::::new(false); + let circuit = MyEccCircuit::::new(false, false); halo2_proofs::dev::CircuitLayout::default() .render(13, &circuit, &root) .unwrap(); diff --git a/halo2_gadgets/src/ecc/chip/witness_point.rs b/halo2_gadgets/src/ecc/chip/witness_point.rs index dfb9f63cda..d136f014a4 100644 --- a/halo2_gadgets/src/ecc/chip/witness_point.rs +++ b/halo2_gadgets/src/ecc/chip/witness_point.rs @@ -225,22 +225,21 @@ pub mod tests { chip: EccChip, mut layouter: impl Layouter, ) { - // `NonIdentityPoint::new` must reject the identity point. + // Witnessing the identity should return an error. NonIdentityPoint::new( - chip.clone(), + chip, layouter.namespace(|| "witness identity"), Value::known(pallas::Affine::identity()), ) .expect_err("witnessing 𝒪 should return an error"); + } - // `NonIdentityPoint::new` must accept a non-identity point. - let _ = NonIdentityPoint::new( - chip.clone(), - layouter.namespace(|| "witness a non-identity point"), - Value::known(pallas::Point::generator().to_affine()), - ) - .unwrap(); - + pub fn test_witness_constant< + EccChip: EccInstructions + Clone + Eq + std::fmt::Debug, + >( + chip: EccChip, + mut layouter: impl Layouter, + ) { // `NonIdentityPoint::new_from_constant` must reject the identity point. NonIdentityPoint::new_from_constant( chip.clone(), @@ -252,27 +251,11 @@ pub mod tests { // `NonIdentityPoint::new_from_constant` must accept a non-identity point. let _ = NonIdentityPoint::new_from_constant( chip.clone(), - layouter.namespace(|| "witness constant non-identity point"), + layouter.namespace(|| "witness a constant non-identity point"), pallas::Point::generator().to_affine(), ) .unwrap(); - // `Point::new` must accept the identity point. - let _ = Point::new( - chip.clone(), - layouter.namespace(|| "witness identity"), - Value::known(pallas::Affine::identity()), - ) - .unwrap(); - - // `Point::new` must accept a non-identity point. - let _ = Point::new( - chip.clone(), - layouter.namespace(|| "witness a non-identity point"), - Value::known(pallas::Point::generator().to_affine()), - ) - .unwrap(); - // `Point::new_from_constant` must accept the identity point. let _ = Point::new_from_constant( chip.clone(), @@ -284,7 +267,7 @@ pub mod tests { // `Point::new_from_constant` must accept a non-identity point. let _ = Point::new_from_constant( chip, - layouter.namespace(|| "witness constant non-identity point"), + layouter.namespace(|| "witness a constant non-identity point"), pallas::Point::generator().to_affine(), ) .unwrap(); diff --git a/halo2_gadgets/src/test_circuits/circuit_data/proof_ecc_chip.bin b/halo2_gadgets/src/test_circuits/circuit_data/proof_ecc_chip.bin index 28c19d824f..e30d156d18 100644 Binary files a/halo2_gadgets/src/test_circuits/circuit_data/proof_ecc_chip.bin and b/halo2_gadgets/src/test_circuits/circuit_data/proof_ecc_chip.bin differ diff --git a/halo2_gadgets/src/test_circuits/circuit_data/proof_ecc_chip_4_5b.bin b/halo2_gadgets/src/test_circuits/circuit_data/proof_ecc_chip_4_5b.bin index e017f01043..b05982b14c 100644 Binary files a/halo2_gadgets/src/test_circuits/circuit_data/proof_ecc_chip_4_5b.bin and b/halo2_gadgets/src/test_circuits/circuit_data/proof_ecc_chip_4_5b.bin differ diff --git a/halo2_gadgets/src/test_circuits/circuit_data/vk_ecc_chip.rdata b/halo2_gadgets/src/test_circuits/circuit_data/vk_ecc_chip.rdata index f6bff00848..295db7c9ce 100644 --- a/halo2_gadgets/src/test_circuits/circuit_data/vk_ecc_chip.rdata +++ b/halo2_gadgets/src/test_circuits/circuit_data/vk_ecc_chip.rdata @@ -9878,38 +9878,38 @@ PinnedVerificationKey { }, fixed_commitments: [ (0x05f5862cad2888855bc3c1843a9eff57b11b592d9eb0e13354256661387f5231, 0x32236b14df85bf5f532a930232cb23a5c56ef7d67aaeed8bcb8fc10ea132cbd6), - (0x2394cc47e81f8e8831d02cc2367ac1b03fbd0127b729bd49a881c005a145e74f, 0x2c39a8643c6f4b17ded8320dc5575aaaff5eb9fbcfd464724b53f5c1e86f4cd8), - (0x3fbd2e5c90027a06df0badba624846f2c9049f7527eae952268f81b0508ac875, 0x15025b3794e03a5e70ba1a191c4d59d5490e9fa1ef3ab1a450d683b910d39497), - (0x18fc21a195e47a13b73a3745b8b75cc34de69c105fa88c94d7f58206e16c6c45, 0x29616f1bbae4c2a8fbe9fd0ac07cab9ba5b67656ee4b1aadcb02c99d76d6c349), - (0x03435039337e09f17a39729d66bbc95f298b7d20f156f7f6a6fd4a6acb7723b0, 0x095dd7b848cbe25dbf9095693e075745785bbd96585a648957094f7406abd4ff), - (0x2c32f93d8852fa9142677d3f030a8f98f3465128a031d3cd05be7f4208c3b5f1, 0x0ce8d199346cf4b248b43f776d7efac9c56b488d749831ffaab390a03043c27b), - (0x2a4dfca070e723d48fa35cff494634cdef40a80cfffd70ae9dda3cd83ca33ae6, 0x3df5111b8b29aaf7f51a11d997cf69e11e9ada0167d989322183db17de5f9b3a), - (0x3e02d44d8a73c029704928beecf66059b236033e75dac0668e22658127ebfd0d, 0x0071df0f55b575283ef968e1630a7bd4d3b00a410a1798f3b41a028b80d3d2af), - (0x1f9dd9f4c58b73ef0ffe3c32f21326f6a04b9f293eb7755693cdc4238043c9ef, 0x11b7c145f01913ea4dd6d5e685e0ab00165cef5bc107d749ad12e1655b7fee85), - (0x303187e23e18a02f6cdd865fa944a07113646567eb524735eaf5ed693b5e8b46, 0x303fdda8ba4575c924b51b6defbd2a54a899be335fd8a32925c23ed3a8f116c9), - (0x07444a2044655ba3eba7dd35c40cbedc881bbc4a3caedf912d21b13b01fa2a06, 0x3751d94759db457903bd30a152af69c353ab221a29049604d902160428fbc26c), - (0x1708b4d2bcee40fbe76b280406136ab90ba58cd67c87df1e7eb16924db3f008d, 0x2bc8003ebb965a00e76edd986abe9c5b37a0101bd513e9aec2f98874b7a22fed), - (0x1708b4d2bcee40fbe76b280406136ab90ba58cd67c87df1e7eb16924db3f008d, 0x2bc8003ebb965a00e76edd986abe9c5b37a0101bd513e9aec2f98874b7a22fed), - (0x250f054714eb645283089f14adfa558a8c334ce0298185a85084b9d963eb4697, 0x0f368f3747cee6178abe0f824f372d3545003ee1495a648096a0eb8823411802), - (0x3a55c2cbd9b7a6cb384625ab96c30bb1b0d21ed9efc6a2a511868c6c590d8e69, 0x29991b50b06fd0639f52fa71e74c2d3ede23b9ba5b5de68ec32c4bf5a9313216), - (0x197489d2338a7d1f004a38dda24972ad51dfcae3fdb07183b9cca252a027f04d, 0x0bc2ad1d856cc9982fe6205d906dc43772bde26c1d984aa81141eca7f61fd03d), - (0x38b0c80ae8752a881c4fe5e95a1eefe9e63b8c43e88240085cf5f216ef527eb6, 0x396476e96e6d9748bbb60bbd432037c7b171737f81835abfb2a63d90c42a7eab), - (0x0579f11dfd4f54b445f2af880a08868e3770b77fbf250d01b4a84672caf04d2d, 0x31c55b070e37fc7af5ef9f5083e64a551ff8c9f2a83e3653a1dc914613d15542), - (0x24174233f5b8b6af4654df1292bd64a06569f1a6dd398e7b11f4f8bc8fe8364c, 0x396b9f53650b51ab7f7084d0324a8e9d2627a20691dd84069171a9783898f32b), + (0x0b70f6f89e88131bb5ab28571ca837a4160b51998c6ced04328991a5c3bdcae9, 0x2cee3ef6523c2d36e01981c4794271d53fb47e9c5480b982a2ff3a869144d648), + (0x0299c2272092ebe4e08c73d7261afea742a7dc29ddf73ffb941a1c9c19dcf4a1, 0x1f002552d6af287e66e3e9706ecc2a5523f256bf2c6eeb995b4233f80c8c4eeb), + (0x28fb28941b09f9878eab1ce7923578b332ca794e3036789016fc6f832e820a37, 0x0e1fa37a3b4298c8df50b830e32ed5ff0ea40a0f8fbb1f9bb4620b8cfdcacf12), + (0x37de994248cd221c19cc8a5f354769ecc7e3ac253a4387dbdb8a25934d602225, 0x1c3d47b5ba1cc80af1666afaa42c97043c2b793e48a9c362a398adbf4cbfea78), + (0x0f2ff7cc3b300b9e92d481dfc01b84968a21937691ef5bb84cf7b7ac4bb56f8c, 0x010616d33ce6482c9958f2678cea622493de8477527fea737feb8fad11fc2ad6), + (0x2c40aa103ee1123360d1e47947f6ebc13ecddfc679514202b33f02a45ede862f, 0x2988d36fc6be72b80ac26c8253f72452e0db13387ab35c86d97cc03991cd9bb2), + (0x02fb26d5aa81b4fd2ba3324ae48a27a3e89a90005e4daebfb8004697379f235d, 0x0b484b92ea252f7a58c5bd41cbcdcd9efb932482c902abb4ae3ccb2c90912173), + (0x22e2076fb8f40364e7c733c89be2039af2d0976a5a240ef6f05d9b67f5861b8a, 0x1b9f2382c80f971341343fbfd1cfa3a3fa84d70310e7a8fda21a21e20fe9b0a2), + (0x2bbc94ef7b22aebef24f9a4b0cc1831882548b605171366017d45c3e6fd92075, 0x082b801a6e176239943bfb759fb02138f47a5c8cc4aa7fa0af559fde4e3abd97), + (0x2cec31b1d071d872bd6b1e0660840e27bc6247398c917d5dcb09354d3175fd68, 0x0812dfd78e8ec30827f658cfb64f4f253458d0fcac102af2639295659aaa75a6), + (0x2e0cad5df5c23f42086784fd79c09b1dff1718dd1700e5157a1592dec21306a8, 0x01cd2a585d4dacd1c4ebb7eccc804a7284792641900d383e9f6f496482c01144), + (0x2e0cad5df5c23f42086784fd79c09b1dff1718dd1700e5157a1592dec21306a8, 0x01cd2a585d4dacd1c4ebb7eccc804a7284792641900d383e9f6f496482c01144), + (0x0a7b6a62e3771fea1024172f8fa5ae0a8b6b63d96dc2cd5794a0d61be93c5230, 0x2664583fab5a71ea152a5dc10512917a6b927ca607008db40abdd06dbbb0aedf), + (0x149ab89afd559c4dab808f183828cac2c3c20ce9311ecf7280e03bc9881fd783, 0x2ffd5de1303205066fd7a1540ed79a47baad27532dfc1de2fb708cfde51be867), + (0x11c136f6ea303c5630240788e7a4db6c3aa321aaeaebecbd473af5ace4d05248, 0x0afe33d04a38bae95c2ec4c4372b2d766369c4c5b10f82dcbd4375a41f838d79), + (0x3e360352e498a60f895216359624fcb58372ea0c8acf99c7ffd5678eb018fbec, 0x2821347d5fbae5e9ef8ea16c9b1014b44916bb73ad287ba747ade3c636dcc4e5), + (0x0a3b507e0fe0189f45a2eff60e8fc488da60ce3550391e82f7ec7a1941898c24, 0x3bf48f50d5987b0740eba87e833abb6327c3017dfa065777f3a4f06a555fd12b), + (0x11d043ef781774cb85fa85951ad4acfc4e8de1f4c551cfc677e3f8ac6490224c, 0x239a09984bfe5441f05d454b7da0cacc0797978b17bab820cfe538e748053022), ], permutation: VerifyingKey { commitments: [ - (0x13a7fd3169c46c9c3bd106368e5dc3a8e7a4b6bd4aadf5fda0f71b83ab297a09, 0x1c3ef9a91b2848056d520f205ea0c98f0fbb69c845830b42811ebdb9adf88afe), - (0x05c7a39a4a93ac3add5a086fc1c41c2949ca8cc3fdcb4900c1931ea49588c3d2, 0x20bd155a2b62dc9e79bb924ecf8d2f991c0d37610a120b80519aa77992a5a31c), - (0x21bf82a2cc0ff4d278ebfef6a422ca3fdf9c79f5e0489d2c9a72b7dc7565b831, 0x26e245eedee7f9507e93ce050fa94dd5f1972ad1733e2a30f3518e701aaf964a), - (0x04a851cd021e368ae628d0a6bddf6f8104684e9881244b06c12c011f97ae10a3, 0x08d7d8315ce9b3f3fdb1ce2f1435188108c7b463039a81d39c4ac6c07a7e5c3c), - (0x39fd0ffea58928cc84ce26ec441b9a5b83f17737a76a4c4f824c4e13d1cea055, 0x0129ec9bd7d5cd7dd679b79e33941521b77239f91bdce6d3ea4e92c2bff6dfa7), - (0x0e15b109c2fe5eeb5266559a0bd3416fd7bce914c00bcf76b44421adc8aa1948, 0x0a033cdb6f602db7dd4fa384788d26cf0c61cc791b030a82b4d29f22175d54ec), - (0x387de49f41c1a760959f315f423b2eb7d5e13cb1ff4d68a06868ea7d44132bf7, 0x2413cca947d0d4cd34dbcc1a58be7fb2220f59840018f6dbf3a0aa9b86fe6cd9), - (0x18fe72524df383d9101c78e8ac564e0f3b4f87ca258fc6a52a8ef18c02abb774, 0x051e411c4928132979202fd170747f75317bee98b8b6b88c61717ba49e89778c), - (0x200a3e36d07f7a7e38d8f9250472ab2bb8515667064de650c168a21183081a88, 0x03d9809449623a8bcdc516ed6ba80266be4f12c730e44c952d8382926877e877), - (0x2451f6728db63db449267894eda89be0764845c42ce9fc8d04308edf6115f009, 0x1b945cd9c5d70a00987d10160b7b002a8a7ab19b1ce1ca9b30863ff0f784a6fe), - (0x1623b33058bd23a5f0459ff8ee9c2b0d8a86230817efd63c58ddf9073aba8251, 0x26ce87f4e49d7909bfdaef46ef6081b092ffd3e9d76109d8c927de4ef18d2c42), + (0x207caa09d3dac116acbb172db321e7f61bc484712e630410052c9065265e2fea, 0x01e1f679fed31ace260648de20aa1fecfa49a86883d7816da5610ce877af90e8), + (0x116b8a5b5779b94dc005494d7149a52fb7335e33109c0ffd2592ce36d8eb05ab, 0x2d8fbe17a8f044ae2e1f96c23ee266dc573afd0f57e51c0099510a81c7092e3e), + (0x2bcf89c0aad7686c3d2fe6941cca5ef1618ba5782b318fa03c2d0ded11e1562f, 0x199ddac71a22d6d0ee7ce48d81f22c97bd5e457e0a943424f190d961a978a929), + (0x2a25812521943a2e1efabfbc6c25673444ef448672695083ff756fcd208038b4, 0x2995c0e58a1158e6a36829ebe87e80adbe76e2393e0df579b623a3a247d533d8), + (0x29b4d4a14eb4471725dca90eb7867a1dec10f8942529b5cc1416e574bd9a9ab5, 0x14989bc5b00b80d38bbddae6513a8af3b4eeb2cc329db76cddec618b23df3289), + (0x32df58319d2d09dbb1fee48d3527d363073cd64c83bbde5b03c8fcb4ce911b31, 0x3b90f39ea943accfa63415c093154f964b63abfa2b0e7858f1b4cf64025600ed), + (0x023eb33622c0edabcb91ddf416ae92d24c7cb92507ca21a8b1402aaf528186ec, 0x2ca49fd21b69c9bc981e5fe64896fc237c501cca77cd2cbd843337084738e0c6), + (0x1c26136061e77adca28c3cbba70a24e47b8a3927a5756fc5dbfed16bde4908f4, 0x3e6d79c18b45835803e8a30aa51dae0ee615a0727d902afa11ac144459902641), + (0x1d140d091fff23e0d54048c8ba62096aba0bc38ac86ae071c54f09186ea22686, 0x19aebca6f2256d1e7f412a00f2bfbfda587e39c49baaac1cc61ff4672f51930d), + (0x1ab03409dc7f5fb7f1f8b5e3c54859db1b8a61eba30de1196145b07243170034, 0x2f139218f6fa6a266e846721b4c6f2ac03ebfefa35cdcdd2ba7f713677e58d74), + (0x07d62e5d650fddae400848ae7eec6073f5a9a032d163f5f24603460404197d4b, 0x0cce86359cc5e284c1427c2c8d65e4f93a26f8757746943497a4dcaaa7e8459c), ], }, } diff --git a/halo2_gadgets/src/test_circuits/circuit_data/vk_ecc_chip_4_5b.rdata b/halo2_gadgets/src/test_circuits/circuit_data/vk_ecc_chip_4_5b.rdata index 52f4ec8772..7214d57d45 100644 --- a/halo2_gadgets/src/test_circuits/circuit_data/vk_ecc_chip_4_5b.rdata +++ b/halo2_gadgets/src/test_circuits/circuit_data/vk_ecc_chip_4_5b.rdata @@ -10096,41 +10096,41 @@ PinnedVerificationKey { }, fixed_commitments: [ (0x3887a29815d3a28d43c453904169e07def787baca6c9452505d2de78dd44b86f, 0x2f95e59472ab087725d62deea9c3b406ae490eff7c0318269d6f2b025934cc70), - (0x2394cc47e81f8e8831d02cc2367ac1b03fbd0127b729bd49a881c005a145e74f, 0x2c39a8643c6f4b17ded8320dc5575aaaff5eb9fbcfd464724b53f5c1e86f4cd8), - (0x3fbd2e5c90027a06df0badba624846f2c9049f7527eae952268f81b0508ac875, 0x15025b3794e03a5e70ba1a191c4d59d5490e9fa1ef3ab1a450d683b910d39497), - (0x18fc21a195e47a13b73a3745b8b75cc34de69c105fa88c94d7f58206e16c6c45, 0x29616f1bbae4c2a8fbe9fd0ac07cab9ba5b67656ee4b1aadcb02c99d76d6c349), - (0x03435039337e09f17a39729d66bbc95f298b7d20f156f7f6a6fd4a6acb7723b0, 0x095dd7b848cbe25dbf9095693e075745785bbd96585a648957094f7406abd4ff), - (0x2c32f93d8852fa9142677d3f030a8f98f3465128a031d3cd05be7f4208c3b5f1, 0x0ce8d199346cf4b248b43f776d7efac9c56b488d749831ffaab390a03043c27b), - (0x2a4dfca070e723d48fa35cff494634cdef40a80cfffd70ae9dda3cd83ca33ae6, 0x3df5111b8b29aaf7f51a11d997cf69e11e9ada0167d989322183db17de5f9b3a), - (0x3e02d44d8a73c029704928beecf66059b236033e75dac0668e22658127ebfd0d, 0x0071df0f55b575283ef968e1630a7bd4d3b00a410a1798f3b41a028b80d3d2af), - (0x1f9dd9f4c58b73ef0ffe3c32f21326f6a04b9f293eb7755693cdc4238043c9ef, 0x11b7c145f01913ea4dd6d5e685e0ab00165cef5bc107d749ad12e1655b7fee85), - (0x303187e23e18a02f6cdd865fa944a07113646567eb524735eaf5ed693b5e8b46, 0x303fdda8ba4575c924b51b6defbd2a54a899be335fd8a32925c23ed3a8f116c9), + (0x0b70f6f89e88131bb5ab28571ca837a4160b51998c6ced04328991a5c3bdcae9, 0x2cee3ef6523c2d36e01981c4794271d53fb47e9c5480b982a2ff3a869144d648), + (0x0299c2272092ebe4e08c73d7261afea742a7dc29ddf73ffb941a1c9c19dcf4a1, 0x1f002552d6af287e66e3e9706ecc2a5523f256bf2c6eeb995b4233f80c8c4eeb), + (0x28fb28941b09f9878eab1ce7923578b332ca794e3036789016fc6f832e820a37, 0x0e1fa37a3b4298c8df50b830e32ed5ff0ea40a0f8fbb1f9bb4620b8cfdcacf12), + (0x37de994248cd221c19cc8a5f354769ecc7e3ac253a4387dbdb8a25934d602225, 0x1c3d47b5ba1cc80af1666afaa42c97043c2b793e48a9c362a398adbf4cbfea78), + (0x0f2ff7cc3b300b9e92d481dfc01b84968a21937691ef5bb84cf7b7ac4bb56f8c, 0x010616d33ce6482c9958f2678cea622493de8477527fea737feb8fad11fc2ad6), + (0x2c40aa103ee1123360d1e47947f6ebc13ecddfc679514202b33f02a45ede862f, 0x2988d36fc6be72b80ac26c8253f72452e0db13387ab35c86d97cc03991cd9bb2), + (0x02fb26d5aa81b4fd2ba3324ae48a27a3e89a90005e4daebfb8004697379f235d, 0x0b484b92ea252f7a58c5bd41cbcdcd9efb932482c902abb4ae3ccb2c90912173), + (0x22e2076fb8f40364e7c733c89be2039af2d0976a5a240ef6f05d9b67f5861b8a, 0x1b9f2382c80f971341343fbfd1cfa3a3fa84d70310e7a8fda21a21e20fe9b0a2), + (0x2bbc94ef7b22aebef24f9a4b0cc1831882548b605171366017d45c3e6fd92075, 0x082b801a6e176239943bfb759fb02138f47a5c8cc4aa7fa0af559fde4e3abd97), (0x0decb727cf32e573604ae3928a761b450d9460f2a7283c8cf88a2b38b796e575, 0x044c0a88bc6aa468e75fc709f9eb21b6e309dd8a6ca62f7a3da86299141ea3a9), - (0x07444a2044655ba3eba7dd35c40cbedc881bbc4a3caedf912d21b13b01fa2a06, 0x3751d94759db457903bd30a152af69c353ab221a29049604d902160428fbc26c), - (0x1708b4d2bcee40fbe76b280406136ab90ba58cd67c87df1e7eb16924db3f008d, 0x2bc8003ebb965a00e76edd986abe9c5b37a0101bd513e9aec2f98874b7a22fed), - (0x1708b4d2bcee40fbe76b280406136ab90ba58cd67c87df1e7eb16924db3f008d, 0x2bc8003ebb965a00e76edd986abe9c5b37a0101bd513e9aec2f98874b7a22fed), + (0x2cec31b1d071d872bd6b1e0660840e27bc6247398c917d5dcb09354d3175fd68, 0x0812dfd78e8ec30827f658cfb64f4f253458d0fcac102af2639295659aaa75a6), + (0x2e0cad5df5c23f42086784fd79c09b1dff1718dd1700e5157a1592dec21306a8, 0x01cd2a585d4dacd1c4ebb7eccc804a7284792641900d383e9f6f496482c01144), + (0x2e0cad5df5c23f42086784fd79c09b1dff1718dd1700e5157a1592dec21306a8, 0x01cd2a585d4dacd1c4ebb7eccc804a7284792641900d383e9f6f496482c01144), (0x2bbc94ef7b22aebef24f9a4b0cc1831882548b605171366017d45c3e6fd92075, 0x082b801a6e176239943bfb759fb02138f47a5c8cc4aa7fa0af559fde4e3abd97), (0x2bbc94ef7b22aebef24f9a4b0cc1831882548b605171366017d45c3e6fd92075, 0x082b801a6e176239943bfb759fb02138f47a5c8cc4aa7fa0af559fde4e3abd97), - (0x250f054714eb645283089f14adfa558a8c334ce0298185a85084b9d963eb4697, 0x0f368f3747cee6178abe0f824f372d3545003ee1495a648096a0eb8823411802), - (0x3a55c2cbd9b7a6cb384625ab96c30bb1b0d21ed9efc6a2a511868c6c590d8e69, 0x29991b50b06fd0639f52fa71e74c2d3ede23b9ba5b5de68ec32c4bf5a9313216), - (0x197489d2338a7d1f004a38dda24972ad51dfcae3fdb07183b9cca252a027f04d, 0x0bc2ad1d856cc9982fe6205d906dc43772bde26c1d984aa81141eca7f61fd03d), - (0x38b0c80ae8752a881c4fe5e95a1eefe9e63b8c43e88240085cf5f216ef527eb6, 0x396476e96e6d9748bbb60bbd432037c7b171737f81835abfb2a63d90c42a7eab), - (0x0579f11dfd4f54b445f2af880a08868e3770b77fbf250d01b4a84672caf04d2d, 0x31c55b070e37fc7af5ef9f5083e64a551ff8c9f2a83e3653a1dc914613d15542), - (0x24174233f5b8b6af4654df1292bd64a06569f1a6dd398e7b11f4f8bc8fe8364c, 0x396b9f53650b51ab7f7084d0324a8e9d2627a20691dd84069171a9783898f32b), + (0x0a7b6a62e3771fea1024172f8fa5ae0a8b6b63d96dc2cd5794a0d61be93c5230, 0x2664583fab5a71ea152a5dc10512917a6b927ca607008db40abdd06dbbb0aedf), + (0x149ab89afd559c4dab808f183828cac2c3c20ce9311ecf7280e03bc9881fd783, 0x2ffd5de1303205066fd7a1540ed79a47baad27532dfc1de2fb708cfde51be867), + (0x11c136f6ea303c5630240788e7a4db6c3aa321aaeaebecbd473af5ace4d05248, 0x0afe33d04a38bae95c2ec4c4372b2d766369c4c5b10f82dcbd4375a41f838d79), + (0x3e360352e498a60f895216359624fcb58372ea0c8acf99c7ffd5678eb018fbec, 0x2821347d5fbae5e9ef8ea16c9b1014b44916bb73ad287ba747ade3c636dcc4e5), + (0x0a3b507e0fe0189f45a2eff60e8fc488da60ce3550391e82f7ec7a1941898c24, 0x3bf48f50d5987b0740eba87e833abb6327c3017dfa065777f3a4f06a555fd12b), + (0x11d043ef781774cb85fa85951ad4acfc4e8de1f4c551cfc677e3f8ac6490224c, 0x239a09984bfe5441f05d454b7da0cacc0797978b17bab820cfe538e748053022), ], permutation: VerifyingKey { commitments: [ - (0x13a7fd3169c46c9c3bd106368e5dc3a8e7a4b6bd4aadf5fda0f71b83ab297a09, 0x1c3ef9a91b2848056d520f205ea0c98f0fbb69c845830b42811ebdb9adf88afe), - (0x05c7a39a4a93ac3add5a086fc1c41c2949ca8cc3fdcb4900c1931ea49588c3d2, 0x20bd155a2b62dc9e79bb924ecf8d2f991c0d37610a120b80519aa77992a5a31c), - (0x21bf82a2cc0ff4d278ebfef6a422ca3fdf9c79f5e0489d2c9a72b7dc7565b831, 0x26e245eedee7f9507e93ce050fa94dd5f1972ad1733e2a30f3518e701aaf964a), - (0x04a851cd021e368ae628d0a6bddf6f8104684e9881244b06c12c011f97ae10a3, 0x08d7d8315ce9b3f3fdb1ce2f1435188108c7b463039a81d39c4ac6c07a7e5c3c), - (0x39fd0ffea58928cc84ce26ec441b9a5b83f17737a76a4c4f824c4e13d1cea055, 0x0129ec9bd7d5cd7dd679b79e33941521b77239f91bdce6d3ea4e92c2bff6dfa7), - (0x0e15b109c2fe5eeb5266559a0bd3416fd7bce914c00bcf76b44421adc8aa1948, 0x0a033cdb6f602db7dd4fa384788d26cf0c61cc791b030a82b4d29f22175d54ec), - (0x387de49f41c1a760959f315f423b2eb7d5e13cb1ff4d68a06868ea7d44132bf7, 0x2413cca947d0d4cd34dbcc1a58be7fb2220f59840018f6dbf3a0aa9b86fe6cd9), - (0x18fe72524df383d9101c78e8ac564e0f3b4f87ca258fc6a52a8ef18c02abb774, 0x051e411c4928132979202fd170747f75317bee98b8b6b88c61717ba49e89778c), - (0x200a3e36d07f7a7e38d8f9250472ab2bb8515667064de650c168a21183081a88, 0x03d9809449623a8bcdc516ed6ba80266be4f12c730e44c952d8382926877e877), - (0x2451f6728db63db449267894eda89be0764845c42ce9fc8d04308edf6115f009, 0x1b945cd9c5d70a00987d10160b7b002a8a7ab19b1ce1ca9b30863ff0f784a6fe), - (0x1623b33058bd23a5f0459ff8ee9c2b0d8a86230817efd63c58ddf9073aba8251, 0x26ce87f4e49d7909bfdaef46ef6081b092ffd3e9d76109d8c927de4ef18d2c42), + (0x207caa09d3dac116acbb172db321e7f61bc484712e630410052c9065265e2fea, 0x01e1f679fed31ace260648de20aa1fecfa49a86883d7816da5610ce877af90e8), + (0x116b8a5b5779b94dc005494d7149a52fb7335e33109c0ffd2592ce36d8eb05ab, 0x2d8fbe17a8f044ae2e1f96c23ee266dc573afd0f57e51c0099510a81c7092e3e), + (0x2bcf89c0aad7686c3d2fe6941cca5ef1618ba5782b318fa03c2d0ded11e1562f, 0x199ddac71a22d6d0ee7ce48d81f22c97bd5e457e0a943424f190d961a978a929), + (0x2a25812521943a2e1efabfbc6c25673444ef448672695083ff756fcd208038b4, 0x2995c0e58a1158e6a36829ebe87e80adbe76e2393e0df579b623a3a247d533d8), + (0x29b4d4a14eb4471725dca90eb7867a1dec10f8942529b5cc1416e574bd9a9ab5, 0x14989bc5b00b80d38bbddae6513a8af3b4eeb2cc329db76cddec618b23df3289), + (0x32df58319d2d09dbb1fee48d3527d363073cd64c83bbde5b03c8fcb4ce911b31, 0x3b90f39ea943accfa63415c093154f964b63abfa2b0e7858f1b4cf64025600ed), + (0x023eb33622c0edabcb91ddf416ae92d24c7cb92507ca21a8b1402aaf528186ec, 0x2ca49fd21b69c9bc981e5fe64896fc237c501cca77cd2cbd843337084738e0c6), + (0x1c26136061e77adca28c3cbba70a24e47b8a3927a5756fc5dbfed16bde4908f4, 0x3e6d79c18b45835803e8a30aa51dae0ee615a0727d902afa11ac144459902641), + (0x1d140d091fff23e0d54048c8ba62096aba0bc38ac86ae071c54f09186ea22686, 0x19aebca6f2256d1e7f412a00f2bfbfda587e39c49baaac1cc61ff4672f51930d), + (0x1ab03409dc7f5fb7f1f8b5e3c54859db1b8a61eba30de1196145b07243170034, 0x2f139218f6fa6a266e846721b4c6f2ac03ebfefa35cdcdd2ba7f713677e58d74), + (0x07d62e5d650fddae400848ae7eec6073f5a9a032d163f5f24603460404197d4b, 0x0cce86359cc5e284c1427c2c8d65e4f93a26f8757746943497a4dcaaa7e8459c), ], }, }