diff --git a/hydra/hints/io.py b/hydra/hints/io.py index 3a5677ba..5342ffb4 100644 --- a/hydra/hints/io.py +++ b/hydra/hints/io.py @@ -67,8 +67,11 @@ def int_array_to_u256_array(x: list[int] | list[PyFelt]) -> str: return f"array![{', '.join([int_to_u256(i) for i in x])}]" -def int_array_to_u384_array(x: list[int] | list[PyFelt]) -> str: - return f"array![{', '.join([int_to_u384(i) for i in x])}]" +def int_array_to_u384_array(x: list[int] | list[PyFelt], const=False) -> str: + if const: + return f"[{', '.join([int_to_u384(i) for i in x])}]" + else: + return f"array![{', '.join([int_to_u384(i) for i in x])}]" def bigint_pack(x: object, n_limbs: int, base: int) -> int: diff --git a/hydra/modulo_circuit.py b/hydra/modulo_circuit.py index 0315038e..d03df247 100644 --- a/hydra/modulo_circuit.py +++ b/hydra/modulo_circuit.py @@ -895,15 +895,29 @@ def write_cairo1_input_stack( return code, offset_to_reference_map, start_index def fill_cairo_1_constants(self) -> str: - constants = [ - bigint_split(self.values_segment.segment[offset].value, 4, 2**96) + constants_ints = [ + self.values_segment.segment[offset].value for offset in self.values_segment.segment_stacks[WriteOps.CONSTANT].keys() ] - constants_filled = "\n".join( - f"circuit_inputs = circuit_inputs.next_2([{','.join(hex(x) for x in constants[i])}]); // in{i}" - for i in range(len(constants)) - ) - return constants_filled + if len(constants_ints) < 8: + constants_split = [bigint_split(x, N_LIMBS, BASE) for x in constants_ints] + constants_filled = "\n".join( + f"circuit_inputs = circuit_inputs.next_2([{','.join(hex(x) for x in constants_split[i])}]); // in{i}" + for i in range(len(constants_ints)) + ) + return constants_filled, None + else: + import hydra.hints.io as io + + const_name = ( + self.name.upper() + "_"+CurveID(self.curve_id).name.upper() + "_CONSTANTS" + ) + constants_filled = f""" + circuit_inputs = circuit_inputs.next_span({const_name}.span()); // in{0} - in{len(constants_ints)-1} + """ + + const_array = f"const {const_name}: [u384; {len(constants_ints)}] = {io.int_array_to_u384_array(constants_ints, const=True)};" + return constants_filled, const_array def write_cairo1_circuit(self, offset_to_reference_map: dict[int, str]) -> str: code = "" @@ -1029,12 +1043,16 @@ def compile_circuit_cairo_1( """ code += f""" - let mut circuit_inputs = ({','.join(outputs_refs_needed)},).new_inputs(); // Prefill constants: - {self.fill_cairo_1_constants()} - // Fill inputs: """ + + tmp, const_array = self.fill_cairo_1_constants() + code += tmp + code += """ + // Fill inputs: + """ + acc_len = len(self.values_segment.segment_stacks[WriteOps.CONSTANT]) if input_is_struct: for struct in self.input_structs: @@ -1078,6 +1096,10 @@ def compile_circuit_cairo_1( code += f"let res=array![{','.join([f'outputs.get_output({ref})' for ref in outputs_refs])}];\n" code += "return res;\n" code += "}\n" + + if const_array: + code += "\n" + code += const_array return code, function_name def summarize(self): diff --git a/src/cairo/src/circuits/multi_pairing_check.cairo b/src/cairo/src/circuits/multi_pairing_check.cairo index 3ef57b80..6e8718c0 100644 --- a/src/cairo/src/circuits/multi_pairing_check.cairo +++ b/src/cairo/src/circuits/multi_pairing_check.cairo @@ -2537,134 +2537,10 @@ fn run_BLS12_381_MP_CHECK_PREPARE_LAMBDA_ROOT_circuit( let mut circuit_inputs = (t37, t47, t94,).new_inputs(); // Prefill constants: - circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0 - circuit_inputs = circuit_inputs.next_2([0x2, 0x0, 0x0, 0x0]); // in1 - circuit_inputs = circuit_inputs - .next_2( - [ - 0x167b027b600febdb244714c5, - 0x8f17b50e12c47d65ce514a7c, - 0xfd0c6d66bb34bc7585f5abdf, - 0x18089593cbf626353947d5b1 - ] - ); // in2 - circuit_inputs = circuit_inputs - .next_2( - [ - 0x620a00022e01fffffffeffff, - 0xddb3a93be6f89688de17d813, - 0xdf76ce51ba69c6076a0f77ea, - 0x5f19672f - ] - ); // in3 - circuit_inputs = circuit_inputs - .next_2( - [ - 0xe5d80be9902109f7dbc79812, - 0xefeedc2e0124838bdccf325e, - 0xd7a2fffc9072bb5785a686bc, - 0xd5e1c086ffe8016d063c6da - ] - ); // in4 - circuit_inputs = circuit_inputs - .next_2( - [ - 0x4f49fffd8bfd00000000aaad, - 0x897d29650fb85f9b409427eb, - 0x63d4de85aa0d857d89759ad4, - 0x1a0111ea397fe699ec024086 - ] - ); // in5 - circuit_inputs = circuit_inputs - .next_2( - [ - 0xed3ffffb5dfb00000001aaaf, - 0xabc9802928bfc912627c4fd7, - 0x845e1033efa3bf761f6622e9, - 0x1a0111ea397fe6998ce8d956 - ] - ); // in6 - circuit_inputs = circuit_inputs - .next_2( - [ - 0x4aff0e653631f5d3000f022c, - 0x17d5be9b1d380acd8c747cdc, - 0x9163c08be7302c4818171fdd, - 0xb659fb20274bfb1be8ff4d6 - ] - ); // in7 - circuit_inputs = circuit_inputs - .next_2( - [ - 0xb153ffffb9feffffffffaaaa, - 0x6730d2a0f6b0f6241eabfffe, - 0x434bacd764774b84f38512bf, - 0x1a0111ea397fe69a4b1ba7b6 - ] - ); // in8 - circuit_inputs = circuit_inputs - .next_2( - [ - 0x4d6c7ec22cf78a126ddc4af3, - 0xec0c8ec971f63c5f282d5ac1, - 0x231f9fb854a14787b6c7b36f, - 0xfc3e2b36c4e03288e9e902 - ] - ); // in9 - circuit_inputs = circuit_inputs - .next_2( - [ - 0x9ad8fd8459ef1424dbb895e6, - 0xd8191d92e3ec78be505ab582, - 0x463f3f70a9428f0f6d8f66df, - 0x1f87c566d89c06511d3d204 - ] - ); // in10 - circuit_inputs = circuit_inputs - .next_2( - [ - 0x4f49fffd8bfd00000000aaac, - 0x897d29650fb85f9b409427eb, - 0x63d4de85aa0d857d89759ad4, - 0x1a0111ea397fe699ec024086 - ] - ); // in11 - circuit_inputs = circuit_inputs - .next_2( - [ - 0x72ec05f4c81084fbede3cc09, - 0x77f76e17009241c5ee67992f, - 0x6bd17ffe48395dabc2d3435e, - 0x6af0e0437ff400b6831e36d - ] - ); // in12 - circuit_inputs = circuit_inputs - .next_2( - [ - 0x620a00022e01fffffffefffe, - 0xddb3a93be6f89688de17d813, - 0xdf76ce51ba69c6076a0f77ea, - 0x5f19672f - ] - ); // in13 - circuit_inputs = circuit_inputs - .next_2( - [ - 0x8bd478cd1ee605167ff82995, - 0xdb45f3536814f0bd5871c190, - 0xfa99cc9170df3560e77982d0, - 0x144e4211384586c16bd3ad4a - ] - ); // in14 + circuit_inputs = circuit_inputs - .next_2( - [ - 0x6654f19a83cd0a2cfff0a87f, - 0x4f5b1405d978eb5692378322, - 0xb1e7ec4b7d471f3cdb6df2e2, - 0xe9b7238370b26e88c8bb2df - ] - ); // in15 + .next_span(MP_CHECK_PREPARE_LAMBDA_ROOT_BLS12_381_CONSTANTS.span()); // in0 - in15 + // Fill inputs: circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w0); // in16 circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w1); // in17 @@ -2692,6 +2568,96 @@ fn run_BLS12_381_MP_CHECK_PREPARE_LAMBDA_ROOT_circuit( let c_inv_frob_1_of_z: u384 = outputs.get_output(t94); return (c_inv_of_z, scaling_factor_of_z, c_inv_frob_1_of_z); } +const MP_CHECK_PREPARE_LAMBDA_ROOT_BLS12_381_CONSTANTS: [ + u384 + ; 16] = [ + u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 }, + u384 { limb0: 0x2, limb1: 0x0, limb2: 0x0, limb3: 0x0 }, + u384 { + limb0: 0x167b027b600febdb244714c5, + limb1: 0x8f17b50e12c47d65ce514a7c, + limb2: 0xfd0c6d66bb34bc7585f5abdf, + limb3: 0x18089593cbf626353947d5b1 + }, + u384 { + limb0: 0x620a00022e01fffffffeffff, + limb1: 0xddb3a93be6f89688de17d813, + limb2: 0xdf76ce51ba69c6076a0f77ea, + limb3: 0x5f19672f + }, + u384 { + limb0: 0xe5d80be9902109f7dbc79812, + limb1: 0xefeedc2e0124838bdccf325e, + limb2: 0xd7a2fffc9072bb5785a686bc, + limb3: 0xd5e1c086ffe8016d063c6da + }, + u384 { + limb0: 0x4f49fffd8bfd00000000aaad, + limb1: 0x897d29650fb85f9b409427eb, + limb2: 0x63d4de85aa0d857d89759ad4, + limb3: 0x1a0111ea397fe699ec024086 + }, + u384 { + limb0: 0xed3ffffb5dfb00000001aaaf, + limb1: 0xabc9802928bfc912627c4fd7, + limb2: 0x845e1033efa3bf761f6622e9, + limb3: 0x1a0111ea397fe6998ce8d956 + }, + u384 { + limb0: 0x4aff0e653631f5d3000f022c, + limb1: 0x17d5be9b1d380acd8c747cdc, + limb2: 0x9163c08be7302c4818171fdd, + limb3: 0xb659fb20274bfb1be8ff4d6 + }, + u384 { + limb0: 0xb153ffffb9feffffffffaaaa, + limb1: 0x6730d2a0f6b0f6241eabfffe, + limb2: 0x434bacd764774b84f38512bf, + limb3: 0x1a0111ea397fe69a4b1ba7b6 + }, + u384 { + limb0: 0x4d6c7ec22cf78a126ddc4af3, + limb1: 0xec0c8ec971f63c5f282d5ac1, + limb2: 0x231f9fb854a14787b6c7b36f, + limb3: 0xfc3e2b36c4e03288e9e902 + }, + u384 { + limb0: 0x9ad8fd8459ef1424dbb895e6, + limb1: 0xd8191d92e3ec78be505ab582, + limb2: 0x463f3f70a9428f0f6d8f66df, + limb3: 0x1f87c566d89c06511d3d204 + }, + u384 { + limb0: 0x4f49fffd8bfd00000000aaac, + limb1: 0x897d29650fb85f9b409427eb, + limb2: 0x63d4de85aa0d857d89759ad4, + limb3: 0x1a0111ea397fe699ec024086 + }, + u384 { + limb0: 0x72ec05f4c81084fbede3cc09, + limb1: 0x77f76e17009241c5ee67992f, + limb2: 0x6bd17ffe48395dabc2d3435e, + limb3: 0x6af0e0437ff400b6831e36d + }, + u384 { + limb0: 0x620a00022e01fffffffefffe, + limb1: 0xddb3a93be6f89688de17d813, + limb2: 0xdf76ce51ba69c6076a0f77ea, + limb3: 0x5f19672f + }, + u384 { + limb0: 0x8bd478cd1ee605167ff82995, + limb1: 0xdb45f3536814f0bd5871c190, + limb2: 0xfa99cc9170df3560e77982d0, + limb3: 0x144e4211384586c16bd3ad4a + }, + u384 { + limb0: 0x6654f19a83cd0a2cfff0a87f, + limb1: 0x4f5b1405d978eb5692378322, + limb2: 0xb1e7ec4b7d471f3cdb6df2e2, + limb3: 0xe9b7238370b26e88c8bb2df + } +]; fn run_BLS12_381_MP_CHECK_PREPARE_PAIRS_1P_circuit(p_0: G1Point) -> (BLSProcessedPair,) { // CONSTANT stack let in0 = CE::> {}; // 0x0 @@ -5275,37 +5241,10 @@ fn run_BN254_MP_CHECK_FINALIZE_BN_3P_2F_circuit( let mut circuit_inputs = (t587,).new_inputs(); // Prefill constants: + circuit_inputs = circuit_inputs - .next_2( - [0xc2c3330c99e39557176f553d, 0x4c0bec3cf559b143b78cc310, 0x2fb347984f7911f7, 0x0] - ); // in0 - circuit_inputs = circuit_inputs - .next_2( - [0xb7c9dce1665d51c640fcba2, 0x4ba4cc8bd75a079432ae2a1d, 0x16c9e55061ebae20, 0x0] - ); // in1 - circuit_inputs = circuit_inputs - .next_2( - [0xa9c95998dc54014671a0135a, 0xdc5ec698b6e2f9b9dbaae0ed, 0x63cf305489af5dc, 0x0] - ); // in2 - circuit_inputs = circuit_inputs - .next_2( - [0x8fa25bd282d37f632623b0e3, 0x704b5a7ec796f2b21807dc9, 0x7c03cbcac41049a, 0x0] - ); // in3 - circuit_inputs = circuit_inputs - .next_2( - [0xbb966e3de4bd44e5607cfd48, 0x5e6dd9e7e0acccb0c28f069f, 0x30644e72e131a029, 0x0] - ); // in4 - circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in5 - circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in6 - circuit_inputs = circuit_inputs - .next_2( - [0x6871ca8d3c208c16d87cfd3e, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0] - ); // in7 - circuit_inputs = circuit_inputs.next_2([0x52, 0x0, 0x0, 0x0]); // in8 - circuit_inputs = circuit_inputs - .next_2( - [0x6871ca8d3c208c16d87cfd35, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0] - ); // in9 + .next_span(MP_CHECK_FINALIZE_BN_3P_2F_BN254_CONSTANTS.span()); // in0 - in9 + // Fill inputs: circuit_inputs = circuit_inputs.next_2(yInv_0); // in10 circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in11 @@ -5380,6 +5319,55 @@ fn run_BN254_MP_CHECK_FINALIZE_BN_3P_2F_circuit( let final_check: u384 = outputs.get_output(t587); return (final_check,); } +const MP_CHECK_FINALIZE_BN_3P_2F_BN254_CONSTANTS: [ + u384 + ; 10] = [ + u384 { + limb0: 0xc2c3330c99e39557176f553d, + limb1: 0x4c0bec3cf559b143b78cc310, + limb2: 0x2fb347984f7911f7, + limb3: 0x0 + }, + u384 { + limb0: 0xb7c9dce1665d51c640fcba2, + limb1: 0x4ba4cc8bd75a079432ae2a1d, + limb2: 0x16c9e55061ebae20, + limb3: 0x0 + }, + u384 { + limb0: 0xa9c95998dc54014671a0135a, + limb1: 0xdc5ec698b6e2f9b9dbaae0ed, + limb2: 0x63cf305489af5dc, + limb3: 0x0 + }, + u384 { + limb0: 0x8fa25bd282d37f632623b0e3, + limb1: 0x704b5a7ec796f2b21807dc9, + limb2: 0x7c03cbcac41049a, + limb3: 0x0 + }, + u384 { + limb0: 0xbb966e3de4bd44e5607cfd48, + limb1: 0x5e6dd9e7e0acccb0c28f069f, + limb2: 0x30644e72e131a029, + limb3: 0x0 + }, + u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 }, + u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 }, + u384 { + limb0: 0x6871ca8d3c208c16d87cfd3e, + limb1: 0xb85045b68181585d97816a91, + limb2: 0x30644e72e131a029, + limb3: 0x0 + }, + u384 { limb0: 0x52, limb1: 0x0, limb2: 0x0, limb3: 0x0 }, + u384 { + limb0: 0x6871ca8d3c208c16d87cfd35, + limb1: 0xb85045b68181585d97816a91, + limb2: 0x30644e72e131a029, + limb3: 0x0 + } +]; fn run_BN254_MP_CHECK_INIT_BIT_2P_2F_circuit( yInv_0: u384, xNegOverY_0: u384, @@ -6007,176 +5995,10 @@ fn run_BN254_MP_CHECK_PREPARE_LAMBDA_ROOT_circuit( let mut circuit_inputs = (t31, t41, t63, t66, t164, t186, t208,).new_inputs(); // Prefill constants: - circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in0 - circuit_inputs = circuit_inputs.next_2([0x12, 0x0, 0x0, 0x0]); // in1 - circuit_inputs = circuit_inputs - .next_2( - [0xfde6a43f5daa971f3fa65955, 0x1b2522ec5eb28ded6895e1cd, 0x1d8c8daef3eee1e8, 0x0] - ); // in2 - circuit_inputs = circuit_inputs - .next_2( - [0x42b29c567e9c385ce480a71a, 0x4e34e2ac06ead4000d14d1e2, 0x217e400dc9351e77, 0x0] - ); // in3 - circuit_inputs = circuit_inputs - .next_2( - [0xfd28d102c0d147b2f4d521a7, 0x8481d22c6934ce844d72f250, 0x242b719062f6737b, 0x0] - ); // in4 - circuit_inputs = circuit_inputs - .next_2( - [0x43ac198484b8d9094aa82536, 0x1b9c22d81246ffc2e794e176, 0x359809094bd5c8e, 0x0] - ); // in5 - circuit_inputs = circuit_inputs - .next_2( - [0x6df7b44cbb259ef7cb58d5ed, 0xdd4ef1e69a0c1f0dd2949fa, 0x21436d48fcb50cc6, 0x0] - ); // in6 - circuit_inputs = circuit_inputs - .next_2( - [0x8a4f4f0831364cf35f78f771, 0x38a4311a86919d9c7c6c15f8, 0x18857a58f3b5bb30, 0x0] - ); // in7 - circuit_inputs = circuit_inputs - .next_2( - [0x6fc008e7d6998c82f7fc048b, 0x62b7adefd44038ab3c0bbad9, 0x2c84bbad27c36715, 0x0] - ); // in8 - circuit_inputs = circuit_inputs - .next_2( - [0xa8697e0c9c36d8ca3339a7b5, 0x6d1eab6fcd18b99ad4afd096, 0xc33b1c70e4fd11b, 0x0] - ); // in9 - circuit_inputs = circuit_inputs - .next_2( - [0x5371c546d428780a6e3dcfa8, 0x13fe08bea73305ff6bdac77c, 0x1b007294a55accce, 0x0] - ); // in10 - circuit_inputs = circuit_inputs - .next_2( - [0x4f501fe811493d72543a3977, 0xefe88dd8e6965b3adae92c97, 0x215d42e7ac7bd17c, 0x0] - ); // in11 - circuit_inputs = circuit_inputs - .next_2( - [0x6871ca8d3c208c16d87cfd46, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0] - ); // in12 - circuit_inputs = circuit_inputs - .next_2( - [0x8eeec7e5ca5cf05f80f362ac, 0xa6327cfe12150b8e74799277, 0x246996f3b4fae7e6, 0x0] - ); // in13 - circuit_inputs = circuit_inputs - .next_2( - [0x6a8b264dde75f4f798d6a3f2, 0x9d2b22ca22ceca702eeb88c3, 0x12d7c0c3ed42be41, 0x0] - ); // in14 - circuit_inputs = circuit_inputs - .next_2( - [0xb7c9dce1665d51c640fcba2, 0x4ba4cc8bd75a079432ae2a1d, 0x16c9e55061ebae20, 0x0] - ); // in15 - circuit_inputs = circuit_inputs - .next_2( - [0x6b48f98a7b4f4463e3a7dba0, 0x33ce738a184c89d94a0e7840, 0xc38dce27e3b2cae, 0x0] - ); // in16 - circuit_inputs = circuit_inputs - .next_2( - [0x8fa25bd282d37f632623b0e3, 0x704b5a7ec796f2b21807dc9, 0x7c03cbcac41049a, 0x0] - ); // in17 - circuit_inputs = circuit_inputs - .next_2( - [0xfa7a164080faed1f0d24275a, 0xaa7b569817e0966cba582096, 0xf20e129e47c9363, 0x0] - ); // in18 - circuit_inputs = circuit_inputs - .next_2( - [0x1bdec763c13b4711cd2b8126, 0x9f3a80b03b0b1c923685d2ea, 0x2c145edbe7fd8aee, 0x0] - ); // in19 - circuit_inputs = circuit_inputs - .next_2( - [0xf8b1c1a56586ff93e080f8bc, 0x559897c6ad411fb25b75afb7, 0x3df92c5b96e3914, 0x0] - ); // in20 - circuit_inputs = circuit_inputs - .next_2( - [0x678e2ac024c6b8ee6e0c2c4b, 0xa27fb246c7729f7db080cb99, 0x12acf2ca76fd0675, 0x0] - ); // in21 - circuit_inputs = circuit_inputs - .next_2( - [0x1500054667f8140c6a3f2d9f, 0xa4523cf7da4e525e2ba6a315, 0x1563dbde3bd6d35b, 0x0] - ); // in22 - circuit_inputs = circuit_inputs - .next_2( - [0xbb966e3de4bd44e5607cfd49, 0x5e6dd9e7e0acccb0c28f069f, 0x30644e72e131a029, 0x0] - ); // in23 - circuit_inputs = circuit_inputs - .next_2( - [0xbb966e3de4bd44e5607cfd48, 0x5e6dd9e7e0acccb0c28f069f, 0x30644e72e131a029, 0x0] - ); // in24 - circuit_inputs = circuit_inputs - .next_2([0xacdb5c4f5763473177fffffe, 0x59e26bcea0d48bacd4f263f1, 0x0, 0x0]); // in25 - circuit_inputs = circuit_inputs - .next_2([0xacdb5c4f5763473177ffffff, 0x59e26bcea0d48bacd4f263f1, 0x0, 0x0]); // in26 - circuit_inputs = circuit_inputs - .next_2( - [0x67dfc8fabd3581ad840ddd76, 0xb2bdfa8fef85fa07122bde8d, 0x13d0c369615f7bb0, 0x0] - ); // in27 - circuit_inputs = circuit_inputs - .next_2( - [0xac285af5685d3f90eacf7a66, 0xfc2bf531eb331a053a35744c, 0x18a0f4219f4fdff6, 0x0] - ); // in28 - circuit_inputs = circuit_inputs - .next_2( - [0x64e2b5a5bf22f67654883ae6, 0x79c3e050c9ca2a428908a812, 0xc3a5e9c462a6547, 0x0] - ); // in29 - circuit_inputs = circuit_inputs - .next_2( - [0x345582cc92fd973c74bd77f4, 0x5bdd2055c255cf9d9e08c1d9, 0x2ce02aa5f9bf8cd6, 0x0] - ); // in30 - circuit_inputs = circuit_inputs - .next_2( - [0xde227b850aea3f23790405d6, 0x7fac149bfaefbac11b155498, 0x17ded419ed7be4f9, 0x0] - ); // in31 - circuit_inputs = circuit_inputs - .next_2( - [0x4150a79753fb0cd31cc99cc0, 0x2fb81a8dccd8a9b4441d64f3, 0x1bfe7b214c029424, 0x0] - ); // in32 - circuit_inputs = circuit_inputs - .next_2( - [0x9efaf0f0f1a228f0d5662fbd, 0xd15da0ec97a9b8346513297b, 0x697b9c523e0390e, 0x0] - ); // in33 - circuit_inputs = circuit_inputs - .next_2( - [0x182d2db0c413901c32b0c6fe, 0xb5186d6ac4c723b85d3f78a3, 0x7a0e052f2b1c443, 0x0] - ); // in34 - circuit_inputs = circuit_inputs - .next_2( - [0x39c0d06b220500933945267f, 0x5dc79824a3792597356c892c, 0x1b76a37fba85f3cd, 0x0] - ); // in35 - circuit_inputs = circuit_inputs - .next_2( - [0x97d439ec7694aa2bf4c0c101, 0x6cbeee33576139d7f03a5e3, 0xabf8b60be77d73, 0x0] - ); // in36 - circuit_inputs = circuit_inputs - .next_2( - [0x9201927eeb0a69546f1fd1, 0x5924b2691fb5e5685558c04, 0x1c938b097fd22479, 0x0] - ); // in37 - circuit_inputs = circuit_inputs - .next_2( - [0x98ff2631380cab2baaa586de, 0xa9f30e6dec26094f0fdf31bf, 0x4f1de41b3d1766f, 0x0] - ); // in38 - circuit_inputs = circuit_inputs - .next_2( - [0x38f14e77cfd95a083f4c261, 0x3e8c6565b7b72e1b0e78c27f, 0x2429efd69b073ae2, 0x0] - ); // in39 - circuit_inputs = circuit_inputs - .next_2( - [0xd8cf6ebab94d0cb3b2594c64, 0xb14b900e9507e9327600ecc7, 0x28a411b634f09b8f, 0x0] - ); // in40 - circuit_inputs = circuit_inputs - .next_2( - [0x737f96e55fe3ed9d730c239f, 0xfeb0f6ef0cd21d04a44a9e08, 0x23d5e999e1910a12, 0x0] - ); // in41 - circuit_inputs = circuit_inputs - .next_2( - [0x272122f5e8257f43bbb36087, 0x88982b28b4a8aea95364059e, 0x1465d351952f0c05, 0x0] - ); // in42 - circuit_inputs = circuit_inputs - .next_2( - [0x200280211f25041384282499, 0x9fb1b2282a48633d3e2ddaea, 0x16db366a59b1dd0b, 0x0] - ); // in43 + circuit_inputs = circuit_inputs - .next_2( - [0x50449cdc780cfbfaa5cc3649, 0x337d84bbcba34a53a41f1ee, 0x28c36e1fee7fdbe6, 0x0] - ); // in44 + .next_span(MP_CHECK_PREPARE_LAMBDA_ROOT_BN254_CONSTANTS.span()); // in0 - in44 + // Fill inputs: circuit_inputs = circuit_inputs.next_2(lambda_root.w0); // in45 circuit_inputs = circuit_inputs.next_2(lambda_root.w1); // in46 @@ -6229,6 +6051,264 @@ fn run_BN254_MP_CHECK_PREPARE_LAMBDA_ROOT_circuit( c_inv_frob_3_of_z ); } +const MP_CHECK_PREPARE_LAMBDA_ROOT_BN254_CONSTANTS: [ + u384 + ; 45] = [ + u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 }, + u384 { limb0: 0x12, limb1: 0x0, limb2: 0x0, limb3: 0x0 }, + u384 { + limb0: 0xfde6a43f5daa971f3fa65955, + limb1: 0x1b2522ec5eb28ded6895e1cd, + limb2: 0x1d8c8daef3eee1e8, + limb3: 0x0 + }, + u384 { + limb0: 0x42b29c567e9c385ce480a71a, + limb1: 0x4e34e2ac06ead4000d14d1e2, + limb2: 0x217e400dc9351e77, + limb3: 0x0 + }, + u384 { + limb0: 0xfd28d102c0d147b2f4d521a7, + limb1: 0x8481d22c6934ce844d72f250, + limb2: 0x242b719062f6737b, + limb3: 0x0 + }, + u384 { + limb0: 0x43ac198484b8d9094aa82536, + limb1: 0x1b9c22d81246ffc2e794e176, + limb2: 0x359809094bd5c8e, + limb3: 0x0 + }, + u384 { + limb0: 0x6df7b44cbb259ef7cb58d5ed, + limb1: 0xdd4ef1e69a0c1f0dd2949fa, + limb2: 0x21436d48fcb50cc6, + limb3: 0x0 + }, + u384 { + limb0: 0x8a4f4f0831364cf35f78f771, + limb1: 0x38a4311a86919d9c7c6c15f8, + limb2: 0x18857a58f3b5bb30, + limb3: 0x0 + }, + u384 { + limb0: 0x6fc008e7d6998c82f7fc048b, + limb1: 0x62b7adefd44038ab3c0bbad9, + limb2: 0x2c84bbad27c36715, + limb3: 0x0 + }, + u384 { + limb0: 0xa8697e0c9c36d8ca3339a7b5, + limb1: 0x6d1eab6fcd18b99ad4afd096, + limb2: 0xc33b1c70e4fd11b, + limb3: 0x0 + }, + u384 { + limb0: 0x5371c546d428780a6e3dcfa8, + limb1: 0x13fe08bea73305ff6bdac77c, + limb2: 0x1b007294a55accce, + limb3: 0x0 + }, + u384 { + limb0: 0x4f501fe811493d72543a3977, + limb1: 0xefe88dd8e6965b3adae92c97, + limb2: 0x215d42e7ac7bd17c, + limb3: 0x0 + }, + u384 { + limb0: 0x6871ca8d3c208c16d87cfd46, + limb1: 0xb85045b68181585d97816a91, + limb2: 0x30644e72e131a029, + limb3: 0x0 + }, + u384 { + limb0: 0x8eeec7e5ca5cf05f80f362ac, + limb1: 0xa6327cfe12150b8e74799277, + limb2: 0x246996f3b4fae7e6, + limb3: 0x0 + }, + u384 { + limb0: 0x6a8b264dde75f4f798d6a3f2, + limb1: 0x9d2b22ca22ceca702eeb88c3, + limb2: 0x12d7c0c3ed42be41, + limb3: 0x0 + }, + u384 { + limb0: 0xb7c9dce1665d51c640fcba2, + limb1: 0x4ba4cc8bd75a079432ae2a1d, + limb2: 0x16c9e55061ebae20, + limb3: 0x0 + }, + u384 { + limb0: 0x6b48f98a7b4f4463e3a7dba0, + limb1: 0x33ce738a184c89d94a0e7840, + limb2: 0xc38dce27e3b2cae, + limb3: 0x0 + }, + u384 { + limb0: 0x8fa25bd282d37f632623b0e3, + limb1: 0x704b5a7ec796f2b21807dc9, + limb2: 0x7c03cbcac41049a, + limb3: 0x0 + }, + u384 { + limb0: 0xfa7a164080faed1f0d24275a, + limb1: 0xaa7b569817e0966cba582096, + limb2: 0xf20e129e47c9363, + limb3: 0x0 + }, + u384 { + limb0: 0x1bdec763c13b4711cd2b8126, + limb1: 0x9f3a80b03b0b1c923685d2ea, + limb2: 0x2c145edbe7fd8aee, + limb3: 0x0 + }, + u384 { + limb0: 0xf8b1c1a56586ff93e080f8bc, + limb1: 0x559897c6ad411fb25b75afb7, + limb2: 0x3df92c5b96e3914, + limb3: 0x0 + }, + u384 { + limb0: 0x678e2ac024c6b8ee6e0c2c4b, + limb1: 0xa27fb246c7729f7db080cb99, + limb2: 0x12acf2ca76fd0675, + limb3: 0x0 + }, + u384 { + limb0: 0x1500054667f8140c6a3f2d9f, + limb1: 0xa4523cf7da4e525e2ba6a315, + limb2: 0x1563dbde3bd6d35b, + limb3: 0x0 + }, + u384 { + limb0: 0xbb966e3de4bd44e5607cfd49, + limb1: 0x5e6dd9e7e0acccb0c28f069f, + limb2: 0x30644e72e131a029, + limb3: 0x0 + }, + u384 { + limb0: 0xbb966e3de4bd44e5607cfd48, + limb1: 0x5e6dd9e7e0acccb0c28f069f, + limb2: 0x30644e72e131a029, + limb3: 0x0 + }, + u384 { + limb0: 0xacdb5c4f5763473177fffffe, limb1: 0x59e26bcea0d48bacd4f263f1, limb2: 0x0, limb3: 0x0 + }, + u384 { + limb0: 0xacdb5c4f5763473177ffffff, limb1: 0x59e26bcea0d48bacd4f263f1, limb2: 0x0, limb3: 0x0 + }, + u384 { + limb0: 0x67dfc8fabd3581ad840ddd76, + limb1: 0xb2bdfa8fef85fa07122bde8d, + limb2: 0x13d0c369615f7bb0, + limb3: 0x0 + }, + u384 { + limb0: 0xac285af5685d3f90eacf7a66, + limb1: 0xfc2bf531eb331a053a35744c, + limb2: 0x18a0f4219f4fdff6, + limb3: 0x0 + }, + u384 { + limb0: 0x64e2b5a5bf22f67654883ae6, + limb1: 0x79c3e050c9ca2a428908a812, + limb2: 0xc3a5e9c462a6547, + limb3: 0x0 + }, + u384 { + limb0: 0x345582cc92fd973c74bd77f4, + limb1: 0x5bdd2055c255cf9d9e08c1d9, + limb2: 0x2ce02aa5f9bf8cd6, + limb3: 0x0 + }, + u384 { + limb0: 0xde227b850aea3f23790405d6, + limb1: 0x7fac149bfaefbac11b155498, + limb2: 0x17ded419ed7be4f9, + limb3: 0x0 + }, + u384 { + limb0: 0x4150a79753fb0cd31cc99cc0, + limb1: 0x2fb81a8dccd8a9b4441d64f3, + limb2: 0x1bfe7b214c029424, + limb3: 0x0 + }, + u384 { + limb0: 0x9efaf0f0f1a228f0d5662fbd, + limb1: 0xd15da0ec97a9b8346513297b, + limb2: 0x697b9c523e0390e, + limb3: 0x0 + }, + u384 { + limb0: 0x182d2db0c413901c32b0c6fe, + limb1: 0xb5186d6ac4c723b85d3f78a3, + limb2: 0x7a0e052f2b1c443, + limb3: 0x0 + }, + u384 { + limb0: 0x39c0d06b220500933945267f, + limb1: 0x5dc79824a3792597356c892c, + limb2: 0x1b76a37fba85f3cd, + limb3: 0x0 + }, + u384 { + limb0: 0x97d439ec7694aa2bf4c0c101, + limb1: 0x6cbeee33576139d7f03a5e3, + limb2: 0xabf8b60be77d73, + limb3: 0x0 + }, + u384 { + limb0: 0x9201927eeb0a69546f1fd1, + limb1: 0x5924b2691fb5e5685558c04, + limb2: 0x1c938b097fd22479, + limb3: 0x0 + }, + u384 { + limb0: 0x98ff2631380cab2baaa586de, + limb1: 0xa9f30e6dec26094f0fdf31bf, + limb2: 0x4f1de41b3d1766f, + limb3: 0x0 + }, + u384 { + limb0: 0x38f14e77cfd95a083f4c261, + limb1: 0x3e8c6565b7b72e1b0e78c27f, + limb2: 0x2429efd69b073ae2, + limb3: 0x0 + }, + u384 { + limb0: 0xd8cf6ebab94d0cb3b2594c64, + limb1: 0xb14b900e9507e9327600ecc7, + limb2: 0x28a411b634f09b8f, + limb3: 0x0 + }, + u384 { + limb0: 0x737f96e55fe3ed9d730c239f, + limb1: 0xfeb0f6ef0cd21d04a44a9e08, + limb2: 0x23d5e999e1910a12, + limb3: 0x0 + }, + u384 { + limb0: 0x272122f5e8257f43bbb36087, + limb1: 0x88982b28b4a8aea95364059e, + limb2: 0x1465d351952f0c05, + limb3: 0x0 + }, + u384 { + limb0: 0x200280211f25041384282499, + limb1: 0x9fb1b2282a48633d3e2ddaea, + limb2: 0x16db366a59b1dd0b, + limb3: 0x0 + }, + u384 { + limb0: 0x50449cdc780cfbfaa5cc3649, + limb1: 0x337d84bbcba34a53a41f1ee, + limb2: 0x28c36e1fee7fdbe6, + limb3: 0x0 + } +]; fn run_BN254_MP_CHECK_PREPARE_PAIRS_1P_circuit( p_0: G1Point, Qy0_0: u384, Qy1_0: u384 ) -> (BNProcessedPair,) { @@ -6259,15 +6339,13 @@ fn run_BN254_MP_CHECK_PREPARE_PAIRS_1P_circuit( circuit_inputs = circuit_inputs.next_2(Qy1_0); // in4 let outputs = circuit_inputs.done_2().eval(modulus).unwrap(); - - return ( - BNProcessedPair { - yInv: outputs.get_output(t0), - xNegOverY: outputs.get_output(t2), - QyNeg0: outputs.get_output(t3), - QyNeg1: outputs.get_output(t4) - }, - ); + let p_0: BNProcessedPair = BNProcessedPair { + yInv: outputs.get_output(t0), + xNegOverY: outputs.get_output(t2), + QyNeg0: outputs.get_output(t3), + QyNeg1: outputs.get_output(t4) + }; + return (p_0,); } fn run_BN254_MP_CHECK_PREPARE_PAIRS_2P_circuit( p_0: G1Point, Qy0_0: u384, Qy1_0: u384, p_1: G1Point, Qy0_1: u384, Qy1_1: u384