@aztec/stdlib 4.0.0-nightly.20260217 → 4.0.0-rc.1
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/auth_witness/auth_witness.js +3 -3
- package/dest/block/block_data.d.ts +52 -0
- package/dest/block/block_data.d.ts.map +1 -0
- package/dest/block/block_data.js +12 -0
- package/dest/block/index.d.ts +2 -1
- package/dest/block/index.d.ts.map +1 -1
- package/dest/block/index.js +1 -0
- package/dest/block/l2_block_source.d.ts +20 -1
- package/dest/block/l2_block_source.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint.d.ts +6 -1
- package/dest/checkpoint/checkpoint.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint.js +5 -4
- package/dest/checkpoint/checkpoint_data.d.ts +120 -0
- package/dest/checkpoint/checkpoint_data.d.ts.map +1 -0
- package/dest/checkpoint/checkpoint_data.js +26 -0
- package/dest/checkpoint/index.d.ts +2 -1
- package/dest/checkpoint/index.d.ts.map +1 -1
- package/dest/checkpoint/index.js +1 -0
- package/dest/checkpoint/published_checkpoint.d.ts +11 -2
- package/dest/checkpoint/published_checkpoint.d.ts.map +1 -1
- package/dest/checkpoint/published_checkpoint.js +1 -2
- package/dest/contract/contract_address.js +4 -4
- package/dest/contract/contract_class_id.js +3 -3
- package/dest/contract/private_function.js +2 -2
- package/dest/file-store/local.d.ts +3 -3
- package/dest/file-store/local.d.ts.map +1 -1
- package/dest/file-store/local.js +13 -4
- package/dest/file-store/s3.d.ts +1 -1
- package/dest/file-store/s3.d.ts.map +1 -1
- package/dest/file-store/s3.js +11 -3
- package/dest/hash/hash.js +11 -11
- package/dest/hash/map_slot.js +2 -2
- package/dest/interfaces/archiver.d.ts +1 -1
- package/dest/interfaces/archiver.d.ts.map +1 -1
- package/dest/interfaces/archiver.js +5 -0
- package/dest/interfaces/aztec-node-admin.d.ts +27 -2
- package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
- package/dest/interfaces/aztec-node-admin.js +9 -3
- package/dest/interfaces/configs.d.ts +12 -2
- package/dest/interfaces/configs.d.ts.map +1 -1
- package/dest/interfaces/configs.js +3 -1
- package/dest/interfaces/merkle_tree_operations.d.ts +2 -2
- package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
- package/dest/kernel/hints/index.d.ts +2 -2
- package/dest/kernel/hints/index.js +2 -2
- package/dest/kernel/hints/key_validation_request_and_separator.d.ts +24 -0
- package/dest/kernel/hints/key_validation_request_and_separator.d.ts.map +1 -0
- package/dest/kernel/hints/{key_validation_request_and_generator.js → key_validation_request_and_separator.js} +12 -15
- package/dest/kernel/hints/{scoped_key_validation_request_and_generator.d.ts → scoped_key_validation_request_and_separator.d.ts} +8 -8
- package/dest/kernel/hints/{scoped_key_validation_request_and_generator.d.ts.map → scoped_key_validation_request_and_separator.d.ts.map} +1 -1
- package/dest/kernel/hints/{scoped_key_validation_request_and_generator.js → scoped_key_validation_request_and_separator.js} +6 -6
- package/dest/kernel/private_circuit_public_inputs.d.ts +6 -6
- package/dest/kernel/private_circuit_public_inputs.js +11 -11
- package/dest/kernel/private_to_public_kernel_circuit_public_inputs.js +2 -2
- package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.js +2 -2
- package/dest/kernel/private_validation_requests.d.ts +3 -3
- package/dest/kernel/private_validation_requests.js +9 -9
- package/dest/keys/derivation.js +8 -8
- package/dest/keys/key_types.d.ts +3 -3
- package/dest/keys/key_types.d.ts.map +1 -1
- package/dest/keys/public_keys.js +2 -2
- package/dest/keys/utils.js +5 -5
- package/dest/logs/private_log.d.ts +2 -2
- package/dest/logs/private_log.d.ts.map +1 -1
- package/dest/p2p/block_proposal.d.ts +1 -1
- package/dest/p2p/block_proposal.d.ts.map +1 -1
- package/dest/p2p/block_proposal.js +1 -3
- package/dest/rollup/checkpoint_header.d.ts +2 -2
- package/dest/rollup/checkpoint_header.js +2 -2
- package/dest/tests/factories.js +10 -10
- package/dest/tx/block_header.js +2 -2
- package/dest/tx/global_variables.d.ts +4 -4
- package/dest/tx/global_variables.d.ts.map +1 -1
- package/dest/tx/protocol_contracts.d.ts +1 -1
- package/dest/tx/protocol_contracts.d.ts.map +1 -1
- package/dest/tx/protocol_contracts.js +2 -2
- package/dest/tx/tx_request.js +2 -2
- package/package.json +9 -9
- package/src/auth_witness/auth_witness.ts +3 -3
- package/src/block/block_data.ts +26 -0
- package/src/block/index.ts +1 -0
- package/src/block/l2_block_source.ts +22 -0
- package/src/checkpoint/checkpoint.ts +5 -3
- package/src/checkpoint/checkpoint_data.ts +51 -0
- package/src/checkpoint/index.ts +1 -0
- package/src/checkpoint/published_checkpoint.ts +3 -1
- package/src/contract/contract_address.ts +4 -4
- package/src/contract/contract_class_id.ts +3 -3
- package/src/contract/private_function.ts +2 -2
- package/src/file-store/local.ts +15 -5
- package/src/file-store/s3.ts +12 -3
- package/src/hash/hash.ts +11 -11
- package/src/hash/map_slot.ts +2 -2
- package/src/interfaces/archiver.ts +5 -0
- package/src/interfaces/aztec-node-admin.ts +23 -0
- package/src/interfaces/configs.ts +8 -1
- package/src/interfaces/merkle_tree_operations.ts +1 -1
- package/src/kernel/hints/index.ts +2 -2
- package/src/kernel/hints/{key_validation_request_and_generator.ts → key_validation_request_and_separator.ts} +12 -15
- package/src/kernel/hints/{scoped_key_validation_request_and_generator.ts → scoped_key_validation_request_and_separator.ts} +10 -10
- package/src/kernel/private_circuit_public_inputs.ts +10 -10
- package/src/kernel/private_to_public_kernel_circuit_public_inputs.ts +2 -2
- package/src/kernel/private_to_rollup_kernel_circuit_public_inputs.ts +2 -2
- package/src/kernel/private_validation_requests.ts +8 -8
- package/src/keys/derivation.ts +8 -8
- package/src/keys/key_types.ts +6 -2
- package/src/keys/public_keys.ts +2 -2
- package/src/keys/utils.ts +5 -5
- package/src/p2p/block_proposal.ts +0 -2
- package/src/rollup/checkpoint_header.ts +2 -2
- package/src/tests/factories.ts +11 -11
- package/src/tx/block_header.ts +2 -2
- package/src/tx/global_variables.ts +3 -3
- package/src/tx/protocol_contracts.ts +2 -2
- package/src/tx/tx_request.ts +2 -2
- package/dest/kernel/hints/key_validation_request_and_generator.d.ts +0 -30
- package/dest/kernel/hints/key_validation_request_and_generator.d.ts.map +0 -1
|
@@ -13,8 +13,8 @@ import { schemas } from '../schemas/index.js';
|
|
|
13
13
|
_computedKey = inspect.custom;
|
|
14
14
|
/**
|
|
15
15
|
* Header of a checkpoint. A checkpoint is a collection of blocks submitted to L1 all within the same slot.
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* This header is verified as-is in the rollup circuits, posted to the L1 rollup contract, stored in the archiver,
|
|
17
|
+
* and exposed via the Aztec Node API. See `CheckpointData` for a struct that includes the header plus extra metadata.
|
|
18
18
|
*/ export class CheckpointHeader {
|
|
19
19
|
lastArchiveRoot;
|
|
20
20
|
blockHeadersHash;
|
package/dest/tests/factories.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { makeBlobAccumulator, makeFinalBlobAccumulator, makeFinalBlobBatchingChallenges, makeSpongeBlob } from '@aztec/blob-lib/testing';
|
|
2
|
-
import { ARCHIVE_HEIGHT, AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED, CHONK_PROOF_LENGTH, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS,
|
|
2
|
+
import { ARCHIVE_HEIGHT, AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED, CHONK_PROOF_LENGTH, CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, DomainSeparator, L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH, MAX_CHECKPOINTS_PER_EPOCH, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_ENQUEUED_CALLS_PER_CALL, MAX_ENQUEUED_CALLS_PER_TX, MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_CALL, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL, MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL, MAX_PRIVATE_LOGS_PER_TX, MAX_PROTOCOL_CONTRACTS, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, NOTE_HASH_SUBTREE_ROOT_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_ROOT_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_BASE_PARITY_PER_ROOT_PARITY, NUM_MSGS_PER_BASE_PARITY, PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DATA_TREE_HEIGHT, RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, VK_TREE_HEIGHT } from '@aztec/constants';
|
|
3
3
|
import { makeTuple } from '@aztec/foundation/array';
|
|
4
4
|
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
5
5
|
import { compact } from '@aztec/foundation/collection';
|
|
@@ -22,7 +22,7 @@ import { ContractDeploymentData, SerializableContractInstance, computeContractCl
|
|
|
22
22
|
import { Gas, GasFees, GasSettings } from '../gas/index.js';
|
|
23
23
|
import { computeCalldataHash } from '../hash/hash.js';
|
|
24
24
|
import { KeyValidationRequest } from '../kernel/hints/key_validation_request.js';
|
|
25
|
-
import {
|
|
25
|
+
import { KeyValidationRequestAndSeparator } from '../kernel/hints/key_validation_request_and_separator.js';
|
|
26
26
|
import { ReadRequest, ScopedReadRequest } from '../kernel/hints/read_request.js';
|
|
27
27
|
import { ClaimedLengthArray, PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PrivateKernelTailCircuitPublicInputs, PrivateToAvmAccumulatedData, PrivateToAvmAccumulatedDataArrayLengths, PrivateToPublicAccumulatedData, PrivateToPublicKernelCircuitPublicInputs, PrivateToRollupAccumulatedData } from '../kernel/index.js';
|
|
28
28
|
import { CountedLogHash, LogHash, ScopedLogHash } from '../kernel/log_hash.js';
|
|
@@ -142,11 +142,11 @@ function makeScopedReadRequest(n) {
|
|
|
142
142
|
return new KeyValidationRequest(makePoint(seed), fr(seed + 2));
|
|
143
143
|
}
|
|
144
144
|
/**
|
|
145
|
-
* Creates arbitrary
|
|
146
|
-
* @param seed - The seed to use for generating the
|
|
147
|
-
* @returns A
|
|
148
|
-
*/ function
|
|
149
|
-
return new
|
|
145
|
+
* Creates arbitrary KeyValidationRequestAndSeparator from the given seed.
|
|
146
|
+
* @param seed - The seed to use for generating the KeyValidationRequestAndSeparator.
|
|
147
|
+
* @returns A KeyValidationRequestAndSeparator.
|
|
148
|
+
*/ function makeKeyValidationRequestAndSeparators(seed) {
|
|
149
|
+
return new KeyValidationRequestAndSeparator(makeKeyValidationRequests(seed), fr(seed + 4));
|
|
150
150
|
}
|
|
151
151
|
export function makePublicDataWrite(seed = 1) {
|
|
152
152
|
return new PublicDataWrite(fr(seed), fr(seed + 1));
|
|
@@ -340,7 +340,7 @@ function makeClaimedLengthArray(arraySize, makeItem, seed, length = arraySize) {
|
|
|
340
340
|
minRevertibleSideEffectCounter: fr(0),
|
|
341
341
|
noteHashReadRequests: makeClaimedLengthArray(MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, makeScopedReadRequest, seed + 0x300),
|
|
342
342
|
nullifierReadRequests: makeClaimedLengthArray(MAX_NULLIFIER_READ_REQUESTS_PER_CALL, makeScopedReadRequest, seed + 0x310),
|
|
343
|
-
|
|
343
|
+
keyValidationRequestsAndSeparators: makeClaimedLengthArray(MAX_KEY_VALIDATION_REQUESTS_PER_CALL, makeKeyValidationRequestAndSeparators, seed + 0x320),
|
|
344
344
|
noteHashes: makeClaimedLengthArray(MAX_NOTE_HASHES_PER_CALL, makeNoteHash, seed + 0x400),
|
|
345
345
|
nullifiers: makeClaimedLengthArray(MAX_NULLIFIERS_PER_CALL, makeNullifier, seed + 0x500),
|
|
346
346
|
privateCallRequests: makeClaimedLengthArray(MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, makePrivateCallRequest, seed + 0x600),
|
|
@@ -725,11 +725,11 @@ export async function makeContractInstanceFromClassId(classId, seed = 0, overrid
|
|
|
725
725
|
salt,
|
|
726
726
|
initializationHash,
|
|
727
727
|
deployer
|
|
728
|
-
],
|
|
728
|
+
], DomainSeparator.PARTIAL_ADDRESS);
|
|
729
729
|
const partialAddress = await poseidon2HashWithSeparator([
|
|
730
730
|
classId,
|
|
731
731
|
saltedInitializationHash
|
|
732
|
-
],
|
|
732
|
+
], DomainSeparator.PARTIAL_ADDRESS);
|
|
733
733
|
const address = await computeAddress(publicKeys, partialAddress);
|
|
734
734
|
return new SerializableContractInstance({
|
|
735
735
|
version: 1,
|
package/dest/tx/block_header.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var _computedKey;
|
|
2
|
-
import { BLOCK_HEADER_LENGTH,
|
|
2
|
+
import { BLOCK_HEADER_LENGTH, DomainSeparator } from '@aztec/constants';
|
|
3
3
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
4
4
|
import { randomInt } from '@aztec/foundation/crypto/random';
|
|
5
5
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
@@ -110,7 +110,7 @@ _computedKey = inspect.custom;
|
|
|
110
110
|
}
|
|
111
111
|
hash() {
|
|
112
112
|
if (!this._cachedHash) {
|
|
113
|
-
this._cachedHash = poseidon2HashWithSeparator(this.toFields(),
|
|
113
|
+
this._cachedHash = poseidon2HashWithSeparator(this.toFields(), DomainSeparator.BLOCK_HEADER_HASH).then((fr)=>new BlockHash(fr));
|
|
114
114
|
}
|
|
115
115
|
return this._cachedHash;
|
|
116
116
|
}
|
|
@@ -9,10 +9,10 @@ import { AztecAddress } from '../aztec-address/index.js';
|
|
|
9
9
|
import { GasFees } from '../gas/gas_fees.js';
|
|
10
10
|
import type { UInt64 } from '../types/index.js';
|
|
11
11
|
/**
|
|
12
|
-
* Global variables that are constant across the entire slot.
|
|
13
|
-
*
|
|
12
|
+
* Global variables that are constant across the entire checkpoint (slot).
|
|
13
|
+
* Excludes blockNumber since that varies per block within a checkpoint.
|
|
14
14
|
*/
|
|
15
|
-
export type CheckpointGlobalVariables = Omit<FieldsOf<GlobalVariables>, 'blockNumber'
|
|
15
|
+
export type CheckpointGlobalVariables = Omit<FieldsOf<GlobalVariables>, 'blockNumber'>;
|
|
16
16
|
/**
|
|
17
17
|
* Global variables of the L2 block.
|
|
18
18
|
*/
|
|
@@ -168,4 +168,4 @@ export declare class GlobalVariables {
|
|
|
168
168
|
[inspect.custom](): string;
|
|
169
169
|
equals(other: this): boolean;
|
|
170
170
|
}
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsX3ZhcmlhYmxlcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4L2dsb2JhbF92YXJpYWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBcUIsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0YsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFJWixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdDLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhEOzs7R0FHRztBQUNILE1BQU0sTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXZGOztHQUVHO0FBQ0gscUJBQWEsZUFBZTtJQUV4QixnQ0FBZ0M7SUFDekIsT0FBTyxFQUFFLEVBQUU7SUFDbEIsZ0NBQWdDO0lBQ3pCLE9BQU8sRUFBRSxFQUFFO0lBQ2xCLG9DQUFvQztJQUM3QixXQUFXLEVBQUUsV0FBVztJQUMvQixrQ0FBa0M7SUFDM0IsVUFBVSxFQUFFLFVBQVU7SUFDN0IsaUNBQWlDO0lBQzFCLFNBQVMsRUFBRSxNQUFNO0lBQ3hCLGlDQUFpQztJQUMxQixRQUFRLEVBQUUsVUFBVTtJQUMzQiwrQkFBK0I7SUFDeEIsWUFBWSxFQUFFLFlBQVk7SUFDakMsd0NBQXdDO0lBQ2pDLE9BQU8sRUFBRSxPQUFPO0lBaEJ6QjtJQUNFLGdDQUFnQztJQUN6QixPQUFPLEVBQUUsRUFBRTtJQUNsQixnQ0FBZ0M7SUFDekIsT0FBTyxFQUFFLEVBQUU7SUFDbEIsb0NBQW9DO0lBQzdCLFdBQVcsRUFBRSxXQUFXO0lBQy9CLGtDQUFrQztJQUMzQixVQUFVLEVBQUUsVUFBVTtJQUM3QixpQ0FBaUM7SUFDMUIsU0FBUyxFQUFFLE1BQU07SUFDeEIsaUNBQWlDO0lBQzFCLFFBQVEsRUFBRSxVQUFVO0lBQzNCLCtCQUErQjtJQUN4QixZQUFZLEVBQUUsWUFBWTtJQUNqQyx3Q0FBd0M7SUFDakMsT0FBTyxFQUFFLE9BQU8sRUFDckI7SUFFSixNQUFNLEtBQUssTUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWFoQjtJQUVELE9BQU8sSUFBSSxNQUFNLENBRWhCO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLGVBQWUsQ0FFOUQ7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsZUFBZSxDQVdoRDtJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQU0sR0FBRyxlQUFlLENBWTdFO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFlBQVksR0FBRyxlQUFlLENBWWhFO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxHQUFHLGVBQWUsQ0FhN0Q7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLHlGQVdqRDtJQUVELFFBQVEsNEJBV1A7SUFFRCxRQUFRLFNBUVA7SUFFRDs7O09BR0c7SUFDSCxjQUFjOzs7Ozs7TUFRYjtJQUVEOzs7O09BSUc7SUFDSCxNQUFNOzs7Ozs7Ozs7TUFXTDtJQUVELEtBQUssSUFBSSxlQUFlLENBRXZCO0lBRUQsT0FBTyxJQUFJLE9BQU8sQ0FXakI7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRSxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFNLEdBQUcsZUFBZSxDQVlqRjtJQUVELFNBQVM7Ozs7Ozs7Ozs7TUFZUjtJQUVELENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUVmO0lBRU0sTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsT0FBTyxDQVdsQztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global_variables.d.ts","sourceRoot":"","sources":["../../src/tx/global_variables.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAqB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7F,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EACL,YAAY,EACZ,WAAW,EAIZ,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"global_variables.d.ts","sourceRoot":"","sources":["../../src/tx/global_variables.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,4 +34,4 @@ export declare class ProtocolContracts {
|
|
|
34
34
|
derivedAddresses: any[];
|
|
35
35
|
}>;
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2xfY29udHJhY3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHgvcHJvdG9jb2xfY29udHJhY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUkzRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxLQUFLLEVBSVgsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxxQkFBYSxpQkFBaUI7SUFDVCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLE9BQU8sc0JBQXNCLENBQUM7SUFBdkYsWUFBbUIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLHNCQUFzQixDQUFDLEVBQUk7SUFFM0YsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixDQUFDLHFCQUU5QztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyx5S0FFbkQ7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxXQUFXLEdBQUcsaUJBQWlCLENBRy9EO0lBRUQsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUVmO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFlBQVksR0FBRyxpQkFBaUIsQ0FHbEU7SUFFRCxRQUFRLDRCQUVQO0lBRUQsTUFBTSxDQUFDLEtBQUssc0JBRVg7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsaUJBQWlCLENBT2xEO0lBRUQsT0FBTyxXQUVOO0lBRUQsSUFBSSxnQkFFSDtJQUVELE1BQU0sS0FBSyxNQUFNOzs7Ozs7OztPQVFoQjtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol_contracts.d.ts","sourceRoot":"","sources":["../../src/tx/protocol_contracts.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"protocol_contracts.d.ts","sourceRoot":"","sources":["../../src/tx/protocol_contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAI3E,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,KAAK,KAAK,EAIX,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,qBAAa,iBAAiB;IACT,gBAAgB,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,sBAAsB,CAAC;IAAvF,YAAmB,gBAAgB,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,sBAAsB,CAAC,EAAI;IAE3F,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,qBAE9C;IAED,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,yKAEnD;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,iBAAiB,CAG/D;IAED,QAAQ,IAAI,EAAE,EAAE,CAEf;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,iBAAiB,CAGlE;IAED,QAAQ,4BAEP;IAED,MAAM,CAAC,KAAK,sBAEX;IAED;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,iBAAiB,CAOlD;IAED,OAAO,WAEN;IAED,IAAI,gBAEH;IAED,MAAM,KAAK,MAAM;;;;;;;;OAQhB;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DomainSeparator, MAX_PROTOCOL_CONTRACTS } from '@aztec/constants';
|
|
2
2
|
import { makeTuple } from '@aztec/foundation/array';
|
|
3
3
|
import { arraySerializedSizeOfNonEmpty } from '@aztec/foundation/collection';
|
|
4
4
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
@@ -48,7 +48,7 @@ export class ProtocolContracts {
|
|
|
48
48
|
return arraySerializedSizeOfNonEmpty(this.derivedAddresses);
|
|
49
49
|
}
|
|
50
50
|
hash() {
|
|
51
|
-
return poseidon2HashWithSeparator(this.derivedAddresses,
|
|
51
|
+
return poseidon2HashWithSeparator(this.derivedAddresses, DomainSeparator.PROTOCOL_CONTRACTS);
|
|
52
52
|
}
|
|
53
53
|
static get schema() {
|
|
54
54
|
return z.object({
|
package/dest/tx/tx_request.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DomainSeparator, TX_REQUEST_LENGTH } from '@aztec/constants';
|
|
2
2
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { BufferReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize';
|
|
@@ -58,7 +58,7 @@ import { TxContext } from './tx_context.js';
|
|
|
58
58
|
return new TxRequest(reader.readObject(AztecAddress), Fr.fromBuffer(reader), reader.readObject(TxContext), reader.readObject(FunctionData), Fr.fromBuffer(reader));
|
|
59
59
|
}
|
|
60
60
|
hash() {
|
|
61
|
-
return poseidon2HashWithSeparator(this.toFields(),
|
|
61
|
+
return poseidon2HashWithSeparator(this.toFields(), DomainSeparator.TX_REQUEST);
|
|
62
62
|
}
|
|
63
63
|
static empty() {
|
|
64
64
|
return new TxRequest(AztecAddress.ZERO, Fr.zero(), TxContext.empty(), FunctionData.empty(), Fr.zero());
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/stdlib",
|
|
3
|
-
"version": "4.0.0-
|
|
3
|
+
"version": "4.0.0-rc.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"inherits": [
|
|
6
6
|
"../package.common.json",
|
|
@@ -90,14 +90,14 @@
|
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
92
|
"@aws-sdk/client-s3": "^3.892.0",
|
|
93
|
-
"@aztec/bb.js": "4.0.0-
|
|
94
|
-
"@aztec/blob-lib": "4.0.0-
|
|
95
|
-
"@aztec/constants": "4.0.0-
|
|
96
|
-
"@aztec/ethereum": "4.0.0-
|
|
97
|
-
"@aztec/foundation": "4.0.0-
|
|
98
|
-
"@aztec/l1-artifacts": "4.0.0-
|
|
99
|
-
"@aztec/noir-noirc_abi": "4.0.0-
|
|
100
|
-
"@aztec/validator-ha-signer": "4.0.0-
|
|
93
|
+
"@aztec/bb.js": "4.0.0-rc.1",
|
|
94
|
+
"@aztec/blob-lib": "4.0.0-rc.1",
|
|
95
|
+
"@aztec/constants": "4.0.0-rc.1",
|
|
96
|
+
"@aztec/ethereum": "4.0.0-rc.1",
|
|
97
|
+
"@aztec/foundation": "4.0.0-rc.1",
|
|
98
|
+
"@aztec/l1-artifacts": "4.0.0-rc.1",
|
|
99
|
+
"@aztec/noir-noirc_abi": "4.0.0-rc.1",
|
|
100
|
+
"@aztec/validator-ha-signer": "4.0.0-rc.1",
|
|
101
101
|
"@google-cloud/storage": "^7.15.0",
|
|
102
102
|
"axios": "^1.12.0",
|
|
103
103
|
"json-stringify-deterministic": "1.0.12",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DomainSeparator } from '@aztec/constants';
|
|
2
2
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
@@ -61,7 +61,7 @@ export class AuthWitness {
|
|
|
61
61
|
* @returns The inner hash for the witness
|
|
62
62
|
*/
|
|
63
63
|
export const computeInnerAuthWitHash = (args: Fr[]) => {
|
|
64
|
-
return poseidon2HashWithSeparator(args,
|
|
64
|
+
return poseidon2HashWithSeparator(args, DomainSeparator.AUTHWIT_INNER);
|
|
65
65
|
};
|
|
66
66
|
|
|
67
67
|
/**
|
|
@@ -77,5 +77,5 @@ export const computeInnerAuthWitHash = (args: Fr[]) => {
|
|
|
77
77
|
* @returns The outer hash for the witness
|
|
78
78
|
*/
|
|
79
79
|
export const computeOuterAuthWitHash = (consumer: AztecAddress, chainId: Fr, version: Fr, innerHash: Fr) => {
|
|
80
|
-
return poseidon2HashWithSeparator([consumer.toField(), chainId, version, innerHash],
|
|
80
|
+
return poseidon2HashWithSeparator([consumer.toField(), chainId, version, innerHash], DomainSeparator.AUTHWIT_OUTER);
|
|
81
81
|
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { CheckpointNumberSchema, IndexWithinCheckpointSchema } from '@aztec/foundation/branded-types';
|
|
2
|
+
import type { CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
|
|
3
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import { schemas } from '@aztec/foundation/schemas';
|
|
5
|
+
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
|
|
8
|
+
import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js';
|
|
9
|
+
import { BlockHeader } from '../tx/block_header.js';
|
|
10
|
+
|
|
11
|
+
/** L2Block metadata. Equivalent to L2Block but without block body containing tx data. */
|
|
12
|
+
export type BlockData = {
|
|
13
|
+
header: BlockHeader;
|
|
14
|
+
archive: AppendOnlyTreeSnapshot;
|
|
15
|
+
blockHash: Fr;
|
|
16
|
+
checkpointNumber: CheckpointNumber;
|
|
17
|
+
indexWithinCheckpoint: IndexWithinCheckpoint;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const BlockDataSchema = z.object({
|
|
21
|
+
header: BlockHeader.schema,
|
|
22
|
+
archive: AppendOnlyTreeSnapshot.schema,
|
|
23
|
+
blockHash: schemas.Fr,
|
|
24
|
+
checkpointNumber: CheckpointNumberSchema,
|
|
25
|
+
indexWithinCheckpoint: IndexWithinCheckpointSchema,
|
|
26
|
+
});
|
package/src/block/index.ts
CHANGED
|
@@ -13,6 +13,7 @@ import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
|
13
13
|
import { z } from 'zod';
|
|
14
14
|
|
|
15
15
|
import type { Checkpoint } from '../checkpoint/checkpoint.js';
|
|
16
|
+
import type { CheckpointData } from '../checkpoint/checkpoint_data.js';
|
|
16
17
|
import type { PublishedCheckpoint } from '../checkpoint/published_checkpoint.js';
|
|
17
18
|
import type { L1RollupConstants } from '../epoch-helpers/index.js';
|
|
18
19
|
import { CheckpointHeader } from '../rollup/checkpoint_header.js';
|
|
@@ -20,6 +21,7 @@ import type { BlockHeader } from '../tx/block_header.js';
|
|
|
20
21
|
import type { IndexedTxEffect } from '../tx/indexed_tx_effect.js';
|
|
21
22
|
import type { TxHash } from '../tx/tx_hash.js';
|
|
22
23
|
import type { TxReceipt } from '../tx/tx_receipt.js';
|
|
24
|
+
import type { BlockData } from './block_data.js';
|
|
23
25
|
import type { BlockHash } from './block_hash.js';
|
|
24
26
|
import type { CheckpointedL2Block } from './checkpointed_l2_block.js';
|
|
25
27
|
import type { L2Block } from './l2_block.js';
|
|
@@ -98,6 +100,12 @@ export interface L2BlockSource {
|
|
|
98
100
|
*/
|
|
99
101
|
getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
|
|
100
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Gets lightweight checkpoint metadata for a given epoch, without fetching full block data.
|
|
105
|
+
* @param epochNumber - Epoch for which we want checkpoint data
|
|
106
|
+
*/
|
|
107
|
+
getCheckpointsDataForEpoch(epochNumber: EpochNumber): Promise<CheckpointData[]>;
|
|
108
|
+
|
|
101
109
|
/**
|
|
102
110
|
* Gets a block header by its hash.
|
|
103
111
|
* @param blockHash - The block hash to retrieve.
|
|
@@ -112,6 +120,20 @@ export interface L2BlockSource {
|
|
|
112
120
|
*/
|
|
113
121
|
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
114
122
|
|
|
123
|
+
/**
|
|
124
|
+
* Gets block metadata (without tx data) by block number.
|
|
125
|
+
* @param number - The block number to retrieve.
|
|
126
|
+
* @returns The requested block data (or undefined if not found).
|
|
127
|
+
*/
|
|
128
|
+
getBlockData(number: BlockNumber): Promise<BlockData | undefined>;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Gets block metadata (without tx data) by archive root.
|
|
132
|
+
* @param archive - The archive root to retrieve.
|
|
133
|
+
* @returns The requested block data (or undefined if not found).
|
|
134
|
+
*/
|
|
135
|
+
getBlockDataByArchive(archive: Fr): Promise<BlockData | undefined>;
|
|
136
|
+
|
|
115
137
|
/**
|
|
116
138
|
* Gets an L2 block by block number.
|
|
117
139
|
* @param number - The block number to return.
|
|
@@ -94,9 +94,11 @@ export class Checkpoint {
|
|
|
94
94
|
return this.header.hash();
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
/**
|
|
98
|
+
* Returns the out hash computed from all l2-to-l1 messages in this checkpoint.
|
|
99
|
+
* Note: This value is different from the out hash in the header, which is the **accumulated** out hash over all
|
|
100
|
+
* checkpoints up to and including this one in the epoch.
|
|
101
|
+
*/
|
|
100
102
|
public getCheckpointOutHash(): Fr {
|
|
101
103
|
const msgs = this.blocks.map(block => block.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs));
|
|
102
104
|
return computeCheckpointOutHash(msgs);
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BlockNumber,
|
|
3
|
+
BlockNumberSchema,
|
|
4
|
+
CheckpointNumber,
|
|
5
|
+
CheckpointNumberSchema,
|
|
6
|
+
} from '@aztec/foundation/branded-types';
|
|
7
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
8
|
+
import { schemas } from '@aztec/foundation/schemas';
|
|
9
|
+
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
|
|
12
|
+
import { CommitteeAttestation } from '../block/proposal/committee_attestation.js';
|
|
13
|
+
import { CheckpointHeader } from '../rollup/checkpoint_header.js';
|
|
14
|
+
import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js';
|
|
15
|
+
import { L1PublishedData } from './published_checkpoint.js';
|
|
16
|
+
|
|
17
|
+
/** Lightweight checkpoint metadata without full block data. */
|
|
18
|
+
export type CheckpointData = {
|
|
19
|
+
checkpointNumber: CheckpointNumber;
|
|
20
|
+
header: CheckpointHeader;
|
|
21
|
+
archive: AppendOnlyTreeSnapshot;
|
|
22
|
+
checkpointOutHash: Fr;
|
|
23
|
+
startBlock: BlockNumber;
|
|
24
|
+
blockCount: number;
|
|
25
|
+
attestations: CommitteeAttestation[];
|
|
26
|
+
l1: L1PublishedData;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const CheckpointDataSchema = z
|
|
30
|
+
.object({
|
|
31
|
+
checkpointNumber: CheckpointNumberSchema,
|
|
32
|
+
header: CheckpointHeader.schema,
|
|
33
|
+
archive: AppendOnlyTreeSnapshot.schema,
|
|
34
|
+
checkpointOutHash: schemas.Fr,
|
|
35
|
+
startBlock: BlockNumberSchema,
|
|
36
|
+
blockCount: schemas.Integer,
|
|
37
|
+
attestations: z.array(CommitteeAttestation.schema),
|
|
38
|
+
l1: L1PublishedData.schema,
|
|
39
|
+
})
|
|
40
|
+
.transform(
|
|
41
|
+
(obj): CheckpointData => ({
|
|
42
|
+
checkpointNumber: obj.checkpointNumber,
|
|
43
|
+
header: obj.header,
|
|
44
|
+
archive: obj.archive,
|
|
45
|
+
checkpointOutHash: obj.checkpointOutHash,
|
|
46
|
+
startBlock: obj.startBlock,
|
|
47
|
+
blockCount: obj.blockCount,
|
|
48
|
+
attestations: obj.attestations,
|
|
49
|
+
l1: obj.l1,
|
|
50
|
+
}),
|
|
51
|
+
);
|
package/src/checkpoint/index.ts
CHANGED
|
@@ -55,9 +55,11 @@ export class L1PublishedData {
|
|
|
55
55
|
|
|
56
56
|
export class PublishedCheckpoint {
|
|
57
57
|
constructor(
|
|
58
|
+
/** The checkpoint itself. */
|
|
58
59
|
public checkpoint: Checkpoint,
|
|
60
|
+
/** Info on when this checkpoint was published on L1. */
|
|
59
61
|
public l1: L1PublishedData,
|
|
60
|
-
|
|
62
|
+
/** The attestations for the last block in the checkpoint. */
|
|
61
63
|
public attestations: CommitteeAttestation[],
|
|
62
64
|
) {}
|
|
63
65
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DomainSeparator } from '@aztec/constants';
|
|
2
2
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
|
|
@@ -44,7 +44,7 @@ export async function computePartialAddress(
|
|
|
44
44
|
|
|
45
45
|
return poseidon2HashWithSeparator(
|
|
46
46
|
[instance.originalContractClassId, saltedInitializationHash],
|
|
47
|
-
|
|
47
|
+
DomainSeparator.PARTIAL_ADDRESS,
|
|
48
48
|
);
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -57,7 +57,7 @@ export function computeSaltedInitializationHash(
|
|
|
57
57
|
): Promise<Fr> {
|
|
58
58
|
return poseidon2HashWithSeparator(
|
|
59
59
|
[instance.salt, instance.initializationHash, instance.deployer],
|
|
60
|
-
|
|
60
|
+
DomainSeparator.PARTIAL_ADDRESS,
|
|
61
61
|
);
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -87,5 +87,5 @@ export async function computeInitializationHashFromEncodedArgs(
|
|
|
87
87
|
encodedArgs: Fr[],
|
|
88
88
|
): Promise<Fr> {
|
|
89
89
|
const argsHash = await computeVarArgsHash(encodedArgs);
|
|
90
|
-
return poseidon2HashWithSeparator([initFn, argsHash],
|
|
90
|
+
return poseidon2HashWithSeparator([initFn, argsHash], DomainSeparator.INITIALIZER);
|
|
91
91
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DomainSeparator, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS } from '@aztec/constants';
|
|
2
2
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
|
|
@@ -40,7 +40,7 @@ export async function computeContractClassIdWithPreimage(
|
|
|
40
40
|
: await computePublicBytecodeCommitment(contractClass.packedBytecode);
|
|
41
41
|
const id = await poseidon2HashWithSeparator(
|
|
42
42
|
[artifactHash, privateFunctionsRoot, publicBytecodeCommitment],
|
|
43
|
-
|
|
43
|
+
DomainSeparator.CONTRACT_CLASS_ID,
|
|
44
44
|
);
|
|
45
45
|
return { id, artifactHash, privateFunctionsRoot, publicBytecodeCommitment };
|
|
46
46
|
}
|
|
@@ -72,6 +72,6 @@ export async function computePublicBytecodeCommitment(packedBytecode: Buffer) {
|
|
|
72
72
|
|
|
73
73
|
// NOTE: hash the bytecode here only up to the actual length of the bytecode.
|
|
74
74
|
// We do not hash the entire max bytecode length!
|
|
75
|
-
const sep = BigInt(
|
|
75
|
+
const sep = BigInt(DomainSeparator.PUBLIC_BYTECODE) + (bytecodeLengthAsField.toBigInt() << 32n);
|
|
76
76
|
return await poseidon2HashWithSeparator(bytecodeAsFields.slice(0, bytecodeLength), new Fr(sep).toNumber());
|
|
77
77
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DomainSeparator, FUNCTION_TREE_HEIGHT } from '@aztec/constants';
|
|
2
2
|
import { poseidon2Hash, poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { type MerkleTree, MerkleTreeCalculator } from '@aztec/foundation/trees';
|
|
@@ -31,7 +31,7 @@ function computePrivateFunctionLeaves(fns: PrivateFunction[]): Promise<Buffer[]>
|
|
|
31
31
|
|
|
32
32
|
/** Returns the leaf for a given private function. */
|
|
33
33
|
export async function computePrivateFunctionLeaf(fn: PrivateFunction): Promise<Buffer> {
|
|
34
|
-
return (await poseidon2HashWithSeparator([fn.selector, fn.vkHash],
|
|
34
|
+
return (await poseidon2HashWithSeparator([fn.selector, fn.vkHash], DomainSeparator.PRIVATE_FUNCTION_LEAF)).toBuffer();
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
async function getPrivateFunctionTreeCalculator(): Promise<MerkleTreeCalculator> {
|
package/src/file-store/local.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import { access, mkdir, readFile, writeFile } from 'fs/promises';
|
|
2
2
|
import { dirname, resolve } from 'path';
|
|
3
|
+
import { promisify } from 'util';
|
|
4
|
+
import { gunzip as gunzipCb, gzip as gzipCb } from 'zlib';
|
|
3
5
|
|
|
4
|
-
import type { FileStore } from './interface.js';
|
|
6
|
+
import type { FileStore, FileStoreSaveOptions } from './interface.js';
|
|
7
|
+
|
|
8
|
+
const gzip = promisify(gzipCb);
|
|
9
|
+
const gunzip = promisify(gunzipCb);
|
|
5
10
|
|
|
6
11
|
export class LocalFileStore implements FileStore {
|
|
7
12
|
constructor(private readonly basePath: string) {}
|
|
8
13
|
|
|
9
|
-
public async save(path: string, data: Buffer): Promise<string> {
|
|
14
|
+
public async save(path: string, data: Buffer, opts?: FileStoreSaveOptions): Promise<string> {
|
|
10
15
|
const fullPath = this.getFullPath(path);
|
|
11
16
|
await mkdir(dirname(fullPath), { recursive: true });
|
|
12
|
-
await
|
|
17
|
+
const toWrite = opts?.compress ? await gzip(data) : data;
|
|
18
|
+
await writeFile(fullPath, toWrite);
|
|
13
19
|
return `file://${fullPath}`;
|
|
14
20
|
}
|
|
15
21
|
|
|
@@ -18,9 +24,13 @@ export class LocalFileStore implements FileStore {
|
|
|
18
24
|
return this.save(destPath, data);
|
|
19
25
|
}
|
|
20
26
|
|
|
21
|
-
public read(pathOrUrlStr: string): Promise<Buffer> {
|
|
27
|
+
public async read(pathOrUrlStr: string): Promise<Buffer> {
|
|
22
28
|
const fullPath = this.getFullPath(pathOrUrlStr);
|
|
23
|
-
|
|
29
|
+
const data = await readFile(fullPath);
|
|
30
|
+
if (data.length >= 2 && data[0] === 0x1f && data[1] === 0x8b) {
|
|
31
|
+
return await gunzip(data);
|
|
32
|
+
}
|
|
33
|
+
return data;
|
|
24
34
|
}
|
|
25
35
|
|
|
26
36
|
public async download(pathOrUrlStr: string, destPath: string): Promise<void> {
|
package/src/file-store/s3.ts
CHANGED
|
@@ -13,10 +13,14 @@ import { tmpdir } from 'os';
|
|
|
13
13
|
import { basename, dirname, join } from 'path';
|
|
14
14
|
import { Readable } from 'stream';
|
|
15
15
|
import { pipeline } from 'stream/promises';
|
|
16
|
-
import {
|
|
16
|
+
import { promisify } from 'util';
|
|
17
|
+
import { createGzip, gunzip as gunzipCb, gzip as gzipCb } from 'zlib';
|
|
17
18
|
|
|
18
19
|
import type { FileStore, FileStoreSaveOptions } from './interface.js';
|
|
19
20
|
|
|
21
|
+
const gzip = promisify(gzipCb);
|
|
22
|
+
const gunzip = promisify(gunzipCb);
|
|
23
|
+
|
|
20
24
|
function normalizeBasePath(path: string): string {
|
|
21
25
|
return path?.replace(/^\/+|\/+$/g, '') ?? '';
|
|
22
26
|
}
|
|
@@ -52,7 +56,7 @@ export class S3FileStore implements FileStore {
|
|
|
52
56
|
const key = this.getFullPath(path);
|
|
53
57
|
const shouldCompress = !!opts.compress;
|
|
54
58
|
|
|
55
|
-
const body = shouldCompress ?
|
|
59
|
+
const body = shouldCompress ? await gzip(data) : data;
|
|
56
60
|
const contentLength = body.length;
|
|
57
61
|
const contentType = this.detectContentType(key, shouldCompress);
|
|
58
62
|
const put = new PutObjectCommand({
|
|
@@ -60,6 +64,7 @@ export class S3FileStore implements FileStore {
|
|
|
60
64
|
Key: key,
|
|
61
65
|
Body: body,
|
|
62
66
|
ContentType: contentType,
|
|
67
|
+
ContentEncoding: shouldCompress ? 'gzip' : undefined,
|
|
63
68
|
CacheControl: opts.metadata?.['Cache-control'],
|
|
64
69
|
Metadata: this.extractUserMetadata(opts.metadata),
|
|
65
70
|
ContentLength: contentLength,
|
|
@@ -134,7 +139,11 @@ export class S3FileStore implements FileStore {
|
|
|
134
139
|
for await (const chunk of stream) {
|
|
135
140
|
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
136
141
|
}
|
|
137
|
-
|
|
142
|
+
const buffer = Buffer.concat(chunks);
|
|
143
|
+
if (out.ContentEncoding === 'gzip') {
|
|
144
|
+
return await gunzip(buffer);
|
|
145
|
+
}
|
|
146
|
+
return buffer;
|
|
138
147
|
}
|
|
139
148
|
|
|
140
149
|
public async download(pathOrUrlStr: string, destPath: string): Promise<void> {
|