diff --git a/.github/workflows/circuits_e2e.yaml b/.github/workflows/circuits_e2e.yaml index b167a43d1..1b15990c3 100644 --- a/.github/workflows/circuits_e2e.yaml +++ b/.github/workflows/circuits_e2e.yaml @@ -2,7 +2,6 @@ name: Circuits E2E Tests on: workflow_dispatch: - jobs: test: name: Circuits E2E Tests diff --git a/.github/workflows/circuits_profile.yaml b/.github/workflows/circuits_profile.yaml index 3e3699d59..32710eac3 100644 --- a/.github/workflows/circuits_profile.yaml +++ b/.github/workflows/circuits_profile.yaml @@ -1,7 +1,7 @@ name: circuit profiling -on: [push, merge_group] - +on: + workflow_dispatch: jobs: test: name: nargo info diff --git a/.github/workflows/e2e_test.yaml b/.github/workflows/e2e_test.yaml index f6e7759b4..8dfa6e2bf 100644 --- a/.github/workflows/e2e_test.yaml +++ b/.github/workflows/e2e_test.yaml @@ -2,6 +2,7 @@ name: E2E Tests on: workflow_dispatch: + jobs: test: name: E2E Tests diff --git a/.github/workflows/static_checks.yaml b/.github/workflows/static_checks.yaml index 4a559e9e4..27f5456da 100644 --- a/.github/workflows/static_checks.yaml +++ b/.github/workflows/static_checks.yaml @@ -2,7 +2,6 @@ name: Static checks on: workflow_dispatch: - jobs: test: name: Static checks diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 900e875c6..6351121bc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,8 +47,8 @@ jobs: with: toolchain: ${{ matrix.toolchain }} - - name: Run Noir tests - run: nargo test + - name: Run Ethereum Noir tests + run: nargo test --workspace format: runs-on: ubuntu-latest diff --git a/ethereum/circuits/get_storage_recursive/src/main.nr b/ethereum/circuits/get_storage_recursive/src/main.nr index 7baf617e2..957502f04 100644 --- a/ethereum/circuits/get_storage_recursive/src/main.nr +++ b/ethereum/circuits/get_storage_recursive/src/main.nr @@ -3,7 +3,6 @@ use dep::ethereum::{ misc::types::{Address, Bytes32}, }; -#[recursive] fn main( chain_id: pub Field, block_number: pub u64, diff --git a/ethereum/circuits/lib/src/account_with_storage.nr b/ethereum/circuits/lib/src/account_with_storage.nr index 876db9dce..973ec9f58 100644 --- a/ethereum/circuits/lib/src/account_with_storage.nr +++ b/ethereum/circuits/lib/src/account_with_storage.nr @@ -44,9 +44,9 @@ struct StateAndStorageProofInput { } pub struct StorageWithinBlock { - pub(crate) block_hash: Bytes32, - pub(crate) account: Account, - pub(crate) values: [Bytes32; N], + pub block_hash: Bytes32, + pub account: Account, + pub values: [Bytes32; N], } type ProofInputSerialized = [Field; LEN]; diff --git a/ethereum/circuits/lib/src/account_with_storage_recursive.nr b/ethereum/circuits/lib/src/account_with_storage_recursive.nr index d2a1d6c45..a1cc50fb2 100644 --- a/ethereum/circuits/lib/src/account_with_storage_recursive.nr +++ b/ethereum/circuits/lib/src/account_with_storage_recursive.nr @@ -5,9 +5,9 @@ use crate::serde::STORAGE_BLOCK_LEN; use dep::std::verify_proof_with_type; pub struct RecursiveProof { - key_hash: Field, - verification_key: [Field; 114], - proof: [Field; 93], + pub key_hash: Field, + pub verification_key: [Field; 114], + pub proof: [Field; 93], } global NUM_PUBLIC_INPUTS: u32 = 1 + 1 + ADDRESS_LENGTH + BYTES32_LENGTH + STORAGE_BLOCK_LEN; // chain_id + block_number + address + storage_key + public_return_inputs diff --git a/ethereum/circuits/lib/src/fixtures.nr b/ethereum/circuits/lib/src/fixtures.nr index 852c61af7..6be7e4f54 100644 --- a/ethereum/circuits/lib/src/fixtures.nr +++ b/ethereum/circuits/lib/src/fixtures.nr @@ -1,2 +1,2 @@ -pub(crate) mod mainnet; -pub(crate) mod merkle_proofs; +pub mod mainnet; +pub mod merkle_proofs; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet.nr b/ethereum/circuits/lib/src/fixtures/mainnet.nr index 7ea1bc91b..059d4a4ec 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet.nr @@ -1,5 +1,5 @@ pub(crate) mod frontier; pub(crate) mod homestead; -pub(crate) mod london; -pub(crate) mod paris; +pub mod london; +pub mod paris; pub(crate) mod cancun; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/london.nr b/ethereum/circuits/lib/src/fixtures/mainnet/london.nr index 35efecb47..bf40c4f37 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/london.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/london.nr @@ -1,2 +1,2 @@ -pub(crate) mod crypto_punks; +pub mod crypto_punks; pub(crate) mod vitalik_balance; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks.nr b/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks.nr index 54dae717d..e51af63e2 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks.nr @@ -1,3 +1,4 @@ -pub(crate) mod header; -pub(crate) mod account; -pub(crate) mod state_proof; +pub mod header; +pub mod account; +pub mod state_proof; +pub mod storage_proof; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/account.nr b/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/account.nr index d8ac8307e..9d3effce7 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/account.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/account.nr @@ -26,4 +26,4 @@ pub(crate) global code_hash: Bytes32 = [ 0xe4, 0x16, 0x7f, 0x0b, 0x74, 0xea, 0x23, 0x05, 0x66, 0xdd, 0xec, 0xe7, 0xae, 0x9d, 0x6f, 0x0b, ]; -pub(crate) global account: Account = Account { nonce, balance, storage_root, code_hash }; +pub global account: Account = Account { nonce, balance, storage_root, code_hash }; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/header.nr b/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/header.nr index b86a76594..493ad8463 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/header.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/header.nr @@ -67,7 +67,7 @@ global encoded_data: [u8; 708] = [ 0x00, 0x00, 0x00, 0x00, ]; -pub(crate) global block_header_partial: BlockHeaderPartial = +pub global block_header_partial: BlockHeaderPartial = BlockHeaderPartial { number, hash, state_root, transactions_root, receipts_root }; -pub(crate) global block_header_rlp: BoundedVec = +pub global block_header_rlp: BoundedVec = BoundedVec::from_parts(encoded_data, encoded_length); diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/state_proof.nr b/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/state_proof.nr index 5cfec37c7..ff8d07002 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/state_proof.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/state_proof.nr @@ -438,4 +438,4 @@ pub(crate) global proof_input: ProofInput<66, 110, 10, 148> = ProofInput { }, }; -pub(crate) global proof_input_serialized: [Field; 5645] = proof_input.serialize(); +pub global proof_input_serialized: [Field; 5645] = proof_input.serialize(); diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/storage_proof.nr b/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/storage_proof.nr new file mode 100644 index 000000000..aa59996bb --- /dev/null +++ b/ethereum/circuits/lib/src/fixtures/mainnet/london/crypto_punks/storage_proof.nr @@ -0,0 +1,301 @@ +use crate::account_with_storage::{ + MAX_PREFIXED_KEY_NIBBLE_LEN, MAX_STORAGE_DEPTH_NO_LEAF_M, MAX_STORAGE_LEAF_LEN, + MAX_STORAGE_VALUE_LEN, +}; +use crate::merkle_patricia_proofs::proof::{Proof, ProofInput}; +use crate::serde::Serde; + +global proofs: [ProofInput<66, 32, 6, 69>; 1] = [ + ProofInput { + key: [ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xb2, 0x1c, 0xa7, 0xf4, 0x2e, 0x79, 0x2b, + 0x65, 0x59, 0xc8, 0xba, 0xd1, 0xa8, 0xf3, 0x5d, 0x49, 0xfd, 0xf8, 0xe3, 0xf7, 0x67, + 0x76, 0xdd, 0x64, 0xfb, 0xcf, 0xe3, 0x34, 0x7b, 0xaf, 0x52, + ], + value: [ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xc3, 0x52, + 0xb5, 0x34, 0xe8, 0xb9, 0x87, 0xe0, 0x36, 0xa9, 0x35, 0x39, 0xfd, 0x68, 0x97, 0xf5, + 0x34, 0x88, 0xe5, 0x6a, + ], + proof: Proof { + nodes: [ + [ + 0xf9, 0x02, 0x11, 0xa0, 0xd4, 0x68, 0x55, 0x23, 0xe0, 0x1e, 0x98, 0x0b, 0x1b, + 0x15, 0xd5, 0x93, 0xef, 0x92, 0xa2, 0x98, 0x92, 0x20, 0x0b, 0x5d, 0x17, 0xe9, + 0x0f, 0x73, 0x99, 0x3b, 0x8e, 0x48, 0xe3, 0xec, 0x9a, 0x95, 0xa0, 0x03, 0xf5, + 0x11, 0xa0, 0x2b, 0xb7, 0x9c, 0x93, 0x0a, 0x03, 0xfe, 0xc8, 0xe4, 0x5b, 0xc4, + 0xe5, 0x65, 0xc2, 0xf5, 0xc2, 0xb9, 0x0f, 0x52, 0xcc, 0x80, 0xc7, 0x67, 0x09, + 0x37, 0x09, 0x46, 0x4f, 0xa0, 0xd4, 0x1e, 0xbc, 0x45, 0x8f, 0x8d, 0x74, 0x14, + 0xb7, 0x7b, 0x42, 0xf2, 0xee, 0xd1, 0x04, 0x15, 0xb4, 0xfa, 0x90, 0x9c, 0xee, + 0x93, 0x07, 0xfb, 0x50, 0x1c, 0xfe, 0x9c, 0x2f, 0xec, 0x27, 0x9e, 0xa0, 0xb2, + 0x34, 0x82, 0x11, 0x2d, 0x49, 0x7f, 0x93, 0x1e, 0x56, 0x66, 0x64, 0x1e, 0x3c, + 0x01, 0x4a, 0xab, 0x48, 0xb3, 0x56, 0x43, 0x05, 0xd1, 0x3f, 0xaa, 0xfc, 0xa8, + 0x93, 0x90, 0xaf, 0x2d, 0x66, 0xa0, 0xa2, 0x24, 0x95, 0xf1, 0xac, 0x26, 0xed, + 0x51, 0xc0, 0x8f, 0x0b, 0x20, 0x5b, 0x4a, 0x22, 0xed, 0x36, 0x16, 0x31, 0x86, + 0x6f, 0x02, 0x23, 0xf2, 0xa7, 0x61, 0x2d, 0x10, 0xf2, 0xda, 0x1a, 0xa8, 0xa0, + 0xd2, 0x3f, 0xc4, 0xba, 0xca, 0x54, 0xbf, 0x53, 0x2f, 0xaa, 0x57, 0x2b, 0x55, + 0x62, 0x2e, 0x40, 0xf8, 0x73, 0x65, 0x2c, 0x2b, 0x00, 0x9a, 0x6a, 0xb8, 0xe0, + 0x6f, 0x29, 0x93, 0x8a, 0x2e, 0x59, 0xa0, 0xf1, 0xad, 0x7a, 0xb7, 0x71, 0xe6, + 0x5d, 0x86, 0x5e, 0xb5, 0xd1, 0xee, 0x1b, 0x77, 0xc9, 0xcb, 0x91, 0x09, 0x48, + 0x46, 0x12, 0x95, 0xb5, 0x64, 0x11, 0x06, 0xf9, 0x18, 0x7f, 0x70, 0x38, 0xef, + 0xa0, 0xa9, 0x9a, 0xaf, 0xc3, 0xec, 0x45, 0xc2, 0x68, 0xf5, 0xb1, 0x14, 0x6f, + 0xfa, 0xe7, 0x82, 0x42, 0xd1, 0x5e, 0x52, 0xb0, 0x6a, 0x54, 0xf3, 0xd5, 0xfe, + 0x9a, 0x15, 0xbf, 0x50, 0x9c, 0xaa, 0x91, 0xa0, 0x05, 0xc3, 0x57, 0x15, 0x19, + 0xc4, 0x08, 0x41, 0xe1, 0xfc, 0xb6, 0xc9, 0x52, 0xa5, 0xbf, 0x9b, 0x76, 0xff, + 0xd0, 0xd5, 0x9f, 0x7d, 0xcc, 0xfe, 0xc5, 0x12, 0x2f, 0x44, 0x5e, 0x86, 0x24, + 0xad, 0xa0, 0x46, 0x26, 0xe7, 0x70, 0x1a, 0xcc, 0x68, 0xde, 0x8f, 0xd0, 0x44, + 0x5e, 0xe3, 0x04, 0x97, 0x2a, 0x14, 0x95, 0x9d, 0xa4, 0x0f, 0x59, 0x0f, 0x8f, + 0xb2, 0x0c, 0x65, 0x4b, 0x9b, 0x1b, 0xea, 0x5c, 0xa0, 0xa6, 0x8d, 0xb0, 0x61, + 0x7f, 0x5b, 0x4c, 0x6c, 0xdb, 0x53, 0x0e, 0xd1, 0x43, 0x66, 0xc1, 0x6c, 0xdb, + 0xa3, 0xfb, 0x90, 0x16, 0x70, 0x3b, 0x74, 0x4a, 0x24, 0x19, 0x72, 0x23, 0x63, + 0x6f, 0xe5, 0xa0, 0xd9, 0xe2, 0x94, 0xb0, 0x8b, 0xf2, 0x62, 0x33, 0xe1, 0x54, + 0x98, 0x65, 0x9a, 0x65, 0x0e, 0x29, 0x83, 0xd1, 0xc1, 0x05, 0x9e, 0x7e, 0xf3, + 0x85, 0xc6, 0x34, 0x65, 0x6f, 0x05, 0x28, 0xf1, 0x2c, 0xa0, 0x34, 0x20, 0x51, + 0x13, 0x41, 0xa2, 0xc3, 0xfd, 0xc2, 0x07, 0x0e, 0x74, 0x19, 0x0e, 0x43, 0x6d, + 0x95, 0xc0, 0x78, 0xa5, 0x80, 0xbb, 0x93, 0x23, 0x05, 0xfb, 0x2f, 0xbb, 0xe5, + 0xab, 0x5c, 0x9c, 0xa0, 0xa0, 0xfe, 0x18, 0x7c, 0x8e, 0xdc, 0xf6, 0x2a, 0xfb, + 0x18, 0xbf, 0x29, 0xbe, 0xa6, 0x9b, 0x54, 0x88, 0xb2, 0x6d, 0xcb, 0xe0, 0xf8, + 0x20, 0x4c, 0xd0, 0x8b, 0x56, 0x62, 0xf0, 0x52, 0xa0, 0x0f, 0xa0, 0x7d, 0xd0, + 0xe8, 0xbb, 0x2f, 0x5b, 0x61, 0x7b, 0x77, 0x09, 0x95, 0xd6, 0x1f, 0x4d, 0x99, + 0xc5, 0x67, 0xf1, 0x8a, 0xd3, 0x0f, 0xd3, 0xf9, 0xad, 0x30, 0x82, 0xb8, 0x81, + 0x81, 0xf1, 0x36, 0xa8, 0xa0, 0x32, 0xc2, 0x55, 0xb3, 0x53, 0x11, 0x96, 0xdd, + 0x5a, 0x31, 0xeb, 0xf1, 0xf4, 0x04, 0xbb, 0xb6, 0xb9, 0x0b, 0xb2, 0x96, 0x53, + 0xda, 0x9a, 0x83, 0x2d, 0x2c, 0xcc, 0x9d, 0xcb, 0x21, 0xdd, 0x8b, 0x80, + ], + [ + 0xf9, 0x02, 0x11, 0xa0, 0x5d, 0xf3, 0xe1, 0xd5, 0x98, 0x1a, 0x09, 0x9e, 0x71, + 0xac, 0x2c, 0xff, 0x76, 0x7c, 0x5b, 0x98, 0x28, 0x46, 0xc1, 0x15, 0x27, 0xe7, + 0xbc, 0x25, 0xd2, 0x30, 0x68, 0x44, 0x2f, 0xa3, 0x11, 0xcb, 0xa0, 0xc2, 0x0e, + 0xc2, 0x24, 0xdc, 0x1e, 0xa8, 0x8c, 0x9b, 0xb0, 0x15, 0xcc, 0x39, 0x55, 0xc9, + 0xa9, 0x2e, 0x00, 0xe9, 0x9b, 0x88, 0x3f, 0x4c, 0x7b, 0x9f, 0x77, 0x34, 0xb8, + 0xbf, 0xf4, 0x20, 0x6e, 0xa0, 0xb7, 0x3f, 0x00, 0xeb, 0xb6, 0xf9, 0x13, 0x34, + 0x9b, 0xc2, 0xe3, 0xbe, 0x64, 0x44, 0x86, 0x0b, 0x50, 0x2b, 0x0b, 0x47, 0x77, + 0x86, 0x68, 0xa1, 0xf0, 0x04, 0x7e, 0xbd, 0xc0, 0xc3, 0xb0, 0xa2, 0xa0, 0x2f, + 0xff, 0x2d, 0x7e, 0x8f, 0x1b, 0xa8, 0x54, 0xc0, 0x0a, 0x2e, 0x94, 0x97, 0xb3, + 0x86, 0x14, 0xa8, 0x29, 0xf4, 0xbe, 0xc2, 0xe3, 0x86, 0xed, 0x9a, 0xe4, 0x98, + 0x0f, 0xf2, 0x0c, 0x0a, 0xf4, 0xa0, 0xd4, 0x67, 0x34, 0x94, 0xc9, 0x0a, 0xed, + 0xb8, 0xde, 0x1a, 0x4a, 0xe1, 0x7d, 0xdc, 0x18, 0x55, 0x0b, 0x66, 0xaa, 0x37, + 0x0f, 0xa0, 0x95, 0x8c, 0x7a, 0xb5, 0x43, 0x56, 0x8f, 0xdf, 0xc1, 0xc5, 0xa0, + 0x9a, 0xa9, 0x87, 0x48, 0x2b, 0x50, 0xd4, 0x18, 0xc6, 0xb9, 0x82, 0x95, 0x3c, + 0x5d, 0x46, 0x9e, 0xe2, 0x1c, 0xba, 0xc8, 0x31, 0x36, 0xdf, 0xbb, 0x09, 0xad, + 0xb3, 0x09, 0x4e, 0x97, 0x07, 0x80, 0xa0, 0xea, 0x5e, 0x7f, 0x29, 0x5a, 0x4e, + 0x84, 0x78, 0x6a, 0x7a, 0x08, 0xfe, 0x2c, 0x4b, 0x38, 0x7b, 0x4b, 0x70, 0x69, + 0xec, 0x36, 0x01, 0x24, 0xeb, 0x74, 0x87, 0x25, 0x02, 0x4e, 0xec, 0xe3, 0xd2, + 0xa0, 0xbc, 0x99, 0x66, 0x30, 0x4e, 0x83, 0x0b, 0xa5, 0x21, 0x6c, 0xf2, 0xf2, + 0x8e, 0x12, 0xb7, 0xa2, 0x1c, 0x24, 0x38, 0x09, 0x81, 0x8a, 0x60, 0x11, 0xcd, + 0xfd, 0xed, 0x23, 0x85, 0xe0, 0xd9, 0x89, 0xa0, 0x8a, 0x69, 0xd8, 0x3e, 0xd3, + 0xf9, 0xec, 0x62, 0x5a, 0xe4, 0xfb, 0x69, 0x32, 0x24, 0x32, 0xf9, 0x61, 0xa2, + 0x15, 0x3f, 0x51, 0x92, 0xea, 0x8b, 0x1d, 0x1c, 0x11, 0xf5, 0x83, 0x81, 0xa4, + 0xa0, 0xa0, 0x64, 0x27, 0x8f, 0x0f, 0x75, 0x6f, 0x4a, 0x22, 0x73, 0x8a, 0x6f, + 0x1c, 0x02, 0x42, 0xe3, 0xcb, 0x6a, 0xd6, 0xd0, 0xa2, 0x7f, 0x2f, 0x6e, 0x6f, + 0xe0, 0xbe, 0x9b, 0x88, 0x01, 0x5d, 0xb4, 0xd4, 0xa0, 0x2f, 0x53, 0x68, 0xb2, + 0x99, 0x0d, 0xf4, 0x58, 0x51, 0xbc, 0x23, 0xe5, 0xf6, 0xf9, 0x8c, 0x4c, 0x6c, + 0xd1, 0xdf, 0xeb, 0x2c, 0x46, 0x19, 0x45, 0xc4, 0xfb, 0x7d, 0xae, 0x26, 0x63, + 0xd2, 0x33, 0xa0, 0x3a, 0x58, 0xae, 0xac, 0x96, 0xae, 0x02, 0x7f, 0xc7, 0x53, + 0xb6, 0x1a, 0xae, 0xaa, 0x0e, 0xde, 0xc5, 0x98, 0x3a, 0x6a, 0x84, 0x53, 0x56, + 0x26, 0xf9, 0x48, 0x4a, 0x29, 0xab, 0x96, 0xc0, 0xd9, 0xa0, 0x9d, 0x6c, 0x86, + 0x79, 0x58, 0xf0, 0x25, 0x07, 0x6d, 0xb7, 0xd0, 0x60, 0x18, 0x61, 0x48, 0xf7, + 0xca, 0x8f, 0x3e, 0xd9, 0x3b, 0x99, 0x20, 0x99, 0xee, 0x22, 0xfd, 0x32, 0x82, + 0x24, 0x97, 0xf8, 0xa0, 0xf5, 0x27, 0x98, 0x5c, 0xd4, 0xaa, 0xa4, 0xaf, 0x10, + 0xdf, 0x95, 0x06, 0xc4, 0x2f, 0x51, 0x0a, 0xf9, 0x38, 0x3f, 0x85, 0x52, 0x62, + 0x50, 0x1a, 0xe1, 0x0d, 0xd6, 0x43, 0xd6, 0x96, 0x7a, 0xcc, 0xa0, 0x7b, 0x82, + 0x6c, 0xa6, 0xe5, 0x5e, 0x5c, 0x17, 0xe8, 0xce, 0x38, 0x56, 0x9a, 0x2f, 0x3e, + 0x86, 0xc5, 0x46, 0x9b, 0x38, 0xd6, 0xf0, 0x29, 0x42, 0x49, 0x54, 0xd8, 0x66, + 0x86, 0x11, 0xfa, 0x69, 0xa0, 0x26, 0x43, 0xce, 0x1f, 0x3c, 0xf1, 0x19, 0xcb, + 0x1d, 0xf2, 0x2a, 0x9d, 0x19, 0xc0, 0xef, 0x3d, 0x80, 0x16, 0x13, 0xaf, 0x3f, + 0xbb, 0xad, 0x60, 0x33, 0x96, 0xe4, 0x9d, 0x0f, 0xdb, 0x0f, 0x89, 0x80, + ], + [ + 0xf9, 0x02, 0x11, 0xa0, 0x86, 0xe3, 0x85, 0x6d, 0x80, 0x4f, 0xa3, 0x9c, 0x36, + 0x5f, 0xb7, 0x02, 0x24, 0x0e, 0xf8, 0x3e, 0x75, 0xf2, 0xc8, 0x13, 0x44, 0xcc, + 0x84, 0xca, 0x3c, 0x77, 0x1b, 0x82, 0x65, 0xf1, 0x57, 0x57, 0xa0, 0x8f, 0x28, + 0xbe, 0x9a, 0x5e, 0x09, 0x6b, 0x5c, 0x7d, 0x90, 0x99, 0x43, 0x6b, 0xdb, 0xcd, + 0x66, 0xe8, 0x1a, 0xf0, 0x8c, 0xf2, 0x75, 0x68, 0x67, 0x38, 0x31, 0x53, 0x15, + 0x31, 0x86, 0x3d, 0x77, 0xa0, 0xdb, 0x18, 0x7f, 0x69, 0x45, 0x23, 0x79, 0xd8, + 0xf3, 0xa4, 0x78, 0x58, 0x29, 0x42, 0x90, 0xd9, 0x88, 0xd6, 0xa1, 0xc9, 0x28, + 0x56, 0xad, 0x5d, 0xa8, 0xac, 0xbd, 0xc9, 0xb4, 0x77, 0x35, 0x2b, 0xa0, 0x53, + 0xd0, 0x1d, 0xb7, 0xdf, 0x61, 0xfe, 0x94, 0x46, 0x68, 0xc2, 0x35, 0x04, 0x64, + 0x51, 0x3d, 0x80, 0x58, 0xed, 0x5d, 0xb9, 0x3c, 0x60, 0xb9, 0x4a, 0x49, 0xcc, + 0x40, 0xc6, 0x6d, 0x6e, 0x79, 0xa0, 0x5d, 0x0a, 0x7a, 0xcb, 0x5d, 0xea, 0x23, + 0xaf, 0xf2, 0x12, 0x60, 0x9a, 0xbc, 0x16, 0xff, 0x33, 0xa9, 0x20, 0xa2, 0xe0, + 0x96, 0x93, 0xb2, 0x2d, 0x1f, 0x01, 0x8b, 0xcc, 0x82, 0xc7, 0xa0, 0x1f, 0xa0, + 0x73, 0x73, 0x5d, 0x70, 0xb5, 0x40, 0xdf, 0x3e, 0xc8, 0x97, 0xd3, 0xfc, 0x15, + 0x15, 0x1c, 0x39, 0xfe, 0x03, 0x49, 0x8d, 0x3a, 0x8f, 0x81, 0x7e, 0xa1, 0x62, + 0x48, 0x6b, 0xa8, 0xcb, 0x4f, 0x33, 0xa0, 0x34, 0x79, 0x5f, 0xaf, 0xec, 0xca, + 0xa5, 0x4a, 0x54, 0x4c, 0xb8, 0xc7, 0x76, 0xea, 0x1e, 0xc4, 0x1c, 0xd2, 0x0d, + 0xd8, 0xda, 0x69, 0x75, 0x9b, 0x80, 0x99, 0xbc, 0x68, 0x23, 0x55, 0x8b, 0x1f, + 0xa0, 0x3b, 0xec, 0xd1, 0x6f, 0xb4, 0x6d, 0xc3, 0x35, 0xde, 0x25, 0x0c, 0x31, + 0x68, 0xed, 0x43, 0x69, 0x29, 0x6d, 0xa5, 0x09, 0x9f, 0x2e, 0x5e, 0x71, 0xcc, + 0xca, 0x05, 0x6d, 0x9f, 0x45, 0x3f, 0x59, 0xa0, 0x67, 0xe3, 0xac, 0x34, 0xd7, + 0x08, 0x43, 0x01, 0xbd, 0x05, 0x83, 0xef, 0x45, 0xb7, 0xdf, 0xd7, 0x3c, 0xf9, + 0xa3, 0x5b, 0xd3, 0x05, 0x41, 0x2e, 0xce, 0x2f, 0x2d, 0x11, 0x8a, 0xc0, 0x4a, + 0x65, 0xa0, 0x4d, 0xf9, 0xc9, 0x84, 0x13, 0xc3, 0xd7, 0xc4, 0xa3, 0x5d, 0x45, + 0xc3, 0xbe, 0x2c, 0x26, 0xf8, 0x52, 0x09, 0xae, 0x41, 0x99, 0x22, 0xfd, 0xf6, + 0xdf, 0xef, 0x30, 0x35, 0x3a, 0x71, 0x29, 0x48, 0xa0, 0xe7, 0x8f, 0x26, 0x08, + 0x62, 0xc2, 0x54, 0x4f, 0xb9, 0xb3, 0xa9, 0xa6, 0x67, 0x42, 0xe9, 0x5d, 0x54, + 0x04, 0xf3, 0x3d, 0xdb, 0xb8, 0xf9, 0x9a, 0x7c, 0x86, 0xe5, 0x26, 0xd6, 0x42, + 0x44, 0x48, 0xa0, 0xd3, 0x9e, 0x3b, 0x5b, 0xf4, 0x2d, 0x37, 0x85, 0xc7, 0xe1, + 0x37, 0xf1, 0x58, 0x48, 0xe8, 0x1d, 0xb4, 0xc9, 0x9a, 0x79, 0x9d, 0xc9, 0xeb, + 0xb6, 0xdb, 0xff, 0x02, 0x94, 0x46, 0x3b, 0x62, 0x36, 0xa0, 0xf4, 0xc3, 0x21, + 0xb7, 0xae, 0x6d, 0x31, 0x1c, 0xde, 0x5e, 0x2e, 0x57, 0xea, 0x51, 0x30, 0xfc, + 0x40, 0x78, 0xe8, 0x77, 0x63, 0x65, 0x5c, 0x0b, 0xe0, 0xcc, 0xee, 0x47, 0x03, + 0x16, 0x06, 0x2c, 0xa0, 0xca, 0xdb, 0xc0, 0x4d, 0xa3, 0xe6, 0xda, 0x59, 0x9b, + 0x89, 0x62, 0xa9, 0x2f, 0xa3, 0x2e, 0x2f, 0x7b, 0xb3, 0x94, 0xc0, 0xf3, 0x23, + 0x7c, 0xf3, 0x2d, 0x5c, 0x84, 0x57, 0x3b, 0xa1, 0x6f, 0x74, 0xa0, 0x15, 0xa2, + 0xa1, 0x1a, 0x3a, 0xea, 0x9c, 0x41, 0x5a, 0x1a, 0xc2, 0xf1, 0x0a, 0x63, 0xf6, + 0xb0, 0x60, 0xdf, 0xff, 0x09, 0x4a, 0xa6, 0xb8, 0x02, 0x74, 0x4f, 0xd2, 0x62, + 0x52, 0x9a, 0x4c, 0x23, 0xa0, 0xb7, 0x0f, 0x46, 0x13, 0xec, 0xc6, 0x9c, 0xbf, + 0xd5, 0xf1, 0xe4, 0x04, 0x15, 0x98, 0x1d, 0x9d, 0x56, 0x1f, 0xfa, 0x34, 0xc5, + 0xb0, 0x2e, 0x42, 0xb1, 0x57, 0x80, 0x7b, 0x11, 0xd4, 0xd5, 0x2b, 0x80, + ], + [ + 0xf8, 0xf1, 0xa0, 0x1f, 0x25, 0x47, 0xa4, 0xbc, 0x0b, 0x5d, 0x75, 0x3b, 0xf8, + 0x57, 0x40, 0xbe, 0x78, 0x5c, 0x7e, 0xcd, 0xf2, 0xe2, 0xf1, 0xe1, 0x1e, 0x34, + 0x34, 0x57, 0xc2, 0x9b, 0x3d, 0x02, 0x46, 0x4e, 0x4d, 0xa0, 0x84, 0x2a, 0xed, + 0x0d, 0x0e, 0x7d, 0x2b, 0x4f, 0x14, 0x4b, 0x4d, 0x9e, 0x13, 0xdc, 0xf5, 0xe3, + 0xfe, 0x01, 0x23, 0xef, 0xe8, 0xe3, 0x51, 0x08, 0xb8, 0x8a, 0xd8, 0x9e, 0xfb, + 0x37, 0x6e, 0xce, 0xa0, 0x24, 0x40, 0x30, 0x28, 0x20, 0xe7, 0xc6, 0xf1, 0x6c, + 0xb3, 0xd0, 0x73, 0x0a, 0x51, 0xd1, 0x8b, 0xcd, 0x9a, 0xa8, 0xd4, 0xc9, 0x3c, + 0x1f, 0x22, 0x5f, 0x04, 0xcc, 0x5b, 0xc4, 0x3f, 0xa8, 0x5e, 0x80, 0xa0, 0xd9, + 0x79, 0x2f, 0x70, 0x51, 0x44, 0x76, 0x9c, 0xcf, 0x9f, 0x5d, 0x85, 0x8d, 0xb0, + 0x18, 0x1c, 0xcc, 0x15, 0x33, 0x75, 0x2b, 0xab, 0x9c, 0x69, 0x18, 0x31, 0x8e, + 0xe4, 0x91, 0xb2, 0x39, 0x0a, 0xa0, 0x8d, 0x92, 0x75, 0x51, 0x03, 0x23, 0xb8, + 0xfb, 0xc6, 0xef, 0x85, 0x14, 0x5f, 0x09, 0xff, 0xfc, 0x01, 0xcc, 0x17, 0x6f, + 0x1b, 0x37, 0xf8, 0x40, 0xa8, 0x96, 0x95, 0x46, 0xa5, 0xf1, 0xb9, 0x0a, 0x80, + 0x80, 0xa0, 0x47, 0x17, 0x62, 0x21, 0x30, 0xfc, 0xac, 0xe5, 0xe7, 0xf6, 0xa6, + 0x33, 0x54, 0xc5, 0xdf, 0x28, 0x04, 0x12, 0x4b, 0x11, 0xfb, 0xc5, 0x02, 0x74, + 0xf1, 0xd7, 0xd8, 0x92, 0xf8, 0x13, 0xf5, 0x10, 0xa0, 0x06, 0x5b, 0x65, 0xab, + 0x3f, 0x76, 0xca, 0xbf, 0x70, 0xc9, 0xbe, 0x2b, 0xb7, 0x5e, 0x7a, 0x46, 0x68, + 0xa9, 0x81, 0x27, 0xab, 0x80, 0x45, 0x8f, 0xe0, 0x0c, 0x1f, 0xe5, 0x2b, 0x76, + 0xc4, 0xbd, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + [ + 0xf8, 0x51, 0x80, 0xa0, 0x9d, 0x22, 0x63, 0xac, 0xf1, 0x67, 0x06, 0x21, 0x86, + 0xe1, 0x84, 0xa3, 0xcd, 0x0d, 0x47, 0x2b, 0x56, 0x1d, 0x0b, 0x02, 0x6c, 0xab, + 0x96, 0xdb, 0xd9, 0x2e, 0x40, 0xb8, 0xe2, 0x95, 0xc3, 0xf1, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, 0x22, 0x25, 0x82, 0xc7, 0xd5, + 0x39, 0xbe, 0x1b, 0x34, 0xad, 0x42, 0x67, 0x5b, 0x18, 0xcd, 0xc4, 0x92, 0xce, + 0x8e, 0x81, 0x88, 0x36, 0xf7, 0x8d, 0x77, 0x5e, 0xfd, 0x28, 0x70, 0x3f, 0xe5, + 0x7a, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + [ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + ], + leaf: [ + 0xf5, 0x9e, 0x3c, 0xa7, 0xf4, 0x2e, 0x79, 0x2b, 0x65, 0x59, 0xc8, 0xba, 0xd1, 0xa8, + 0xf3, 0x5d, 0x49, 0xfd, 0xf8, 0xe3, 0xf7, 0x67, 0x76, 0xdd, 0x64, 0xfb, 0xcf, 0xe3, + 0x34, 0x7b, 0xaf, 0x52, 0x95, 0x94, 0xc3, 0x52, 0xb5, 0x34, 0xe8, 0xb9, 0x87, 0xe0, + 0x36, 0xa9, 0x35, 0x39, 0xfd, 0x68, 0x97, 0xf5, 0x34, 0x88, 0xe5, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + depth: 6, + }, + }, +]; + +pub global proofs_serialized: [[Field; 3360]; 1] = proofs + .map( + | + proof: ProofInput| { + proof.serialize() + }, + ); diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris.nr index 565a5f724..10900cea2 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/paris.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris.nr @@ -1,3 +1,3 @@ -pub(crate) mod usdc_circle; -pub(crate) mod usdc_uniswap; -pub(crate) mod bored_ape_yacht_club; +pub mod usdc_circle; +pub mod usdc_uniswap; +pub mod bored_ape_yacht_club; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club.nr index 90b31e1c6..18e33c5a0 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club.nr @@ -1,2 +1,4 @@ -pub(crate) mod header; -pub(crate) mod state_proof; +pub mod header; +pub mod state_proof; +pub mod account; +pub mod storage_proof; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/account.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/account.nr new file mode 100644 index 000000000..295bacc44 --- /dev/null +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/account.nr @@ -0,0 +1,14 @@ +use crate::{account::Account, misc::types::Bytes32}; + +global nonce: u64 = 1; +global balance: Field = 10201000000000000; +global storage_root: Bytes32 = [ + 0xf2, 0xb1, 0x58, 0x8b, 0xe2, 0x23, 0xbb, 0xb7, 0x2b, 0x6f, 0x2f, 0x2f, 0x5d, 0x25, 0xf7, 0x42, + 0x4f, 0xb0, 0x9e, 0x21, 0x23, 0x97, 0xf4, 0xd7, 0x16, 0xa6, 0xa8, 0x78, 0x5a, 0x6e, 0xda, 0x4d, +]; +global code_hash: Bytes32 = [ + 0x0b, 0xa5, 0xe2, 0x5e, 0x74, 0xd8, 0x1b, 0xab, 0x32, 0x71, 0x10, 0xc8, 0xd8, 0xb4, 0x43, 0x20, + 0xf5, 0x0a, 0xd5, 0xc3, 0xe9, 0x1a, 0x54, 0x6a, 0x5c, 0x5a, 0x9b, 0x60, 0x5c, 0xf6, 0x53, 0xb3, +]; + +pub global account: Account = Account { nonce, balance, storage_root, code_hash }; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/header.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/header.nr index df62f0c6a..048d4deeb 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/header.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/header.nr @@ -1,6 +1,75 @@ +use crate::header::BlockHeaderPartial; use crate::misc::types::Bytes32; pub(crate) global state_root: Bytes32 = [ 0x1a, 0xd7, 0xb8, 0x0a, 0xf0, 0xc2, 0x8b, 0xc1, 0x48, 0x95, 0x13, 0x34, 0x6d, 0x27, 0x06, 0x88, 0x5b, 0xe9, 0x0a, 0xbb, 0x07, 0xf2, 0x3c, 0xa2, 0x8e, 0x50, 0x48, 0x2a, 0xdb, 0x39, 0x2d, 0x61, ]; + +global number: u64 = 19000000; +global hash: Bytes32 = [ + 0xcf, 0x38, 0x40, 0x12, 0xb9, 0x1b, 0x08, 0x12, 0x30, 0xcd, 0xf1, 0x7a, 0x3f, 0x7d, 0xd3, 0x70, + 0xd8, 0xe6, 0x70, 0x56, 0x05, 0x8a, 0xf6, 0xb2, 0x72, 0xb3, 0xd5, 0x4a, 0xa2, 0x71, 0x4f, 0xac, +]; +global transactions_root: Bytes32 = [ + 0x41, 0x0d, 0x8e, 0xfe, 0x97, 0x36, 0x13, 0xf9, 0x46, 0x3b, 0xb2, 0x5a, 0x0c, 0x71, 0xcc, 0xb5, + 0x2b, 0x26, 0x48, 0x42, 0xf4, 0x87, 0x45, 0x10, 0xd7, 0x0d, 0xd7, 0x48, 0xfb, 0xbe, 0xb0, 0xb6, +]; +global receipts_root: Bytes32 = [ + 0x44, 0xdb, 0xbb, 0xb9, 0x2e, 0x05, 0x3e, 0xc5, 0x03, 0x06, 0x57, 0xcf, 0x7e, 0x85, 0x40, 0x62, + 0x60, 0x2a, 0x7d, 0xba, 0xd7, 0x89, 0x0f, 0xb4, 0x3c, 0x01, 0x00, 0x9d, 0x1d, 0x39, 0xfa, 0xf5, +]; + +global encoded_length: u32 = 565; +global encoded_data: [u8; 708] = [ + 0xf9, 0x02, 0x32, 0xa0, 0x75, 0x9e, 0x27, 0xa5, 0x06, 0x95, 0x35, 0x94, 0x9f, 0x0a, 0x72, 0x47, + 0xeb, 0xc9, 0x99, 0x36, 0x7d, 0xbd, 0x77, 0x96, 0x4d, 0x77, 0xed, 0x00, 0x4f, 0xfc, 0x8d, 0xb3, + 0xd4, 0x94, 0x02, 0x48, 0xa0, 0x1d, 0xcc, 0x4d, 0xe8, 0xde, 0xc7, 0x5d, 0x7a, 0xab, 0x85, 0xb5, + 0x67, 0xb6, 0xcc, 0xd4, 0x1a, 0xd3, 0x12, 0x45, 0x1b, 0x94, 0x8a, 0x74, 0x13, 0xf0, 0xa1, 0x42, + 0xfd, 0x40, 0xd4, 0x93, 0x47, 0x94, 0x95, 0x22, 0x22, 0x90, 0xdd, 0x72, 0x78, 0xaa, 0x3d, 0xdd, + 0x38, 0x9c, 0xc1, 0xe1, 0xd1, 0x65, 0xcc, 0x4b, 0xaf, 0xe5, 0xa0, 0x1a, 0xd7, 0xb8, 0x0a, 0xf0, + 0xc2, 0x8b, 0xc1, 0x48, 0x95, 0x13, 0x34, 0x6d, 0x27, 0x06, 0x88, 0x5b, 0xe9, 0x0a, 0xbb, 0x07, + 0xf2, 0x3c, 0xa2, 0x8e, 0x50, 0x48, 0x2a, 0xdb, 0x39, 0x2d, 0x61, 0xa0, 0x41, 0x0d, 0x8e, 0xfe, + 0x97, 0x36, 0x13, 0xf9, 0x46, 0x3b, 0xb2, 0x5a, 0x0c, 0x71, 0xcc, 0xb5, 0x2b, 0x26, 0x48, 0x42, + 0xf4, 0x87, 0x45, 0x10, 0xd7, 0x0d, 0xd7, 0x48, 0xfb, 0xbe, 0xb0, 0xb6, 0xa0, 0x44, 0xdb, 0xbb, + 0xb9, 0x2e, 0x05, 0x3e, 0xc5, 0x03, 0x06, 0x57, 0xcf, 0x7e, 0x85, 0x40, 0x62, 0x60, 0x2a, 0x7d, + 0xba, 0xd7, 0x89, 0x0f, 0xb4, 0x3c, 0x01, 0x00, 0x9d, 0x1d, 0x39, 0xfa, 0xf5, 0xb9, 0x01, 0x00, + 0x81, 0xa1, 0x01, 0x00, 0x86, 0x00, 0x14, 0x4d, 0x80, 0x40, 0x18, 0x0c, 0x8c, 0x28, 0x40, 0x02, + 0x71, 0x04, 0xa0, 0xd8, 0x00, 0x31, 0xc6, 0xf9, 0x02, 0x8b, 0x61, 0x05, 0x50, 0x22, 0x06, 0x3e, + 0x45, 0x56, 0xd4, 0x3e, 0x84, 0xa0, 0x08, 0x78, 0x02, 0xa0, 0x06, 0x08, 0x37, 0x85, 0x09, 0x00, + 0x3a, 0x83, 0xca, 0x9c, 0xfd, 0x14, 0x20, 0x24, 0x5e, 0xed, 0x68, 0xd2, 0x17, 0x28, 0x0b, 0x01, + 0x60, 0x86, 0x10, 0x09, 0x45, 0x10, 0x9e, 0x1b, 0xbc, 0x61, 0x4b, 0x28, 0xa2, 0x48, 0xa1, 0xa2, + 0xd8, 0x81, 0xe1, 0x97, 0x00, 0xc4, 0x08, 0xaa, 0x02, 0x80, 0x3d, 0x30, 0xc9, 0x2d, 0x02, 0xc0, + 0x7c, 0x81, 0x1d, 0x10, 0x02, 0x00, 0xab, 0x4f, 0x05, 0xe9, 0x50, 0x21, 0x02, 0x24, 0x08, 0x42, + 0xa0, 0x89, 0x08, 0x68, 0xa8, 0x00, 0x84, 0xcb, 0xc9, 0x60, 0x09, 0xd3, 0x04, 0x0c, 0x4d, 0x09, + 0x22, 0x1d, 0x83, 0xda, 0x89, 0x11, 0x05, 0x4c, 0x30, 0x5c, 0x62, 0x42, 0x2a, 0x0c, 0xd1, 0x28, + 0xb7, 0x52, 0x40, 0x83, 0x43, 0x12, 0xc6, 0xde, 0xa0, 0x01, 0x10, 0xc0, 0x4a, 0x18, 0xb0, 0x34, + 0x06, 0x20, 0x68, 0x80, 0x1b, 0xc0, 0x28, 0x80, 0x89, 0x90, 0x10, 0xc0, 0x0a, 0x53, 0x5d, 0x98, + 0x75, 0x35, 0x80, 0xc8, 0x30, 0xae, 0x81, 0x00, 0x3d, 0x85, 0x29, 0x74, 0x11, 0x08, 0x82, 0x5b, + 0x52, 0x50, 0x30, 0xde, 0x0a, 0x08, 0x24, 0x48, 0x09, 0x0a, 0x88, 0x46, 0x48, 0x0f, 0x99, 0x10, + 0x13, 0xe1, 0x82, 0x0a, 0x44, 0x80, 0x24, 0x55, 0x15, 0x59, 0x20, 0x5e, 0x44, 0xb5, 0xa0, 0x02, + 0x00, 0x50, 0xa9, 0x01, 0x4a, 0x14, 0xd0, 0xa0, 0x00, 0x4c, 0x20, 0x78, 0x0a, 0xa0, 0x8c, 0x31, + 0x74, 0x5e, 0xb6, 0x88, 0x42, 0x1c, 0x50, 0x54, 0x04, 0x18, 0xc0, 0x43, 0x61, 0x42, 0x4c, 0x4d, + 0x80, 0x84, 0x01, 0x21, 0xea, 0xc0, 0x84, 0x01, 0xc9, 0xc3, 0x80, 0x83, 0x92, 0xaf, 0xc9, 0x84, + 0x65, 0xa2, 0xe1, 0xc3, 0x8f, 0x62, 0x65, 0x61, 0x76, 0x65, 0x72, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x6f, 0x72, 0x67, 0xa0, 0xb4, 0x5e, 0x3f, 0xdb, 0xc1, 0xa4, 0x12, 0x16, 0xad, 0x07, 0xac, + 0x93, 0x12, 0x15, 0xc5, 0xd6, 0xdf, 0x19, 0x02, 0x17, 0xef, 0xad, 0xe2, 0x80, 0xd1, 0x82, 0x5c, + 0x4a, 0x66, 0x7a, 0xd2, 0x03, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x04, + 0xab, 0xff, 0x88, 0xbc, 0xa0, 0x5e, 0xf7, 0x85, 0xb1, 0xe2, 0x35, 0xd0, 0x64, 0x1d, 0xde, 0xd9, + 0xd2, 0xc3, 0xfd, 0x5c, 0x50, 0x10, 0x02, 0xd3, 0x53, 0x10, 0x1e, 0xd0, 0xf5, 0x34, 0x34, 0x88, + 0x1d, 0x5c, 0xa4, 0x92, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, +]; + +pub global block_header_partial: BlockHeaderPartial = + BlockHeaderPartial { number, hash, state_root, transactions_root, receipts_root }; +pub global block_header_rlp: BoundedVec = + BoundedVec::from_parts(encoded_data, encoded_length); diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/state_proof.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/state_proof.nr index 00600eb3c..bdb5c8779 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/state_proof.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/state_proof.nr @@ -1,4 +1,4 @@ -use crate::merkle_patricia_proofs::proof::{Proof, ProofInput}; +use crate::{merkle_patricia_proofs::proof::{Proof, ProofInput}, serde::Serde}; pub(crate) global proof_input: ProofInput<66, 110, 10, 148> = ProofInput { key: [ @@ -437,3 +437,5 @@ pub(crate) global proof_input: ProofInput<66, 110, 10, 148> = ProofInput { depth: 9, }, }; + +pub global proof_input_serialized: [Field; 5645] = proof_input.serialize(); diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/storage_proof.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/storage_proof.nr new file mode 100644 index 000000000..7ddb378e1 --- /dev/null +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/bored_ape_yacht_club/storage_proof.nr @@ -0,0 +1,301 @@ +use crate::account_with_storage::{ + MAX_PREFIXED_KEY_NIBBLE_LEN, MAX_STORAGE_DEPTH_NO_LEAF_M, MAX_STORAGE_LEAF_LEN, + MAX_STORAGE_VALUE_LEN, +}; +use crate::merkle_patricia_proofs::proof::{Proof, ProofInput}; +use crate::serde::Serde; + +global proofs: [ProofInput<66, 32, 6, 69>; 1] = [ + ProofInput { + key: [ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x49, 0x17, 0xea, 0x58, 0x1e, 0x0c, 0xd4, + 0xa5, 0xac, 0xda, 0x5c, 0xd3, 0xa2, 0x1b, 0xde, 0x1e, 0x38, 0x8e, 0xa5, 0xca, 0xd3, + 0xcb, 0xa1, 0x01, 0x0e, 0x39, 0x8a, 0xa6, 0x1d, 0xe1, 0x76, + ], + value: [ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x13, 0x70, + 0x24, 0xfc, 0xa6, 0xcd, 0x54, 0x2e, 0x95, 0x97, 0xd5, 0xa5, 0x51, 0xeb, 0xb1, 0xbd, + 0x12, 0xdc, 0xc7, 0x03, + ], + proof: Proof { + nodes: [ + [ + 0xf9, 0x02, 0x11, 0xa0, 0x40, 0x67, 0xb2, 0x47, 0x8e, 0x71, 0x61, 0x42, 0x27, + 0x1d, 0xf3, 0xb9, 0xba, 0x44, 0xbb, 0x23, 0x11, 0x56, 0x1e, 0x2e, 0x04, 0x32, + 0xc4, 0x06, 0xb5, 0x34, 0x72, 0xd7, 0x05, 0xf2, 0xc7, 0xc2, 0xa0, 0xf9, 0xd7, + 0xe8, 0x10, 0x25, 0x4d, 0x35, 0xcc, 0x6c, 0x1f, 0x6f, 0x80, 0x3d, 0xa8, 0xe6, + 0xa8, 0x7a, 0x2b, 0x0e, 0x6d, 0xa0, 0xc4, 0xc1, 0xbb, 0x71, 0x7a, 0x5a, 0x2a, + 0xd4, 0x94, 0x90, 0xac, 0xa0, 0x50, 0x45, 0x82, 0xf6, 0xd6, 0x11, 0x09, 0xc6, + 0x29, 0xff, 0x8f, 0x3e, 0xf5, 0xb7, 0x74, 0xea, 0xf7, 0x09, 0xe2, 0x11, 0x5b, + 0x6d, 0xbf, 0xbb, 0xcc, 0xfd, 0xec, 0x64, 0xad, 0xce, 0x66, 0x9a, 0xa0, 0x04, + 0x5f, 0x0c, 0x67, 0x82, 0x03, 0x70, 0x0b, 0x69, 0xa1, 0xc5, 0x99, 0xf1, 0x4d, + 0x34, 0xdc, 0x66, 0x47, 0xfc, 0x51, 0xeb, 0x27, 0x35, 0xab, 0x16, 0xc7, 0x2f, + 0xc7, 0xc1, 0xdb, 0x7e, 0x96, 0xa0, 0x4c, 0x98, 0xac, 0xdd, 0xe8, 0xeb, 0x3b, + 0x2f, 0xb3, 0x47, 0xf0, 0xa8, 0x9e, 0x72, 0xf0, 0x1e, 0xb1, 0x63, 0xf2, 0xb4, + 0xcd, 0x05, 0x7e, 0x51, 0xe4, 0xa6, 0x3d, 0x1e, 0x40, 0x73, 0x20, 0x9a, 0xa0, + 0x1f, 0xc2, 0x65, 0x56, 0x38, 0x8b, 0xad, 0x04, 0x2e, 0x11, 0x63, 0x26, 0x6a, + 0x3a, 0x79, 0x5a, 0xcd, 0x94, 0x13, 0x7d, 0x84, 0x2c, 0xf6, 0xf5, 0x62, 0x01, + 0xa3, 0x9e, 0x9a, 0x82, 0x49, 0x91, 0xa0, 0x06, 0x16, 0xa5, 0xeb, 0x66, 0xd6, + 0x35, 0xd2, 0xa1, 0xc4, 0xd4, 0x3a, 0x33, 0x62, 0xf5, 0x46, 0xdb, 0x2b, 0x72, + 0xb0, 0x38, 0x8a, 0x7a, 0x1a, 0xe4, 0x43, 0x18, 0xa6, 0xd9, 0x4f, 0xe1, 0xec, + 0xa0, 0x47, 0x69, 0xd3, 0x47, 0x96, 0x1e, 0x66, 0xb2, 0x74, 0xc2, 0xa7, 0xe2, + 0x88, 0x49, 0xfe, 0xf9, 0xa5, 0x85, 0x83, 0x89, 0xb8, 0x9e, 0x9f, 0xe1, 0x03, + 0xc2, 0x9d, 0x30, 0x41, 0xb2, 0xea, 0xfb, 0xa0, 0xbd, 0x77, 0x1b, 0xb3, 0x20, + 0xfd, 0xf4, 0xb2, 0xf9, 0x95, 0xf7, 0x3c, 0xad, 0x80, 0x38, 0xb7, 0x73, 0x88, + 0x09, 0x7e, 0x8f, 0x6e, 0x25, 0x71, 0xbb, 0x14, 0xcc, 0x1b, 0x91, 0x7c, 0xc2, + 0x3a, 0xa0, 0x24, 0x04, 0x64, 0xda, 0x20, 0x9a, 0x9c, 0x0e, 0xfd, 0x67, 0x03, + 0xa3, 0xbe, 0x57, 0x41, 0x5f, 0xe4, 0x33, 0x88, 0xf7, 0xe9, 0x09, 0xbe, 0x4c, + 0x01, 0x69, 0x92, 0x81, 0x51, 0x9d, 0xc9, 0x86, 0xa0, 0x38, 0x94, 0x8b, 0xd6, + 0x5b, 0x54, 0x17, 0x22, 0xe7, 0xac, 0xcf, 0xc1, 0xd4, 0xc8, 0x30, 0x55, 0x9a, + 0x80, 0xa7, 0x02, 0xf1, 0x7f, 0x1f, 0x77, 0x8a, 0x78, 0x0f, 0x54, 0x2b, 0xc7, + 0x58, 0x09, 0xa0, 0x46, 0x3c, 0xb4, 0x39, 0x57, 0xdd, 0x20, 0x15, 0x0c, 0xe1, + 0xfe, 0x0d, 0x48, 0xc7, 0xf1, 0x9c, 0x46, 0xd7, 0xe9, 0x71, 0x92, 0xe1, 0x1f, + 0x53, 0xbd, 0xa0, 0x61, 0x06, 0x85, 0x56, 0x11, 0x65, 0xa0, 0xa6, 0x4f, 0xb9, + 0x5a, 0x16, 0x32, 0x08, 0xca, 0x35, 0x4a, 0xa2, 0xad, 0x0d, 0xab, 0xf8, 0xeb, + 0x83, 0x71, 0x94, 0x68, 0x48, 0x2e, 0x7a, 0x2f, 0xec, 0xec, 0x78, 0xb8, 0x96, + 0x18, 0xa0, 0xeb, 0xa0, 0x92, 0x36, 0xb2, 0x35, 0x2d, 0x62, 0xf1, 0x82, 0x34, + 0x7c, 0xa0, 0xfe, 0x7f, 0xcd, 0x94, 0x76, 0x43, 0x06, 0x98, 0x59, 0x00, 0x54, + 0x23, 0x32, 0xc2, 0x0a, 0x08, 0xf6, 0xbd, 0x2d, 0xd1, 0xc5, 0xa0, 0x8d, 0xfd, + 0x99, 0x6f, 0x33, 0x0f, 0x42, 0xb3, 0x5d, 0x64, 0x8a, 0xa2, 0x37, 0xf9, 0xd3, + 0x29, 0xb3, 0x58, 0x3f, 0x68, 0x9d, 0x74, 0xde, 0x56, 0x86, 0xc4, 0x0b, 0x52, + 0x40, 0x5a, 0x39, 0xc2, 0xa0, 0x9a, 0xc8, 0x3c, 0xe4, 0x7e, 0x97, 0x82, 0xea, + 0x8b, 0x1f, 0x18, 0xd1, 0x39, 0x73, 0x40, 0x8a, 0x6e, 0x4d, 0x92, 0x2a, 0x85, + 0xcf, 0x7c, 0xfe, 0xde, 0x93, 0xd1, 0x87, 0x08, 0xb5, 0x15, 0xb5, 0x80, + ], + [ + 0xf9, 0x02, 0x11, 0xa0, 0x77, 0xc4, 0x41, 0x6e, 0xdb, 0xd8, 0x87, 0x8a, 0x71, + 0x7f, 0xbc, 0x44, 0x81, 0xae, 0x95, 0xff, 0xaf, 0xc9, 0xeb, 0x6f, 0x98, 0x00, + 0x15, 0x80, 0x8d, 0xfb, 0x26, 0x07, 0x84, 0xfb, 0x95, 0x3c, 0xa0, 0xba, 0x7b, + 0xc1, 0x18, 0xd4, 0x67, 0x09, 0x49, 0x25, 0xf9, 0xb3, 0xbf, 0x06, 0x7c, 0x4c, + 0xc7, 0xf3, 0xbe, 0x1f, 0x5e, 0xc1, 0x3e, 0x08, 0xf6, 0xb0, 0x33, 0x33, 0xcd, + 0x8a, 0x27, 0x9e, 0xb8, 0xa0, 0x21, 0xe0, 0x40, 0xc4, 0x0c, 0x65, 0x03, 0x2d, + 0x3e, 0x34, 0x52, 0xb2, 0x0a, 0x24, 0x12, 0x2f, 0x22, 0x0f, 0xe2, 0x1d, 0xfd, + 0x86, 0xbd, 0xdf, 0xb0, 0xe0, 0x72, 0xe4, 0x10, 0xd1, 0xea, 0xcd, 0xa0, 0x38, + 0xe9, 0xd0, 0x11, 0x35, 0xb6, 0xfd, 0xd0, 0x8f, 0x63, 0xdb, 0xe2, 0x30, 0x78, + 0x13, 0xfb, 0x97, 0xf5, 0x1a, 0x3f, 0xbc, 0x25, 0x35, 0x80, 0x35, 0x82, 0x51, + 0x8a, 0xfb, 0x13, 0x8a, 0xa9, 0xa0, 0xe8, 0xa3, 0x7b, 0x65, 0x8e, 0xe6, 0xa8, + 0xe6, 0x01, 0xca, 0x3a, 0x09, 0xb8, 0xde, 0xfb, 0x73, 0x9c, 0x72, 0xe9, 0x1f, + 0x1e, 0x70, 0xd1, 0xa5, 0xef, 0x88, 0x3f, 0x1c, 0x92, 0xd6, 0xaf, 0xb1, 0xa0, + 0x3e, 0x7f, 0x2b, 0x6b, 0x45, 0xa8, 0x2b, 0x40, 0xf8, 0x51, 0x8c, 0x79, 0x43, + 0x99, 0x11, 0xab, 0x96, 0x8f, 0xdf, 0xbc, 0xdd, 0x14, 0x8e, 0x87, 0xa8, 0x50, + 0x68, 0x14, 0xef, 0xd5, 0x3c, 0x7e, 0xa0, 0x76, 0x6c, 0x6f, 0x24, 0xff, 0xa7, + 0x01, 0xc4, 0x7f, 0x27, 0x99, 0x52, 0x45, 0x1f, 0xb5, 0xab, 0x80, 0xd8, 0x8f, + 0x6d, 0x45, 0xee, 0x5f, 0xcc, 0xce, 0x51, 0x02, 0xea, 0xa5, 0x95, 0x66, 0x29, + 0xa0, 0x11, 0xb8, 0x3e, 0x91, 0xd8, 0xfb, 0x3e, 0xa6, 0xf2, 0x0d, 0xed, 0x04, + 0x2a, 0x4f, 0x3f, 0xb1, 0x14, 0x40, 0xa5, 0x7d, 0x45, 0xfe, 0xd0, 0x59, 0xe1, + 0x38, 0x46, 0x61, 0x5b, 0xc7, 0xab, 0xf7, 0xa0, 0xb4, 0x0d, 0x80, 0xe1, 0x0a, + 0x73, 0x7f, 0x54, 0x12, 0x02, 0xb2, 0xb1, 0xcd, 0x45, 0x3a, 0xb1, 0x1a, 0xa5, + 0xc3, 0x65, 0x75, 0xdb, 0x97, 0x1d, 0xa9, 0x84, 0x35, 0x96, 0xef, 0x97, 0xc2, + 0xe1, 0xa0, 0x0a, 0x0d, 0xb9, 0x6f, 0x35, 0x92, 0x79, 0x0a, 0xa5, 0xa0, 0x59, + 0x18, 0xdd, 0x5f, 0xf5, 0xb0, 0x15, 0x38, 0xbd, 0x27, 0xca, 0xd1, 0x86, 0xc0, + 0x23, 0xed, 0x84, 0x44, 0x51, 0xf5, 0xbc, 0x51, 0xa0, 0x6c, 0x57, 0x9b, 0x8f, + 0x05, 0x05, 0x76, 0xab, 0x21, 0x98, 0xce, 0xdc, 0x99, 0x8e, 0x56, 0x1b, 0x98, + 0xb5, 0x06, 0x54, 0x36, 0xfb, 0x44, 0x03, 0xe4, 0xfa, 0xc7, 0xa8, 0x29, 0x15, + 0x6d, 0x58, 0xa0, 0x08, 0x00, 0x2a, 0xc7, 0x26, 0xa4, 0x1a, 0xe2, 0x0a, 0xc1, + 0x3e, 0x0d, 0x7d, 0xfc, 0x46, 0xc7, 0x8a, 0x54, 0x25, 0xda, 0x96, 0xd1, 0x88, + 0x51, 0xc1, 0xce, 0x65, 0x3a, 0xfc, 0x12, 0x78, 0x4d, 0xa0, 0xe6, 0x25, 0x4f, + 0x4f, 0xb2, 0x0b, 0x56, 0x64, 0x1d, 0x75, 0x01, 0xd4, 0xdb, 0x61, 0xa1, 0xdf, + 0xc4, 0x2a, 0x8e, 0x43, 0x9a, 0x71, 0x70, 0xb2, 0x39, 0x02, 0x63, 0xd9, 0x24, + 0x0c, 0x56, 0x6b, 0xa0, 0xba, 0x5c, 0xbc, 0xf2, 0x02, 0x53, 0x93, 0x06, 0xfe, + 0xb5, 0x27, 0x7b, 0x9b, 0xfd, 0x3d, 0x2a, 0x6f, 0x85, 0x03, 0x3e, 0x25, 0x60, + 0x96, 0x63, 0x1c, 0x3e, 0x87, 0xd5, 0x98, 0x65, 0x31, 0x3e, 0xa0, 0x84, 0x44, + 0x4a, 0xf8, 0xc4, 0x8c, 0x8e, 0xf5, 0xf7, 0x24, 0x2f, 0xc2, 0x39, 0xe3, 0xe0, + 0xc5, 0x91, 0xc4, 0x58, 0x32, 0x4d, 0x75, 0xf3, 0xa5, 0xed, 0x90, 0x1f, 0x29, + 0x10, 0xcc, 0xa5, 0x26, 0xa0, 0x16, 0xbb, 0xf4, 0x40, 0x07, 0xe9, 0xfd, 0x83, + 0x91, 0xec, 0x05, 0x25, 0xe7, 0x0f, 0xe8, 0x0c, 0x80, 0xac, 0x22, 0x69, 0xfe, + 0xda, 0x70, 0x4a, 0x60, 0x0f, 0xd4, 0x87, 0xfd, 0xc1, 0x6d, 0x68, 0x80, + ], + [ + 0xf9, 0x02, 0x11, 0xa0, 0xfa, 0xdd, 0xc5, 0x0c, 0xf1, 0xc0, 0x31, 0x3e, 0xe8, + 0xbd, 0xe2, 0xb3, 0x65, 0x00, 0xbe, 0x84, 0x25, 0xf1, 0x94, 0x23, 0x18, 0x3b, + 0xa7, 0x98, 0xe2, 0x82, 0x0d, 0x59, 0x23, 0x4f, 0x98, 0x03, 0xa0, 0x91, 0xd2, + 0x1d, 0x6d, 0xf6, 0x45, 0x65, 0x9d, 0x69, 0x43, 0x93, 0x80, 0x8b, 0x80, 0x0c, + 0xc8, 0x25, 0x06, 0xd4, 0x8e, 0x9c, 0x25, 0x9e, 0xdb, 0xc5, 0xf4, 0x66, 0xc9, + 0xfe, 0x07, 0x49, 0xfd, 0xa0, 0x9c, 0x4c, 0x56, 0xeb, 0xa5, 0xce, 0x79, 0x7d, + 0x34, 0x65, 0xd9, 0x0f, 0xb2, 0x6d, 0xb0, 0xac, 0xd4, 0x44, 0x21, 0x95, 0x25, + 0x15, 0xef, 0x02, 0x7c, 0x20, 0x16, 0x22, 0xb0, 0x02, 0x73, 0x5c, 0xa0, 0x84, + 0x6a, 0xc8, 0x5d, 0x73, 0x71, 0xb1, 0x15, 0x93, 0xe3, 0xd8, 0x0a, 0x43, 0xe6, + 0x64, 0x27, 0x12, 0x0f, 0x1f, 0xae, 0x48, 0xdd, 0xfe, 0x12, 0x3d, 0xa5, 0xf7, + 0x75, 0x68, 0xa0, 0x5b, 0xaf, 0xa0, 0x8f, 0x1a, 0x47, 0x63, 0x7c, 0x30, 0x1c, + 0xc4, 0xe3, 0x9c, 0x9b, 0x6c, 0x3c, 0x55, 0x47, 0xc8, 0xf4, 0x99, 0xb4, 0x56, + 0x52, 0x77, 0x6a, 0xcf, 0xe3, 0xb9, 0xd8, 0x82, 0xba, 0x08, 0x6b, 0x2a, 0xa0, + 0x53, 0x25, 0x53, 0x47, 0x05, 0x74, 0x26, 0xa0, 0xee, 0xa2, 0x7f, 0x84, 0xfc, + 0x44, 0xb7, 0xe1, 0x97, 0x62, 0x22, 0xee, 0xbc, 0x1c, 0x70, 0x93, 0x1c, 0x3b, + 0x61, 0x08, 0x93, 0x2e, 0x91, 0x6b, 0xa0, 0xd9, 0x7f, 0xa2, 0xef, 0xe6, 0xeb, + 0x24, 0x2b, 0x7c, 0xc0, 0x46, 0xfe, 0xa8, 0xaf, 0xb7, 0xa4, 0x44, 0xdf, 0x97, + 0xb3, 0xaf, 0x87, 0x75, 0xe6, 0x03, 0x44, 0xfe, 0xd8, 0xa3, 0x04, 0x3d, 0x97, + 0xa0, 0x46, 0x94, 0x80, 0x20, 0xb4, 0xf8, 0xce, 0x95, 0x3a, 0xea, 0x44, 0x97, + 0xcc, 0xbd, 0x45, 0x87, 0x51, 0x85, 0xd1, 0x2f, 0xa6, 0xa5, 0xd6, 0x1f, 0xa9, + 0x3f, 0x17, 0xbb, 0x29, 0x68, 0x33, 0x79, 0xa0, 0x68, 0x12, 0x29, 0x78, 0x11, + 0xee, 0xd3, 0xe4, 0x33, 0xbd, 0x8c, 0x90, 0xa0, 0x0f, 0x5a, 0x91, 0x8a, 0x2e, + 0x72, 0x49, 0xc3, 0x36, 0xa7, 0xa7, 0x95, 0xd0, 0x37, 0xdc, 0x50, 0x84, 0xcc, + 0xda, 0xa0, 0x75, 0x6b, 0x65, 0xa9, 0x0f, 0x5d, 0xd5, 0xdc, 0x37, 0x89, 0x28, + 0x7f, 0xe1, 0x90, 0x1e, 0xf5, 0x3b, 0x5f, 0xf6, 0x74, 0xf3, 0x4a, 0x51, 0x34, + 0x4b, 0x11, 0x1a, 0xb4, 0xd7, 0xb7, 0x03, 0x1b, 0xa0, 0x81, 0x37, 0x35, 0x8c, + 0x2b, 0xfe, 0xa9, 0x06, 0x73, 0x94, 0xc1, 0x17, 0x20, 0x0d, 0x01, 0x78, 0xa2, + 0xc6, 0x9a, 0xde, 0x3c, 0x3a, 0xf6, 0x42, 0x78, 0x7a, 0x38, 0x39, 0x28, 0x64, + 0x0c, 0x64, 0xa0, 0xea, 0x92, 0x78, 0x3b, 0x34, 0x9a, 0xed, 0x3e, 0x70, 0x5a, + 0xff, 0xc4, 0xf4, 0x9d, 0x80, 0x0b, 0xac, 0xaf, 0xa0, 0x48, 0x74, 0x5f, 0x5c, + 0xe4, 0xad, 0x7b, 0x08, 0x97, 0xa2, 0xf7, 0xc9, 0x2f, 0xa0, 0x45, 0x6f, 0x73, + 0xa4, 0xc7, 0xe7, 0xa7, 0xb2, 0xba, 0xc0, 0x01, 0x41, 0x73, 0xc3, 0x54, 0xeb, + 0x48, 0x05, 0x17, 0x97, 0x11, 0x9a, 0xcd, 0xce, 0x99, 0xd3, 0xdf, 0x03, 0xf0, + 0xfd, 0x8a, 0x78, 0xa0, 0x59, 0xf7, 0x9d, 0xb5, 0x02, 0x65, 0xff, 0xcf, 0xc5, + 0xa9, 0x8b, 0xf4, 0xe3, 0x81, 0x23, 0x66, 0xbf, 0x6a, 0x4f, 0xa5, 0x1c, 0x47, + 0x9d, 0x1f, 0x0e, 0x8f, 0xf1, 0xf3, 0x26, 0x5b, 0xff, 0xeb, 0xa0, 0xca, 0x90, + 0xc3, 0x04, 0x2c, 0x55, 0x27, 0x70, 0xb6, 0xa8, 0x12, 0x9b, 0x50, 0xdc, 0x9b, + 0xc2, 0x11, 0x39, 0xbe, 0xf1, 0x36, 0xa7, 0xf4, 0xa2, 0x93, 0x5d, 0x39, 0xcd, + 0x31, 0x86, 0xed, 0x55, 0xa0, 0xd1, 0x07, 0x98, 0xf0, 0x4a, 0x4d, 0xb5, 0x40, + 0xf9, 0xca, 0x4a, 0x80, 0xa8, 0xb0, 0xd6, 0x34, 0xd8, 0xd2, 0x4a, 0xce, 0x04, + 0xd7, 0x3d, 0x66, 0xce, 0xae, 0x5b, 0x15, 0x20, 0xd3, 0xf1, 0x31, 0x80, + ], + [ + 0xf9, 0x01, 0x91, 0xa0, 0xdf, 0xd4, 0xc1, 0x4c, 0xf3, 0x40, 0x4e, 0xe0, 0x3c, + 0x1e, 0xc8, 0x41, 0xa4, 0x65, 0x13, 0x4b, 0x5d, 0x1d, 0x92, 0xf3, 0x3f, 0x23, + 0x85, 0x7e, 0xda, 0xd8, 0xbf, 0xbf, 0x08, 0x4d, 0x2d, 0x81, 0x80, 0xa0, 0xc8, + 0x05, 0x14, 0xb4, 0x5a, 0x3e, 0xa4, 0xa7, 0xd8, 0x78, 0x98, 0x13, 0x5d, 0x13, + 0xe2, 0x9e, 0x35, 0x26, 0x30, 0xb0, 0xa6, 0x8f, 0x7d, 0x2e, 0x1a, 0xb1, 0x71, + 0x47, 0xcb, 0x72, 0x41, 0xc1, 0xa0, 0xaa, 0x80, 0x01, 0xfc, 0xc1, 0xb4, 0x49, + 0xb6, 0xe4, 0x82, 0xde, 0x9e, 0x9a, 0x52, 0x5f, 0xda, 0x01, 0x32, 0xd5, 0x95, + 0x05, 0x90, 0xec, 0x60, 0xb4, 0x1e, 0xaf, 0xa5, 0x25, 0x7b, 0xe0, 0x46, 0xa0, + 0x4b, 0x60, 0xe8, 0x36, 0xa0, 0xdb, 0x75, 0x9f, 0x8d, 0x9b, 0x07, 0xe8, 0x6e, + 0x89, 0xb6, 0xf9, 0x93, 0x6a, 0x9d, 0x8f, 0x69, 0x98, 0x06, 0x9a, 0x38, 0xb3, + 0xf7, 0x9f, 0x45, 0xfd, 0xb1, 0xde, 0x80, 0xa0, 0xf1, 0xef, 0x91, 0xd7, 0x0b, + 0x5d, 0x93, 0x8e, 0x1d, 0x90, 0x5c, 0x9e, 0x8e, 0xa5, 0xd1, 0x11, 0x09, 0x3b, + 0xe0, 0xd9, 0xb6, 0xa7, 0x27, 0x8e, 0x6a, 0xb7, 0xc3, 0x03, 0x59, 0x3d, 0x20, + 0x50, 0xa0, 0xeb, 0x65, 0xf6, 0x77, 0xdb, 0x81, 0xbc, 0x18, 0x03, 0xc2, 0xe3, + 0x53, 0x96, 0x16, 0x0b, 0xf0, 0x96, 0x4b, 0xf2, 0xc1, 0xd5, 0x17, 0x98, 0x4d, + 0xca, 0x17, 0x85, 0x6d, 0x47, 0x80, 0x1e, 0x7c, 0xa0, 0xa8, 0x31, 0xbc, 0x0b, + 0x43, 0x6f, 0xe2, 0xe8, 0x08, 0xe2, 0xa0, 0x07, 0xff, 0xa8, 0xcf, 0x5c, 0x5a, + 0x5c, 0xbe, 0xb1, 0x33, 0xc5, 0x69, 0xc5, 0xea, 0x10, 0x33, 0x11, 0xc3, 0x7b, + 0xb0, 0x73, 0xa0, 0xd3, 0x45, 0x29, 0x51, 0xf0, 0xfc, 0xc7, 0x09, 0xae, 0xda, + 0x0f, 0x0c, 0x29, 0x43, 0x97, 0x25, 0x4b, 0x32, 0xc1, 0xde, 0x9f, 0xb6, 0x78, + 0xd8, 0xc0, 0x2b, 0x85, 0x4d, 0x58, 0x8e, 0xf4, 0xd3, 0x80, 0x80, 0xa0, 0x62, + 0x3f, 0x8d, 0x4e, 0xf2, 0x96, 0xfc, 0xe4, 0x59, 0x04, 0x94, 0x89, 0xfd, 0x9b, + 0x97, 0xed, 0x45, 0xf6, 0xfc, 0xa8, 0x94, 0x59, 0x38, 0x40, 0xe5, 0x3b, 0xaf, + 0x95, 0x42, 0x0b, 0x1e, 0x53, 0xa0, 0x54, 0x4b, 0xd3, 0x6f, 0x77, 0xcd, 0x59, + 0x93, 0x09, 0x50, 0xd0, 0xd5, 0xf5, 0x57, 0x51, 0xde, 0xa1, 0xac, 0x57, 0x07, + 0x76, 0x6a, 0x3e, 0xc3, 0x2f, 0xc4, 0x14, 0x0f, 0xbc, 0x86, 0x68, 0x6c, 0xa0, + 0x20, 0x53, 0xfc, 0xe2, 0xad, 0xdf, 0xb1, 0xef, 0x3b, 0x0c, 0xff, 0xd2, 0xba, + 0x9f, 0xfb, 0x7c, 0xd4, 0xd5, 0x4e, 0xc6, 0x5a, 0x45, 0x52, 0xe0, 0x42, 0x5b, + 0x28, 0xba, 0x6d, 0xdf, 0x00, 0xf8, 0xa0, 0x6f, 0xc3, 0xad, 0xde, 0x93, 0x45, + 0x11, 0x32, 0x0e, 0x37, 0x71, 0x79, 0xea, 0x63, 0x36, 0x25, 0xdf, 0x5d, 0xbe, + 0x08, 0xce, 0x8e, 0xd9, 0x2b, 0x68, 0xba, 0x20, 0xd3, 0x4c, 0x09, 0xfc, 0xf7, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + [ + 0xf8, 0x71, 0x80, 0xa0, 0x96, 0xb5, 0xdc, 0xad, 0xec, 0x4c, 0xcf, 0x73, 0x20, + 0xcc, 0x45, 0x0c, 0xf0, 0xa3, 0x78, 0xf5, 0xe4, 0xf6, 0xf1, 0x39, 0xcf, 0x2f, + 0x9f, 0x1f, 0x2a, 0x6c, 0xb4, 0xd5, 0xb2, 0x2b, 0xc8, 0x08, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa0, 0xd5, 0x81, 0xe1, 0xfe, 0x19, 0xb1, + 0xb8, 0xe9, 0x37, 0x72, 0x25, 0xa9, 0x07, 0x0d, 0xa7, 0x4b, 0x13, 0x23, 0x50, + 0x8e, 0xbd, 0x5b, 0xf5, 0x9c, 0x0a, 0xca, 0xf8, 0x35, 0x27, 0xae, 0x1d, 0x7b, + 0x80, 0x80, 0xa0, 0x55, 0x74, 0x2d, 0xc5, 0x25, 0x38, 0xe0, 0xdd, 0x10, 0x0e, + 0x06, 0x4e, 0x5b, 0x10, 0x8e, 0x63, 0x0e, 0xc7, 0x09, 0x4f, 0x57, 0xd9, 0x5e, + 0x47, 0xa6, 0x6a, 0xa7, 0x1f, 0xf1, 0x58, 0x04, 0x29, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + [ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + ], + leaf: [ + 0xf5, 0x9e, 0x37, 0xea, 0x58, 0x1e, 0x0c, 0xd4, 0xa5, 0xac, 0xda, 0x5c, 0xd3, 0xa2, + 0x1b, 0xde, 0x1e, 0x38, 0x8e, 0xa5, 0xca, 0xd3, 0xcb, 0xa1, 0x01, 0x0e, 0x39, 0x8a, + 0xa6, 0x1d, 0xe1, 0x76, 0x95, 0x94, 0x13, 0x70, 0x24, 0xfc, 0xa6, 0xcd, 0x54, 0x2e, + 0x95, 0x97, 0xd5, 0xa5, 0x51, 0xeb, 0xb1, 0xbd, 0x12, 0xdc, 0xc7, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ], + depth: 6, + }, + }, +]; + +pub global proofs_serialized: [[Field; 3360]; 1] = proofs + .map( + | + proof: ProofInput| { + proof.serialize() + }, + ); diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle.nr index 439edfc75..64f30b38e 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle.nr @@ -1,5 +1,5 @@ -pub(crate) mod header; -pub(crate) mod account; -pub(crate) mod state_proof; -pub(crate) mod storage; -pub(crate) mod storage_proof; +pub mod header; +pub mod account; +pub mod state_proof; +pub mod storage; +pub mod storage_proof; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/account.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/account.nr index cd434c598..09967460f 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/account.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/account.nr @@ -16,4 +16,4 @@ global code_hash: Bytes32 = [ 0x6b, 0x25, 0x33, 0x5c, 0xb1, 0x37, 0x16, 0xe0, 0xd1, 0xd3, 0x13, 0x83, 0xe6, 0xb4, 0x15, 0x05, ]; -pub(crate) global account: Account = Account { nonce, balance, storage_root, code_hash }; +pub global account: Account = Account { nonce, balance, storage_root, code_hash }; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/header.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/header.nr index 3f739bd91..68a197b31 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/header.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/header.nr @@ -1,19 +1,19 @@ use crate::{header::BlockHeaderPartial, misc::types::Bytes32}; -pub(crate) global number: u64 = 19000000; -pub(crate) global hash: Bytes32 = [ +pub global number: u64 = 19000000; +pub global hash: Bytes32 = [ 0xcf, 0x38, 0x40, 0x12, 0xb9, 0x1b, 0x08, 0x12, 0x30, 0xcd, 0xf1, 0x7a, 0x3f, 0x7d, 0xd3, 0x70, 0xd8, 0xe6, 0x70, 0x56, 0x05, 0x8a, 0xf6, 0xb2, 0x72, 0xb3, 0xd5, 0x4a, 0xa2, 0x71, 0x4f, 0xac, ]; -pub(crate) global state_root: Bytes32 = [ +pub global state_root: Bytes32 = [ 0x1a, 0xd7, 0xb8, 0x0a, 0xf0, 0xc2, 0x8b, 0xc1, 0x48, 0x95, 0x13, 0x34, 0x6d, 0x27, 0x06, 0x88, 0x5b, 0xe9, 0x0a, 0xbb, 0x07, 0xf2, 0x3c, 0xa2, 0x8e, 0x50, 0x48, 0x2a, 0xdb, 0x39, 0x2d, 0x61, ]; -pub(crate) global transactions_root: Bytes32 = [ +pub global transactions_root: Bytes32 = [ 0x41, 0x0d, 0x8e, 0xfe, 0x97, 0x36, 0x13, 0xf9, 0x46, 0x3b, 0xb2, 0x5a, 0x0c, 0x71, 0xcc, 0xb5, 0x2b, 0x26, 0x48, 0x42, 0xf4, 0x87, 0x45, 0x10, 0xd7, 0x0d, 0xd7, 0x48, 0xfb, 0xbe, 0xb0, 0xb6, ]; -pub(crate) global receipts_root: Bytes32 = [ +pub global receipts_root: Bytes32 = [ 0x44, 0xdb, 0xbb, 0xb9, 0x2e, 0x05, 0x3e, 0xc5, 0x03, 0x06, 0x57, 0xcf, 0x7e, 0x85, 0x40, 0x62, 0x60, 0x2a, 0x7d, 0xba, 0xd7, 0x89, 0x0f, 0xb4, 0x3c, 0x01, 0x00, 0x9d, 0x1d, 0x39, 0xfa, 0xf5, ]; @@ -67,7 +67,7 @@ global encoded_data: [u8; 708] = [ 0x00, 0x00, 0x00, 0x00, ]; -pub(crate) global block_header_partial: BlockHeaderPartial = +pub global block_header_partial: BlockHeaderPartial = BlockHeaderPartial { number, hash, state_root, transactions_root, receipts_root }; -pub(crate) global block_header_rlp: BoundedVec = +pub global block_header_rlp: BoundedVec = BoundedVec::from_parts(encoded_data, encoded_length); diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/state_proof.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/state_proof.nr index bd433f4c8..1bf73724c 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/state_proof.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/state_proof.nr @@ -438,4 +438,4 @@ pub(crate) global proof_input: ProofInput<66, 110, 10, 148> = ProofInput { }, }; -pub(crate) global proof_input_serialized: [Field; 5645] = proof_input.serialize(); +pub global proof_input_serialized: [Field; 5645] = proof_input.serialize(); diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/storage.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/storage.nr index 5e059ff2b..d72562ebd 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/storage.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/storage.nr @@ -3,7 +3,7 @@ pub(crate) global keys: [[u8; 32]; 1] = [[ 0x50, 0x70, 0xdd, 0xe6, 0xc5, 0x2c, 0x68, 0x7c, 0x6d, 0x0d, 0x92, 0xfb, 0x85, 0x32, 0xb3, 0x05, ]]; -pub(crate) global values: [[u8; 32]; 1] = [[ +pub global values: [[u8; 32]; 1] = [[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x61, 0x31, 0xeb, 0x27, 0x10, ]]; diff --git a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/storage_proof.nr b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/storage_proof.nr index aae23b5f3..80cbdb333 100644 --- a/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/storage_proof.nr +++ b/ethereum/circuits/lib/src/fixtures/mainnet/paris/usdc_circle/storage_proof.nr @@ -292,7 +292,7 @@ pub(crate) global proofs: [ProofInput<66, 32, 6, 69>; 1] = [ }, ]; -pub(crate) global proofs_serialized: [[Field; 3360]; 1] = proofs +pub global proofs_serialized: [[Field; 3360]; 1] = proofs .map( | proof: ProofInput| { diff --git a/ethereum/circuits/lib/src/lib.nr b/ethereum/circuits/lib/src/lib.nr index ac019d6cc..67699a12c 100644 --- a/ethereum/circuits/lib/src/lib.nr +++ b/ethereum/circuits/lib/src/lib.nr @@ -4,7 +4,7 @@ pub mod header; mod header_int_test; pub mod account_with_storage; mod account_with_storage_int_test; -pub(crate) mod account_with_storage_recursive; +pub mod account_with_storage_recursive; mod account_with_storage_recursive_int_test; pub mod receipt; mod receipt_int_test; @@ -16,12 +16,12 @@ mod transaction_test; mod transaction_int_test; pub mod misc; mod chain; -pub(crate) mod serde; +pub mod serde; mod serde_test; -pub(crate) mod uint256; +pub mod uint256; mod uint256_test; -pub(crate) mod fixtures; +pub mod fixtures; pub(crate) mod verifiers; pub(crate) mod merkle_patricia_proofs; pub(crate) mod rlp; diff --git a/ethereum/circuits/lib/src/misc.nr b/ethereum/circuits/lib/src/misc.nr index 6526efe87..3cf54570d 100644 --- a/ethereum/circuits/lib/src/misc.nr +++ b/ethereum/circuits/lib/src/misc.nr @@ -1,4 +1,4 @@ -pub(crate) mod arrays; +pub mod arrays; mod arrays_test; pub(crate) mod bounded_vecs; mod bounded_vecs_test; diff --git a/ethereum/circuits/lib/src/misc/bytes32.nr b/ethereum/circuits/lib/src/misc/bytes32.nr index df2f7168b..3352337de 100644 --- a/ethereum/circuits/lib/src/misc/bytes32.nr +++ b/ethereum/circuits/lib/src/misc/bytes32.nr @@ -1,6 +1,6 @@ use crate::misc::types::Bytes32; -pub(crate) global MAX_FIELD_VALUE: Field = +pub global MAX_FIELD_VALUE: Field = 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000; pub fn address_to_bytes32(address: [u8; 20]) -> Bytes32 { diff --git a/ethereum/circuits/lib/src/misc/bytes32_test.nr b/ethereum/circuits/lib/src/misc/bytes32_test.nr index a268f31eb..da39dc607 100644 --- a/ethereum/circuits/lib/src/misc/bytes32_test.nr +++ b/ethereum/circuits/lib/src/misc/bytes32_test.nr @@ -1,7 +1,6 @@ -global MAX_FIELD_VALUE: Field = 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000; mod field_to_bytes32 { use crate::misc::bytes32::field_to_bytes32; - use crate::misc::bytes32_test::MAX_FIELD_VALUE; + use crate::misc::bytes32::MAX_FIELD_VALUE; #[test] fn zero() { diff --git a/ethereum/circuits/lib/src/serde.nr b/ethereum/circuits/lib/src/serde.nr index de26d0fb0..b3df4d68c 100644 --- a/ethereum/circuits/lib/src/serde.nr +++ b/ethereum/circuits/lib/src/serde.nr @@ -17,7 +17,7 @@ use crate::receipt::{ }; use crate::uint256::U256; -pub(crate) trait Serde { +pub trait Serde { fn serialize(self) -> [Field; LEN]; fn deserialize(data: [Field; LEN]) -> Self; } diff --git a/ethereum/circuits/lib/src/uint256.nr b/ethereum/circuits/lib/src/uint256.nr index 961b26f78..02a9ed423 100644 --- a/ethereum/circuits/lib/src/uint256.nr +++ b/ethereum/circuits/lib/src/uint256.nr @@ -5,25 +5,25 @@ use dep::std::ops::Add; global uint128_overflow_value: Field = 340282366920938463463374607431768211456; // 2^128 -pub(crate) struct U256 { +pub struct U256 { pub(crate) high: u128, pub(crate) low: u128, } impl U256 { - pub(crate) fn new(high: u128, low: u128) -> Self { + pub fn new(high: u128, low: u128) -> Self { Self { high, low } } - pub(crate) fn zero() -> Self { + pub fn zero() -> Self { Self { high: 0, low: 0 } } - pub(crate) fn one() -> Self { + pub fn one() -> Self { Self { high: 0, low: 1 } } - pub(crate) fn from_field(field: Field) -> Self { + pub fn from_field(field: Field) -> Self { U256::from(field_to_bytes32(field)) } } diff --git a/ethereum/circuits/lib/src/verifiers.nr b/ethereum/circuits/lib/src/verifiers.nr index 6d940d4fc..c5369d369 100644 --- a/ethereum/circuits/lib/src/verifiers.nr +++ b/ethereum/circuits/lib/src/verifiers.nr @@ -1,4 +1,4 @@ -pub(crate) mod account; +pub mod account; mod account_test; pub(crate) mod header; mod header_test; diff --git a/vlayer/ethereum/circuits/lib/src/chain_id.nr b/vlayer/ethereum/circuits/lib/src/chain_id.nr index f3ae91ea3..67089ab1e 100644 --- a/vlayer/ethereum/circuits/lib/src/chain_id.nr +++ b/vlayer/ethereum/circuits/lib/src/chain_id.nr @@ -1,14 +1,14 @@ -global MAINNET = 1; -global ROPSTEN = 3; -global RINKEBY = 4; -global GOERLI = 5; -global OPTIMISM = 10; -global KOVAN = 42; -global BNB = 56; -global POLYGON = 137; -global BASE = 8453; -global ARBITRUM = 42161; -global CELO = 42220; -global AVALANCHE = 43114; -global MUMBAI = 80001; -global SEPOLIA = 11155111; +pub(crate) global MAINNET: u32 = 1; +//global ROPSTEN: u32 = 3; +//global RINKEBY: u32 = 4; +//global GOERLI: u32 = 5; +//global OPTIMISM: u32 = 10; +//global KOVAN: u32 = 42; +//global BNB: u32 = 56; +//global POLYGON: u32 = 137; +//global BASE: u32 = 8453; +//global ARBITRUM: u32 = 42161; +//global CELO: u32 = 42220; +//global AVALANCHE: u32 = 43114; +//global MUMBAI: u32 = 80001; +//pub(crate) global SEPOLIA: u32 = 11155111; diff --git a/vlayer/ethereum/circuits/lib/src/lib.nr b/vlayer/ethereum/circuits/lib/src/lib.nr index a0b8d5d4d..e7bf237e2 100644 --- a/vlayer/ethereum/circuits/lib/src/lib.nr +++ b/vlayer/ethereum/circuits/lib/src/lib.nr @@ -1,8 +1,8 @@ -pub(crate) mod token; +pub mod token; mod token_int_test; pub(crate) mod slot; mod slot_test; -pub(crate) mod token_list; +pub mod token_list; pub(crate) mod chain_id; -pub(crate) mod nft; -mod nft_list; +pub mod nft; +pub mod nft_list; diff --git a/vlayer/ethereum/circuits/lib/src/nft.nr b/vlayer/ethereum/circuits/lib/src/nft.nr index f445eb7ab..3d1f5f5e5 100644 --- a/vlayer/ethereum/circuits/lib/src/nft.nr +++ b/vlayer/ethereum/circuits/lib/src/nft.nr @@ -8,12 +8,12 @@ use dep::ethereum::{ }; pub struct ERC721Token { - address: Address, - token_id_to_slot: fn(Bytes32) -> U256, - chain_id: Field, + pub address: Address, + pub token_id_to_slot: fn(Bytes32) -> U256, + pub chain_id: u32, } -trait ERC721 { +pub trait ERC721 { fn get_owner(self, token_id: Bytes32, block_number: u64) -> Address; } diff --git a/vlayer/ethereum/circuits/lib/src/nft_list.nr b/vlayer/ethereum/circuits/lib/src/nft_list.nr index 20b4c45f2..f8e66935a 100644 --- a/vlayer/ethereum/circuits/lib/src/nft_list.nr +++ b/vlayer/ethereum/circuits/lib/src/nft_list.nr @@ -1,8 +1,8 @@ -mod mainnet { +pub mod mainnet { use crate::chain_id; use crate::nft::ERC721Token; use crate::slot::{dynamic_array_with_precalculated_slot, mapping, struct_slot}; - use dep::ethereum::{misc::{bytes32::field_to_bytes32, types::Bytes32}, uint256::U256}; + use dep::ethereum::uint256::U256; use dep::std::field::bytes32_to_field; pub fn BORED_APE_YACHT_CLUB() -> ERC721Token { @@ -55,42 +55,3 @@ mod mainnet { } } } - -mod sepolia { - use crate::chain_id; - use crate::nft::ERC721Token; - use crate::slot::{dynamic_array_with_precalculated_slot, struct_slot}; - use dep::ethereum::{misc::{bytes32::field_to_bytes32, types::Bytes32}, uint256::U256}; - use dep::std::field::bytes32_to_field; - - // free mint: https://sepolia.etherscan.io/address/0x80d97726548fedae6ad7cf8df4f2b514fd24afba#readContract - fn FAKE_BORED_APE_YACHT_CLUB() -> ERC721Token { - ERC721Token { - address: [ - 0x80, 0xd9, 0x77, 0x26, 0x54, 0x8f, 0xed, 0xae, 0x6a, 0xd7, 0xcf, 0x8d, 0xf4, 0xf2, - 0xb5, 0x14, 0xfd, 0x24, 0xaf, 0xba, - ], - token_id_to_slot: |token_id| { - let BORED_APE_YACHT_CLUB_MAX_TOKEN_ID: u32 = 9999; - let BORED_APE_YACHT_CLUB_TOKEN_OWNERS_INNER_ENTRIES_SLOT = U256::from([ - 0x40, 0x57, 0x87, 0xfa, 0x12, 0xa8, 0x23, 0xe0, 0xf2, 0xb7, 0x63, 0x1c, 0xc4, - 0x1b, 0x3b, 0xa8, 0x82, 0x8b, 0x33, 0x21, 0xca, 0x81, 0x11, 0x11, 0xfa, 0x75, - 0xcd, 0x3a, 0xa3, 0xbb, 0x5a, 0xce, - ]); - let VALUE_INDEX = 1; - - assert( - bytes32_to_field(token_id) as u32 <= BORED_APE_YACHT_CLUB_MAX_TOKEN_ID, - "Token ID is too high", - ); - let owner_slot = dynamic_array_with_precalculated_slot( - BORED_APE_YACHT_CLUB_TOKEN_OWNERS_INNER_ENTRIES_SLOT, - 2, - bytes32_to_field(token_id), - ); - struct_slot(owner_slot, VALUE_INDEX) - }, - chain_id: chain_id::SEPOLIA, - } - } -} diff --git a/vlayer/ethereum/circuits/lib/src/slot.nr b/vlayer/ethereum/circuits/lib/src/slot.nr index 5afc76fce..c88a93da5 100644 --- a/vlayer/ethereum/circuits/lib/src/slot.nr +++ b/vlayer/ethereum/circuits/lib/src/slot.nr @@ -2,7 +2,7 @@ use dep::ethereum::misc::types::Bytes32; use dep::ethereum::uint256::U256; use dep::keccak256::keccak256; -global STORAGE_KEY_HASH_INPUT_LENGTH = 64; +global STORAGE_KEY_HASH_INPUT_LENGTH: u32 = 64; pub(crate) fn mapping(slot: U256, key: Bytes32) -> U256 { let mut vector: BoundedVec = BoundedVec::new(); diff --git a/vlayer/ethereum/circuits/lib/src/slot_test.nr b/vlayer/ethereum/circuits/lib/src/slot_test.nr index 907ca2c67..ebcc587cf 100644 --- a/vlayer/ethereum/circuits/lib/src/slot_test.nr +++ b/vlayer/ethereum/circuits/lib/src/slot_test.nr @@ -60,7 +60,7 @@ mod mapping { mod dynamic_array { use crate::slot::dynamic_array; - use dep::ethereum::misc::{bytes32::field_to_bytes32, bytes32_test::MAX_FIELD_VALUE}; + use dep::ethereum::misc::bytes32::MAX_FIELD_VALUE; use dep::ethereum::uint256::U256; #[test] @@ -94,7 +94,7 @@ mod dynamic_array { mod dynamic_array_with_precalculated_slot { use crate::slot::dynamic_array_with_precalculated_slot; - use dep::ethereum::misc::{bytes32::field_to_bytes32, bytes32_test::MAX_FIELD_VALUE}; + use dep::ethereum::misc::bytes32::MAX_FIELD_VALUE; use dep::ethereum::uint256::U256; #[test] @@ -129,7 +129,6 @@ mod dynamic_array_with_precalculated_slot { mod struct_slot { use crate::slot::struct_slot; - use dep::ethereum::misc::bytes32::field_to_bytes32; use dep::ethereum::uint256::U256; #[test] diff --git a/vlayer/ethereum/circuits/lib/src/token.nr b/vlayer/ethereum/circuits/lib/src/token.nr index c73689d44..9405e8a36 100644 --- a/vlayer/ethereum/circuits/lib/src/token.nr +++ b/vlayer/ethereum/circuits/lib/src/token.nr @@ -7,13 +7,13 @@ use dep::ethereum::{ use dep::ethereum::uint256::U256; use dep::std::field::bytes32_to_field; -global TOKEN_BALANCE_INDEX = 0; +global TOKEN_BALANCE_INDEX: u32 = 0; -struct ERC20Token { - address: Address, - balances_slot: U256, - allowances_slot: U256, - chain_id: Field, +pub struct ERC20Token { + pub address: Address, + pub balances_slot: U256, + pub allowances_slot: U256, + pub chain_id: u32, } impl ERC20Token { @@ -22,7 +22,7 @@ impl ERC20Token { } } -trait ERC20 { +pub trait ERC20 { fn get_balance(self, wallet_address: Address, block_number: u64, recursive: bool) -> u128; } diff --git a/vlayer/ethereum/circuits/lib/src/token_int_test.nr b/vlayer/ethereum/circuits/lib/src/token_int_test.nr index fe047fe6c..e533e4ef9 100644 --- a/vlayer/ethereum/circuits/lib/src/token_int_test.nr +++ b/vlayer/ethereum/circuits/lib/src/token_int_test.nr @@ -1,5 +1,6 @@ mod test_ERC20Token { use crate::chain_id::MAINNET; + use crate::token::ERC20; use crate::token::ERC20Token; use dep::ethereum::account_with_storage::StorageWithinBlock; use dep::ethereum::account_with_storage_recursive::RecursiveProof; @@ -7,13 +8,13 @@ mod test_ERC20Token { account::account, header::{ block_header_partial as paris_block_header_partial, - block_header_rlp as paris_block_header_rlp, hash, number, receipts_root, state_root, - transactions_root, + block_header_rlp as paris_block_header_rlp, hash, }, state_proof::proof_input_serialized as state_proof_input_serialized, storage::values, storage_proof::proofs_serialized, }; + use dep::ethereum::serde::Serde; use dep::ethereum::uint256::U256; use dep::std::test::OracleMock; @@ -22,16 +23,22 @@ mod test_ERC20Token { let result = StorageWithinBlock { block_hash: hash, account, values }; let recursive_proof = RecursiveProof { key_hash: 1, verification_key: [0; 114], proof: [0; 93] }; - - let _ = OracleMock::mock("get_storage_recursive").returns(( - result.serialize(), recursive_proof, - )); - let _ = OracleMock::mock("get_header").returns(( - paris_block_header_partial, paris_block_header_rlp, - )); - let _ = OracleMock::mock("get_proof").returns(( - account, state_proof_input_serialized, proofs_serialized[0], - )); + // Safety: test + let _ = unsafe { + OracleMock::mock("get_storage_recursive").returns((result.serialize(), recursive_proof)) + }; + // Safety: test + let _ = unsafe { + OracleMock::mock("get_header").returns(( + paris_block_header_partial, paris_block_header_rlp, + )) + }; + // Safety: test + let _ = unsafe { + OracleMock::mock("get_proof").returns(( + account, state_proof_input_serialized, proofs_serialized[0], + )) + }; let usdc_token = ERC20Token { address: [ @@ -49,7 +56,7 @@ mod test_ERC20Token { ]; let block_number = 19000000; let balance = usdc_token.get_balance(circle_address, block_number, false); - let expected_usdc_balnce_of_circle = U128::from_integer(125761774888720); + let expected_usdc_balnce_of_circle = 125761774888720; assert_eq(expected_usdc_balnce_of_circle, balance); } } diff --git a/vlayer/ethereum/circuits/lib/src/token_list.nr b/vlayer/ethereum/circuits/lib/src/token_list.nr index 6a3b5d175..b1bee9417 100644 --- a/vlayer/ethereum/circuits/lib/src/token_list.nr +++ b/vlayer/ethereum/circuits/lib/src/token_list.nr @@ -1,9 +1,9 @@ -mod mainnet { +pub mod mainnet { use crate::chain_id; use crate::token::ERC20Token; use dep::ethereum::uint256::U256; - global USDC = ERC20Token { + pub global USDC: ERC20Token = ERC20Token { address: [ 0xa0, 0xb8, 0x69, 0x91, 0xc6, 0x21, 0x8b, 0x36, 0xc1, 0xd1, 0x9d, 0x4a, 0x2e, 0x9e, 0xb0, 0xce, 0x36, 0x06, 0xeb, 0x48, @@ -12,121 +12,4 @@ mod mainnet { allowances_slot: U256::from_field(10), chain_id: chain_id::MAINNET, }; - - global TETHER_USD = ERC20Token { - address: [ - 0xda, 0xc1, 0x7f, 0x95, 0x8d, 0x2e, 0xe5, 0x23, 0xa2, 0x20, 0x62, 0x06, 0x99, 0x45, - 0x97, 0xc1, 0x3d, 0x83, 0x1e, 0xc7, - ], - balances_slot: U256::from_field(2), - allowances_slot: U256::from_field(5), - chain_id: chain_id::MAINNET, - }; - - global UNISWAP = ERC20Token { - address: [ - 0x1f, 0x98, 0x40, 0xa8, 0x5d, 0x5a, 0xf5, 0xbf, 0x1d, 0x17, 0x62, 0xf9, 0x25, 0xbd, - 0xad, 0xdc, 0x42, 0x01, 0xf9, 0x84, - ], - balances_slot: U256::from_field(4), - allowances_slot: U256::from_field(3), - chain_id: chain_id::MAINNET, - }; - - global WBTC = ERC20Token { - address: [ - 0x22, 0x60, 0xfa, 0xc5, 0xe5, 0x54, 0x2a, 0x77, 0x3a, 0xa4, 0x4f, 0xbc, 0xfe, 0xdf, - 0x7c, 0x19, 0x3b, 0xc2, 0xc5, 0x99, - ], - balances_slot: U256::from_field(0), - allowances_slot: U256::from_field(2), - chain_id: chain_id::MAINNET, - }; - - global EZETH = ERC20Token { - address: [ - 0xbf, 0x54, 0x95, 0xef, 0xe5, 0xdb, 0x9c, 0xe0, 0x0f, 0x80, 0x36, 0x4c, 0x8b, 0x42, - 0x35, 0x67, 0xe5, 0x8d, 0x21, 0x10, - ], - balances_slot: U256::from_field(33), - allowances_slot: U256::from_field(34), - chain_id: chain_id::MAINNET, - }; - - global WEETH = ERC20Token { - address: [ - 0xcd, 0x5f, 0xe2, 0x3c, 0x85, 0x82, 0x0f, 0x7b, 0x72, 0xd0, 0x92, 0x6f, 0xc9, 0xb0, - 0x5b, 0x43, 0xe3, 0x59, 0xb7, 0xee, - ], - balances_slot: U256::from_field(65), - allowances_slot: U256::from_field(66), - chain_id: chain_id::MAINNET, - }; - - global DAI = ERC20Token { - address: [ - 0x6b, 0x17, 0x54, 0x74, 0xe8, 0x90, 0x94, 0xc4, 0x4d, 0xa9, 0x8b, 0x95, 0x4e, 0xed, - 0xea, 0xc4, 0x95, 0x27, 0x1d, 0x0f, - ], - balances_slot: U256::from_field(2), - allowances_slot: U256::from_field(3), - chain_id: chain_id::MAINNET, - }; - - global WSTETH = ERC20Token { - address: [ - 0x7f, 0x39, 0xc5, 0x81, 0xf5, 0x95, 0xb5, 0x3c, 0x5c, 0xb1, 0x9b, 0xd0, 0xb3, 0xf8, - 0xda, 0x6c, 0x93, 0x5e, 0x2c, 0xa0, - ], - balances_slot: U256::from_field(0), - allowances_slot: U256::from_field(1), - chain_id: chain_id::MAINNET, - }; - - global USDe = ERC20Token { - address: [ - 0x4c, 0x9e, 0xdd, 0x58, 0x52, 0xcd, 0x90, 0x5f, 0x08, 0x6c, 0x75, 0x9e, 0x83, 0x83, - 0xe0, 0x9b, 0xff, 0x1e, 0x68, 0xb3, - ], - balances_slot: U256::from_field(2), - allowances_slot: U256::from_field(3), - chain_id: chain_id::MAINNET, - }; - - global PEPE = ERC20Token { - address: [ - 0x69, 0x82, 0x50, 0x81, 0x45, 0x45, 0x4c, 0xe3, 0x25, 0xdd, 0xbe, 0x47, 0xa2, 0x5d, - 0x4e, 0xc3, 0xd2, 0x31, 0x19, 0x33, - ], - balances_slot: U256::from_field(1), - allowances_slot: U256::from_field(2), - chain_id: chain_id::MAINNET, - }; - - global MKR = ERC20Token { - address: [ - 0x9f, 0x8f, 0x72, 0xaa, 0x93, 0x04, 0xc8, 0xb5, 0x93, 0xd5, 0x55, 0xf1, 0x2e, 0xf6, - 0x58, 0x9c, 0xc3, 0xa5, 0x79, 0xa2, - ], - balances_slot: U256::from_field(1), - allowances_slot: U256::from_field(2), - chain_id: chain_id::MAINNET, - }; -} - -mod sepolia { - use crate::chain_id; - use crate::token::ERC20Token; - use dep::ethereum::uint256::U256; - - // free mint: https://sepolia.etherscan.io/token/0x4f657a53e27e83ee7d3df8452abfd57d658765d6 - global FakePEPE = ERC20Token { - address: [ - 0x4f, 0x65, 0x7a, 0x53, 0xe2, 0x7e, 0x83, 0xee, 0x7d, 0x3d, 0xf8, 0x45, 0x2a, 0xbf, - 0xd5, 0x7d, 0x65, 0x87, 0x65, 0xd6, - ], - balances_slot: U256::from_field(1), - allowances_slot: U256::from_field(2), - chain_id: chain_id::SEPOLIA, - }; } diff --git a/vlayer/examples/circuits/is_ape_owner/src/main.nr b/vlayer/examples/circuits/is_ape_owner/src/main.nr index dca3aa16f..f2492035d 100644 --- a/vlayer/examples/circuits/is_ape_owner/src/main.nr +++ b/vlayer/examples/circuits/is_ape_owner/src/main.nr @@ -1,6 +1,5 @@ -use dep::ethereum::misc::bytes32::field_to_bytes32; use dep::ethereum::misc::types::Address; -use dep::std::field::bytes32_to_field; +use dep::token::nft::ERC721; use dep::token::nft_list::mainnet::BORED_APE_YACHT_CLUB; mod main_test; diff --git a/vlayer/examples/circuits/is_ape_owner/src/main_test.nr b/vlayer/examples/circuits/is_ape_owner/src/main_test.nr index 4acfa64ea..c3957fa49 100644 --- a/vlayer/examples/circuits/is_ape_owner/src/main_test.nr +++ b/vlayer/examples/circuits/is_ape_owner/src/main_test.nr @@ -10,24 +10,30 @@ mod is_ape_owner_main { state_proof::proof_input_serialized as state_proof_input_serialized, storage_proof::proofs_serialized, }, - misc::arrays::alter_array, + misc::{arrays::alter_array, types::Address}, }; use dep::std::test::OracleMock; - global BORED_APE_OWNER_WALLER_ADDRESS = [ + global BORED_APE_OWNER_WALLER_ADDRESS: Address = [ 0x13, 0x70, 0x24, 0xfc, 0xa6, 0xcd, 0x54, 0x2e, 0x95, 0x97, 0xd5, 0xa5, 0x51, 0xeb, 0xb1, 0xbd, 0x12, 0xdc, 0xc7, 0x03, ]; - global BLOCK_NUMBER = 19_000_000; + global BLOCK_NUMBER: u64 = 19_000_000; #[test] fn success() { - let _ = OracleMock::mock("get_header").returns(( - paris_block_header_partial, paris_block_header_rlp, - )); - let _ = OracleMock::mock("get_proof").returns(( - account, state_proof_input_serialized, proofs_serialized[0], - )); + // Safety: test + let _ = unsafe { + OracleMock::mock("get_header").returns(( + paris_block_header_partial, paris_block_header_rlp, + )) + }; + // Safety: test + let _ = unsafe { + OracleMock::mock("get_proof").returns(( + account, state_proof_input_serialized, proofs_serialized[0], + )) + }; let token_id = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -38,12 +44,18 @@ mod is_ape_owner_main { #[test(should_fail_with = "Owner is not the same as the wallet address")] fn invalid_wallet() { - let _ = OracleMock::mock("get_header").returns(( - paris_block_header_partial, paris_block_header_rlp, - )); - let _ = OracleMock::mock("get_proof").returns(( - account, state_proof_input_serialized, proofs_serialized[0], - )); + // Safety: test + let _ = unsafe { + OracleMock::mock("get_header").returns(( + paris_block_header_partial, paris_block_header_rlp, + )) + }; + // Safety: test + let _ = unsafe { + OracleMock::mock("get_proof").returns(( + account, state_proof_input_serialized, proofs_serialized[0], + )) + }; let token_id = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/vlayer/examples/circuits/is_crypto_punk_owner/src/main.nr b/vlayer/examples/circuits/is_crypto_punk_owner/src/main.nr index 7503a4bbf..e1a2634c5 100644 --- a/vlayer/examples/circuits/is_crypto_punk_owner/src/main.nr +++ b/vlayer/examples/circuits/is_crypto_punk_owner/src/main.nr @@ -1,6 +1,6 @@ use dep::ethereum::misc::bytes32::field_to_bytes32; use dep::ethereum::misc::types::Address; -use dep::std::field::bytes32_to_field; +use dep::token::nft::ERC721; use dep::token::nft_list::mainnet::CRYPTO_PUNK; mod main_test; diff --git a/vlayer/examples/circuits/is_crypto_punk_owner/src/main_test.nr b/vlayer/examples/circuits/is_crypto_punk_owner/src/main_test.nr index eea05b77e..45c554581 100644 --- a/vlayer/examples/circuits/is_crypto_punk_owner/src/main_test.nr +++ b/vlayer/examples/circuits/is_crypto_punk_owner/src/main_test.nr @@ -10,36 +10,48 @@ mod is_crypto_punk_owner_main { state_proof::proof_input_serialized as state_proof_input_serialized, storage_proof::proofs_serialized, }, - misc::arrays::alter_array, + misc::{arrays::alter_array, types::Address}, }; use dep::std::test::OracleMock; - global CRYPTO_PUNK_OWNER_WALLER_ADDRESS = [ + global CRYPTO_PUNK_OWNER_WALLER_ADDRESS: Address = [ 0xc3, 0x52, 0xb5, 0x34, 0xe8, 0xb9, 0x87, 0xe0, 0x36, 0xa9, 0x35, 0x39, 0xfd, 0x68, 0x97, 0xf5, 0x34, 0x88, 0xe5, 0x6a, ]; - global BLOCK_NUMBER = 14_194_126; + global BLOCK_NUMBER: u64 = 14_194_126; #[test] fn success() { - let _ = OracleMock::mock("get_header").returns(( - london_block_header_partial, london_block_header_rlp, - )); - let _ = OracleMock::mock("get_proof").returns(( - account, state_proof_input_serialized, proofs_serialized[0], - )); + // Safety: test + let _ = unsafe { + OracleMock::mock("get_header").returns(( + london_block_header_partial, london_block_header_rlp, + )) + }; + // Safety: test + let _ = unsafe { + OracleMock::mock("get_proof").returns(( + account, state_proof_input_serialized, proofs_serialized[0], + )) + }; let token_id = 9; main(CRYPTO_PUNK_OWNER_WALLER_ADDRESS, token_id, BLOCK_NUMBER); } #[test(should_fail_with = "Owner is not the same as the wallet address")] fn invalid_wallet() { - let _ = OracleMock::mock("get_header").returns(( - london_block_header_partial, london_block_header_rlp, - )); - let _ = OracleMock::mock("get_proof").returns(( - account, state_proof_input_serialized, proofs_serialized[0], - )); + // Safety: test + let _ = unsafe { + OracleMock::mock("get_header").returns(( + london_block_header_partial, london_block_header_rlp, + )) + }; + // Safety: test + let _ = unsafe { + OracleMock::mock("get_proof").returns(( + account, state_proof_input_serialized, proofs_serialized[0], + )) + }; let token_id = 9; main( diff --git a/vlayer/examples/circuits/is_dao_worthy/src/main.nr b/vlayer/examples/circuits/is_dao_worthy/src/main.nr index fdc403ec5..c44960bcb 100644 --- a/vlayer/examples/circuits/is_dao_worthy/src/main.nr +++ b/vlayer/examples/circuits/is_dao_worthy/src/main.nr @@ -1,4 +1,5 @@ use dep::ethereum::misc::types::Address; +use dep::token::token::ERC20; use dep::token::token_list::mainnet::USDC; mod main_test; diff --git a/vlayer/examples/circuits/is_dao_worthy/src/main_test.nr b/vlayer/examples/circuits/is_dao_worthy/src/main_test.nr index 64e736f84..ff8cf5e75 100644 --- a/vlayer/examples/circuits/is_dao_worthy/src/main_test.nr +++ b/vlayer/examples/circuits/is_dao_worthy/src/main_test.nr @@ -13,12 +13,18 @@ mod is_dao_worthy_main { #[test] fn success_greater_then() { - let _ = OracleMock::mock("get_header").returns(( - paris_block_header_partial, paris_block_header_rlp, - )); - let _ = OracleMock::mock("get_proof").returns(( - account, state_proof_input_serialized, proofs_serialized[0], - )); + // Safety: test + let _ = unsafe { + OracleMock::mock("get_header").returns(( + paris_block_header_partial, paris_block_header_rlp, + )) + }; + // Safety: test + let _ = unsafe { + OracleMock::mock("get_proof").returns(( + account, state_proof_input_serialized, proofs_serialized[0], + )) + }; let block_number = 19_000_000; let circle_address = [ diff --git a/vlayer/examples/circuits/is_dao_worthy_recursive/src/main.nr b/vlayer/examples/circuits/is_dao_worthy_recursive/src/main.nr index 2dc255cfd..aefcbb55b 100644 --- a/vlayer/examples/circuits/is_dao_worthy_recursive/src/main.nr +++ b/vlayer/examples/circuits/is_dao_worthy_recursive/src/main.nr @@ -1,4 +1,5 @@ use dep::ethereum::misc::types::Address; +use dep::token::token::ERC20; use dep::token::token_list::mainnet::USDC; mod main_test; diff --git a/vlayer/examples/circuits/is_dao_worthy_recursive/src/main_test.nr b/vlayer/examples/circuits/is_dao_worthy_recursive/src/main_test.nr index a4f190633..3bd564e10 100644 --- a/vlayer/examples/circuits/is_dao_worthy_recursive/src/main_test.nr +++ b/vlayer/examples/circuits/is_dao_worthy_recursive/src/main_test.nr @@ -14,6 +14,7 @@ mod is_dao_worthy_main { storage_proof::proofs_serialized, }; use dep::std::test::OracleMock; + use ethereum::serde::Serde; #[test] fn success_greater_then() { @@ -21,15 +22,22 @@ mod is_dao_worthy_main { let recursive_proof = RecursiveProof { key_hash: 1, verification_key: [0; 114], proof: [0; 93] }; - let _ = OracleMock::mock("get_storage_recursive").returns(( - result.serialize(), recursive_proof, - )); - let _ = OracleMock::mock("get_header").returns(( - paris_block_header_partial, paris_block_header_rlp, - )); - let _ = OracleMock::mock("get_proof").returns(( - account, state_proof_input_serialized, proofs_serialized[0], - )); + // Safety: test + let _ = unsafe { + OracleMock::mock("get_storage_recursive").returns((result.serialize(), recursive_proof)) + }; + // Safety: test + let _ = unsafe { + OracleMock::mock("get_header").returns(( + paris_block_header_partial, paris_block_header_rlp, + )) + }; + // Safety: test + let _ = unsafe { + OracleMock::mock("get_proof").returns(( + account, state_proof_input_serialized, proofs_serialized[0], + )) + }; let block_number = 19_000_000; let circle_address = [