AztecProtocol / aztec-packages

Apache License 2.0
180 stars 184 forks source link

feat!: extend storage read oracle to receive address and block number #7243

Closed nventuro closed 3 months ago

nventuro commented 3 months ago

Follow up to #7237, closes https://github.com/AztecProtocol/aztec-packages/issues/7230. I only changed the oracles and not the PXE interface to keep this change as small as possible.

I did change the node interface, but made it so you can still do it the old way by passing 'latest', which I had to do in a couple places.

Finally, I added getters for UnconstrainedContext, mirroring the work in #7237, which I imagine are the ones we'll use in the vast majority of cases.

AztecBot commented 3 months ago

Benchmark results

Metrics with a significant change:

Detailed results All benchmarks are run on txs on the `Benchmarking` contract on the repository. Each tx consists of a batch call to `create_note` and `increment_balance`, which guarantees that each tx has a private call, a nested private call, a public call, and a nested public call, as well as an emitted private note, an unencrypted log, and public storage read and write. This benchmark source data is available in JSON format on S3 [here](https://aztec-ci-artifacts.s3.us-east-2.amazonaws.com/benchmarks-v1/pulls/7243.json). ### Proof generation Each column represents the number of threads used in proof generation. | Metric | 1 threads | 4 threads | 16 threads | 32 threads | 64 threads | | - | - | - | - | - | - | proof_construction_time_sha256_30_ms | 11,412 | 3,080 | 1,678 | 1,456 (-9%) | 1,573 (+5%) | proof_construction_time_sha256_100_ms | 43,778 | 11,734 | 5,433 | 5,507 (+2%) | 5,369 | proof_construction_time_poseidon_hash_ms | 78.0 | 34.0 | 34.0 | 60.0 (+2%) | 87.0 (-2%) | proof_construction_time_poseidon_hash_30_ms | 1,517 | 415 | 199 | 230 | 265 | proof_construction_time_poseidon_hash_100_ms | 5,752 | 1,572 (+1%) | 718 | 773 (+3%) | 789 (-1%) | ### L2 block published to L1 Each column represents the number of txs on an L2 block published to L1. | Metric | 4 txs | 8 txs | 16 txs | | - | - | - | - | l1_rollup_calldata_size_in_bytes | 1,412 | 1,412 | 1,412 | l1_rollup_calldata_gas | 9,464 | 9,466 | 9,452 | l1_rollup_execution_gas | 610,285 | 610,287 | 610,273 | l2_block_processing_time_in_ms | 754 (-2%) | 1,410 | 2,701 (-1%) | l2_block_building_time_in_ms | 25,657 | 51,312 | 100,655 | l2_block_rollup_simulation_time_in_ms | 25,657 | 51,311 | 100,655 | l2_block_public_tx_process_time_in_ms | 22,050 | 47,475 | 96,893 | ### L2 chain processing Each column represents the number of blocks on the L2 chain where each block has 8 txs. | Metric | 3 blocks | 5 blocks | | - | - | - | node_history_sync_time_in_ms | 7,016 | 9,846 | node_database_size_in_bytes | 12,177,488 | 16,076,880 | pxe_database_size_in_bytes | 16,254 | 26,813 | ### Circuits stats Stats on running time and I/O sizes collected for every kernel circuit run across all benchmarks. | Circuit | simulation_time_in_ms | witness_generation_time_in_ms | proving_time_in_ms | input_size_in_bytes | output_size_in_bytes | proof_size_in_bytes | num_public_inputs | size_in_gates | | - | - | - | - | - | - | - | - | - | private-kernel-init | 121 | 494 (-2%) | 12,434 (-2%) | 20,634 | 67,190 | 92,352 | 2,819 | 524,288 | private-kernel-inner | 382 | 1,041 (-2%) | 44,936 (-10%) | 94,902 | 67,190 | 92,352 | 2,819 | 2,097,152 | private-kernel-tail | 310 (-1%) | 1,795 (+2%) | 45,764 (-8%) | 99,121 | 71,733 | 14,912 | 399 | 2,097,152 | base-parity | 6.65 (+8%) | 1,981 | 2,605 (-5%) | 128 | 64.0 | 2,208 | 2.00 | 131,072 | root-parity | 49.6 (+1%) | 62.5 (-16%) | :warning: 33,926 (**-20%**) | 27,100 | 64.0 | 2,720 | 18.0 | 2,097,152 | base-rollup | 7,982 | 5,090 (+2%) | 72,282 (-14%) | 170,330 | 756 | 3,648 | 47.0 | 4,194,304 | root-rollup | 112 (+2%) | 76.7 (-18%) | 19,645 (-13%) | 25,309 | 620 | 3,456 | 41.0 | 1,048,576 | public-kernel-setup | 727 (+2%) | 3,690 (-2%) | 38,874 (-13%) | 116,905 | 93,334 | 125,344 | 3,850 | 2,097,152 | public-kernel-app-logic | 636 | 4,812 (+2%) | 40,480 (-14%) | 116,905 | 93,334 | 125,344 | 3,850 | 2,097,152 | public-kernel-tail | 1,416 (+1%) | 34,448 (-8%) | 166,316 (-14%) | 511,910 | 10,014 | 14,912 | 399 | 8,388,608 | private-kernel-reset-small | 559 | 2,049 (+2%) | 41,809 (-10%) | 123,313 | 67,190 | 92,352 | 2,819 | 2,097,152 | public-kernel-teardown | 639 (+1%) | 4,865 (+3%) | 39,875 (-13%) | 116,905 | 93,334 | 125,344 | 3,850 | 2,097,152 | merge-rollup | 28.8 (-1%) | N/A | N/A | 16,542 | 756 | N/A | N/A | N/A | private-kernel-tail-to-public | N/A | 7,227 (+1%) | 86,127 (-11%) | N/A | N/A | 125,344 | 3,850 | 4,194,304 | Stats on running time collected for app circuits | Function | input_size_in_bytes | output_size_in_bytes | witness_generation_time_in_ms | proof_size_in_bytes | proving_time_in_ms | size_in_gates | num_public_inputs | | - | - | - | - | - | - | - | - | ContractClassRegisterer:register | 1,344 | 9,944 | 427 | N/A | N/A | N/A | N/A | ContractInstanceDeployer:deploy | 1,408 | 9,944 | 40.7 (+2%) | N/A | N/A | N/A | N/A | MultiCallEntrypoint:entrypoint | 1,920 | 9,944 | 1,816 (+2%) | N/A | N/A | N/A | N/A | GasToken:deploy | 1,376 | 9,944 | 1,017 (+4%) | N/A | N/A | N/A | N/A | SchnorrAccount:constructor | 1,312 | 9,944 | 1,439 (+2%) | N/A | N/A | N/A | N/A | SchnorrAccount:entrypoint | 2,304 | 9,944 | 2,869 (+2%) | 16,768 | 51,162 (-10%) | 2,097,152 | 457 | Token:privately_mint_private_note | 1,280 | 9,944 | :warning: 1,945 (**+20%**) | N/A | N/A | N/A | N/A | FPC:fee_entrypoint_public | 1,344 | 9,944 | 379 (+6%) | 16,768 | 10,572 (-12%) | 524,288 | 457 | Token:transfer | 1,312 | 9,944 | 4,605 (+3%) | 16,768 | 41,477 (-9%) | 2,097,152 | 457 | AuthRegistry:set_authorized (avm) | 20,996 | N/A | N/A | 87,552 | :warning: 1,687 (**+25%**) | N/A | N/A | FPC:prepare_fee (avm) | 28,495 | N/A | N/A | 88,448 | :warning: 4,732 (**-20%**) | N/A | N/A | Token:transfer_public (avm) | 44,705 | N/A | N/A | 88,170 | 3,576 (-9%) | N/A | N/A | AuthRegistry:consume (avm) | 34,874 | N/A | N/A | 87,968 | 2,851 (-1%) | N/A | N/A | FPC:pay_refund (avm) | 41,394 | N/A | N/A | 89,248 | :warning: 16,823 (**-33%**) | N/A | N/A | Benchmarking:create_note | 1,344 | 9,944 | 1,405 | N/A | N/A | N/A | N/A | SchnorrAccount:verify_private_authwit | 1,280 | 9,944 | 73.6 | N/A | N/A | N/A | N/A | Token:unshield | 1,376 | 9,944 | 3,765 (+2%) | N/A | N/A | N/A | N/A | FPC:fee_entrypoint_private | 1,376 | 9,944 | 4,740 (+3%) | N/A | N/A | N/A | N/A | ### AVM Simulation Time to simulate various public functions in the AVM. | Function | time_ms | bytecode_size_in_bytes | | - | - | - | GasToken:_increase_public_balance | 68.4 (+2%) | 13,800 | GasToken:set_portal | 17.0 | 3,315 | Token:constructor | 95.9 (+3%) | 23,719 | FPC:constructor | 65.0 (+3%) | 13,653 | GasToken:mint_public | 53.6 (+1%) | 10,168 | Token:mint_public | 67.7 (+4%) | 19,010 | Token:assert_minter_and_mint | 218 (+2%) | 12,901 | AuthRegistry:set_authorized | 32.4 (+1%) | 7,822 | FPC:prepare_fee | 139 (-7%) | 15,129 | Token:transfer_public | :warning: 33.2 (**-36%**) | 31,245 | FPC:pay_refund | 203 (-3%) | 28,061 | Benchmarking:increment_balance | 2,715 | 15,300 | Token:_increase_public_balance | 56.2 | 14,982 | FPC:pay_refund_with_shielded_rebate | 200 (-1%) | 29,148 | ### Public DB Access Time to access various public DBs. | Function | time_ms | | - | - | get-nullifier-index | 0.150 (-3%) | ### Tree insertion stats The duration to insert a fixed batch of leaves into each tree type. | Metric | 1 leaves | 16 leaves | 64 leaves | 128 leaves | 256 leaves | 512 leaves | 1024 leaves | | - | - | - | - | - | - | - | - | batch_insert_into_append_only_tree_16_depth_ms | 10.4 (+1%) | 16.9 (+1%) | N/A | N/A | N/A | N/A | N/A | batch_insert_into_append_only_tree_16_depth_hash_count | 16.8 | 31.7 | N/A | N/A | N/A | N/A | N/A | batch_insert_into_append_only_tree_16_depth_hash_ms | 0.604 (+1%) | 0.519 (+1%) | N/A | N/A | N/A | N/A | N/A | batch_insert_into_append_only_tree_32_depth_ms | N/A | N/A | 48.7 (+1%) | 75.7 | 131 (-1%) | 245 | 469 | batch_insert_into_append_only_tree_32_depth_hash_count | N/A | N/A | 95.9 | 159 | 287 | 543 | 1,055 | batch_insert_into_append_only_tree_32_depth_hash_ms | N/A | N/A | 0.498 (+1%) | 0.465 | 0.449 (-1%) | 0.444 | 0.438 | batch_insert_into_indexed_tree_20_depth_ms | N/A | N/A | 60.2 (+1%) | 112 (-1%) | 182 (-3%) | 354 | 692 (-2%) | batch_insert_into_indexed_tree_20_depth_hash_count | N/A | N/A | 109 | 207 | 355 | 691 | 1,363 | batch_insert_into_indexed_tree_20_depth_hash_ms | N/A | N/A | 0.510 (+1%) | 0.501 (-1%) | 0.481 (-3%) | 0.479 | 0.475 (-2%) | batch_insert_into_indexed_tree_40_depth_ms | N/A | N/A | 72.9 | N/A | N/A | N/A | N/A | batch_insert_into_indexed_tree_40_depth_hash_count | N/A | N/A | 133 | N/A | N/A | N/A | N/A | batch_insert_into_indexed_tree_40_depth_hash_ms | N/A | N/A | 0.519 | N/A | N/A | N/A | N/A | ### Miscellaneous Transaction sizes based on how many contract classes are registered in the tx. | Metric | 0 registered classes | 1 registered classes | | - | - | - | tx_size_in_bytes | 85,672 | 670,983 | Transaction size based on fee payment method | Metric | | | - | |