@aztec/foundation 0.0.0-test.0 → 0.0.1-commit.0208eb9
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 +6 -9
- package/dest/array/array.d.ts.map +1 -1
- package/dest/array/array.js +11 -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/async-pool/index.d.ts.map +1 -1
- package/dest/async-pool/index.js +1 -0
- package/dest/bigint/index.d.ts +7 -0
- package/dest/bigint/index.d.ts.map +1 -0
- package/dest/bigint/index.js +15 -0
- package/dest/bigint-buffer/index.d.ts +1 -3
- package/dest/bigint-buffer/index.d.ts.map +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 +80 -0
- package/dest/buffer/buffer16.d.ts.map +1 -0
- package/dest/buffer/buffer16.js +102 -0
- package/dest/buffer/buffer32.d.ts +5 -9
- package/dest/buffer/buffer32.d.ts.map +1 -1
- package/dest/buffer/buffer32.js +9 -7
- package/dest/buffer/index.d.ts +2 -1
- package/dest/buffer/index.d.ts.map +1 -1
- package/dest/buffer/index.js +1 -0
- package/dest/collection/array.d.ts +28 -4
- package/dest/collection/array.d.ts.map +1 -1
- package/dest/collection/array.js +108 -3
- package/dest/collection/index.d.ts +1 -1
- package/dest/collection/object.d.ts +17 -1
- package/dest/collection/object.d.ts.map +1 -1
- package/dest/collection/object.js +25 -0
- 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 +62 -4
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +143 -12
- package/dest/config/network_config.d.ts +54 -0
- package/dest/config/network_config.d.ts.map +1 -0
- package/dest/config/network_config.js +11 -0
- package/dest/config/network_name.d.ts +3 -0
- package/dest/config/network_name.d.ts.map +1 -0
- package/dest/config/network_name.js +19 -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 +28 -0
- package/dest/config/secret_value.d.ts.map +1 -0
- package/dest/config/secret_value.js +36 -0
- package/dest/crypto/aes128/index.d.ts +3 -5
- package/dest/crypto/aes128/index.d.ts.map +1 -1
- package/dest/crypto/aes128/index.js +19 -6
- package/dest/crypto/bls/bn254_keystore.d.ts +296 -0
- package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -0
- package/dest/crypto/bls/bn254_keystore.js +218 -0
- package/dest/crypto/bls/index.d.ts +13 -0
- package/dest/crypto/bls/index.d.ts.map +1 -0
- package/dest/crypto/bls/index.js +87 -0
- package/dest/crypto/bn254/index.d.ts +39 -0
- package/dest/crypto/bn254/index.d.ts.map +1 -0
- package/dest/crypto/bn254/index.js +56 -0
- package/dest/crypto/ecdsa/index.d.ts +3 -3
- package/dest/crypto/ecdsa/index.d.ts.map +1 -1
- package/dest/crypto/ecdsa/index.js +62 -48
- package/dest/crypto/ecdsa/signature.d.ts +3 -5
- 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 +10 -15
- package/dest/crypto/grumpkin/index.d.ts.map +1 -1
- package/dest/crypto/grumpkin/index.js +61 -55
- package/dest/crypto/keccak/index.d.ts +3 -5
- package/dest/crypto/keccak/index.d.ts.map +1 -1
- package/dest/crypto/keys/index.d.ts +2 -4
- package/dest/crypto/keys/index.d.ts.map +1 -1
- package/dest/crypto/keys/index.js +8 -5
- package/dest/crypto/pedersen/index.d.ts +1 -1
- package/dest/crypto/pedersen/pedersen.noble.d.ts +3 -5
- package/dest/crypto/pedersen/pedersen.noble.d.ts.map +1 -1
- package/dest/crypto/pedersen/pedersen.wasm.d.ts +4 -6
- package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
- package/dest/crypto/pedersen/pedersen.wasm.js +24 -14
- package/dest/crypto/poseidon/index.d.ts +2 -5
- package/dest/crypto/poseidon/index.d.ts.map +1 -1
- package/dest/crypto/poseidon/index.js +27 -21
- package/dest/crypto/random/index.d.ts +2 -4
- package/dest/crypto/random/index.d.ts.map +1 -1
- package/dest/crypto/random/index.js +2 -34
- package/dest/crypto/random/randomness_singleton.d.ts +4 -5
- 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 +30 -38
- package/dest/crypto/schnorr/signature.d.ts +5 -7
- 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 +5 -7
- package/dest/crypto/secp256k1/index.d.ts.map +1 -1
- package/dest/crypto/secp256k1/index.js +23 -18
- 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 +56 -5
- package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
- package/dest/crypto/secp256k1-signer/utils.js +92 -6
- package/dest/crypto/serialize.d.ts +5 -7
- package/dest/crypto/serialize.d.ts.map +1 -1
- package/dest/crypto/sha256/index.d.ts +23 -6
- package/dest/crypto/sha256/index.d.ts.map +1 -1
- package/dest/crypto/sha256/index.js +43 -1
- package/dest/crypto/sha512/index.d.ts +3 -5
- 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 -4
- 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 -1
- package/dest/crypto/sync/pedersen/index.d.ts +4 -6
- package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
- package/dest/crypto/sync/pedersen/index.js +18 -11
- package/dest/crypto/sync/poseidon/index.d.ts +2 -5
- package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
- package/dest/crypto/sync/poseidon/index.js +23 -16
- package/dest/curves/bls12/field.d.ts +148 -0
- package/dest/curves/bls12/field.d.ts.map +1 -0
- package/dest/curves/bls12/field.js +362 -0
- 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/curves/bls12/point.d.ts +229 -0
- package/dest/curves/bls12/point.d.ts.map +1 -0
- package/dest/curves/bls12/point.js +400 -0
- package/dest/curves/bn254/field.d.ts +180 -0
- package/dest/curves/bn254/field.d.ts.map +1 -0
- package/dest/{fields/fields.js → curves/bn254/field.js} +90 -62
- 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 +14 -7
- package/dest/curves/grumpkin/point.d.ts.map +1 -0
- package/dest/{fields → curves/grumpkin}/point.js +27 -10
- 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 +18 -9
- package/dest/eth-address/index.d.ts.map +1 -1
- package/dest/eth-address/index.js +31 -2
- package/dest/eth-signature/eth_signature.d.ts +17 -15
- package/dest/eth-signature/eth_signature.d.ts.map +1 -1
- package/dest/eth-signature/eth_signature.js +31 -17
- package/dest/eth-signature/index.d.ts +1 -1
- package/dest/fs/index.d.ts +2 -1
- package/dest/fs/index.d.ts.map +1 -1
- package/dest/fs/index.js +1 -0
- package/dest/fs/run_in_dir.d.ts +1 -1
- package/dest/fs/try_rm_dir.d.ts +3 -0
- package/dest/fs/try_rm_dir.d.ts.map +1 -0
- package/dest/fs/try_rm_dir.js +16 -0
- package/dest/iterable/all.d.ts +1 -1
- package/dest/iterable/filter.d.ts +1 -1
- package/dest/iterable/filter.js +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/map.js +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/env.js +48 -0
- package/dest/jest/setup.js +4 -1
- package/dest/jest/setupAfterEnv.js +3 -0
- package/dest/json-rpc/client/fetch.d.ts +3 -3
- package/dest/json-rpc/client/fetch.d.ts.map +1 -1
- package/dest/json-rpc/client/fetch.js +16 -30
- package/dest/json-rpc/client/index.d.ts +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +10 -4
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.js +173 -13
- 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 +27 -11
- package/dest/json-rpc/convert.d.ts +3 -10
- package/dest/json-rpc/convert.d.ts.map +1 -1
- package/dest/json-rpc/convert.js +1 -9
- package/dest/json-rpc/errors.d.ts +4 -0
- package/dest/json-rpc/errors.d.ts.map +1 -0
- package/dest/json-rpc/errors.js +6 -0
- package/dest/json-rpc/fixtures/class_a.d.ts +6 -4
- package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
- package/dest/json-rpc/fixtures/class_b.d.ts +6 -4
- 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 +3 -2
- package/dest/json-rpc/index.d.ts.map +1 -1
- package/dest/json-rpc/index.js +2 -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 +22 -23
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.js +161 -56
- package/dest/json-rpc/test/index.d.ts +1 -1
- package/dest/json-rpc/test/integration.d.ts +2 -3
- package/dest/json-rpc/test/integration.d.ts.map +1 -1
- package/dest/log/console.d.ts +1 -1
- package/dest/log/console.d.ts.map +1 -1
- package/dest/log/gcloud-logger-config.d.ts +1 -2
- package/dest/log/gcloud-logger-config.d.ts.map +1 -1
- package/dest/log/gcloud-logger-config.js +1 -9
- package/dest/log/index.d.ts +5 -5
- package/dest/log/index.d.ts.map +1 -1
- package/dest/log/index.js +4 -4
- 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 +27 -6
- 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 +2 -2
- package/dest/log/log_fn.d.ts.map +1 -1
- package/dest/log/noir_debug_log_util.d.ts +14 -0
- package/dest/log/noir_debug_log_util.d.ts.map +1 -0
- package/dest/log/noir_debug_log_util.js +14 -0
- 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 +40 -11
- package/dest/log/pino-logger.d.ts.map +1 -1
- package/dest/log/pino-logger.js +143 -28
- 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/mutex/mutex_database.d.ts.map +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 +3 -0
- package/dest/number/index.d.ts.map +1 -0
- package/dest/number/index.js +12 -0
- package/dest/profiler/index.d.ts +2 -0
- package/dest/profiler/index.d.ts.map +1 -0
- package/dest/profiler/index.js +1 -0
- package/dest/profiler/profiler.d.ts +8 -0
- package/dest/profiler/profiler.d.ts.map +1 -0
- package/dest/profiler/profiler.js +97 -0
- package/dest/promise/index.d.ts +1 -1
- package/dest/promise/running-promise.d.ts +2 -2
- package/dest/promise/running-promise.d.ts.map +1 -1
- package/dest/promise/running-promise.js +2 -2
- 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 +2 -2
- package/dest/queue/batch_queue.d.ts.map +1 -1
- package/dest/queue/batch_queue.js +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 +3 -3
- package/dest/queue/serial_queue.d.ts.map +1 -1
- package/dest/queue/serial_queue.js +7 -5
- package/dest/retry/index.d.ts +14 -3
- package/dest/retry/index.d.ts.map +1 -1
- package/dest/retry/index.js +13 -2
- package/dest/running-promise/index.d.ts +1 -1
- package/dest/schemas/api.d.ts +1 -1
- package/dest/schemas/api.d.ts.map +1 -1
- package/dest/schemas/index.d.ts +1 -1
- package/dest/schemas/parse.d.ts +1 -1
- package/dest/schemas/parse.js +1 -1
- package/dest/schemas/schemas.d.ts +21 -20
- package/dest/schemas/schemas.d.ts.map +1 -1
- package/dest/schemas/schemas.js +29 -11
- 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 -6
- package/dest/schemas/utils.d.ts.map +1 -1
- package/dest/schemas/utils.js +15 -5
- package/dest/serialize/buffer_reader.d.ts +34 -6
- package/dest/serialize/buffer_reader.d.ts.map +1 -1
- package/dest/serialize/buffer_reader.js +57 -6
- package/dest/serialize/field_reader.d.ts +12 -3
- package/dest/serialize/field_reader.d.ts.map +1 -1
- package/dest/serialize/field_reader.js +19 -2
- package/dest/serialize/free_funcs.d.ts +25 -23
- package/dest/serialize/free_funcs.d.ts.map +1 -1
- package/dest/serialize/free_funcs.js +22 -28
- package/dest/serialize/index.d.ts +1 -1
- package/dest/serialize/serialize.d.ts +6 -7
- 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 +8 -3
- package/dest/string/index.d.ts.map +1 -1
- package/dest/string/index.js +27 -1
- package/dest/testing/files/index.d.ts +2 -3
- package/dest/testing/files/index.d.ts.map +1 -1
- package/dest/testing/files/index.js +3 -3
- package/dest/testing/formatting.d.ts +4 -0
- package/dest/testing/formatting.d.ts.map +1 -0
- package/dest/testing/formatting.js +3 -0
- package/dest/testing/index.d.ts +2 -1
- package/dest/testing/index.d.ts.map +1 -1
- package/dest/testing/index.js +1 -0
- 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 +4 -2
- package/dest/timer/date.d.ts.map +1 -1
- package/dest/timer/date.js +8 -3
- package/dest/timer/elapsed.d.ts +1 -1
- package/dest/timer/index.d.ts +2 -2
- package/dest/timer/index.d.ts.map +1 -1
- package/dest/timer/index.js +1 -1
- package/dest/timer/timeout.d.ts +19 -6
- package/dest/timer/timeout.d.ts.map +1 -1
- package/dest/timer/timeout.js +43 -22
- 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 -2
- package/dest/transport/index.d.ts.map +1 -1
- package/dest/transport/index.js +0 -1
- package/dest/transport/interface/connector.d.ts +1 -1
- package/dest/transport/interface/connector.d.ts.map +1 -1
- package/dest/transport/interface/listener.d.ts +1 -2
- package/dest/transport/interface/listener.d.ts.map +1 -1
- package/dest/transport/interface/socket.d.ts +1 -1
- package/dest/transport/interface/socket.d.ts.map +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 -2
- package/dest/transport/node/node_connector.d.ts.map +1 -1
- package/dest/transport/node/node_connector_socket.d.ts +1 -2
- package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
- package/dest/transport/node/node_listener.d.ts +1 -2
- package/dest/transport/node/node_listener.d.ts.map +1 -1
- package/dest/transport/node/node_listener_socket.d.ts +1 -2
- package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
- package/dest/transport/transport_client.d.ts +1 -2
- 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 +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 +7 -7
- package/dest/trees/hasher.d.ts.map +1 -1
- package/dest/trees/hasher.js +10 -5
- package/dest/trees/index.d.ts +5 -3
- package/dest/trees/index.d.ts.map +1 -1
- package/dest/trees/index.js +4 -2
- package/dest/trees/indexed_merkle_tree.d.ts +1 -3
- 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 +2 -4
- package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/indexed_tree_leaf.d.ts +1 -3
- package/dest/trees/indexed_tree_leaf.d.ts.map +1 -1
- package/dest/trees/membership_witness.d.ts +10 -5
- package/dest/trees/membership_witness.d.ts.map +1 -1
- package/dest/trees/membership_witness.js +23 -1
- package/dest/trees/merkle_tree.d.ts +1 -3
- package/dest/trees/merkle_tree.d.ts.map +1 -1
- package/dest/trees/merkle_tree_calculator.d.ts +2 -4
- package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/merkle_tree_calculator.js +2 -2
- package/dest/trees/sibling_path.d.ts +6 -41
- 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 +48 -0
- package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -0
- package/dest/trees/unbalanced_merkle_tree_calculator.js +154 -0
- 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 +6 -1
- package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
- package/dest/trees/unbalanced_tree_store.js +55 -1
- package/dest/types/index.d.ts +30 -3
- 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/url/index.d.ts.map +1 -1
- package/dest/url/index.js +1 -1
- package/dest/validation/index.d.ts +1 -1
- package/package.json +60 -45
- package/src/array/array.ts +13 -16
- package/src/array/index.ts +1 -0
- package/src/array/sorted_array.ts +133 -0
- package/src/async-pool/index.ts +1 -0
- package/src/bigint/index.ts +20 -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 +133 -0
- package/src/buffer/buffer32.ts +10 -8
- package/src/buffer/index.ts +1 -0
- package/src/collection/array.ts +118 -4
- package/src/collection/object.ts +37 -0
- package/src/config/env_var.ts +194 -59
- package/src/config/index.ts +226 -10
- package/src/config/network_config.ts +18 -0
- package/src/config/network_name.ts +28 -0
- package/src/config/parse-env.ts +4 -0
- package/src/config/secret_value.ts +49 -0
- package/src/crypto/aes128/index.ts +19 -10
- package/src/crypto/bls/bn254_keystore.ts +287 -0
- package/src/crypto/bls/index.ts +77 -0
- package/src/crypto/bn254/index.ts +64 -0
- package/src/crypto/ecdsa/index.ts +41 -23
- package/src/crypto/ecdsa/signature.ts +2 -2
- package/src/crypto/grumpkin/index.ts +38 -46
- package/src/crypto/keys/index.ts +6 -6
- package/src/crypto/pedersen/pedersen.wasm.ts +23 -19
- package/src/crypto/poseidon/index.ts +27 -29
- package/src/crypto/random/index.ts +2 -40
- package/src/crypto/random/randomness_singleton.ts +6 -4
- package/src/crypto/schnorr/index.ts +22 -18
- package/src/crypto/schnorr/signature.ts +2 -2
- package/src/crypto/secp256k1/index.ts +15 -11
- package/src/crypto/secp256k1-signer/utils.ts +120 -7
- package/src/crypto/sha256/index.ts +48 -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 +17 -16
- package/src/crypto/sync/poseidon/index.ts +23 -27
- package/src/curves/bls12/field.ts +463 -0
- package/src/curves/bls12/index.ts +2 -0
- package/src/curves/bls12/point.ts +450 -0
- package/src/{fields/fields.ts → curves/bn254/field.ts} +84 -63
- 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 +27 -10
- package/src/eth-address/index.ts +35 -3
- package/src/eth-signature/eth_signature.ts +44 -22
- package/src/fs/index.ts +1 -0
- package/src/fs/try_rm_dir.ts +15 -0
- package/src/iterable/filter.ts +1 -1
- package/src/iterable/map.ts +1 -1
- package/src/iterator/filter.ts +11 -0
- package/src/iterator/index.ts +1 -0
- package/src/jest/env.mjs +52 -0
- package/src/jest/setup.mjs +4 -1
- package/src/jest/setupAfterEnv.mjs +3 -0
- package/src/json-rpc/client/fetch.ts +14 -33
- package/src/json-rpc/client/safe_json_rpc_client.ts +226 -13
- package/src/json-rpc/client/undici.ts +29 -18
- package/src/json-rpc/convert.ts +3 -12
- package/src/json-rpc/errors.ts +6 -0
- package/src/json-rpc/fixtures/class_a.ts +4 -1
- package/src/json-rpc/fixtures/class_b.ts +4 -1
- package/src/json-rpc/index.ts +2 -1
- package/src/json-rpc/server/safe_json_rpc_server.ts +141 -48
- package/src/json-rpc/test/integration.ts +1 -1
- package/src/log/console.ts +4 -1
- package/src/log/gcloud-logger-config.ts +3 -7
- package/src/log/index.ts +4 -4
- package/src/log/libp2p_logger.ts +33 -7
- package/src/log/log_fn.ts +1 -1
- package/src/log/noir_debug_log_util.ts +21 -0
- package/src/log/pino-logger-server.ts +25 -0
- package/src/log/pino-logger.ts +169 -37
- package/src/message/index.ts +5 -1
- package/src/mutex/mutex_database.ts +2 -3
- package/src/number/index.ts +14 -0
- package/src/profiler/index.ts +1 -0
- package/src/profiler/profiler.ts +125 -0
- package/src/promise/running-promise.ts +2 -2
- package/src/queue/batch_queue.ts +1 -1
- package/src/queue/bounded_serial_queue.ts +4 -1
- package/src/queue/semaphore.ts +5 -0
- package/src/queue/serial_queue.ts +5 -5
- package/src/retry/index.ts +28 -5
- package/src/schemas/api.ts +4 -4
- package/src/schemas/parse.ts +1 -1
- package/src/schemas/schemas.ts +42 -13
- package/src/schemas/types.ts +33 -0
- package/src/schemas/utils.ts +21 -8
- package/src/serialize/buffer_reader.ts +81 -12
- package/src/serialize/field_reader.ts +28 -4
- package/src/serialize/free_funcs.ts +26 -32
- package/src/serialize/serialize.ts +3 -1
- package/src/sleep/index.ts +6 -0
- package/src/string/index.ts +36 -1
- package/src/testing/files/index.ts +7 -3
- package/src/testing/formatting.ts +3 -0
- package/src/testing/index.ts +1 -0
- package/src/timer/date.ts +13 -3
- package/src/timer/index.ts +1 -1
- package/src/timer/timeout.ts +54 -19
- package/src/transport/index.ts +0 -1
- package/src/transport/interface/connector.ts +0 -1
- package/src/transport/interface/listener.ts +2 -3
- package/src/transport/interface/socket.ts +2 -3
- package/src/transport/transport_client.ts +3 -4
- package/src/transport/transport_server.ts +4 -1
- package/src/trees/balanced_merkle_tree_root.ts +68 -0
- package/src/trees/hasher.ts +13 -4
- package/src/trees/index.ts +4 -2
- package/src/trees/indexed_merkle_tree.ts +6 -2
- package/src/trees/indexed_merkle_tree_calculator.ts +2 -2
- package/src/trees/membership_witness.ts +22 -1
- package/src/trees/merkle_tree.ts +4 -1
- package/src/trees/merkle_tree_calculator.ts +10 -5
- package/src/trees/sibling_path.ts +3 -3
- package/src/trees/unbalanced_merkle_tree_calculator.ts +176 -0
- package/src/trees/unbalanced_merkle_tree_root.ts +115 -0
- package/src/trees/unbalanced_tree_store.ts +62 -3
- package/src/types/index.ts +35 -4
- package/src/url/index.ts +0 -1
- package/dest/crypto/index.d.ts +0 -15
- package/dest/crypto/index.d.ts.map +0 -1
- package/dest/crypto/index.js +0 -14
- package/dest/crypto/pedersen/pedersen.elliptic.d.ts +0 -13
- package/dest/crypto/pedersen/pedersen.elliptic.d.ts.map +0 -1
- package/dest/crypto/pedersen/pedersen.elliptic.js +0 -582
- package/dest/fields/coordinate.d.ts +0 -68
- package/dest/fields/coordinate.d.ts.map +0 -1
- package/dest/fields/coordinate.js +0 -96
- package/dest/fields/fields.d.ts +0 -176
- package/dest/fields/fields.d.ts.map +0 -1
- package/dest/fields/index.d.ts +0 -4
- package/dest/fields/index.d.ts.map +0 -1
- package/dest/fields/index.js +0 -3
- package/dest/fields/point.d.ts.map +0 -1
- package/dest/index.d.ts +0 -31
- package/dest/index.d.ts.map +0 -1
- package/dest/index.js +0 -31
- 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/log/debug.d.ts +0 -56
- package/dest/log/debug.d.ts.map +0 -1
- package/dest/log/debug.js +0 -75
- package/dest/log/log_history.d.ts +0 -31
- package/dest/log/log_history.d.ts.map +0 -1
- package/dest/log/log_history.js +0 -38
- package/dest/transport/browser/index.d.ts +0 -5
- package/dest/transport/browser/index.d.ts.map +0 -1
- package/dest/transport/browser/index.js +0 -4
- package/dest/transport/browser/message_port_socket.d.ts +0 -37
- package/dest/transport/browser/message_port_socket.d.ts.map +0 -1
- package/dest/transport/browser/message_port_socket.js +0 -42
- package/dest/transport/browser/shared_worker_connector.d.ts +0 -19
- package/dest/transport/browser/shared_worker_connector.d.ts.map +0 -1
- package/dest/transport/browser/shared_worker_connector.js +0 -19
- package/dest/transport/browser/shared_worker_listener.d.ts +0 -38
- package/dest/transport/browser/shared_worker_listener.d.ts.map +0 -1
- package/dest/transport/browser/shared_worker_listener.js +0 -33
- package/dest/transport/browser/worker_connector.d.ts +0 -26
- package/dest/transport/browser/worker_connector.d.ts.map +0 -1
- package/dest/transport/browser/worker_connector.js +0 -30
- package/dest/transport/browser/worker_listener.d.ts +0 -39
- package/dest/transport/browser/worker_listener.d.ts.map +0 -1
- package/dest/transport/browser/worker_listener.js +0 -35
- package/dest/trees/unbalanced_merkle_tree.d.ts +0 -17
- package/dest/trees/unbalanced_merkle_tree.d.ts.map +0 -1
- package/dest/trees/unbalanced_merkle_tree.js +0 -100
- package/dest/wasm/empty_wasi_sdk.d.ts +0 -130
- package/dest/wasm/empty_wasi_sdk.d.ts.map +0 -1
- package/dest/wasm/empty_wasi_sdk.js +0 -148
- package/dest/wasm/index.d.ts +0 -2
- package/dest/wasm/index.d.ts.map +0 -1
- package/dest/wasm/index.js +0 -1
- package/dest/wasm/wasm_module.d.ts +0 -136
- package/dest/wasm/wasm_module.d.ts.map +0 -1
- package/dest/wasm/wasm_module.js +0 -196
- package/dest/worker/browser/index.d.ts +0 -3
- package/dest/worker/browser/index.d.ts.map +0 -1
- package/dest/worker/browser/index.js +0 -2
- package/dest/worker/browser/start_web_module.d.ts +0 -7
- package/dest/worker/browser/start_web_module.d.ts.map +0 -1
- package/dest/worker/browser/start_web_module.js +0 -27
- package/dest/worker/browser/web_data_store.d.ts +0 -24
- package/dest/worker/browser/web_data_store.d.ts.map +0 -1
- package/dest/worker/browser/web_data_store.js +0 -29
- package/dest/worker/browser/web_worker.d.ts +0 -10
- package/dest/worker/browser/web_worker.d.ts.map +0 -1
- package/dest/worker/browser/web_worker.js +0 -25
- package/dest/worker/data_store.d.ts +0 -21
- package/dest/worker/data_store.d.ts.map +0 -1
- package/dest/worker/data_store.js +0 -3
- package/dest/worker/index.d.ts +0 -3
- package/dest/worker/index.d.ts.map +0 -1
- package/dest/worker/index.js +0 -1
- package/dest/worker/node/index.d.ts +0 -3
- package/dest/worker/node/index.d.ts.map +0 -1
- package/dest/worker/node/index.js +0 -2
- package/dest/worker/node/node_data_store.d.ts +0 -13
- package/dest/worker/node/node_data_store.d.ts.map +0 -1
- package/dest/worker/node/node_data_store.js +0 -20
- package/dest/worker/node/node_worker.d.ts +0 -6
- package/dest/worker/node/node_worker.d.ts.map +0 -1
- package/dest/worker/node/node_worker.js +0 -22
- package/dest/worker/node/start_node_module.d.ts +0 -7
- package/dest/worker/node/start_node_module.d.ts.map +0 -1
- package/dest/worker/node/start_node_module.js +0 -31
- package/dest/worker/wasm_worker.d.ts +0 -9
- package/dest/worker/wasm_worker.d.ts.map +0 -1
- package/dest/worker/wasm_worker.js +0 -3
- package/dest/worker/worker_pool.d.ts +0 -40
- package/dest/worker/worker_pool.d.ts.map +0 -1
- package/dest/worker/worker_pool.js +0 -51
- package/src/crypto/index.ts +0 -14
- package/src/crypto/pedersen/pedersen.elliptic.ts +0 -584
- package/src/fields/coordinate.ts +0 -104
- package/src/fields/index.ts +0 -3
- package/src/index.ts +0 -31
- package/src/json-rpc/server/telemetry.ts +0 -0
- package/src/log/debug.ts +0 -104
- package/src/log/log_history.ts +0 -44
- package/src/transport/browser/index.ts +0 -4
- package/src/transport/browser/message_port_socket.ts +0 -48
- package/src/transport/browser/shared_worker_connector.ts +0 -21
- package/src/transport/browser/shared_worker_listener.ts +0 -53
- package/src/transport/browser/worker_connector.ts +0 -30
- package/src/transport/browser/worker_listener.ts +0 -54
- package/src/trees/unbalanced_merkle_tree.ts +0 -103
- package/src/wasm/README.md +0 -6
- package/src/wasm/empty_wasi_sdk.ts +0 -166
- package/src/wasm/fixtures/gcd.wasm +0 -0
- package/src/wasm/fixtures/gcd.wat +0 -27
- package/src/wasm/index.ts +0 -1
- package/src/wasm/wasm_module.ts +0 -260
- package/src/worker/browser/index.ts +0 -2
- package/src/worker/browser/start_web_module.ts +0 -24
- package/src/worker/browser/web_data_store.ts +0 -38
- package/src/worker/browser/web_worker.ts +0 -25
- package/src/worker/data_store.ts +0 -19
- package/src/worker/index.ts +0 -2
- package/src/worker/node/index.ts +0 -2
- package/src/worker/node/node_data_store.ts +0 -27
- package/src/worker/node/node_worker.ts +0 -23
- package/src/worker/node/start_node_module.ts +0 -30
- package/src/worker/wasm_worker.ts +0 -7
- package/src/worker/worker_pool.ts +0 -73
package/src/timer/timeout.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TimeoutError } from '../error/index.js';
|
|
2
|
+
import { promiseWithResolvers } from '../promise/utils.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* TimeoutTask class creates an instance for managing and executing a given asynchronous function with a specified timeout duration.
|
|
@@ -8,15 +9,15 @@ import { TimeoutError } from '../error/index.js';
|
|
|
8
9
|
* @typeparam T - The return type of the asynchronous function to be executed.
|
|
9
10
|
*/
|
|
10
11
|
export class TimeoutTask<T> {
|
|
11
|
-
private interruptPromise!: Promise<any>;
|
|
12
|
-
private interrupt = () => {};
|
|
13
12
|
private totalTime = 0;
|
|
13
|
+
private timeoutPromise: Promise<never> | undefined;
|
|
14
14
|
|
|
15
|
-
constructor(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
constructor(
|
|
16
|
+
private fn: (signal: AbortSignal) => Promise<T>,
|
|
17
|
+
private timeout: number,
|
|
18
|
+
private errorFn: () => Error,
|
|
19
|
+
private onAbort?: () => void,
|
|
20
|
+
) {}
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* Executes the given function with a specified timeout.
|
|
@@ -27,15 +28,22 @@ export class TimeoutTask<T> {
|
|
|
27
28
|
* @throws An error with a message indicating the function was interrupted due to exceeding the specified timeout.
|
|
28
29
|
*/
|
|
29
30
|
public async exec() {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
const signal = AbortSignal.timeout(this.timeout);
|
|
32
|
+
this.timeoutPromise = new Promise<never>((_, reject) => {
|
|
33
|
+
signal!.addEventListener(
|
|
34
|
+
'abort',
|
|
35
|
+
() => {
|
|
36
|
+
this.onAbort?.();
|
|
37
|
+
reject(this.errorFn());
|
|
38
|
+
},
|
|
39
|
+
{ once: true },
|
|
40
|
+
);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const start = Date.now();
|
|
44
|
+
const result = await Promise.race<T>([this.fn(signal), this.timeoutPromise]);
|
|
45
|
+
this.totalTime = Date.now() - start;
|
|
46
|
+
return result;
|
|
39
47
|
}
|
|
40
48
|
|
|
41
49
|
/**
|
|
@@ -46,7 +54,7 @@ export class TimeoutTask<T> {
|
|
|
46
54
|
* @returns The interrupt promise associated with the task.
|
|
47
55
|
*/
|
|
48
56
|
public getInterruptPromise() {
|
|
49
|
-
return this.
|
|
57
|
+
return this.timeoutPromise;
|
|
50
58
|
}
|
|
51
59
|
|
|
52
60
|
/**
|
|
@@ -60,11 +68,38 @@ export class TimeoutTask<T> {
|
|
|
60
68
|
}
|
|
61
69
|
}
|
|
62
70
|
|
|
63
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Executes a function with a timeout.
|
|
73
|
+
* @param fn - The function to execute, accepts AbortSignal and returns a Promise.
|
|
74
|
+
* @param timeout - The maximum time in milliseconds to allow the function to run.
|
|
75
|
+
* @param errorOrFnName - Optional function name or a function that returns an Error to throw if the timeout is reached.
|
|
76
|
+
* @param onAbort - Optional callback to execute when the task is aborted.
|
|
77
|
+
*
|
|
78
|
+
* @returns A Promise that resolves with the result of the function fn if it completes within the timeout
|
|
79
|
+
*
|
|
80
|
+
* */
|
|
81
|
+
export async function executeTimeout<T>(
|
|
82
|
+
fn: (signal: AbortSignal) => Promise<T>,
|
|
83
|
+
timeout: number,
|
|
84
|
+
errorOrFnName?: string | (() => Error),
|
|
85
|
+
onAbort?: () => void,
|
|
86
|
+
) {
|
|
64
87
|
const errorFn =
|
|
65
88
|
typeof errorOrFnName === 'function'
|
|
66
89
|
? errorOrFnName
|
|
67
90
|
: () => new TimeoutError(`Timeout running ${errorOrFnName ?? 'function'} after ${timeout}ms.`);
|
|
68
|
-
const task = new TimeoutTask(fn, timeout, errorFn);
|
|
91
|
+
const task = new TimeoutTask(fn, timeout, errorFn, onAbort);
|
|
69
92
|
return await task.exec();
|
|
70
93
|
}
|
|
94
|
+
|
|
95
|
+
/** Returns a promise that rejects after the given timeout */
|
|
96
|
+
export function timeoutPromise(timeoutMs: number, errorMessage?: string) {
|
|
97
|
+
const promise = promiseWithResolvers<never>();
|
|
98
|
+
|
|
99
|
+
const timer = setTimeout(() => {
|
|
100
|
+
promise.reject(new TimeoutError(errorMessage ?? `Operation timed out after ${timeoutMs}ms`));
|
|
101
|
+
}, timeoutMs);
|
|
102
|
+
|
|
103
|
+
const cleanup = () => clearTimeout(timer);
|
|
104
|
+
return promise.promise.finally(cleanup);
|
|
105
|
+
}
|
package/src/transport/index.ts
CHANGED
|
@@ -7,10 +7,9 @@ import type { Socket } from './socket.js';
|
|
|
7
7
|
* Possible implementations could include MessageChannels or WebSockets.
|
|
8
8
|
*/
|
|
9
9
|
export interface Listener extends EventEmitter {
|
|
10
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
11
10
|
open(): void;
|
|
12
|
-
|
|
11
|
+
|
|
13
12
|
close(): void;
|
|
14
|
-
|
|
13
|
+
|
|
15
14
|
on(name: 'new_socket', cb: (client: Socket) => void): this;
|
|
16
15
|
}
|
|
@@ -6,10 +6,9 @@
|
|
|
6
6
|
* If `registerHandler` callback receives `undefined` that signals the other end closed.
|
|
7
7
|
*/
|
|
8
8
|
export interface Socket {
|
|
9
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
10
9
|
send(msg: any, transfer?: Transferable[]): Promise<void>;
|
|
11
|
-
|
|
10
|
+
|
|
12
11
|
registerHandler(cb: (msg: any) => any): void;
|
|
13
|
-
|
|
12
|
+
|
|
14
13
|
close(): void;
|
|
15
14
|
}
|
|
@@ -18,9 +18,9 @@ interface PendingRequest {
|
|
|
18
18
|
* The unique message identifier used for tracking and matching request/response pairs.
|
|
19
19
|
*/
|
|
20
20
|
msgId: number;
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
resolve(data: any): void;
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
reject(error: Error): void;
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -30,9 +30,8 @@ interface PendingRequest {
|
|
|
30
30
|
* for efficient and concurrent communication with a corresponding TransportServer.
|
|
31
31
|
*/
|
|
32
32
|
export interface ITransportClient<Payload> extends EventEmitter {
|
|
33
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
34
33
|
on(name: 'event_msg', handler: (payload: Payload) => void): this;
|
|
35
|
-
|
|
34
|
+
|
|
36
35
|
emit(name: 'event_msg', payload: Payload): boolean;
|
|
37
36
|
}
|
|
38
37
|
|
|
@@ -9,7 +9,10 @@ import { isTransferDescriptor } from './interface/transferable.js';
|
|
|
9
9
|
export class TransportServer<Payload> {
|
|
10
10
|
private sockets: Socket[] = [];
|
|
11
11
|
|
|
12
|
-
constructor(
|
|
12
|
+
constructor(
|
|
13
|
+
private listener: Listener,
|
|
14
|
+
private msgHandlerFn: (msg: Payload) => Promise<any>,
|
|
15
|
+
) {}
|
|
13
16
|
|
|
14
17
|
/**
|
|
15
18
|
* Starts the TransportServer, allowing it to accept new connections and handle incoming messages.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { poseidonMerkleHash, shaMerkleHash } from './hasher.js';
|
|
2
|
+
|
|
3
|
+
export const computeBalancedShaRoot = (leaves: Buffer[]) => computeBalancedMerkleTreeRoot(leaves);
|
|
4
|
+
|
|
5
|
+
export const computeBalancedPoseidonRoot = async (leaves: Buffer[]) =>
|
|
6
|
+
await computeBalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Computes the Merkle root with the provided leaves **synchronously**.
|
|
10
|
+
* This method uses a synchronous hash function (defaults to `sha256Trunc`).
|
|
11
|
+
*
|
|
12
|
+
* @throws If the number of leaves is not a power of two.
|
|
13
|
+
*/
|
|
14
|
+
export function computeBalancedMerkleTreeRoot(leaves: Buffer[], hasher = shaMerkleHash): Buffer {
|
|
15
|
+
const height = getTreeHeight(leaves);
|
|
16
|
+
let nodes = leaves.slice();
|
|
17
|
+
|
|
18
|
+
for (let i = 0; i < height; ++i) {
|
|
19
|
+
let j = 0;
|
|
20
|
+
for (; j < nodes.length / 2; ++j) {
|
|
21
|
+
const l = nodes[j * 2];
|
|
22
|
+
const r = nodes[j * 2 + 1];
|
|
23
|
+
nodes[j] = hasher(l, r);
|
|
24
|
+
}
|
|
25
|
+
nodes = nodes.slice(0, j);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return nodes[0];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Computes the Merkle root with the provided leaves **asynchronously**.
|
|
33
|
+
* This method uses an asynchronous hash function (defaults to `poseidon2Hash`).
|
|
34
|
+
*
|
|
35
|
+
* @throws If the number of leaves is not a power of two.
|
|
36
|
+
*/
|
|
37
|
+
export async function computeBalancedMerkleTreeRootAsync(
|
|
38
|
+
leaves: Buffer[],
|
|
39
|
+
hasher = poseidonMerkleHash,
|
|
40
|
+
): Promise<Buffer> {
|
|
41
|
+
const height = getTreeHeight(leaves);
|
|
42
|
+
let nodes = leaves.slice();
|
|
43
|
+
|
|
44
|
+
for (let i = 0; i < height; ++i) {
|
|
45
|
+
let j = 0;
|
|
46
|
+
for (; j < nodes.length / 2; ++j) {
|
|
47
|
+
const l = nodes[j * 2];
|
|
48
|
+
const r = nodes[j * 2 + 1];
|
|
49
|
+
nodes[j] = await hasher(l, r);
|
|
50
|
+
}
|
|
51
|
+
nodes = nodes.slice(0, j);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return nodes[0];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function getTreeHeight(leaves: Buffer[]) {
|
|
58
|
+
if (leaves.length === 0) {
|
|
59
|
+
throw new Error('Cannot compute a Merkle root with no leaves');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const height = Math.log2(leaves.length);
|
|
63
|
+
if (!Number.isInteger(height)) {
|
|
64
|
+
throw new Error('Cannot compute a Merkle root with a non-power-of-two number of leaves');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return height;
|
|
68
|
+
}
|
package/src/trees/hasher.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { poseidon2Hash } from '../crypto/poseidon/index.js';
|
|
2
|
+
import { sha256Trunc } from '../crypto/sha256/index.js';
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* Defines hasher interface used by Merkle trees.
|
|
3
6
|
*/
|
|
@@ -8,14 +11,14 @@ export interface Hasher {
|
|
|
8
11
|
* @param rhs - The second array.
|
|
9
12
|
* @returns The new 32-byte hash.
|
|
10
13
|
*/
|
|
11
|
-
hash(lhs: Uint8Array, rhs: Uint8Array): Buffer
|
|
14
|
+
hash(lhs: Uint8Array, rhs: Uint8Array): Buffer<ArrayBuffer>;
|
|
12
15
|
|
|
13
16
|
/**
|
|
14
17
|
* Hashes an array of buffers.
|
|
15
18
|
* @param inputs - The array of buffers to hash.
|
|
16
19
|
* @returns The resulting 32-byte hash.
|
|
17
20
|
*/
|
|
18
|
-
hashInputs(inputs: Buffer[]): Buffer
|
|
21
|
+
hashInputs(inputs: Buffer[]): Buffer<ArrayBuffer>;
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
/**
|
|
@@ -28,12 +31,18 @@ export interface AsyncHasher {
|
|
|
28
31
|
* @param rhs - The second array.
|
|
29
32
|
* @returns The new 32-byte hash.
|
|
30
33
|
*/
|
|
31
|
-
hash(lhs: Uint8Array, rhs: Uint8Array): Promise<Buffer
|
|
34
|
+
hash(lhs: Uint8Array, rhs: Uint8Array): Promise<Buffer<ArrayBuffer>>;
|
|
32
35
|
|
|
33
36
|
/**
|
|
34
37
|
* Hashes an array of buffers.
|
|
35
38
|
* @param inputs - The array of buffers to hash.
|
|
36
39
|
* @returns The resulting 32-byte hash.
|
|
37
40
|
*/
|
|
38
|
-
hashInputs(inputs: Buffer[]): Promise<Buffer
|
|
41
|
+
hashInputs(inputs: Buffer[]): Promise<Buffer<ArrayBuffer>>;
|
|
39
42
|
}
|
|
43
|
+
|
|
44
|
+
export const shaMerkleHash: Hasher['hash'] = (left: Buffer, right: Buffer) =>
|
|
45
|
+
sha256Trunc(Buffer.concat([left, right])) as Buffer<ArrayBuffer>;
|
|
46
|
+
|
|
47
|
+
export const poseidonMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
|
|
48
|
+
(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';
|
|
@@ -8,3 +7,6 @@ export * from './sibling_path.js';
|
|
|
8
7
|
export * from './membership_witness.js';
|
|
9
8
|
export * from './hasher.js';
|
|
10
9
|
export * from './indexed_tree_leaf.js';
|
|
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';
|
|
@@ -6,7 +6,11 @@ import { MerkleTree } from './merkle_tree.js';
|
|
|
6
6
|
|
|
7
7
|
/** A simple immutable indexed merkle tree container. Use a IndexedMerkleTreeCalculator to create a new instance from a set of leaves. */
|
|
8
8
|
export class IndexedMerkleTree<T extends IndexedTreeLeafPreimage, N extends number> extends MerkleTree {
|
|
9
|
-
constructor(
|
|
9
|
+
constructor(
|
|
10
|
+
height: N,
|
|
11
|
+
nodes: Buffer[],
|
|
12
|
+
public readonly leafPreimages: T[],
|
|
13
|
+
) {
|
|
10
14
|
super(height, nodes);
|
|
11
15
|
}
|
|
12
16
|
|
|
@@ -28,7 +28,7 @@ export class IndexedMerkleTreeCalculator<T extends IndexedTreeLeafPreimage, N ex
|
|
|
28
28
|
) {
|
|
29
29
|
const zeroHashes = [zeroLeaf];
|
|
30
30
|
for (let i = 0; i < height; i++) {
|
|
31
|
-
zeroHashes.push(await hasher.hash(zeroHashes[i], zeroHashes[i]));
|
|
31
|
+
zeroHashes.push((await hasher.hash(zeroHashes[i], zeroHashes[i])) as Buffer<ArrayBuffer>);
|
|
32
32
|
}
|
|
33
33
|
return new IndexedMerkleTreeCalculator(height, zeroHashes, hasher, factory);
|
|
34
34
|
}
|
|
@@ -59,7 +59,7 @@ export class IndexedMerkleTreeCalculator<T extends IndexedTreeLeafPreimage, N ex
|
|
|
59
59
|
|
|
60
60
|
for (let i = 0; i < this.height; ++i) {
|
|
61
61
|
const numLeaves = 2 ** (this.height - i);
|
|
62
|
-
const newLeaves: Buffer[] = [];
|
|
62
|
+
const newLeaves: Buffer<ArrayBuffer>[] = [];
|
|
63
63
|
for (let j = 0; j < leaves.length / 2; ++j) {
|
|
64
64
|
const l = leaves[j * 2];
|
|
65
65
|
const r = leaves[j * 2 + 1] || this.zeroHashes[i];
|
|
@@ -1,6 +1,7 @@
|
|
|
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
|
+
import { schemas } from '../schemas/schemas.js';
|
|
4
5
|
import { BufferReader, type Tuple, serializeToBuffer } from '../serialize/index.js';
|
|
5
6
|
import type { SiblingPath } from './sibling_path.js';
|
|
6
7
|
|
|
@@ -29,6 +30,26 @@ export class MembershipWitness<N extends number> {
|
|
|
29
30
|
return serializeToBuffer(toBufferBE(this.leafIndex, 32), ...this.siblingPath);
|
|
30
31
|
}
|
|
31
32
|
|
|
33
|
+
toJSON() {
|
|
34
|
+
return this.toBuffer();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
toFields(): Fr[] {
|
|
38
|
+
return [new Fr(this.leafIndex), ...this.siblingPath];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Returns a representation of the membership witness as expected by intrinsic Noir deserialization.
|
|
43
|
+
*/
|
|
44
|
+
public toNoirRepresentation(): (string | string[])[] {
|
|
45
|
+
// TODO(#12874): remove the stupid as string conversion by modifying ForeignCallOutput type in acvm.js
|
|
46
|
+
return [new Fr(this.leafIndex).toString() as string, this.siblingPath.map(fr => fr.toString()) as string[]];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
static schemaFor<N extends number>(size: N) {
|
|
50
|
+
return schemas.Buffer.transform(b => MembershipWitness.fromBuffer(b, size));
|
|
51
|
+
}
|
|
52
|
+
|
|
32
53
|
/**
|
|
33
54
|
* Creates a random membership witness. Used for testing purposes.
|
|
34
55
|
* @param pathSize - Number of fields in the sibling path.
|
package/src/trees/merkle_tree.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/** A simple immutable Merkle tree container. Use a MerkleTreeCalculator to create a new instance from a set of leaves. */
|
|
2
2
|
export class MerkleTree {
|
|
3
|
-
constructor(
|
|
3
|
+
constructor(
|
|
4
|
+
public readonly height: number,
|
|
5
|
+
public readonly nodes: Buffer[],
|
|
6
|
+
) {
|
|
4
7
|
const expectedNodeCount = 2 ** (height + 1) - 1;
|
|
5
8
|
if (nodes.length !== expectedNodeCount) {
|
|
6
9
|
throw new Error(`Invalid node count for Merkle tree: got ${nodes.length} but expected ${expectedNodeCount}`);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
2
2
|
|
|
3
3
|
import type { AsyncHasher } from './hasher.js';
|
|
4
4
|
import { MerkleTree } from './merkle_tree.js';
|
|
@@ -7,18 +7,23 @@ import { MerkleTree } from './merkle_tree.js';
|
|
|
7
7
|
* Merkle tree calculator.
|
|
8
8
|
*/
|
|
9
9
|
export class MerkleTreeCalculator {
|
|
10
|
-
private constructor(
|
|
10
|
+
private constructor(
|
|
11
|
+
private height: number,
|
|
12
|
+
private zeroHashes: Buffer[],
|
|
13
|
+
private hasher: AsyncHasher['hash'],
|
|
14
|
+
) {
|
|
11
15
|
this.hasher = hasher;
|
|
12
16
|
}
|
|
13
17
|
|
|
14
18
|
static async create(
|
|
15
19
|
height: number,
|
|
16
|
-
zeroLeaf = Buffer.alloc(32),
|
|
17
|
-
hasher = async (left: Buffer, right: Buffer) =>
|
|
20
|
+
zeroLeaf: Buffer = Buffer.alloc(32),
|
|
21
|
+
hasher = async (left: Buffer, right: Buffer) =>
|
|
22
|
+
(await poseidon2Hash([left, right])).toBuffer() as Buffer<ArrayBuffer>,
|
|
18
23
|
) {
|
|
19
24
|
const zeroHashes = [zeroLeaf];
|
|
20
25
|
for (let i = 0; i < height; i++) {
|
|
21
|
-
zeroHashes.push(await hasher(zeroHashes[i], zeroHashes[i]));
|
|
26
|
+
zeroHashes.push((await hasher(zeroHashes[i], zeroHashes[i])) as Buffer<ArrayBuffer>);
|
|
22
27
|
}
|
|
23
28
|
return new MerkleTreeCalculator(height, zeroHashes, hasher);
|
|
24
29
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { makeTuple } from '../array/array.js';
|
|
2
|
-
import {
|
|
3
|
-
import { Fr } from '../
|
|
2
|
+
import { poseidon2Hash } from '../crypto/poseidon/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,
|
|
@@ -172,7 +172,7 @@ export async function computeRootFromSiblingPath(
|
|
|
172
172
|
leaf: Buffer,
|
|
173
173
|
siblingPath: Buffer[],
|
|
174
174
|
index: number,
|
|
175
|
-
hasher = async (left: Buffer, right: Buffer) => (await
|
|
175
|
+
hasher = async (left: Buffer, right: Buffer) => (await poseidon2Hash([left, right])).toBuffer(),
|
|
176
176
|
) {
|
|
177
177
|
let result = leaf;
|
|
178
178
|
for (const sibling of siblingPath) {
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { type Hasher, shaMerkleHash } from './hasher.js';
|
|
2
|
+
import { SiblingPath } from './sibling_path.js';
|
|
3
|
+
import { type TreeNodeLocation, UnbalancedTreeStore } from './unbalanced_tree_store.js';
|
|
4
|
+
|
|
5
|
+
interface TreeNode {
|
|
6
|
+
value: Buffer;
|
|
7
|
+
leafIndex?: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* An ephemeral unbalanced Merkle tree implementation.
|
|
12
|
+
* Follows the rollup implementation which greedily hashes pairs of nodes up the tree.
|
|
13
|
+
* Remaining rightmost nodes are shifted up until they can be paired.
|
|
14
|
+
* The values that match the `valueToCompress` are skipped and the sibling of the compressed leaf are shifted up until
|
|
15
|
+
* they can be paired.
|
|
16
|
+
* If there is only one leaf, the root is the leaf.
|
|
17
|
+
*/
|
|
18
|
+
export class UnbalancedMerkleTreeCalculator {
|
|
19
|
+
private store: UnbalancedTreeStore<TreeNode>;
|
|
20
|
+
private leafLocations: TreeNodeLocation[] = [];
|
|
21
|
+
|
|
22
|
+
public constructor(
|
|
23
|
+
private readonly leaves: Buffer[],
|
|
24
|
+
private readonly valueToCompress: Buffer,
|
|
25
|
+
private readonly emptyRoot: Buffer,
|
|
26
|
+
private readonly hasher: Hasher['hash'],
|
|
27
|
+
) {
|
|
28
|
+
this.store = new UnbalancedTreeStore(leaves.length);
|
|
29
|
+
this.buildTree();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static create(
|
|
33
|
+
leaves: Buffer[],
|
|
34
|
+
valueToCompress = Buffer.alloc(0),
|
|
35
|
+
emptyRoot = Buffer.alloc(32),
|
|
36
|
+
hasher = shaMerkleHash,
|
|
37
|
+
) {
|
|
38
|
+
return new UnbalancedMerkleTreeCalculator(leaves, valueToCompress, emptyRoot, hasher);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Returns the root of the tree.
|
|
43
|
+
* @returns The root of the tree.
|
|
44
|
+
*/
|
|
45
|
+
public getRoot(): Buffer {
|
|
46
|
+
return this.store.getRoot()!.value;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Returns a sibling path for the element.
|
|
51
|
+
* @param value - The value of the element.
|
|
52
|
+
* @returns A sibling path for the element.
|
|
53
|
+
* Note: The sibling path is an array of sibling hashes, with the lowest hash (leaf hash) first, and the highest hash last.
|
|
54
|
+
*/
|
|
55
|
+
public getSiblingPath<N extends number>(value: Buffer): SiblingPath<N> {
|
|
56
|
+
const leafIndex = this.leaves.findIndex(leaf => leaf.equals(value));
|
|
57
|
+
if (leafIndex === -1) {
|
|
58
|
+
throw Error(`Leaf value ${value.toString('hex')} not found in tree.`);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return this.getSiblingPathByLeafIndex(leafIndex);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Returns a sibling path for the leaf at the given index.
|
|
66
|
+
* @param leafIndex - The index of the leaf.
|
|
67
|
+
* @returns A sibling path for the leaf.
|
|
68
|
+
*/
|
|
69
|
+
public getSiblingPathByLeafIndex<N extends number>(leafIndex: number): SiblingPath<N> {
|
|
70
|
+
if (leafIndex >= this.leaves.length) {
|
|
71
|
+
throw Error(`Leaf index ${leafIndex} out of bounds. Tree has ${this.leaves.length} leaves.`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const leaf = this.leaves[leafIndex];
|
|
75
|
+
if (leaf.equals(this.valueToCompress)) {
|
|
76
|
+
throw Error(`Leaf at index ${leafIndex} has been compressed.`);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const path: Buffer[] = [];
|
|
80
|
+
let location = this.leafLocations[leafIndex];
|
|
81
|
+
while (location.level > 0) {
|
|
82
|
+
const sibling = this.store.getSibling(location)!;
|
|
83
|
+
path.push(sibling.value);
|
|
84
|
+
location = this.store.getParentLocation(location);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return new SiblingPath<N>(path.length as N, path);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
public getLeafLocation(leafIndex: number) {
|
|
91
|
+
return this.leafLocations[leafIndex];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Adds leaves and nodes to the store. Updates the leafLocations.
|
|
96
|
+
* @param leaves - The leaves of the tree.
|
|
97
|
+
*/
|
|
98
|
+
private buildTree() {
|
|
99
|
+
this.leafLocations = this.leaves.map((value, i) => this.store.setLeaf(i, { value, leafIndex: i }));
|
|
100
|
+
|
|
101
|
+
// Start with the leaves that are not compressed.
|
|
102
|
+
let toProcess = this.leafLocations.filter((_, i) => !this.leaves[i].equals(this.valueToCompress));
|
|
103
|
+
if (!toProcess.length) {
|
|
104
|
+
// All leaves are compressed. Set empty root to the root.
|
|
105
|
+
this.store.setNode({ level: 0, index: 0 }, { value: this.emptyRoot });
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const level = toProcess[0].level;
|
|
110
|
+
for (let i = level; i > 0; i--) {
|
|
111
|
+
const toProcessNext = [];
|
|
112
|
+
for (const location of toProcess) {
|
|
113
|
+
if (location.level !== i) {
|
|
114
|
+
toProcessNext.push(location);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const parentLocation = this.store.getParentLocation(location);
|
|
119
|
+
if (this.store.getNode(parentLocation)) {
|
|
120
|
+
// Parent has been updated by its (left) sibling.
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const sibling = this.store.getSibling(location);
|
|
125
|
+
// If sibling is undefined, all its children are compressed.
|
|
126
|
+
const shouldShiftUp = !sibling || sibling.value.equals(this.valueToCompress);
|
|
127
|
+
if (shouldShiftUp) {
|
|
128
|
+
// The node becomes the parent if the sibling is a compressed leaf.
|
|
129
|
+
this.shiftNodeUp(location, parentLocation);
|
|
130
|
+
} else {
|
|
131
|
+
// Hash the value with the (right) sibling and update the parent node.
|
|
132
|
+
const node = this.store.getNode(location)!;
|
|
133
|
+
const parentValue = this.hasher(node.value, sibling.value);
|
|
134
|
+
this.store.setNode(parentLocation, { value: parentValue });
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Add the parent location to be processed next.
|
|
138
|
+
toProcessNext.push(parentLocation);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
toProcess = toProcessNext;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
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
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
private collectNodesToShift(from: TreeNodeLocation, to: TreeNodeLocation) {
|
|
158
|
+
const node = this.store.getNode(from);
|
|
159
|
+
if (!node) {
|
|
160
|
+
return [];
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
let result = [{ node, newLocation: to }];
|
|
164
|
+
|
|
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));
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
}
|