@aztec/foundation 0.0.1-commit.24de95ac → 0.0.1-commit.3469e52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/array/array.d.ts +1 -9
- package/dest/array/array.d.ts.map +1 -1
- package/dest/array/array.js +0 -11
- package/dest/array/index.d.ts +2 -1
- package/dest/array/index.d.ts.map +1 -1
- package/dest/array/index.js +1 -0
- package/dest/array/sorted_array.d.ts +10 -0
- package/dest/array/sorted_array.d.ts.map +1 -0
- package/dest/array/sorted_array.js +106 -0
- package/dest/async-map/index.d.ts +1 -1
- package/dest/async-pool/index.d.ts +1 -1
- package/dest/bigint/index.d.ts +1 -1
- package/dest/bigint-buffer/index.d.ts +1 -1
- package/dest/branded-types/block_number.d.ts +56 -0
- package/dest/branded-types/block_number.d.ts.map +1 -0
- package/dest/branded-types/block_number.js +78 -0
- package/dest/branded-types/checkpoint_number.d.ts +54 -0
- package/dest/branded-types/checkpoint_number.d.ts.map +1 -0
- package/dest/branded-types/checkpoint_number.js +77 -0
- package/dest/branded-types/epoch.d.ts +42 -0
- package/dest/branded-types/epoch.d.ts.map +1 -0
- package/dest/branded-types/epoch.js +59 -0
- package/dest/branded-types/index.d.ts +7 -0
- package/dest/branded-types/index.d.ts.map +1 -0
- package/dest/branded-types/index.js +5 -0
- package/dest/branded-types/index_within_checkpoint.d.ts +42 -0
- package/dest/branded-types/index_within_checkpoint.d.ts.map +1 -0
- package/dest/branded-types/index_within_checkpoint.js +59 -0
- package/dest/branded-types/slot.d.ts +42 -0
- package/dest/branded-types/slot.d.ts.map +1 -0
- package/dest/branded-types/slot.js +59 -0
- package/dest/branded-types/types.d.ts +5 -0
- package/dest/branded-types/types.d.ts.map +1 -0
- package/dest/branded-types/types.js +1 -0
- package/dest/buffer/buffer16.d.ts +2 -2
- package/dest/buffer/buffer16.d.ts.map +1 -1
- package/dest/buffer/buffer16.js +4 -2
- package/dest/buffer/buffer32.d.ts +2 -2
- package/dest/buffer/buffer32.d.ts.map +1 -1
- package/dest/buffer/buffer32.js +4 -2
- package/dest/buffer/index.d.ts +1 -1
- package/dest/collection/array.d.ts +1 -1
- package/dest/collection/index.d.ts +1 -1
- package/dest/collection/object.d.ts +1 -1
- package/dest/committable/committable.d.ts +1 -1
- package/dest/committable/committable.d.ts.map +1 -1
- package/dest/committable/index.d.ts +1 -1
- package/dest/config/env_var.d.ts +2 -2
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/config/index.d.ts +15 -4
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +32 -9
- package/dest/config/network_config.d.ts +13 -1
- package/dest/config/network_config.d.ts.map +1 -1
- package/dest/config/network_config.js +3 -1
- package/dest/config/network_name.d.ts +1 -1
- package/dest/config/parse-env.d.ts +3 -0
- package/dest/config/parse-env.d.ts.map +1 -0
- package/dest/config/parse-env.js +7 -0
- package/dest/config/secret_value.d.ts +1 -1
- package/dest/config/secret_value.d.ts.map +1 -1
- package/dest/config/secret_value.js +3 -1
- package/dest/crypto/aes128/index.d.ts +1 -1
- package/dest/crypto/aes128/index.d.ts.map +1 -1
- package/dest/crypto/aes128/index.js +2 -6
- package/dest/crypto/bls/bn254_keystore.d.ts +15 -15
- package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -1
- package/dest/crypto/bls/bn254_keystore.js +1 -1
- package/dest/crypto/bls/index.d.ts +1 -1
- package/dest/crypto/bls/index.js +1 -1
- package/dest/crypto/bn254/index.d.ts +35 -51
- package/dest/crypto/bn254/index.d.ts.map +1 -1
- package/dest/crypto/bn254/index.js +51 -137
- package/dest/crypto/ecdsa/index.d.ts +1 -1
- package/dest/crypto/ecdsa/index.d.ts.map +1 -1
- package/dest/crypto/ecdsa/index.js +4 -12
- package/dest/crypto/ecdsa/signature.d.ts +2 -2
- package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
- package/dest/crypto/ecdsa/signature.js +2 -2
- package/dest/crypto/grumpkin/index.d.ts +4 -2
- package/dest/crypto/grumpkin/index.d.ts.map +1 -1
- package/dest/crypto/grumpkin/index.js +7 -16
- package/dest/crypto/keccak/index.d.ts +1 -1
- package/dest/crypto/keys/index.d.ts +2 -2
- package/dest/crypto/keys/index.d.ts.map +1 -1
- package/dest/crypto/keys/index.js +2 -4
- package/dest/crypto/pedersen/index.d.ts +1 -1
- package/dest/crypto/pedersen/pedersen.noble.d.ts +1 -1
- package/dest/crypto/pedersen/pedersen.wasm.d.ts +2 -2
- package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
- package/dest/crypto/pedersen/pedersen.wasm.js +4 -10
- package/dest/crypto/poseidon/index.d.ts +2 -2
- package/dest/crypto/poseidon/index.d.ts.map +1 -1
- package/dest/crypto/poseidon/index.js +6 -16
- package/dest/crypto/random/index.d.ts +1 -1
- package/dest/crypto/random/index.d.ts.map +1 -1
- package/dest/crypto/random/randomness_singleton.d.ts +2 -2
- package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
- package/dest/crypto/random/randomness_singleton.js +3 -3
- package/dest/crypto/schnorr/index.d.ts +3 -2
- package/dest/crypto/schnorr/index.d.ts.map +1 -1
- package/dest/crypto/schnorr/index.js +4 -10
- package/dest/crypto/schnorr/signature.d.ts +2 -2
- package/dest/crypto/schnorr/signature.d.ts.map +1 -1
- package/dest/crypto/schnorr/signature.js +2 -2
- package/dest/crypto/secp256k1/index.d.ts +1 -1
- package/dest/crypto/secp256k1/index.d.ts.map +1 -1
- package/dest/crypto/secp256k1/index.js +3 -9
- package/dest/crypto/secp256k1-signer/index.d.ts +1 -1
- package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +1 -1
- package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -1
- package/dest/crypto/secp256k1-signer/utils.d.ts +1 -1
- package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
- package/dest/crypto/serialize.d.ts +1 -1
- package/dest/crypto/sha256/index.d.ts +2 -2
- package/dest/crypto/sha256/index.d.ts.map +1 -1
- package/dest/crypto/sha256/index.js +1 -1
- package/dest/crypto/sha512/index.d.ts +3 -3
- package/dest/crypto/sha512/index.d.ts.map +1 -1
- package/dest/crypto/sha512/index.js +1 -1
- package/dest/crypto/signature/index.d.ts +2 -2
- package/dest/crypto/signature/index.d.ts.map +1 -1
- package/dest/crypto/sync/index.d.ts +1 -1
- package/dest/crypto/sync/index.js +1 -3
- package/dest/crypto/sync/pedersen/index.d.ts +2 -2
- package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
- package/dest/crypto/sync/pedersen/index.js +1 -1
- package/dest/crypto/sync/poseidon/index.d.ts +2 -2
- package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
- package/dest/crypto/sync/poseidon/index.js +1 -1
- package/dest/{fields/bls12_fields.d.ts → curves/bls12/field.d.ts} +3 -3
- package/dest/curves/bls12/field.d.ts.map +1 -0
- package/dest/{fields/bls12_fields.js → curves/bls12/field.js} +12 -9
- package/dest/curves/bls12/index.d.ts +3 -0
- package/dest/curves/bls12/index.d.ts.map +1 -0
- package/dest/curves/bls12/index.js +2 -0
- package/dest/{fields/bls12_point.d.ts → curves/bls12/point.d.ts} +4 -4
- package/dest/curves/bls12/point.d.ts.map +1 -0
- package/dest/{fields/bls12_point.js → curves/bls12/point.js} +10 -8
- package/dest/{fields/fields.d.ts → curves/bn254/field.d.ts} +16 -15
- package/dest/curves/bn254/field.d.ts.map +1 -0
- package/dest/{fields/fields.js → curves/bn254/field.js} +49 -49
- package/dest/curves/bn254/index.d.ts +3 -0
- package/dest/curves/bn254/index.d.ts.map +1 -0
- package/dest/curves/bn254/index.js +2 -0
- package/dest/curves/bn254/point.d.ts +54 -0
- package/dest/curves/bn254/point.d.ts.map +1 -0
- package/dest/curves/bn254/point.js +143 -0
- package/dest/curves/grumpkin/index.d.ts +10 -0
- package/dest/curves/grumpkin/index.d.ts.map +1 -0
- package/dest/curves/grumpkin/index.js +3 -0
- package/dest/{fields → curves/grumpkin}/point.d.ts +12 -3
- package/dest/curves/grumpkin/point.d.ts.map +1 -0
- package/dest/{fields → curves/grumpkin}/point.js +24 -7
- package/dest/decorators/index.d.ts +1 -1
- package/dest/decorators/memoize.d.ts +1 -1
- package/dest/decorators/memoize.d.ts.map +1 -1
- package/dest/error/index.d.ts +1 -1
- package/dest/eth-address/index.d.ts +12 -2
- package/dest/eth-address/index.d.ts.map +1 -1
- package/dest/eth-address/index.js +27 -3
- package/dest/eth-signature/eth_signature.d.ts +1 -1
- package/dest/eth-signature/eth_signature.d.ts.map +1 -1
- package/dest/eth-signature/index.d.ts +1 -1
- package/dest/fs/index.d.ts +1 -1
- package/dest/fs/run_in_dir.d.ts +1 -1
- package/dest/fs/try_rm_dir.d.ts +1 -1
- package/dest/iterable/all.d.ts +1 -1
- package/dest/iterable/filter.d.ts +1 -1
- package/dest/iterable/index.d.ts +1 -1
- package/dest/iterable/isAsyncIt.d.ts +1 -1
- package/dest/iterable/map.d.ts +1 -1
- package/dest/iterable/peek.d.ts +1 -1
- package/dest/iterable/sort.d.ts +1 -1
- package/dest/iterable/take.d.ts +1 -1
- package/dest/iterable/toArray.d.ts +1 -1
- package/dest/iterator/filter.d.ts +3 -0
- package/dest/iterator/filter.d.ts.map +1 -0
- package/dest/iterator/filter.js +7 -0
- package/dest/iterator/index.d.ts +2 -0
- package/dest/iterator/index.d.ts.map +1 -0
- package/dest/iterator/index.js +1 -0
- package/dest/json-rpc/client/fetch.d.ts +1 -1
- package/dest/json-rpc/client/index.d.ts +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +1 -1
- package/dest/json-rpc/client/undici.d.ts +1 -1
- package/dest/json-rpc/convert.d.ts +1 -1
- package/dest/json-rpc/errors.d.ts +1 -1
- package/dest/json-rpc/errors.d.ts.map +1 -1
- package/dest/json-rpc/fixtures/class_a.d.ts +1 -1
- package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
- package/dest/json-rpc/fixtures/class_b.d.ts +1 -1
- package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
- package/dest/json-rpc/fixtures/test_state.d.ts +1 -1
- package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
- package/dest/json-rpc/index.d.ts +1 -1
- package/dest/json-rpc/js_utils.d.ts +1 -1
- package/dest/json-rpc/js_utils.d.ts.map +1 -1
- package/dest/json-rpc/server/index.d.ts +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
- package/dest/json-rpc/test/index.d.ts +1 -1
- package/dest/json-rpc/test/integration.d.ts +1 -1
- package/dest/log/console.d.ts +1 -1
- package/dest/log/gcloud-logger-config.d.ts +1 -1
- package/dest/log/gcloud-logger-config.d.ts.map +1 -1
- package/dest/log/index.d.ts +1 -1
- package/dest/log/libp2p_logger.d.ts +1 -1
- package/dest/log/log-filters.d.ts +1 -1
- package/dest/log/log-levels.d.ts +1 -1
- package/dest/log/log_fn.d.ts +1 -1
- package/dest/log/noir_debug_log_util.d.ts +1 -1
- package/dest/log/pino-logger.d.ts +2 -2
- package/dest/log/pino-logger.d.ts.map +1 -1
- package/dest/log/pino-logger.js +1 -1
- package/dest/message/index.d.ts +1 -1
- package/dest/message/index.d.ts.map +1 -1
- package/dest/mutex/index.d.ts +1 -1
- package/dest/mutex/index.d.ts.map +1 -1
- package/dest/mutex/mutex_database.d.ts +1 -1
- package/dest/noir/index.d.ts +1 -1
- package/dest/noir/noir_package_config.d.ts +9 -9
- package/dest/number/index.d.ts +1 -1
- package/dest/profiler/index.d.ts +1 -1
- package/dest/profiler/profiler.d.ts +1 -1
- package/dest/promise/index.d.ts +1 -1
- package/dest/promise/running-promise.d.ts +1 -1
- package/dest/promise/running-promise.d.ts.map +1 -1
- package/dest/promise/utils.d.ts +1 -1
- package/dest/queue/base_memory_queue.d.ts +1 -1
- package/dest/queue/base_memory_queue.d.ts.map +1 -1
- package/dest/queue/batch_queue.d.ts +1 -1
- package/dest/queue/batch_queue.d.ts.map +1 -1
- package/dest/queue/bounded_serial_queue.d.ts +1 -1
- package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
- package/dest/queue/fifo_memory_queue.d.ts +1 -1
- package/dest/queue/fifo_memory_queue.d.ts.map +1 -1
- package/dest/queue/index.d.ts +1 -1
- package/dest/queue/priority_memory_queue.d.ts +1 -1
- package/dest/queue/priority_memory_queue.d.ts.map +1 -1
- package/dest/queue/priority_queue.d.ts +1 -1
- package/dest/queue/priority_queue.d.ts.map +1 -1
- package/dest/queue/semaphore.d.ts +1 -1
- package/dest/queue/semaphore.d.ts.map +1 -1
- package/dest/queue/serial_queue.d.ts +1 -1
- package/dest/queue/serial_queue.d.ts.map +1 -1
- package/dest/retry/index.d.ts +11 -1
- package/dest/retry/index.d.ts.map +1 -1
- package/dest/retry/index.js +11 -0
- package/dest/running-promise/index.d.ts +1 -1
- package/dest/schemas/api.d.ts +1 -1
- package/dest/schemas/index.d.ts +1 -1
- package/dest/schemas/parse.d.ts +1 -1
- package/dest/schemas/schemas.d.ts +15 -17
- package/dest/schemas/schemas.d.ts.map +1 -1
- package/dest/schemas/schemas.js +14 -10
- package/dest/schemas/types.d.ts +31 -1
- package/dest/schemas/types.d.ts.map +1 -1
- package/dest/schemas/types.js +25 -1
- package/dest/schemas/utils.d.ts +4 -4
- package/dest/schemas/utils.d.ts.map +1 -1
- package/dest/schemas/utils.js +15 -5
- package/dest/serialize/buffer_reader.d.ts +7 -4
- package/dest/serialize/buffer_reader.d.ts.map +1 -1
- package/dest/serialize/buffer_reader.js +13 -4
- package/dest/serialize/field_reader.d.ts +2 -2
- package/dest/serialize/field_reader.d.ts.map +1 -1
- package/dest/serialize/field_reader.js +1 -1
- package/dest/serialize/free_funcs.d.ts +2 -2
- package/dest/serialize/free_funcs.d.ts.map +1 -1
- package/dest/serialize/free_funcs.js +1 -1
- package/dest/serialize/index.d.ts +1 -1
- package/dest/serialize/serialize.d.ts +2 -2
- package/dest/serialize/serialize.d.ts.map +1 -1
- package/dest/serialize/serialize.js +1 -1
- package/dest/serialize/type_registry.d.ts +1 -1
- package/dest/serialize/type_registry.d.ts.map +1 -1
- package/dest/serialize/types.d.ts +1 -1
- package/dest/sleep/index.d.ts +3 -1
- package/dest/sleep/index.d.ts.map +1 -1
- package/dest/sleep/index.js +4 -0
- package/dest/string/index.d.ts +1 -1
- package/dest/testing/files/index.d.ts +2 -1
- package/dest/testing/files/index.d.ts.map +1 -1
- package/dest/testing/files/index.js +1 -1
- package/dest/testing/formatting.d.ts +1 -1
- package/dest/testing/index.d.ts +1 -1
- package/dest/testing/port_allocator.d.ts +1 -1
- package/dest/testing/snapshot_serializer.d.ts +1 -1
- package/dest/testing/test_data.d.ts +1 -1
- package/dest/timer/date.d.ts +2 -1
- package/dest/timer/date.d.ts.map +1 -1
- package/dest/timer/date.js +3 -0
- package/dest/timer/elapsed.d.ts +1 -1
- package/dest/timer/index.d.ts +1 -1
- package/dest/timer/timeout.d.ts +1 -1
- package/dest/timer/timeout.d.ts.map +1 -1
- package/dest/timer/timer.d.ts +1 -1
- package/dest/timer/timer.d.ts.map +1 -1
- package/dest/transport/dispatch/create_dispatch_fn.d.ts +1 -1
- package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts +1 -1
- package/dest/transport/dispatch/messages.d.ts +1 -1
- package/dest/transport/index.d.ts +1 -1
- package/dest/transport/interface/connector.d.ts +1 -1
- package/dest/transport/interface/listener.d.ts +1 -1
- package/dest/transport/interface/socket.d.ts +1 -1
- package/dest/transport/interface/transferable.d.ts +1 -1
- package/dest/transport/node/index.d.ts +1 -1
- package/dest/transport/node/node_connector.d.ts +1 -1
- package/dest/transport/node/node_connector.d.ts.map +1 -1
- package/dest/transport/node/node_connector_socket.d.ts +1 -1
- package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
- package/dest/transport/node/node_listener.d.ts +1 -1
- package/dest/transport/node/node_listener.d.ts.map +1 -1
- package/dest/transport/node/node_listener_socket.d.ts +1 -1
- package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
- package/dest/transport/transport_client.d.ts +1 -1
- package/dest/transport/transport_client.d.ts.map +1 -1
- package/dest/transport/transport_server.d.ts +1 -10
- package/dest/transport/transport_server.d.ts.map +1 -1
- package/dest/trees/balanced_merkle_tree_root.d.ts +18 -0
- package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -0
- package/dest/trees/balanced_merkle_tree_root.js +52 -0
- package/dest/trees/hasher.d.ts +4 -1
- package/dest/trees/hasher.d.ts.map +1 -1
- package/dest/trees/hasher.js +15 -5
- package/dest/trees/index.d.ts +4 -3
- package/dest/trees/index.d.ts.map +1 -1
- package/dest/trees/index.js +3 -2
- package/dest/trees/indexed_merkle_tree.d.ts +1 -1
- package/dest/trees/indexed_merkle_tree.d.ts.map +1 -1
- package/dest/trees/indexed_merkle_tree.js +1 -1
- package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -1
- package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/indexed_tree_leaf.d.ts +1 -1
- package/dest/trees/membership_witness.d.ts +3 -18
- package/dest/trees/membership_witness.d.ts.map +1 -1
- package/dest/trees/membership_witness.js +1 -1
- package/dest/trees/merkle_tree.d.ts +1 -1
- package/dest/trees/merkle_tree.d.ts.map +1 -1
- package/dest/trees/merkle_tree_calculator.d.ts +2 -12
- package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/merkle_tree_calculator.js +1 -31
- package/dest/trees/sibling_path.d.ts +5 -38
- package/dest/trees/sibling_path.d.ts.map +1 -1
- package/dest/trees/sibling_path.js +2 -2
- package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +6 -6
- package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/unbalanced_merkle_tree_calculator.js +34 -42
- package/dest/trees/unbalanced_merkle_tree_root.d.ts +28 -0
- package/dest/trees/unbalanced_merkle_tree_root.d.ts.map +1 -0
- package/dest/trees/unbalanced_merkle_tree_root.js +84 -0
- package/dest/trees/unbalanced_tree_store.d.ts +5 -1
- package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
- package/dest/trees/unbalanced_tree_store.js +49 -1
- package/dest/types/index.d.ts +4 -2
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +3 -0
- package/dest/url/index.d.ts +1 -1
- package/dest/validation/index.d.ts +1 -1
- package/package.json +29 -9
- package/src/array/array.ts +0 -16
- package/src/array/index.ts +1 -0
- package/src/array/sorted_array.ts +133 -0
- package/src/branded-types/block_number.ts +117 -0
- package/src/branded-types/checkpoint_number.ts +115 -0
- package/src/branded-types/epoch.ts +88 -0
- package/src/branded-types/index.ts +7 -0
- package/src/branded-types/index_within_checkpoint.ts +88 -0
- package/src/branded-types/slot.ts +88 -0
- package/src/branded-types/types.ts +2 -0
- package/src/buffer/buffer16.ts +2 -2
- package/src/buffer/buffer32.ts +2 -2
- package/src/config/env_var.ts +41 -12
- package/src/config/index.ts +39 -6
- package/src/config/network_config.ts +2 -0
- package/src/config/parse-env.ts +4 -0
- package/src/crypto/aes128/index.ts +2 -2
- package/src/crypto/bls/bn254_keystore.ts +1 -1
- package/src/crypto/bls/index.ts +1 -1
- package/src/crypto/bn254/index.ts +50 -156
- package/src/crypto/ecdsa/index.ts +4 -4
- package/src/crypto/ecdsa/signature.ts +2 -2
- package/src/crypto/grumpkin/index.ts +8 -6
- package/src/crypto/keys/index.ts +2 -2
- package/src/crypto/pedersen/pedersen.wasm.ts +4 -4
- package/src/crypto/poseidon/index.ts +6 -6
- package/src/crypto/random/randomness_singleton.ts +2 -4
- package/src/crypto/schnorr/index.ts +5 -4
- package/src/crypto/schnorr/signature.ts +2 -2
- package/src/crypto/secp256k1/index.ts +3 -3
- package/src/crypto/sha256/index.ts +1 -1
- package/src/crypto/sha512/index.ts +1 -1
- package/src/crypto/signature/index.ts +1 -1
- package/src/crypto/sync/index.ts +1 -1
- package/src/crypto/sync/pedersen/index.ts +1 -1
- package/src/crypto/sync/poseidon/index.ts +1 -1
- package/src/{fields/bls12_fields.ts → curves/bls12/field.ts} +6 -6
- package/src/curves/bls12/index.ts +2 -0
- package/src/{fields/bls12_point.ts → curves/bls12/point.ts} +7 -7
- package/src/{fields/fields.ts → curves/bn254/field.ts} +49 -56
- package/src/curves/bn254/index.ts +2 -0
- package/src/curves/bn254/point.ts +170 -0
- package/src/curves/grumpkin/index.ts +11 -0
- package/src/{fields → curves/grumpkin}/point.ts +26 -7
- package/src/eth-address/index.ts +27 -2
- package/src/iterator/filter.ts +11 -0
- package/src/iterator/index.ts +1 -0
- package/src/log/pino-logger.ts +2 -1
- package/src/retry/index.ts +18 -0
- package/src/schemas/schemas.ts +24 -13
- package/src/schemas/types.ts +33 -0
- package/src/schemas/utils.ts +21 -8
- package/src/serialize/buffer_reader.ts +21 -9
- package/src/serialize/field_reader.ts +1 -1
- package/src/serialize/free_funcs.ts +1 -1
- package/src/serialize/serialize.ts +1 -1
- package/src/sleep/index.ts +6 -0
- package/src/testing/files/index.ts +1 -1
- package/src/timer/date.ts +4 -0
- package/src/trees/balanced_merkle_tree_root.ts +71 -0
- package/src/trees/hasher.ts +13 -0
- package/src/trees/index.ts +3 -2
- package/src/trees/indexed_merkle_tree.ts +1 -1
- package/src/trees/membership_witness.ts +1 -1
- package/src/trees/merkle_tree_calculator.ts +1 -34
- package/src/trees/sibling_path.ts +2 -2
- package/src/trees/unbalanced_merkle_tree_calculator.ts +32 -50
- package/src/trees/unbalanced_merkle_tree_root.ts +115 -0
- package/src/trees/unbalanced_tree_store.ts +57 -2
- package/src/types/index.ts +6 -1
- package/dest/crypto/bn254/bn254_utils.d.ts +0 -39
- package/dest/crypto/bn254/bn254_utils.d.ts.map +0 -1
- package/dest/crypto/bn254/bn254_utils.js +0 -56
- package/dest/crypto/index.d.ts +0 -17
- package/dest/crypto/index.d.ts.map +0 -1
- package/dest/crypto/index.js +0 -16
- package/dest/fields/bls12_fields.d.ts.map +0 -1
- package/dest/fields/bls12_point.d.ts.map +0 -1
- package/dest/fields/coordinate.d.ts +0 -66
- package/dest/fields/coordinate.d.ts.map +0 -1
- package/dest/fields/coordinate.js +0 -96
- package/dest/fields/fields.d.ts.map +0 -1
- package/dest/fields/index.d.ts +0 -6
- package/dest/fields/index.d.ts.map +0 -1
- package/dest/fields/index.js +0 -5
- package/dest/fields/point.d.ts.map +0 -1
- package/dest/index.d.ts +0 -30
- package/dest/index.d.ts.map +0 -1
- package/dest/index.js +0 -30
- package/dest/json-rpc/server/telemetry.d.ts +0 -2
- package/dest/json-rpc/server/telemetry.d.ts.map +0 -1
- package/dest/json-rpc/server/telemetry.js +0 -0
- package/dest/trees/unbalanced_merkle_tree.d.ts +0 -28
- package/dest/trees/unbalanced_merkle_tree.d.ts.map +0 -1
- package/dest/trees/unbalanced_merkle_tree.js +0 -99
- package/src/crypto/bn254/bn254_utils.ts +0 -64
- package/src/crypto/index.ts +0 -16
- package/src/fields/coordinate.ts +0 -104
- package/src/fields/index.ts +0 -5
- package/src/index.ts +0 -30
- package/src/json-rpc/server/telemetry.ts +0 -0
- package/src/trees/unbalanced_merkle_tree.ts +0 -111
package/src/schemas/schemas.ts
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
|
|
3
|
+
import { EpochNumber, EpochNumberSchema } from '../branded-types/epoch.js';
|
|
4
|
+
import { SlotNumber, SlotNumberSchema } from '../branded-types/slot.js';
|
|
3
5
|
import { Buffer32 } from '../buffer/buffer32.js';
|
|
4
6
|
import { SecretValue } from '../config/secret_value.js';
|
|
7
|
+
import { Fq, Fr } from '../curves/bn254/field.js';
|
|
8
|
+
import { Point } from '../curves/grumpkin/point.js';
|
|
5
9
|
import { EthAddress } from '../eth-address/index.js';
|
|
6
|
-
import {
|
|
7
|
-
import { Point } from '../fields/point.js';
|
|
8
|
-
import { isHex, withoutHexPrefix } from '../string/index.js';
|
|
10
|
+
import { isHex, withHexPrefix, withoutHexPrefix } from '../string/index.js';
|
|
9
11
|
import { bufferSchema, hexSchema } from './utils.js';
|
|
10
12
|
|
|
11
13
|
export const schemas = {
|
|
14
|
+
/** Accepts a number, bigint, or string as an EpochNumber. */
|
|
15
|
+
EpochNumber: EpochNumberSchema,
|
|
16
|
+
|
|
17
|
+
/** Accepts a number, bigint, or string as a SlotNumber. */
|
|
18
|
+
SlotNumber: SlotNumberSchema,
|
|
19
|
+
|
|
12
20
|
/** Accepts a hex string. */
|
|
13
21
|
EthAddress: EthAddress.schema,
|
|
14
22
|
|
|
@@ -50,19 +58,19 @@ export const schemas = {
|
|
|
50
58
|
.max(2 ** 32 - 1),
|
|
51
59
|
),
|
|
52
60
|
|
|
61
|
+
/** Coerces input to UInt64. */
|
|
62
|
+
UInt64: z.union([z.bigint(), z.number(), z.string()]).pipe(
|
|
63
|
+
z.coerce
|
|
64
|
+
.bigint()
|
|
65
|
+
.min(0n)
|
|
66
|
+
.max(2n ** 64n - 1n),
|
|
67
|
+
),
|
|
68
|
+
|
|
53
69
|
/** Accepts a hex string as a Buffer32 type. */
|
|
54
70
|
Buffer32: z.string().refine(isHex, 'Not a valid hex string').transform(Buffer32.fromString),
|
|
55
71
|
|
|
56
72
|
/** Accepts a base64 string or an object `{ type: 'Buffer', data: [byte, byte...] }` as a buffer. */
|
|
57
|
-
Buffer:
|
|
58
|
-
bufferSchema,
|
|
59
|
-
z
|
|
60
|
-
.object({
|
|
61
|
-
type: z.literal('Buffer'),
|
|
62
|
-
data: z.array(z.number().int().min(0).max(255)),
|
|
63
|
-
})
|
|
64
|
-
.transform(({ data }) => Buffer.from(data)),
|
|
65
|
-
]),
|
|
73
|
+
Buffer: bufferSchema,
|
|
66
74
|
|
|
67
75
|
/** Accepts a hex string as a buffer. */
|
|
68
76
|
BufferHex: z
|
|
@@ -74,9 +82,12 @@ export const schemas = {
|
|
|
74
82
|
/** Hex string with an optional 0x prefix which gets removed as part of the parsing. */
|
|
75
83
|
HexString: hexSchema,
|
|
76
84
|
|
|
85
|
+
/** Hex string with an optional 0x prefix which gets enforced as part of the parsing. */
|
|
86
|
+
HexStringWith0x: z.string().refine(isHex, 'Not a valid hex string').transform(withHexPrefix),
|
|
87
|
+
|
|
77
88
|
/** A secret config value */
|
|
78
89
|
SecretValue: SecretValue.schema,
|
|
79
90
|
};
|
|
80
91
|
|
|
81
92
|
// These are needed to avoid errors such as: "The inferred type of 'YourClassSchema' cannot be named without a reference to..."
|
|
82
|
-
export type { EthAddress, Fq, Fr, Point };
|
|
93
|
+
export type { EpochNumber, EthAddress, Fq, Fr, Point, SlotNumber };
|
package/src/schemas/types.ts
CHANGED
|
@@ -1,3 +1,36 @@
|
|
|
1
1
|
import type { ZodType } from 'zod';
|
|
2
2
|
|
|
3
3
|
export type ZodFor<T> = ZodType<T, any, any>;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Creates a schema validator that enforces all properties of type T are present in the schema.
|
|
7
|
+
* This provides compile-time safety to ensure schemas don't miss optional properties.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* interface MyConfig {
|
|
12
|
+
* foo: string;
|
|
13
|
+
* bar?: number;
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* // ✅ This will work - all keys present
|
|
17
|
+
* const schema1 = zodFor<MyConfig>()(z.object({
|
|
18
|
+
* foo: z.string(),
|
|
19
|
+
* bar: z.number().optional(),
|
|
20
|
+
* }));
|
|
21
|
+
*
|
|
22
|
+
* // ❌ This will error - 'bar' is missing
|
|
23
|
+
* const schema2 = zodFor<MyConfig>()(z.object({
|
|
24
|
+
* foo: z.string(),
|
|
25
|
+
* }));
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function zodFor<T>() {
|
|
29
|
+
return (schema => schema) as <S extends ZodType<any, any, any>>(
|
|
30
|
+
schema: keyof T extends keyof S['_output']
|
|
31
|
+
? keyof S['_output'] extends keyof T
|
|
32
|
+
? S
|
|
33
|
+
: S & { __error__: 'Schema has extra keys not in type'; __extra__: Exclude<keyof S['_output'], keyof T> }
|
|
34
|
+
: S & { __error__: 'Schema is missing keys from type'; __missing__: Exclude<keyof T, keyof S['_output']> },
|
|
35
|
+
) => S;
|
|
36
|
+
}
|
package/src/schemas/utils.ts
CHANGED
|
@@ -21,13 +21,25 @@ export const hexSchema = z.string().refine(isHex, 'Not a valid hex string').tran
|
|
|
21
21
|
// Copied from zod internals, which was copied from https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript
|
|
22
22
|
const base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
|
|
23
23
|
|
|
24
|
-
/** Schema for a buffer represented as a base64 string. */
|
|
25
|
-
export const bufferSchema = z
|
|
26
|
-
.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
/** Schema for a buffer represented as a base64 string or a Buffer object. */
|
|
25
|
+
export const bufferSchema: ZodFor<Buffer> = z.union([
|
|
26
|
+
// Serialization from base64 string.
|
|
27
|
+
z
|
|
28
|
+
.string()
|
|
29
|
+
// We only test the str for base64 if it's shorter than 1024 bytes, otherwise we've run into maximum
|
|
30
|
+
// stack size exceeded errors when trying to validate excessively long strings (such as contract bytecode).
|
|
31
|
+
.refine(str => str.length > 1024 || base64Regex.test(str), 'Not a valid base64 string')
|
|
32
|
+
.transform(data => Buffer.from(data, 'base64')),
|
|
33
|
+
// Serialization from Buffer-annotated object.
|
|
34
|
+
z
|
|
35
|
+
.object({
|
|
36
|
+
type: z.literal('Buffer'),
|
|
37
|
+
data: z.array(z.number().int().min(0).max(255)),
|
|
38
|
+
})
|
|
39
|
+
.transform(({ data }) => Buffer.from(data)),
|
|
40
|
+
// Serialization from Buffer
|
|
41
|
+
z.instanceof(Buffer),
|
|
42
|
+
]);
|
|
31
43
|
|
|
32
44
|
export class ZodNullableOptional<T extends ZodTypeAny> extends ZodOptional<T> {
|
|
33
45
|
_isNullableOptional = true;
|
|
@@ -88,12 +100,13 @@ export function hexSchemaFor<TClass extends { fromString(str: string): any } | {
|
|
|
88
100
|
*/
|
|
89
101
|
export function bufferSchemaFor<TClass extends { fromBuffer(buf: Buffer): any }>(
|
|
90
102
|
klazz: TClass,
|
|
103
|
+
refinement?: (buf: Buffer) => boolean,
|
|
91
104
|
): ZodType<
|
|
92
105
|
TClass extends { fromBuffer(buf: Buffer): infer TInstance } ? ToJsonIs<TInstance, Buffer> : never,
|
|
93
106
|
any,
|
|
94
107
|
string
|
|
95
108
|
> {
|
|
96
|
-
return bufferSchema.transform(klazz.fromBuffer.bind(klazz));
|
|
109
|
+
return bufferSchema.refine(refinement ?? (() => true), 'Not a valid buffer').transform(klazz.fromBuffer.bind(klazz));
|
|
97
110
|
}
|
|
98
111
|
|
|
99
112
|
/** Creates a schema for a js Map type that matches the serialization used in jsonStringify. */
|
|
@@ -224,15 +224,22 @@ export class BufferReader {
|
|
|
224
224
|
* deserializing each one using the 'fromBuffer' method of 'itemDeserializer'.
|
|
225
225
|
*
|
|
226
226
|
* @param itemDeserializer - Object with 'fromBuffer' method to deserialize vector elements.
|
|
227
|
+
* @param maxSize - Optional maximum allowed size for the vector. If the size exceeds this, an error is thrown.
|
|
227
228
|
* @returns An array of deserialized elements of type T.
|
|
228
229
|
*/
|
|
229
|
-
public readVector<T>(
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
230
|
+
public readVector<T>(
|
|
231
|
+
itemDeserializer: {
|
|
232
|
+
/**
|
|
233
|
+
* A method to deserialize data from a buffer.
|
|
234
|
+
*/
|
|
235
|
+
fromBuffer: (reader: BufferReader) => T;
|
|
236
|
+
},
|
|
237
|
+
maxSize?: number,
|
|
238
|
+
): T[] {
|
|
235
239
|
const size = this.readNumber();
|
|
240
|
+
if (maxSize !== undefined && size > maxSize) {
|
|
241
|
+
throw new Error(`Vector size ${size} exceeds maximum allowed ${maxSize}`);
|
|
242
|
+
}
|
|
236
243
|
const result = new Array<T>(size);
|
|
237
244
|
for (let i = 0; i < size; i++) {
|
|
238
245
|
result[i] = itemDeserializer.fromBuffer(this);
|
|
@@ -344,10 +351,11 @@ export class BufferReader {
|
|
|
344
351
|
* The method first reads the size of the string, then reads the corresponding
|
|
345
352
|
* number of bytes from the buffer and converts them to a string.
|
|
346
353
|
*
|
|
354
|
+
* @param maxSize - Optional maximum allowed size for the string buffer. If the size exceeds this, an error is thrown.
|
|
347
355
|
* @returns The read string from the buffer.
|
|
348
356
|
*/
|
|
349
|
-
public readString(): string {
|
|
350
|
-
return this.readBuffer().toString();
|
|
357
|
+
public readString(maxSize?: number): string {
|
|
358
|
+
return this.readBuffer(maxSize).toString();
|
|
351
359
|
}
|
|
352
360
|
|
|
353
361
|
/**
|
|
@@ -356,10 +364,14 @@ export class BufferReader {
|
|
|
356
364
|
* a Buffer with that size containing the bytes. Useful for reading variable-length
|
|
357
365
|
* binary data encoded as (size, data) format.
|
|
358
366
|
*
|
|
367
|
+
* @param maxSize - Optional maximum allowed size for the buffer. If the size exceeds this, an error is thrown.
|
|
359
368
|
* @returns A Buffer containing the read bytes.
|
|
360
369
|
*/
|
|
361
|
-
public readBuffer(): Buffer {
|
|
370
|
+
public readBuffer(maxSize?: number): Buffer {
|
|
362
371
|
const size = this.readNumber();
|
|
372
|
+
if (maxSize !== undefined && size > maxSize) {
|
|
373
|
+
throw new Error(`Buffer size ${size} exceeds maximum allowed ${maxSize}`);
|
|
374
|
+
}
|
|
363
375
|
this.#rangeCheck(size);
|
|
364
376
|
return this.readBytes(size);
|
|
365
377
|
}
|
package/src/sleep/index.ts
CHANGED
|
@@ -73,3 +73,9 @@ export class InterruptibleSleep {
|
|
|
73
73
|
export function sleep<T>(ms: number, returnValue?: T): Promise<T> {
|
|
74
74
|
return new Promise(resolve => setTimeout(() => resolve(returnValue as T), ms));
|
|
75
75
|
}
|
|
76
|
+
|
|
77
|
+
/** Sleeps until the target date */
|
|
78
|
+
export function sleepUntil<T>(target: Date, now: Date, returnValue?: T): Promise<T> {
|
|
79
|
+
const ms = target.getTime() - now.getTime();
|
|
80
|
+
return sleep(ms, returnValue);
|
|
81
|
+
}
|
|
@@ -63,7 +63,7 @@ export function updateProtocolCircuitSampleInputs(circuitName: string, value: st
|
|
|
63
63
|
logger(`Updated test data in ${targetFile} for ${circuitName}`);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
function getPathToFile(targetFileFromRepoRoot: string) {
|
|
66
|
+
export function getPathToFile(targetFileFromRepoRoot: string) {
|
|
67
67
|
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../../../../../');
|
|
68
68
|
if (!existsSync(join(repoRoot, 'CODEOWNERS'))) {
|
|
69
69
|
throw new Error(`Path to repo root is incorrect (got ${repoRoot})`);
|
package/src/timer/date.ts
CHANGED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { pedersenMerkleHash, poseidonMerkleHash, shaMerkleHash } from './hasher.js';
|
|
2
|
+
|
|
3
|
+
export const computeBalancedShaRoot = (leaves: Buffer[]) => computeBalancedMerkleTreeRoot(leaves);
|
|
4
|
+
|
|
5
|
+
export const computeBalancedPedersenRoot = async (leaves: Buffer[]) =>
|
|
6
|
+
await computeBalancedMerkleTreeRootAsync(leaves, pedersenMerkleHash);
|
|
7
|
+
|
|
8
|
+
export const computeBalancedPoseidonRoot = async (leaves: Buffer[]) =>
|
|
9
|
+
await computeBalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Computes the Merkle root with the provided leaves **synchronously**.
|
|
13
|
+
* This method uses a synchronous hash function (defaults to `sha256Trunc`).
|
|
14
|
+
*
|
|
15
|
+
* @throws If the number of leaves is not a power of two.
|
|
16
|
+
*/
|
|
17
|
+
export function computeBalancedMerkleTreeRoot(leaves: Buffer[], hasher = shaMerkleHash): Buffer {
|
|
18
|
+
const height = getTreeHeight(leaves);
|
|
19
|
+
let nodes = leaves.slice();
|
|
20
|
+
|
|
21
|
+
for (let i = 0; i < height; ++i) {
|
|
22
|
+
let j = 0;
|
|
23
|
+
for (; j < nodes.length / 2; ++j) {
|
|
24
|
+
const l = nodes[j * 2];
|
|
25
|
+
const r = nodes[j * 2 + 1];
|
|
26
|
+
nodes[j] = hasher(l, r);
|
|
27
|
+
}
|
|
28
|
+
nodes = nodes.slice(0, j);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return nodes[0];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Computes the Merkle root with the provided leaves **asynchronously**.
|
|
36
|
+
* This method uses an asynchronous hash function (defaults to `pedersenHash`).
|
|
37
|
+
*
|
|
38
|
+
* @throws If the number of leaves is not a power of two.
|
|
39
|
+
*/
|
|
40
|
+
export async function computeBalancedMerkleTreeRootAsync(
|
|
41
|
+
leaves: Buffer[],
|
|
42
|
+
hasher = poseidonMerkleHash,
|
|
43
|
+
): Promise<Buffer> {
|
|
44
|
+
const height = getTreeHeight(leaves);
|
|
45
|
+
let nodes = leaves.slice();
|
|
46
|
+
|
|
47
|
+
for (let i = 0; i < height; ++i) {
|
|
48
|
+
let j = 0;
|
|
49
|
+
for (; j < nodes.length / 2; ++j) {
|
|
50
|
+
const l = nodes[j * 2];
|
|
51
|
+
const r = nodes[j * 2 + 1];
|
|
52
|
+
nodes[j] = await hasher(l, r);
|
|
53
|
+
}
|
|
54
|
+
nodes = nodes.slice(0, j);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return nodes[0];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function getTreeHeight(leaves: Buffer[]) {
|
|
61
|
+
if (leaves.length === 0) {
|
|
62
|
+
throw new Error('Cannot compute a Merkle root with no leaves');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const height = Math.log2(leaves.length);
|
|
66
|
+
if (!Number.isInteger(height)) {
|
|
67
|
+
throw new Error('Cannot compute a Merkle root with a non-power-of-two number of leaves');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return height;
|
|
71
|
+
}
|
package/src/trees/hasher.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { pedersenHash as pedersenHashArray } from '../crypto/pedersen/index.js';
|
|
2
|
+
import { poseidon2Hash } from '../crypto/poseidon/index.js';
|
|
3
|
+
import { sha256Trunc } from '../crypto/sha256/index.js';
|
|
4
|
+
|
|
1
5
|
/**
|
|
2
6
|
* Defines hasher interface used by Merkle trees.
|
|
3
7
|
*/
|
|
@@ -37,3 +41,12 @@ export interface AsyncHasher {
|
|
|
37
41
|
*/
|
|
38
42
|
hashInputs(inputs: Buffer[]): Promise<Buffer<ArrayBuffer>>;
|
|
39
43
|
}
|
|
44
|
+
|
|
45
|
+
export const shaMerkleHash: Hasher['hash'] = (left: Buffer, right: Buffer) =>
|
|
46
|
+
sha256Trunc(Buffer.concat([left, right])) as Buffer<ArrayBuffer>;
|
|
47
|
+
|
|
48
|
+
export const pedersenMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
|
|
49
|
+
(await pedersenHashArray([left, right])).toBuffer() as Buffer<ArrayBuffer>;
|
|
50
|
+
|
|
51
|
+
export const poseidonMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
|
|
52
|
+
(await poseidon2Hash([left, right])).toBuffer() as Buffer<ArrayBuffer>;
|
package/src/trees/index.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './unbalanced_tree_store.js';
|
|
1
|
+
export * from './balanced_merkle_tree_root.js';
|
|
3
2
|
export * from './merkle_tree_calculator.js';
|
|
4
3
|
export * from './merkle_tree.js';
|
|
5
4
|
export * from './indexed_merkle_tree_calculator.js';
|
|
@@ -9,3 +8,5 @@ export * from './membership_witness.js';
|
|
|
9
8
|
export * from './hasher.js';
|
|
10
9
|
export * from './indexed_tree_leaf.js';
|
|
11
10
|
export * from './unbalanced_merkle_tree_calculator.js';
|
|
11
|
+
export * from './unbalanced_merkle_tree_root.js';
|
|
12
|
+
export * from './unbalanced_tree_store.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fr } from '../
|
|
1
|
+
import { Fr } from '../curves/bn254/index.js';
|
|
2
2
|
import { assertLength } from '../serialize/index.js';
|
|
3
3
|
import type { IndexedTreeLeafPreimage } from './indexed_tree_leaf.js';
|
|
4
4
|
import { MembershipWitness } from './membership_witness.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { assertMemberLength } from '../array/array.js';
|
|
2
2
|
import { toBigIntBE, toBufferBE } from '../bigint-buffer/index.js';
|
|
3
|
-
import { Fr } from '../
|
|
3
|
+
import { Fr } from '../curves/bn254/field.js';
|
|
4
4
|
import { schemas } from '../schemas/schemas.js';
|
|
5
5
|
import { BufferReader, type Tuple, serializeToBuffer } from '../serialize/index.js';
|
|
6
6
|
import type { SiblingPath } from './sibling_path.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { pedersenHash
|
|
1
|
+
import { pedersenHash } from '@aztec/foundation/crypto/pedersen';
|
|
2
2
|
|
|
3
3
|
import type { AsyncHasher } from './hasher.js';
|
|
4
4
|
import { MerkleTree } from './merkle_tree.js';
|
|
@@ -69,37 +69,4 @@ export class MerkleTreeCalculator {
|
|
|
69
69
|
|
|
70
70
|
return leaves[0];
|
|
71
71
|
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Computes the Merkle root with the provided leaves **synchronously**.
|
|
75
|
-
*
|
|
76
|
-
* This method uses a synchronous hash function (defaults to `sha256Trunc`) and **does not** allow for padding.
|
|
77
|
-
* If the number of leaves is not a power of two, it throws an error.
|
|
78
|
-
* This contrasts with the above non-static async method `computeTreeRoot`, which can handle any number of leaves by
|
|
79
|
-
* padding with zero hashes.
|
|
80
|
-
*/
|
|
81
|
-
static computeTreeRootSync(leaves: Buffer[], hasher = sha256Trunc): Buffer {
|
|
82
|
-
if (leaves.length === 0) {
|
|
83
|
-
throw new Error('Cannot compute a Merkle root with no leaves');
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const height = Math.log2(leaves.length);
|
|
87
|
-
if (!Number.isInteger(height)) {
|
|
88
|
-
throw new Error('Cannot compute a Merkle root with a non-power-of-two number of leaves');
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
let nodes = leaves.slice();
|
|
92
|
-
|
|
93
|
-
for (let i = 0; i < height; ++i) {
|
|
94
|
-
let j = 0;
|
|
95
|
-
for (; j < nodes.length / 2; ++j) {
|
|
96
|
-
const l = nodes[j * 2];
|
|
97
|
-
const r = nodes[j * 2 + 1];
|
|
98
|
-
nodes[j] = hasher(Buffer.concat([l, r]));
|
|
99
|
-
}
|
|
100
|
-
nodes = nodes.slice(0, j);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return nodes[0];
|
|
104
|
-
}
|
|
105
72
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { makeTuple } from '../array/array.js';
|
|
2
|
-
import { pedersenHash } from '../crypto/index.js';
|
|
3
|
-
import { Fr } from '../
|
|
2
|
+
import { pedersenHash } from '../crypto/pedersen/index.js';
|
|
3
|
+
import { Fr } from '../curves/bn254/index.js';
|
|
4
4
|
import { schemas } from '../schemas/index.js';
|
|
5
5
|
import {
|
|
6
6
|
type Tuple,
|
|
@@ -1,17 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { Hasher } from './hasher.js';
|
|
1
|
+
import { type Hasher, shaMerkleHash } from './hasher.js';
|
|
3
2
|
import { SiblingPath } from './sibling_path.js';
|
|
4
3
|
import { type TreeNodeLocation, UnbalancedTreeStore } from './unbalanced_tree_store.js';
|
|
5
4
|
|
|
6
|
-
export function computeCompressedUnbalancedMerkleTreeRoot(
|
|
7
|
-
leaves: Buffer[],
|
|
8
|
-
valueToCompress = Buffer.alloc(32),
|
|
9
|
-
hasher?: Hasher['hash'],
|
|
10
|
-
): Buffer {
|
|
11
|
-
const calculator = UnbalancedMerkleTreeCalculator.create(leaves, valueToCompress, hasher);
|
|
12
|
-
return calculator.getRoot();
|
|
13
|
-
}
|
|
14
|
-
|
|
15
5
|
interface TreeNode {
|
|
16
6
|
value: Buffer;
|
|
17
7
|
leafIndex?: number;
|
|
@@ -32,12 +22,9 @@ export class UnbalancedMerkleTreeCalculator {
|
|
|
32
22
|
public constructor(
|
|
33
23
|
private readonly leaves: Buffer[],
|
|
34
24
|
private readonly valueToCompress: Buffer,
|
|
25
|
+
private readonly emptyRoot: Buffer,
|
|
35
26
|
private readonly hasher: Hasher['hash'],
|
|
36
27
|
) {
|
|
37
|
-
if (leaves.length === 0) {
|
|
38
|
-
throw Error('Cannot create a compressed unbalanced tree with 0 leaves.');
|
|
39
|
-
}
|
|
40
|
-
|
|
41
28
|
this.store = new UnbalancedTreeStore(leaves.length);
|
|
42
29
|
this.buildTree();
|
|
43
30
|
}
|
|
@@ -45,9 +32,10 @@ export class UnbalancedMerkleTreeCalculator {
|
|
|
45
32
|
static create(
|
|
46
33
|
leaves: Buffer[],
|
|
47
34
|
valueToCompress = Buffer.alloc(0),
|
|
48
|
-
|
|
35
|
+
emptyRoot = Buffer.alloc(32),
|
|
36
|
+
hasher = shaMerkleHash,
|
|
49
37
|
) {
|
|
50
|
-
return new UnbalancedMerkleTreeCalculator(leaves, valueToCompress, hasher);
|
|
38
|
+
return new UnbalancedMerkleTreeCalculator(leaves, valueToCompress, emptyRoot, hasher);
|
|
51
39
|
}
|
|
52
40
|
|
|
53
41
|
/**
|
|
@@ -113,8 +101,8 @@ export class UnbalancedMerkleTreeCalculator {
|
|
|
113
101
|
// Start with the leaves that are not compressed.
|
|
114
102
|
let toProcess = this.leafLocations.filter((_, i) => !this.leaves[i].equals(this.valueToCompress));
|
|
115
103
|
if (!toProcess.length) {
|
|
116
|
-
// All leaves are compressed. Set
|
|
117
|
-
this.store.setNode({ level: 0, index: 0 }, { value:
|
|
104
|
+
// All leaves are compressed. Set empty root to the root.
|
|
105
|
+
this.store.setNode({ level: 0, index: 0 }, { value: this.emptyRoot });
|
|
118
106
|
return;
|
|
119
107
|
}
|
|
120
108
|
|
|
@@ -138,10 +126,7 @@ export class UnbalancedMerkleTreeCalculator {
|
|
|
138
126
|
const shouldShiftUp = !sibling || sibling.value.equals(this.valueToCompress);
|
|
139
127
|
if (shouldShiftUp) {
|
|
140
128
|
// The node becomes the parent if the sibling is a compressed leaf.
|
|
141
|
-
|
|
142
|
-
if (!isLeaf) {
|
|
143
|
-
this.shiftChildrenUp(location);
|
|
144
|
-
}
|
|
129
|
+
this.shiftNodeUp(location, parentLocation);
|
|
145
130
|
} else {
|
|
146
131
|
// Hash the value with the (right) sibling and update the parent node.
|
|
147
132
|
const node = this.store.getNode(location)!;
|
|
@@ -157,38 +142,35 @@ export class UnbalancedMerkleTreeCalculator {
|
|
|
157
142
|
}
|
|
158
143
|
}
|
|
159
144
|
|
|
160
|
-
private shiftNodeUp(
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
145
|
+
private shiftNodeUp(from: TreeNodeLocation, to: TreeNodeLocation) {
|
|
146
|
+
// Collect all nodes that need to shift.
|
|
147
|
+
const nodesToShift = this.collectNodesToShift(from, to);
|
|
148
|
+
// Move all nodes to their new locations.
|
|
149
|
+
for (const { node, newLocation } of nodesToShift) {
|
|
150
|
+
this.store.setNode(newLocation, node);
|
|
151
|
+
if (node.leafIndex !== undefined) {
|
|
152
|
+
this.leafLocations[node.leafIndex] = newLocation;
|
|
153
|
+
}
|
|
169
154
|
}
|
|
170
|
-
|
|
171
|
-
return isLeaf;
|
|
172
155
|
}
|
|
173
156
|
|
|
174
|
-
private
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const computeNewLocation = (index: number) => ({
|
|
180
|
-
level,
|
|
181
|
-
index: Math.floor(index / (groupSize * 2)) * groupSize + (index % groupSize),
|
|
182
|
-
});
|
|
157
|
+
private collectNodesToShift(from: TreeNodeLocation, to: TreeNodeLocation) {
|
|
158
|
+
const node = this.store.getNode(from);
|
|
159
|
+
if (!node) {
|
|
160
|
+
return [];
|
|
161
|
+
}
|
|
183
162
|
|
|
184
|
-
|
|
185
|
-
const isRightLeaf = this.shiftNodeUp(right, computeNewLocation(right.index));
|
|
163
|
+
let result = [{ node, newLocation: to }];
|
|
186
164
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
165
|
+
// If not a leaf, collect its children.
|
|
166
|
+
if (node.leafIndex === undefined) {
|
|
167
|
+
const [leftChild, rightChild] = this.store.getChildLocations(from);
|
|
168
|
+
const [leftChildNew, rightChildNew] = this.store.getChildLocations(to);
|
|
169
|
+
result = result
|
|
170
|
+
.concat(this.collectNodesToShift(leftChild, leftChildNew))
|
|
171
|
+
.concat(this.collectNodesToShift(rightChild, rightChildNew));
|
|
192
172
|
}
|
|
173
|
+
|
|
174
|
+
return result;
|
|
193
175
|
}
|
|
194
176
|
}
|