From cdf0a7450d4e55d24d9f02b3c55745afcb173295 Mon Sep 17 00:00:00 2001 From: vezenovm Date: Tue, 29 Aug 2023 18:10:59 +0000 Subject: [PATCH] remove padding from constant to_radix --- .../to_bytes_consistent/Nargo.toml | 7 +++++++ .../to_bytes_consistent/Prover.toml | 1 + .../to_bytes_consistent/src/main.nr | 14 ++++++++++++++ .../noirc_evaluator/src/ssa/ir/instruction/call.rs | 9 --------- crates/noirc_evaluator/src/ssa/ssa_builder/mod.rs | 4 ++-- 5 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 crates/nargo_cli/tests/execution_success/to_bytes_consistent/Nargo.toml create mode 100644 crates/nargo_cli/tests/execution_success/to_bytes_consistent/Prover.toml create mode 100644 crates/nargo_cli/tests/execution_success/to_bytes_consistent/src/main.nr diff --git a/crates/nargo_cli/tests/execution_success/to_bytes_consistent/Nargo.toml b/crates/nargo_cli/tests/execution_success/to_bytes_consistent/Nargo.toml new file mode 100644 index 00000000000..65f95d159c8 --- /dev/null +++ b/crates/nargo_cli/tests/execution_success/to_bytes_consistent/Nargo.toml @@ -0,0 +1,7 @@ +[package] +name = "to_bytes_consistent" +type = "bin" +authors = [""] +compiler_version = "0.10.3" + +[dependencies] \ No newline at end of file diff --git a/crates/nargo_cli/tests/execution_success/to_bytes_consistent/Prover.toml b/crates/nargo_cli/tests/execution_success/to_bytes_consistent/Prover.toml new file mode 100644 index 00000000000..07fe857ac7c --- /dev/null +++ b/crates/nargo_cli/tests/execution_success/to_bytes_consistent/Prover.toml @@ -0,0 +1 @@ +x = "2040124" diff --git a/crates/nargo_cli/tests/execution_success/to_bytes_consistent/src/main.nr b/crates/nargo_cli/tests/execution_success/to_bytes_consistent/src/main.nr new file mode 100644 index 00000000000..270491e132d --- /dev/null +++ b/crates/nargo_cli/tests/execution_success/to_bytes_consistent/src/main.nr @@ -0,0 +1,14 @@ +// This test aims to check that we have consistent behavior +// between a `to_be_bytes` call (which is radix decomposition under the hood) +// with constant inputs or with witness inputs. + +// x = 2040124 +fn main(x : Field) { + let byte_array = x.to_be_bytes(31); + let x_as_constant = 2040124; + let constant_byte_array = x_as_constant.to_be_bytes(31); + assert(constant_byte_array.len() == byte_array.len()); + for i in 0..constant_byte_array.len() { + assert(constant_byte_array[i] == byte_array[i]); + } +} diff --git a/crates/noirc_evaluator/src/ssa/ir/instruction/call.rs b/crates/noirc_evaluator/src/ssa/ir/instruction/call.rs index 713bc8b0997..34ec8a90092 100644 --- a/crates/noirc_evaluator/src/ssa/ir/instruction/call.rs +++ b/crates/noirc_evaluator/src/ssa/ir/instruction/call.rs @@ -334,15 +334,6 @@ fn constant_to_radix( limbs.reverse(); } - // For legacy reasons (see #617) the to_radix interface supports 256 bits even though - // FieldElement::max_num_bits() is only 254 bits. Any limbs beyond the specified count - // become zero padding. - let max_decomposable_bits: u32 = 256; - let limb_count_with_padding = max_decomposable_bits / bit_size; - while limbs.len() < limb_count_with_padding as usize { - limbs.push(FieldElement::zero()); - } - make_constant_array(dfg, limbs, Type::unsigned(bit_size)) } diff --git a/crates/noirc_evaluator/src/ssa/ssa_builder/mod.rs b/crates/noirc_evaluator/src/ssa/ssa_builder/mod.rs index 06218dd6899..fab94b43689 100644 --- a/crates/noirc_evaluator/src/ssa/ssa_builder/mod.rs +++ b/crates/noirc_evaluator/src/ssa/ssa_builder/mod.rs @@ -385,7 +385,7 @@ mod tests { #[test] fn insert_constant_call() { - // `bits` should be an array of constants [1, 1, 1, 0...]: + // `bits` should be an array of constants [1, 1, 1, 0...] of length 8: // let x = 7; // let bits = x.to_le_bits(8); let func_id = Id::test_new(0); @@ -404,7 +404,7 @@ mod tests { Value::NumericConstant { constant, .. } => *constant, _ => panic!(), }; - assert_eq!(slice_len, FieldElement::from(256u128)); + assert_eq!(slice_len, FieldElement::from(8_u128)); let slice = match &builder.current_function.dfg[call_results[1]] { Value::Array { array, .. } => array,