@aztec/foundation 0.0.0-test.1 → 0.0.1-commit.017a351
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 +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/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/bigint-buffer/index.js +6 -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 +89 -0
- package/dest/branded-types/buffer32_hash.d.ts +27 -0
- package/dest/branded-types/buffer32_hash.d.ts.map +1 -0
- package/dest/branded-types/buffer32_hash.js +12 -0
- package/dest/branded-types/checkpoint_number.d.ts +60 -0
- package/dest/branded-types/checkpoint_number.d.ts.map +1 -0
- package/dest/branded-types/checkpoint_number.js +88 -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 +8 -0
- package/dest/branded-types/index.d.ts.map +1 -0
- package/dest/branded-types/index.js +6 -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 +45 -0
- package/dest/branded-types/slot.d.ts.map +1 -0
- package/dest/branded-types/slot.js +62 -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 +82 -0
- package/dest/buffer/buffer16.d.ts.map +1 -0
- package/dest/buffer/buffer16.js +102 -0
- package/dest/buffer/buffer32.d.ts +32 -69
- package/dest/buffer/buffer32.d.ts.map +1 -1
- package/dest/buffer/buffer32.js +36 -68
- package/dest/buffer/index.d.ts +3 -1
- package/dest/buffer/index.d.ts.map +1 -1
- package/dest/buffer/index.js +2 -0
- package/dest/buffer/utils.d.ts +3 -0
- package/dest/buffer/utils.d.ts.map +1 -0
- package/dest/buffer/utils.js +7 -0
- package/dest/collection/array.d.ts +38 -4
- package/dest/collection/array.d.ts.map +1 -1
- package/dest/collection/array.js +141 -3
- package/dest/collection/index.d.ts +3 -1
- package/dest/collection/index.d.ts.map +1 -1
- package/dest/collection/index.js +2 -0
- package/dest/collection/lru_map.d.ts +41 -0
- package/dest/collection/lru_map.d.ts.map +1 -0
- package/dest/collection/lru_map.js +119 -0
- package/dest/collection/lru_set.d.ts +35 -0
- package/dest/collection/lru_set.d.ts.map +1 -0
- package/dest/collection/lru_set.js +95 -0
- 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/committable.js +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 +88 -13
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +153 -22
- package/dest/config/network_config.d.ts +28 -0
- package/dest/config/network_config.d.ts.map +1 -0
- package/dest/config/network_config.js +14 -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 +4 -5
- package/dest/crypto/aes128/index.d.ts.map +1 -1
- package/dest/crypto/aes128/index.js +30 -8
- package/dest/crypto/bls/bn254_keystore.d.ts +129 -0
- package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -0
- package/dest/crypto/bls/bn254_keystore.js +201 -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 +41 -28
- 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 +10 -8
- package/dest/crypto/schnorr/index.d.ts.map +1 -1
- package/dest/crypto/schnorr/index.js +34 -42
- package/dest/crypto/schnorr/signature.d.ts +13 -35
- package/dest/crypto/schnorr/signature.d.ts.map +1 -1
- package/dest/crypto/schnorr/signature.js +21 -37
- 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 +67 -5
- package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
- package/dest/crypto/secp256k1-signer/utils.js +118 -6
- 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 +357 -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 +185 -0
- package/dest/curves/bn254/field.d.ts.map +1 -0
- package/dest/{fields/fields.js → curves/bn254/field.js} +111 -74
- 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 +26 -33
- package/dest/curves/grumpkin/point.d.ts.map +1 -0
- package/dest/{fields → curves/grumpkin}/point.js +53 -50
- 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 +19 -10
- package/dest/eth-address/index.d.ts.map +1 -1
- package/dest/eth-address/index.js +31 -5
- package/dest/eth-signature/eth_signature.d.ts +19 -16
- package/dest/eth-signature/eth_signature.d.ts.map +1 -1
- package/dest/eth-signature/eth_signature.js +37 -18
- package/dest/eth-signature/index.d.ts +1 -1
- package/dest/fifo/fifo_frame_reader.d.ts +41 -0
- package/dest/fifo/fifo_frame_reader.d.ts.map +1 -0
- package/dest/fifo/fifo_frame_reader.js +91 -0
- package/dest/fifo/index.d.ts +2 -0
- package/dest/fifo/index.d.ts.map +1 -0
- package/dest/fifo/index.js +1 -0
- package/dest/fifo_set/fifo_set.d.ts +15 -0
- package/dest/fifo_set/fifo_set.d.ts.map +1 -0
- package/dest/fifo_set/fifo_set.js +39 -0
- package/dest/fifo_set/index.d.ts +2 -0
- package/dest/fifo_set/index.d.ts.map +1 -0
- package/dest/fifo_set/index.js +1 -0
- 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 +28 -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 +18 -31
- package/dest/json-rpc/client/index.d.ts +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +11 -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 +175 -15
- 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 +29 -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 +4 -8
- package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
- package/dest/json-rpc/fixtures/test_state.js +57 -17
- 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/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 +29 -25
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.js +178 -59
- 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/bigint-utils.d.ts +5 -0
- package/dest/log/bigint-utils.d.ts.map +1 -0
- package/dest/log/bigint-utils.js +21 -0
- 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 +4 -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 +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 +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 +165 -31
- 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 +19 -104
- package/dest/noir/noir_package_config.d.ts.map +1 -1
- package/dest/noir/noir_package_config.js +1 -1
- 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 +2 -2
- 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 +2 -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 +25 -3
- package/dest/retry/index.d.ts.map +1 -1
- package/dest/retry/index.js +34 -2
- package/dest/running-promise/index.d.ts +1 -1
- package/dest/schemas/api.d.ts +12 -10
- package/dest/schemas/api.d.ts.map +1 -1
- package/dest/schemas/api.js +7 -1
- package/dest/schemas/index.d.ts +1 -1
- package/dest/schemas/parse.d.ts +4 -4
- package/dest/schemas/parse.d.ts.map +1 -1
- package/dest/schemas/parse.js +7 -6
- package/dest/schemas/schemas.d.ts +30 -29
- package/dest/schemas/schemas.d.ts.map +1 -1
- package/dest/schemas/schemas.js +29 -11
- package/dest/schemas/types.d.ts +32 -2
- package/dest/schemas/types.d.ts.map +1 -1
- package/dest/schemas/types.js +25 -1
- package/dest/schemas/utils.d.ts +10 -16
- package/dest/schemas/utils.d.ts.map +1 -1
- package/dest/schemas/utils.js +17 -23
- package/dest/serialize/buffer_reader.d.ts +41 -6
- package/dest/serialize/buffer_reader.d.ts.map +1 -1
- package/dest/serialize/buffer_reader.js +70 -6
- package/dest/serialize/buffer_sink.d.ts +134 -0
- package/dest/serialize/buffer_sink.d.ts.map +1 -0
- package/dest/serialize/buffer_sink.js +297 -0
- 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 +2 -1
- package/dest/serialize/index.d.ts.map +1 -1
- package/dest/serialize/index.js +1 -0
- package/dest/serialize/serialize.d.ts +24 -7
- 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 +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 +28 -2
- package/dest/timer/date.d.ts.map +1 -1
- package/dest/timer/date.js +41 -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 +21 -6
- package/dest/timer/timeout.d.ts.map +1 -1
- package/dest/timer/timeout.js +69 -22
- package/dest/timer/timer.d.ts +1 -1
- package/dest/timer/timer.d.ts.map +1 -1
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts +11 -2
- package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -1
- package/dest/transport/dispatch/messages.d.ts +1 -1
- package/dest/transport/index.d.ts +1 -3
- package/dest/transport/index.d.ts.map +1 -1
- package/dest/transport/index.js +0 -2
- 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_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 +16 -0
- package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -0
- package/dest/trees/balanced_merkle_tree_root.js +50 -0
- package/dest/trees/hasher.d.ts +8 -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_merkle_tree_calculator.js +5 -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 +4 -4
- package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/merkle_tree_calculator.js +1 -5
- package/dest/trees/sibling_path.d.ts +7 -41
- package/dest/trees/sibling_path.d.ts.map +1 -1
- package/dest/trees/sibling_path.js +11 -9
- 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 +27 -0
- package/dest/trees/unbalanced_merkle_tree_root.d.ts.map +1 -0
- package/dest/trees/unbalanced_merkle_tree_root.js +83 -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 +52 -3
- package/dest/types/index.d.ts.map +1 -1
- package/dest/types/index.js +21 -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 +84 -47
- package/src/array/array.ts +13 -16
- package/src/array/index.ts +1 -0
- package/src/array/sorted_array.ts +138 -0
- package/src/async-pool/index.ts +1 -0
- package/src/bigint/index.ts +20 -0
- package/src/bigint-buffer/index.ts +6 -1
- package/src/branded-types/block_number.ts +135 -0
- package/src/branded-types/buffer32_hash.ts +38 -0
- package/src/branded-types/checkpoint_number.ts +130 -0
- package/src/branded-types/epoch.ts +88 -0
- package/src/branded-types/index.ts +8 -0
- package/src/branded-types/index_within_checkpoint.ts +88 -0
- package/src/branded-types/slot.ts +93 -0
- package/src/branded-types/types.ts +2 -0
- package/src/buffer/buffer16.ts +136 -0
- package/src/buffer/buffer32.ts +47 -74
- package/src/buffer/index.ts +2 -0
- package/src/buffer/utils.ts +8 -0
- package/src/collection/array.ts +152 -4
- package/src/collection/index.ts +2 -0
- package/src/collection/lru_map.ts +143 -0
- package/src/collection/lru_set.ts +115 -0
- package/src/collection/object.ts +37 -0
- package/src/committable/committable.ts +1 -1
- package/src/config/env_var.ts +237 -63
- package/src/config/index.ts +265 -29
- package/src/config/network_config.ts +21 -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 +30 -12
- package/src/crypto/bls/bn254_keystore.ts +264 -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 +43 -37
- package/src/crypto/random/index.ts +2 -40
- package/src/crypto/random/randomness_singleton.ts +6 -4
- package/src/crypto/schnorr/index.ts +29 -24
- package/src/crypto/schnorr/signature.ts +18 -47
- package/src/crypto/secp256k1/index.ts +15 -11
- package/src/crypto/secp256k1-signer/utils.ts +152 -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 +456 -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} +117 -91
- 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 +47 -47
- package/src/eth-address/index.ts +35 -7
- package/src/eth-signature/eth_signature.ts +50 -22
- package/src/fifo/fifo_frame_reader.ts +113 -0
- package/src/fifo/index.ts +1 -0
- package/src/fifo_set/fifo_set.ts +52 -0
- package/src/fifo_set/index.ts +1 -0
- 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 +31 -1
- package/src/jest/setupAfterEnv.mjs +3 -0
- package/src/json-rpc/client/fetch.ts +16 -34
- package/src/json-rpc/client/safe_json_rpc_client.ts +230 -15
- package/src/json-rpc/client/undici.ts +31 -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/fixtures/test_state.ts +10 -10
- package/src/json-rpc/index.ts +2 -1
- 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 +162 -51
- package/src/json-rpc/test/integration.ts +1 -1
- package/src/log/bigint-utils.ts +25 -0
- package/src/log/console.ts +4 -1
- package/src/log/gcloud-logger-config.ts +8 -7
- package/src/log/index.ts +4 -4
- package/src/log/libp2p_logger.ts +33 -7
- package/src/log/log-filters.ts +29 -11
- 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 +193 -40
- package/src/message/index.ts +5 -1
- package/src/mutex/mutex_database.ts +2 -3
- package/src/noir/noir_package_config.ts +32 -20
- 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/base_memory_queue.ts +1 -1
- package/src/queue/batch_queue.ts +2 -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 +58 -5
- package/src/schemas/api.ts +25 -25
- package/src/schemas/parse.ts +10 -7
- package/src/schemas/schemas.ts +45 -16
- package/src/schemas/types.ts +34 -1
- package/src/schemas/utils.ts +25 -46
- package/src/serialize/buffer_reader.ts +96 -12
- package/src/serialize/buffer_sink.ts +350 -0
- package/src/serialize/field_reader.ts +28 -4
- package/src/serialize/free_funcs.ts +26 -32
- package/src/serialize/index.ts +1 -0
- package/src/serialize/serialize.ts +35 -1
- package/src/sleep/index.ts +16 -1
- 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 +61 -3
- package/src/timer/index.ts +1 -1
- package/src/timer/timeout.ts +85 -19
- package/src/transport/dispatch/create_dispatch_proxy.ts +11 -1
- package/src/transport/index.ts +0 -2
- 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 +5 -6
- package/src/transport/transport_server.ts +4 -1
- package/src/trees/balanced_merkle_tree_root.ts +65 -0
- package/src/trees/hasher.ts +16 -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 +7 -3
- package/src/trees/membership_witness.ts +22 -1
- package/src/trees/merkle_tree.ts +4 -1
- package/src/trees/merkle_tree_calculator.ts +9 -10
- package/src/trees/sibling_path.ts +12 -7
- package/src/trees/unbalanced_merkle_tree_calculator.ts +176 -0
- package/src/trees/unbalanced_merkle_tree_root.ts +112 -0
- package/src/trees/unbalanced_tree_store.ts +62 -3
- package/src/types/index.ts +82 -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/crypto/serialize.d.ts +0 -53
- package/dest/crypto/serialize.d.ts.map +0 -1
- package/dest/crypto/serialize.js +0 -68
- 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/transport/dispatch/create_dispatch_fn.d.ts +0 -25
- package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +0 -1
- package/dest/transport/dispatch/create_dispatch_fn.js +0 -17
- 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/crypto/serialize.ts +0 -85
- 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/transport/dispatch/create_dispatch_fn.ts +0 -35
- 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
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A value that can be appended to a {@link BufferSink}. Mirrors `Bufferable`, but the object arm allows the
|
|
3
|
+
* optional-sink overload of `toBuffer` so a legacy `toBuffer(): Buffer` and a migrated `toBuffer(sink?)` both fit.
|
|
4
|
+
*/
|
|
5
|
+
export type Sinkable =
|
|
6
|
+
| boolean
|
|
7
|
+
| Buffer
|
|
8
|
+
| Uint8Array
|
|
9
|
+
| number
|
|
10
|
+
| bigint
|
|
11
|
+
| string
|
|
12
|
+
| { toBuffer(sink?: BufferSink): Buffer | void }
|
|
13
|
+
| Sinkable[];
|
|
14
|
+
|
|
15
|
+
const DEFAULT_INITIAL_CAPACITY = 1024;
|
|
16
|
+
const MASK_64 = (1n << 64n) - 1n;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A growable, append-only binary sink backed by a single `ArrayBuffer`.
|
|
20
|
+
*
|
|
21
|
+
* It exists to replace the recursive `toBuffer()` chain — which allocates a `Buffer` at every node and
|
|
22
|
+
* `Buffer.concat`s at every level — with one buffer that the whole object graph streams into and that is sliced
|
|
23
|
+
* exactly once at the root. Encodings are big-endian, matching `serializeToBuffer` byte-for-byte.
|
|
24
|
+
*
|
|
25
|
+
* The migration contract is the optional-sink `toBuffer`:
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* toBuffer(): Buffer;
|
|
29
|
+
* toBuffer(sink: BufferSink): void;
|
|
30
|
+
* toBuffer(sink?: BufferSink): Buffer | void {
|
|
31
|
+
* if (!sink) return BufferSink.serialize(this); // own a sink, fill it, slice once
|
|
32
|
+
* serializeToSink(sink, this.a, this.b, this.c); // stream into the caller's sink
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* When a sink is passed it writes and returns `undefined`; otherwise it returns its own buffer. Nodes that have
|
|
37
|
+
* not been migrated keep their plain `toBuffer(): Buffer` and are folded in via the return-value fallback in
|
|
38
|
+
* {@link serializeToSink}, so the tree stays valid at every step of an incremental migration.
|
|
39
|
+
*
|
|
40
|
+
* Performance note: bigints are written via `DataView.setBigUint64` limbs ({@link writeBigInt},
|
|
41
|
+
* {@link writeField}), NOT a per-byte shift loop. The limb form is ~16x faster than the legacy hex round-trip
|
|
42
|
+
* on field-heavy structures, and faster than the legacy path at every width — a naive per-byte shift loop is
|
|
43
|
+
* actually the slowest option, since each byte allocates a fresh BigInt. See the spike benchmark.
|
|
44
|
+
*/
|
|
45
|
+
export class BufferSink {
|
|
46
|
+
private buffer: Uint8Array;
|
|
47
|
+
private view: DataView;
|
|
48
|
+
private offset = 0;
|
|
49
|
+
|
|
50
|
+
constructor(initialCapacity: number = DEFAULT_INITIAL_CAPACITY) {
|
|
51
|
+
const ab = new ArrayBuffer(initialCapacity);
|
|
52
|
+
this.buffer = new Uint8Array(ab);
|
|
53
|
+
this.view = new DataView(ab);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Number of bytes written so far. */
|
|
57
|
+
public get length(): number {
|
|
58
|
+
return this.offset;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Serialize a migrated value into a fresh sink and return the single resulting buffer. This is the no-sink
|
|
63
|
+
* branch of every migrated `toBuffer`: one allocation, one slice, only at the root.
|
|
64
|
+
*
|
|
65
|
+
* @param obj - The value to serialize via its sink-aware `toBuffer`.
|
|
66
|
+
* @param initialCapacity - Optional size hint (e.g. from `getSize()`) to skip reallocations on hot paths.
|
|
67
|
+
*/
|
|
68
|
+
public static serialize(obj: { toBuffer(sink: BufferSink): void }, initialCapacity?: number): Buffer {
|
|
69
|
+
const sink = new BufferSink(initialCapacity);
|
|
70
|
+
obj.toBuffer(sink);
|
|
71
|
+
return sink.toBuffer();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private ensure(extra: number): void {
|
|
75
|
+
const required = this.offset + extra;
|
|
76
|
+
if (required <= this.buffer.length) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
let next = this.buffer.length * 2;
|
|
80
|
+
while (next < required) {
|
|
81
|
+
next *= 2;
|
|
82
|
+
}
|
|
83
|
+
const grown = new Uint8Array(next);
|
|
84
|
+
grown.set(this.buffer.subarray(0, this.offset));
|
|
85
|
+
this.buffer = grown;
|
|
86
|
+
this.view = new DataView(grown.buffer);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Append a single byte (0/1) for a boolean, matching `boolToBuffer`. */
|
|
90
|
+
public writeBool(value: boolean): void {
|
|
91
|
+
this.ensure(1);
|
|
92
|
+
this.buffer[this.offset++] = value ? 1 : 0;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** Append an unsigned 8-bit integer. */
|
|
96
|
+
public writeUInt8(value: number): void {
|
|
97
|
+
this.ensure(1);
|
|
98
|
+
this.buffer[this.offset++] = value & 0xff;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Append a big-endian unsigned 16-bit integer. */
|
|
102
|
+
public writeUInt16(value: number): void {
|
|
103
|
+
this.ensure(2);
|
|
104
|
+
this.view.setUint16(this.offset, value, false);
|
|
105
|
+
this.offset += 2;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Append a big-endian unsigned 32-bit integer, matching `numToUInt32BE`. */
|
|
109
|
+
public writeNumber(value: number): void {
|
|
110
|
+
this.ensure(4);
|
|
111
|
+
this.view.setUint32(this.offset, value, false);
|
|
112
|
+
this.offset += 4;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Append a big-endian unsigned 64-bit integer, matching `bigintToUInt64BE`. */
|
|
116
|
+
public writeUInt64(value: bigint): void {
|
|
117
|
+
this.ensure(8);
|
|
118
|
+
this.view.setBigUint64(this.offset, value, false);
|
|
119
|
+
this.offset += 8;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Append a non-negative bigint as a big-endian unsigned integer of `width` bytes (default 32), matching
|
|
124
|
+
* `serializeBigInt` / `toBufferBE`. Every width is written limb-wise via `setBigUint64` rather than the
|
|
125
|
+
* legacy per-byte BigInt shift loop — that loop allocated a fresh BigInt per byte and benchmarked as the
|
|
126
|
+
* *slowest* option (slower even than the legacy hex round-trip); the limb form is faster at every width.
|
|
127
|
+
*
|
|
128
|
+
* The bulk of the value is written as 64-bit big-endian limbs from the least-significant tail upward, and
|
|
129
|
+
* a final `width % 8` (at most 7) high bytes that don't fill a whole limb are written individually. The
|
|
130
|
+
* common widths (8/16/32) are exact multiples of 8, so they take the pure-limb path with no remainder.
|
|
131
|
+
* `width === 32` keeps its own straight-line four-limb form (shared with {@link writeField}) since it is
|
|
132
|
+
* the `Fr`/`Fq`/Chonk-proof hot path and the unrolled body is marginally faster than the loop.
|
|
133
|
+
*
|
|
134
|
+
* @param value - The non-negative bigint to serialize.
|
|
135
|
+
* @param width - Output width in bytes.
|
|
136
|
+
*/
|
|
137
|
+
public writeBigInt(value: bigint, width = 32): void {
|
|
138
|
+
if (value < 0n) {
|
|
139
|
+
throw new Error(`Cannot serialize negative bigint ${value}`);
|
|
140
|
+
}
|
|
141
|
+
this.ensure(width);
|
|
142
|
+
const o = this.offset;
|
|
143
|
+
if (width === 32) {
|
|
144
|
+
let x = value;
|
|
145
|
+
this.view.setBigUint64(o + 24, x & MASK_64, false);
|
|
146
|
+
x >>= 64n;
|
|
147
|
+
this.view.setBigUint64(o + 16, x & MASK_64, false);
|
|
148
|
+
x >>= 64n;
|
|
149
|
+
this.view.setBigUint64(o + 8, x & MASK_64, false);
|
|
150
|
+
x >>= 64n;
|
|
151
|
+
this.view.setBigUint64(o, x & MASK_64, false);
|
|
152
|
+
x >>= 64n;
|
|
153
|
+
if (x !== 0n) {
|
|
154
|
+
throw new Error(`BigInt ${value} does not fit into 32 bytes`);
|
|
155
|
+
}
|
|
156
|
+
this.offset += 32;
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
let x = value;
|
|
160
|
+
let pos = o + width;
|
|
161
|
+
while (pos - 8 >= o) {
|
|
162
|
+
pos -= 8;
|
|
163
|
+
this.view.setBigUint64(pos, x & MASK_64, false);
|
|
164
|
+
x >>= 64n;
|
|
165
|
+
}
|
|
166
|
+
for (let i = pos - 1; i >= o; i--) {
|
|
167
|
+
this.buffer[i] = Number(x & 0xffn);
|
|
168
|
+
x >>= 8n;
|
|
169
|
+
}
|
|
170
|
+
if (x !== 0n) {
|
|
171
|
+
throw new Error(`BigInt ${value} does not fit into ${width} bytes`);
|
|
172
|
+
}
|
|
173
|
+
this.offset += width;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Append a 32-byte (256-bit) big-endian non-negative bigint. Specialized form of {@link writeBigInt}
|
|
178
|
+
* with no width parameter and no width-branch, so V8 can inline the four `setBigUint64` limb writes
|
|
179
|
+
* without the wider branchy form's instability. This is the Fr/Fq leaf hot path; prefer it over
|
|
180
|
+
* `writeBigInt(value, 32)` in callers that always serialize 32-byte fields.
|
|
181
|
+
*/
|
|
182
|
+
public writeField(value: bigint): void {
|
|
183
|
+
if (value < 0n) {
|
|
184
|
+
throw new Error(`Cannot serialize negative bigint ${value}`);
|
|
185
|
+
}
|
|
186
|
+
this.ensure(32);
|
|
187
|
+
const o = this.offset;
|
|
188
|
+
let x = value;
|
|
189
|
+
this.view.setBigUint64(o + 24, x & MASK_64, false);
|
|
190
|
+
x >>= 64n;
|
|
191
|
+
this.view.setBigUint64(o + 16, x & MASK_64, false);
|
|
192
|
+
x >>= 64n;
|
|
193
|
+
this.view.setBigUint64(o + 8, x & MASK_64, false);
|
|
194
|
+
x >>= 64n;
|
|
195
|
+
this.view.setBigUint64(o, x & MASK_64, false);
|
|
196
|
+
if (x >> 64n !== 0n) {
|
|
197
|
+
throw new Error(`BigInt ${value} does not fit into 32 bytes`);
|
|
198
|
+
}
|
|
199
|
+
this.offset = o + 32;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Append an array of field elements (or any objects exposing `toBigInt(): bigint`) as a contiguous
|
|
204
|
+
* sequence of 32-byte big-endian limbs. Iterates inline — no per-element `toBuffer` dispatch and no
|
|
205
|
+
* per-element function-call indirection through the generic sinkable dispatcher. Use this in classes
|
|
206
|
+
* that hold large flat field arrays (e.g. the 1632-element ChonkProof field list).
|
|
207
|
+
*/
|
|
208
|
+
public writeFields(fields: ReadonlyArray<{ toBigInt(): bigint }>): void {
|
|
209
|
+
this.ensure(32 * fields.length);
|
|
210
|
+
for (let i = 0, n = fields.length; i < n; i++) {
|
|
211
|
+
const value = fields[i].toBigInt();
|
|
212
|
+
if (value < 0n) {
|
|
213
|
+
throw new Error(`Cannot serialize negative bigint ${value}`);
|
|
214
|
+
}
|
|
215
|
+
const o = this.offset;
|
|
216
|
+
let x = value;
|
|
217
|
+
this.view.setBigUint64(o + 24, x & MASK_64, false);
|
|
218
|
+
x >>= 64n;
|
|
219
|
+
this.view.setBigUint64(o + 16, x & MASK_64, false);
|
|
220
|
+
x >>= 64n;
|
|
221
|
+
this.view.setBigUint64(o + 8, x & MASK_64, false);
|
|
222
|
+
x >>= 64n;
|
|
223
|
+
this.view.setBigUint64(o, x & MASK_64, false);
|
|
224
|
+
if (x >> 64n !== 0n) {
|
|
225
|
+
throw new Error(`BigInt ${value} does not fit into 32 bytes`);
|
|
226
|
+
}
|
|
227
|
+
this.offset = o + 32;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/** Append raw bytes verbatim (no length prefix), matching how a `Buffer`/`Uint8Array` is serialized inline. */
|
|
232
|
+
public writeBytes(bytes: Uint8Array): void {
|
|
233
|
+
this.ensure(bytes.length);
|
|
234
|
+
this.buffer.set(bytes, this.offset);
|
|
235
|
+
this.offset += bytes.length;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/** Append a string as a 4-byte big-endian length prefix followed by its UTF-8 bytes, matching the string case. */
|
|
239
|
+
public writeString(value: string): void {
|
|
240
|
+
const bytes = Buffer.from(value);
|
|
241
|
+
this.writeNumber(bytes.length);
|
|
242
|
+
this.writeBytes(bytes);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Reset the write cursor without releasing the backing buffer. Lets the same sink be reused across many
|
|
247
|
+
* serializations without reallocating — the per-call cost drops to the bytes written (no `new ArrayBuffer`).
|
|
248
|
+
* Any `Buffer` previously returned by {@link toBuffer} is a fresh copy and remains valid; any view from
|
|
249
|
+
* {@link asUint8Array} aliases the buffer and is invalidated.
|
|
250
|
+
*/
|
|
251
|
+
public reset(): void {
|
|
252
|
+
this.offset = 0;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/** Copy the written region into a freshly allocated `Buffer`. The single allocation of the whole serialization. */
|
|
256
|
+
public toBuffer(): Buffer {
|
|
257
|
+
return Buffer.from(this.buffer.subarray(0, this.offset));
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/** A zero-copy view of the written region. Valid only until the next write (which may reallocate). */
|
|
261
|
+
public asUint8Array(): Uint8Array {
|
|
262
|
+
return this.buffer.subarray(0, this.offset);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Streaming counterpart to `serializeToBufferArray`: walk a list of {@link Sinkable}s and append each to the sink.
|
|
268
|
+
* Dispatch matches `serializeToBufferArray` byte-for-byte. An object is serialized via `obj.toBuffer(sink)`; a
|
|
269
|
+
* migrated node writes into the sink and returns `undefined`, while a not-yet-migrated node ignores the argument
|
|
270
|
+
* and returns its `Buffer`, which we copy in. That return-value fallback is what makes the migration incremental.
|
|
271
|
+
*
|
|
272
|
+
* Dispatch is hot-pathed for the common case of objects exposing `toBuffer` (Fr/Fq and every other migrated leaf),
|
|
273
|
+
* and arrays recurse via an inner-array helper to avoid the per-call rest-args allocation that a spread-recurse
|
|
274
|
+
* would force on large flat arrays like the 1632-element ChonkProof field list.
|
|
275
|
+
*
|
|
276
|
+
* @param sink - The destination sink.
|
|
277
|
+
* @param objs - The values to serialize, in order.
|
|
278
|
+
*/
|
|
279
|
+
export function serializeToSink(sink: BufferSink, ...objs: Sinkable[]): void {
|
|
280
|
+
serializeArrayToSinkInner(sink, objs);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function serializeArrayToSinkInner(sink: BufferSink, objs: Sinkable[]): void {
|
|
284
|
+
for (let i = 0, n = objs.length; i < n; i++) {
|
|
285
|
+
serializeOneToSink(sink, objs[i]);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function serializeOneToSink(sink: BufferSink, obj: Sinkable): void {
|
|
290
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
291
|
+
// Hot path: migrated nodes (anything implementing toBuffer, including Fr/Fq via BaseField). This branch
|
|
292
|
+
// is taken for the vast majority of recursive serialization, so it is checked before the typeof primitives.
|
|
293
|
+
if ((obj as any).toBuffer !== undefined) {
|
|
294
|
+
const ret = (obj as { toBuffer(sink: BufferSink): Buffer | void }).toBuffer(sink);
|
|
295
|
+
if (ret !== undefined) {
|
|
296
|
+
sink.writeBytes(ret);
|
|
297
|
+
}
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
if (Array.isArray(obj)) {
|
|
301
|
+
serializeArrayToSinkInner(sink, obj);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
if (Buffer.isBuffer(obj) || obj instanceof Uint8Array) {
|
|
305
|
+
sink.writeBytes(obj);
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
throw new Error(`Cannot serialize input to sink: ${typeof obj} ${(obj as any).constructor?.name}`);
|
|
309
|
+
}
|
|
310
|
+
if (typeof obj === 'boolean') {
|
|
311
|
+
sink.writeBool(obj);
|
|
312
|
+
} else if (typeof obj === 'bigint') {
|
|
313
|
+
sink.writeBigInt(obj);
|
|
314
|
+
} else if (typeof obj === 'number') {
|
|
315
|
+
sink.writeNumber(obj);
|
|
316
|
+
} else if (typeof obj === 'string') {
|
|
317
|
+
sink.writeString(obj);
|
|
318
|
+
} else {
|
|
319
|
+
throw new Error(`Cannot serialize input to sink: ${typeof obj}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Streaming counterpart to `serializeArrayOfBufferableToVector`: write a length prefix (1 or 4 bytes) giving the
|
|
325
|
+
* number of serialized elements, then each element. Byte-identical to the buffer version.
|
|
326
|
+
*
|
|
327
|
+
* @param sink - The destination sink.
|
|
328
|
+
* @param objs - The vector elements.
|
|
329
|
+
* @param prefixLength - Width of the count prefix in bytes (1 or 4).
|
|
330
|
+
*/
|
|
331
|
+
export function serializeArrayToSink(sink: BufferSink, objs: Sinkable[], prefixLength = 4): void {
|
|
332
|
+
const count = countSinkables(objs);
|
|
333
|
+
if (prefixLength === 1) {
|
|
334
|
+
sink.writeUInt8(count);
|
|
335
|
+
} else if (prefixLength === 4) {
|
|
336
|
+
sink.writeNumber(count);
|
|
337
|
+
} else {
|
|
338
|
+
throw new Error(`Unsupported prefix length. Got ${prefixLength}, expected 1 or 4`);
|
|
339
|
+
}
|
|
340
|
+
serializeArrayToSinkInner(sink, objs);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/** Count how many top-level buffers `serializeToBufferArray` would emit, flattening nested arrays as it does. */
|
|
344
|
+
function countSinkables(objs: Sinkable[]): number {
|
|
345
|
+
let count = 0;
|
|
346
|
+
for (const obj of objs) {
|
|
347
|
+
count += Array.isArray(obj) ? countSinkables(obj) : 1;
|
|
348
|
+
}
|
|
349
|
+
return count;
|
|
350
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fq, type Fr } from '../
|
|
1
|
+
import { Fq, type Fr } from '../curves/bn254/field.js';
|
|
2
2
|
import type { Tuple } from './types.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -11,11 +11,15 @@ import type { Tuple } from './types.js';
|
|
|
11
11
|
*/
|
|
12
12
|
export class FieldReader {
|
|
13
13
|
private index: number;
|
|
14
|
-
private length: number;
|
|
15
|
-
|
|
14
|
+
private readonly length: number;
|
|
15
|
+
|
|
16
|
+
constructor(
|
|
17
|
+
private fields: Fr[],
|
|
18
|
+
offset = 0,
|
|
19
|
+
) {
|
|
16
20
|
this.index = offset;
|
|
17
21
|
this.length = fields.length;
|
|
18
|
-
if (offset
|
|
22
|
+
if (offset > this.length) {
|
|
19
23
|
throw new Error('Offset out of bounds.');
|
|
20
24
|
}
|
|
21
25
|
}
|
|
@@ -43,6 +47,10 @@ export class FieldReader {
|
|
|
43
47
|
return this.index;
|
|
44
48
|
}
|
|
45
49
|
|
|
50
|
+
public remainingFields(): number {
|
|
51
|
+
return this.length - this.index;
|
|
52
|
+
}
|
|
53
|
+
|
|
46
54
|
/**
|
|
47
55
|
* Skips the next n fields.
|
|
48
56
|
*
|
|
@@ -121,6 +129,22 @@ export class FieldReader {
|
|
|
121
129
|
return Number(value);
|
|
122
130
|
}
|
|
123
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Reads a 64-bit unsigned integer from the field array at the current index position.
|
|
134
|
+
* Updates the index position by 1 after reading the number.
|
|
135
|
+
* Throw if the value is greater than 2 ** 64.
|
|
136
|
+
*
|
|
137
|
+
* @returns The read 64-bit unsigned integer value as a bigint.
|
|
138
|
+
*/
|
|
139
|
+
public readU64(): bigint {
|
|
140
|
+
const field = this.readField();
|
|
141
|
+
const value = field.toBigInt();
|
|
142
|
+
if (value >= 1n << 64n) {
|
|
143
|
+
throw new Error('Field is not a u64.');
|
|
144
|
+
}
|
|
145
|
+
return value;
|
|
146
|
+
}
|
|
147
|
+
|
|
124
148
|
/**
|
|
125
149
|
* Read an array of a fixed size field array.
|
|
126
150
|
*
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toBufferBE } from '../bigint-buffer/index.js';
|
|
2
|
+
import { Fr } from '../curves/bn254/field.js';
|
|
2
3
|
import type { Tuple } from './types.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -56,6 +57,30 @@ export function numToUInt32BE(n: number, bufferSize = 4) {
|
|
|
56
57
|
return buf;
|
|
57
58
|
}
|
|
58
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Convert a bigint to a big-endian unsigned 64-bit integer Buffer.
|
|
62
|
+
*
|
|
63
|
+
* @param n - The bigint to be converted to a big-endian unsigned 64-bit integer Buffer.
|
|
64
|
+
* @param bufferSize - Optional, the size of the output Buffer (default is 8).
|
|
65
|
+
* @returns A Buffer containing the big-endian unsigned 64-bit integer representation of the input number.
|
|
66
|
+
*/
|
|
67
|
+
export function bigintToUInt64BE(n: bigint, bufferSize = 8) {
|
|
68
|
+
const buf = Buffer.alloc(bufferSize);
|
|
69
|
+
buf.writeBigUInt64BE(n, bufferSize - 8);
|
|
70
|
+
return buf;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Convert a bigint to a big-endian unsigned 128-bit integer Buffer.
|
|
75
|
+
*
|
|
76
|
+
* @param n - The bigint to be converted to a big-endian unsigned 128-bit integer Buffer.
|
|
77
|
+
* @param bufferSize - Optional, the size of the output Buffer (default is 16).
|
|
78
|
+
* @returns A Buffer containing the big-endian unsigned 128-bit integer representation of the input number.
|
|
79
|
+
*/
|
|
80
|
+
export function bigintToUInt128BE(n: bigint, bufferSize = 16) {
|
|
81
|
+
return toBufferBE(n, bufferSize);
|
|
82
|
+
}
|
|
83
|
+
|
|
59
84
|
/**
|
|
60
85
|
* Serialize a number into a big-endian signed 32-bit integer Buffer with the specified buffer size.
|
|
61
86
|
* This function converts the input number into its binary representation and stores it in a Buffer
|
|
@@ -160,37 +185,6 @@ export function truncateAndPad(buf: Buffer): Buffer {
|
|
|
160
185
|
return Buffer.concat([Buffer.alloc(1), buf.subarray(0, 31)]);
|
|
161
186
|
}
|
|
162
187
|
|
|
163
|
-
/**
|
|
164
|
-
* Stores 248 bits of information in 1 field.
|
|
165
|
-
* @param buf - 32 or 31 bytes of data
|
|
166
|
-
* @returns 1 field element
|
|
167
|
-
*/
|
|
168
|
-
export function toTruncField(buf: Buffer): Fr {
|
|
169
|
-
if (buf.length !== 32 && buf.length !== 31) {
|
|
170
|
-
throw new Error('Buffer must be 31 or 32 bytes');
|
|
171
|
-
}
|
|
172
|
-
if ((buf.length == 32 && buf[0] == 0) || buf.length == 31) {
|
|
173
|
-
return Fr.fromBuffer(buf);
|
|
174
|
-
} else {
|
|
175
|
-
// Note: safer to NOT truncate here, all inputs are expected to be truncated
|
|
176
|
-
// from Noir or L1 Contracts or Class.hash() methods
|
|
177
|
-
throw new Error(`Number ${toBigInt(buf)} does not fit in 31 byte truncated buffer`);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Reconstructs the original 31 bytes of data from 1 truncated field element.
|
|
183
|
-
* @param field - field element
|
|
184
|
-
* @returns 31 bytes of data as a Buffer
|
|
185
|
-
*/
|
|
186
|
-
export function fromTruncField(field: Fr): Buffer {
|
|
187
|
-
const buffer = field.toBuffer();
|
|
188
|
-
if (buffer[0] != 0) {
|
|
189
|
-
throw new Error(`Number ${field} does not fit in 31 byte truncated buffer`);
|
|
190
|
-
}
|
|
191
|
-
return buffer;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
188
|
export function fromFieldsTuple(fields: Tuple<Fr, 2>): Buffer {
|
|
195
189
|
return from2Fields(fields[0], fields[1]);
|
|
196
190
|
}
|
package/src/serialize/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { toBigIntBE, toBufferBE } from '../bigint-buffer/index.js';
|
|
2
|
-
import { Fr } from '../
|
|
2
|
+
import { Fr } from '../curves/bn254/field.js';
|
|
3
3
|
import { numToUInt32BE } from './free_funcs.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -145,6 +145,8 @@ export type Fieldable =
|
|
|
145
145
|
}
|
|
146
146
|
| Fieldable[];
|
|
147
147
|
|
|
148
|
+
export type Serializable = Bufferable & Fieldable;
|
|
149
|
+
|
|
148
150
|
/**
|
|
149
151
|
* Serializes a list of objects contiguously.
|
|
150
152
|
* @param objs - Objects to serialize.
|
|
@@ -267,6 +269,22 @@ export function serializeBigInt(n: bigint, width = 32) {
|
|
|
267
269
|
return toBufferBE(n, width);
|
|
268
270
|
}
|
|
269
271
|
|
|
272
|
+
/**
|
|
273
|
+
* Serialize a signed BigInt value into a Buffer of specified width using two's complement.
|
|
274
|
+
* @param n - The signed BigInt value to be serialized.
|
|
275
|
+
* @param width - The width (in bytes) of the output Buffer, optional with default value 32.
|
|
276
|
+
* @returns A Buffer containing the serialized signed BigInt value in big-endian format.
|
|
277
|
+
*/
|
|
278
|
+
export function serializeSignedBigInt(n: bigint, width = 32) {
|
|
279
|
+
const widthBits = BigInt(width * 8);
|
|
280
|
+
const max = 1n << (widthBits - 1n);
|
|
281
|
+
if (n < -max || n >= max) {
|
|
282
|
+
throw new Error(`Signed BigInt ${n.toString()} does not fit into ${width} bytes`);
|
|
283
|
+
}
|
|
284
|
+
const unsigned = n < 0n ? (1n << widthBits) + n : n;
|
|
285
|
+
return toBufferBE(unsigned, width);
|
|
286
|
+
}
|
|
287
|
+
|
|
270
288
|
/**
|
|
271
289
|
* Deserialize a big integer from a buffer, given an offset and width.
|
|
272
290
|
* Reads the specified number of bytes from the buffer starting at the offset, converts it to a big integer, and returns the deserialized result along with the number of bytes read (advanced).
|
|
@@ -280,6 +298,22 @@ export function deserializeBigInt(buf: Buffer, offset = 0, width = 32) {
|
|
|
280
298
|
return { elem: toBigIntBE(buf.subarray(offset, offset + width)), adv: width };
|
|
281
299
|
}
|
|
282
300
|
|
|
301
|
+
/**
|
|
302
|
+
* Deserialize a signed BigInt from a buffer (two's complement).
|
|
303
|
+
* @param buf - The buffer containing the signed big integer to be deserialized.
|
|
304
|
+
* @param offset - The position in the buffer where the integer starts. Defaults to 0.
|
|
305
|
+
* @param width - The number of bytes to read from the buffer for the integer. Defaults to 32.
|
|
306
|
+
* @returns An object containing the deserialized signed bigint value ('elem') and bytes advanced ('adv').
|
|
307
|
+
*/
|
|
308
|
+
export function deserializeSignedBigInt(buf: Buffer, offset = 0, width = 32) {
|
|
309
|
+
const { elem, adv } = deserializeBigInt(buf, offset, width);
|
|
310
|
+
const widthBits = BigInt(width * 8);
|
|
311
|
+
const signBit = 1n << (widthBits - 1n);
|
|
312
|
+
const fullRange = 1n << widthBits;
|
|
313
|
+
const signed = elem >= signBit ? elem - fullRange : elem;
|
|
314
|
+
return { elem: signed, adv };
|
|
315
|
+
}
|
|
316
|
+
|
|
283
317
|
/**
|
|
284
318
|
* Serializes a Date object into a Buffer containing its timestamp as a big integer value.
|
|
285
319
|
* The resulting Buffer has a fixed width of 8 bytes, representing a 64-bit big-endian integer.
|
package/src/sleep/index.ts
CHANGED
|
@@ -22,6 +22,7 @@ import { InterruptError } from '../error/index.js';
|
|
|
22
22
|
*/
|
|
23
23
|
export class InterruptibleSleep {
|
|
24
24
|
private interrupts: Array<(shouldThrow: boolean) => void> = [];
|
|
25
|
+
private timeoutIds: NodeJS.Timeout[] = [];
|
|
25
26
|
|
|
26
27
|
/**
|
|
27
28
|
* Sleep for a specified amount of time in milliseconds.
|
|
@@ -38,9 +39,15 @@ export class InterruptibleSleep {
|
|
|
38
39
|
this.interrupts.push(resolve);
|
|
39
40
|
});
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
let timeoutId: NodeJS.Timeout;
|
|
43
|
+
const timeoutPromise = new Promise<boolean>(resolve => {
|
|
44
|
+
timeoutId = setTimeout(() => resolve(false), ms);
|
|
45
|
+
this.timeoutIds.push(timeoutId);
|
|
46
|
+
});
|
|
42
47
|
const shouldThrow = await Promise.race([interruptPromise, timeoutPromise]);
|
|
43
48
|
|
|
49
|
+
clearTimeout(timeoutId!);
|
|
50
|
+
this.timeoutIds = this.timeoutIds.filter(id => id !== timeoutId);
|
|
44
51
|
this.interrupts = this.interrupts.filter(res => res !== interruptResolve);
|
|
45
52
|
|
|
46
53
|
if (shouldThrow) {
|
|
@@ -58,6 +65,8 @@ export class InterruptibleSleep {
|
|
|
58
65
|
public interrupt(sleepShouldThrow = false): void {
|
|
59
66
|
this.interrupts.forEach(resolve => resolve(sleepShouldThrow));
|
|
60
67
|
this.interrupts = [];
|
|
68
|
+
this.timeoutIds.forEach(id => clearTimeout(id));
|
|
69
|
+
this.timeoutIds = [];
|
|
61
70
|
}
|
|
62
71
|
}
|
|
63
72
|
|
|
@@ -73,3 +82,9 @@ export class InterruptibleSleep {
|
|
|
73
82
|
export function sleep<T>(ms: number, returnValue?: T): Promise<T> {
|
|
74
83
|
return new Promise(resolve => setTimeout(() => resolve(returnValue as T), ms));
|
|
75
84
|
}
|
|
85
|
+
|
|
86
|
+
/** Sleeps until the target date */
|
|
87
|
+
export function sleepUntil<T>(target: Date, now: Date, returnValue?: T): Promise<T> {
|
|
88
|
+
const ms = target.getTime() - now.getTime();
|
|
89
|
+
return sleep(ms, returnValue);
|
|
90
|
+
}
|
package/src/string/index.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** Parameterized hex string type for specific byte lengths */
|
|
2
|
+
export type Hex<TByteLength extends number> = `0x${string}` & { readonly _length: TByteLength };
|
|
3
|
+
|
|
1
4
|
export function hasHexPrefix(str: string): str is `0x${string}` {
|
|
2
5
|
return str.startsWith('0x');
|
|
3
6
|
}
|
|
@@ -6,6 +9,10 @@ export function withoutHexPrefix(str: string): string {
|
|
|
6
9
|
return hasHexPrefix(str) ? str.slice(2) : str;
|
|
7
10
|
}
|
|
8
11
|
|
|
12
|
+
export function withHexPrefix(str: string): `0x${string}` {
|
|
13
|
+
return hasHexPrefix(str) ? str : `0x${str}`;
|
|
14
|
+
}
|
|
15
|
+
|
|
9
16
|
export function isHex(str: string): boolean {
|
|
10
17
|
return /^(0x)?[0-9a-fA-F]*$/.test(str);
|
|
11
18
|
}
|
|
@@ -19,7 +26,7 @@ export function bufferToHex(buffer: Buffer): `0x${string}` {
|
|
|
19
26
|
}
|
|
20
27
|
|
|
21
28
|
export function pluralize(str: string, count: number | bigint, plural?: string): string {
|
|
22
|
-
return count === 1 || count === 1n ? str : plural ?? `${str}s
|
|
29
|
+
return count === 1 || count === 1n ? str : (plural ?? `${str}s`);
|
|
23
30
|
}
|
|
24
31
|
|
|
25
32
|
export function count(count: number | bigint, str: string, plural?: string): string {
|
|
@@ -29,3 +36,31 @@ export function count(count: number | bigint, str: string, plural?: string): str
|
|
|
29
36
|
export function truncate(str: string, length: number = 64): string {
|
|
30
37
|
return str.length > length ? str.slice(0, length) + '...' : str;
|
|
31
38
|
}
|
|
39
|
+
|
|
40
|
+
export function isoDate(date?: Date) {
|
|
41
|
+
return (date ?? new Date()).toISOString().replace(/[-:T]/g, '').replace(/\..+$/, '');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function urlJoin(...args: string[]): string {
|
|
45
|
+
const processed = [];
|
|
46
|
+
for (const arg of args) {
|
|
47
|
+
if (arg.length === 0) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
let start = 0;
|
|
52
|
+
let end = arg.length - 1;
|
|
53
|
+
|
|
54
|
+
while (start <= end && arg[start] === '/') {
|
|
55
|
+
start++;
|
|
56
|
+
}
|
|
57
|
+
while (end >= start && arg[end] === '/') {
|
|
58
|
+
end--;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (start <= end) {
|
|
62
|
+
processed.push(arg.slice(start, end + 1));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return processed.join('/');
|
|
66
|
+
}
|
|
@@ -35,12 +35,16 @@ export function updateInlineTestData(targetFileFromRepoRoot: string, itemName: s
|
|
|
35
35
|
const logger = createConsoleLogger('aztec:testing:test_data');
|
|
36
36
|
const targetFile = getPathToFile(targetFileFromRepoRoot);
|
|
37
37
|
const contents = readFileSync(targetFile, 'utf8').toString();
|
|
38
|
-
const regex = new RegExp(`let
|
|
38
|
+
const regex = new RegExp(`(let|pub\\s+global)\\s+${itemName}(\\s*:\\s*[^=]+)?\\s*=\\s*([\\s\\S]*?);`, 'g');
|
|
39
39
|
if (!regex.exec(contents)) {
|
|
40
40
|
throw new Error(`Test data marker for ${itemName} not found in ${targetFile}`);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
const updatedContents = contents.
|
|
43
|
+
const updatedContents = contents.replace(
|
|
44
|
+
regex,
|
|
45
|
+
(_, declareKeyword, typeAnnotation) =>
|
|
46
|
+
`${declareKeyword} ${itemName}${(typeAnnotation || '').trimEnd()} = ${value};`,
|
|
47
|
+
);
|
|
44
48
|
writeFileSync(targetFile, updatedContents);
|
|
45
49
|
logger(`Updated test data in ${targetFile} for ${itemName} to ${value}`);
|
|
46
50
|
}
|
|
@@ -59,7 +63,7 @@ export function updateProtocolCircuitSampleInputs(circuitName: string, value: st
|
|
|
59
63
|
logger(`Updated test data in ${targetFile} for ${circuitName}`);
|
|
60
64
|
}
|
|
61
65
|
|
|
62
|
-
function getPathToFile(targetFileFromRepoRoot: string) {
|
|
66
|
+
export function getPathToFile(targetFileFromRepoRoot: string) {
|
|
63
67
|
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../../../../../');
|
|
64
68
|
if (!existsSync(join(repoRoot, 'CODEOWNERS'))) {
|
|
65
69
|
throw new Error(`Path to repo root is incorrect (got ${repoRoot})`);
|
package/src/testing/index.ts
CHANGED