@aztec/txe 0.0.1-commit.fcb71a6 → 0.0.1-commit.fffb133c
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/oracle/interfaces.d.ts +2 -2
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.d.ts +2 -2
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +3 -2
- package/dest/oracle/txe_oracle_top_level_context.d.ts +3 -2
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +22 -16
- package/dest/rpc_translator.d.ts +15 -9
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +49 -35
- package/dest/state_machine/archiver.d.ts +20 -67
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +57 -178
- package/dest/state_machine/dummy_p2p_client.d.ts +8 -7
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +13 -10
- package/dest/state_machine/global_variable_builder.d.ts +2 -2
- package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
- package/dest/state_machine/global_variable_builder.js +1 -1
- package/dest/state_machine/index.d.ts +1 -1
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +22 -4
- package/dest/state_machine/mock_epoch_cache.d.ts +7 -6
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +10 -7
- package/dest/state_machine/synchronizer.d.ts +3 -3
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/txe_session.d.ts +5 -3
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +29 -13
- package/dest/util/encoding.d.ts +17 -17
- package/dest/utils/block_creation.d.ts +4 -4
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +16 -5
- package/dest/utils/tx_effect_creation.d.ts +2 -3
- package/dest/utils/tx_effect_creation.d.ts.map +1 -1
- package/dest/utils/tx_effect_creation.js +3 -6
- package/package.json +16 -16
- package/src/oracle/interfaces.ts +1 -1
- package/src/oracle/txe_oracle_public_context.ts +3 -3
- package/src/oracle/txe_oracle_top_level_context.ts +26 -14
- package/src/rpc_translator.ts +53 -45
- package/src/state_machine/archiver.ts +52 -220
- package/src/state_machine/dummy_p2p_client.ts +18 -13
- package/src/state_machine/global_variable_builder.ts +1 -1
- package/src/state_machine/index.ts +26 -4
- package/src/state_machine/mock_epoch_cache.ts +10 -11
- package/src/state_machine/synchronizer.ts +2 -2
- package/src/txe_session.ts +31 -8
- package/src/utils/block_creation.ts +17 -16
- package/src/utils/tx_effect_creation.ts +3 -11
|
@@ -4,6 +4,7 @@ import type {
|
|
|
4
4
|
ENR,
|
|
5
5
|
P2P,
|
|
6
6
|
P2PBlockReceivedCallback,
|
|
7
|
+
P2PCheckpointReceivedCallback,
|
|
7
8
|
P2PConfig,
|
|
8
9
|
P2PSyncState,
|
|
9
10
|
PeerId,
|
|
@@ -14,14 +15,10 @@ import type {
|
|
|
14
15
|
} from '@aztec/p2p';
|
|
15
16
|
import type { EthAddress, L2BlockStreamEvent, L2Tips } from '@aztec/stdlib/block';
|
|
16
17
|
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
17
|
-
import type {
|
|
18
|
+
import type { BlockProposal, CheckpointAttestation, CheckpointProposal } from '@aztec/stdlib/p2p';
|
|
18
19
|
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
19
20
|
|
|
20
21
|
export class DummyP2P implements P2P {
|
|
21
|
-
public broadcastAttestations(_attestations: BlockAttestation[]): Promise<void> {
|
|
22
|
-
return Promise.resolve();
|
|
23
|
-
}
|
|
24
|
-
|
|
25
22
|
public validate(_txs: Tx[]): Promise<void> {
|
|
26
23
|
return Promise.resolve();
|
|
27
24
|
}
|
|
@@ -46,10 +43,22 @@ export class DummyP2P implements P2P {
|
|
|
46
43
|
throw new Error('DummyP2P does not implement "broadcastProposal"');
|
|
47
44
|
}
|
|
48
45
|
|
|
46
|
+
public broadcastCheckpointProposal(_proposal: CheckpointProposal): Promise<void> {
|
|
47
|
+
throw new Error('DummyP2P does not implement "broadcastCheckpointProposal"');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public broadcastCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void> {
|
|
51
|
+
throw new Error('DummyP2P does not implement "broadcastCheckpointAttestations"');
|
|
52
|
+
}
|
|
53
|
+
|
|
49
54
|
public registerBlockProposalHandler(_handler: P2PBlockReceivedCallback): void {
|
|
50
55
|
throw new Error('DummyP2P does not implement "registerBlockProposalHandler"');
|
|
51
56
|
}
|
|
52
57
|
|
|
58
|
+
public registerCheckpointProposalHandler(_handler: P2PCheckpointReceivedCallback): void {
|
|
59
|
+
throw new Error('DummyP2P does not implement "registerCheckpointProposalHandler"');
|
|
60
|
+
}
|
|
61
|
+
|
|
53
62
|
public requestTxs(_txHashes: TxHash[]): Promise<(Tx | undefined)[]> {
|
|
54
63
|
throw new Error('DummyP2P does not implement "requestTxs"');
|
|
55
64
|
}
|
|
@@ -120,16 +129,12 @@ export class DummyP2P implements P2P {
|
|
|
120
129
|
throw new Error('DummyP2P does not implement "getTxsByHash"');
|
|
121
130
|
}
|
|
122
131
|
|
|
123
|
-
public
|
|
124
|
-
throw new Error('DummyP2P does not implement "
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
public deleteAttestation(_attestation: BlockAttestation): Promise<void> {
|
|
128
|
-
return Promise.resolve();
|
|
132
|
+
public getCheckpointAttestationsForSlot(_slot: SlotNumber, _proposalId?: string): Promise<CheckpointAttestation[]> {
|
|
133
|
+
throw new Error('DummyP2P does not implement "getCheckpointAttestationsForSlot"');
|
|
129
134
|
}
|
|
130
135
|
|
|
131
|
-
public
|
|
132
|
-
throw new Error('DummyP2P does not implement "
|
|
136
|
+
public addCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void> {
|
|
137
|
+
throw new Error('DummyP2P does not implement "addCheckpointAttestations"');
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
public getL2BlockHash(_number: number): Promise<string | undefined> {
|
|
@@ -6,7 +6,7 @@ import { makeGlobalVariables } from '@aztec/stdlib/testing';
|
|
|
6
6
|
import { type CheckpointGlobalVariables, type GlobalVariableBuilder, GlobalVariables } from '@aztec/stdlib/tx';
|
|
7
7
|
|
|
8
8
|
export class TXEGlobalVariablesBuilder implements GlobalVariableBuilder {
|
|
9
|
-
public
|
|
9
|
+
public getCurrentMinFees(): Promise<GasFees> {
|
|
10
10
|
return Promise.resolve(new GasFees(0, 0));
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
|
|
2
2
|
import { TestCircuitVerifier } from '@aztec/bb-prover/test';
|
|
3
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
6
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
5
7
|
import { AnchorBlockStore } from '@aztec/pxe/server';
|
|
6
8
|
import { L2Block } from '@aztec/stdlib/block';
|
|
7
|
-
import { L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
9
|
+
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
8
10
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
11
|
+
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
9
12
|
import { getPackageVersion } from '@aztec/stdlib/update-checker';
|
|
10
13
|
|
|
11
14
|
import { TXEArchiver } from './archiver.js';
|
|
@@ -59,7 +62,26 @@ export class TXEStateMachine {
|
|
|
59
62
|
}
|
|
60
63
|
|
|
61
64
|
public async handleL2Block(block: L2Block) {
|
|
62
|
-
|
|
65
|
+
// Create a checkpoint from the block manually
|
|
66
|
+
const checkpoint = new Checkpoint(
|
|
67
|
+
block.archive,
|
|
68
|
+
CheckpointHeader.from({
|
|
69
|
+
lastArchiveRoot: block.header.lastArchive.root,
|
|
70
|
+
inHash: Fr.ZERO,
|
|
71
|
+
blobsHash: Fr.ZERO,
|
|
72
|
+
blockHeadersHash: Fr.ZERO,
|
|
73
|
+
epochOutHash: Fr.ZERO,
|
|
74
|
+
slotNumber: block.header.globalVariables.slotNumber,
|
|
75
|
+
timestamp: block.header.globalVariables.timestamp,
|
|
76
|
+
coinbase: block.header.globalVariables.coinbase,
|
|
77
|
+
feeRecipient: block.header.globalVariables.feeRecipient,
|
|
78
|
+
gasFees: block.header.globalVariables.gasFees,
|
|
79
|
+
totalManaUsed: block.header.totalManaUsed,
|
|
80
|
+
}),
|
|
81
|
+
[block],
|
|
82
|
+
CheckpointNumber.fromBlockNumber(block.number),
|
|
83
|
+
);
|
|
84
|
+
|
|
63
85
|
const publishedCheckpoint = new PublishedCheckpoint(
|
|
64
86
|
checkpoint,
|
|
65
87
|
new L1PublishedData(
|
|
@@ -70,9 +92,9 @@ export class TXEStateMachine {
|
|
|
70
92
|
[],
|
|
71
93
|
);
|
|
72
94
|
await Promise.all([
|
|
73
|
-
this.synchronizer.handleL2Block(block
|
|
95
|
+
this.synchronizer.handleL2Block(block),
|
|
74
96
|
this.archiver.addCheckpoints([publishedCheckpoint], undefined),
|
|
75
|
-
this.anchorBlockStore.setHeader(block.
|
|
97
|
+
this.anchorBlockStore.setHeader(block.header),
|
|
76
98
|
]);
|
|
77
99
|
}
|
|
78
100
|
}
|
|
@@ -12,14 +12,16 @@ export class MockEpochCache implements EpochCacheInterface {
|
|
|
12
12
|
committee: undefined,
|
|
13
13
|
seed: 0n,
|
|
14
14
|
epoch: EpochNumber.ZERO,
|
|
15
|
+
isEscapeHatchOpen: false,
|
|
15
16
|
});
|
|
16
17
|
}
|
|
17
18
|
|
|
18
|
-
getEpochAndSlotNow(): EpochAndSlot {
|
|
19
|
+
getEpochAndSlotNow(): EpochAndSlot & { nowMs: bigint } {
|
|
19
20
|
return {
|
|
20
21
|
epoch: EpochNumber.ZERO,
|
|
21
22
|
slot: SlotNumber(0),
|
|
22
23
|
ts: 0n,
|
|
24
|
+
nowMs: 0n,
|
|
23
25
|
};
|
|
24
26
|
}
|
|
25
27
|
|
|
@@ -40,18 +42,15 @@ export class MockEpochCache implements EpochCacheInterface {
|
|
|
40
42
|
return 0n;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
nextProposer: EthAddress | undefined;
|
|
46
|
-
currentSlot: SlotNumber;
|
|
47
|
-
nextSlot: SlotNumber;
|
|
48
|
-
}> {
|
|
49
|
-
return Promise.resolve({
|
|
50
|
-
currentProposer: undefined,
|
|
51
|
-
nextProposer: undefined,
|
|
45
|
+
getCurrentAndNextSlot(): { currentSlot: SlotNumber; nextSlot: SlotNumber } {
|
|
46
|
+
return {
|
|
52
47
|
currentSlot: SlotNumber(0),
|
|
53
48
|
nextSlot: SlotNumber(0),
|
|
54
|
-
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
getProposerAttesterAddressInSlot(_slot: SlotNumber): Promise<EthAddress | undefined> {
|
|
53
|
+
return Promise.resolve(undefined);
|
|
55
54
|
}
|
|
56
55
|
|
|
57
56
|
isInCommittee(_slot: SlotTag, _validator: EthAddress): Promise<boolean> {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
|
|
2
2
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
-
import type {
|
|
4
|
+
import type { L2Block } from '@aztec/stdlib/block';
|
|
5
5
|
import type {
|
|
6
6
|
MerkleTreeReadOperations,
|
|
7
7
|
MerkleTreeWriteOperations,
|
|
@@ -23,7 +23,7 @@ export class TXESynchronizer implements WorldStateSynchronizer {
|
|
|
23
23
|
return new this(nativeWorldStateService);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
public async handleL2Block(block:
|
|
26
|
+
public async handleL2Block(block: L2Block) {
|
|
27
27
|
await this.nativeWorldStateService.handleL2BlockAndMessages(
|
|
28
28
|
block,
|
|
29
29
|
Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(0).map(Fr.zero),
|
package/src/txe_session.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type { ProtocolContract } from '@aztec/protocol-contracts';
|
|
|
7
7
|
import {
|
|
8
8
|
AddressStore,
|
|
9
9
|
CapsuleStore,
|
|
10
|
+
JobCoordinator,
|
|
10
11
|
NoteService,
|
|
11
12
|
NoteStore,
|
|
12
13
|
PrivateEventStore,
|
|
@@ -74,7 +75,6 @@ type SessionState =
|
|
|
74
75
|
| {
|
|
75
76
|
name: 'PRIVATE';
|
|
76
77
|
nextBlockGlobalVariables: GlobalVariables;
|
|
77
|
-
protocolNullifier: Fr;
|
|
78
78
|
noteCache: ExecutionNoteCache;
|
|
79
79
|
taggingIndexCache: ExecutionTaggingIndexCache;
|
|
80
80
|
}
|
|
@@ -139,6 +139,8 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
139
139
|
private senderAddressBookStore: SenderAddressBookStore,
|
|
140
140
|
private capsuleStore: CapsuleStore,
|
|
141
141
|
private privateEventStore: PrivateEventStore,
|
|
142
|
+
private jobCoordinator: JobCoordinator,
|
|
143
|
+
private currentJobId: string,
|
|
142
144
|
private chainId: Fr,
|
|
143
145
|
private version: Fr,
|
|
144
146
|
private nextBlockTimestamp: bigint,
|
|
@@ -150,7 +152,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
150
152
|
const addressStore = new AddressStore(store);
|
|
151
153
|
const privateEventStore = new PrivateEventStore(store);
|
|
152
154
|
const contractStore = new TXEContractStore(store);
|
|
153
|
-
const noteStore =
|
|
155
|
+
const noteStore = new NoteStore(store);
|
|
154
156
|
const senderTaggingStore = new SenderTaggingStore(store);
|
|
155
157
|
const recipientTaggingStore = new RecipientTaggingStore(store);
|
|
156
158
|
const senderAddressBookStore = new SenderAddressBookStore(store);
|
|
@@ -158,6 +160,16 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
158
160
|
const keyStore = new KeyStore(store);
|
|
159
161
|
const accountStore = new TXEAccountStore(store);
|
|
160
162
|
|
|
163
|
+
// Create job coordinator and register staged stores
|
|
164
|
+
const jobCoordinator = new JobCoordinator(store);
|
|
165
|
+
jobCoordinator.registerStores([
|
|
166
|
+
capsuleStore,
|
|
167
|
+
senderTaggingStore,
|
|
168
|
+
recipientTaggingStore,
|
|
169
|
+
privateEventStore,
|
|
170
|
+
noteStore,
|
|
171
|
+
]);
|
|
172
|
+
|
|
161
173
|
// Register protocol contracts.
|
|
162
174
|
for (const { contractClass, instance, artifact } of protocolContracts) {
|
|
163
175
|
await contractStore.addContractArtifact(contractClass.id, artifact);
|
|
@@ -170,6 +182,8 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
170
182
|
const version = new Fr(await stateMachine.node.getVersion());
|
|
171
183
|
const chainId = new Fr(await stateMachine.node.getChainId());
|
|
172
184
|
|
|
185
|
+
const initialJobId = jobCoordinator.beginJob();
|
|
186
|
+
|
|
173
187
|
const topLevelOracleHandler = new TXEOracleTopLevelContext(
|
|
174
188
|
stateMachine,
|
|
175
189
|
contractStore,
|
|
@@ -182,6 +196,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
182
196
|
senderAddressBookStore,
|
|
183
197
|
capsuleStore,
|
|
184
198
|
privateEventStore,
|
|
199
|
+
initialJobId,
|
|
185
200
|
nextBlockTimestamp,
|
|
186
201
|
version,
|
|
187
202
|
chainId,
|
|
@@ -203,6 +218,8 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
203
218
|
senderAddressBookStore,
|
|
204
219
|
capsuleStore,
|
|
205
220
|
privateEventStore,
|
|
221
|
+
jobCoordinator,
|
|
222
|
+
initialJobId,
|
|
206
223
|
version,
|
|
207
224
|
chainId,
|
|
208
225
|
nextBlockTimestamp,
|
|
@@ -262,6 +279,10 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
262
279
|
}
|
|
263
280
|
}
|
|
264
281
|
|
|
282
|
+
// Commit all staged stores from the job that was just completed, then begin a new job
|
|
283
|
+
await this.jobCoordinator.commitJob(this.currentJobId);
|
|
284
|
+
this.currentJobId = this.jobCoordinator.beginJob();
|
|
285
|
+
|
|
265
286
|
this.oracleHandler = new TXEOracleTopLevelContext(
|
|
266
287
|
this.stateMachine,
|
|
267
288
|
this.contractStore,
|
|
@@ -274,6 +295,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
274
295
|
this.senderAddressBookStore,
|
|
275
296
|
this.capsuleStore,
|
|
276
297
|
this.privateEventStore,
|
|
298
|
+
this.currentJobId,
|
|
277
299
|
this.nextBlockTimestamp,
|
|
278
300
|
this.version,
|
|
279
301
|
this.chainId,
|
|
@@ -294,6 +316,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
294
316
|
this.noteStore,
|
|
295
317
|
this.stateMachine.node,
|
|
296
318
|
this.stateMachine.anchorBlockStore,
|
|
319
|
+
this.currentJobId,
|
|
297
320
|
).syncNoteNullifiers(contractAddress);
|
|
298
321
|
|
|
299
322
|
// Private execution has two associated block numbers: the anchor block (i.e. the historical block that is used to
|
|
@@ -337,6 +360,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
337
360
|
this.senderAddressBookStore,
|
|
338
361
|
this.capsuleStore,
|
|
339
362
|
this.privateEventStore,
|
|
363
|
+
this.currentJobId,
|
|
340
364
|
);
|
|
341
365
|
|
|
342
366
|
// We store the note and tagging index caches fed into the PrivateExecutionOracle (along with some other auxiliary
|
|
@@ -344,7 +368,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
344
368
|
// difference resides in that the simulator has all information needed in order to run the simulation, while ours
|
|
345
369
|
// will be ongoing as the different oracles will be invoked from the Noir test, until eventually the private
|
|
346
370
|
// execution finishes.
|
|
347
|
-
this.state = { name: 'PRIVATE', nextBlockGlobalVariables,
|
|
371
|
+
this.state = { name: 'PRIVATE', nextBlockGlobalVariables, noteCache, taggingIndexCache };
|
|
348
372
|
this.logger.debug(`Entered state ${this.state.name}`);
|
|
349
373
|
|
|
350
374
|
return (this.oracleHandler as PrivateExecutionOracle).getPrivateContextInputs();
|
|
@@ -386,6 +410,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
386
410
|
this.noteStore,
|
|
387
411
|
this.stateMachine.node,
|
|
388
412
|
this.stateMachine.anchorBlockStore,
|
|
413
|
+
this.currentJobId,
|
|
389
414
|
).syncNoteNullifiers(contractAddress);
|
|
390
415
|
|
|
391
416
|
const anchorBlockHeader = await this.stateMachine.anchorBlockStore.getBlockHeader();
|
|
@@ -405,6 +430,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
405
430
|
this.senderAddressBookStore,
|
|
406
431
|
this.capsuleStore,
|
|
407
432
|
this.privateEventStore,
|
|
433
|
+
this.currentJobId,
|
|
408
434
|
);
|
|
409
435
|
|
|
410
436
|
this.state = { name: 'UTILITY' };
|
|
@@ -440,11 +466,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
440
466
|
// We rely on the note cache to determine the effects of the transaction. This is incomplete as it doesn't private
|
|
441
467
|
// logs (other effects like enqueued public calls don't need to be considered since those are not allowed).
|
|
442
468
|
|
|
443
|
-
const txEffect = await makeTxEffect(
|
|
444
|
-
this.state.noteCache,
|
|
445
|
-
this.state.protocolNullifier,
|
|
446
|
-
this.state.nextBlockGlobalVariables.blockNumber,
|
|
447
|
-
);
|
|
469
|
+
const txEffect = await makeTxEffect(this.state.noteCache, this.state.nextBlockGlobalVariables.blockNumber);
|
|
448
470
|
|
|
449
471
|
// We build a block holding just this transaction
|
|
450
472
|
const forkedWorldTrees = await this.stateMachine.synchronizer.nativeWorldStateService.fork();
|
|
@@ -499,6 +521,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
499
521
|
this.senderAddressBookStore,
|
|
500
522
|
this.capsuleStore,
|
|
501
523
|
this.privateEventStore,
|
|
524
|
+
this.currentJobId,
|
|
502
525
|
);
|
|
503
526
|
await new WASMSimulator()
|
|
504
527
|
.executeUserCircuit(toACVMWitness(0, call.args), entryPointArtifact, new Oracle(oracle).toACIRCallback())
|
|
@@ -4,13 +4,12 @@ import {
|
|
|
4
4
|
NULLIFIER_SUBTREE_HEIGHT,
|
|
5
5
|
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
|
|
6
6
|
} from '@aztec/constants';
|
|
7
|
-
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
7
|
+
import { BlockNumber, CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
|
|
8
8
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
9
9
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
10
|
-
import { Body, L2Block
|
|
11
|
-
import { makeContentCommitment } from '@aztec/stdlib/testing';
|
|
10
|
+
import { Body, L2Block } from '@aztec/stdlib/block';
|
|
12
11
|
import { AppendOnlyTreeSnapshot, MerkleTreeId, type MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
13
|
-
import { GlobalVariables, TxEffect } from '@aztec/stdlib/tx';
|
|
12
|
+
import { BlockHeader, GlobalVariables, TxEffect } from '@aztec/stdlib/tx';
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* Returns a transaction request hash that is valid for transactions that are the only ones in a block.
|
|
@@ -47,20 +46,18 @@ export async function insertTxEffectIntoWorldTrees(
|
|
|
47
46
|
export async function makeTXEBlockHeader(
|
|
48
47
|
worldTrees: MerkleTreeWriteOperations,
|
|
49
48
|
globalVariables: GlobalVariables,
|
|
50
|
-
): Promise<
|
|
49
|
+
): Promise<BlockHeader> {
|
|
51
50
|
const stateReference = await worldTrees.getStateReference();
|
|
52
51
|
const archiveInfo = await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);
|
|
53
52
|
|
|
54
|
-
return
|
|
55
|
-
new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root), Number(archiveInfo.size)),
|
|
56
|
-
|
|
57
|
-
stateReference,
|
|
53
|
+
return BlockHeader.from({
|
|
54
|
+
lastArchive: new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root), Number(archiveInfo.size)),
|
|
55
|
+
spongeBlobHash: Fr.ZERO,
|
|
56
|
+
state: stateReference,
|
|
58
57
|
globalVariables,
|
|
59
|
-
Fr.ZERO,
|
|
60
|
-
Fr.ZERO,
|
|
61
|
-
|
|
62
|
-
Fr.ZERO,
|
|
63
|
-
);
|
|
58
|
+
totalFees: Fr.ZERO,
|
|
59
|
+
totalManaUsed: Fr.ZERO,
|
|
60
|
+
});
|
|
64
61
|
}
|
|
65
62
|
|
|
66
63
|
/**
|
|
@@ -84,11 +81,15 @@ export async function makeTXEBlock(
|
|
|
84
81
|
const header = await makeTXEBlockHeader(worldTrees, globalVariables);
|
|
85
82
|
|
|
86
83
|
// Update the archive tree with this block's header hash
|
|
87
|
-
await worldTrees.updateArchive(header
|
|
84
|
+
await worldTrees.updateArchive(header);
|
|
88
85
|
|
|
89
86
|
// Get the new archive state after updating
|
|
90
87
|
const newArchiveInfo = await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);
|
|
91
88
|
const newArchive = new AppendOnlyTreeSnapshot(new Fr(newArchiveInfo.root), Number(newArchiveInfo.size));
|
|
92
89
|
|
|
93
|
-
|
|
90
|
+
// L2Block requires checkpointNumber and indexWithinCheckpoint
|
|
91
|
+
const checkpointNumber = CheckpointNumber.fromBlockNumber(globalVariables.blockNumber);
|
|
92
|
+
const indexWithinCheckpoint = IndexWithinCheckpoint(0);
|
|
93
|
+
|
|
94
|
+
return new L2Block(newArchive, header, new Body(txEffects), checkpointNumber, indexWithinCheckpoint);
|
|
94
95
|
}
|
|
@@ -4,16 +4,12 @@ import type { ExecutionNoteCache } from '@aztec/pxe/simulator';
|
|
|
4
4
|
import { computeNoteHashNonce, computeUniqueNoteHash, siloNoteHash } from '@aztec/stdlib/hash';
|
|
5
5
|
import { TxEffect, TxHash } from '@aztec/stdlib/tx';
|
|
6
6
|
|
|
7
|
-
export async function makeTxEffect(
|
|
8
|
-
noteCache: ExecutionNoteCache,
|
|
9
|
-
protocolNullifier: Fr,
|
|
10
|
-
txBlockNumber: BlockNumber,
|
|
11
|
-
): Promise<TxEffect> {
|
|
7
|
+
export async function makeTxEffect(noteCache: ExecutionNoteCache, txBlockNumber: BlockNumber): Promise<TxEffect> {
|
|
12
8
|
const txEffect = TxEffect.empty();
|
|
13
9
|
|
|
14
|
-
|
|
15
|
-
const nonceGenerator = usedProtocolNullifierForNonces ? protocolNullifier : noteCache.getAllNullifiers()[0];
|
|
10
|
+
noteCache.finish();
|
|
16
11
|
|
|
12
|
+
const nonceGenerator = noteCache.getNonceGenerator();
|
|
17
13
|
txEffect.noteHashes = await Promise.all(
|
|
18
14
|
noteCache
|
|
19
15
|
.getAllNotes()
|
|
@@ -28,10 +24,6 @@ export async function makeTxEffect(
|
|
|
28
24
|
// Nullifiers are already siloed
|
|
29
25
|
txEffect.nullifiers = noteCache.getAllNullifiers();
|
|
30
26
|
|
|
31
|
-
if (usedProtocolNullifierForNonces) {
|
|
32
|
-
txEffect.nullifiers.unshift(protocolNullifier);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
27
|
txEffect.txHash = new TxHash(new Fr(txBlockNumber));
|
|
36
28
|
|
|
37
29
|
return txEffect;
|