Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: make public data update requests, note hashes, and unencrypted logs readonly in TS #6658

Merged
merged 9 commits into from
May 29, 2024
4 changes: 2 additions & 2 deletions l1-contracts/src/core/libraries/ConstantsGen.sol
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ library Constants {
uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4;
uint256 internal constant CONTRACT_INSTANCE_LENGTH = 5;
uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2;
uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2;
uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 3;
uint256 internal constant ETH_ADDRESS_LENGTH = 1;
uint256 internal constant FUNCTION_DATA_LENGTH = 2;
uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5;
Expand Down Expand Up @@ -187,7 +187,7 @@ library Constants {
+ (SCOPED_READ_REQUEST_LEN * MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX)
+ (SCOPED_KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH * MAX_KEY_VALIDATION_REQUESTS_PER_TX)
+ (PUBLIC_DATA_READ_LENGTH * MAX_PUBLIC_DATA_READS_PER_TX);
uint256 internal constant PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 2;
uint256 internal constant PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 3;
uint256 internal constant COMBINED_ACCUMULATED_DATA_LENGTH = MAX_NEW_NOTE_HASHES_PER_TX
+ MAX_NEW_NULLIFIERS_PER_TX + MAX_NEW_L2_TO_L1_MSGS_PER_TX + 6
+ (MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * PUBLIC_DATA_UPDATE_REQUEST_LENGTH) + GAS_LENGTH;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,29 @@ use dep::reset_kernel_lib::{
use dep::types::{
abis::{
accumulated_data::CombinedAccumulatedData, kernel_circuit_public_inputs::KernelCircuitPublicInputs,
public_kernel_data::PublicKernelData
public_kernel_data::PublicKernelData, public_data_update_request::PublicDataUpdateRequest,
side_effect::Ordered
},
constants::{MAX_PUBLIC_DATA_HINTS, MAX_NULLIFIER_READ_REQUESTS_PER_TX},
constants::{MAX_PUBLIC_DATA_HINTS, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX},
data::public_data_hint::PublicDataHint,
merkle_tree::{conditionally_assert_check_membership, MembershipWitness},
partial_state_reference::PartialStateReference, utils::{arrays::array_length}, address::AztecAddress
partial_state_reference::PartialStateReference,
utils::{arrays::{array_length, assert_sorted_array}}, address::AztecAddress
};

fn asc_sort_by_counters<T>(a: T, b: T) -> bool where T: Ordered {
a.counter() < b.counter()
}

struct PublicKernelTailCircuitPrivateInputs {
previous_kernel: PublicKernelData,
nullifier_read_request_hints: NullifierReadRequestHints<MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX>,
nullifier_non_existent_read_request_hints: NullifierNonExistentReadRequestHints,
public_data_hints: [PublicDataHint; MAX_PUBLIC_DATA_HINTS],
public_data_read_request_hints: PublicDataReadRequestHints,
start_state: PartialStateReference,
sorted_public_data_update_requests: [PublicDataUpdateRequest; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],
sorted_public_data_update_requests_indexes: [u64; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX]
}

impl PublicKernelTailCircuitPrivateInputs {
Expand All @@ -47,10 +55,21 @@ impl PublicKernelTailCircuitPrivateInputs {
fn propagate_accumulated_data(self) -> CombinedAccumulatedData {
let previous_public_inputs = self.previous_kernel.public_inputs;
// TODO: Sort the combined data.
CombinedAccumulatedData::combine(
let mut data = CombinedAccumulatedData::combine(
previous_public_inputs.end_non_revertible,
previous_public_inputs.end
)
);

assert_sorted_array(
data.public_data_update_requests,
self.sorted_public_data_update_requests,
self.sorted_public_data_update_requests_indexes,
asc_sort_by_counters
);

data.public_data_update_requests = self.sorted_public_data_update_requests;

data
}

pub fn public_kernel_tail(self) -> KernelCircuitPublicInputs {
Expand Down Expand Up @@ -98,7 +117,8 @@ mod tests {
use dep::types::{
abis::{
kernel_circuit_public_inputs::KernelCircuitPublicInputs, public_kernel_data::PublicKernelData,
nullifier::ScopedNullifier, nullifier_leaf_preimage::NullifierLeafPreimage
nullifier::ScopedNullifier, nullifier_leaf_preimage::NullifierLeafPreimage,
accumulated_data::CombinedAccumulatedData, public_data_update_request::PublicDataUpdateRequest
},
address::AztecAddress,
constants::{
Expand All @@ -110,7 +130,7 @@ mod tests {
},
hash::{silo_nullifier, sha256_to_field},
public_data_tree_leaf_preimage::PublicDataTreeLeafPreimage,
tests::{fixture_builder::FixtureBuilder, merkle_tree_utils::NonEmptyMerkleTree},
tests::{fixture_builder::FixtureBuilder, merkle_tree_utils::NonEmptyMerkleTree, sort::sort_get_sorted_hints},
traits::is_empty, partial_state_reference::PartialStateReference, utils::arrays::array_merge,
merkle_tree::MembershipWitness
};
Expand Down Expand Up @@ -292,13 +312,27 @@ mod tests {
let mut previous_kernel = self.previous_kernel.to_public_kernel_data(false);
previous_kernel.public_inputs.end = self.previous_revertible.to_public_accumulated_data();

let combined = CombinedAccumulatedData::combine(
previous_kernel.public_inputs.end_non_revertible,
previous_kernel.public_inputs.end
);

let sorted = sort_get_sorted_hints(
combined.public_data_update_requests,
|a: PublicDataUpdateRequest, b: PublicDataUpdateRequest| a.counter() < b.counter()
);
let sorted_public_data_update_requests = sorted.sorted_array;
let sorted_public_data_update_requests_indexes = sorted.sorted_index_hints;

let kernel = PublicKernelTailCircuitPrivateInputs {
previous_kernel,
nullifier_read_request_hints: self.nullifier_read_request_hints_builder.to_hints(),
nullifier_non_existent_read_request_hints: self.nullifier_non_existent_read_request_hints_builder.to_hints(),
public_data_hints: self.public_data_hints.storage,
public_data_read_request_hints: self.public_data_read_request_hints_builder.to_hints(),
start_state: self.start_state
start_state: self.start_state,
sorted_public_data_update_requests,
sorted_public_data_update_requests_indexes
};

kernel.public_kernel_tail()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,10 @@ mod tests {
}

global data_writes = [
PublicDataUpdateRequest { leaf_slot: 22, new_value: 200 },
PublicDataUpdateRequest { leaf_slot: 11, new_value: 100 },
PublicDataUpdateRequest { leaf_slot: 33, new_value: 300 },
PublicDataUpdateRequest { leaf_slot: 44, new_value: 400 }
PublicDataUpdateRequest { leaf_slot: 22, new_value: 200, counter: 0 },
PublicDataUpdateRequest { leaf_slot: 11, new_value: 100, counter: 1 },
PublicDataUpdateRequest { leaf_slot: 33, new_value: 300, counter: 2 },
PublicDataUpdateRequest { leaf_slot: 44, new_value: 400, counter: 3 }
];

global leaf_data_hints = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ impl BaseRollupInputs {
);

let new_value = compute_public_data_tree_value(existing_update.new_value - tx_fee);
let protocol_update_request = PublicDataUpdateRequest { leaf_slot, new_value };
let protocol_update_request = PublicDataUpdateRequest { leaf_slot, new_value, counter: 0 };
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's probably worth a comment in the code, but by the time we're in the base rollup, we don't care about the counters, which is why we arbitrarily set it to 0.

(protocol_update_request, existing_update_index as u64)
} else {
// Otherwise, build a new one to be inserted into the protocol update requests at the end of the array.
Expand All @@ -284,7 +284,7 @@ impl BaseRollupInputs {
assert(!balance.lt(tx_fee), "Not enough balance for fee payer to pay for transaction");

let new_value = compute_public_data_tree_value(balance - tx_fee);
let protocol_update_request = PublicDataUpdateRequest { leaf_slot, new_value };
let protocol_update_request = PublicDataUpdateRequest { leaf_slot, new_value, counter: 0 };
(protocol_update_request, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX)
}
} else {
Expand Down Expand Up @@ -505,6 +505,7 @@ mod tests {
kernel_data.public_inputs.end.public_data_update_requests[i] = PublicDataUpdateRequest {
leaf_slot : leaf.slot,
new_value : leaf.value,
counter : 0
};
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ mod tests {
let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: true, function_data };

// Value from public_call_stack_item.test.ts "Computes a callstack item request hash" test
let test_data_call_stack_item_request_hash = 0x11998b1d33b8ba1c8fa7a6c2f5bc76b31bbaa80400554465c335ba31559ac1f9;
let test_data_call_stack_item_request_hash = 0x09b460df8be10a6bd56588c93b478243fdf5cc92db59d9b1670ce2a044fab6d6;
assert_eq(call_stack_item.hash(), test_data_call_stack_item_request_hash);
}

Expand All @@ -87,7 +87,7 @@ mod tests {
let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: false, function_data };

// Value from public_call_stack_item.test.ts "Computes a callstack item hash" test
let test_data_call_stack_item_hash = 0x2b7f8b68d96d0011ecc576459899e9451fbd880568ccc7a071d9cf04e59abb65;
let test_data_call_stack_item_hash = 0x0931a8de516f3f49dff48fbdea57f01b706dc67cbd1fd8bde97d26c4a53afd0a;
assert_eq(call_stack_item.hash(), test_data_call_stack_item_hash);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,6 @@ fn empty_hash() {
let hash = inputs.hash();

// Value from public_circuit_public_inputs.test.ts "computes empty item hash" test
let test_data_empty_hash = 0x1e4351db0c9aa20836e7009bc3e6a4555c92622c5e9cb3b49e2ec0fbbf59d0bd;
let test_data_empty_hash = 0x05061edabeae1057b6f6216afc118e46ea0b77044d4c57ed12e5712dab01b8d4;
assert_eq(hash, test_data_empty_hash);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ use crate::public_data_tree_leaf::PublicDataTreeLeaf;
use crate::address::AztecAddress;
use crate::contrakt::storage_update_request::StorageUpdateRequest;
use crate::data::hash::{compute_public_data_tree_value, compute_public_data_tree_index};
use crate::abis::side_effect::Ordered;

struct PublicDataUpdateRequest {
leaf_slot : Field,
new_value : Field
new_value : Field,
counter: u32
}

impl PublicDataUpdateRequest {
Expand All @@ -18,11 +20,18 @@ impl PublicDataUpdateRequest {
) -> PublicDataUpdateRequest {
PublicDataUpdateRequest {
leaf_slot: compute_public_data_tree_index(contract_address, update_request.storage_slot),
new_value: compute_public_data_tree_value(update_request.new_value)
new_value: compute_public_data_tree_value(update_request.new_value),
counter: update_request.counter
}
}
}

impl Ordered for PublicDataUpdateRequest {
fn counter(self)-> u32{
self.counter
}
}

impl Eq for PublicDataUpdateRequest {
fn eq(self, update_request: PublicDataUpdateRequest) -> bool {
(update_request.leaf_slot == self.leaf_slot)
Expand All @@ -34,7 +43,8 @@ impl Empty for PublicDataUpdateRequest {
fn empty() -> Self {
Self {
leaf_slot : 0,
new_value : 0
new_value : 0,
counter : 0
}
}
}
Expand Down Expand Up @@ -66,7 +76,7 @@ impl PublicDataUpdateRequest {

impl Serialize<PUBLIC_DATA_UPDATE_REQUEST_LENGTH> for PublicDataUpdateRequest {
fn serialize(self) -> [Field; PUBLIC_DATA_UPDATE_REQUEST_LENGTH] {
[self.leaf_slot, self.new_value]
[self.leaf_slot, self.new_value, self.counter as Field]
}
}

Expand All @@ -75,6 +85,7 @@ impl Deserialize<PUBLIC_DATA_UPDATE_REQUEST_LENGTH> for PublicDataUpdateRequest
PublicDataUpdateRequest {
leaf_slot: fields[0],
new_value: fields[1],
counter: fields[2] as u32
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ global CALL_CONTEXT_LENGTH: u64 = 6;
global CONTENT_COMMITMENT_LENGTH: u64 = 4;
global CONTRACT_INSTANCE_LENGTH: u64 = 5;
global CONTRACT_STORAGE_READ_LENGTH: u64 = 2;
global CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: u64 = 2;
global CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: u64 = 3;
global ETH_ADDRESS_LENGTH = 1;
global FUNCTION_DATA_LENGTH: u64 = 2;
global FUNCTION_LEAF_PREIMAGE_LENGTH: u64 = 5;
Expand Down Expand Up @@ -199,7 +199,7 @@ global SCOPED_READ_REQUEST_LEN = READ_REQUEST_LENGTH + 1;
global PUBLIC_DATA_READ_LENGTH = 2;
global VALIDATION_REQUESTS_LENGTH = ROLLUP_VALIDATION_REQUESTS_LENGTH + (SCOPED_READ_REQUEST_LEN * MAX_NOTE_HASH_READ_REQUESTS_PER_TX) + (SCOPED_READ_REQUEST_LEN * MAX_NULLIFIER_READ_REQUESTS_PER_TX) + (SCOPED_READ_REQUEST_LEN * MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX) + (SCOPED_KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH * MAX_KEY_VALIDATION_REQUESTS_PER_TX) + (PUBLIC_DATA_READ_LENGTH * MAX_PUBLIC_DATA_READS_PER_TX);

global PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 2;
global PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 3;
global COMBINED_ACCUMULATED_DATA_LENGTH = MAX_NEW_NOTE_HASHES_PER_TX + MAX_NEW_NULLIFIERS_PER_TX + MAX_NEW_L2_TO_L1_MSGS_PER_TX + 6 + (MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * PUBLIC_DATA_UPDATE_REQUEST_LENGTH) + GAS_LENGTH;
global COMBINED_CONSTANT_DATA_LENGTH = HEADER_LENGTH + TX_CONTEXT_LENGTH + GLOBAL_VARIABLES_LENGTH;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use dep::std::cmp::Eq;
struct StorageUpdateRequest {
storage_slot : Field,
new_value : Field,
counter: u32
}

impl Eq for StorageUpdateRequest {
Expand All @@ -21,6 +22,7 @@ impl Empty for StorageUpdateRequest {
StorageUpdateRequest {
storage_slot: 0,
new_value: 0,
counter: 0
}
}
}
Expand All @@ -33,7 +35,7 @@ impl Hash for StorageUpdateRequest {

impl Serialize<CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH> for StorageUpdateRequest {
fn serialize(self) -> [Field; CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH] {
[self.storage_slot, self.new_value]
[self.storage_slot, self.new_value, self.counter as Field]
}
}

Expand All @@ -42,6 +44,7 @@ impl Deserialize<CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH> for StorageUpdateReques
StorageUpdateRequest {
storage_slot: serialized[0],
new_value: serialized[1],
counter: serialized[2] as u32
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ impl FixtureBuilder {
}

pub fn add_public_data_update_request(&mut self, leaf_slot: Field, value: Field) {
let update_request = PublicDataUpdateRequest { leaf_slot, new_value: value };
let update_request = PublicDataUpdateRequest { leaf_slot, new_value: value, counter: self.next_counter() };
self.public_data_update_requests.push(update_request);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,8 @@ impl PublicCallDataBuilder {
// The default storage slot is its index + 1.
storage_slot: (value_offset + i + 1) as Field,
// The default value is its index + 890.
new_value: (value_offset + i + 890) as Field
new_value: (value_offset + i + 890) as Field,
counter: i as u32
};
self.public_inputs.contract_storage_update_requests.push(update_request);
}
Expand Down
4 changes: 2 additions & 2 deletions yarn-project/circuits.js/src/constants.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ export const CALL_CONTEXT_LENGTH = 6;
export const CONTENT_COMMITMENT_LENGTH = 4;
export const CONTRACT_INSTANCE_LENGTH = 5;
export const CONTRACT_STORAGE_READ_LENGTH = 2;
export const CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2;
export const CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 3;
export const ETH_ADDRESS_LENGTH = 1;
export const FUNCTION_DATA_LENGTH = 2;
export const FUNCTION_LEAF_PREIMAGE_LENGTH = 5;
Expand Down Expand Up @@ -186,7 +186,7 @@ export const VALIDATION_REQUESTS_LENGTH =
SCOPED_READ_REQUEST_LEN * MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX +
SCOPED_KEY_VALIDATION_REQUEST_AND_GENERATOR_LENGTH * MAX_KEY_VALIDATION_REQUESTS_PER_TX +
PUBLIC_DATA_READ_LENGTH * MAX_PUBLIC_DATA_READS_PER_TX;
export const PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 2;
export const PUBLIC_DATA_UPDATE_REQUEST_LENGTH = 3;
export const COMBINED_ACCUMULATED_DATA_LENGTH =
MAX_NEW_NOTE_HASHES_PER_TX +
MAX_NEW_NULLIFIERS_PER_TX +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ describe('buildPublicDataHints', () => {
let publicDataReads: Tuple<PublicDataRead, typeof MAX_PUBLIC_DATA_READS_PER_TX>;
let publicDataUpdateRequests: Tuple<PublicDataUpdateRequest, typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX>;
let expectedHints: Tuple<ExpectedHint, typeof MAX_PUBLIC_DATA_HINTS>;
let sideEffectCounter = 0;

const nextSideEffectCounter = () => sideEffectCounter++;

const publicDataLeaves = [
new PublicDataTreeLeafPreimage(new Fr(22), new Fr(200), new Fr(33), 0n),
Expand All @@ -39,7 +42,7 @@ describe('buildPublicDataHints', () => {

const makePublicDataRead = (leafSlot: number, value: number) => new PublicDataRead(new Fr(leafSlot), new Fr(value));
const makePublicDataWrite = (leafSlot: number, value: number) =>
new PublicDataUpdateRequest(new Fr(leafSlot), new Fr(value));
new PublicDataUpdateRequest(new Fr(leafSlot), new Fr(value), nextSideEffectCounter());

const oracle = {
getMatchOrLowPublicDataMembershipWitness: (leafSlot: bigint) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@ describe('buildPublicDataReadRequestHints', () => {
let expectedStatuses: Tuple<ReadRequestStatus, typeof MAX_PUBLIC_DATA_READS_PER_TX>;
let expectedPendingHints: Tuple<PendingReadHint, typeof MAX_PUBLIC_DATA_READS_PER_TX>;
let expectedLeafDataHints: Tuple<LeafDataReadHint, typeof MAX_PUBLIC_DATA_READS_PER_TX>;
let counter = 0;
const nextCounter = () => counter++;

const makePublicDataWrite = (leafSlot: number, value: number) =>
new PublicDataUpdateRequest(new Fr(leafSlot), new Fr(value));
new PublicDataUpdateRequest(new Fr(leafSlot), new Fr(value), nextCounter());
const makePublicDataHint = (slot: number, value: number) => {
const hint = PublicDataHint.empty();
hint.leafSlot = new Fr(slot);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`PublicCallStackItem Computes a callstack item hash 1`] = `"0x2b7f8b68d96d0011ecc576459899e9451fbd880568ccc7a071d9cf04e59abb65"`;
exports[`PublicCallStackItem Computes a callstack item hash 1`] = `"0x0931a8de516f3f49dff48fbdea57f01b706dc67cbd1fd8bde97d26c4a53afd0a"`;

exports[`PublicCallStackItem Computes a callstack item request hash 1`] = `"0x11998b1d33b8ba1c8fa7a6c2f5bc76b31bbaa80400554465c335ba31559ac1f9"`;
exports[`PublicCallStackItem Computes a callstack item request hash 1`] = `"0x09b460df8be10a6bd56588c93b478243fdf5cc92db59d9b1670ce2a044fab6d6"`;

exports[`PublicCallStackItem computes empty item hash 1`] = `Fr<0x2e7cef26b4ef88a036f6f2bc5bd5d7457b7c2851c7357f1e6f79be9fdde4cf77>`;
exports[`PublicCallStackItem computes empty item hash 1`] = `Fr<0x2baaf9d674eb8f64e18bca2f87a665fdbd43d8696c7a62d689d88bd0296175a4>`;

exports[`PublicCallStackItem computes hash 1`] = `Fr<0x1506520f17c103197070a8f5dec9c0665fefd4251d93ee52f32c07aad554fc78>`;
exports[`PublicCallStackItem computes hash 1`] = `Fr<0x17703e5a5555de5e97d3e6c991b489f4818e71931fd8ee958a00e2c18b806072>`;
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`PublicCircuitPublicInputs computes empty inputs hash 1`] = `Fr<0x1e4351db0c9aa20836e7009bc3e6a4555c92622c5e9cb3b49e2ec0fbbf59d0bd>`;
exports[`PublicCircuitPublicInputs computes empty inputs hash 1`] = `Fr<0x05061edabeae1057b6f6216afc118e46ea0b77044d4c57ed12e5712dab01b8d4>`;

exports[`PublicCircuitPublicInputs hash matches snapshot 1`] = `Fr<0x099d3f1f21b3405cf1dffefd8dd045f4a628ecdd2a717ac7a41e4cc3d41ff79b>`;
exports[`PublicCircuitPublicInputs hash matches snapshot 1`] = `Fr<0x14d9838268c0549fdbc4231fc36432f7ec6687157287117bf15b2fb5a39c9026>`;
Loading
Loading