@aztec/stdlib 4.0.0-nightly.20260107 → 4.0.0-nightly.20260110
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/contract_artifact.d.ts +2 -2
- package/dest/abi/contract_artifact.d.ts.map +1 -1
- package/dest/abi/contract_artifact.js +1 -1
- package/dest/block/l2_block.d.ts +1 -1
- package/dest/block/l2_block.d.ts.map +1 -1
- package/dest/block/l2_block.js +4 -2
- package/dest/block/l2_block_code_to_purge.d.ts +2 -3
- package/dest/block/l2_block_code_to_purge.d.ts.map +1 -1
- package/dest/block/l2_block_code_to_purge.js +2 -8
- package/dest/block/l2_block_header.d.ts +8 -12
- package/dest/block/l2_block_header.d.ts.map +1 -1
- package/dest/block/l2_block_header.js +22 -17
- package/dest/interfaces/aztec-node.d.ts +10 -9
- package/dest/interfaces/aztec-node.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.js +3 -3
- package/dest/interfaces/proving-job.d.ts +4 -4
- package/dest/interfaces/proving-job.d.ts.map +1 -1
- package/dest/interfaces/proving-job.js +1 -7
- package/dest/interfaces/server_circuit_prover.d.ts +4 -3
- package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
- package/dest/messaging/in_hash.d.ts +4 -2
- package/dest/messaging/in_hash.d.ts.map +1 -1
- package/dest/messaging/in_hash.js +3 -1
- package/dest/messaging/l2_to_l1_membership.d.ts +88 -6
- package/dest/messaging/l2_to_l1_membership.d.ts.map +1 -1
- package/dest/messaging/l2_to_l1_membership.js +158 -42
- package/dest/messaging/out_hash.d.ts +2 -1
- package/dest/messaging/out_hash.d.ts.map +1 -1
- package/dest/messaging/out_hash.js +13 -4
- package/dest/p2p/block_attestation.d.ts +3 -6
- package/dest/p2p/block_attestation.d.ts.map +1 -1
- package/dest/p2p/consensus_payload.d.ts +3 -6
- package/dest/p2p/consensus_payload.d.ts.map +1 -1
- package/dest/p2p/gossipable.d.ts +4 -3
- package/dest/p2p/gossipable.d.ts.map +1 -1
- package/dest/p2p/gossipable.js +16 -5
- package/dest/rollup/checkpoint_header.d.ts +11 -12
- package/dest/rollup/checkpoint_header.d.ts.map +1 -1
- package/dest/rollup/checkpoint_header.js +26 -18
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +6 -1
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_rollup_public_inputs.js +6 -2
- package/dest/rollup/root_rollup_public_inputs.d.ts +8 -3
- package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/root_rollup_public_inputs.js +6 -3
- package/dest/tests/factories.d.ts +3 -7
- package/dest/tests/factories.d.ts.map +1 -1
- package/dest/tests/factories.js +6 -11
- package/dest/tests/mocks.d.ts +5 -2
- package/dest/tests/mocks.d.ts.map +1 -1
- package/dest/tests/mocks.js +5 -6
- package/dest/tx/global_variable_builder.d.ts +2 -2
- package/dest/tx/global_variable_builder.d.ts.map +1 -1
- package/dest/tx/index.d.ts +1 -2
- package/dest/tx/index.d.ts.map +1 -1
- package/dest/tx/index.js +0 -1
- package/dest/tx/tx.d.ts +1 -1
- package/dest/tx/tx.d.ts.map +1 -1
- package/dest/tx/tx.js +3 -1
- package/dest/tx/tx_execution_request.d.ts +1 -1
- package/dest/tx/tx_execution_request.d.ts.map +1 -1
- package/dest/tx/tx_execution_request.js +3 -1
- package/package.json +8 -8
- package/src/abi/contract_artifact.ts +10 -10
- package/src/block/l2_block.ts +3 -2
- package/src/block/l2_block_code_to_purge.ts +3 -11
- package/src/block/l2_block_header.ts +26 -17
- package/src/interfaces/aztec-node.ts +13 -10
- package/src/interfaces/proving-job.ts +2 -11
- package/src/interfaces/server_circuit_prover.ts +3 -2
- package/src/messaging/in_hash.ts +3 -1
- package/src/messaging/l2_to_l1_membership.ts +176 -52
- package/src/messaging/out_hash.ts +17 -7
- package/src/p2p/gossipable.ts +14 -4
- package/src/rollup/checkpoint_header.ts +30 -20
- package/src/rollup/checkpoint_rollup_public_inputs.ts +6 -0
- package/src/rollup/root_rollup_public_inputs.ts +6 -0
- package/src/tests/factories.ts +11 -15
- package/src/tests/mocks.ts +20 -14
- package/src/tx/global_variable_builder.ts +1 -1
- package/src/tx/index.ts +0 -1
- package/src/tx/tx.ts +2 -0
- package/src/tx/tx_execution_request.ts +2 -0
- package/dest/tx/content_commitment.d.ts +0 -49
- package/dest/tx/content_commitment.d.ts.map +0 -1
- package/dest/tx/content_commitment.js +0 -90
- package/src/tx/content_commitment.ts +0 -113
|
@@ -14,7 +14,6 @@ import { z } from 'zod';
|
|
|
14
14
|
import { AztecAddress } from '../aztec-address/index.js';
|
|
15
15
|
import { GasFees } from '../gas/index.js';
|
|
16
16
|
import { schemas } from '../schemas/index.js';
|
|
17
|
-
import { ContentCommitment } from '../tx/content_commitment.js';
|
|
18
17
|
import type { UInt64 } from '../types/shared.js';
|
|
19
18
|
|
|
20
19
|
/**
|
|
@@ -27,8 +26,10 @@ export class CheckpointHeader {
|
|
|
27
26
|
public lastArchiveRoot: Fr,
|
|
28
27
|
/** Hash of the headers of all blocks in this checkpoint. */
|
|
29
28
|
public blockHeadersHash: Fr,
|
|
30
|
-
/**
|
|
31
|
-
public
|
|
29
|
+
/** Hash of the blobs in the checkpoint. */
|
|
30
|
+
public blobsHash: Fr,
|
|
31
|
+
/** Root of the l1 to l2 messages subtree. */
|
|
32
|
+
public inHash: Fr,
|
|
32
33
|
/** Slot number of the L2 block */
|
|
33
34
|
public slotNumber: SlotNumber,
|
|
34
35
|
/** Timestamp of the L2 block. */
|
|
@@ -48,7 +49,8 @@ export class CheckpointHeader {
|
|
|
48
49
|
.object({
|
|
49
50
|
lastArchiveRoot: schemas.Fr,
|
|
50
51
|
blockHeadersHash: schemas.Fr,
|
|
51
|
-
|
|
52
|
+
blobsHash: schemas.Fr,
|
|
53
|
+
inHash: schemas.Fr,
|
|
52
54
|
slotNumber: schemas.SlotNumber,
|
|
53
55
|
timestamp: schemas.BigInt,
|
|
54
56
|
coinbase: schemas.EthAddress,
|
|
@@ -63,7 +65,8 @@ export class CheckpointHeader {
|
|
|
63
65
|
return [
|
|
64
66
|
fields.lastArchiveRoot,
|
|
65
67
|
fields.blockHeadersHash,
|
|
66
|
-
fields.
|
|
68
|
+
fields.blobsHash,
|
|
69
|
+
fields.inHash,
|
|
67
70
|
fields.slotNumber,
|
|
68
71
|
fields.timestamp,
|
|
69
72
|
fields.coinbase,
|
|
@@ -83,7 +86,8 @@ export class CheckpointHeader {
|
|
|
83
86
|
return new CheckpointHeader(
|
|
84
87
|
reader.readObject(Fr),
|
|
85
88
|
reader.readObject(Fr),
|
|
86
|
-
reader.readObject(
|
|
89
|
+
reader.readObject(Fr),
|
|
90
|
+
reader.readObject(Fr),
|
|
87
91
|
SlotNumber(Fr.fromBuffer(reader).toNumber()),
|
|
88
92
|
reader.readUInt64(),
|
|
89
93
|
reader.readObject(EthAddress),
|
|
@@ -97,7 +101,8 @@ export class CheckpointHeader {
|
|
|
97
101
|
return (
|
|
98
102
|
this.lastArchiveRoot.equals(other.lastArchiveRoot) &&
|
|
99
103
|
this.blockHeadersHash.equals(other.blockHeadersHash) &&
|
|
100
|
-
this.
|
|
104
|
+
this.blobsHash.equals(other.blobsHash) &&
|
|
105
|
+
this.inHash.equals(other.inHash) &&
|
|
101
106
|
this.slotNumber === other.slotNumber &&
|
|
102
107
|
this.timestamp === other.timestamp &&
|
|
103
108
|
this.coinbase.equals(other.coinbase) &&
|
|
@@ -112,7 +117,8 @@ export class CheckpointHeader {
|
|
|
112
117
|
return serializeToBuffer([
|
|
113
118
|
this.lastArchiveRoot,
|
|
114
119
|
this.blockHeadersHash,
|
|
115
|
-
this.
|
|
120
|
+
this.blobsHash,
|
|
121
|
+
this.inHash,
|
|
116
122
|
new Fr(this.slotNumber),
|
|
117
123
|
bigintToUInt64BE(this.timestamp),
|
|
118
124
|
this.coinbase,
|
|
@@ -130,7 +136,8 @@ export class CheckpointHeader {
|
|
|
130
136
|
return CheckpointHeader.from({
|
|
131
137
|
lastArchiveRoot: Fr.ZERO,
|
|
132
138
|
blockHeadersHash: Fr.ZERO,
|
|
133
|
-
|
|
139
|
+
blobsHash: Fr.ZERO,
|
|
140
|
+
inHash: Fr.ZERO,
|
|
134
141
|
slotNumber: SlotNumber.ZERO,
|
|
135
142
|
timestamp: 0n,
|
|
136
143
|
coinbase: EthAddress.ZERO,
|
|
@@ -141,13 +148,12 @@ export class CheckpointHeader {
|
|
|
141
148
|
});
|
|
142
149
|
}
|
|
143
150
|
|
|
144
|
-
static random(
|
|
145
|
-
overrides: Partial<FieldsOf<CheckpointHeader>> & Partial<FieldsOf<ContentCommitment>> = {},
|
|
146
|
-
): CheckpointHeader {
|
|
151
|
+
static random(overrides: Partial<FieldsOf<CheckpointHeader>> = {}): CheckpointHeader {
|
|
147
152
|
return CheckpointHeader.from({
|
|
148
153
|
lastArchiveRoot: Fr.random(),
|
|
149
154
|
blockHeadersHash: Fr.random(),
|
|
150
|
-
|
|
155
|
+
blobsHash: Fr.random(),
|
|
156
|
+
inHash: Fr.random(),
|
|
151
157
|
slotNumber: SlotNumber(Math.floor(Math.random() * 1000) + 1),
|
|
152
158
|
timestamp: BigInt(Math.floor(Date.now() / 1000)),
|
|
153
159
|
coinbase: EthAddress.random(),
|
|
@@ -162,7 +168,8 @@ export class CheckpointHeader {
|
|
|
162
168
|
return (
|
|
163
169
|
this.lastArchiveRoot.isZero() &&
|
|
164
170
|
this.blockHeadersHash.isZero() &&
|
|
165
|
-
this.
|
|
171
|
+
this.blobsHash.isZero() &&
|
|
172
|
+
this.inHash.isZero() &&
|
|
166
173
|
this.slotNumber === 0 &&
|
|
167
174
|
this.timestamp === 0n &&
|
|
168
175
|
this.coinbase.isZero() &&
|
|
@@ -188,7 +195,8 @@ export class CheckpointHeader {
|
|
|
188
195
|
return new CheckpointHeader(
|
|
189
196
|
Fr.fromString(header.lastArchiveRoot),
|
|
190
197
|
Fr.fromString(header.blockHeadersHash),
|
|
191
|
-
|
|
198
|
+
Fr.fromString(header.blobsHash),
|
|
199
|
+
Fr.fromString(header.inHash),
|
|
192
200
|
SlotNumber.fromBigInt(header.slotNumber),
|
|
193
201
|
header.timestamp,
|
|
194
202
|
new EthAddress(hexToBuffer(header.coinbase)),
|
|
@@ -210,7 +218,8 @@ export class CheckpointHeader {
|
|
|
210
218
|
return {
|
|
211
219
|
lastArchiveRoot: this.lastArchiveRoot.toString(),
|
|
212
220
|
blockHeadersHash: this.blockHeadersHash.toString(),
|
|
213
|
-
|
|
221
|
+
blobsHash: this.blobsHash.toString(),
|
|
222
|
+
inHash: this.inHash.toString(),
|
|
214
223
|
slotNumber: BigInt(this.slotNumber),
|
|
215
224
|
timestamp: this.timestamp,
|
|
216
225
|
coinbase: this.coinbase.toString(),
|
|
@@ -227,7 +236,8 @@ export class CheckpointHeader {
|
|
|
227
236
|
return {
|
|
228
237
|
lastArchive: this.lastArchiveRoot.toString(),
|
|
229
238
|
blockHeadersHash: this.blockHeadersHash.toString(),
|
|
230
|
-
|
|
239
|
+
blobsHash: this.blobsHash.toString(),
|
|
240
|
+
inHash: this.inHash.toString(),
|
|
231
241
|
slotNumber: this.slotNumber,
|
|
232
242
|
timestamp: this.timestamp,
|
|
233
243
|
coinbase: this.coinbase.toString(),
|
|
@@ -238,16 +248,16 @@ export class CheckpointHeader {
|
|
|
238
248
|
}
|
|
239
249
|
|
|
240
250
|
[inspect.custom]() {
|
|
241
|
-
const gasfees = `da:${this.gasFees.feePerDaGas}, l2:${this.gasFees.feePerL2Gas}`;
|
|
242
251
|
return `Header {
|
|
243
252
|
lastArchiveRoot: ${this.lastArchiveRoot.toString()},
|
|
244
253
|
blockHeadersHash: ${this.blockHeadersHash.toString()},
|
|
245
|
-
|
|
254
|
+
blobsHash: ${inspect(this.blobsHash)},
|
|
255
|
+
inHash: ${inspect(this.inHash)},
|
|
246
256
|
slotNumber: ${this.slotNumber},
|
|
247
257
|
timestamp: ${this.timestamp},
|
|
248
258
|
coinbase: ${this.coinbase.toString()},
|
|
249
259
|
feeRecipient: ${this.feeRecipient.toString()},
|
|
250
|
-
gasFees:
|
|
260
|
+
gasFees: { da:${this.gasFees.feePerDaGas}, l2:${this.gasFees.feePerL2Gas} },
|
|
251
261
|
totalManaUsed: ${this.totalManaUsed.toBigInt()},
|
|
252
262
|
}`;
|
|
253
263
|
}
|
|
@@ -31,6 +31,10 @@ export class CheckpointRollupPublicInputs {
|
|
|
31
31
|
* The hashes of the headers of the constituent checkpoints.
|
|
32
32
|
*/
|
|
33
33
|
public checkpointHeaderHashes: Tuple<Fr, typeof AZTEC_MAX_EPOCH_DURATION>,
|
|
34
|
+
/**
|
|
35
|
+
* The `out_hash` values from all checkpoints in this checkpoint range.
|
|
36
|
+
*/
|
|
37
|
+
public outHashes: Tuple<Fr, typeof AZTEC_MAX_EPOCH_DURATION>,
|
|
34
38
|
/**
|
|
35
39
|
* The summed transaction fees and recipients of the constituent checkpoints.
|
|
36
40
|
*/
|
|
@@ -56,6 +60,7 @@ export class CheckpointRollupPublicInputs {
|
|
|
56
60
|
reader.readObject(AppendOnlyTreeSnapshot),
|
|
57
61
|
reader.readObject(AppendOnlyTreeSnapshot),
|
|
58
62
|
reader.readArray(AZTEC_MAX_EPOCH_DURATION, Fr),
|
|
63
|
+
reader.readArray(AZTEC_MAX_EPOCH_DURATION, Fr),
|
|
59
64
|
reader.readArray(AZTEC_MAX_EPOCH_DURATION, FeeRecipient),
|
|
60
65
|
reader.readObject(BlobAccumulator),
|
|
61
66
|
reader.readObject(BlobAccumulator),
|
|
@@ -69,6 +74,7 @@ export class CheckpointRollupPublicInputs {
|
|
|
69
74
|
this.previousArchive,
|
|
70
75
|
this.newArchive,
|
|
71
76
|
this.checkpointHeaderHashes,
|
|
77
|
+
this.outHashes,
|
|
72
78
|
this.fees,
|
|
73
79
|
this.startBlobAccumulator,
|
|
74
80
|
this.endBlobAccumulator,
|
|
@@ -21,6 +21,9 @@ export class RootRollupPublicInputs {
|
|
|
21
21
|
public previousArchiveRoot: Fr,
|
|
22
22
|
/** Root of the archive tree after this rollup is processed */
|
|
23
23
|
public endArchiveRoot: Fr,
|
|
24
|
+
/** Root of the unbalanced merkle tree consisting of the `out_hash` values from all checkpoints in this rollup. */
|
|
25
|
+
public outHash: Fr,
|
|
26
|
+
/** Hashes of checkpoint headers for this rollup. */
|
|
24
27
|
public checkpointHeaderHashes: Tuple<Fr, typeof AZTEC_MAX_EPOCH_DURATION>,
|
|
25
28
|
public fees: Tuple<FeeRecipient, typeof AZTEC_MAX_EPOCH_DURATION>,
|
|
26
29
|
public constants: EpochConstantData,
|
|
@@ -31,6 +34,7 @@ export class RootRollupPublicInputs {
|
|
|
31
34
|
return [
|
|
32
35
|
fields.previousArchiveRoot,
|
|
33
36
|
fields.endArchiveRoot,
|
|
37
|
+
fields.outHash,
|
|
34
38
|
fields.checkpointHeaderHashes,
|
|
35
39
|
fields.fees,
|
|
36
40
|
fields.constants,
|
|
@@ -58,6 +62,7 @@ export class RootRollupPublicInputs {
|
|
|
58
62
|
public static fromBuffer(buffer: Buffer | BufferReader): RootRollupPublicInputs {
|
|
59
63
|
const reader = BufferReader.asReader(buffer);
|
|
60
64
|
return new RootRollupPublicInputs(
|
|
65
|
+
Fr.fromBuffer(reader),
|
|
61
66
|
Fr.fromBuffer(reader),
|
|
62
67
|
Fr.fromBuffer(reader),
|
|
63
68
|
reader.readArray(AZTEC_MAX_EPOCH_DURATION, Fr),
|
|
@@ -88,6 +93,7 @@ export class RootRollupPublicInputs {
|
|
|
88
93
|
/** Creates a random instance. Used for testing only - will not prove/verify. */
|
|
89
94
|
static random() {
|
|
90
95
|
return new RootRollupPublicInputs(
|
|
96
|
+
Fr.random(),
|
|
91
97
|
Fr.random(),
|
|
92
98
|
Fr.random(),
|
|
93
99
|
makeTuple(AZTEC_MAX_EPOCH_DURATION, Fr.random),
|
package/src/tests/factories.ts
CHANGED
|
@@ -164,7 +164,6 @@ import { NullifierLeaf, NullifierLeafPreimage } from '../trees/nullifier_leaf.js
|
|
|
164
164
|
import { PublicDataTreeLeaf, PublicDataTreeLeafPreimage } from '../trees/public_data_leaf.js';
|
|
165
165
|
import { BlockHeader } from '../tx/block_header.js';
|
|
166
166
|
import { CallContext } from '../tx/call_context.js';
|
|
167
|
-
import { ContentCommitment } from '../tx/content_commitment.js';
|
|
168
167
|
import { FunctionData } from '../tx/function_data.js';
|
|
169
168
|
import { GlobalVariables } from '../tx/global_variables.js';
|
|
170
169
|
import { PartialStateReference } from '../tx/partial_state_reference.js';
|
|
@@ -851,10 +850,11 @@ export function makeCheckpointRollupPublicInputs(seed = 0) {
|
|
|
851
850
|
makeAppendOnlyTreeSnapshot(seed + 0x100),
|
|
852
851
|
makeAppendOnlyTreeSnapshot(seed + 0x200),
|
|
853
852
|
makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x300),
|
|
854
|
-
makeTuple(AZTEC_MAX_EPOCH_DURATION, () =>
|
|
855
|
-
|
|
853
|
+
makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x400),
|
|
854
|
+
makeTuple(AZTEC_MAX_EPOCH_DURATION, () => makeFeeRecipient(seed), 0x500),
|
|
856
855
|
makeBlobAccumulator(seed + 0x600),
|
|
857
|
-
|
|
856
|
+
makeBlobAccumulator(seed + 0x700),
|
|
857
|
+
makeFinalBlobBatchingChallenges(seed + 0x800),
|
|
858
858
|
);
|
|
859
859
|
}
|
|
860
860
|
|
|
@@ -886,20 +886,14 @@ export function makeRootRollupPublicInputs(seed = 0): RootRollupPublicInputs {
|
|
|
886
886
|
return new RootRollupPublicInputs(
|
|
887
887
|
fr(seed + 0x100),
|
|
888
888
|
fr(seed + 0x200),
|
|
889
|
-
|
|
889
|
+
fr(seed + 0x300),
|
|
890
|
+
makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x400),
|
|
890
891
|
makeTuple(AZTEC_MAX_EPOCH_DURATION, () => makeFeeRecipient(seed), 0x500),
|
|
891
892
|
makeEpochConstantData(seed + 0x600),
|
|
892
893
|
makeFinalBlobAccumulator(seed + 0x700),
|
|
893
894
|
);
|
|
894
895
|
}
|
|
895
896
|
|
|
896
|
-
/**
|
|
897
|
-
* Makes content commitment
|
|
898
|
-
*/
|
|
899
|
-
export function makeContentCommitment(seed = 0): ContentCommitment {
|
|
900
|
-
return new ContentCommitment(fr(seed + 0x100), fr(seed + 0x200), fr(seed + 0x300));
|
|
901
|
-
}
|
|
902
|
-
|
|
903
897
|
export function makeBlockHeader(
|
|
904
898
|
seed = 0,
|
|
905
899
|
overrides: Partial<FieldsOf<Omit<BlockHeader, 'globalVariables'>>> & Partial<FieldsOf<GlobalVariables>> = {},
|
|
@@ -923,7 +917,8 @@ export function makeL2BlockHeader(
|
|
|
923
917
|
) {
|
|
924
918
|
return new L2BlockHeader(
|
|
925
919
|
makeAppendOnlyTreeSnapshot(seed + 0x100),
|
|
926
|
-
overrides?.
|
|
920
|
+
overrides?.blobsHash ?? fr(seed + 0x200),
|
|
921
|
+
overrides?.inHash ?? fr(seed + 0x300),
|
|
927
922
|
overrides?.state ?? makeStateReference(seed + 0x600),
|
|
928
923
|
makeGlobalVariables((seed += 0x700), {
|
|
929
924
|
...(blockNumber !== undefined ? { blockNumber: BlockNumber(blockNumber) } : {}),
|
|
@@ -940,7 +935,8 @@ export function makeCheckpointHeader(seed = 0) {
|
|
|
940
935
|
return CheckpointHeader.from({
|
|
941
936
|
lastArchiveRoot: fr(seed + 0x100),
|
|
942
937
|
blockHeadersHash: fr(seed + 0x150),
|
|
943
|
-
|
|
938
|
+
blobsHash: fr(seed + 0x200),
|
|
939
|
+
inHash: fr(seed + 0x210),
|
|
944
940
|
slotNumber: SlotNumber(seed + 0x300),
|
|
945
941
|
timestamp: BigInt(seed + 0x400),
|
|
946
942
|
coinbase: makeEthAddress(seed + 0x500),
|
|
@@ -987,7 +983,7 @@ function makeCountedL2ToL1Message(seed = 0) {
|
|
|
987
983
|
return new CountedL2ToL1Message(makeL2ToL1Message(seed), seed + 2);
|
|
988
984
|
}
|
|
989
985
|
|
|
990
|
-
function makeScopedL2ToL1Message(seed = 1) {
|
|
986
|
+
export function makeScopedL2ToL1Message(seed = 1) {
|
|
991
987
|
return new ScopedL2ToL1Message(makeL2ToL1Message(seed), makeAztecAddress(seed + 3));
|
|
992
988
|
}
|
|
993
989
|
|
package/src/tests/mocks.ts
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
MAX_NULLIFIERS_PER_TX,
|
|
7
7
|
MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
8
8
|
} from '@aztec/constants';
|
|
9
|
-
import { makeTuple } from '@aztec/foundation/array';
|
|
9
|
+
import { type FieldsOf, makeTuple } from '@aztec/foundation/array';
|
|
10
10
|
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
11
11
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
12
12
|
import { padArrayEnd, times } from '@aztec/foundation/collection';
|
|
@@ -16,6 +16,7 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
16
16
|
|
|
17
17
|
import type { ContractArtifact } from '../abi/abi.js';
|
|
18
18
|
import { PublicTxEffect } from '../avm/avm.js';
|
|
19
|
+
import type { AvmAccumulatedData } from '../avm/avm_accumulated_data.js';
|
|
19
20
|
import { AvmCircuitPublicInputs } from '../avm/avm_circuit_public_inputs.js';
|
|
20
21
|
import { PublicDataWrite } from '../avm/public_data_write.js';
|
|
21
22
|
import { RevertCode } from '../avm/revert_code.js';
|
|
@@ -202,6 +203,7 @@ export async function mockProcessedTx({
|
|
|
202
203
|
// The default gasUsed is the tx overhead.
|
|
203
204
|
gasUsed = Gas.from({ daGas: FIXED_DA_GAS, l2Gas: FIXED_L2_GAS }),
|
|
204
205
|
privateOnly = false,
|
|
206
|
+
avmAccumulatedData,
|
|
205
207
|
...mockTxOpts
|
|
206
208
|
}: {
|
|
207
209
|
seed?: number;
|
|
@@ -213,6 +215,7 @@ export async function mockProcessedTx({
|
|
|
213
215
|
protocolContracts?: ProtocolContracts;
|
|
214
216
|
feePaymentPublicDataWrite?: PublicDataWrite;
|
|
215
217
|
privateOnly?: boolean;
|
|
218
|
+
avmAccumulatedData?: Partial<FieldsOf<AvmAccumulatedData>>;
|
|
216
219
|
} & Parameters<typeof mockTx>[1] = {}) {
|
|
217
220
|
seed *= 0x1000; // Avoid clashing with the previous mock values if seed only increases by 1.
|
|
218
221
|
anchorBlockHeader ??= db?.getInitialHeader() ?? makeBlockHeader(seed);
|
|
@@ -292,19 +295,22 @@ export async function mockProcessedTx({
|
|
|
292
295
|
avmOutput.previousRevertibleAccumulatedDataArrayLengths =
|
|
293
296
|
avmOutput.previousRevertibleAccumulatedData.getArrayLengths();
|
|
294
297
|
// Assign final data emitted from avm.
|
|
295
|
-
avmOutput.accumulatedData.noteHashes = revertibleData.noteHashes;
|
|
296
|
-
avmOutput.accumulatedData.nullifiers =
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
298
|
+
avmOutput.accumulatedData.noteHashes = avmAccumulatedData?.noteHashes ?? revertibleData.noteHashes;
|
|
299
|
+
avmOutput.accumulatedData.nullifiers =
|
|
300
|
+
avmAccumulatedData?.nullifiers ??
|
|
301
|
+
padArrayEnd(
|
|
302
|
+
nonRevertibleData.nullifiers.concat(revertibleData.nullifiers).filter(n => !n.isEmpty()),
|
|
303
|
+
Fr.ZERO,
|
|
304
|
+
MAX_NULLIFIERS_PER_TX,
|
|
305
|
+
);
|
|
306
|
+
avmOutput.accumulatedData.l2ToL1Msgs = avmAccumulatedData?.l2ToL1Msgs ?? revertibleData.l2ToL1Msgs;
|
|
307
|
+
avmOutput.accumulatedData.publicDataWrites =
|
|
308
|
+
avmAccumulatedData?.publicDataWrites ??
|
|
309
|
+
makeTuple(
|
|
310
|
+
MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
311
|
+
i => (i === 0 ? feePaymentPublicDataWrite : new PublicDataWrite(new Fr(i), new Fr(i + 10))),
|
|
312
|
+
seed + 0x2000,
|
|
313
|
+
);
|
|
308
314
|
avmOutput.accumulatedDataArrayLengths = avmOutput.accumulatedData.getArrayLengths();
|
|
309
315
|
avmOutput.gasSettings = gasSettings;
|
|
310
316
|
// Note: The fee is computed from the tx's gas used, which only includes the gas used in private. But this shouldn't
|
|
@@ -10,7 +10,7 @@ import type { CheckpointGlobalVariables, GlobalVariables } from './global_variab
|
|
|
10
10
|
* Interface for building global variables for Aztec blocks.
|
|
11
11
|
*/
|
|
12
12
|
export interface GlobalVariableBuilder {
|
|
13
|
-
|
|
13
|
+
getCurrentMinFees(): Promise<GasFees>;
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Builds global variables for a given block.
|
package/src/tx/index.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export * from './block_header.js';
|
|
2
2
|
export * from './call_context.js';
|
|
3
3
|
export * from './global_variables.js';
|
|
4
|
-
export * from './content_commitment.js';
|
|
5
4
|
export * from './state_reference.js';
|
|
6
5
|
export * from './partial_state_reference.js';
|
|
7
6
|
export * from './function_data.js';
|
package/src/tx/tx.ts
CHANGED
|
@@ -24,6 +24,7 @@ import { TxHash } from './tx_hash.js';
|
|
|
24
24
|
/**
|
|
25
25
|
* The interface of an L2 transaction.
|
|
26
26
|
*/
|
|
27
|
+
// docs:start:tx_class
|
|
27
28
|
export class Tx extends Gossipable {
|
|
28
29
|
static override p2pTopic = TopicType.tx;
|
|
29
30
|
|
|
@@ -60,6 +61,7 @@ export class Tx extends Gossipable {
|
|
|
60
61
|
) {
|
|
61
62
|
super();
|
|
62
63
|
}
|
|
64
|
+
// docs:end:tx_class
|
|
63
65
|
|
|
64
66
|
// Gossipable method
|
|
65
67
|
override generateP2PMessageIdentifier(): Promise<Buffer32> {
|
|
@@ -20,6 +20,7 @@ import { TxRequest } from './tx_request.js';
|
|
|
20
20
|
/**
|
|
21
21
|
* Request to execute a transaction. Similar to TxRequest, but has the full args.
|
|
22
22
|
*/
|
|
23
|
+
// docs:start:tx_execution_request_class
|
|
23
24
|
export class TxExecutionRequest {
|
|
24
25
|
constructor(
|
|
25
26
|
/**
|
|
@@ -60,6 +61,7 @@ export class TxExecutionRequest {
|
|
|
60
61
|
*/
|
|
61
62
|
public salt = Fr.random(),
|
|
62
63
|
) {}
|
|
64
|
+
// docs:end:tx_execution_request_class
|
|
63
65
|
|
|
64
66
|
static get schema(): ZodFor<TxExecutionRequest> {
|
|
65
67
|
return z
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { ViemContentCommitment } from '@aztec/ethereum/contracts';
|
|
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
|
-
import { z } from 'zod';
|
|
6
|
-
export declare class ContentCommitment {
|
|
7
|
-
blobsHash: Fr;
|
|
8
|
-
inHash: Fr;
|
|
9
|
-
outHash: Fr;
|
|
10
|
-
constructor(blobsHash: Fr, inHash: Fr, outHash: Fr);
|
|
11
|
-
static get schema(): z.ZodEffects<z.ZodObject<{
|
|
12
|
-
blobsHash: z.ZodType<Fr, any, string>;
|
|
13
|
-
inHash: z.ZodType<Fr, any, string>;
|
|
14
|
-
outHash: z.ZodType<Fr, any, string>;
|
|
15
|
-
}, "strip", z.ZodTypeAny, {
|
|
16
|
-
blobsHash: Fr;
|
|
17
|
-
inHash: Fr;
|
|
18
|
-
outHash: Fr;
|
|
19
|
-
}, {
|
|
20
|
-
blobsHash: string;
|
|
21
|
-
inHash: string;
|
|
22
|
-
outHash: string;
|
|
23
|
-
}>, ContentCommitment, {
|
|
24
|
-
blobsHash: string;
|
|
25
|
-
inHash: string;
|
|
26
|
-
outHash: string;
|
|
27
|
-
}>;
|
|
28
|
-
static getFields(fields: FieldsOf<ContentCommitment>): readonly [Fr, Fr, Fr];
|
|
29
|
-
static from(fields: FieldsOf<ContentCommitment>): ContentCommitment;
|
|
30
|
-
getSize(): number;
|
|
31
|
-
toBuffer(): Buffer<ArrayBufferLike>;
|
|
32
|
-
static fromBuffer(buffer: Buffer | BufferReader): ContentCommitment;
|
|
33
|
-
toInspect(): {
|
|
34
|
-
blobsHash: `0x${string}`;
|
|
35
|
-
inHash: `0x${string}`;
|
|
36
|
-
outHash: `0x${string}`;
|
|
37
|
-
};
|
|
38
|
-
toViem(): ViemContentCommitment;
|
|
39
|
-
static fromViem(contentCommitment: ViemContentCommitment): ContentCommitment;
|
|
40
|
-
toFields(): Fr[];
|
|
41
|
-
static fromFields(fields: Fr[] | FieldReader): ContentCommitment;
|
|
42
|
-
static random(overrides?: Partial<FieldsOf<ContentCommitment>>): ContentCommitment;
|
|
43
|
-
static empty(): ContentCommitment;
|
|
44
|
-
isEmpty(): boolean;
|
|
45
|
-
toString(): string;
|
|
46
|
-
static fromString(str: string): ContentCommitment;
|
|
47
|
-
equals(other: this): boolean;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudF9jb21taXRtZW50LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHgvY29udGVudF9jb21taXRtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUF3QyxNQUFNLDZCQUE2QixDQUFDO0FBRTlHLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXhELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIscUJBQWEsaUJBQWlCO0lBRW5CLFNBQVMsRUFBRSxFQUFFO0lBQ2IsTUFBTSxFQUFFLEVBQUU7SUFDVixPQUFPLEVBQUUsRUFBRTtJQUhwQixZQUNTLFNBQVMsRUFBRSxFQUFFLEVBQ2IsTUFBTSxFQUFFLEVBQUUsRUFDVixPQUFPLEVBQUUsRUFBRSxFQUNoQjtJQUVKLE1BQU0sS0FBSyxNQUFNOzs7Ozs7Ozs7Ozs7Ozs7O09BUWhCO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixDQUFDLHlCQUVuRDtJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFFOUM7SUFFRCxPQUFPLFdBRU47SUFFRCxRQUFRLDRCQUVQO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFlBQVksR0FBRyxpQkFBaUIsQ0FJbEU7SUFFRCxTQUFTOzs7O01BTVI7SUFFRCxNQUFNLElBQUkscUJBQXFCLENBTTlCO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIscUJBTXZEO0lBRUQsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUVmO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxHQUFHLGlCQUFpQixDQUcvRDtJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBTSxHQUFHLGlCQUFpQixDQU9yRjtJQUVELE1BQU0sQ0FBQyxLQUFLLElBQUksaUJBQWlCLENBRWhDO0lBRUQsT0FBTyxJQUFJLE9BQU8sQ0FFakI7SUFFTSxRQUFRLElBQUksTUFBTSxDQUV4QjtJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxpQkFBaUIsQ0FHaEQ7SUFFTSxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxPQUFPLENBSWxDO0NBQ0YifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"content_commitment.d.ts","sourceRoot":"","sources":["../../src/tx/content_commitment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAwC,MAAM,6BAA6B,CAAC;AAE9G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qBAAa,iBAAiB;IAEnB,SAAS,EAAE,EAAE;IACb,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IAHpB,YACS,SAAS,EAAE,EAAE,EACb,MAAM,EAAE,EAAE,EACV,OAAO,EAAE,EAAE,EAChB;IAEJ,MAAM,KAAK,MAAM;;;;;;;;;;;;;;;;OAQhB;IAED,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,yBAEnD;IAED,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,qBAE9C;IAED,OAAO,WAEN;IAED,QAAQ,4BAEP;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,iBAAiB,CAIlE;IAED,SAAS;;;;MAMR;IAED,MAAM,IAAI,qBAAqB,CAM9B;IAED,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,qBAAqB,qBAMvD;IAED,QAAQ,IAAI,EAAE,EAAE,CAEf;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,iBAAiB,CAG/D;IAED,MAAM,CAAC,MAAM,CAAC,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAM,GAAG,iBAAiB,CAOrF;IAED,MAAM,CAAC,KAAK,IAAI,iBAAiB,CAEhC;IAED,OAAO,IAAI,OAAO,CAEjB;IAEM,QAAQ,IAAI,MAAM,CAExB;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAGhD;IAEM,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAIlC;CACF"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import { schemas } from '@aztec/foundation/schemas';
|
|
3
|
-
import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize';
|
|
4
|
-
import { bufferToHex } from '@aztec/foundation/string';
|
|
5
|
-
import { z } from 'zod';
|
|
6
|
-
export class ContentCommitment {
|
|
7
|
-
blobsHash;
|
|
8
|
-
inHash;
|
|
9
|
-
outHash;
|
|
10
|
-
constructor(blobsHash, inHash, outHash){
|
|
11
|
-
this.blobsHash = blobsHash;
|
|
12
|
-
this.inHash = inHash;
|
|
13
|
-
this.outHash = outHash;
|
|
14
|
-
}
|
|
15
|
-
static get schema() {
|
|
16
|
-
return z.object({
|
|
17
|
-
blobsHash: schemas.Fr,
|
|
18
|
-
inHash: schemas.Fr,
|
|
19
|
-
outHash: schemas.Fr
|
|
20
|
-
}).transform(({ blobsHash, inHash, outHash })=>new ContentCommitment(blobsHash, inHash, outHash));
|
|
21
|
-
}
|
|
22
|
-
static getFields(fields) {
|
|
23
|
-
return [
|
|
24
|
-
fields.blobsHash,
|
|
25
|
-
fields.inHash,
|
|
26
|
-
fields.outHash
|
|
27
|
-
];
|
|
28
|
-
}
|
|
29
|
-
static from(fields) {
|
|
30
|
-
return new ContentCommitment(...ContentCommitment.getFields(fields));
|
|
31
|
-
}
|
|
32
|
-
getSize() {
|
|
33
|
-
return this.toBuffer().length;
|
|
34
|
-
}
|
|
35
|
-
toBuffer() {
|
|
36
|
-
return serializeToBuffer(...ContentCommitment.getFields(this));
|
|
37
|
-
}
|
|
38
|
-
static fromBuffer(buffer) {
|
|
39
|
-
const reader = BufferReader.asReader(buffer);
|
|
40
|
-
return new ContentCommitment(reader.readObject(Fr), reader.readObject(Fr), reader.readObject(Fr));
|
|
41
|
-
}
|
|
42
|
-
toInspect() {
|
|
43
|
-
return {
|
|
44
|
-
blobsHash: this.blobsHash.toString(),
|
|
45
|
-
inHash: this.inHash.toString(),
|
|
46
|
-
outHash: this.outHash.toString()
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
toViem() {
|
|
50
|
-
return {
|
|
51
|
-
blobsHash: this.blobsHash.toString(),
|
|
52
|
-
inHash: this.inHash.toString(),
|
|
53
|
-
outHash: this.outHash.toString()
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
static fromViem(contentCommitment) {
|
|
57
|
-
return new ContentCommitment(Fr.fromString(contentCommitment.blobsHash), Fr.fromString(contentCommitment.inHash), Fr.fromString(contentCommitment.outHash));
|
|
58
|
-
}
|
|
59
|
-
toFields() {
|
|
60
|
-
return serializeToFields(...ContentCommitment.getFields(this));
|
|
61
|
-
}
|
|
62
|
-
static fromFields(fields) {
|
|
63
|
-
const reader = FieldReader.asReader(fields);
|
|
64
|
-
return new ContentCommitment(reader.readField(), reader.readField(), reader.readField());
|
|
65
|
-
}
|
|
66
|
-
static random(overrides = {}) {
|
|
67
|
-
return ContentCommitment.from({
|
|
68
|
-
blobsHash: Fr.random(),
|
|
69
|
-
inHash: Fr.random(),
|
|
70
|
-
outHash: Fr.random(),
|
|
71
|
-
...overrides
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
static empty() {
|
|
75
|
-
return new ContentCommitment(Fr.zero(), Fr.zero(), Fr.zero());
|
|
76
|
-
}
|
|
77
|
-
isEmpty() {
|
|
78
|
-
return this.blobsHash.isZero() && this.inHash.isZero() && this.outHash.isZero();
|
|
79
|
-
}
|
|
80
|
-
toString() {
|
|
81
|
-
return bufferToHex(this.toBuffer());
|
|
82
|
-
}
|
|
83
|
-
static fromString(str) {
|
|
84
|
-
const buffer = Buffer.from(str.replace(/^0x/i, ''), 'hex');
|
|
85
|
-
return ContentCommitment.fromBuffer(buffer);
|
|
86
|
-
}
|
|
87
|
-
equals(other) {
|
|
88
|
-
return this.blobsHash.equals(other.blobsHash) && this.inHash.equals(other.inHash) && this.outHash.equals(other.outHash);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import type { ViemContentCommitment } from '@aztec/ethereum/contracts';
|
|
2
|
-
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
-
import { schemas } from '@aztec/foundation/schemas';
|
|
4
|
-
import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize';
|
|
5
|
-
import { bufferToHex } from '@aztec/foundation/string';
|
|
6
|
-
import type { FieldsOf } from '@aztec/foundation/types';
|
|
7
|
-
|
|
8
|
-
import { z } from 'zod';
|
|
9
|
-
|
|
10
|
-
export class ContentCommitment {
|
|
11
|
-
constructor(
|
|
12
|
-
public blobsHash: Fr,
|
|
13
|
-
public inHash: Fr,
|
|
14
|
-
public outHash: Fr,
|
|
15
|
-
) {}
|
|
16
|
-
|
|
17
|
-
static get schema() {
|
|
18
|
-
return z
|
|
19
|
-
.object({
|
|
20
|
-
blobsHash: schemas.Fr,
|
|
21
|
-
inHash: schemas.Fr,
|
|
22
|
-
outHash: schemas.Fr,
|
|
23
|
-
})
|
|
24
|
-
.transform(({ blobsHash, inHash, outHash }) => new ContentCommitment(blobsHash, inHash, outHash));
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
static getFields(fields: FieldsOf<ContentCommitment>) {
|
|
28
|
-
return [fields.blobsHash, fields.inHash, fields.outHash] as const;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
static from(fields: FieldsOf<ContentCommitment>) {
|
|
32
|
-
return new ContentCommitment(...ContentCommitment.getFields(fields));
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
getSize() {
|
|
36
|
-
return this.toBuffer().length;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
toBuffer() {
|
|
40
|
-
return serializeToBuffer(...ContentCommitment.getFields(this));
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
static fromBuffer(buffer: Buffer | BufferReader): ContentCommitment {
|
|
44
|
-
const reader = BufferReader.asReader(buffer);
|
|
45
|
-
|
|
46
|
-
return new ContentCommitment(reader.readObject(Fr), reader.readObject(Fr), reader.readObject(Fr));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
toInspect() {
|
|
50
|
-
return {
|
|
51
|
-
blobsHash: this.blobsHash.toString(),
|
|
52
|
-
inHash: this.inHash.toString(),
|
|
53
|
-
outHash: this.outHash.toString(),
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
toViem(): ViemContentCommitment {
|
|
58
|
-
return {
|
|
59
|
-
blobsHash: this.blobsHash.toString(),
|
|
60
|
-
inHash: this.inHash.toString(),
|
|
61
|
-
outHash: this.outHash.toString(),
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
static fromViem(contentCommitment: ViemContentCommitment) {
|
|
66
|
-
return new ContentCommitment(
|
|
67
|
-
Fr.fromString(contentCommitment.blobsHash),
|
|
68
|
-
Fr.fromString(contentCommitment.inHash),
|
|
69
|
-
Fr.fromString(contentCommitment.outHash),
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
toFields(): Fr[] {
|
|
74
|
-
return serializeToFields(...ContentCommitment.getFields(this));
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
static fromFields(fields: Fr[] | FieldReader): ContentCommitment {
|
|
78
|
-
const reader = FieldReader.asReader(fields);
|
|
79
|
-
return new ContentCommitment(reader.readField(), reader.readField(), reader.readField());
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
static random(overrides: Partial<FieldsOf<ContentCommitment>> = {}): ContentCommitment {
|
|
83
|
-
return ContentCommitment.from({
|
|
84
|
-
blobsHash: Fr.random(),
|
|
85
|
-
inHash: Fr.random(),
|
|
86
|
-
outHash: Fr.random(),
|
|
87
|
-
...overrides,
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
static empty(): ContentCommitment {
|
|
92
|
-
return new ContentCommitment(Fr.zero(), Fr.zero(), Fr.zero());
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
isEmpty(): boolean {
|
|
96
|
-
return this.blobsHash.isZero() && this.inHash.isZero() && this.outHash.isZero();
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
public toString(): string {
|
|
100
|
-
return bufferToHex(this.toBuffer());
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
static fromString(str: string): ContentCommitment {
|
|
104
|
-
const buffer = Buffer.from(str.replace(/^0x/i, ''), 'hex');
|
|
105
|
-
return ContentCommitment.fromBuffer(buffer);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
public equals(other: this): boolean {
|
|
109
|
-
return (
|
|
110
|
-
this.blobsHash.equals(other.blobsHash) && this.inHash.equals(other.inHash) && this.outHash.equals(other.outHash)
|
|
111
|
-
);
|
|
112
|
-
}
|
|
113
|
-
}
|