@aztec/sequencer-client 0.8.9 → 0.8.11
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/block_builder/solo_block_builder.d.ts.map +1 -1
- package/dest/block_builder/solo_block_builder.js +3 -4
- package/dest/client/sequencer-client.d.ts +6 -1
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +8 -1
- package/dest/config.d.ts +9 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +7 -6
- package/dest/publisher/index.d.ts +0 -27
- package/dest/publisher/index.d.ts.map +1 -1
- package/dest/publisher/index.js +1 -1
- package/dest/publisher/l1-publisher.d.ts +1 -1
- package/dest/publisher/l1-publisher.d.ts.map +1 -1
- package/dest/publisher/l1-publisher.js +5 -5
- package/dest/sequencer/config.d.ts +0 -8
- package/dest/sequencer/config.d.ts.map +1 -1
- package/dest/sequencer/sequencer.d.ts +7 -2
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +42 -22
- package/dest/simulator/public_executor.d.ts +1 -1
- package/dest/simulator/public_executor.d.ts.map +1 -1
- package/dest/simulator/public_executor.js +5 -5
- package/dest/simulator/public_kernel.d.ts.map +1 -1
- package/dest/simulator/public_kernel.js +5 -5
- package/dest/simulator/rollup.d.ts.map +1 -1
- package/dest/simulator/rollup.js +7 -7
- package/dest/utils.d.ts +3 -3
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +5 -5
- package/package.json +10 -10
- package/src/block_builder/solo_block_builder.ts +8 -3
- package/src/client/sequencer-client.ts +9 -1
- package/src/config.ts +21 -9
- package/src/publisher/index.ts +0 -28
- package/src/publisher/l1-publisher.ts +5 -5
- package/src/sequencer/config.ts +0 -10
- package/src/sequencer/sequencer.ts +49 -24
- package/src/simulator/public_executor.ts +5 -4
- package/src/simulator/public_kernel.ts +7 -6
- package/src/simulator/rollup.ts +10 -9
- package/src/utils.ts +4 -4
|
@@ -2,6 +2,7 @@ import { GlobalVariables } from '@aztec/circuits.js';
|
|
|
2
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
3
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
5
|
+
import { Timer, elapsed } from '@aztec/foundation/timer';
|
|
5
6
|
import { MerkleTreeId, Tx } from '@aztec/types';
|
|
6
7
|
import times from 'lodash.times';
|
|
7
8
|
import { ceilPowerOfTwo } from '../utils.js';
|
|
@@ -15,7 +16,7 @@ import { ceilPowerOfTwo } from '../utils.js';
|
|
|
15
16
|
* - Publishes L1 tx(s) to the rollup contract via RollupPublisher.
|
|
16
17
|
*/
|
|
17
18
|
export class Sequencer {
|
|
18
|
-
constructor(publisher, globalsBuilder, p2pClient, worldState, blockBuilder, l2BlockSource, l1ToL2MessageSource, contractDataSource, publicProcessorFactory, config, log = createDebugLogger('aztec:sequencer')) {
|
|
19
|
+
constructor(publisher, globalsBuilder, p2pClient, worldState, blockBuilder, l2BlockSource, l1ToL2MessageSource, contractDataSource, publicProcessorFactory, config = {}, log = createDebugLogger('aztec:sequencer')) {
|
|
19
20
|
this.publisher = publisher;
|
|
20
21
|
this.globalsBuilder = globalsBuilder;
|
|
21
22
|
this.p2pClient = p2pClient;
|
|
@@ -26,18 +27,25 @@ export class Sequencer {
|
|
|
26
27
|
this.contractDataSource = contractDataSource;
|
|
27
28
|
this.publicProcessorFactory = publicProcessorFactory;
|
|
28
29
|
this.log = log;
|
|
30
|
+
this.pollingIntervalMs = 1000;
|
|
29
31
|
this.maxTxsPerBlock = 32;
|
|
30
32
|
this.minTxsPerBLock = 1;
|
|
31
33
|
this.lastPublishedBlock = 0;
|
|
32
34
|
this.state = SequencerState.STOPPED;
|
|
33
|
-
this.
|
|
34
|
-
|
|
35
|
+
this.updateConfig(config);
|
|
36
|
+
this.log(`Initialized sequencer with ${this.minTxsPerBLock}-${this.maxTxsPerBlock} txs per block.`);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Updates sequencer config.
|
|
40
|
+
* @param config - New parameters.
|
|
41
|
+
*/
|
|
42
|
+
updateConfig(config) {
|
|
43
|
+
if (config.transactionPollingIntervalMS)
|
|
44
|
+
this.pollingIntervalMs = config.transactionPollingIntervalMS;
|
|
45
|
+
if (config.maxTxsPerBlock)
|
|
35
46
|
this.maxTxsPerBlock = config.maxTxsPerBlock;
|
|
36
|
-
|
|
37
|
-
if (config.minTxsPerBlock) {
|
|
47
|
+
if (config.minTxsPerBlock)
|
|
38
48
|
this.minTxsPerBLock = config.minTxsPerBlock;
|
|
39
|
-
}
|
|
40
|
-
this.log(`Initialized sequencer with ${this.minTxsPerBLock}-${this.maxTxsPerBlock} txs per block.`);
|
|
41
49
|
}
|
|
42
50
|
/**
|
|
43
51
|
* Starts the sequencer and moves to IDLE state. Blocks until the initial sync is complete.
|
|
@@ -75,7 +83,7 @@ export class Sequencer {
|
|
|
75
83
|
return { state: this.state };
|
|
76
84
|
}
|
|
77
85
|
async initialSync() {
|
|
78
|
-
// TODO: Should we wait for
|
|
86
|
+
// TODO: Should we wait for world state to be ready, or is the caller expected to run await start?
|
|
79
87
|
this.lastPublishedBlock = await this.worldState.status().then((s) => s.syncedToL2Block);
|
|
80
88
|
}
|
|
81
89
|
/**
|
|
@@ -92,26 +100,27 @@ export class Sequencer {
|
|
|
92
100
|
// Do not go forward with new block if the previous one has not been mined and processed
|
|
93
101
|
if (!prevBlockSynced)
|
|
94
102
|
return;
|
|
103
|
+
const workTimer = new Timer();
|
|
95
104
|
this.state = SequencerState.WAITING_FOR_TXS;
|
|
96
105
|
// Get txs to build the new block
|
|
97
106
|
const pendingTxs = await this.p2pClient.getTxs();
|
|
98
107
|
if (pendingTxs.length < this.minTxsPerBLock)
|
|
99
108
|
return;
|
|
100
109
|
this.log.info(`Retrieved ${pendingTxs.length} txs from P2P pool`);
|
|
110
|
+
const blockNumber = (await this.l2BlockSource.getBlockNumber()) + 1;
|
|
111
|
+
const newGlobalVariables = await this.globalsBuilder.buildGlobalVariables(new Fr(blockNumber));
|
|
101
112
|
// Filter out invalid txs
|
|
102
113
|
// TODO: It should be responsibility of the P2P layer to validate txs before passing them on here
|
|
103
|
-
const validTxs = await this.takeValidTxs(pendingTxs);
|
|
114
|
+
const validTxs = await this.takeValidTxs(pendingTxs, newGlobalVariables);
|
|
104
115
|
if (validTxs.length < this.minTxsPerBLock)
|
|
105
116
|
return;
|
|
106
|
-
const blockNumber = (await this.l2BlockSource.getBlockNumber()) + 1;
|
|
107
117
|
this.log.info(`Building block ${blockNumber} with ${validTxs.length} transactions`);
|
|
108
118
|
this.state = SequencerState.CREATING_BLOCK;
|
|
109
|
-
const
|
|
110
|
-
const prevGlobalVariables = (await this.l2BlockSource.getL2Block(-1))?.globalVariables ?? GlobalVariables.empty();
|
|
119
|
+
const prevGlobalVariables = (await this.l2BlockSource.getBlock(-1))?.globalVariables ?? GlobalVariables.empty();
|
|
111
120
|
// Process txs and drop the ones that fail processing
|
|
112
121
|
// We create a fresh processor each time to reset any cached state (eg storage writes)
|
|
113
122
|
const processor = await this.publicProcessorFactory.create(prevGlobalVariables, newGlobalVariables);
|
|
114
|
-
const [processedTxs, failedTxs] = await processor.process(validTxs);
|
|
123
|
+
const [publicProcessorDuration, [processedTxs, failedTxs]] = await elapsed(() => processor.process(validTxs));
|
|
115
124
|
if (failedTxs.length > 0) {
|
|
116
125
|
const failedTxData = failedTxs.map(fail => fail.tx);
|
|
117
126
|
this.log(`Dropping failed txs ${(await Tx.getHashes(failedTxData)).join(', ')}`);
|
|
@@ -121,7 +130,7 @@ export class Sequencer {
|
|
|
121
130
|
// public functions emitting nullifiers would pass earlier check but fail here.
|
|
122
131
|
// Note that we're checking all nullifiers generated in the private execution twice,
|
|
123
132
|
// we could store the ones already checked and skip them here as an optimisation.
|
|
124
|
-
const processedValidTxs = await this.takeValidTxs(processedTxs);
|
|
133
|
+
const processedValidTxs = await this.takeValidTxs(processedTxs, newGlobalVariables);
|
|
125
134
|
if (processedValidTxs.length === 0) {
|
|
126
135
|
this.log('No txs processed correctly to build block. Exiting');
|
|
127
136
|
return;
|
|
@@ -133,8 +142,14 @@ export class Sequencer {
|
|
|
133
142
|
// Build the new block by running the rollup circuits
|
|
134
143
|
this.log(`Assembling block with txs ${processedValidTxs.map(tx => tx.hash).join(', ')}`);
|
|
135
144
|
const emptyTx = await processor.makeEmptyProcessedTx();
|
|
136
|
-
const block = await this.buildBlock(processedValidTxs, l1ToL2Messages, emptyTx, newGlobalVariables);
|
|
137
|
-
this.log(`Assembled block ${block.number}
|
|
145
|
+
const [rollupCircuitsDuration, block] = await elapsed(() => this.buildBlock(processedValidTxs, l1ToL2Messages, emptyTx, newGlobalVariables));
|
|
146
|
+
this.log(`Assembled block ${block.number}`, {
|
|
147
|
+
eventName: 'l2-block-built',
|
|
148
|
+
duration: workTimer.ms(),
|
|
149
|
+
publicProcessDuration: publicProcessorDuration,
|
|
150
|
+
rollupCircuitsDuration: rollupCircuitsDuration,
|
|
151
|
+
...block.getStats(),
|
|
152
|
+
});
|
|
138
153
|
await this.publishExtendedContractData(validTxs, block);
|
|
139
154
|
await this.publishL2Block(block);
|
|
140
155
|
this.log.info(`Submitted rollup block ${block.number} with ${processedValidTxs.length} transactions`);
|
|
@@ -187,15 +202,20 @@ export class Sequencer {
|
|
|
187
202
|
throw new Error(`Failed to publish block`);
|
|
188
203
|
}
|
|
189
204
|
}
|
|
190
|
-
async takeValidTxs(txs) {
|
|
205
|
+
async takeValidTxs(txs, globalVariables) {
|
|
191
206
|
const validTxs = [];
|
|
192
|
-
const
|
|
207
|
+
const txsToDelete = [];
|
|
193
208
|
const thisBlockNullifiers = new Set();
|
|
194
209
|
// Process txs until we get to maxTxsPerBlock, rejecting double spends in the process
|
|
195
210
|
for (const tx of txs) {
|
|
211
|
+
if (tx.data.constants.txContext.chainId.value !== globalVariables.chainId.value) {
|
|
212
|
+
this.log(`Deleting tx for incorrect chain ${tx.data.constants.txContext.chainId.toString()}, tx hash ${await Tx.getHash(tx)}`);
|
|
213
|
+
txsToDelete.push(tx);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
196
216
|
if (await this.isTxDoubleSpend(tx)) {
|
|
197
217
|
this.log(`Deleting double spend tx ${await Tx.getHash(tx)}`);
|
|
198
|
-
|
|
218
|
+
txsToDelete.push(tx);
|
|
199
219
|
continue;
|
|
200
220
|
}
|
|
201
221
|
else if (this.isTxDoubleSpendSameBlock(tx, thisBlockNullifiers)) {
|
|
@@ -210,8 +230,8 @@ export class Sequencer {
|
|
|
210
230
|
break;
|
|
211
231
|
}
|
|
212
232
|
// Make sure we remove these from the tx pool so we do not consider it again
|
|
213
|
-
if (
|
|
214
|
-
await this.p2pClient.deleteTxs(await Tx.getHashes([...
|
|
233
|
+
if (txsToDelete.length > 0) {
|
|
234
|
+
await this.p2pClient.deleteTxs(await Tx.getHashes([...txsToDelete]));
|
|
215
235
|
}
|
|
216
236
|
return validTxs;
|
|
217
237
|
}
|
|
@@ -322,4 +342,4 @@ export var SequencerState;
|
|
|
322
342
|
*/
|
|
323
343
|
SequencerState[SequencerState["STOPPED"] = 5] = "STOPPED";
|
|
324
344
|
})(SequencerState || (SequencerState = {}));
|
|
325
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbkUsT0FBTyxFQUFtRSxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR2pILE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUtqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSzdDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFRcEIsWUFDVSxTQUFzQixFQUN0QixjQUFxQyxFQUNyQyxTQUFjLEVBQ2QsVUFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLGtCQUFzQyxFQUN0QyxzQkFBOEMsRUFDdEQsTUFBdUIsRUFDZixNQUFNLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO1FBVjFDLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5QyxRQUFHLEdBQUgsR0FBRyxDQUF1QztR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
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RCxPQUFPLEVBQW1FLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJakgsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBS2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFLN0M7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQVFwQixZQUNVLFNBQXNCLEVBQ3RCLGNBQXFDLEVBQ3JDLFNBQWMsRUFDZCxVQUFrQyxFQUNsQyxZQUEwQixFQUMxQixhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsa0JBQXNDLEVBQ3RDLHNCQUE4QyxFQUN0RCxTQUEwQixFQUFFLEVBQ3BCLE1BQU0saUJBQWlCLENBQUMsaUJBQWlCLENBQUM7UUFWMUMsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUNkLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtR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
|
|
@@ -12,7 +12,7 @@ import { MerkleTreeOperations } from '@aztec/world-state';
|
|
|
12
12
|
export declare function getPublicExecutor(merkleTree: MerkleTreeOperations, publicContractsDB: PublicContractsDB, l1toL2MessageSource: L1ToL2MessageSource, blockData: HistoricBlockData): PublicExecutor;
|
|
13
13
|
/**
|
|
14
14
|
* Implements the PublicContractsDB using a ContractDataSource.
|
|
15
|
-
*
|
|
15
|
+
* Progressively records contracts in transaction as they are processed in a block.
|
|
16
16
|
*/
|
|
17
17
|
export declare class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
18
18
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public_executor.d.ts","sourceRoot":"","sources":["../../src/simulator/public_executor.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAgB,UAAU,EAAE,EAAE,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"public_executor.d.ts","sourceRoot":"","sources":["../../src/simulator/public_executor.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAgB,UAAU,EAAE,EAAE,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErH,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAgB,EAAE,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,oBAAoB,EAChC,iBAAiB,EAAE,iBAAiB,EACpC,mBAAmB,EAAE,mBAAmB,EACxC,SAAS,EAAE,iBAAiB,kBAQ7B;AAED;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,iBAAiB;;IAGvD,OAAO,CAAC,EAAE;IAFtB,KAAK,oCAA2C;gBAE5B,EAAE,EAAE,kBAAkB;IAE1C;;;OAGG;IACI,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7C;;;OAGG;IACI,kBAAkB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1C,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI3F,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAI9F,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;CAQvF;AAoCD;;GAEG;AACH,qBAAa,YAAa,YAAW,aAAa;IACpC,OAAO,CAAC,EAAE;IAAwB,OAAO,CAAC,mBAAmB;gBAArD,EAAE,EAAE,oBAAoB,EAAU,mBAAmB,EAAE,mBAAmB;IAEjF,gBAAgB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAalE,kBAAkB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAG7E"}
|
|
@@ -2,8 +2,8 @@ var _ContractsDataSourcePublicDB_instances, _ContractsDataSourcePublicDB_getCont
|
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
3
|
import { PublicExecutor, } from '@aztec/acir-simulator';
|
|
4
4
|
import { CircuitsWasm, Fr } from '@aztec/circuits.js';
|
|
5
|
+
import { computePublicDataTreeIndex } from '@aztec/circuits.js/abis';
|
|
5
6
|
import { MerkleTreeId } from '@aztec/types';
|
|
6
|
-
import { computePublicDataTreeLeafIndex } from '@aztec/world-state';
|
|
7
7
|
/**
|
|
8
8
|
* Returns a new PublicExecutor simulator backed by the supplied merkle tree db and contract data source.
|
|
9
9
|
* @param merkleTree - A merkle tree database.
|
|
@@ -15,7 +15,7 @@ export function getPublicExecutor(merkleTree, publicContractsDB, l1toL2MessageSo
|
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Implements the PublicContractsDB using a ContractDataSource.
|
|
18
|
-
*
|
|
18
|
+
* Progressively records contracts in transaction as they are processed in a block.
|
|
19
19
|
*/
|
|
20
20
|
export class ContractsDataSourcePublicDB {
|
|
21
21
|
constructor(db) {
|
|
@@ -82,7 +82,7 @@ class WorldStatePublicDB {
|
|
|
82
82
|
* @returns The current value in the storage slot.
|
|
83
83
|
*/
|
|
84
84
|
async storageRead(contract, slot) {
|
|
85
|
-
const index =
|
|
85
|
+
const index = computePublicDataTreeIndex(await CircuitsWasm.get(), contract, slot).value;
|
|
86
86
|
const cached = this.writeCache.get(index);
|
|
87
87
|
if (cached !== undefined)
|
|
88
88
|
return cached;
|
|
@@ -96,7 +96,7 @@ class WorldStatePublicDB {
|
|
|
96
96
|
* @param newValue - The new value to store.
|
|
97
97
|
*/
|
|
98
98
|
async storageWrite(contract, slot, newValue) {
|
|
99
|
-
const index =
|
|
99
|
+
const index = computePublicDataTreeIndex(await CircuitsWasm.get(), contract, slot).value;
|
|
100
100
|
this.writeCache.set(index, newValue);
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -123,4 +123,4 @@ export class WorldStateDB {
|
|
|
123
123
|
return await this.db.findLeafIndex(MerkleTreeId.PRIVATE_DATA_TREE, commitment.toBuffer());
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NpbXVsYXRvci9wdWJsaWNfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBSUwsY0FBYyxHQUVmLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFnQixZQUFZLEVBQWMsRUFBRSxFQUF1QyxNQUFNLG9CQUFvQixDQUFDO0FBQ3JILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFBaUUsWUFBWSxFQUFNLE1BQU0sY0FBYyxDQUFDO0FBRy9HOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixVQUFnQyxFQUNoQyxpQkFBb0MsRUFDcEMsbUJBQXdDLEVBQ3hDLFNBQTRCO0lBRTVCLE9BQU8sSUFBSSxjQUFjLENBQ3ZCLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQ2xDLGlCQUFpQixFQUNqQixJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsRUFDakQsU0FBUyxDQUNWLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLDJCQUEyQjtJQUd0QyxZQUFvQixFQUFzQjs7UUFBdEIsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFGMUMsVUFBSyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBRUgsQ0FBQztJQUU5Qzs7O09BR0c7SUFDSSxlQUFlLENBQUMsRUFBTTtRQUMzQixLQUFLLE1BQU0sUUFBUSxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUU7WUFDdEMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUM7WUFFOUQsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzVCLFNBQVM7YUFDVjtZQUVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public_kernel.d.ts","sourceRoot":"","sources":["../../src/simulator/public_kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAA+B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"public_kernel.d.ts","sourceRoot":"","sources":["../../src/simulator/public_kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAA+B,MAAM,oBAAoB,CAAC;AAK/G,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,qBAAa,gCAAiC,YAAW,4BAA4B;IACnF,OAAO,CAAC,GAAG,CAAsD;IAEjE;;;;OAIG;IACU,+BAA+B,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAa1G;;;;OAIG;IACU,oCAAoC,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAYhH"}
|
|
@@ -16,11 +16,11 @@ export class WasmPublicKernelCircuitSimulator {
|
|
|
16
16
|
async publicKernelCircuitPrivateInput(input) {
|
|
17
17
|
if (!input.previousKernel.publicInputs.isPrivate)
|
|
18
18
|
throw new Error(`Expected private kernel previous inputs`);
|
|
19
|
-
const [
|
|
19
|
+
const [duration, result] = await elapsed(() => simulatePublicKernelCircuit(input));
|
|
20
20
|
this.log(`Simulated public kernel circuit with private input`, {
|
|
21
21
|
eventName: 'circuit-simulation',
|
|
22
22
|
circuitName: 'public-kernel-private-input',
|
|
23
|
-
duration
|
|
23
|
+
duration,
|
|
24
24
|
inputSize: input.toBuffer().length,
|
|
25
25
|
outputSize: result.toBuffer().length,
|
|
26
26
|
});
|
|
@@ -34,15 +34,15 @@ export class WasmPublicKernelCircuitSimulator {
|
|
|
34
34
|
async publicKernelCircuitNonFirstIteration(input) {
|
|
35
35
|
if (input.previousKernel.publicInputs.isPrivate)
|
|
36
36
|
throw new Error(`Expected public kernel previous inputs`);
|
|
37
|
-
const [
|
|
37
|
+
const [duration, result] = await elapsed(() => simulatePublicKernelCircuit(input));
|
|
38
38
|
this.log(`Simulated public kernel circuit non-first iteration`, {
|
|
39
39
|
eventName: 'circuit-simulation',
|
|
40
40
|
circuitName: 'public-kernel-non-first-iteration',
|
|
41
|
-
duration
|
|
41
|
+
duration,
|
|
42
42
|
inputSize: input.toBuffer().length,
|
|
43
43
|
outputSize: result.toBuffer().length,
|
|
44
44
|
});
|
|
45
45
|
return result;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2tlcm5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW11bGF0b3IvcHVibGljX2tlcm5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdELDJCQUEyQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2xEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdDQUFnQztJQUE3QztRQUNVLFFBQUcsR0FBRyxpQkFBaUIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBcUNuRSxDQUFDO0lBbkNDOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsK0JBQStCLENBQUMsS0FBeUI7UUFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDN0csTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxHQUFHLENBQUMsb0RBQW9ELEVBQUU7WUFDN0QsU0FBUyxFQUFFLG9CQUFvQjtZQUMvQixXQUFXLEVBQUUsNkJBQTZCO1lBQzFDLFFBQVE7WUFDUixTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07WUFDbEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNO1NBQ0osQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLEtBQXlCO1FBQ3pFLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsU0FBUztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUMzRyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxREFBcUQsRUFBRTtZQUM5RCxTQUFTLEVBQUUsb0JBQW9CO1lBQy9CLFdBQVcsRUFBRSxtQ0FBbUM7WUFDaEQsUUFBUTtZQUNSLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTTtZQUNsQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07U0FDSixDQUFDLENBQUM7UUFDcEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/simulator/rollup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAGhB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EAIvB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/simulator/rollup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAGhB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EAIvB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;GAEG;AACH,qBAAa,0BAA2B,YAAW,eAAe;IAChE,OAAO,CAAC,GAAG,CAA+C;IAE1D;;;;OAIG;IACU,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAiB/F;;;;OAIG;IACU,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAkBjG;;;;OAIG;IACU,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAiBzF"}
|
package/dest/simulator/rollup.js
CHANGED
|
@@ -15,14 +15,14 @@ export class WasmRollupCircuitSimulator {
|
|
|
15
15
|
*/
|
|
16
16
|
async baseRollupCircuit(input) {
|
|
17
17
|
const wasm = await CircuitsWasm.get();
|
|
18
|
-
const [
|
|
18
|
+
const [duration, result] = await elapsed(() => baseRollupSim(wasm, input));
|
|
19
19
|
if (result instanceof CircuitError) {
|
|
20
20
|
throw new CircuitError(result.code, result.message);
|
|
21
21
|
}
|
|
22
22
|
this.log(`Simulated base rollup circuit`, {
|
|
23
23
|
eventName: 'circuit-simulation',
|
|
24
24
|
circuitName: 'base-rollup',
|
|
25
|
-
duration
|
|
25
|
+
duration,
|
|
26
26
|
inputSize: input.toBuffer().length,
|
|
27
27
|
outputSize: result.toBuffer().length,
|
|
28
28
|
});
|
|
@@ -35,14 +35,14 @@ export class WasmRollupCircuitSimulator {
|
|
|
35
35
|
*/
|
|
36
36
|
async mergeRollupCircuit(input) {
|
|
37
37
|
const wasm = await CircuitsWasm.get();
|
|
38
|
-
const [
|
|
38
|
+
const [duration, result] = await elapsed(() => mergeRollupSim(wasm, input));
|
|
39
39
|
if (result instanceof CircuitError) {
|
|
40
40
|
throw new CircuitError(result.code, result.message);
|
|
41
41
|
}
|
|
42
42
|
this.log(`Simulated merge rollup circuit`, {
|
|
43
43
|
eventName: 'circuit-simulation',
|
|
44
44
|
circuitName: 'merge-rollup',
|
|
45
|
-
duration
|
|
45
|
+
duration,
|
|
46
46
|
inputSize: input.toBuffer().length,
|
|
47
47
|
outputSize: result.toBuffer().length,
|
|
48
48
|
});
|
|
@@ -55,18 +55,18 @@ export class WasmRollupCircuitSimulator {
|
|
|
55
55
|
*/
|
|
56
56
|
async rootRollupCircuit(input) {
|
|
57
57
|
const wasm = await CircuitsWasm.get();
|
|
58
|
-
const [
|
|
58
|
+
const [duration, result] = await elapsed(() => rootRollupSim(wasm, input));
|
|
59
59
|
if (result instanceof CircuitError) {
|
|
60
60
|
throw new CircuitError(result.code, result.message);
|
|
61
61
|
}
|
|
62
62
|
this.log(`Simulated root rollup circuit`, {
|
|
63
63
|
eventName: 'circuit-simulation',
|
|
64
64
|
circuitName: 'root-rollup',
|
|
65
|
-
duration
|
|
65
|
+
duration,
|
|
66
66
|
inputSize: input.toBuffer().length,
|
|
67
67
|
outputSize: result.toBuffer().length,
|
|
68
68
|
});
|
|
69
69
|
return result;
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NpbXVsYXRvci9yb2xsdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFlBQVksRUFDWixZQUFZLEVBSVosYUFBYSxFQUNiLGNBQWMsRUFDZCxhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFLbEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sMEJBQTBCO0lBQXZDO1FBQ1UsUUFBRyxHQUFHLGlCQUFpQixDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFxRTVELENBQUM7SUFuRUM7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUF1QjtRQUNwRCxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzRSxJQUFJLE1BQU0sWUFBWSxZQUFZLEVBQUU7WUFDbEMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUU7WUFDeEMsU0FBUyxFQUFFLG9CQUFvQjtZQUMvQixXQUFXLEVBQUUsYUFBYTtZQUMxQixRQUFRO1lBQ1IsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNO1lBQ2xDLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTTtTQUNKLENBQUMsQ0FBQztRQUVwQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBd0I7UUFDdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxNQUFNLFlBQVksWUFBWSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxFQUFFO1lBQ3pDLFNBQVMsRUFBRSxvQkFBb0I7WUFDL0IsV0FBVyxFQUFFLGNBQWM7WUFDM0IsUUFBUTtZQUNSLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTTtZQUNsQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07U0FDSixDQUFDLENBQUM7UUFFcEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBdUI7UUFDcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxNQUFNLFlBQVksWUFBWSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLCtCQUErQixFQUFFO1lBQ3hDLFNBQVMsRUFBRSxvQkFBb0I7WUFDL0IsV0FBVyxFQUFFLGFBQWE7WUFDMUIsUUFBUTtZQUNSLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTTtZQUNsQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07U0FDSixDQUFDLENBQUM7UUFFcEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIn0=
|
package/dest/utils.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns a promise that resolves after ms milliseconds, returning
|
|
2
|
+
* Returns a promise that resolves after ms milliseconds, returning "returnValue".
|
|
3
3
|
* @param ms - How many milliseconds to sleep.
|
|
4
|
-
* @param
|
|
4
|
+
* @param returnValue - The return value of the promise.
|
|
5
5
|
*/
|
|
6
|
-
export declare function sleep<T>(ms: number,
|
|
6
|
+
export declare function sleep<T>(ms: number, returnValue: T): Promise<T>;
|
|
7
7
|
/**
|
|
8
8
|
* Returns the lowest power of two that is greater of equal to the input.
|
|
9
9
|
* @param num - The input.
|
package/dest/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
package/dest/utils.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns a promise that resolves after ms milliseconds, returning
|
|
2
|
+
* Returns a promise that resolves after ms milliseconds, returning "returnValue".
|
|
3
3
|
* @param ms - How many milliseconds to sleep.
|
|
4
|
-
* @param
|
|
4
|
+
* @param returnValue - The return value of the promise.
|
|
5
5
|
*/
|
|
6
|
-
export function sleep(ms,
|
|
7
|
-
return new Promise(resolve => setTimeout(() => resolve(
|
|
6
|
+
export function sleep(ms, returnValue) {
|
|
7
|
+
return new Promise(resolve => setTimeout(() => resolve(returnValue), ms));
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* Returns the lowest power of two that is greater of equal to the input.
|
|
@@ -13,4 +13,4 @@ export function sleep(ms, retval) {
|
|
|
13
13
|
export function ceilPowerOfTwo(num) {
|
|
14
14
|
return 2 ** Math.ceil(Math.log2(num));
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUksRUFBVSxFQUFFLFdBQWM7SUFDakQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxHQUFXO0lBQ3hDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.11",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -32,15 +32,15 @@
|
|
|
32
32
|
"rootDir": "./src"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@aztec/acir-simulator": "0.8.
|
|
36
|
-
"@aztec/circuits.js": "0.8.
|
|
37
|
-
"@aztec/ethereum": "0.8.
|
|
38
|
-
"@aztec/foundation": "0.8.
|
|
39
|
-
"@aztec/l1-artifacts": "0.8.
|
|
40
|
-
"@aztec/merkle-tree": "0.8.
|
|
41
|
-
"@aztec/p2p": "0.8.
|
|
42
|
-
"@aztec/types": "0.8.
|
|
43
|
-
"@aztec/world-state": "0.8.
|
|
35
|
+
"@aztec/acir-simulator": "0.8.11",
|
|
36
|
+
"@aztec/circuits.js": "0.8.11",
|
|
37
|
+
"@aztec/ethereum": "0.8.11",
|
|
38
|
+
"@aztec/foundation": "0.8.11",
|
|
39
|
+
"@aztec/l1-artifacts": "0.8.11",
|
|
40
|
+
"@aztec/merkle-tree": "0.8.11",
|
|
41
|
+
"@aztec/p2p": "0.8.11",
|
|
42
|
+
"@aztec/types": "0.8.11",
|
|
43
|
+
"@aztec/world-state": "0.8.11",
|
|
44
44
|
"lodash.chunk": "^4.2.0",
|
|
45
45
|
"lodash.flatmap": "^4.5.0",
|
|
46
46
|
"lodash.pick": "^4.4.0",
|
|
@@ -36,7 +36,12 @@ import {
|
|
|
36
36
|
VerificationKey,
|
|
37
37
|
makeTuple,
|
|
38
38
|
} from '@aztec/circuits.js';
|
|
39
|
-
import {
|
|
39
|
+
import {
|
|
40
|
+
computeBlockHash,
|
|
41
|
+
computeBlockHashWithGlobals,
|
|
42
|
+
computeContractLeaf,
|
|
43
|
+
computeGlobalsHash,
|
|
44
|
+
} from '@aztec/circuits.js/abis';
|
|
40
45
|
import { toFriendlyJSON } from '@aztec/circuits.js/utils';
|
|
41
46
|
import { toBigIntBE } from '@aztec/foundation/bigint-buffer';
|
|
42
47
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
@@ -44,7 +49,7 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
44
49
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
45
50
|
import { Tuple, assertLength } from '@aztec/foundation/serialize';
|
|
46
51
|
import { ContractData, L2Block, L2BlockL2Logs, MerkleTreeId, PublicDataWrite, TxL2Logs } from '@aztec/types';
|
|
47
|
-
import { MerkleTreeOperations
|
|
52
|
+
import { MerkleTreeOperations } from '@aztec/world-state';
|
|
48
53
|
|
|
49
54
|
import chunk from 'lodash.chunk';
|
|
50
55
|
import flatMap from 'lodash.flatmap';
|
|
@@ -308,7 +313,7 @@ export class SoloBlockBuilder implements BlockBuilder {
|
|
|
308
313
|
// Update the root trees with the latest data and contract tree roots,
|
|
309
314
|
// and validate them against the output of the root circuit simulation
|
|
310
315
|
this.debug(`Updating and validating root trees`);
|
|
311
|
-
const globalVariablesHash = await
|
|
316
|
+
const globalVariablesHash = computeGlobalsHash(await CircuitsWasm.get(), left[0].constants.globalVariables);
|
|
312
317
|
await this.db.updateLatestGlobalVariablesHash(globalVariablesHash);
|
|
313
318
|
await this.db.updateHistoricBlocksTree(globalVariablesHash);
|
|
314
319
|
|
|
@@ -5,7 +5,7 @@ import { WorldStateSynchronizer } from '@aztec/world-state';
|
|
|
5
5
|
import { SoloBlockBuilder } from '../block_builder/solo_block_builder.js';
|
|
6
6
|
import { SequencerClientConfig } from '../config.js';
|
|
7
7
|
import { getGlobalVariableBuilder } from '../global_variable_builder/index.js';
|
|
8
|
-
import { Sequencer, getL1Publisher, getVerificationKeys } from '../index.js';
|
|
8
|
+
import { Sequencer, SequencerConfig, getL1Publisher, getVerificationKeys } from '../index.js';
|
|
9
9
|
import { EmptyRollupProver } from '../prover/empty.js';
|
|
10
10
|
import { PublicProcessorFactory } from '../sequencer/public_processor.js';
|
|
11
11
|
import { WasmRollupCircuitSimulator } from '../simulator/rollup.js';
|
|
@@ -64,6 +64,14 @@ export class SequencerClient {
|
|
|
64
64
|
return new SequencerClient(sequencer);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Updates sequencer config.
|
|
69
|
+
* @param config - New parameters.
|
|
70
|
+
*/
|
|
71
|
+
public updateSequencerConfig(config: SequencerConfig) {
|
|
72
|
+
this.sequencer.updateConfig(config);
|
|
73
|
+
}
|
|
74
|
+
|
|
67
75
|
/**
|
|
68
76
|
* Stops the sequencer from processing new txs.
|
|
69
77
|
*/
|
package/src/config.ts
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
|
-
import { L1ContractAddresses } from '@aztec/ethereum';
|
|
1
|
+
import { L1ContractAddresses, NULL_KEY } from '@aztec/ethereum';
|
|
2
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
|
|
4
|
+
import { Hex } from 'viem';
|
|
5
|
+
|
|
4
6
|
import { GlobalReaderConfig } from './global_variable_builder/index.js';
|
|
5
7
|
import { PublisherConfig, TxSenderConfig } from './publisher/config.js';
|
|
6
8
|
import { SequencerConfig } from './sequencer/config.js';
|
|
7
9
|
|
|
10
|
+
/** Chain configuration. */
|
|
11
|
+
type ChainConfig = {
|
|
12
|
+
/** The chain id of the ethereum host. */
|
|
13
|
+
chainId: number;
|
|
14
|
+
/** The version of the rollup. */
|
|
15
|
+
version: number;
|
|
16
|
+
};
|
|
17
|
+
|
|
8
18
|
/**
|
|
9
19
|
* Configuration settings for the SequencerClient.
|
|
10
20
|
*/
|
|
11
|
-
export type SequencerClientConfig = PublisherConfig &
|
|
21
|
+
export type SequencerClientConfig = PublisherConfig &
|
|
22
|
+
TxSenderConfig &
|
|
23
|
+
SequencerConfig &
|
|
24
|
+
GlobalReaderConfig &
|
|
25
|
+
ChainConfig;
|
|
12
26
|
|
|
13
27
|
/**
|
|
14
28
|
* Creates an instance of SequencerClientConfig out of environment variables using sensible defaults for integration testing if not set.
|
|
@@ -20,7 +34,7 @@ export function getConfigEnvVars(): SequencerClientConfig {
|
|
|
20
34
|
CHAIN_ID,
|
|
21
35
|
VERSION,
|
|
22
36
|
API_KEY,
|
|
23
|
-
|
|
37
|
+
SEQ_REQUIRED_CONFIRMATIONS,
|
|
24
38
|
SEQ_PUBLISH_RETRY_INTERVAL_MS,
|
|
25
39
|
SEQ_TX_POLLING_INTERVAL_MS,
|
|
26
40
|
SEQ_MAX_TX_PER_BLOCK,
|
|
@@ -31,11 +45,9 @@ export function getConfigEnvVars(): SequencerClientConfig {
|
|
|
31
45
|
CONTRACT_DEPLOYMENT_EMITTER_ADDRESS,
|
|
32
46
|
} = process.env;
|
|
33
47
|
|
|
34
|
-
const publisherPrivateKey:
|
|
35
|
-
SEQ_PUBLISHER_PRIVATE_KEY
|
|
36
|
-
|
|
37
|
-
: '0000000000000000000000000000000000000000000000000000000000000000'
|
|
38
|
-
}`;
|
|
48
|
+
const publisherPrivateKey: Hex = SEQ_PUBLISHER_PRIVATE_KEY
|
|
49
|
+
? `0x${SEQ_PUBLISHER_PRIVATE_KEY.replace('0x', '')}`
|
|
50
|
+
: NULL_KEY;
|
|
39
51
|
// Populate the relevant addresses for use by the sequencer
|
|
40
52
|
const addresses: L1ContractAddresses = {
|
|
41
53
|
rollupAddress: ROLLUP_CONTRACT_ADDRESS ? EthAddress.fromString(ROLLUP_CONTRACT_ADDRESS) : EthAddress.ZERO,
|
|
@@ -53,7 +65,7 @@ export function getConfigEnvVars(): SequencerClientConfig {
|
|
|
53
65
|
chainId: CHAIN_ID ? +CHAIN_ID : 31337, // 31337 is the default chain id for anvil
|
|
54
66
|
version: VERSION ? +VERSION : 1, // 1 is our default version
|
|
55
67
|
apiKey: API_KEY,
|
|
56
|
-
requiredConfirmations:
|
|
68
|
+
requiredConfirmations: SEQ_REQUIRED_CONFIRMATIONS ? +SEQ_REQUIRED_CONFIRMATIONS : 1,
|
|
57
69
|
l1BlockPublishRetryIntervalMS: SEQ_PUBLISH_RETRY_INTERVAL_MS ? +SEQ_PUBLISH_RETRY_INTERVAL_MS : 1_000,
|
|
58
70
|
transactionPollingIntervalMS: SEQ_TX_POLLING_INTERVAL_MS ? +SEQ_TX_POLLING_INTERVAL_MS : 1_000,
|
|
59
71
|
l1Contracts: addresses,
|