@aztec/foundation 0.0.1-commit.b655e406 → 0.0.1-commit.c0b82b2
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 +15 -0
- package/dest/array/sorted_array.d.ts.map +1 -0
- package/dest/array/sorted_array.js +109 -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 +12 -1
- package/dest/collection/array.d.ts.map +1 -1
- package/dest/collection/array.js +51 -0
- 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 +2 -2
- package/dest/config/network_name.d.ts.map +1 -1
- package/dest/config/network_name.js +2 -0
- 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 -3
- package/dest/crypto/poseidon/index.d.ts.map +1 -1
- package/dest/crypto/poseidon/index.js +14 -33
- 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 +4 -3
- package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
- package/dest/crypto/random/randomness_singleton.js +5 -5
- 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 -3
- package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
- package/dest/crypto/sync/poseidon/index.js +1 -9
- 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/curves/bn254/field.d.ts +181 -0
- package/dest/curves/bn254/field.d.ts.map +1 -0
- package/dest/{fields/fields.js → curves/bn254/field.js} +52 -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/jest/setup.js +28 -1
- 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 +2 -1
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.js +1 -1
- package/dest/json-rpc/client/undici.d.ts +1 -1
- package/dest/json-rpc/client/undici.d.ts.map +1 -1
- package/dest/json-rpc/client/undici.js +21 -4
- 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/api_key_auth.d.ts +19 -0
- package/dest/json-rpc/server/api_key_auth.d.ts.map +1 -0
- package/dest/json-rpc/server/api_key_auth.js +57 -0
- package/dest/json-rpc/server/index.d.ts +2 -1
- package/dest/json-rpc/server/index.d.ts.map +1 -1
- package/dest/json-rpc/server/index.js +1 -0
- 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/server/safe_json_rpc_server.js +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/bigint-utils.d.ts +5 -0
- package/dest/log/bigint-utils.d.ts.map +1 -0
- package/dest/log/bigint-utils.js +18 -0
- 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/gcloud-logger-config.js +3 -0
- package/dest/log/index.d.ts +1 -1
- package/dest/log/libp2p_logger.d.ts +5 -2
- package/dest/log/libp2p_logger.d.ts.map +1 -1
- package/dest/log/libp2p_logger.js +14 -4
- package/dest/log/log-filters.d.ts +17 -4
- package/dest/log/log-filters.d.ts.map +1 -1
- package/dest/log/log-filters.js +26 -12
- 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-server.d.ts +9 -0
- package/dest/log/pino-logger-server.d.ts.map +1 -0
- package/dest/log/pino-logger-server.js +18 -0
- package/dest/log/pino-logger.d.ts +38 -9
- package/dest/log/pino-logger.d.ts.map +1 -1
- package/dest/log/pino-logger.js +122 -29
- 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 +2 -2
- 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 +5 -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 +14 -4
- package/dest/serialize/buffer_reader.d.ts.map +1 -1
- package/dest/serialize/buffer_reader.js +26 -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 +20 -2
- package/dest/serialize/serialize.d.ts.map +1 -1
- package/dest/serialize/serialize.js +32 -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 +4 -1
- package/dest/sleep/index.d.ts.map +1 -1
- package/dest/sleep/index.js +14 -1
- 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 +26 -1
- package/dest/timer/date.d.ts.map +1 -1
- package/dest/timer/date.js +36 -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_client.js +2 -2
- 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 +17 -0
- package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -0
- package/dest/trees/balanced_merkle_tree_root.js +51 -0
- package/dest/trees/hasher.d.ts +3 -1
- package/dest/trees/hasher.d.ts.map +1 -1
- package/dest/trees/hasher.js +10 -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 +7 -18
- package/dest/trees/membership_witness.d.ts.map +1 -1
- package/dest/trees/membership_witness.js +10 -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 +2 -32
- 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 +3 -3
- 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 +6 -2
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +6 -0
- package/dest/url/index.d.ts +1 -1
- package/dest/validation/index.d.ts +1 -1
- package/package.json +50 -9
- package/src/array/array.ts +0 -16
- package/src/array/index.ts +1 -0
- package/src/array/sorted_array.ts +138 -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/collection/array.ts +52 -0
- package/src/config/env_var.ts +82 -15
- package/src/config/index.ts +39 -6
- package/src/config/network_config.ts +2 -0
- package/src/config/network_name.ts +4 -1
- 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 +14 -24
- package/src/crypto/random/randomness_singleton.ts +6 -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 -10
- 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} +53 -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/jest/setup.mjs +31 -1
- package/src/json-rpc/client/safe_json_rpc_client.ts +2 -0
- package/src/json-rpc/client/undici.ts +21 -3
- package/src/json-rpc/server/api_key_auth.ts +63 -0
- package/src/json-rpc/server/index.ts +1 -0
- package/src/json-rpc/server/safe_json_rpc_server.ts +1 -1
- package/src/log/bigint-utils.ts +22 -0
- package/src/log/gcloud-logger-config.ts +5 -0
- package/src/log/libp2p_logger.ts +12 -5
- package/src/log/log-filters.ts +29 -11
- package/src/log/pino-logger-server.ts +25 -0
- package/src/log/pino-logger.ts +144 -39
- package/src/queue/base_memory_queue.ts +1 -1
- package/src/queue/semaphore.ts +5 -0
- 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 +36 -9
- package/src/serialize/field_reader.ts +1 -1
- package/src/serialize/free_funcs.ts +1 -1
- package/src/serialize/serialize.ts +33 -1
- package/src/sleep/index.ts +16 -1
- package/src/testing/files/index.ts +1 -1
- package/src/timer/date.ts +52 -0
- package/src/transport/transport_client.ts +2 -2
- package/src/trees/balanced_merkle_tree_root.ts +68 -0
- package/src/trees/hasher.ts +9 -0
- package/src/trees/index.ts +3 -2
- package/src/trees/indexed_merkle_tree.ts +1 -1
- package/src/trees/membership_witness.ts +9 -1
- package/src/trees/merkle_tree_calculator.ts +2 -35
- package/src/trees/sibling_path.ts +3 -3
- 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 +11 -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 +0 -179
- 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
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { sha256Trunc } from '../crypto/sha256/index.js';
|
|
2
|
-
import { MerkleTreeCalculator } from './merkle_tree_calculator.js';
|
|
3
|
-
/**
|
|
4
|
-
* Computes the Merkle root of an unbalanced tree.
|
|
5
|
-
*
|
|
6
|
-
* Unlike a balanced Merkle tree, which requires the number of leaves to be a power of two, an unbalanced tree can have
|
|
7
|
-
* any number of leaves.
|
|
8
|
-
*
|
|
9
|
-
* The tree is constructed by iteratively extracting the smallest power-of-two-sized subtrees from **right to left**.
|
|
10
|
-
* For each such subtree, it computes the subtree root and then combines all subtree roots (again from right to left)
|
|
11
|
-
* into a single root using the provided hash function.
|
|
12
|
-
*
|
|
13
|
-
* Note: We need the final tree to be as shallow as possible, to minimize the size of the sibling path required to prove
|
|
14
|
-
* membership of a leaf. Therefor, the computation proceeds from right to left - smaller subtrees must always be
|
|
15
|
-
* combined before being merged with a larger sibling on their left.
|
|
16
|
-
*
|
|
17
|
-
* For example, consider an unbalanced tree made of three subtrees of sizes 2, 4, and 8. If we combine the size-2 and
|
|
18
|
-
* size-4 subtrees first (producing a subtree of depth 3), and then merge it with the size-8 subtree (also depth 3), the
|
|
19
|
-
* resulting tree has a maximum depth of 4.
|
|
20
|
-
*
|
|
21
|
-
* But if we instead combine the size-4 and size-8 subtrees first (depth 4), and then merge with the size-2 subtree
|
|
22
|
-
* (depth 1), the final tree has a depth of 5.
|
|
23
|
-
*/ export function computeUnbalancedMerkleTreeRoot(leaves, hasher = sha256Trunc) {
|
|
24
|
-
if (!leaves.length) {
|
|
25
|
-
throw new Error('Cannot compute a Merkle root with no leaves');
|
|
26
|
-
}
|
|
27
|
-
if (leaves.length === 1) {
|
|
28
|
-
return leaves[0];
|
|
29
|
-
}
|
|
30
|
-
let numRemainingLeaves = leaves.length;
|
|
31
|
-
let subtreeSize = 1;
|
|
32
|
-
let root;
|
|
33
|
-
while(numRemainingLeaves > 1){
|
|
34
|
-
if ((numRemainingLeaves & subtreeSize) !== 0) {
|
|
35
|
-
const subtreeLeaves = leaves.slice(numRemainingLeaves - subtreeSize, numRemainingLeaves);
|
|
36
|
-
const subtreeRoot = MerkleTreeCalculator.computeTreeRootSync(subtreeLeaves, hasher);
|
|
37
|
-
if (!root) {
|
|
38
|
-
root = subtreeRoot;
|
|
39
|
-
} else {
|
|
40
|
-
root = hasher(Buffer.concat([
|
|
41
|
-
subtreeRoot,
|
|
42
|
-
root
|
|
43
|
-
]));
|
|
44
|
-
}
|
|
45
|
-
numRemainingLeaves -= subtreeSize;
|
|
46
|
-
}
|
|
47
|
-
subtreeSize *= 2;
|
|
48
|
-
}
|
|
49
|
-
return root;
|
|
50
|
-
}
|
|
51
|
-
/// Get the depth of the maximum balanced tree that can be created with the given number of leaves. The subtree will be
|
|
52
|
-
/// the left most subtree of the wonky tree with a total of `numLeaves` leaves.
|
|
53
|
-
///
|
|
54
|
-
/// Note: All the leaves may not be used to form the tree. For example, if there are 5 leaves, the maximum depth is 2,
|
|
55
|
-
/// only 4 leaves are used to form a balanced tree.
|
|
56
|
-
function getMaxBalancedSubtreeDepth(numLeaves) {
|
|
57
|
-
return Math.floor(Math.log2(numLeaves));
|
|
58
|
-
}
|
|
59
|
-
/// Get the maximum depth of an unbalanced tree that can be created with the given number of leaves.
|
|
60
|
-
function getMaxUnbalancedTreeDepth(numLeaves) {
|
|
61
|
-
return Math.ceil(Math.log2(numLeaves));
|
|
62
|
-
}
|
|
63
|
-
function findPosition(rootLevel, leafLevel, numLeaves, indexOffset, targetIndex) {
|
|
64
|
-
if (numLeaves <= 1) {
|
|
65
|
-
// Single leaf.
|
|
66
|
-
return {
|
|
67
|
-
level: rootLevel,
|
|
68
|
-
indexAtLevel: indexOffset
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
// The largest balanced tree that can be created with the given number of leaves.
|
|
72
|
-
const maxBalancedTreeDepth = getMaxBalancedSubtreeDepth(numLeaves);
|
|
73
|
-
const numBalancedLeaves = 2 ** maxBalancedTreeDepth;
|
|
74
|
-
const numRemainingLeaves = numLeaves - numBalancedLeaves;
|
|
75
|
-
if (targetIndex < numBalancedLeaves) {
|
|
76
|
-
// Target is in the balanced tree.
|
|
77
|
-
// - If numRemainingLeaves is 0: this balanced tree is grown from the current root.
|
|
78
|
-
// - If numRemainingLeaves is not 0: the remaining leaves will form another tree, which will become the right child of the root.
|
|
79
|
-
// And the balanced tree will be the left child of the root.
|
|
80
|
-
// There will be an extra level between the root of the balanced tree and the current root.
|
|
81
|
-
const extraLevel = numRemainingLeaves ? 1 : 0;
|
|
82
|
-
return {
|
|
83
|
-
level: rootLevel + maxBalancedTreeDepth + extraLevel,
|
|
84
|
-
indexAtLevel: indexOffset + targetIndex
|
|
85
|
-
};
|
|
86
|
-
} else {
|
|
87
|
-
// Target is in the right branch.
|
|
88
|
-
const rightBranchMaxLevel = getMaxUnbalancedTreeDepth(numRemainingLeaves);
|
|
89
|
-
const shiftedUp = leafLevel - rootLevel - rightBranchMaxLevel - 1;
|
|
90
|
-
const nextLeafLevel = leafLevel - shiftedUp;
|
|
91
|
-
const newIndexOffset = indexOffset + numBalancedLeaves >> shiftedUp;
|
|
92
|
-
const shiftedTargetIndex = targetIndex - numBalancedLeaves;
|
|
93
|
-
return findPosition(rootLevel + 1, nextLeafLevel, numRemainingLeaves, newIndexOffset, shiftedTargetIndex);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
export function findLeafLevelAndIndex(numLeaves, leafIndex) {
|
|
97
|
-
const maxLevel = getMaxUnbalancedTreeDepth(numLeaves);
|
|
98
|
-
return findPosition(0, maxLevel, numLeaves, 0, leafIndex);
|
|
99
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { Fr } from '../../fields/fields.js';
|
|
2
|
-
import { Bn254G1Point, Bn254G2Point } from './index.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* BN254 utility functions for point operations.
|
|
6
|
-
* Provides compression, decompression, and public key generation for the BN254 curve.
|
|
7
|
-
* Uses the bb.js Barretenberg backend for point operations.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Generate a compressed BN254 G1 public key from a private key.
|
|
12
|
-
*
|
|
13
|
-
* @param privateKeyHex - Private key as 0x-prefixed hex string
|
|
14
|
-
* @returns Compressed G1 point (32 bytes with sign bit in MSB)
|
|
15
|
-
*/
|
|
16
|
-
export async function computeBn254G1PublicKeyCompressed(privateKeyHex: string): Promise<string> {
|
|
17
|
-
const sk = BigInt(privateKeyHex);
|
|
18
|
-
const skReduced = sk % Fr.MODULUS;
|
|
19
|
-
|
|
20
|
-
// Generate G1 point on BN254 curve using bb.js
|
|
21
|
-
const scalar = Fr.fromString(skReduced.toString());
|
|
22
|
-
const pk1 = await Bn254G1Point.generator(scalar);
|
|
23
|
-
|
|
24
|
-
// Compress the point using the primitive method
|
|
25
|
-
return '0x' + pk1.compress().toString('hex');
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Generate uncompressed BN254 G1 public key from a private key.
|
|
30
|
-
*
|
|
31
|
-
* @param privateKeyHex - Private key as 0x-prefixed hex string
|
|
32
|
-
* @returns G1 point in affine coordinates
|
|
33
|
-
*/
|
|
34
|
-
export async function computeBn254G1PublicKey(privateKeyHex: string): Promise<{ x: bigint; y: bigint }> {
|
|
35
|
-
const sk = BigInt(privateKeyHex);
|
|
36
|
-
const skReduced = sk % Fr.MODULUS;
|
|
37
|
-
|
|
38
|
-
const scalar = Fr.fromString(skReduced.toString());
|
|
39
|
-
const pk1 = await Bn254G1Point.generator(scalar);
|
|
40
|
-
|
|
41
|
-
return { x: pk1.x.toBigInt(), y: pk1.y.toBigInt() };
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Generate BN254 G2 public key from a private key.
|
|
46
|
-
*
|
|
47
|
-
* @param privateKeyHex - Private key as 0x-prefixed hex string
|
|
48
|
-
* @returns G2 point in affine coordinates
|
|
49
|
-
*/
|
|
50
|
-
export async function computeBn254G2PublicKey(privateKeyHex: string): Promise<{
|
|
51
|
-
x: { c0: bigint; c1: bigint };
|
|
52
|
-
y: { c0: bigint; c1: bigint };
|
|
53
|
-
}> {
|
|
54
|
-
const sk = BigInt(privateKeyHex);
|
|
55
|
-
const skReduced = sk % Fr.MODULUS;
|
|
56
|
-
|
|
57
|
-
const scalar = Fr.fromString(skReduced.toString());
|
|
58
|
-
const pk2 = await Bn254G2Point.generator(scalar);
|
|
59
|
-
|
|
60
|
-
return {
|
|
61
|
-
x: { c0: pk2.x[0].toBigInt(), c1: pk2.x[1].toBigInt() },
|
|
62
|
-
y: { c0: pk2.y[0].toBigInt(), c1: pk2.y[1].toBigInt() },
|
|
63
|
-
};
|
|
64
|
-
}
|
package/src/crypto/index.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export * from './keccak/index.js';
|
|
2
|
-
export * from './random/index.js';
|
|
3
|
-
export * from './sha256/index.js';
|
|
4
|
-
export * from './sha512/index.js';
|
|
5
|
-
export * from './pedersen/index.js';
|
|
6
|
-
export * from './poseidon/index.js';
|
|
7
|
-
export * from './secp256k1-signer/index.js';
|
|
8
|
-
export * from './keys/index.js';
|
|
9
|
-
export * from './aes128/index.js';
|
|
10
|
-
export * from './bn254/index.js';
|
|
11
|
-
export * from './grumpkin/index.js';
|
|
12
|
-
export * from './ecdsa/index.js';
|
|
13
|
-
export * from './secp256k1/index.js';
|
|
14
|
-
export * from './schnorr/index.js';
|
|
15
|
-
export * from './signature/index.js';
|
|
16
|
-
export * from './bls/index.js';
|
package/src/fields/coordinate.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { toBigIntBE } from '../bigint-buffer/index.js';
|
|
2
|
-
import type { Tuple } from '../serialize/types.js';
|
|
3
|
-
import { Fr } from './fields.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Class to wrap a single point coordinate.
|
|
7
|
-
* This class handles the complexities of representing point coordinates as 32 byte buffers as well as fields.
|
|
8
|
-
* The coordinate value is split across 2 fields to ensure that the max size of a field is not breached.
|
|
9
|
-
* This is achieved by placing the most significant byte of the lower field into the least significant byte of the higher field.
|
|
10
|
-
* Calls to 'toBuffer' or 'toBigInt' undo this change and simply return the original 32 byte value.
|
|
11
|
-
* Calls to 'toFieldsBuffer' will return a 64 bytes buffer containing the serialized fields.
|
|
12
|
-
*/
|
|
13
|
-
export class Coordinate {
|
|
14
|
-
static ZERO = new Coordinate([Fr.ZERO, Fr.ZERO]);
|
|
15
|
-
|
|
16
|
-
constructor(
|
|
17
|
-
/**
|
|
18
|
-
* The fields of the coordinate value. Least significant limb at index 0.
|
|
19
|
-
*/
|
|
20
|
-
public fields: Tuple<Fr, 2>,
|
|
21
|
-
) {}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Converts the coordinate data into a tuple of fields
|
|
25
|
-
* @returns A tuple of the coordinate fields
|
|
26
|
-
*/
|
|
27
|
-
toFields(): Tuple<Fr, 2> {
|
|
28
|
-
return this.fields;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Generates a random coordinate value
|
|
33
|
-
* @returns The random coordinate
|
|
34
|
-
*/
|
|
35
|
-
static random(): Coordinate {
|
|
36
|
-
return this.fromField(Fr.random());
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* serializes the object to buffer of 2 fields.
|
|
41
|
-
* @returns A buffer serialization of the object.
|
|
42
|
-
*/
|
|
43
|
-
toFieldsBuffer(): Buffer {
|
|
44
|
-
return Buffer.concat([this.fields[0].toBuffer(), this.fields[1].toBuffer()]);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* serializes the coordinate to a single 32 byte buffer.
|
|
49
|
-
* @returns A buffer serialization of the object.
|
|
50
|
-
*/
|
|
51
|
-
toBuffer(): Buffer {
|
|
52
|
-
const buf0 = this.fields[0].toBuffer();
|
|
53
|
-
const buf1 = this.fields[1].toBuffer();
|
|
54
|
-
buf0[0] = buf1[31];
|
|
55
|
-
return buf0;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Returns true if this coordinate is equal to the one provided
|
|
60
|
-
* @param other - The coordinate against which to compare
|
|
61
|
-
* @returns True if the coordinates are the same, false otherwise
|
|
62
|
-
*/
|
|
63
|
-
equals(other: Coordinate): boolean {
|
|
64
|
-
return this.toBigInt() === other.toBigInt();
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Returns the coordinate's value as a bigint
|
|
69
|
-
* @returns The coordinate value as a bigint
|
|
70
|
-
*/
|
|
71
|
-
toBigInt(): bigint {
|
|
72
|
-
return toBigIntBE(this.toBuffer());
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Creates a coordinate object from a 32 byte coordinate value
|
|
77
|
-
* @param coordinate - A buffer containing the 32 byte coordinate value
|
|
78
|
-
* @returns The new coordinate object
|
|
79
|
-
*/
|
|
80
|
-
static fromBuffer(coordinate: Buffer) {
|
|
81
|
-
if (coordinate.length != 32) {
|
|
82
|
-
throw new Error(`Invalid size of coordinate buffer`);
|
|
83
|
-
}
|
|
84
|
-
const buf0 = Buffer.alloc(32);
|
|
85
|
-
coordinate.copy(buf0, 0, 0, 32);
|
|
86
|
-
const buf1 = Buffer.alloc(32);
|
|
87
|
-
buf1[31] = buf0[0];
|
|
88
|
-
buf0[0] = 0;
|
|
89
|
-
return new Coordinate([Fr.fromBuffer(buf0), Fr.fromBuffer(buf1)]);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Creates a coordinate object from a field
|
|
94
|
-
* @param coordinate - The field containing the coordinate
|
|
95
|
-
* @returns The new coordinate object
|
|
96
|
-
*/
|
|
97
|
-
static fromField(coordinate: Fr) {
|
|
98
|
-
const buf0 = coordinate.toBuffer();
|
|
99
|
-
const buf1 = Buffer.alloc(32);
|
|
100
|
-
buf1[31] = buf0[0];
|
|
101
|
-
buf0[0] = 0;
|
|
102
|
-
return new Coordinate([Fr.fromBuffer(buf0), Fr.fromBuffer(buf1)]);
|
|
103
|
-
}
|
|
104
|
-
}
|
package/src/fields/index.ts
DELETED
package/src/index.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
// Reexport all folders at the root for packages targeting CommonJS
|
|
2
|
-
export * as asyncMap from './async-map/index.js';
|
|
3
|
-
export * as bigintBuffer from './bigint-buffer/index.js';
|
|
4
|
-
export * as collection from './collection/index.js';
|
|
5
|
-
export * as committable from './committable/index.js';
|
|
6
|
-
export * as crypto from './crypto/index.js';
|
|
7
|
-
export * as errors from './error/index.js';
|
|
8
|
-
export * as ethAddress from './eth-address/index.js';
|
|
9
|
-
export * as fields from './fields/index.js';
|
|
10
|
-
export * as fifo from './queue/index.js';
|
|
11
|
-
export * as fs from './fs/index.js';
|
|
12
|
-
export * as jsonRpc from './json-rpc/index.js';
|
|
13
|
-
export * as jsonRpcClient from './json-rpc/client/index.js';
|
|
14
|
-
export * as jsonRpcServer from './json-rpc/server/index.js';
|
|
15
|
-
export * as log from './log/index.js';
|
|
16
|
-
export * as mutex from './mutex/index.js';
|
|
17
|
-
export * as retry from './retry/index.js';
|
|
18
|
-
export * as runningPromise from './running-promise/index.js';
|
|
19
|
-
export * as serialize from './serialize/index.js';
|
|
20
|
-
export * as sleep from './sleep/index.js';
|
|
21
|
-
export * as timer from './timer/index.js';
|
|
22
|
-
export * as transport from './transport/index.js';
|
|
23
|
-
export * as trees from './trees/index.js';
|
|
24
|
-
export * as types from './types/index.js';
|
|
25
|
-
export * as url from './url/index.js';
|
|
26
|
-
export * as testing from './testing/index.js';
|
|
27
|
-
export * as profiler from './profiler/index.js';
|
|
28
|
-
export * as config from './config/index.js';
|
|
29
|
-
export * as buffer from './buffer/index.js';
|
|
30
|
-
export * as ethSignature from './eth-signature/index.js';
|
|
File without changes
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { sha256Trunc } from '../crypto/sha256/index.js';
|
|
2
|
-
import { MerkleTreeCalculator } from './merkle_tree_calculator.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Computes the Merkle root of an unbalanced tree.
|
|
6
|
-
*
|
|
7
|
-
* Unlike a balanced Merkle tree, which requires the number of leaves to be a power of two, an unbalanced tree can have
|
|
8
|
-
* any number of leaves.
|
|
9
|
-
*
|
|
10
|
-
* The tree is constructed by iteratively extracting the smallest power-of-two-sized subtrees from **right to left**.
|
|
11
|
-
* For each such subtree, it computes the subtree root and then combines all subtree roots (again from right to left)
|
|
12
|
-
* into a single root using the provided hash function.
|
|
13
|
-
*
|
|
14
|
-
* Note: We need the final tree to be as shallow as possible, to minimize the size of the sibling path required to prove
|
|
15
|
-
* membership of a leaf. Therefor, the computation proceeds from right to left - smaller subtrees must always be
|
|
16
|
-
* combined before being merged with a larger sibling on their left.
|
|
17
|
-
*
|
|
18
|
-
* For example, consider an unbalanced tree made of three subtrees of sizes 2, 4, and 8. If we combine the size-2 and
|
|
19
|
-
* size-4 subtrees first (producing a subtree of depth 3), and then merge it with the size-8 subtree (also depth 3), the
|
|
20
|
-
* resulting tree has a maximum depth of 4.
|
|
21
|
-
*
|
|
22
|
-
* But if we instead combine the size-4 and size-8 subtrees first (depth 4), and then merge with the size-2 subtree
|
|
23
|
-
* (depth 1), the final tree has a depth of 5.
|
|
24
|
-
*/
|
|
25
|
-
export function computeUnbalancedMerkleTreeRoot(leaves: Buffer[], hasher = sha256Trunc): Buffer {
|
|
26
|
-
if (!leaves.length) {
|
|
27
|
-
throw new Error('Cannot compute a Merkle root with no leaves');
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (leaves.length === 1) {
|
|
31
|
-
return leaves[0];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
let numRemainingLeaves = leaves.length;
|
|
35
|
-
let subtreeSize = 1;
|
|
36
|
-
let root: Buffer | undefined;
|
|
37
|
-
while (numRemainingLeaves > 1) {
|
|
38
|
-
if ((numRemainingLeaves & subtreeSize) !== 0) {
|
|
39
|
-
const subtreeLeaves = leaves.slice(numRemainingLeaves - subtreeSize, numRemainingLeaves);
|
|
40
|
-
const subtreeRoot = MerkleTreeCalculator.computeTreeRootSync(subtreeLeaves, hasher);
|
|
41
|
-
if (!root) {
|
|
42
|
-
root = subtreeRoot;
|
|
43
|
-
} else {
|
|
44
|
-
root = hasher(Buffer.concat([subtreeRoot, root]));
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
numRemainingLeaves -= subtreeSize;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
subtreeSize *= 2;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return root!;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/// Get the depth of the maximum balanced tree that can be created with the given number of leaves. The subtree will be
|
|
57
|
-
/// the left most subtree of the wonky tree with a total of `numLeaves` leaves.
|
|
58
|
-
///
|
|
59
|
-
/// Note: All the leaves may not be used to form the tree. For example, if there are 5 leaves, the maximum depth is 2,
|
|
60
|
-
/// only 4 leaves are used to form a balanced tree.
|
|
61
|
-
function getMaxBalancedSubtreeDepth(numLeaves: number) {
|
|
62
|
-
return Math.floor(Math.log2(numLeaves));
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/// Get the maximum depth of an unbalanced tree that can be created with the given number of leaves.
|
|
66
|
-
function getMaxUnbalancedTreeDepth(numLeaves: number) {
|
|
67
|
-
return Math.ceil(Math.log2(numLeaves));
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function findPosition(
|
|
71
|
-
rootLevel: number,
|
|
72
|
-
leafLevel: number,
|
|
73
|
-
numLeaves: number,
|
|
74
|
-
indexOffset: number,
|
|
75
|
-
targetIndex: number,
|
|
76
|
-
): { level: number; indexAtLevel: number } {
|
|
77
|
-
if (numLeaves <= 1) {
|
|
78
|
-
// Single leaf.
|
|
79
|
-
return { level: rootLevel, indexAtLevel: indexOffset };
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// The largest balanced tree that can be created with the given number of leaves.
|
|
83
|
-
const maxBalancedTreeDepth = getMaxBalancedSubtreeDepth(numLeaves);
|
|
84
|
-
const numBalancedLeaves = 2 ** maxBalancedTreeDepth;
|
|
85
|
-
const numRemainingLeaves = numLeaves - numBalancedLeaves;
|
|
86
|
-
|
|
87
|
-
if (targetIndex < numBalancedLeaves) {
|
|
88
|
-
// Target is in the balanced tree.
|
|
89
|
-
|
|
90
|
-
// - If numRemainingLeaves is 0: this balanced tree is grown from the current root.
|
|
91
|
-
// - If numRemainingLeaves is not 0: the remaining leaves will form another tree, which will become the right child of the root.
|
|
92
|
-
// And the balanced tree will be the left child of the root.
|
|
93
|
-
// There will be an extra level between the root of the balanced tree and the current root.
|
|
94
|
-
const extraLevel = numRemainingLeaves ? 1 : 0;
|
|
95
|
-
|
|
96
|
-
return { level: rootLevel + maxBalancedTreeDepth + extraLevel, indexAtLevel: indexOffset + targetIndex };
|
|
97
|
-
} else {
|
|
98
|
-
// Target is in the right branch.
|
|
99
|
-
const rightBranchMaxLevel = getMaxUnbalancedTreeDepth(numRemainingLeaves);
|
|
100
|
-
const shiftedUp = leafLevel - rootLevel - rightBranchMaxLevel - 1;
|
|
101
|
-
const nextLeafLevel = leafLevel - shiftedUp;
|
|
102
|
-
const newIndexOffset = (indexOffset + numBalancedLeaves) >> shiftedUp;
|
|
103
|
-
const shiftedTargetIndex = targetIndex - numBalancedLeaves;
|
|
104
|
-
return findPosition(rootLevel + 1, nextLeafLevel, numRemainingLeaves, newIndexOffset, shiftedTargetIndex);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export function findLeafLevelAndIndex(numLeaves: number, leafIndex: number) {
|
|
109
|
-
const maxLevel = getMaxUnbalancedTreeDepth(numLeaves);
|
|
110
|
-
return findPosition(0, maxLevel, numLeaves, 0, leafIndex);
|
|
111
|
-
}
|