@aztec-labs/stdlib 6.0.0-rc.2 → 6.0.0-rc.3

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.
@@ -8,7 +8,7 @@ import type { PartialAddress } from './partial_address.js';
8
8
  * ```
9
9
  * salted_initialization_hash = poseidon2(DOM_SEP__SALTED_INITIALIZATION_HASH, [salt, initialization_hash, deployer, immutables_hash])
10
10
  * partial_address = poseidon2(DOM_SEP__PARTIAL_ADDRESS, [contract_class_id, salted_initialization_hash])
11
- * address = ((poseidon2(DOM_SEP__CONTRACT_ADDRESS_V2, [public_keys_hash, partial_address]) * G) + ivpk_m).x <- the x-coordinate of the address point
11
+ * address = ((poseidon2(DOM_SEP__CONTRACT_ADDRESS_V3, [public_keys_hash, partial_address]) * G) + ivpk_m).x <- the x-coordinate of the address point
12
12
  * ```
13
13
  * @param instance - A contract instance for which to calculate the deployment address.
14
14
  */
@@ -10,7 +10,7 @@ import { computeAddress } from '../keys/index.js';
10
10
  * ```
11
11
  * salted_initialization_hash = poseidon2(DOM_SEP__SALTED_INITIALIZATION_HASH, [salt, initialization_hash, deployer, immutables_hash])
12
12
  * partial_address = poseidon2(DOM_SEP__PARTIAL_ADDRESS, [contract_class_id, salted_initialization_hash])
13
- * address = ((poseidon2(DOM_SEP__CONTRACT_ADDRESS_V2, [public_keys_hash, partial_address]) * G) + ivpk_m).x <- the x-coordinate of the address point
13
+ * address = ((poseidon2(DOM_SEP__CONTRACT_ADDRESS_V3, [public_keys_hash, partial_address]) * G) + ivpk_m).x <- the x-coordinate of the address point
14
14
  * ```
15
15
  * @param instance - A contract instance for which to calculate the deployment address.
16
16
  */ export async function computeContractAddressFromInstance(instance) {
@@ -3,8 +3,8 @@
3
3
  * Used to predict worst-case min fees over a future window of L2 slots.
4
4
  */
5
5
  export declare const MINIMUM_CONGESTION_MULTIPLIER = 1000000000n;
6
- export declare const L1_GAS_PER_CHECKPOINT_PROPOSED = 500000n;
7
- export declare const L1_GAS_PER_EPOCH_VERIFIED = 4000000n;
6
+ export declare const L1_GAS_PER_CHECKPOINT_PROPOSED = 520000n;
7
+ export declare const L1_GAS_PER_EPOCH_VERIFIED = 2500000n;
8
8
  export declare const BLOBS_PER_CHECKPOINT = 3n;
9
9
  export declare const BLOB_GAS_PER_BLOB: bigint;
10
10
  export declare const MAGIC_CONGESTION_VALUE_MULTIPLIER = 854700854n;
@@ -3,8 +3,8 @@
3
3
  * Used to predict worst-case min fees over a future window of L2 slots.
4
4
  */ // Constants matching FeeLib.sol
5
5
  export const MINIMUM_CONGESTION_MULTIPLIER = 1_000_000_000n;
6
- export const L1_GAS_PER_CHECKPOINT_PROPOSED = 500_000n;
7
- export const L1_GAS_PER_EPOCH_VERIFIED = 4_000_000n;
6
+ export const L1_GAS_PER_CHECKPOINT_PROPOSED = 520_000n;
7
+ export const L1_GAS_PER_EPOCH_VERIFIED = 2_500_000n;
8
8
  export const BLOBS_PER_CHECKPOINT = 3n;
9
9
  export const BLOB_GAS_PER_BLOB = 2n ** 17n;
10
10
  export const MAGIC_CONGESTION_VALUE_MULTIPLIER = 854_700_854n;
@@ -59,11 +59,11 @@ export function computePreaddress(publicKeysHash, partialAddress) {
59
59
  return poseidon2HashWithSeparator([
60
60
  publicKeysHash,
61
61
  partialAddress
62
- ], DomainSeparator.CONTRACT_ADDRESS_V2);
62
+ ], DomainSeparator.CONTRACT_ADDRESS_V3);
63
63
  }
64
64
  export async function computeAddress(publicKeys, partialAddress) {
65
65
  // Given public keys and a partial address, we can compute our address in the following steps.
66
- // 1. preaddress = poseidon2([publicKeysHash, partialAddress], DomainSeparator.CONTRACT_ADDRESS_V2);
66
+ // 1. preaddress = poseidon2([publicKeysHash, partialAddress], DomainSeparator.CONTRACT_ADDRESS_V3);
67
67
  // 2. addressPoint = (preaddress * G) + ivpk_m
68
68
  // 3. address = addressPoint.x
69
69
  const preaddress = await computePreaddress(await publicKeys.hash(), partialAddress);
@@ -61,10 +61,29 @@ export interface UnsiloedMessageNullifier {
61
61
  * in the nullifier tree.
62
62
  */
63
63
  export declare function computeFeeJuiceMessageNullifier(messageHash: Fr, secret: Fr): Promise<Fr>;
64
+ /** The outcome of {@link lookUpL1ToL2MessageWitness}. */
65
+ export type L1ToL2MessageWitnessLookup =
66
+ /** The message is in the tree and, if a nullifier was given, has not been consumed. */
67
+ {
68
+ type: 'found';
69
+ witness: [bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>];
70
+ }
71
+ /** The message is not in the tree. */
72
+ | {
73
+ type: 'missing';
74
+ }
75
+ /** A nullifier was given and the message has been consumed. */
76
+ | {
77
+ type: 'nullified';
78
+ };
79
+ /**
80
+ * Looks up the membership witness of an L1 to L2 message in the L1 to L2 message tree at `referenceBlock`.
81
+ */
82
+ export declare function lookUpL1ToL2MessageWitness(node: AztecNode, messageHash: Fr, unsiloedNullifier: UnsiloedMessageNullifier | undefined, referenceBlock: BlockParameter): Promise<L1ToL2MessageWitnessLookup>;
64
83
  /**
65
84
  * Fetches the membership witness of an L1 to L2 message. When `unsiloedNullifier` is provided, the message is
66
85
  * additionally required to be un-nullified.
67
86
  */
68
87
  export declare function getL1ToL2MessageWitness(node: AztecNode, messageHash: Fr, unsiloedNullifier?: UnsiloedMessageNullifier, referenceBlock?: BlockParameter): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>]>;
69
88
  export declare function getNonNullifiedL1ToL2MessageWitness(node: AztecNode, contractAddress: AztecAddress, messageHash: Fr, secret: Fr, referenceBlock?: BlockParameter): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>]>;
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lc3NhZ2luZy9sMV90b19sMl9tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsS0FBSyx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3ZGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFxQixNQUFNLGtDQUFrQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUzRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxxQkFBYSxhQUFhO0lBRXRCLHVDQUF1QzthQUN2QixNQUFNLEVBQUUsT0FBTztJQUMvQiwwQ0FBMEM7YUFDMUIsU0FBUyxFQUFFLE9BQU87SUFDbEMsMkJBQTJCO2FBQ1gsT0FBTyxFQUFFLEVBQUU7SUFDM0IsdUNBQXVDO2FBQ3ZCLFVBQVUsRUFBRSxFQUFFO0lBQzlCLGdEQUFnRDthQUNoQyxLQUFLLEVBQUUsRUFBRTtJQVYzQjtJQUNFLHVDQUF1QztJQUN2QixNQUFNLEVBQUUsT0FBTztJQUMvQiwwQ0FBMEM7SUFDMUIsU0FBUyxFQUFFLE9BQU87SUFDbEMsMkJBQTJCO0lBQ1gsT0FBTyxFQUFFLEVBQUU7SUFDM0IsdUNBQXVDO0lBQ3ZCLFVBQVUsRUFBRSxFQUFFO0lBQzlCLGdEQUFnRDtJQUNoQyxLQUFLLEVBQUUsRUFBRSxFQUN2QjtJQUVKOzs7T0FHRztJQUNILFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FFZjtJQUVELFFBQVEsSUFBSSxNQUFNLENBRWpCO0lBRUQsSUFBSSxJQUFJLEVBQUUsQ0FFVDtJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsYUFBYSxDQVE5RDtJQUVELFFBQVEsSUFBSSxNQUFNLENBRWpCO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLGFBQWEsQ0FHN0M7SUFFRCxNQUFNLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FFNUI7SUFFRCxPQUFhLE1BQU0sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLENBRTVDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sV0FBVyx3QkFBd0I7SUFDdkMsZUFBZSxFQUFFLFlBQVksQ0FBQztJQUM5QixTQUFTLEVBQUUsRUFBRSxDQUFDO0NBQ2Y7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQWdCLCtCQUErQixDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBRXhGO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLHVCQUF1QixDQUMzQyxJQUFJLEVBQUUsU0FBUyxFQUNmLFdBQVcsRUFBRSxFQUFFLEVBQ2YsaUJBQWlCLENBQUMsRUFBRSx3QkFBd0IsRUFDNUMsY0FBYyxHQUFFLGNBQXlCLEdBQ3hDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FvQmpFO0FBR0Qsd0JBQXNCLG1DQUFtQyxDQUN2RCxJQUFJLEVBQUUsU0FBUyxFQUNmLGVBQWUsRUFBRSxZQUFZLEVBQzdCLFdBQVcsRUFBRSxFQUFFLEVBQ2YsTUFBTSxFQUFFLEVBQUUsRUFDVixjQUFjLEdBQUUsY0FBeUIsR0FDeEMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxPQUFPLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUdqRSJ9
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lc3NhZ2luZy9sMV90b19sMl9tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsS0FBSyx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3ZGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFxQixNQUFNLGtDQUFrQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUzRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxxQkFBYSxhQUFhO0lBRXRCLHVDQUF1QzthQUN2QixNQUFNLEVBQUUsT0FBTztJQUMvQiwwQ0FBMEM7YUFDMUIsU0FBUyxFQUFFLE9BQU87SUFDbEMsMkJBQTJCO2FBQ1gsT0FBTyxFQUFFLEVBQUU7SUFDM0IsdUNBQXVDO2FBQ3ZCLFVBQVUsRUFBRSxFQUFFO0lBQzlCLGdEQUFnRDthQUNoQyxLQUFLLEVBQUUsRUFBRTtJQVYzQjtJQUNFLHVDQUF1QztJQUN2QixNQUFNLEVBQUUsT0FBTztJQUMvQiwwQ0FBMEM7SUFDMUIsU0FBUyxFQUFFLE9BQU87SUFDbEMsMkJBQTJCO0lBQ1gsT0FBTyxFQUFFLEVBQUU7SUFDM0IsdUNBQXVDO0lBQ3ZCLFVBQVUsRUFBRSxFQUFFO0lBQzlCLGdEQUFnRDtJQUNoQyxLQUFLLEVBQUUsRUFBRSxFQUN2QjtJQUVKOzs7T0FHRztJQUNILFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FFZjtJQUVELFFBQVEsSUFBSSxNQUFNLENBRWpCO0lBRUQsSUFBSSxJQUFJLEVBQUUsQ0FFVDtJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsYUFBYSxDQVE5RDtJQUVELFFBQVEsSUFBSSxNQUFNLENBRWpCO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLGFBQWEsQ0FHN0M7SUFFRCxNQUFNLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FFNUI7SUFFRCxPQUFhLE1BQU0sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLENBRTVDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sV0FBVyx3QkFBd0I7SUFDdkMsZUFBZSxFQUFFLFlBQVksQ0FBQztJQUM5QixTQUFTLEVBQUUsRUFBRSxDQUFDO0NBQ2Y7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQWdCLCtCQUErQixDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBRXhGO0FBRUQseURBQXlEO0FBQ3pELE1BQU0sTUFBTSwwQkFBMEI7QUFDcEMsdUZBQXVGO0FBQ3JGO0lBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztJQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDLENBQUE7Q0FBRTtBQUNwRixzQ0FBc0M7R0FDcEM7SUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFBO0NBQUU7QUFDckIsK0RBQStEO0dBQzdEO0lBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQTtDQUFFLENBQUM7QUFFMUI7O0dBRUc7QUFDSCx3QkFBc0IsMEJBQTBCLENBQzlDLElBQUksRUFBRSxTQUFTLEVBQ2YsV0FBVyxFQUFFLEVBQUUsRUFDZixpQkFBaUIsRUFBRSx3QkFBd0IsR0FBRyxTQUFTLEVBQ3ZELGNBQWMsRUFBRSxjQUFjLEdBQzdCLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQW1CckM7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsdUJBQXVCLENBQzNDLElBQUksRUFBRSxTQUFTLEVBQ2YsV0FBVyxFQUFFLEVBQUUsRUFDZixpQkFBaUIsQ0FBQyxFQUFFLHdCQUF3QixFQUM1QyxjQUFjLEdBQUUsY0FBeUIsR0FDeEMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxPQUFPLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQVVqRTtBQUdELHdCQUFzQixtQ0FBbUMsQ0FDdkQsSUFBSSxFQUFFLFNBQVMsRUFDZixlQUFlLEVBQUUsWUFBWSxFQUM3QixXQUFXLEVBQUUsRUFBRSxFQUNmLE1BQU0sRUFBRSxFQUFFLEVBQ1YsY0FBYyxHQUFFLGNBQXlCLEdBQ3hDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FHakUifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"l1_to_l2_message.d.ts","sourceRoot":"","sources":["../../src/messaging/l1_to_l2_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAGvF,OAAO,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AACzD,OAAO,EAAE,YAAY,EAAqB,MAAM,kCAAkC,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC;;GAEG;AACH,qBAAa,aAAa;IAEtB,uCAAuC;aACvB,MAAM,EAAE,OAAO;IAC/B,0CAA0C;aAC1B,SAAS,EAAE,OAAO;IAClC,2BAA2B;aACX,OAAO,EAAE,EAAE;IAC3B,uCAAuC;aACvB,UAAU,EAAE,EAAE;IAC9B,gDAAgD;aAChC,KAAK,EAAE,EAAE;IAV3B;IACE,uCAAuC;IACvB,MAAM,EAAE,OAAO;IAC/B,0CAA0C;IAC1B,SAAS,EAAE,OAAO;IAClC,2BAA2B;IACX,OAAO,EAAE,EAAE;IAC3B,uCAAuC;IACvB,UAAU,EAAE,EAAE;IAC9B,gDAAgD;IAChC,KAAK,EAAE,EAAE,EACvB;IAEJ;;;OAGG;IACH,QAAQ,IAAI,EAAE,EAAE,CAEf;IAED,QAAQ,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,EAAE,CAET;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,aAAa,CAQ9D;IAED,QAAQ,IAAI,MAAM,CAEjB;IAED,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAG7C;IAED,MAAM,CAAC,KAAK,IAAI,aAAa,CAE5B;IAED,OAAa,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,CAE5C;CACF;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,YAAY,CAAC;IAC9B,SAAS,EAAE,EAAE,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAExF;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,EAAE,EACf,iBAAiB,CAAC,EAAE,wBAAwB,EAC5C,cAAc,GAAE,cAAyB,GACxC,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAoBjE;AAGD,wBAAsB,mCAAmC,CACvD,IAAI,EAAE,SAAS,EACf,eAAe,EAAE,YAAY,EAC7B,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,EAAE,EACV,cAAc,GAAE,cAAyB,GACxC,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAGjE"}
1
+ {"version":3,"file":"l1_to_l2_message.d.ts","sourceRoot":"","sources":["../../src/messaging/l1_to_l2_message.ts"],"names":[],"mappings":"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"}
@@ -78,23 +78,45 @@ import { L2Actor } from './l2_actor.js';
78
78
  ], DomainSeparator.MESSAGE_NULLIFIER);
79
79
  }
80
80
  /**
81
- * Fetches the membership witness of an L1 to L2 message. When `unsiloedNullifier` is provided, the message is
82
- * additionally required to be un-nullified.
83
- */ export async function getL1ToL2MessageWitness(node, messageHash, unsiloedNullifier, referenceBlock = 'latest') {
81
+ * Looks up the membership witness of an L1 to L2 message in the L1 to L2 message tree at `referenceBlock`.
82
+ */ export async function lookUpL1ToL2MessageWitness(node, messageHash, unsiloedNullifier, referenceBlock) {
84
83
  // Both requests are dispatched before awaiting so they run concurrently.
85
84
  const l1ToL2ResponsePromise = node.getL1ToL2MessageMembershipWitness(referenceBlock, messageHash);
86
85
  const nullifierResponsePromise = unsiloedNullifier ? siloNullifier(unsiloedNullifier.contractAddress, unsiloedNullifier.nullifier).then((siloed)=>node.findLeavesIndexes(referenceBlock, MerkleTreeId.NULLIFIER_TREE, [
87
86
  siloed
88
87
  ])) : undefined;
89
- const l1ToL2Response = await l1ToL2ResponsePromise;
88
+ const [l1ToL2Response, nullifierResponse] = await Promise.all([
89
+ l1ToL2ResponsePromise,
90
+ nullifierResponsePromise
91
+ ]);
90
92
  if (!l1ToL2Response) {
91
- throw new Error(`No L1 to L2 message found for message hash ${messageHash.toString()}`);
93
+ return {
94
+ type: 'missing'
95
+ };
92
96
  }
93
- const nullifierResponse = await nullifierResponsePromise;
94
97
  if (nullifierResponse?.[0] !== undefined) {
95
- throw new Error(`No non-nullified L1 to L2 message found for message hash ${messageHash.toString()}`);
98
+ return {
99
+ type: 'nullified'
100
+ };
101
+ }
102
+ return {
103
+ type: 'found',
104
+ witness: l1ToL2Response
105
+ };
106
+ }
107
+ /**
108
+ * Fetches the membership witness of an L1 to L2 message. When `unsiloedNullifier` is provided, the message is
109
+ * additionally required to be un-nullified.
110
+ */ export async function getL1ToL2MessageWitness(node, messageHash, unsiloedNullifier, referenceBlock = 'latest') {
111
+ const lookup = await lookUpL1ToL2MessageWitness(node, messageHash, unsiloedNullifier, referenceBlock);
112
+ switch(lookup.type){
113
+ case 'missing':
114
+ throw new Error(`No L1 to L2 message found for message hash ${messageHash.toString()}`);
115
+ case 'nullified':
116
+ throw new Error(`No non-nullified L1 to L2 message found for message hash ${messageHash.toString()}`);
117
+ case 'found':
118
+ return lookup.witness;
96
119
  }
97
- return l1ToL2Response;
98
120
  }
99
121
  // This functionality is not on the node because we do not want to pass the node the secret, and give the node the ability to derive a valid nullifer for an L1 to L2 message.
100
122
  export async function getNonNullifiedL1ToL2MessageWitness(node, contractAddress, messageHash, secret, referenceBlock = 'latest') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec-labs/stdlib",
3
- "version": "6.0.0-rc.2",
3
+ "version": "6.0.0-rc.3",
4
4
  "type": "module",
5
5
  "inherits": [
6
6
  "../package.common.json",
@@ -92,12 +92,12 @@
92
92
  },
93
93
  "dependencies": {
94
94
  "@aws-sdk/client-s3": "^3.892.0",
95
- "@aztec-foundation/bb.js": "6.0.0-rc.5",
96
- "@aztec-foundation/noir-noirc_abi": "6.0.0-rc.5",
97
- "@aztec-labs/blob-lib": "6.0.0-rc.2",
98
- "@aztec-labs/constants": "6.0.0-rc.2",
99
- "@aztec-labs/ethereum": "6.0.0-rc.2",
100
- "@aztec-labs/foundation": "6.0.0-rc.2",
95
+ "@aztec-foundation/bb.js": "6.0.0-rc.6",
96
+ "@aztec-foundation/noir-noirc_abi": "6.0.0-rc.6",
97
+ "@aztec-labs/blob-lib": "6.0.0-rc.3",
98
+ "@aztec-labs/constants": "6.0.0-rc.3",
99
+ "@aztec-labs/ethereum": "6.0.0-rc.3",
100
+ "@aztec-labs/foundation": "6.0.0-rc.3",
101
101
  "@google-cloud/storage": "^7.15.0",
102
102
  "axios": "^1.15.1",
103
103
  "json-stringify-deterministic": "1.0.12",
@@ -16,7 +16,7 @@ import type { PartialAddress } from './partial_address.js';
16
16
  * ```
17
17
  * salted_initialization_hash = poseidon2(DOM_SEP__SALTED_INITIALIZATION_HASH, [salt, initialization_hash, deployer, immutables_hash])
18
18
  * partial_address = poseidon2(DOM_SEP__PARTIAL_ADDRESS, [contract_class_id, salted_initialization_hash])
19
- * address = ((poseidon2(DOM_SEP__CONTRACT_ADDRESS_V2, [public_keys_hash, partial_address]) * G) + ivpk_m).x <- the x-coordinate of the address point
19
+ * address = ((poseidon2(DOM_SEP__CONTRACT_ADDRESS_V3, [public_keys_hash, partial_address]) * G) + ivpk_m).x <- the x-coordinate of the address point
20
20
  * ```
21
21
  * @param instance - A contract instance for which to calculate the deployment address.
22
22
  */
package/src/gas/README.md CHANGED
@@ -208,8 +208,8 @@ itself, before actual teardown consumption is known.
208
208
 
209
209
  | Constant | Value |
210
210
  | ------------------------------- | -------------- |
211
- | `L1_GAS_PER_CHECKPOINT_PROPOSED` | 500,000 |
212
- | `L1_GAS_PER_EPOCH_VERIFIED` | 4,000,000 |
211
+ | `L1_GAS_PER_CHECKPOINT_PROPOSED` | 520,000 |
212
+ | `L1_GAS_PER_EPOCH_VERIFIED` | 2,500,000 |
213
213
  | `BLOBS_PER_CHECKPOINT` (FeeLib) | 3 |
214
214
  | `BLOB_GAS_PER_BLOB` | 2^17 |
215
215
  | `MINIMUM_CONGESTION_MULTIPLIER` | 1e9 |
@@ -5,8 +5,8 @@
5
5
 
6
6
  // Constants matching FeeLib.sol
7
7
  export const MINIMUM_CONGESTION_MULTIPLIER = 1_000_000_000n;
8
- export const L1_GAS_PER_CHECKPOINT_PROPOSED = 500_000n;
9
- export const L1_GAS_PER_EPOCH_VERIFIED = 4_000_000n;
8
+ export const L1_GAS_PER_CHECKPOINT_PROPOSED = 520_000n;
9
+ export const L1_GAS_PER_EPOCH_VERIFIED = 2_500_000n;
10
10
  export const BLOBS_PER_CHECKPOINT = 3n;
11
11
  export const BLOB_GAS_PER_BLOB = 2n ** 17n;
12
12
  export const MAGIC_CONGESTION_VALUE_MULTIPLIER = 854_700_854n;
@@ -51,12 +51,12 @@ export function deriveMasterFallbackSecretKey(secretKey: Fr): GrumpkinScalar {
51
51
  }
52
52
 
53
53
  export function computePreaddress(publicKeysHash: Fr, partialAddress: Fr) {
54
- return poseidon2HashWithSeparator([publicKeysHash, partialAddress], DomainSeparator.CONTRACT_ADDRESS_V2);
54
+ return poseidon2HashWithSeparator([publicKeysHash, partialAddress], DomainSeparator.CONTRACT_ADDRESS_V3);
55
55
  }
56
56
 
57
57
  export async function computeAddress(publicKeys: PublicKeys, partialAddress: Fr): Promise<AztecAddress> {
58
58
  // Given public keys and a partial address, we can compute our address in the following steps.
59
- // 1. preaddress = poseidon2([publicKeysHash, partialAddress], DomainSeparator.CONTRACT_ADDRESS_V2);
59
+ // 1. preaddress = poseidon2([publicKeysHash, partialAddress], DomainSeparator.CONTRACT_ADDRESS_V3);
60
60
  // 2. addressPoint = (preaddress * G) + ivpk_m
61
61
  // 3. address = addressPoint.x
62
62
  const preaddress = await computePreaddress(await publicKeys.hash(), partialAddress);
@@ -95,16 +95,24 @@ export function computeFeeJuiceMessageNullifier(messageHash: Fr, secret: Fr): Pr
95
95
  return poseidon2HashWithSeparator([messageHash, secret], DomainSeparator.MESSAGE_NULLIFIER);
96
96
  }
97
97
 
98
+ /** The outcome of {@link lookUpL1ToL2MessageWitness}. */
99
+ export type L1ToL2MessageWitnessLookup =
100
+ /** The message is in the tree and, if a nullifier was given, has not been consumed. */
101
+ | { type: 'found'; witness: [bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] }
102
+ /** The message is not in the tree. */
103
+ | { type: 'missing' }
104
+ /** A nullifier was given and the message has been consumed. */
105
+ | { type: 'nullified' };
106
+
98
107
  /**
99
- * Fetches the membership witness of an L1 to L2 message. When `unsiloedNullifier` is provided, the message is
100
- * additionally required to be un-nullified.
108
+ * Looks up the membership witness of an L1 to L2 message in the L1 to L2 message tree at `referenceBlock`.
101
109
  */
102
- export async function getL1ToL2MessageWitness(
110
+ export async function lookUpL1ToL2MessageWitness(
103
111
  node: AztecNode,
104
112
  messageHash: Fr,
105
- unsiloedNullifier?: UnsiloedMessageNullifier,
106
- referenceBlock: BlockParameter = 'latest',
107
- ): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>]> {
113
+ unsiloedNullifier: UnsiloedMessageNullifier | undefined,
114
+ referenceBlock: BlockParameter,
115
+ ): Promise<L1ToL2MessageWitnessLookup> {
108
116
  // Both requests are dispatched before awaiting so they run concurrently.
109
117
  const l1ToL2ResponsePromise = node.getL1ToL2MessageMembershipWitness(referenceBlock, messageHash);
110
118
  const nullifierResponsePromise = unsiloedNullifier
@@ -113,17 +121,37 @@ export async function getL1ToL2MessageWitness(
113
121
  )
114
122
  : undefined;
115
123
 
116
- const l1ToL2Response = await l1ToL2ResponsePromise;
124
+ const [l1ToL2Response, nullifierResponse] = await Promise.all([l1ToL2ResponsePromise, nullifierResponsePromise]);
117
125
  if (!l1ToL2Response) {
118
- throw new Error(`No L1 to L2 message found for message hash ${messageHash.toString()}`);
126
+ return { type: 'missing' };
119
127
  }
120
128
 
121
- const nullifierResponse = await nullifierResponsePromise;
122
129
  if (nullifierResponse?.[0] !== undefined) {
123
- throw new Error(`No non-nullified L1 to L2 message found for message hash ${messageHash.toString()}`);
130
+ return { type: 'nullified' };
124
131
  }
125
132
 
126
- return l1ToL2Response;
133
+ return { type: 'found', witness: l1ToL2Response };
134
+ }
135
+
136
+ /**
137
+ * Fetches the membership witness of an L1 to L2 message. When `unsiloedNullifier` is provided, the message is
138
+ * additionally required to be un-nullified.
139
+ */
140
+ export async function getL1ToL2MessageWitness(
141
+ node: AztecNode,
142
+ messageHash: Fr,
143
+ unsiloedNullifier?: UnsiloedMessageNullifier,
144
+ referenceBlock: BlockParameter = 'latest',
145
+ ): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>]> {
146
+ const lookup = await lookUpL1ToL2MessageWitness(node, messageHash, unsiloedNullifier, referenceBlock);
147
+ switch (lookup.type) {
148
+ case 'missing':
149
+ throw new Error(`No L1 to L2 message found for message hash ${messageHash.toString()}`);
150
+ case 'nullified':
151
+ throw new Error(`No non-nullified L1 to L2 message found for message hash ${messageHash.toString()}`);
152
+ case 'found':
153
+ return lookup.witness;
154
+ }
127
155
  }
128
156
 
129
157
  // This functionality is not on the node because we do not want to pass the node the secret, and give the node the ability to derive a valid nullifer for an L1 to L2 message.