@aztec/stdlib 6.0.0-nightly.20260810 → 6.0.0-nightly.20260821
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/abi/abi.d.ts +4 -3
- package/dest/abi/abi.d.ts.map +1 -1
- package/dest/abi/abi.js +5 -1
- package/dest/abi/contract_artifact.d.ts +7 -2
- package/dest/abi/contract_artifact.d.ts.map +1 -1
- package/dest/abi/contract_artifact.js +18 -19
- package/dest/avm/avm.d.ts +3 -2
- package/dest/avm/avm.d.ts.map +1 -1
- package/dest/avm/avm.js +9 -3
- package/dest/avm/avm_proving_request.d.ts +70 -70
- package/dest/block/l2_block.d.ts +1 -2
- package/dest/block/l2_block.d.ts.map +1 -1
- package/dest/block/l2_block.js +2 -3
- package/dest/block/l2_block_source.d.ts +3 -6
- package/dest/block/l2_block_source.d.ts.map +1 -1
- package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts +11 -20
- package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts.map +1 -1
- package/dest/block/l2_block_stream/event_driven_l2_block_stream.js +12 -116
- package/dest/checkpoint/checkpoint_data.d.ts +14 -2
- package/dest/checkpoint/checkpoint_data.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint_data.js +2 -1
- 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/previous_checkpoint_inbox_rolling_hash.d.ts +21 -0
- package/dest/checkpoint/previous_checkpoint_inbox_rolling_hash.d.ts.map +1 -0
- package/dest/checkpoint/previous_checkpoint_inbox_rolling_hash.js +34 -0
- package/dest/checkpoint/simulation_overrides.d.ts +2 -2
- package/dest/checkpoint/simulation_overrides.d.ts.map +1 -1
- package/dest/checkpoint/simulation_overrides.js +11 -8
- package/dest/config/network-consensus-config.d.ts +4 -3
- package/dest/config/network-consensus-config.d.ts.map +1 -1
- package/dest/config/network-consensus-config.js +9 -4
- package/dest/config/node-rpc-config.d.ts +13 -1
- package/dest/config/node-rpc-config.d.ts.map +1 -1
- package/dest/config/node-rpc-config.js +34 -1
- package/dest/deserialization/index.d.ts +17 -17
- package/dest/deserialization/index.d.ts.map +1 -1
- package/dest/deserialization/index.js +18 -18
- package/dest/gas/gas_settings.d.ts +17 -5
- package/dest/gas/gas_settings.d.ts.map +1 -1
- package/dest/gas/gas_settings.js +4 -4
- package/dest/gas/tx_gas_limits.d.ts +3 -4
- package/dest/gas/tx_gas_limits.d.ts.map +1 -1
- package/dest/gas/tx_gas_limits.js +4 -5
- package/dest/interfaces/archiver.d.ts +2 -2
- package/dest/interfaces/archiver.d.ts.map +1 -1
- package/dest/interfaces/archiver.js +32 -5
- package/dest/interfaces/aztec-node-admin.d.ts +2 -1
- package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.d.ts +22 -4
- package/dest/interfaces/aztec-node.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.js +11 -9
- package/dest/interfaces/block-builder.d.ts +11 -2
- package/dest/interfaces/block-builder.d.ts.map +1 -1
- package/dest/interfaces/configs.d.ts +7 -1
- package/dest/interfaces/configs.d.ts.map +1 -1
- package/dest/interfaces/configs.js +2 -1
- package/dest/interfaces/p2p.d.ts +18 -1
- package/dest/interfaces/p2p.d.ts.map +1 -1
- package/dest/interfaces/p2p.js +8 -0
- package/dest/interfaces/proving-job.d.ts +17 -42
- package/dest/interfaces/proving-job.d.ts.map +1 -1
- package/dest/interfaces/proving-job.js +16 -47
- package/dest/interfaces/server_circuit_prover.d.ts +8 -15
- package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
- package/dest/interfaces/validator.d.ts +7 -7
- package/dest/interfaces/validator.d.ts.map +1 -1
- package/dest/messaging/append_l1_to_l2_messages.d.ts +5 -5
- package/dest/messaging/append_l1_to_l2_messages.d.ts.map +1 -1
- package/dest/messaging/append_l1_to_l2_messages.js +4 -8
- package/dest/messaging/inbox_bucket.d.ts +77 -0
- package/dest/messaging/inbox_bucket.d.ts.map +1 -0
- package/dest/messaging/inbox_bucket.js +73 -0
- package/dest/messaging/inbox_consumption.d.ts +55 -0
- package/dest/messaging/inbox_consumption.d.ts.map +1 -0
- package/dest/messaging/inbox_consumption.js +53 -0
- package/dest/messaging/inbox_rolling_hash.d.ts +16 -0
- package/dest/messaging/inbox_rolling_hash.d.ts.map +1 -0
- package/dest/messaging/inbox_rolling_hash.js +23 -0
- package/dest/messaging/index.d.ts +6 -3
- package/dest/messaging/index.d.ts.map +1 -1
- package/dest/messaging/index.js +5 -2
- package/dest/messaging/l1_to_l2_message_bundle.d.ts +31 -0
- package/dest/messaging/l1_to_l2_message_bundle.d.ts.map +1 -0
- package/dest/messaging/l1_to_l2_message_bundle.js +51 -0
- package/dest/messaging/l1_to_l2_message_source.d.ts +44 -10
- package/dest/messaging/l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/messaging/l1_to_l2_message_sponge.d.ts +40 -0
- package/dest/messaging/l1_to_l2_message_sponge.d.ts.map +1 -0
- package/dest/messaging/l1_to_l2_message_sponge.js +56 -0
- package/dest/noir/index.d.ts +3 -3
- package/dest/noir/index.d.ts.map +1 -1
- package/dest/p2p/block_proposal.d.ts +24 -9
- package/dest/p2p/block_proposal.d.ts.map +1 -1
- package/dest/p2p/block_proposal.js +42 -20
- package/dest/p2p/checkpoint_attestation.d.ts +1 -1
- package/dest/p2p/checkpoint_proposal.d.ts +13 -3
- package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
- package/dest/p2p/checkpoint_proposal.js +26 -8
- package/dest/p2p/consensus_payload.d.ts +1 -1
- package/dest/p2p/index.d.ts +2 -1
- package/dest/p2p/index.d.ts.map +1 -1
- package/dest/p2p/index.js +1 -0
- package/dest/p2p/validated_proposal.d.ts +35 -0
- package/dest/p2p/validated_proposal.d.ts.map +1 -0
- package/dest/p2p/validated_proposal.js +17 -0
- package/dest/p2p/wire_compat_fixtures.d.ts +7 -0
- package/dest/p2p/wire_compat_fixtures.d.ts.map +1 -0
- package/dest/p2p/wire_compat_fixtures.js +14 -0
- package/dest/parity/inbox_parity_private_inputs.d.ts +61 -0
- package/dest/parity/inbox_parity_private_inputs.d.ts.map +1 -0
- package/dest/parity/inbox_parity_private_inputs.js +79 -0
- package/dest/parity/index.d.ts +2 -3
- package/dest/parity/index.d.ts.map +1 -1
- package/dest/parity/index.js +1 -2
- package/dest/parity/parity_public_inputs.d.ts +15 -14
- package/dest/parity/parity_public_inputs.d.ts.map +1 -1
- package/dest/parity/parity_public_inputs.js +13 -15
- package/dest/proofs/proving_request_type.d.ts +11 -14
- package/dest/proofs/proving_request_type.d.ts.map +1 -1
- package/dest/proofs/proving_request_type.js +10 -13
- package/dest/rollup/block_constant_data.d.ts +8 -8
- package/dest/rollup/block_constant_data.js +4 -4
- package/dest/rollup/block_rollup_public_inputs.d.ts +18 -6
- package/dest/rollup/block_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/block_rollup_public_inputs.js +14 -7
- package/dest/rollup/block_root_rollup_private_inputs.d.ts +109 -113
- package/dest/rollup/block_root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/block_root_rollup_private_inputs.js +79 -130
- package/dest/rollup/checkpoint_header.d.ts +14 -6
- package/dest/rollup/checkpoint_header.d.ts.map +1 -1
- package/dest/rollup/checkpoint_header.js +18 -14
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +22 -2
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_rollup_public_inputs.js +14 -3
- package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts +27 -6
- package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_root_rollup_private_inputs.js +17 -4
- package/dest/rollup/root_rollup_public_inputs.d.ts +10 -2
- package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/root_rollup_public_inputs.js +9 -3
- package/dest/stats/stats.d.ts +2 -2
- package/dest/stats/stats.d.ts.map +1 -1
- package/dest/tests/factories.d.ts +7 -7
- package/dest/tests/factories.d.ts.map +1 -1
- package/dest/tests/factories.js +26 -22
- package/dest/tests/fixtures.d.ts +1 -1
- package/dest/tests/fixtures.d.ts.map +1 -1
- package/dest/tests/fixtures.js +2 -0
- package/dest/tests/mocks.d.ts +4 -2
- package/dest/tests/mocks.d.ts.map +1 -1
- package/dest/tests/mocks.js +4 -7
- package/dest/tx/state_reference.d.ts +5 -2
- package/dest/tx/state_reference.d.ts.map +1 -1
- package/dest/tx/state_reference.js +5 -5
- package/package.json +8 -8
- package/src/abi/abi.ts +7 -2
- package/src/abi/contract_artifact.ts +20 -23
- package/src/avm/avm.ts +11 -1
- package/src/block/l2_block.ts +2 -3
- package/src/block/l2_block_source.ts +2 -5
- package/src/block/l2_block_stream/event_driven_l2_block_stream.ts +17 -143
- package/src/checkpoint/checkpoint_data.ts +14 -1
- package/src/checkpoint/index.ts +1 -0
- package/src/checkpoint/previous_checkpoint_inbox_rolling_hash.ts +46 -0
- package/src/checkpoint/simulation_overrides.ts +11 -8
- package/src/config/network-consensus-config.ts +17 -4
- package/src/config/node-rpc-config.ts +51 -1
- package/src/deserialization/index.ts +18 -18
- package/src/gas/README.md +4 -3
- package/src/gas/gas_settings.ts +7 -3
- package/src/gas/tx_gas_limits.ts +4 -12
- package/src/interfaces/archiver.ts +19 -2
- package/src/interfaces/aztec-node.ts +33 -12
- package/src/interfaces/block-builder.ts +10 -1
- package/src/interfaces/configs.ts +6 -0
- package/src/interfaces/p2p.ts +21 -0
- package/src/interfaces/proving-job.ts +19 -70
- package/src/interfaces/server_circuit_prover.ts +13 -37
- package/src/interfaces/validator.ts +6 -5
- package/src/kernel/private_kernel_reset_dimensions.ts +1 -1
- package/src/messaging/append_l1_to_l2_messages.ts +5 -13
- package/src/messaging/inbox_bucket.ts +125 -0
- package/src/messaging/inbox_consumption.ts +74 -0
- package/src/messaging/inbox_rolling_hash.ts +24 -0
- package/src/messaging/index.ts +5 -2
- package/src/messaging/l1_to_l2_message_bundle.ts +65 -0
- package/src/messaging/l1_to_l2_message_source.ts +48 -10
- package/src/messaging/l1_to_l2_message_sponge.ts +69 -0
- package/src/noir/index.ts +1 -2
- package/src/p2p/block_proposal.ts +41 -28
- package/src/p2p/checkpoint_proposal.ts +31 -6
- package/src/p2p/index.ts +1 -0
- package/src/p2p/validated_proposal.ts +43 -0
- package/src/p2p/wire_compat_fixtures.ts +23 -0
- package/src/parity/inbox_parity_private_inputs.ts +116 -0
- package/src/parity/index.ts +1 -2
- package/src/parity/parity_public_inputs.ts +12 -14
- package/src/proofs/proving_request_type.ts +2 -5
- package/src/rollup/block_constant_data.ts +4 -4
- package/src/rollup/block_rollup_public_inputs.ts +14 -5
- package/src/rollup/block_root_rollup_private_inputs.ts +117 -153
- package/src/rollup/checkpoint_header.ts +17 -13
- package/src/rollup/checkpoint_rollup_public_inputs.ts +15 -0
- package/src/rollup/checkpoint_root_rollup_private_inputs.ts +16 -3
- package/src/rollup/root_rollup_public_inputs.ts +10 -0
- package/src/stats/stats.ts +4 -5
- package/src/tests/factories.ts +38 -32
- package/src/tests/fixtures.ts +3 -0
- package/src/tests/mocks.ts +6 -7
- package/src/tx/state_reference.ts +5 -12
- package/dest/messaging/in_hash.d.ts +0 -6
- package/dest/messaging/in_hash.d.ts.map +0 -1
- package/dest/messaging/in_hash.js +0 -10
- package/dest/messaging/inbox_leaf.d.ts +0 -25
- package/dest/messaging/inbox_leaf.d.ts.map +0 -1
- package/dest/messaging/inbox_leaf.js +0 -42
- package/dest/parity/parity_base_private_inputs.d.ts +0 -39
- package/dest/parity/parity_base_private_inputs.d.ts.map +0 -1
- package/dest/parity/parity_base_private_inputs.js +0 -51
- package/dest/parity/parity_root_private_inputs.d.ts +0 -39
- package/dest/parity/parity_root_private_inputs.d.ts.map +0 -1
- package/dest/parity/parity_root_private_inputs.js +0 -46
- package/src/messaging/in_hash.ts +0 -12
- package/src/messaging/inbox_leaf.ts +0 -44
- package/src/parity/parity_base_private_inputs.ts +0 -71
- package/src/parity/parity_root_private_inputs.ts +0 -64
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import { BufferReader } from '@aztec/foundation/serialize';
|
|
3
|
+
/**
|
|
4
|
+
* A block's L1-to-L2 message bundle: the real message leaves it inserts into the L1-to-L2 message tree and the count
|
|
5
|
+
* that drives both the compact (unpadded) tree append and the message-sponge absorb. See the Noir
|
|
6
|
+
* `L1ToL2MessageBundle`.
|
|
7
|
+
*/
|
|
8
|
+
export declare class L1ToL2MessageBundle {
|
|
9
|
+
/** The real message leaves in the leading lanes, padded with zeros to `MAX_L1_TO_L2_MSGS_PER_BLOCK`. Kept as a
|
|
10
|
+
* plain array (not a tuple) to avoid TS's deep-instantiation limit on the wide type. */
|
|
11
|
+
readonly messages: Fr[];
|
|
12
|
+
/** Number of real messages: drives both the compact tree append and the sponge absorb. */
|
|
13
|
+
readonly numMsgs: number;
|
|
14
|
+
constructor(
|
|
15
|
+
/** The real message leaves in the leading lanes, padded with zeros to `MAX_L1_TO_L2_MSGS_PER_BLOCK`. Kept as a
|
|
16
|
+
* plain array (not a tuple) to avoid TS's deep-instantiation limit on the wide type. */
|
|
17
|
+
messages: Fr[],
|
|
18
|
+
/** Number of real messages: drives both the compact tree append and the sponge absorb. */
|
|
19
|
+
numMsgs: number);
|
|
20
|
+
/** An empty bundle: no leaves inserted, nothing absorbed. */
|
|
21
|
+
static empty(): L1ToL2MessageBundle;
|
|
22
|
+
toBuffer(): Buffer<ArrayBufferLike>;
|
|
23
|
+
toString(): `0x${string}`;
|
|
24
|
+
static fromBuffer(buffer: Buffer | BufferReader): L1ToL2MessageBundle;
|
|
25
|
+
static fromString(str: string): L1ToL2MessageBundle;
|
|
26
|
+
toJSON(): Buffer<ArrayBufferLike>;
|
|
27
|
+
static get schema(): import("zod").ZodType<L1ToL2MessageBundle, string, import("zod/v4/core").$ZodTypeInternals<L1ToL2MessageBundle, string>>;
|
|
28
|
+
}
|
|
29
|
+
/** Wraps `messages` (the real leaves) into a bundle: the leaves fill the leading lanes, the count is the real count. */
|
|
30
|
+
export declare function makeL1ToL2MessageBundle(messages: Fr[]): L1ToL2MessageBundle;
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZV9idW5kbGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZXNzYWdpbmcvbDFfdG9fbDJfbWVzc2FnZV9idW5kbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFHOUU7Ozs7R0FJRztBQUNILHFCQUFhLG1CQUFtQjtJQUU1Qjs0RkFDd0Y7YUFDeEUsUUFBUSxFQUFFLEVBQUUsRUFBRTtJQUM5QiwwRkFBMEY7YUFDMUUsT0FBTyxFQUFFLE1BQU07SUFMakM7SUFDRTs0RkFDd0Y7SUFDeEUsUUFBUSxFQUFFLEVBQUUsRUFBRTtJQUM5QiwwRkFBMEY7SUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFDN0I7SUFFSiw2REFBNkQ7SUFDN0QsTUFBTSxDQUFDLEtBQUssSUFBSSxtQkFBbUIsQ0FLbEM7SUFFRCxRQUFRLDRCQUVQO0lBRUQsUUFBUSxrQkFFUDtJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxZQUFZLHVCQUs5QztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sdUJBRTVCO0lBRUQsTUFBTSw0QkFFTDtJQUVELE1BQU0sS0FBSyxNQUFNLDZIQUVoQjtDQUNGO0FBRUQsd0hBQXdIO0FBQ3hILHdCQUFnQix1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsbUJBQW1CLENBTTNFIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"l1_to_l2_message_bundle.d.ts","sourceRoot":"","sources":["../../src/messaging/l1_to_l2_message_bundle.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAG9E;;;;GAIG;AACH,qBAAa,mBAAmB;IAE5B;4FACwF;aACxE,QAAQ,EAAE,EAAE,EAAE;IAC9B,0FAA0F;aAC1E,OAAO,EAAE,MAAM;IALjC;IACE;4FACwF;IACxE,QAAQ,EAAE,EAAE,EAAE;IAC9B,0FAA0F;IAC1E,OAAO,EAAE,MAAM,EAC7B;IAEJ,6DAA6D;IAC7D,MAAM,CAAC,KAAK,IAAI,mBAAmB,CAKlC;IAED,QAAQ,4BAEP;IAED,QAAQ,kBAEP;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,uBAK9C;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,uBAE5B;IAED,MAAM,4BAEL;IAED,MAAM,KAAK,MAAM,6HAEhB;CACF;AAED,wHAAwH;AACxH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,mBAAmB,CAM3E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { MAX_L1_TO_L2_MSGS_PER_BLOCK } from '@aztec/constants';
|
|
2
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import { bufferSchemaFor } from '@aztec/foundation/schemas';
|
|
5
|
+
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
6
|
+
import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
|
|
7
|
+
/**
|
|
8
|
+
* A block's L1-to-L2 message bundle: the real message leaves it inserts into the L1-to-L2 message tree and the count
|
|
9
|
+
* that drives both the compact (unpadded) tree append and the message-sponge absorb. See the Noir
|
|
10
|
+
* `L1ToL2MessageBundle`.
|
|
11
|
+
*/ export class L1ToL2MessageBundle {
|
|
12
|
+
messages;
|
|
13
|
+
numMsgs;
|
|
14
|
+
constructor(/** The real message leaves in the leading lanes, padded with zeros to `MAX_L1_TO_L2_MSGS_PER_BLOCK`. Kept as a
|
|
15
|
+
* plain array (not a tuple) to avoid TS's deep-instantiation limit on the wide type. */ messages, /** Number of real messages: drives both the compact tree append and the sponge absorb. */ numMsgs){
|
|
16
|
+
this.messages = messages;
|
|
17
|
+
this.numMsgs = numMsgs;
|
|
18
|
+
}
|
|
19
|
+
/** An empty bundle: no leaves inserted, nothing absorbed. */ static empty() {
|
|
20
|
+
return new L1ToL2MessageBundle(Array.from({
|
|
21
|
+
length: MAX_L1_TO_L2_MSGS_PER_BLOCK
|
|
22
|
+
}, ()=>Fr.ZERO), 0);
|
|
23
|
+
}
|
|
24
|
+
toBuffer() {
|
|
25
|
+
return serializeToBuffer(this.messages, this.numMsgs);
|
|
26
|
+
}
|
|
27
|
+
toString() {
|
|
28
|
+
return bufferToHex(this.toBuffer());
|
|
29
|
+
}
|
|
30
|
+
static fromBuffer(buffer) {
|
|
31
|
+
const reader = BufferReader.asReader(buffer);
|
|
32
|
+
// Array.from (not readArray with the literal cap) keeps the type `Fr[]` and avoids TS's deep-tuple instantiation.
|
|
33
|
+
const messages = Array.from({
|
|
34
|
+
length: MAX_L1_TO_L2_MSGS_PER_BLOCK
|
|
35
|
+
}, ()=>Fr.fromBuffer(reader));
|
|
36
|
+
return new L1ToL2MessageBundle(messages, reader.readNumber());
|
|
37
|
+
}
|
|
38
|
+
static fromString(str) {
|
|
39
|
+
return L1ToL2MessageBundle.fromBuffer(hexToBuffer(str));
|
|
40
|
+
}
|
|
41
|
+
toJSON() {
|
|
42
|
+
return this.toBuffer();
|
|
43
|
+
}
|
|
44
|
+
static get schema() {
|
|
45
|
+
return bufferSchemaFor(L1ToL2MessageBundle);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Wraps `messages` (the real leaves) into a bundle: the leaves fill the leading lanes, the count is the real count. */ export function makeL1ToL2MessageBundle(messages) {
|
|
49
|
+
// Explicit `<Fr, number>` keeps the result `Fr[]`; padding to the literal cap would otherwise infer a deep tuple.
|
|
50
|
+
return new L1ToL2MessageBundle(padArrayEnd(messages, Fr.ZERO, MAX_L1_TO_L2_MSGS_PER_BLOCK), messages.length);
|
|
51
|
+
}
|
|
@@ -1,27 +1,61 @@
|
|
|
1
|
-
import type { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
1
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
2
|
import type { L2Tips } from '../block/l2_block_source.js';
|
|
3
|
+
import type { InboxBucket } from './inbox_bucket.js';
|
|
4
4
|
/**
|
|
5
5
|
* Interface of classes allowing for the retrieval of L1 to L2 messages.
|
|
6
6
|
*/
|
|
7
7
|
export interface L1ToL2MessageSource {
|
|
8
|
-
/**
|
|
9
|
-
* Gets new L1 to L2 message (to be) included in a given checkpoint.
|
|
10
|
-
* @param checkpointNumber - Checkpoint number to get messages for.
|
|
11
|
-
* @returns The L1 to L2 messages/leaves of the messages subtree.
|
|
12
|
-
* @throws If the message tree for the given checkpoint has not yet been sealed on L1
|
|
13
|
-
* (i.e., checkpointNumber >= inbox treeInProgress).
|
|
14
|
-
*/
|
|
15
|
-
getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]>;
|
|
16
8
|
/**
|
|
17
9
|
* Gets the L1 to L2 message index in the L1 to L2 message tree.
|
|
18
10
|
* @param l1ToL2Message - The L1 to L2 message.
|
|
19
11
|
* @returns The index of the L1 to L2 message in the L1 to L2 message tree (undefined if not found).
|
|
20
12
|
*/
|
|
21
13
|
getL1ToL2MessageIndex(l1ToL2Message: Fr): Promise<bigint | undefined>;
|
|
14
|
+
/**
|
|
15
|
+
* Returns the latest Inbox bucket opened at or before the given L1 timestamp, or undefined if no such bucket
|
|
16
|
+
* exists (i.e., every synced bucket was opened strictly after the timestamp). Used by the sequencer/validator
|
|
17
|
+
* to resolve the censorship cutoff and message-lag boundaries.
|
|
18
|
+
* @param timestamp - The L1 timestamp (in seconds) to look up at-or-before.
|
|
19
|
+
*/
|
|
20
|
+
getLatestInboxBucketAtOrBefore(timestamp: bigint): Promise<InboxBucket | undefined>;
|
|
21
|
+
/**
|
|
22
|
+
* Returns the Inbox bucket with the given sequence number, or undefined if it has not been synced. Validators use
|
|
23
|
+
* this to resolve the bucket a proposal references and check its rolling hash.
|
|
24
|
+
* @param seq - The bucket sequence number.
|
|
25
|
+
*/
|
|
26
|
+
getInboxBucket(seq: bigint): Promise<InboxBucket | undefined>;
|
|
27
|
+
/**
|
|
28
|
+
* Returns the Inbox bucket whose cumulative message total equals `totalMsgCount`, or undefined if no synced bucket
|
|
29
|
+
* sits on that boundary. A block's or checkpoint's L1-to-L2 tree leaf count equals the cumulative total of the last
|
|
30
|
+
* bucket it consumed (messages are indexed compactly, with no padding), so validators use this to resolve the
|
|
31
|
+
* bucket a block consumed through from the block's leaf count, without trusting a wire hint. `totalMsgCount === 0`
|
|
32
|
+
* resolves the genesis sentinel bucket (sequence 0); a total that does not land on a bucket boundary returns
|
|
33
|
+
* undefined.
|
|
34
|
+
* @param totalMsgCount - The cumulative Inbox message count (leaf count) to resolve to a bucket boundary.
|
|
35
|
+
*/
|
|
36
|
+
getInboxBucketByTotalMsgCount(totalMsgCount: bigint): Promise<InboxBucket | undefined>;
|
|
37
|
+
/**
|
|
38
|
+
* Returns the message leaves absorbed into buckets in the range `(fromExclusive, toInclusive]`, in insertion
|
|
39
|
+
* order, for streaming message-bundle derivation. Both bounds must name buckets the source
|
|
40
|
+
* has synced; it throws otherwise, so that an empty result means the range holds no messages instead of hiding an
|
|
41
|
+
* unsynced bound. Callers that can tolerate an unsynced source resolve both bounds first, or map the failure to
|
|
42
|
+
* their own catch-up handling.
|
|
43
|
+
* @param fromExclusive - The lower bucket sequence bound, exclusive (0 means from the start of the Inbox).
|
|
44
|
+
* @param toInclusive - The upper bucket sequence bound, inclusive.
|
|
45
|
+
*/
|
|
46
|
+
getL1ToL2MessagesBetweenBuckets(fromExclusive: bigint, toInclusive: bigint): Promise<Fr[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Returns the message leaves in the cumulative Inbox message-count range `[startLeafCount, endLeafCount)`, in
|
|
49
|
+
* insertion order. The bounds are compact L1-to-L2 tree leaf counts, which every block header
|
|
50
|
+
* carries, so a consumer can ask for the messages a block or checkpoint consumed without resolving Inbox buckets
|
|
51
|
+
* itself. Both bounds must land on a bucket boundary the source has synced; it throws otherwise.
|
|
52
|
+
* @param startLeafCount - The cumulative Inbox message count the range starts at, inclusive.
|
|
53
|
+
* @param endLeafCount - The cumulative Inbox message count the range ends at, exclusive.
|
|
54
|
+
*/
|
|
55
|
+
getL1ToL2MessagesBetweenLeafCounts(startLeafCount: bigint, endLeafCount: bigint): Promise<Fr[]>;
|
|
22
56
|
/**
|
|
23
57
|
* Returns the tips of the L2 chain.
|
|
24
58
|
*/
|
|
25
59
|
getL2Tips(): Promise<L2Tips>;
|
|
26
60
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZV9zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZXNzYWdpbmcvbDFfdG9fbDJfbWVzc2FnZV9zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFekQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLFdBQVcsbUJBQW1CO0lBQ2xDOzs7O09BSUc7SUFDSCxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFdEU7Ozs7O09BS0c7SUFDSCw4QkFBOEIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFcEY7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFOUQ7Ozs7Ozs7O09BUUc7SUFDSCw2QkFBNkIsQ0FBQyxhQUFhLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFdkY7Ozs7Ozs7O09BUUc7SUFDSCwrQkFBK0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFM0Y7Ozs7Ozs7T0FPRztJQUNILGtDQUFrQyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVoRzs7T0FFRztJQUNILFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDOUIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/messaging/l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/messaging/l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,qBAAqB,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEtE;;;;;OAKG;IACH,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAEpF;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAE9D;;;;;;;;OAQG;IACH,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAEvF;;;;;;;;OAQG;IACH,+BAA+B,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3F;;;;;;;OAOG;IACH,kCAAkC,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhG;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Poseidon2Sponge } from '@aztec/blob-lib/types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import { BufferReader, FieldReader } from '@aztec/foundation/serialize';
|
|
4
|
+
import type { FieldsOf } from '@aztec/foundation/types';
|
|
5
|
+
/**
|
|
6
|
+
* An absorb-only Poseidon2 sponge over L1-to-L2 message leaves.
|
|
7
|
+
*
|
|
8
|
+
* Mirrors `L1ToL2MessageSponge` in
|
|
9
|
+
* `noir-projects/fnd/noir-protocol-circuits/crates/rollup-lib/src/abis/l1_to_l2_message_sponge.nr`. Each block of a
|
|
10
|
+
* checkpoint absorbs its message bundle into the sponge it inherited from the previous block; the checkpoint root
|
|
11
|
+
* recomputes the sponge over the checkpoint's whole message list and asserts the accumulated states are equal.
|
|
12
|
+
*/
|
|
13
|
+
export declare class L1ToL2MessageSponge {
|
|
14
|
+
/** Sponge accumulating the absorbed message leaves. */
|
|
15
|
+
readonly sponge: Poseidon2Sponge;
|
|
16
|
+
/** Number of message leaves absorbed so far. */
|
|
17
|
+
numAbsorbed: number;
|
|
18
|
+
constructor(
|
|
19
|
+
/** Sponge accumulating the absorbed message leaves. */
|
|
20
|
+
sponge: Poseidon2Sponge,
|
|
21
|
+
/** Number of message leaves absorbed so far. */
|
|
22
|
+
numAbsorbed: number);
|
|
23
|
+
/** A fresh, empty sponge (matching noir's `L1ToL2MessageSponge::new()` / `empty()`, i.e. `Poseidon2Sponge::new(0)`). */
|
|
24
|
+
static empty(): L1ToL2MessageSponge;
|
|
25
|
+
/** Absorb the given message leaves in order. */
|
|
26
|
+
absorb(leaves: Fr[]): Promise<void>;
|
|
27
|
+
clone(): L1ToL2MessageSponge;
|
|
28
|
+
static getFields(fields: FieldsOf<L1ToL2MessageSponge>): readonly [Poseidon2Sponge, number];
|
|
29
|
+
toBuffer(): Buffer<ArrayBufferLike>;
|
|
30
|
+
static fromBuffer(buffer: Buffer | BufferReader): L1ToL2MessageSponge;
|
|
31
|
+
toFields(): Fr[];
|
|
32
|
+
static fromFields(fields: Fr[] | FieldReader): L1ToL2MessageSponge;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Accumulates a fresh message sponge over `leaves`, in order. This is the value the inbox parity proof commits to and
|
|
36
|
+
* the checkpoint's block roots reach, starting from the empty sponge. Every leaf passed in is absorbed, so any padding
|
|
37
|
+
* the caller includes is part of the accumulated state.
|
|
38
|
+
*/
|
|
39
|
+
export declare function accumulateL1ToL2MessageSponge(leaves: Fr[]): Promise<L1ToL2MessageSponge>;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZV9zcG9uZ2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZXNzYWdpbmcvbDFfdG9fbDJfbWVzc2FnZV9zcG9uZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBd0MsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RyxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RDs7Ozs7OztHQU9HO0FBQ0gscUJBQWEsbUJBQW1CO0lBRTVCLHVEQUF1RDthQUN2QyxNQUFNLEVBQUUsZUFBZTtJQUN2QyxnREFBZ0Q7SUFDekMsV0FBVyxFQUFFLE1BQU07SUFKNUI7SUFDRSx1REFBdUQ7SUFDdkMsTUFBTSxFQUFFLGVBQWU7SUFDdkMsZ0RBQWdEO0lBQ3pDLFdBQVcsRUFBRSxNQUFNLEVBQ3hCO0lBRUosd0hBQXdIO0lBQ3hILE1BQU0sQ0FBQyxLQUFLLElBQUksbUJBQW1CLENBRWxDO0lBRUQsZ0RBQWdEO0lBQzFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLGlCQUd4QjtJQUVELEtBQUssd0JBRUo7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsbUJBQW1CLENBQUMsc0NBRXJEO0lBRUQsUUFBUSw0QkFFUDtJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsbUJBQW1CLENBR3BFO0lBRUQsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUVmO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxHQUFHLG1CQUFtQixDQUdqRTtDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFzQiw2QkFBNkIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBSTlGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"l1_to_l2_message_sponge.d.ts","sourceRoot":"","sources":["../../src/messaging/l1_to_l2_message_sponge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAwC,MAAM,6BAA6B,CAAC;AAC9G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;;;;;GAOG;AACH,qBAAa,mBAAmB;IAE5B,uDAAuD;aACvC,MAAM,EAAE,eAAe;IACvC,gDAAgD;IACzC,WAAW,EAAE,MAAM;IAJ5B;IACE,uDAAuD;IACvC,MAAM,EAAE,eAAe;IACvC,gDAAgD;IACzC,WAAW,EAAE,MAAM,EACxB;IAEJ,wHAAwH;IACxH,MAAM,CAAC,KAAK,IAAI,mBAAmB,CAElC;IAED,gDAAgD;IAC1C,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,iBAGxB;IAED,KAAK,wBAEJ;IAED,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,sCAErD;IAED,QAAQ,4BAEP;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,mBAAmB,CAGpE;IAED,QAAQ,IAAI,EAAE,EAAE,CAEf;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,mBAAmB,CAGjE;CACF;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAI9F"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Poseidon2Sponge } from '@aztec/blob-lib/types';
|
|
2
|
+
import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize';
|
|
3
|
+
/**
|
|
4
|
+
* An absorb-only Poseidon2 sponge over L1-to-L2 message leaves.
|
|
5
|
+
*
|
|
6
|
+
* Mirrors `L1ToL2MessageSponge` in
|
|
7
|
+
* `noir-projects/fnd/noir-protocol-circuits/crates/rollup-lib/src/abis/l1_to_l2_message_sponge.nr`. Each block of a
|
|
8
|
+
* checkpoint absorbs its message bundle into the sponge it inherited from the previous block; the checkpoint root
|
|
9
|
+
* recomputes the sponge over the checkpoint's whole message list and asserts the accumulated states are equal.
|
|
10
|
+
*/ export class L1ToL2MessageSponge {
|
|
11
|
+
sponge;
|
|
12
|
+
numAbsorbed;
|
|
13
|
+
constructor(/** Sponge accumulating the absorbed message leaves. */ sponge, /** Number of message leaves absorbed so far. */ numAbsorbed){
|
|
14
|
+
this.sponge = sponge;
|
|
15
|
+
this.numAbsorbed = numAbsorbed;
|
|
16
|
+
}
|
|
17
|
+
/** A fresh, empty sponge (matching noir's `L1ToL2MessageSponge::new()` / `empty()`, i.e. `Poseidon2Sponge::new(0)`). */ static empty() {
|
|
18
|
+
return new L1ToL2MessageSponge(Poseidon2Sponge.empty(), 0);
|
|
19
|
+
}
|
|
20
|
+
/** Absorb the given message leaves in order. */ async absorb(leaves) {
|
|
21
|
+
await this.sponge.absorb(leaves);
|
|
22
|
+
this.numAbsorbed += leaves.length;
|
|
23
|
+
}
|
|
24
|
+
clone() {
|
|
25
|
+
return L1ToL2MessageSponge.fromBuffer(this.toBuffer());
|
|
26
|
+
}
|
|
27
|
+
static getFields(fields) {
|
|
28
|
+
return [
|
|
29
|
+
fields.sponge,
|
|
30
|
+
fields.numAbsorbed
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
toBuffer() {
|
|
34
|
+
return serializeToBuffer(...L1ToL2MessageSponge.getFields(this));
|
|
35
|
+
}
|
|
36
|
+
static fromBuffer(buffer) {
|
|
37
|
+
const reader = BufferReader.asReader(buffer);
|
|
38
|
+
return new L1ToL2MessageSponge(reader.readObject(Poseidon2Sponge), reader.readNumber());
|
|
39
|
+
}
|
|
40
|
+
toFields() {
|
|
41
|
+
return serializeToFields(...L1ToL2MessageSponge.getFields(this));
|
|
42
|
+
}
|
|
43
|
+
static fromFields(fields) {
|
|
44
|
+
const reader = FieldReader.asReader(fields);
|
|
45
|
+
return new L1ToL2MessageSponge(reader.readObject(Poseidon2Sponge), reader.readField().toNumber());
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Accumulates a fresh message sponge over `leaves`, in order. This is the value the inbox parity proof commits to and
|
|
50
|
+
* the checkpoint's block roots reach, starting from the empty sponge. Every leaf passed in is absorbed, so any padding
|
|
51
|
+
* the caller includes is part of the accumulated state.
|
|
52
|
+
*/ export async function accumulateL1ToL2MessageSponge(leaves) {
|
|
53
|
+
const sponge = L1ToL2MessageSponge.empty();
|
|
54
|
+
await sponge.absorb(leaves);
|
|
55
|
+
return sponge;
|
|
56
|
+
}
|
package/dest/noir/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ABIParameter, ABIParameterVisibility, AbiErrorType, AbiNamedValue, AbiType,
|
|
1
|
+
import type { ABIParameter, ABIParameterVisibility, AbiErrorType, AbiNamedValue, AbiType, DebugFileMap, DebugInfo } from '../abi/abi.js';
|
|
2
2
|
export declare const AZTEC_PRIVATE_ATTRIBUTE = "abi_private";
|
|
3
3
|
export declare const AZTEC_PUBLIC_ATTRIBUTE = "abi_public";
|
|
4
4
|
export declare const AZTEC_UTILITY_ATTRIBUTE = "abi_utility";
|
|
@@ -61,7 +61,7 @@ export interface NoirCompiledContract {
|
|
|
61
61
|
/** The events of the contract */
|
|
62
62
|
outputs: {
|
|
63
63
|
structs: Record<string, AbiType[]>;
|
|
64
|
-
globals: Record<string,
|
|
64
|
+
globals: Record<string, AbiNamedValue[]>;
|
|
65
65
|
};
|
|
66
66
|
/** The map of file ID to the source code and path of the file. */
|
|
67
67
|
file_map: DebugFileMap;
|
|
@@ -144,4 +144,4 @@ export declare function isNoirContractCompilationArtifacts(artifact: NoirCompila
|
|
|
144
144
|
*/
|
|
145
145
|
export declare function isNoirProgramCompilationArtifacts(artifact: NoirCompilationResult): artifact is NoirProgramCompilationArtifacts;
|
|
146
146
|
export {};
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2lyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUNWLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLGFBQWEsRUFDYixPQUFPLEVBQ1AsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixlQUFPLE1BQU0sdUJBQXVCLGdCQUFnQixDQUFDO0FBQ3JELGVBQU8sTUFBTSxzQkFBc0IsZUFBZSxDQUFDO0FBQ25ELGVBQU8sTUFBTSx1QkFBdUIsZ0JBQWdCLENBQUM7QUFDckQsZUFBTyxNQUFNLHlCQUF5QixrQkFBa0IsQ0FBQztBQUN6RCxlQUFPLE1BQU0sMkJBQTJCLG9CQUFvQixDQUFDO0FBQzdELGVBQU8sTUFBTSxvQkFBb0IsYUFBYSxDQUFDO0FBRS9DLHVDQUF1QztBQUN2QyxNQUFNLFdBQVcsZUFBZTtJQUM5QixzQ0FBc0M7SUFDdEMsVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzNCLG1FQUFtRTtJQUNuRSxXQUFXLEVBQUU7UUFDWDs7V0FFRztRQUNILFFBQVEsRUFBRSxPQUFPLENBQUM7UUFDbEI7O1dBRUc7UUFDSCxVQUFVLEVBQUUsc0JBQXNCLENBQUM7S0FDcEMsR0FBRyxJQUFJLENBQUM7SUFDVCw4Q0FBOEM7SUFDOUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7Q0FDcEQ7QUFFRDs7R0FFRztBQUNILFVBQVUsaUJBQWlCO0lBQ3pCLGdDQUFnQztJQUNoQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsNkNBQTZDO0lBQzdDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQztJQUMxQiw2Q0FBNkM7SUFDN0MsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDNUIsK0JBQStCO0lBQy9CLEdBQUcsRUFBRSxlQUFlLENB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
|
package/dest/noir/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/noir/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,OAAO,EACP,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/noir/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import type { TypedDataDefinition } from 'viem';
|
|
|
8
8
|
import type { L2Block } from '../block/l2_block.js';
|
|
9
9
|
import type { L2BlockInfo } from '../block/l2_block_info.js';
|
|
10
10
|
import { type SigningContext } from '../ha-signing/index.js';
|
|
11
|
+
import { InboxBucketRef } from '../messaging/inbox_bucket.js';
|
|
11
12
|
import { BlockHeader } from '../tx/block_header.js';
|
|
12
13
|
import { TxHash } from '../tx/index.js';
|
|
13
14
|
import type { Tx } from '../tx/tx.js';
|
|
@@ -38,8 +39,6 @@ export declare class BlockProposal extends Gossipable implements Signable {
|
|
|
38
39
|
readonly blockHeader: BlockHeader;
|
|
39
40
|
/** Index of this block within the checkpoint (0-indexed) */
|
|
40
41
|
readonly indexWithinCheckpoint: IndexWithinCheckpoint;
|
|
41
|
-
/** Hash of L1 to L2 messages for this checkpoint (constant across all blocks in checkpoint) */
|
|
42
|
-
readonly inHash: Fr;
|
|
43
42
|
/** Archive root after this block is applied */
|
|
44
43
|
readonly archiveRoot: Fr;
|
|
45
44
|
/** The sequence of transactions in the block */
|
|
@@ -50,6 +49,12 @@ export declare class BlockProposal extends Gossipable implements Signable {
|
|
|
50
49
|
readonly signatureContext: CoordinationSignatureContext;
|
|
51
50
|
/** The signed transactions in the block (optional, for DA guarantees) */
|
|
52
51
|
readonly signedTxs?: SignedTxs | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Reference to the Inbox bucket this block proposes to consume, when the proposer commits to one. Validators
|
|
54
|
+
* resolve it against their own Inbox view and derive the consumed message bundle from it rather than trusting a
|
|
55
|
+
* proposer-supplied message list. Covered by the proposal signature (part of `getPayloadToSign`).
|
|
56
|
+
*/
|
|
57
|
+
readonly bucketRef?: InboxBucketRef | undefined;
|
|
53
58
|
static p2pTopic: TopicType;
|
|
54
59
|
readonly primaryType: CoordinationSignatureType;
|
|
55
60
|
private cachedSender;
|
|
@@ -58,8 +63,6 @@ export declare class BlockProposal extends Gossipable implements Signable {
|
|
|
58
63
|
blockHeader: BlockHeader,
|
|
59
64
|
/** Index of this block within the checkpoint (0-indexed) */
|
|
60
65
|
indexWithinCheckpoint: IndexWithinCheckpoint,
|
|
61
|
-
/** Hash of L1 to L2 messages for this checkpoint (constant across all blocks in checkpoint) */
|
|
62
|
-
inHash: Fr,
|
|
63
66
|
/** Archive root after this block is applied */
|
|
64
67
|
archiveRoot: Fr,
|
|
65
68
|
/** The sequence of transactions in the block */
|
|
@@ -69,7 +72,13 @@ export declare class BlockProposal extends Gossipable implements Signable {
|
|
|
69
72
|
/** The signing domain (chainId + rollupAddress) the signature is bound to */
|
|
70
73
|
signatureContext: CoordinationSignatureContext,
|
|
71
74
|
/** The signed transactions in the block (optional, for DA guarantees) */
|
|
72
|
-
signedTxs?: SignedTxs | undefined
|
|
75
|
+
signedTxs?: SignedTxs | undefined,
|
|
76
|
+
/**
|
|
77
|
+
* Reference to the Inbox bucket this block proposes to consume, when the proposer commits to one. Validators
|
|
78
|
+
* resolve it against their own Inbox view and derive the consumed message bundle from it rather than trusting a
|
|
79
|
+
* proposer-supplied message list. Covered by the proposal signature (part of `getPayloadToSign`).
|
|
80
|
+
*/
|
|
81
|
+
bucketRef?: InboxBucketRef | undefined);
|
|
73
82
|
generateP2PMessageIdentifier(): Promise<BaseBuffer32>;
|
|
74
83
|
get archive(): Fr;
|
|
75
84
|
get slotNumber(): SlotNumber;
|
|
@@ -79,7 +88,9 @@ export declare class BlockProposal extends Gossipable implements Signable {
|
|
|
79
88
|
toBlockInfo(): Omit<L2BlockInfo, 'blockNumber'>;
|
|
80
89
|
/**
|
|
81
90
|
* Get the payload to sign for this block proposal.
|
|
82
|
-
* The signature is over: blockHeader + indexWithinCheckpoint +
|
|
91
|
+
* The signature is over: blockHeader + indexWithinCheckpoint + archiveRoot + txHashes, plus the bucket reference
|
|
92
|
+
* when set. Appending only when set binds the reference to the signature so a relay cannot strip or inject it
|
|
93
|
+
* without breaking recovery.
|
|
83
94
|
*/
|
|
84
95
|
getPayloadToSign(): Buffer;
|
|
85
96
|
private getPayloadHashBuffer;
|
|
@@ -91,7 +102,7 @@ export declare class BlockProposal extends Gossipable implements Signable {
|
|
|
91
102
|
* re-signs of the same payload do not look like equivocation.
|
|
92
103
|
*/
|
|
93
104
|
getPayloadHash(): BlockProposalHash;
|
|
94
|
-
static createProposalFromSigner(blockHeader: BlockHeader, checkpointNumber: CheckpointNumber, indexWithinCheckpoint: IndexWithinCheckpoint,
|
|
105
|
+
static createProposalFromSigner(blockHeader: BlockHeader, checkpointNumber: CheckpointNumber, indexWithinCheckpoint: IndexWithinCheckpoint, archiveRoot: Fr, txHashes: TxHash[], txs: Tx[] | undefined, signatureContext: CoordinationSignatureContext, proposalSigner: (typedData: TypedDataDefinition, context: SigningContext) => Promise<Signature>, txsSigner?: (typedData: TypedDataDefinition, context: SigningContext) => Promise<Signature>, bucketRef?: InboxBucketRef): Promise<BlockProposal>;
|
|
95
106
|
/**
|
|
96
107
|
* Lazily evaluate the sender of the proposal; result is cached.
|
|
97
108
|
* If there's signedTxs, also verifies that its signing domain matches this proposal's and
|
|
@@ -131,12 +142,16 @@ export declare class BlockProposal extends Gossipable implements Signable {
|
|
|
131
142
|
totalManaUsed: bigint;
|
|
132
143
|
};
|
|
133
144
|
indexWithinCheckpoint: IndexWithinCheckpoint;
|
|
134
|
-
inHash: `0x${string}`;
|
|
135
145
|
archiveRoot: `0x${string}`;
|
|
136
146
|
signature: `0x${string}`;
|
|
137
147
|
txHashes: `0x${string}`[];
|
|
138
148
|
chainId: number;
|
|
139
149
|
rollupAddress: `0x${string}`;
|
|
150
|
+
bucketRef: {
|
|
151
|
+
bucketSeq: string;
|
|
152
|
+
bucketTimestamp: string;
|
|
153
|
+
inboxRollingHash: `0x${string}`;
|
|
154
|
+
} | undefined;
|
|
140
155
|
};
|
|
141
156
|
/**
|
|
142
157
|
* Check if this proposal matches the given block.
|
|
@@ -151,4 +166,4 @@ export declare class BlockProposal extends Gossipable implements Signable {
|
|
|
151
166
|
*/
|
|
152
167
|
withoutSignedTxs(): BlockProposal;
|
|
153
168
|
}
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWwuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wMnAvYmxvY2tfcHJvcG9zYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsS0FBSyxnQkFBZ0IsRUFDckIscUJBQXFCLEVBQ3JCLFVBQVUsRUFDWCxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSw2QkFBNkIsQ0FBQztBQUU5RSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRCxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQVksS0FBSyxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxLQUFLLDRCQUE0QixFQUNqQyxLQUFLLHlC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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_proposal.d.ts","sourceRoot":"","sources":["../../src/p2p/block_proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,qBAAqB,EACrB,UAAU,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,YAAY,EAAY,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAE9B,KAAK,QAAQ,EAMd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;CACzC,CAAC;AAEF;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,UAAW,YAAW,QAAQ;IAQ7D,uEAAuE;aACvD,WAAW,EAAE,WAAW;IAExC,4DAA4D;aAC5C,qBAAqB,EAAE,qBAAqB;IAE5D,+
|
|
1
|
+
{"version":3,"file":"block_proposal.d.ts","sourceRoot":"","sources":["../../src/p2p/block_proposal.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { Signature } from '@aztec/foundation/eth-signature';
|
|
|
6
6
|
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
7
7
|
import { MAX_TXS_PER_BLOCK } from '../deserialization/index.js';
|
|
8
8
|
import { DutyType } from '../ha-signing/index.js';
|
|
9
|
+
import { InboxBucketRef } from '../messaging/inbox_bucket.js';
|
|
9
10
|
import { BlockHeader } from '../tx/block_header.js';
|
|
10
11
|
import { TxHash } from '../tx/index.js';
|
|
11
12
|
import { Gossipable } from './gossipable.js';
|
|
@@ -19,17 +20,21 @@ import { TopicType } from './topic_type.js';
|
|
|
19
20
|
*/ export class BlockProposal extends Gossipable {
|
|
20
21
|
blockHeader;
|
|
21
22
|
indexWithinCheckpoint;
|
|
22
|
-
inHash;
|
|
23
23
|
archiveRoot;
|
|
24
24
|
txHashes;
|
|
25
25
|
signature;
|
|
26
26
|
signatureContext;
|
|
27
27
|
signedTxs;
|
|
28
|
+
bucketRef;
|
|
28
29
|
static p2pTopic = TopicType.block_proposal;
|
|
29
30
|
primaryType;
|
|
30
31
|
cachedSender;
|
|
31
|
-
constructor(/** The per-block header containing block state and global variables */ blockHeader, /** Index of this block within the checkpoint (0-indexed) */ indexWithinCheckpoint, /**
|
|
32
|
-
|
|
32
|
+
constructor(/** The per-block header containing block state and global variables */ blockHeader, /** Index of this block within the checkpoint (0-indexed) */ indexWithinCheckpoint, /** Archive root after this block is applied */ archiveRoot, /** The sequence of transactions in the block */ txHashes, /** The proposer's signature over the block data */ signature, /** The signing domain (chainId + rollupAddress) the signature is bound to */ signatureContext, /** The signed transactions in the block (optional, for DA guarantees) */ signedTxs, /**
|
|
33
|
+
* Reference to the Inbox bucket this block proposes to consume, when the proposer commits to one. Validators
|
|
34
|
+
* resolve it against their own Inbox view and derive the consumed message bundle from it rather than trusting a
|
|
35
|
+
* proposer-supplied message list. Covered by the proposal signature (part of `getPayloadToSign`).
|
|
36
|
+
*/ bucketRef){
|
|
37
|
+
super(), this.blockHeader = blockHeader, this.indexWithinCheckpoint = indexWithinCheckpoint, this.archiveRoot = archiveRoot, this.txHashes = txHashes, this.signature = signature, this.signatureContext = signatureContext, this.signedTxs = signedTxs, this.bucketRef = bucketRef, this.primaryType = 'BlockProposal', this.cachedSender = undefined;
|
|
33
38
|
}
|
|
34
39
|
generateP2PMessageIdentifier() {
|
|
35
40
|
return Promise.resolve(new Buffer32(this.getPayloadHashBuffer()));
|
|
@@ -57,15 +62,19 @@ import { TopicType } from './topic_type.js';
|
|
|
57
62
|
}
|
|
58
63
|
/**
|
|
59
64
|
* Get the payload to sign for this block proposal.
|
|
60
|
-
* The signature is over: blockHeader + indexWithinCheckpoint +
|
|
65
|
+
* The signature is over: blockHeader + indexWithinCheckpoint + archiveRoot + txHashes, plus the bucket reference
|
|
66
|
+
* when set. Appending only when set binds the reference to the signature so a relay cannot strip or inject it
|
|
67
|
+
* without breaking recovery.
|
|
61
68
|
*/ getPayloadToSign() {
|
|
62
69
|
return serializeToBuffer([
|
|
63
70
|
this.blockHeader,
|
|
64
71
|
this.indexWithinCheckpoint,
|
|
65
|
-
this.inHash,
|
|
66
72
|
this.archiveRoot,
|
|
67
73
|
this.txHashes.length,
|
|
68
|
-
this.txHashes
|
|
74
|
+
this.txHashes,
|
|
75
|
+
...this.bucketRef ? [
|
|
76
|
+
this.bucketRef
|
|
77
|
+
] : []
|
|
69
78
|
]);
|
|
70
79
|
}
|
|
71
80
|
getPayloadHashBuffer() {
|
|
@@ -80,9 +89,9 @@ import { TopicType } from './topic_type.js';
|
|
|
80
89
|
*/ getPayloadHash() {
|
|
81
90
|
return BlockProposalHash.fromBuffer(this.getPayloadHashBuffer());
|
|
82
91
|
}
|
|
83
|
-
static async createProposalFromSigner(blockHeader, checkpointNumber, indexWithinCheckpoint,
|
|
92
|
+
static async createProposalFromSigner(blockHeader, checkpointNumber, indexWithinCheckpoint, archiveRoot, txHashes, txs, signatureContext, proposalSigner, txsSigner, bucketRef) {
|
|
84
93
|
// Create a temporary proposal to get the payload to sign
|
|
85
|
-
const tempProposal = new BlockProposal(blockHeader, indexWithinCheckpoint,
|
|
94
|
+
const tempProposal = new BlockProposal(blockHeader, indexWithinCheckpoint, archiveRoot, txHashes, Signature.empty(), signatureContext, undefined, bucketRef);
|
|
86
95
|
// Create the block signing context
|
|
87
96
|
const blockContext = {
|
|
88
97
|
slot: blockHeader.globalVariables.slotNumber,
|
|
@@ -104,7 +113,7 @@ import { TopicType } from './topic_type.js';
|
|
|
104
113
|
}
|
|
105
114
|
signedTxs = await SignedTxs.createFromSigner(txs, signatureContext, (typedData)=>txsSigner(typedData, txsSigningContext));
|
|
106
115
|
}
|
|
107
|
-
return new BlockProposal(blockHeader, indexWithinCheckpoint,
|
|
116
|
+
return new BlockProposal(blockHeader, indexWithinCheckpoint, archiveRoot, txHashes, sig, signatureContext, signedTxs, bucketRef);
|
|
108
117
|
}
|
|
109
118
|
/**
|
|
110
119
|
* Lazily evaluate the sender of the proposal; result is cached.
|
|
@@ -137,7 +146,6 @@ import { TopicType } from './topic_type.js';
|
|
|
137
146
|
const buffer = [
|
|
138
147
|
this.blockHeader,
|
|
139
148
|
this.indexWithinCheckpoint,
|
|
140
|
-
this.inHash,
|
|
141
149
|
this.archiveRoot,
|
|
142
150
|
this.signature,
|
|
143
151
|
serializeCoordinationSignatureContext(this.signatureContext),
|
|
@@ -150,13 +158,18 @@ import { TopicType } from './topic_type.js';
|
|
|
150
158
|
} else {
|
|
151
159
|
buffer.push(0); // hasSignedTxs = false
|
|
152
160
|
}
|
|
161
|
+
// Optional bucket-reference tail. Appended only when set, so a proposal without a reference
|
|
162
|
+
// serializes without the tail and a decoder that reaches EOF reads it as unset.
|
|
163
|
+
if (this.bucketRef) {
|
|
164
|
+
buffer.push(1); // hasBucketRef = true
|
|
165
|
+
buffer.push(this.bucketRef.toBuffer());
|
|
166
|
+
}
|
|
153
167
|
return serializeToBuffer(buffer);
|
|
154
168
|
}
|
|
155
169
|
static fromBuffer(buf) {
|
|
156
170
|
const reader = BufferReader.asReader(buf);
|
|
157
171
|
const blockHeader = reader.readObject(BlockHeader);
|
|
158
172
|
const indexWithinCheckpoint = IndexWithinCheckpoint(reader.readNumber());
|
|
159
|
-
const inHash = reader.readObject(Fr);
|
|
160
173
|
const archiveRoot = reader.readObject(Fr);
|
|
161
174
|
const signature = reader.readObject(Signature);
|
|
162
175
|
const signatureContext = readCoordinationSignatureContext(reader);
|
|
@@ -165,23 +178,32 @@ import { TopicType } from './topic_type.js';
|
|
|
165
178
|
throw new Error(`txHashes count ${txHashCount} exceeds maximum ${MAX_TXS_PER_BLOCK}`);
|
|
166
179
|
}
|
|
167
180
|
const txHashes = reader.readArray(txHashCount, TxHash);
|
|
181
|
+
let signedTxs;
|
|
168
182
|
if (!reader.isEmpty()) {
|
|
169
183
|
const hasSignedTxs = reader.readNumber();
|
|
170
184
|
if (hasSignedTxs) {
|
|
171
|
-
|
|
172
|
-
|
|
185
|
+
signedTxs = SignedTxs.fromBuffer(reader);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Optional bucket-reference tail. A buffer that ends after the signedTxs flag decodes as
|
|
189
|
+
// "no reference", so proposals written without the tail round-trip cleanly.
|
|
190
|
+
let bucketRef;
|
|
191
|
+
if (!reader.isEmpty()) {
|
|
192
|
+
const hasBucketRef = reader.readNumber();
|
|
193
|
+
if (hasBucketRef) {
|
|
194
|
+
bucketRef = InboxBucketRef.fromBuffer(reader);
|
|
173
195
|
}
|
|
174
196
|
}
|
|
175
|
-
return new BlockProposal(blockHeader, indexWithinCheckpoint,
|
|
197
|
+
return new BlockProposal(blockHeader, indexWithinCheckpoint, archiveRoot, txHashes, signature, signatureContext, signedTxs, bucketRef);
|
|
176
198
|
}
|
|
177
199
|
getSize() {
|
|
178
|
-
return this.blockHeader.getSize() + 4 /* indexWithinCheckpoint */ + this.
|
|
200
|
+
return this.blockHeader.getSize() + 4 /* indexWithinCheckpoint */ + this.archiveRoot.size + this.signature.getSize() + 4 /* chainId */ + 20 /* rollupAddress */ + 4 /* txHashes.length */ + this.txHashes.length * TxHash.SIZE + 4 /* hasSignedTxs flag */ + (this.signedTxs ? this.signedTxs.getSize() : 0) + (this.bucketRef ? 4 /* hasBucketRef flag */ + this.bucketRef.getSize() : 0);
|
|
179
201
|
}
|
|
180
202
|
static empty() {
|
|
181
|
-
return new BlockProposal(BlockHeader.empty(), IndexWithinCheckpoint(0), Fr.ZERO,
|
|
203
|
+
return new BlockProposal(BlockHeader.empty(), IndexWithinCheckpoint(0), Fr.ZERO, [], Signature.empty(), EMPTY_COORDINATION_SIGNATURE_CONTEXT);
|
|
182
204
|
}
|
|
183
205
|
static random() {
|
|
184
|
-
return new BlockProposal(BlockHeader.random(), IndexWithinCheckpoint(Math.floor(Math.random() * 5)), Fr.random(),
|
|
206
|
+
return new BlockProposal(BlockHeader.random(), IndexWithinCheckpoint(Math.floor(Math.random() * 5)), Fr.random(), [
|
|
185
207
|
TxHash.random(),
|
|
186
208
|
TxHash.random()
|
|
187
209
|
], Signature.random(), EMPTY_COORDINATION_SIGNATURE_CONTEXT);
|
|
@@ -190,12 +212,12 @@ import { TopicType } from './topic_type.js';
|
|
|
190
212
|
return {
|
|
191
213
|
blockHeader: this.blockHeader.toInspect(),
|
|
192
214
|
indexWithinCheckpoint: this.indexWithinCheckpoint,
|
|
193
|
-
inHash: this.inHash.toString(),
|
|
194
215
|
archiveRoot: this.archiveRoot.toString(),
|
|
195
216
|
signature: this.signature.toString(),
|
|
196
217
|
txHashes: this.txHashes.map((h)=>h.toString()),
|
|
197
218
|
chainId: this.signatureContext.chainId,
|
|
198
|
-
rollupAddress: this.signatureContext.rollupAddress.toString()
|
|
219
|
+
rollupAddress: this.signatureContext.rollupAddress.toString(),
|
|
220
|
+
bucketRef: this.bucketRef?.toInspect()
|
|
199
221
|
};
|
|
200
222
|
}
|
|
201
223
|
/**
|
|
@@ -210,6 +232,6 @@ import { TopicType } from './topic_type.js';
|
|
|
210
232
|
* Returns a copy of this proposal without signedTxs.
|
|
211
233
|
* Used when storing proposals in attestation pool to avoid storing full tx data.
|
|
212
234
|
*/ withoutSignedTxs() {
|
|
213
|
-
return new BlockProposal(this.blockHeader, this.indexWithinCheckpoint, this.
|
|
235
|
+
return new BlockProposal(this.blockHeader, this.indexWithinCheckpoint, this.archiveRoot, this.txHashes, this.signature, this.signatureContext, undefined, this.bucketRef);
|
|
214
236
|
}
|
|
215
237
|
}
|