@aztec/foundation 0.87.7 → 1.0.0-nightly.20250604

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.
@@ -1,2 +1,2 @@
1
- export type EnvVar = 'ACVM_BINARY_PATH' | 'ACVM_WORKING_DIRECTORY' | 'GOVERNANCE_CONTRACT_ADDRESS' | 'API_KEY' | 'API_PREFIX' | 'ARCHIVER_MAX_LOGS' | 'ARCHIVER_POLLING_INTERVAL_MS' | 'ARCHIVER_URL' | 'ARCHIVER_VIEM_POLLING_INTERVAL_MS' | 'ARCHIVER_BATCH_SIZE' | 'ASSUME_PROVEN_THROUGH_BLOCK_NUMBER' | 'AZTEC_ADMIN_PORT' | 'AZTEC_NODE_ADMIN_URL' | 'AZTEC_NODE_URL' | 'AZTEC_PORT' | 'BB_BINARY_PATH' | 'BB_SKIP_CLEANUP' | 'BB_WORKING_DIRECTORY' | 'BOOTSTRAP_NODES' | 'BLOB_SINK_ARCHIVE_API_URL' | 'BLOB_SINK_PORT' | 'BLOB_SINK_URL' | 'BOT_DA_GAS_LIMIT' | 'BOT_FEE_PAYMENT_METHOD' | 'BOT_FLUSH_SETUP_TRANSACTIONS' | 'BOT_FOLLOW_CHAIN' | 'BOT_L2_GAS_LIMIT' | 'BOT_MAX_PENDING_TXS' | 'BOT_NO_START' | 'BOT_NO_WAIT_FOR_TRANSFERS' | 'BOT_L1_MNEMONIC' | 'BOT_L1_PRIVATE_KEY' | 'BOT_PRIVATE_KEY' | 'BOT_ACCOUNT_SALT' | 'BOT_PRIVATE_TRANSFERS_PER_TX' | 'BOT_PUBLIC_TRANSFERS_PER_TX' | 'BOT_PXE_URL' | 'BOT_RECIPIENT_ENCRYPTION_SECRET' | 'BOT_SKIP_PUBLIC_SIMULATION' | 'BOT_TOKEN_CONTRACT' | 'BOT_TOKEN_SALT' | 'BOT_TX_INTERVAL_SECONDS' | 'BOT_TX_MINED_WAIT_SECONDS' | 'BOT_MAX_CONSECUTIVE_ERRORS' | 'BOT_STOP_WHEN_UNHEALTHY' | 'BOT_AMM_TXS' | 'COINBASE' | 'DATA_DIRECTORY' | 'DATA_STORE_MAP_SIZE_KB' | 'ARCHIVER_STORE_MAP_SIZE_KB' | 'BLOB_SINK_MAP_SIZE_KB' | 'P2P_STORE_MAP_SIZE_KB' | 'PROVER_BROKER_STORE_MAP_SIZE_KB' | 'WS_DB_MAP_SIZE_KB' | 'ARCHIVE_TREE_MAP_SIZE_KB' | 'NULLIFIER_TREE_MAP_SIZE_KB' | 'NOTE_HASH_TREE_MAP_SIZE_KB' | 'MESSAGE_TREE_MAP_SIZE_KB' | 'PUBLIC_DATA_TREE_MAP_SIZE_KB' | 'DEBUG' | 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY' | 'DEPLOY_AZTEC_CONTRACTS_SALT' | 'DEPLOY_AZTEC_CONTRACTS' | 'ENFORCE_FEES' | 'ETHEREUM_HOSTS' | 'FEE_JUICE_CONTRACT_ADDRESS' | 'FEE_JUICE_PORTAL_CONTRACT_ADDRESS' | 'FEE_RECIPIENT' | 'FORCE_COLOR' | 'GOVERNANCE_PROPOSER_CONTRACT_ADDRESS' | 'GOVERNANCE_PROPOSER_PAYLOAD_ADDRESS' | 'INBOX_CONTRACT_ADDRESS' | 'L1_CHAIN_ID' | 'L1_CONSENSUS_HOST_URLS' | 'L1_CONSENSUS_HOST_API_KEYS' | 'L1_CONSENSUS_HOST_API_KEY_HEADERS' | 'L1_PRIVATE_KEY' | 'LOG_JSON' | 'LOG_MULTILINE' | 'LOG_LEVEL' | 'MNEMONIC' | 'NETWORK_NAME' | 'NETWORK' | 'NO_PXE' | 'COIN_ISSUER_CONTRACT_ADDRESS' | 'USE_GCLOUD_LOGGING' | 'OTEL_EXPORTER_OTLP_METRICS_ENDPOINT' | 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT' | 'OTEL_EXPORTER_OTLP_LOGS_ENDPOINT' | 'OTEL_COLLECT_INTERVAL_MS' | 'OTEL_EXCLUDE_METRICS' | 'OTEL_EXPORT_TIMEOUT_MS' | 'OUTBOX_CONTRACT_ADDRESS' | 'P2P_BLOCK_CHECK_INTERVAL_MS' | 'P2P_BLOCK_REQUEST_BATCH_SIZE' | 'P2P_BOOTSTRAP_NODE_ENR_VERSION_CHECK' | 'P2P_BOOTSTRAP_NODES_AS_FULL_PEERS' | 'P2P_ENABLED' | 'P2P_GOSSIPSUB_D' | 'P2P_GOSSIPSUB_DHI' | 'P2P_GOSSIPSUB_DLO' | 'P2P_GOSSIPSUB_DLAZY' | 'P2P_GOSSIPSUB_FLOOD_PUBLISH' | 'P2P_GOSSIPSUB_INTERVAL_MS' | 'P2P_GOSSIPSUB_MCACHE_GOSSIP' | 'P2P_GOSSIPSUB_MCACHE_LENGTH' | 'P2P_GOSSIPSUB_SEEN_TTL' | 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_DECAY' | 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_WEIGHT' | 'P2P_GOSSIPSUB_TX_TOPIC_WEIGHT' | 'P2P_L2_QUEUE_SIZE' | 'P2P_MAX_PEERS' | 'P2P_PEER_CHECK_INTERVAL_MS' | 'P2P_PEER_PENALTY_VALUES' | 'P2P_QUERY_FOR_IP' | 'P2P_REQRESP_INDIVIDUAL_REQUEST_TIMEOUT_MS' | 'P2P_REQRESP_OVERALL_REQUEST_TIMEOUT_MS' | 'P2P_DOUBLE_SPEND_SEVERE_PEER_PENALTY_WINDOW' | 'P2P_LISTEN_ADDR' | 'P2P_PORT' | 'P2P_BROADCAST_PORT' | 'P2P_IP' | 'P2P_ARCHIVED_TX_LIMIT' | 'P2P_TRUSTED_PEERS' | 'P2P_PRIVATE_PEERS' | 'P2P_MAX_TX_POOL_SIZE' | 'P2P_TX_POOL_OVERFLOW_FACTOR' | 'P2P_SEEN_MSG_CACHE_SIZE' | 'PEER_ID_PRIVATE_KEY' | 'PEER_ID_PRIVATE_KEY_PATH' | 'PROVER_AGENT_COUNT' | 'PROVER_AGENT_PROOF_TYPES' | 'PROVER_AGENT_POLL_INTERVAL_MS' | 'PROVER_BROKER_HOST' | 'PROVER_BROKER_JOB_TIMEOUT_MS' | 'PROVER_BROKER_POLL_INTERVAL_MS' | 'PROVER_BROKER_JOB_MAX_RETRIES' | 'PROVER_BROKER_BATCH_INTERVAL_MS' | 'PROVER_BROKER_BATCH_SIZE' | 'PROVER_BROKER_MAX_EPOCHS_TO_KEEP_RESULTS_FOR' | 'PROVER_COORDINATION_NODE_URLS' | 'PROVER_FAILED_PROOF_STORE' | 'PROVER_NODE_FAILED_EPOCH_STORE' | 'PROVER_ID' | 'PROVER_NODE_POLLING_INTERVAL_MS' | 'PROVER_NODE_MAX_PENDING_JOBS' | 'PROVER_NODE_MAX_PARALLEL_BLOCKS_PER_EPOCH' | 'PROVER_NODE_TX_GATHERING_INTERVAL_MS' | 'PROVER_NODE_TX_GATHERING_BATCH_SIZE' | 'PROVER_NODE_TX_GATHERING_MAX_PARALLEL_REQUESTS_PER_NODE' | 'PROVER_PUBLISH_RETRY_INTERVAL_MS' | 'PROVER_PUBLISHER_PRIVATE_KEY' | 'PROVER_REAL_PROOFS' | 'PROVER_TEST_DELAY_FACTOR' | 'PROVER_TEST_DELAY_MS' | 'PROVER_TEST_DELAY_TYPE' | 'PXE_L2_BLOCK_BATCH_SIZE' | 'PXE_PROVER_ENABLED' | 'REGISTRY_CONTRACT_ADDRESS' | 'ROLLUP_CONTRACT_ADDRESS' | 'RPC_SIMULATE_PUBLIC_MAX_GAS_LIMIT' | 'SENTINEL_ENABLED' | 'SENTINEL_HISTORY_LENGTH_IN_EPOCHS' | 'SEQ_MAX_BLOCK_SIZE_IN_BYTES' | 'SEQ_MAX_TX_PER_BLOCK' | 'SEQ_MIN_TX_PER_BLOCK' | 'SEQ_PUBLISH_TXS_WITH_PROPOSALS' | 'SEQ_MAX_DA_BLOCK_GAS' | 'SEQ_MAX_L2_BLOCK_GAS' | 'SEQ_PUBLISH_RETRY_INTERVAL_MS' | 'SEQ_PUBLISHER_PRIVATE_KEY' | 'SEQ_TX_POLLING_INTERVAL_MS' | 'SEQ_ENFORCE_TIME_TABLE' | 'SEQ_MAX_L1_TX_INCLUSION_TIME_INTO_SLOT' | 'SLASH_FACTORY_CONTRACT_ADDRESS' | 'STAKING_ASSET_CONTRACT_ADDRESS' | 'STAKING_ASSET_HANDLER_CONTRACT_ADDRESS' | 'SYNC_MODE' | 'SYNC_SNAPSHOTS_URL' | 'REWARD_DISTRIBUTOR_CONTRACT_ADDRESS' | 'TELEMETRY' | 'TEST_ACCOUNTS' | 'SPONSORED_FPC' | 'TX_GOSSIP_VERSION' | 'TX_PUBLIC_SETUP_ALLOWLIST' | 'TXE_PORT' | 'VALIDATOR_ATTESTATIONS_POLLING_INTERVAL_MS' | 'VALIDATOR_DISABLED' | 'VALIDATOR_PRIVATE_KEY' | 'VALIDATOR_REEXECUTE' | 'ROLLUP_VERSION' | 'WS_BLOCK_CHECK_INTERVAL_MS' | 'WS_PROVEN_BLOCKS_ONLY' | 'WS_BLOCK_REQUEST_BATCH_SIZE' | 'VERIFIER_VIEM_POLLING_INTERVAL_MS' | 'L1_READER_VIEM_POLLING_INTERVAL_MS' | 'PROVER_VIEM_POLLING_INTERVAL_MS' | 'SEQ_VIEM_POLLING_INTERVAL_MS' | 'WS_DATA_DIRECTORY' | 'WS_NUM_HISTORIC_BLOCKS' | 'ETHEREUM_SLOT_DURATION' | 'AZTEC_SLOT_DURATION' | 'AZTEC_EPOCH_DURATION' | 'AZTEC_TARGET_COMMITTEE_SIZE' | 'AZTEC_PROOF_SUBMISSION_WINDOW' | 'AZTEC_MINIMUM_STAKE' | 'AZTEC_MANA_TARGET' | 'AZTEC_PROVING_COST_PER_MANA' | 'AZTEC_SLASHING_QUORUM' | 'AZTEC_SLASHING_ROUND_SIZE' | 'AZTEC_GOVERNANCE_PROPOSER_QUORUM' | 'AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE' | 'L1_GAS_LIMIT_BUFFER_PERCENTAGE' | 'L1_GAS_PRICE_MIN' | 'L1_GAS_PRICE_MAX' | 'L1_BLOB_FEE_PER_GAS_MAX' | 'L1_PRIORITY_FEE_BUMP_PERCENTAGE' | 'L1_PRIORITY_FEE_RETRY_BUMP_PERCENTAGE' | 'L1_FIXED_PRIORITY_FEE_PER_GAS' | 'L1_TX_MONITOR_MAX_ATTEMPTS' | 'L1_TX_MONITOR_CHECK_INTERVAL_MS' | 'L1_TX_MONITOR_STALL_TIME_MS' | 'L1_TX_MONITOR_TX_TIMEOUT_MS' | 'L1_TX_PROPAGATION_MAX_QUERY_ATTEMPTS' | 'FAUCET_MNEMONIC_ACCOUNT_INDEX' | 'FAUCET_ETH_AMOUNT' | 'FAUCET_INTERVAL_MS' | 'FAUCET_L1_ASSETS' | 'K8S_POD_NAME' | 'K8S_POD_UID' | 'K8S_NAMESPACE_NAME' | 'CUSTOM_FORWARDER_CONTRACT_ADDRESS' | 'FEE_ASSET_HANDLER_CONTRACT_ADDRESS' | 'AUTO_UPDATE' | 'AUTO_UPDATE_URL';
1
+ export type EnvVar = 'ACVM_BINARY_PATH' | 'ACVM_WORKING_DIRECTORY' | 'GOVERNANCE_CONTRACT_ADDRESS' | 'API_KEY' | 'API_PREFIX' | 'ARCHIVER_MAX_LOGS' | 'ARCHIVER_POLLING_INTERVAL_MS' | 'ARCHIVER_URL' | 'ARCHIVER_VIEM_POLLING_INTERVAL_MS' | 'ARCHIVER_BATCH_SIZE' | 'ASSUME_PROVEN_THROUGH_BLOCK_NUMBER' | 'AZTEC_ADMIN_PORT' | 'AZTEC_NODE_ADMIN_URL' | 'AZTEC_NODE_URL' | 'AZTEC_PORT' | 'BB_BINARY_PATH' | 'BB_SKIP_CLEANUP' | 'BB_WORKING_DIRECTORY' | 'BOOTSTRAP_NODES' | 'BLOB_SINK_ARCHIVE_API_URL' | 'BLOB_SINK_PORT' | 'BLOB_SINK_URL' | 'BOT_DA_GAS_LIMIT' | 'BOT_FEE_PAYMENT_METHOD' | 'BOT_FLUSH_SETUP_TRANSACTIONS' | 'BOT_FOLLOW_CHAIN' | 'BOT_L2_GAS_LIMIT' | 'BOT_MAX_PENDING_TXS' | 'BOT_NO_START' | 'BOT_NO_WAIT_FOR_TRANSFERS' | 'BOT_L1_MNEMONIC' | 'BOT_L1_PRIVATE_KEY' | 'BOT_PRIVATE_KEY' | 'BOT_ACCOUNT_SALT' | 'BOT_PRIVATE_TRANSFERS_PER_TX' | 'BOT_PUBLIC_TRANSFERS_PER_TX' | 'BOT_PXE_URL' | 'BOT_RECIPIENT_ENCRYPTION_SECRET' | 'BOT_SKIP_PUBLIC_SIMULATION' | 'BOT_TOKEN_CONTRACT' | 'BOT_TOKEN_SALT' | 'BOT_TX_INTERVAL_SECONDS' | 'BOT_TX_MINED_WAIT_SECONDS' | 'BOT_MAX_CONSECUTIVE_ERRORS' | 'BOT_STOP_WHEN_UNHEALTHY' | 'BOT_AMM_TXS' | 'COINBASE' | 'DATA_DIRECTORY' | 'DATA_STORE_MAP_SIZE_KB' | 'ARCHIVER_STORE_MAP_SIZE_KB' | 'BLOB_SINK_MAP_SIZE_KB' | 'P2P_STORE_MAP_SIZE_KB' | 'PROVER_BROKER_STORE_MAP_SIZE_KB' | 'WS_DB_MAP_SIZE_KB' | 'ARCHIVE_TREE_MAP_SIZE_KB' | 'NULLIFIER_TREE_MAP_SIZE_KB' | 'NOTE_HASH_TREE_MAP_SIZE_KB' | 'MESSAGE_TREE_MAP_SIZE_KB' | 'PUBLIC_DATA_TREE_MAP_SIZE_KB' | 'DEBUG' | 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY' | 'DEPLOY_AZTEC_CONTRACTS_SALT' | 'DEPLOY_AZTEC_CONTRACTS' | 'ENFORCE_FEES' | 'ETHEREUM_HOSTS' | 'FEE_JUICE_CONTRACT_ADDRESS' | 'FEE_JUICE_PORTAL_CONTRACT_ADDRESS' | 'FEE_RECIPIENT' | 'FORCE_COLOR' | 'GOVERNANCE_PROPOSER_CONTRACT_ADDRESS' | 'GOVERNANCE_PROPOSER_PAYLOAD_ADDRESS' | 'INBOX_CONTRACT_ADDRESS' | 'L1_CHAIN_ID' | 'L1_CONSENSUS_HOST_URLS' | 'L1_CONSENSUS_HOST_API_KEYS' | 'L1_CONSENSUS_HOST_API_KEY_HEADERS' | 'L1_PRIVATE_KEY' | 'LOG_JSON' | 'LOG_MULTILINE' | 'LOG_LEVEL' | 'MNEMONIC' | 'NETWORK_NAME' | 'NETWORK' | 'NO_PXE' | 'COIN_ISSUER_CONTRACT_ADDRESS' | 'USE_GCLOUD_LOGGING' | 'OTEL_EXPORTER_OTLP_METRICS_ENDPOINT' | 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT' | 'OTEL_EXPORTER_OTLP_LOGS_ENDPOINT' | 'OTEL_COLLECT_INTERVAL_MS' | 'OTEL_EXCLUDE_METRICS' | 'OTEL_EXPORT_TIMEOUT_MS' | 'OUTBOX_CONTRACT_ADDRESS' | 'P2P_BLOCK_CHECK_INTERVAL_MS' | 'P2P_BLOCK_REQUEST_BATCH_SIZE' | 'P2P_BOOTSTRAP_NODE_ENR_VERSION_CHECK' | 'P2P_BOOTSTRAP_NODES_AS_FULL_PEERS' | 'P2P_ENABLED' | 'P2P_GOSSIPSUB_D' | 'P2P_GOSSIPSUB_DHI' | 'P2P_GOSSIPSUB_DLO' | 'P2P_GOSSIPSUB_DLAZY' | 'P2P_GOSSIPSUB_FLOOD_PUBLISH' | 'P2P_GOSSIPSUB_INTERVAL_MS' | 'P2P_GOSSIPSUB_MCACHE_GOSSIP' | 'P2P_GOSSIPSUB_MCACHE_LENGTH' | 'P2P_GOSSIPSUB_SEEN_TTL' | 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_DECAY' | 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_WEIGHT' | 'P2P_GOSSIPSUB_TX_TOPIC_WEIGHT' | 'P2P_L2_QUEUE_SIZE' | 'P2P_MAX_PEERS' | 'P2P_PEER_CHECK_INTERVAL_MS' | 'P2P_PEER_PENALTY_VALUES' | 'P2P_QUERY_FOR_IP' | 'P2P_REQRESP_INDIVIDUAL_REQUEST_TIMEOUT_MS' | 'P2P_REQRESP_OVERALL_REQUEST_TIMEOUT_MS' | 'P2P_DOUBLE_SPEND_SEVERE_PEER_PENALTY_WINDOW' | 'P2P_LISTEN_ADDR' | 'P2P_PORT' | 'P2P_BROADCAST_PORT' | 'P2P_IP' | 'P2P_ARCHIVED_TX_LIMIT' | 'P2P_TRUSTED_PEERS' | 'P2P_PRIVATE_PEERS' | 'P2P_MAX_TX_POOL_SIZE' | 'P2P_TX_POOL_OVERFLOW_FACTOR' | 'P2P_SEEN_MSG_CACHE_SIZE' | 'PEER_ID_PRIVATE_KEY' | 'PEER_ID_PRIVATE_KEY_PATH' | 'PROVER_AGENT_COUNT' | 'PROVER_AGENT_PROOF_TYPES' | 'PROVER_AGENT_POLL_INTERVAL_MS' | 'PROVER_BROKER_HOST' | 'PROVER_BROKER_JOB_TIMEOUT_MS' | 'PROVER_BROKER_POLL_INTERVAL_MS' | 'PROVER_BROKER_JOB_MAX_RETRIES' | 'PROVER_BROKER_BATCH_INTERVAL_MS' | 'PROVER_BROKER_BATCH_SIZE' | 'PROVER_BROKER_MAX_EPOCHS_TO_KEEP_RESULTS_FOR' | 'PROVER_COORDINATION_NODE_URLS' | 'PROVER_FAILED_PROOF_STORE' | 'PROVER_NODE_FAILED_EPOCH_STORE' | 'PROVER_ID' | 'PROVER_NODE_POLLING_INTERVAL_MS' | 'PROVER_NODE_MAX_PENDING_JOBS' | 'PROVER_NODE_MAX_PARALLEL_BLOCKS_PER_EPOCH' | 'PROVER_NODE_TX_GATHERING_INTERVAL_MS' | 'PROVER_NODE_TX_GATHERING_BATCH_SIZE' | 'PROVER_NODE_TX_GATHERING_MAX_PARALLEL_REQUESTS_PER_NODE' | 'PROVER_PUBLISH_RETRY_INTERVAL_MS' | 'PROVER_PUBLISHER_PRIVATE_KEY' | 'PROVER_REAL_PROOFS' | 'PROVER_TEST_DELAY_FACTOR' | 'PROVER_TEST_DELAY_MS' | 'PROVER_TEST_DELAY_TYPE' | 'PXE_L2_BLOCK_BATCH_SIZE' | 'PXE_PROVER_ENABLED' | 'REGISTRY_CONTRACT_ADDRESS' | 'ROLLUP_CONTRACT_ADDRESS' | 'RPC_SIMULATE_PUBLIC_MAX_GAS_LIMIT' | 'SENTINEL_ENABLED' | 'SENTINEL_HISTORY_LENGTH_IN_EPOCHS' | 'SEQ_MAX_BLOCK_SIZE_IN_BYTES' | 'SEQ_MAX_TX_PER_BLOCK' | 'SEQ_MIN_TX_PER_BLOCK' | 'SEQ_PUBLISH_TXS_WITH_PROPOSALS' | 'SEQ_MAX_DA_BLOCK_GAS' | 'SEQ_MAX_L2_BLOCK_GAS' | 'SEQ_PUBLISH_RETRY_INTERVAL_MS' | 'SEQ_PUBLISHER_PRIVATE_KEY' | 'SEQ_TX_POLLING_INTERVAL_MS' | 'SEQ_ENFORCE_TIME_TABLE' | 'SEQ_MAX_L1_TX_INCLUSION_TIME_INTO_SLOT' | 'SLASH_FACTORY_CONTRACT_ADDRESS' | 'STAKING_ASSET_CONTRACT_ADDRESS' | 'STAKING_ASSET_HANDLER_CONTRACT_ADDRESS' | 'SYNC_MODE' | 'SYNC_SNAPSHOTS_URL' | 'REWARD_DISTRIBUTOR_CONTRACT_ADDRESS' | 'TELEMETRY' | 'TEST_ACCOUNTS' | 'SPONSORED_FPC' | 'TX_GOSSIP_VERSION' | 'TX_PUBLIC_SETUP_ALLOWLIST' | 'TXE_PORT' | 'VALIDATOR_ATTESTATIONS_POLLING_INTERVAL_MS' | 'VALIDATOR_DISABLED' | 'VALIDATOR_PRIVATE_KEYS' | 'VALIDATOR_REEXECUTE' | 'ROLLUP_VERSION' | 'WS_BLOCK_CHECK_INTERVAL_MS' | 'WS_PROVEN_BLOCKS_ONLY' | 'WS_BLOCK_REQUEST_BATCH_SIZE' | 'VERIFIER_VIEM_POLLING_INTERVAL_MS' | 'L1_READER_VIEM_POLLING_INTERVAL_MS' | 'PROVER_VIEM_POLLING_INTERVAL_MS' | 'SEQ_VIEM_POLLING_INTERVAL_MS' | 'WS_DATA_DIRECTORY' | 'WS_NUM_HISTORIC_BLOCKS' | 'ETHEREUM_SLOT_DURATION' | 'AZTEC_SLOT_DURATION' | 'AZTEC_EPOCH_DURATION' | 'AZTEC_TARGET_COMMITTEE_SIZE' | 'AZTEC_PROOF_SUBMISSION_WINDOW' | 'AZTEC_MINIMUM_STAKE' | 'AZTEC_MANA_TARGET' | 'AZTEC_PROVING_COST_PER_MANA' | 'AZTEC_SLASHING_QUORUM' | 'AZTEC_SLASHING_ROUND_SIZE' | 'AZTEC_GOVERNANCE_PROPOSER_QUORUM' | 'AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE' | 'L1_GAS_LIMIT_BUFFER_PERCENTAGE' | 'L1_GAS_PRICE_MIN' | 'L1_GAS_PRICE_MAX' | 'L1_BLOB_FEE_PER_GAS_MAX' | 'L1_PRIORITY_FEE_BUMP_PERCENTAGE' | 'L1_PRIORITY_FEE_RETRY_BUMP_PERCENTAGE' | 'L1_FIXED_PRIORITY_FEE_PER_GAS' | 'L1_TX_MONITOR_MAX_ATTEMPTS' | 'L1_TX_MONITOR_CHECK_INTERVAL_MS' | 'L1_TX_MONITOR_STALL_TIME_MS' | 'L1_TX_MONITOR_TX_TIMEOUT_MS' | 'L1_TX_PROPAGATION_MAX_QUERY_ATTEMPTS' | 'FAUCET_MNEMONIC_ADDRESS_INDEX' | 'FAUCET_ETH_AMOUNT' | 'FAUCET_INTERVAL_MS' | 'FAUCET_L1_ASSETS' | 'K8S_POD_NAME' | 'K8S_POD_UID' | 'K8S_NAMESPACE_NAME' | 'CUSTOM_FORWARDER_CONTRACT_ADDRESS' | 'FEE_ASSET_HANDLER_CONTRACT_ADDRESS' | 'VALIDATOR_REEXECUTE_DEADLINE_MS' | 'AUTO_UPDATE' | 'AUTO_UPDATE_URL';
2
2
  //# sourceMappingURL=env_var.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env_var.d.ts","sourceRoot":"","sources":["../../src/config/env_var.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env_var.d.ts","sourceRoot":"","sources":["../../src/config/env_var.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { Fr } from '../../fields/fields.js';
2
2
  import { type Bufferable } from '../../serialize/serialize.js';
3
+ import type { Hasher } from '../../trees/hasher.js';
3
4
  export declare function sha256(data: Buffer): Buffer<ArrayBuffer>;
4
5
  export declare function sha256Trunc(data: Buffer): Buffer<ArrayBufferLike>;
5
6
  export declare function sha256ToField(data: Bufferable[]): Fr;
@@ -15,4 +16,22 @@ export declare function sha256ToField(data: Bufferable[]): Fr;
15
16
  * @returns The modified state. 8 u32s.
16
17
  */
17
18
  export declare function sha256Compression(state: Uint32Array, inputs: Uint32Array): Uint32Array;
19
+ /**
20
+ * A helper class encapsulating SHA256 hash functionality.
21
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
22
+ * purposes.
23
+ */
24
+ export declare class SHA256 implements Hasher {
25
+ hash(lhs: Uint8Array, rhs: Uint8Array): Buffer<ArrayBuffer>;
26
+ hashInputs(inputs: Buffer[]): Buffer<ArrayBuffer>;
27
+ }
28
+ /**
29
+ * A helper class encapsulating truncated SHA256 hash functionality.
30
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
31
+ * purposes.
32
+ */
33
+ export declare class SHA256Trunc implements Hasher {
34
+ hash(lhs: Uint8Array, rhs: Uint8Array): Buffer<ArrayBuffer>;
35
+ hashInputs(inputs: Buffer[]): Buffer<ArrayBuffer>;
36
+ }
18
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/sha256/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,8BAA8B,CAAC;AAElF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,uBAElC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,2BAEvC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAG/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW,CAyEtF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/sha256/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,8BAA8B,CAAC;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,uBAElC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,2BAEvC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAG/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW,CAyEtF;AA4CD;;;;GAIG;AACH,qBAAa,MAAO,YAAW,MAAM;IAK5B,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAC4B,MAAM,CAAC,WAAW,CAAC;IAOpF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GACQ,MAAM,CAAC,WAAW,CAAC;CAE9D;AAED;;;;GAIG;AACH,qBAAa,WAAY,YAAW,MAAM;IAKjC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAC4C,MAAM,CAAC,WAAW,CAAC;IAOpG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GACwB,MAAM,CAAC,WAAW,CAAC;CAE9E"}
@@ -164,3 +164,45 @@ function g0_256(x) {
164
164
  function g1_256(x) {
165
165
  return rotr32(x, 17) ^ rotr32(x, 19) ^ x >>> 10;
166
166
  }
167
+ /**
168
+ * A helper class encapsulating SHA256 hash functionality.
169
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
170
+ * purposes.
171
+ */ export class SHA256 {
172
+ /*
173
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
174
+ * purposes.
175
+ */ hash(lhs, rhs) {
176
+ return sha256(Buffer.concat([
177
+ Buffer.from(lhs),
178
+ Buffer.from(rhs)
179
+ ]));
180
+ }
181
+ /*
182
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
183
+ * purposes.
184
+ */ hashInputs(inputs) {
185
+ return sha256(Buffer.concat(inputs));
186
+ }
187
+ }
188
+ /**
189
+ * A helper class encapsulating truncated SHA256 hash functionality.
190
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
191
+ * purposes.
192
+ */ export class SHA256Trunc {
193
+ /*
194
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
195
+ * purposes.
196
+ */ hash(lhs, rhs) {
197
+ return truncateAndPad(sha256(Buffer.concat([
198
+ Buffer.from(lhs),
199
+ Buffer.from(rhs)
200
+ ])));
201
+ }
202
+ /*
203
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
204
+ * purposes.
205
+ */ hashInputs(inputs) {
206
+ return truncateAndPad(sha256(Buffer.concat(inputs)));
207
+ }
208
+ }
@@ -8,7 +8,6 @@ export type ViemSignature = {
8
8
  r: `0x${string}`;
9
9
  s: `0x${string}`;
10
10
  v: number;
11
- isEmpty: boolean;
12
11
  };
13
12
  /**
14
13
  * Contains a signature split into it's primary components (r,s,v)
@@ -20,18 +19,15 @@ export declare class Signature {
20
19
  readonly s: Buffer32;
21
20
  /** The v value of the signature */
22
21
  readonly v: number;
23
- /** Does this struct store an empty signature */
24
- readonly isEmpty: boolean;
25
22
  private size;
23
+ readonly empty: boolean;
26
24
  constructor(
27
25
  /** The r value of the signature */
28
26
  r: Buffer32,
29
27
  /** The s value of the signature */
30
28
  s: Buffer32,
31
29
  /** The v value of the signature */
32
- v: number,
33
- /** Does this struct store an empty signature */
34
- isEmpty?: boolean);
30
+ v: number);
35
31
  static fromBuffer(buf: Buffer | BufferReader): Signature;
36
32
  static isValidString(sig: `0x${string}`): boolean;
37
33
  /**
@@ -43,6 +39,7 @@ export declare class Signature {
43
39
  static fromViemSignature(sig: ViemSignature): Signature;
44
40
  static random(): Signature;
45
41
  static empty(): Signature;
42
+ isEmpty(): boolean;
46
43
  equals(other: Signature): boolean;
47
44
  toBuffer(): Buffer;
48
45
  getSize(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"eth_signature.d.ts","sourceRoot":"","sources":["../../src/eth-signature/eth_signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IAKlB,mCAAmC;aACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;aACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;aACnB,CAAC,EAAE,MAAM;IACzB,gDAAgD;aAChC,OAAO,EAAE,OAAO;IAVlC,OAAO,CAAC,IAAI,CAAqB;;IAG/B,mCAAmC;IACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;IACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;IACnB,CAAC,EAAE,MAAM;IACzB,gDAAgD;IAChC,OAAO,GAAE,OAAe;IAG1C,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAYxD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO;IAIjD;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS;IAYhD,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS;IASvD,MAAM,CAAC,MAAM,IAAI,SAAS;IAI1B,MAAM,CAAC,KAAK,IAAI,SAAS;IAIzB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAIjC,QAAQ,IAAI,MAAM;IAMlB,OAAO,IAAI,MAAM;IAUjB,QAAQ,IAAI,KAAK,MAAM,EAAE;IAIzB;;OAEG;IACH,eAAe,IAAI,aAAa;IAShC,MAAM;IAIN,MAAM,KAAK,MAAM,2HAMhB;CACF"}
1
+ {"version":3,"file":"eth_signature.d.ts","sourceRoot":"","sources":["../../src/eth-signature/eth_signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IAOlB,mCAAmC;aACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;aACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;aACnB,CAAC,EAAE,MAAM;IAV3B,OAAO,CAAC,IAAI,CAAqB;IAEjC,SAAgB,KAAK,EAAE,OAAO,CAAC;;IAG7B,mCAAmC;IACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;IACnB,CAAC,EAAE,QAAQ;IAC3B,mCAAmC;IACnB,CAAC,EAAE,MAAM;IAK3B,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAUxD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO;IAIjD;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS;IAUhD,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS;IAIvD,MAAM,CAAC,MAAM,IAAI,SAAS;IAI1B,MAAM,CAAC,KAAK,IAAI,SAAS;IAIzB,OAAO,IAAI,OAAO;IAIlB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAIjC,QAAQ,IAAI,MAAM;IAMlB,OAAO,IAAI,MAAM;IAUjB,QAAQ,IAAI,KAAK,MAAM,EAAE;IAIzB;;OAEG;IACH,eAAe,IAAI,aAAa;IAQhC,MAAM;IAIN,MAAM,KAAK,MAAM,2HAMhB;CACF"}
@@ -8,22 +8,21 @@ import { hasHexPrefix, hexToBuffer } from '../string/index.js';
8
8
  r;
9
9
  s;
10
10
  v;
11
- isEmpty;
12
11
  // Cached values
13
12
  size;
14
- constructor(/** The r value of the signature */ r, /** The s value of the signature */ s, /** The v value of the signature */ v, /** Does this struct store an empty signature */ isEmpty = false){
13
+ empty;
14
+ constructor(/** The r value of the signature */ r, /** The s value of the signature */ s, /** The v value of the signature */ v){
15
15
  this.r = r;
16
16
  this.s = s;
17
17
  this.v = v;
18
- this.isEmpty = isEmpty;
18
+ this.empty = r.isZero() && s.isZero() && v === 0;
19
19
  }
20
20
  static fromBuffer(buf) {
21
21
  const reader = BufferReader.asReader(buf);
22
22
  const r = reader.readObject(Buffer32);
23
23
  const s = reader.readObject(Buffer32);
24
24
  const v = reader.readNumber();
25
- const isEmpty = r.isZero() && s.isZero();
26
- return new Signature(r, s, v, isEmpty);
25
+ return new Signature(r, s, v);
27
26
  }
28
27
  static isValidString(sig) {
29
28
  return /^0x[0-9a-f]{129,}$/i.test(sig);
@@ -38,20 +37,22 @@ import { hasHexPrefix, hexToBuffer } from '../string/index.js';
38
37
  const r = reader.readObject(Buffer32);
39
38
  const s = reader.readObject(Buffer32);
40
39
  const v = parseInt(sig.slice(2 + 64 * 2), 16);
41
- const isEmpty = r.isZero() && s.isZero();
42
- return new Signature(r, s, v, isEmpty);
40
+ return new Signature(r, s, v);
43
41
  }
44
42
  static fromViemSignature(sig) {
45
- return new Signature(Buffer32.fromBuffer(hexToBuffer(sig.r)), Buffer32.fromBuffer(hexToBuffer(sig.s)), sig.v, sig.isEmpty);
43
+ return new Signature(Buffer32.fromBuffer(hexToBuffer(sig.r)), Buffer32.fromBuffer(hexToBuffer(sig.s)), sig.v);
46
44
  }
47
45
  static random() {
48
- return new Signature(Buffer32.random(), Buffer32.random(), Math.floor(Math.random() * 2), false);
46
+ return new Signature(Buffer32.random(), Buffer32.random(), Math.floor(Math.random() * 2));
49
47
  }
50
48
  static empty() {
51
- return new Signature(Buffer32.ZERO, Buffer32.ZERO, 0, true);
49
+ return new Signature(Buffer32.ZERO, Buffer32.ZERO, 0);
50
+ }
51
+ isEmpty() {
52
+ return this.empty;
52
53
  }
53
54
  equals(other) {
54
- return this.r.equals(other.r) && this.s.equals(other.s) && this.v === other.v && this.isEmpty === other.isEmpty;
55
+ return this.r.equals(other.r) && this.s.equals(other.s) && this.v === other.v && this.empty === other.empty;
55
56
  }
56
57
  toBuffer() {
57
58
  const buffer = serializeToBuffer([
@@ -79,8 +80,7 @@ import { hasHexPrefix, hexToBuffer } from '../string/index.js';
79
80
  return {
80
81
  r: this.r.toString(),
81
82
  s: this.s.toString(),
82
- v: this.v,
83
- isEmpty: this.isEmpty
83
+ v: this.v
84
84
  };
85
85
  }
86
86
  toJSON() {
@@ -69,7 +69,7 @@ const customLevels = {
69
69
  // Global pino options, tweaked for google cloud if running there.
70
70
  const useGcloudLogging = parseBooleanEnv(process.env['USE_GCLOUD_LOGGING']);
71
71
  const redactedPaths = [
72
- 'validatorPrivateKey',
72
+ 'validatorPrivateKeys',
73
73
  // for both the validator and the prover
74
74
  'publisherPrivateKey',
75
75
  'peerIdPrivateKey',
@@ -8,4 +8,5 @@ export * from './sibling_path.js';
8
8
  export * from './membership_witness.js';
9
9
  export * from './hasher.js';
10
10
  export * from './indexed_tree_leaf.js';
11
+ export * from './unbalanced_merkle_tree_calculator.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trees/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,qCAAqC,CAAC;AACpD,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trees/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,qCAAqC,CAAC;AACpD,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,wCAAwC,CAAC"}
@@ -8,3 +8,4 @@ export * from './sibling_path.js';
8
8
  export * from './membership_witness.js';
9
9
  export * from './hasher.js';
10
10
  export * from './indexed_tree_leaf.js';
11
+ export * from './unbalanced_merkle_tree_calculator.js';
@@ -0,0 +1,43 @@
1
+ import type { AsyncHasher } from '@aztec/foundation/trees';
2
+ import { SiblingPath } from '@aztec/foundation/trees';
3
+ /**
4
+ * An ephemeral unbalanced Merkle tree implementation.
5
+ * Follows the rollup implementation which greedily hashes pairs of nodes up the tree.
6
+ * Remaining rightmost nodes are shifted up until they can be paired.
7
+ */
8
+ export declare class UnbalancedMerkleTreeCalculator {
9
+ private maxDepth;
10
+ private hasher;
11
+ private cache;
12
+ private valueCache;
13
+ protected size: bigint;
14
+ root: Buffer;
15
+ constructor(maxDepth: number, hasher: AsyncHasher['hash']);
16
+ static create(height: number, hasher?: (left: Buffer, right: Buffer) => Promise<Buffer<ArrayBuffer>>): UnbalancedMerkleTreeCalculator;
17
+ /**
18
+ * Returns the root of the tree.
19
+ * @returns The root of the tree.
20
+ */
21
+ getRoot(): Buffer;
22
+ /**
23
+ * Returns a sibling path for the element at the given index.
24
+ * @param value - The value of the element.
25
+ * @returns A sibling path for the element.
26
+ * Note: The sibling path is an array of sibling hashes, with the lowest hash (leaf hash) first, and the highest hash last.
27
+ */
28
+ getSiblingPath<N extends number>(value: bigint): Promise<SiblingPath<N>>;
29
+ /**
30
+ * Appends the given leaves to the tree.
31
+ * @param leaves - The leaves to append.
32
+ * @returns Empty promise.
33
+ */
34
+ appendLeaves(leaves: Buffer[]): Promise<void>;
35
+ /**
36
+ * Calculates root while adding leaves and nodes to the cache.
37
+ * @param leaves - The leaves to append.
38
+ * @returns Resulting root of the tree.
39
+ */
40
+ private batchInsert;
41
+ private storeNode;
42
+ }
43
+ //# sourceMappingURL=unbalanced_merkle_tree_calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unbalanced_merkle_tree_calculator.d.ts","sourceRoot":"","sources":["../../src/trees/unbalanced_merkle_tree_calculator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD;;;;GAIG;AACH,qBAAa,8BAA8B;IAUvC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAThB,OAAO,CAAC,KAAK,CAAiC;IAE9C,OAAO,CAAC,UAAU,CAAiC;IACnD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAM;IAE5B,IAAI,EAAE,MAAM,CAAoB;gBAGtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;IAGrC,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,MAAM,EACd,MAAM,IAAU,MAAM,MAAM,EAAE,OAAO,MAAM,iCAC4B;IAKzE;;;OAGG;IACI,OAAO,IAAI,MAAM;IAIxB;;;;;OAKG;IACI,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAgB/E;;;;OAIG;IACU,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1D;;;;OAIG;YACW,WAAW;IAyCzB,OAAO,CAAC,SAAS;CAKlB"}
@@ -0,0 +1,122 @@
1
+ import { serializeToBuffer } from '@aztec/foundation/serialize';
2
+ import { SiblingPath } from '@aztec/foundation/trees';
3
+ import { pedersenHash } from '../crypto/pedersen/index.js';
4
+ const indexToKeyHash = (level, index)=>`${level}:${index}`;
5
+ /**
6
+ * An ephemeral unbalanced Merkle tree implementation.
7
+ * Follows the rollup implementation which greedily hashes pairs of nodes up the tree.
8
+ * Remaining rightmost nodes are shifted up until they can be paired.
9
+ */ export class UnbalancedMerkleTreeCalculator {
10
+ maxDepth;
11
+ hasher;
12
+ // This map stores index and depth -> value
13
+ cache;
14
+ // This map stores value -> index and depth, since we have variable depth
15
+ valueCache;
16
+ size;
17
+ root;
18
+ constructor(maxDepth, hasher){
19
+ this.maxDepth = maxDepth;
20
+ this.hasher = hasher;
21
+ this.cache = {};
22
+ this.valueCache = {};
23
+ this.size = 0n;
24
+ this.root = Buffer.alloc(32);
25
+ }
26
+ static create(height, hasher = async (left, right)=>(await pedersenHash([
27
+ left,
28
+ right
29
+ ])).toBuffer()) {
30
+ return new UnbalancedMerkleTreeCalculator(height, hasher);
31
+ }
32
+ /**
33
+ * Returns the root of the tree.
34
+ * @returns The root of the tree.
35
+ */ getRoot() {
36
+ return this.root;
37
+ }
38
+ /**
39
+ * Returns a sibling path for the element at the given index.
40
+ * @param value - The value of the element.
41
+ * @returns A sibling path for the element.
42
+ * Note: The sibling path is an array of sibling hashes, with the lowest hash (leaf hash) first, and the highest hash last.
43
+ */ getSiblingPath(value) {
44
+ const path = [];
45
+ const [depth, _index] = this.valueCache[serializeToBuffer(value).toString('hex')].split(':');
46
+ let level = parseInt(depth, 10);
47
+ let index = BigInt(_index);
48
+ while(level > 0){
49
+ const isRight = index & 0x01n;
50
+ const key = indexToKeyHash(level, isRight ? index - 1n : index + 1n);
51
+ const sibling = this.cache[key];
52
+ path.push(sibling);
53
+ level -= 1;
54
+ index >>= 1n;
55
+ }
56
+ return Promise.resolve(new SiblingPath(parseInt(depth, 10), path));
57
+ }
58
+ /**
59
+ * Appends the given leaves to the tree.
60
+ * @param leaves - The leaves to append.
61
+ * @returns Empty promise.
62
+ */ async appendLeaves(leaves) {
63
+ if (this.size != BigInt(0)) {
64
+ throw Error(`Can't re-append to an unbalanced tree. Current has ${this.size} leaves.`);
65
+ }
66
+ const root = await this.batchInsert(leaves);
67
+ this.root = root;
68
+ return Promise.resolve();
69
+ }
70
+ /**
71
+ * Calculates root while adding leaves and nodes to the cache.
72
+ * @param leaves - The leaves to append.
73
+ * @returns Resulting root of the tree.
74
+ */ async batchInsert(_leaves) {
75
+ // If we have an even number of leaves, hash them all in pairs
76
+ // Otherwise, store the final leaf to be shifted up to the next odd sized level
77
+ let [layerWidth, nodeToShift] = _leaves.length & 1 ? [
78
+ _leaves.length - 1,
79
+ serializeToBuffer(_leaves[_leaves.length - 1])
80
+ ] : [
81
+ _leaves.length,
82
+ Buffer.alloc(0)
83
+ ];
84
+ // Allocate this layer's leaves and init the next layer up
85
+ let thisLayer = _leaves.slice(0, layerWidth).map((l)=>serializeToBuffer(l));
86
+ let nextLayer = [];
87
+ // Store the bottom level leaves
88
+ thisLayer.forEach((leaf, i)=>this.storeNode(leaf, this.maxDepth, BigInt(i)));
89
+ for(let i = 0; i < this.maxDepth; i++){
90
+ for(let j = 0; j < layerWidth; j += 2){
91
+ // Store the hash of each pair one layer up
92
+ nextLayer[j / 2] = await this.hasher(serializeToBuffer(thisLayer[j]), serializeToBuffer(thisLayer[j + 1]));
93
+ this.storeNode(nextLayer[j / 2], this.maxDepth - i - 1, BigInt(j >> 1));
94
+ }
95
+ layerWidth /= 2;
96
+ if (layerWidth & 1) {
97
+ if (nodeToShift.length) {
98
+ // If the next layer has odd length, and we have a node that needs to be shifted up, add it here
99
+ nextLayer.push(serializeToBuffer(nodeToShift));
100
+ this.storeNode(nodeToShift, this.maxDepth - i - 1, BigInt(layerWidth * 2 >> 1));
101
+ layerWidth += 1;
102
+ nodeToShift = Buffer.alloc(0);
103
+ } else {
104
+ // If we don't have a node waiting to be shifted, store the next layer's final node to be shifted
105
+ layerWidth -= 1;
106
+ nodeToShift = nextLayer[layerWidth];
107
+ }
108
+ }
109
+ // reset the layers
110
+ thisLayer = nextLayer;
111
+ nextLayer = [];
112
+ }
113
+ this.size += BigInt(_leaves.length);
114
+ // return the root
115
+ return thisLayer[0];
116
+ }
117
+ storeNode(value, depth, index) {
118
+ const key = indexToKeyHash(depth, index);
119
+ this.cache[key] = value;
120
+ this.valueCache[value.toString('hex')] = key;
121
+ }
122
+ }
@@ -14,4 +14,23 @@ export type Writeable<T> = {
14
14
  };
15
15
  /** Removes readonly modifiers for an object. */
16
16
  export declare function unfreeze<T>(obj: T): Writeable<T>;
17
+ /**
18
+ * Type-safe Event Emitter type
19
+ * @example
20
+ * export type ArchiverEmitter = TypedEventEmitter<{
21
+ * [L2BlockSourceEvents.L2PruneDetected]: (args: L2BlockSourceEvent) => void;
22
+ * [L2BlockSourceEvents.L2BlockProven]: (args: L2BlockSourceEvent) => void;
23
+ * }>;
24
+ * class Archiver extends (EventEmitter as new () => ArchiverEmitter) {
25
+ * // ...
26
+ * }
27
+ */
28
+ export interface TypedEventEmitter<TEventMap extends {
29
+ [key in keyof TEventMap]: (...args: any[]) => void;
30
+ }> {
31
+ on<K extends keyof TEventMap>(event: K, listener: TEventMap[K]): this;
32
+ off<K extends keyof TEventMap>(event: K, listener: TEventMap[K]): this;
33
+ emit<K extends keyof TEventMap>(event: K, ...args: Parameters<TEventMap[K]>): boolean;
34
+ removeListener<K extends keyof TEventMap>(event: K, listener: TEventMap[K]): this;
35
+ }
17
36
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KACvB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/E,6CAA6C;AAC7C,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAE9D,gDAAgD;AAChD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAEhD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KACvB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/E,6CAA6C;AAC7C,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAE9D,gDAAgD;AAChD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAEhD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB,CAAC,SAAS,SAAS;KAAG,GAAG,IAAI,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI;CAAE;IACzG,EAAE,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtE,GAAG,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACvE,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACtF,cAAc,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAEnF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/foundation",
3
- "version": "0.87.7",
3
+ "version": "1.0.0-nightly.20250604",
4
4
  "type": "module",
5
5
  "main": "./dest/index.js",
6
6
  "types": "./dest/index.d.ts",
@@ -100,7 +100,7 @@
100
100
  ]
101
101
  },
102
102
  "dependencies": {
103
- "@aztec/bb.js": "0.87.7",
103
+ "@aztec/bb.js": "1.0.0-nightly.20250604",
104
104
  "@koa/cors": "^5.0.0",
105
105
  "@noble/curves": "^1.2.0",
106
106
  "c-kzg": "4.0.0-alpha.1",
@@ -187,7 +187,7 @@ export type EnvVar =
187
187
  | 'TXE_PORT'
188
188
  | 'VALIDATOR_ATTESTATIONS_POLLING_INTERVAL_MS'
189
189
  | 'VALIDATOR_DISABLED'
190
- | 'VALIDATOR_PRIVATE_KEY'
190
+ | 'VALIDATOR_PRIVATE_KEYS'
191
191
  | 'VALIDATOR_REEXECUTE'
192
192
  | 'ROLLUP_VERSION'
193
193
  | 'WS_BLOCK_CHECK_INTERVAL_MS'
@@ -223,7 +223,7 @@ export type EnvVar =
223
223
  | 'L1_TX_MONITOR_STALL_TIME_MS'
224
224
  | 'L1_TX_MONITOR_TX_TIMEOUT_MS'
225
225
  | 'L1_TX_PROPAGATION_MAX_QUERY_ATTEMPTS'
226
- | 'FAUCET_MNEMONIC_ACCOUNT_INDEX'
226
+ | 'FAUCET_MNEMONIC_ADDRESS_INDEX'
227
227
  | 'FAUCET_ETH_AMOUNT'
228
228
  | 'FAUCET_INTERVAL_MS'
229
229
  | 'FAUCET_L1_ASSETS'
@@ -232,5 +232,6 @@ export type EnvVar =
232
232
  | 'K8S_NAMESPACE_NAME'
233
233
  | 'CUSTOM_FORWARDER_CONTRACT_ADDRESS'
234
234
  | 'FEE_ASSET_HANDLER_CONTRACT_ADDRESS'
235
+ | 'VALIDATOR_REEXECUTE_DEADLINE_MS'
235
236
  | 'AUTO_UPDATE'
236
237
  | 'AUTO_UPDATE_URL';
@@ -4,6 +4,7 @@ import { default as hash } from 'hash.js';
4
4
  import { Fr } from '../../fields/fields.js';
5
5
  import { truncateAndPad } from '../../serialize/free_funcs.js';
6
6
  import { type Bufferable, serializeToBuffer } from '../../serialize/serialize.js';
7
+ import type { Hasher } from '../../trees/hasher.js';
7
8
 
8
9
  export function sha256(data: Buffer) {
9
10
  return Buffer.from(hash.sha256().update(data).digest());
@@ -145,3 +146,49 @@ function g0_256(x: number) {
145
146
  function g1_256(x: number) {
146
147
  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
147
148
  }
149
+
150
+ /**
151
+ * A helper class encapsulating SHA256 hash functionality.
152
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
153
+ * purposes.
154
+ */
155
+ export class SHA256 implements Hasher {
156
+ /*
157
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
158
+ * purposes.
159
+ */
160
+ public hash(lhs: Uint8Array, rhs: Uint8Array) {
161
+ return sha256(Buffer.concat([Buffer.from(lhs), Buffer.from(rhs)])) as Buffer<ArrayBuffer>;
162
+ }
163
+
164
+ /*
165
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
166
+ * purposes.
167
+ */
168
+ public hashInputs(inputs: Buffer[]) {
169
+ return sha256(Buffer.concat(inputs)) as Buffer<ArrayBuffer>;
170
+ }
171
+ }
172
+
173
+ /**
174
+ * A helper class encapsulating truncated SHA256 hash functionality.
175
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
176
+ * purposes.
177
+ */
178
+ export class SHA256Trunc implements Hasher {
179
+ /*
180
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
181
+ * purposes.
182
+ */
183
+ public hash(lhs: Uint8Array, rhs: Uint8Array) {
184
+ return truncateAndPad(sha256(Buffer.concat([Buffer.from(lhs), Buffer.from(rhs)]))) as Buffer<ArrayBuffer>;
185
+ }
186
+
187
+ /*
188
+ * @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
189
+ * purposes.
190
+ */
191
+ public hashInputs(inputs: Buffer[]) {
192
+ return truncateAndPad(sha256(Buffer.concat(inputs))) as Buffer<ArrayBuffer>;
193
+ }
194
+ }
@@ -12,7 +12,6 @@ export type ViemSignature = {
12
12
  r: `0x${string}`;
13
13
  s: `0x${string}`;
14
14
  v: number;
15
- isEmpty: boolean;
16
15
  };
17
16
 
18
17
  /**
@@ -22,6 +21,8 @@ export class Signature {
22
21
  // Cached values
23
22
  private size: number | undefined;
24
23
 
24
+ public readonly empty: boolean;
25
+
25
26
  constructor(
26
27
  /** The r value of the signature */
27
28
  public readonly r: Buffer32,
@@ -29,9 +30,9 @@ export class Signature {
29
30
  public readonly s: Buffer32,
30
31
  /** The v value of the signature */
31
32
  public readonly v: number,
32
- /** Does this struct store an empty signature */
33
- public readonly isEmpty: boolean = false,
34
- ) {}
33
+ ) {
34
+ this.empty = r.isZero() && s.isZero() && v === 0;
35
+ }
35
36
 
36
37
  static fromBuffer(buf: Buffer | BufferReader): Signature {
37
38
  const reader = BufferReader.asReader(buf);
@@ -40,9 +41,7 @@ export class Signature {
40
41
  const s = reader.readObject(Buffer32);
41
42
  const v = reader.readNumber();
42
43
 
43
- const isEmpty = r.isZero() && s.isZero();
44
-
45
- return new Signature(r, s, v, isEmpty);
44
+ return new Signature(r, s, v);
46
45
  }
47
46
 
48
47
  static isValidString(sig: `0x${string}`): boolean {
@@ -61,30 +60,27 @@ export class Signature {
61
60
  const s = reader.readObject(Buffer32);
62
61
  const v = parseInt(sig.slice(2 + 64 * 2), 16);
63
62
 
64
- const isEmpty = r.isZero() && s.isZero();
65
-
66
- return new Signature(r, s, v, isEmpty);
63
+ return new Signature(r, s, v);
67
64
  }
68
65
 
69
66
  static fromViemSignature(sig: ViemSignature): Signature {
70
- return new Signature(
71
- Buffer32.fromBuffer(hexToBuffer(sig.r)),
72
- Buffer32.fromBuffer(hexToBuffer(sig.s)),
73
- sig.v,
74
- sig.isEmpty,
75
- );
67
+ return new Signature(Buffer32.fromBuffer(hexToBuffer(sig.r)), Buffer32.fromBuffer(hexToBuffer(sig.s)), sig.v);
76
68
  }
77
69
 
78
70
  static random(): Signature {
79
- return new Signature(Buffer32.random(), Buffer32.random(), Math.floor(Math.random() * 2), false);
71
+ return new Signature(Buffer32.random(), Buffer32.random(), Math.floor(Math.random() * 2));
80
72
  }
81
73
 
82
74
  static empty(): Signature {
83
- return new Signature(Buffer32.ZERO, Buffer32.ZERO, 0, true);
75
+ return new Signature(Buffer32.ZERO, Buffer32.ZERO, 0);
76
+ }
77
+
78
+ isEmpty(): boolean {
79
+ return this.empty;
84
80
  }
85
81
 
86
82
  equals(other: Signature): boolean {
87
- return this.r.equals(other.r) && this.s.equals(other.s) && this.v === other.v && this.isEmpty === other.isEmpty;
83
+ return this.r.equals(other.r) && this.s.equals(other.s) && this.v === other.v && this.empty === other.empty;
88
84
  }
89
85
 
90
86
  toBuffer(): Buffer {
@@ -115,7 +111,6 @@ export class Signature {
115
111
  r: this.r.toString(),
116
112
  s: this.s.toString(),
117
113
  v: this.v,
118
- isEmpty: this.isEmpty,
119
114
  };
120
115
  }
121
116
 
@@ -101,7 +101,7 @@ const customLevels = { verbose: 25 };
101
101
  const useGcloudLogging = parseBooleanEnv(process.env['USE_GCLOUD_LOGGING' satisfies EnvVar]);
102
102
 
103
103
  const redactedPaths = [
104
- 'validatorPrivateKey',
104
+ 'validatorPrivateKeys',
105
105
  // for both the validator and the prover
106
106
  'publisherPrivateKey',
107
107
  'peerIdPrivateKey',
@@ -8,3 +8,4 @@ export * from './sibling_path.js';
8
8
  export * from './membership_witness.js';
9
9
  export * from './hasher.js';
10
10
  export * from './indexed_tree_leaf.js';
11
+ export * from './unbalanced_merkle_tree_calculator.js';
@@ -0,0 +1,132 @@
1
+ import { serializeToBuffer } from '@aztec/foundation/serialize';
2
+ import type { AsyncHasher } from '@aztec/foundation/trees';
3
+ import { SiblingPath } from '@aztec/foundation/trees';
4
+
5
+ import { pedersenHash } from '../crypto/pedersen/index.js';
6
+
7
+ const indexToKeyHash = (level: number, index: bigint) => `${level}:${index}`;
8
+
9
+ /**
10
+ * An ephemeral unbalanced Merkle tree implementation.
11
+ * Follows the rollup implementation which greedily hashes pairs of nodes up the tree.
12
+ * Remaining rightmost nodes are shifted up until they can be paired.
13
+ */
14
+ export class UnbalancedMerkleTreeCalculator {
15
+ // This map stores index and depth -> value
16
+ private cache: { [key: string]: Buffer } = {};
17
+ // This map stores value -> index and depth, since we have variable depth
18
+ private valueCache: { [key: string]: string } = {};
19
+ protected size: bigint = 0n;
20
+
21
+ root: Buffer = Buffer.alloc(32);
22
+
23
+ public constructor(
24
+ private maxDepth: number,
25
+ private hasher: AsyncHasher['hash'],
26
+ ) {}
27
+
28
+ static create(
29
+ height: number,
30
+ hasher = async (left: Buffer, right: Buffer) =>
31
+ (await pedersenHash([left, right])).toBuffer() as Buffer<ArrayBuffer>,
32
+ ) {
33
+ return new UnbalancedMerkleTreeCalculator(height, hasher);
34
+ }
35
+
36
+ /**
37
+ * Returns the root of the tree.
38
+ * @returns The root of the tree.
39
+ */
40
+ public getRoot(): Buffer {
41
+ return this.root;
42
+ }
43
+
44
+ /**
45
+ * Returns a sibling path for the element at the given index.
46
+ * @param value - The value of the element.
47
+ * @returns A sibling path for the element.
48
+ * Note: The sibling path is an array of sibling hashes, with the lowest hash (leaf hash) first, and the highest hash last.
49
+ */
50
+ public getSiblingPath<N extends number>(value: bigint): Promise<SiblingPath<N>> {
51
+ const path: Buffer[] = [];
52
+ const [depth, _index] = this.valueCache[serializeToBuffer(value).toString('hex')].split(':');
53
+ let level = parseInt(depth, 10);
54
+ let index = BigInt(_index);
55
+ while (level > 0) {
56
+ const isRight = index & 0x01n;
57
+ const key = indexToKeyHash(level, isRight ? index - 1n : index + 1n);
58
+ const sibling = this.cache[key];
59
+ path.push(sibling);
60
+ level -= 1;
61
+ index >>= 1n;
62
+ }
63
+ return Promise.resolve(new SiblingPath<N>(parseInt(depth, 10) as N, path));
64
+ }
65
+
66
+ /**
67
+ * Appends the given leaves to the tree.
68
+ * @param leaves - The leaves to append.
69
+ * @returns Empty promise.
70
+ */
71
+ public async appendLeaves(leaves: Buffer[]): Promise<void> {
72
+ if (this.size != BigInt(0)) {
73
+ throw Error(`Can't re-append to an unbalanced tree. Current has ${this.size} leaves.`);
74
+ }
75
+ const root = await this.batchInsert(leaves);
76
+ this.root = root;
77
+
78
+ return Promise.resolve();
79
+ }
80
+
81
+ /**
82
+ * Calculates root while adding leaves and nodes to the cache.
83
+ * @param leaves - The leaves to append.
84
+ * @returns Resulting root of the tree.
85
+ */
86
+ private async batchInsert(_leaves: Buffer[]): Promise<Buffer> {
87
+ // If we have an even number of leaves, hash them all in pairs
88
+ // Otherwise, store the final leaf to be shifted up to the next odd sized level
89
+ let [layerWidth, nodeToShift] =
90
+ _leaves.length & 1
91
+ ? [_leaves.length - 1, serializeToBuffer(_leaves[_leaves.length - 1])]
92
+ : [_leaves.length, Buffer.alloc(0)];
93
+ // Allocate this layer's leaves and init the next layer up
94
+ let thisLayer = _leaves.slice(0, layerWidth).map(l => serializeToBuffer(l));
95
+ let nextLayer = [];
96
+ // Store the bottom level leaves
97
+ thisLayer.forEach((leaf, i) => this.storeNode(leaf, this.maxDepth, BigInt(i)));
98
+ for (let i = 0; i < this.maxDepth; i++) {
99
+ for (let j = 0; j < layerWidth; j += 2) {
100
+ // Store the hash of each pair one layer up
101
+ nextLayer[j / 2] = await this.hasher(serializeToBuffer(thisLayer[j]), serializeToBuffer(thisLayer[j + 1]));
102
+ this.storeNode(nextLayer[j / 2], this.maxDepth - i - 1, BigInt(j >> 1));
103
+ }
104
+ layerWidth /= 2;
105
+ if (layerWidth & 1) {
106
+ if (nodeToShift.length) {
107
+ // If the next layer has odd length, and we have a node that needs to be shifted up, add it here
108
+ nextLayer.push(serializeToBuffer(nodeToShift));
109
+ this.storeNode(nodeToShift, this.maxDepth - i - 1, BigInt((layerWidth * 2) >> 1));
110
+ layerWidth += 1;
111
+ nodeToShift = Buffer.alloc(0);
112
+ } else {
113
+ // If we don't have a node waiting to be shifted, store the next layer's final node to be shifted
114
+ layerWidth -= 1;
115
+ nodeToShift = nextLayer[layerWidth];
116
+ }
117
+ }
118
+ // reset the layers
119
+ thisLayer = nextLayer;
120
+ nextLayer = [];
121
+ }
122
+ this.size += BigInt(_leaves.length);
123
+ // return the root
124
+ return thisLayer[0];
125
+ }
126
+
127
+ private storeNode(value: Buffer, depth: number, index: bigint) {
128
+ const key = indexToKeyHash(depth, index);
129
+ this.cache[key] = value;
130
+ this.valueCache[value.toString('hex')] = key;
131
+ }
132
+ }
@@ -18,3 +18,22 @@ export type Writeable<T> = { -readonly [P in keyof T]: T[P] };
18
18
  export function unfreeze<T>(obj: T): Writeable<T> {
19
19
  return obj as Writeable<T>;
20
20
  }
21
+
22
+ /**
23
+ * Type-safe Event Emitter type
24
+ * @example
25
+ * export type ArchiverEmitter = TypedEventEmitter<{
26
+ * [L2BlockSourceEvents.L2PruneDetected]: (args: L2BlockSourceEvent) => void;
27
+ * [L2BlockSourceEvents.L2BlockProven]: (args: L2BlockSourceEvent) => void;
28
+ * }>;
29
+ * class Archiver extends (EventEmitter as new () => ArchiverEmitter) {
30
+ * // ...
31
+ * }
32
+ */
33
+ export interface TypedEventEmitter<TEventMap extends { [key in keyof TEventMap]: (...args: any[]) => void }> {
34
+ on<K extends keyof TEventMap>(event: K, listener: TEventMap[K]): this;
35
+ off<K extends keyof TEventMap>(event: K, listener: TEventMap[K]): this;
36
+ emit<K extends keyof TEventMap>(event: K, ...args: Parameters<TEventMap[K]>): boolean;
37
+ removeListener<K extends keyof TEventMap>(event: K, listener: TEventMap[K]): this;
38
+ // Can add other EventEmitter methods if needed, like once(), listenerCount(), etc.
39
+ }