@aztec/archiver 0.82.3 → 0.83.1-alpha-testnet.0
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/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +10 -5
- package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.js +14 -0
- package/dest/archiver/config.d.ts +2 -2
- package/dest/archiver/config.d.ts.map +1 -1
- package/dest/archiver/config.js +4 -4
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/block_store.js +9 -2
- package/dest/archiver/kv_archiver_store/log_store.js +4 -4
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +2 -0
- package/package.json +12 -12
- package/src/archiver/archiver.ts +12 -5
- package/src/archiver/archiver_store_test_suite.ts +15 -0
- package/src/archiver/config.ts +6 -6
- package/src/archiver/kv_archiver_store/block_store.ts +11 -5
- package/src/archiver/kv_archiver_store/log_store.ts +4 -4
- package/src/test/mock_l2_block_source.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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"}
|
|
@@ -208,14 +208,19 @@ import { ArchiverInstrumentation } from './instrumentation.js';
|
|
|
208
208
|
const localPendingBlockNumber = BigInt(await this.getBlockNumber());
|
|
209
209
|
const canPrune = localPendingBlockNumber > provenBlockNumber && await this.canPrune(currentL1BlockNumber, currentL1Timestamp);
|
|
210
210
|
if (canPrune) {
|
|
211
|
-
const
|
|
212
|
-
const
|
|
211
|
+
const pruneFrom = provenBlockNumber + 1n;
|
|
212
|
+
const header = await this.getBlockHeader(Number(pruneFrom));
|
|
213
|
+
if (header === undefined) {
|
|
214
|
+
throw new Error(`Missing block header ${pruneFrom}`);
|
|
215
|
+
}
|
|
216
|
+
const pruneFromSlotNumber = header.globalVariables.slotNumber.toBigInt();
|
|
217
|
+
const pruneFromEpochNumber = getEpochAtSlot(pruneFromSlotNumber, this.l1constants);
|
|
213
218
|
// Emit an event for listening services to react to the chain prune
|
|
214
219
|
this.emit(L2BlockSourceEvents.L2PruneDetected, {
|
|
215
220
|
type: L2BlockSourceEvents.L2PruneDetected,
|
|
216
|
-
blockNumber:
|
|
217
|
-
slotNumber:
|
|
218
|
-
epochNumber:
|
|
221
|
+
blockNumber: pruneFrom,
|
|
222
|
+
slotNumber: pruneFromSlotNumber,
|
|
223
|
+
epochNumber: pruneFromEpochNumber
|
|
219
224
|
});
|
|
220
225
|
const blocksToUnwind = localPendingBlockNumber - provenBlockNumber;
|
|
221
226
|
this.log.debug(`L2 prune from ${provenBlockNumber + 1n} to ${localPendingBlockNumber} will occur on next block submission.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver_store_test_suite.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store_test_suite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archiver_store_test_suite.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store_test_suite.ts"],"names":[],"mappings":"AA0BA,OAAO,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,qBAAqB,CAAC;AAGnF;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAmvB/D"}
|
|
@@ -3,6 +3,7 @@ import { times, timesParallel } from '@aztec/foundation/collection';
|
|
|
3
3
|
import { randomInt } from '@aztec/foundation/crypto';
|
|
4
4
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
5
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
6
7
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
8
|
import { L2Block, wrapInBlock } from '@aztec/stdlib/block';
|
|
8
9
|
import { SerializableContractInstance, computePublicBytecodeCommitment } from '@aztec/stdlib/contract';
|
|
@@ -240,6 +241,19 @@ import { TxEffect, TxHash } from '@aztec/stdlib/tx';
|
|
|
240
241
|
it('returns undefined if tx is not found', async ()=>{
|
|
241
242
|
await expect(store.getTxEffect(TxHash.random())).resolves.toBeUndefined();
|
|
242
243
|
});
|
|
244
|
+
it('does not fail if the block is unwound while requesting a tx', async ()=>{
|
|
245
|
+
const expectedTx = await wrapInBlock(blocks[1].block.body.txEffects[0], blocks[1].block);
|
|
246
|
+
let done = false;
|
|
247
|
+
void (async ()=>{
|
|
248
|
+
while(!done){
|
|
249
|
+
void store.getTxEffect(expectedTx.data.txHash);
|
|
250
|
+
await sleep(1);
|
|
251
|
+
}
|
|
252
|
+
})();
|
|
253
|
+
await store.unwindBlocks(blocks.length, blocks.length);
|
|
254
|
+
done = true;
|
|
255
|
+
expect(await store.getTxEffect(expectedTx.data.txHash)).toEqual(undefined);
|
|
256
|
+
});
|
|
243
257
|
});
|
|
244
258
|
describe('L1 to L2 Messages', ()=>{
|
|
245
259
|
const l2BlockNumber = 13n;
|
|
@@ -14,8 +14,8 @@ import { type ChainConfig } from '@aztec/stdlib/config';
|
|
|
14
14
|
export type ArchiverConfig = {
|
|
15
15
|
/** URL for an archiver service. If set, will return an archiver client as opposed to starting a new one. */
|
|
16
16
|
archiverUrl?: string;
|
|
17
|
-
/**
|
|
18
|
-
|
|
17
|
+
/** List of URLS for L1 consensus clients */
|
|
18
|
+
l1ConsensusHostUrls?: string[];
|
|
19
19
|
/** The polling interval in ms for retrieving new L2 blocks and encrypted logs. */
|
|
20
20
|
archiverPollingIntervalMS?: number;
|
|
21
21
|
/** The number of L2 blocks the archiver will attempt to download at a time. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/archiver/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAE7E;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,4GAA4G;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/archiver/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAE7E;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,4GAA4G;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B,kFAAkF;IAClF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,yCAAyC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IAEjC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qGAAqG;IACrG,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,GAAG,cAAc,GAChB,iBAAiB,GACjB,cAAc,GACd,WAAW,CAAC;AAEd,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,cAAc,CAwCrE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD"}
|
package/dest/archiver/config.js
CHANGED
|
@@ -8,10 +8,10 @@ export const archiverConfigMappings = {
|
|
|
8
8
|
env: 'ARCHIVER_URL',
|
|
9
9
|
description: 'URL for an archiver service. If set, will return an archiver client as opposed to starting a new one.'
|
|
10
10
|
},
|
|
11
|
-
|
|
12
|
-
env: '
|
|
13
|
-
description: '
|
|
14
|
-
parseEnv: (val)=>val
|
|
11
|
+
l1ConsensusHostUrls: {
|
|
12
|
+
env: 'L1_CONSENSUS_HOST_URLS',
|
|
13
|
+
description: 'List of URLS for L1 consensus clients.',
|
|
14
|
+
parseEnv: (val)=>val.split(',').map((url)=>url.trim().replace(/\/$/, ''))
|
|
15
15
|
},
|
|
16
16
|
archiverPollingIntervalMS: {
|
|
17
17
|
env: 'ARCHIVER_POLLING_INTERVAL_MS',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/block_store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAA6C,MAAM,iBAAiB,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAQ,KAAK,OAAO,EAAwB,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAWzE;;GAEG;AACH,qBAAa,UAAU;;IAwBT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,iBAAiB;IAUzC;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B7D;;;;;;OAMG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IA0BvD;;;;;OAKG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../../src/archiver/kv_archiver_store/block_store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAA6C,MAAM,iBAAiB,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAQ,KAAK,OAAO,EAAwB,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAWzE;;GAEG;AACH,qBAAa,UAAU;;IAwBT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,iBAAiB;IAUzC;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B7D;;;;;;OAMG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IA0BvD;;;;;OAKG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;IASvF;;;;OAIG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQ1E;;;;;OAKG;IACI,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAC,WAAW,CAAC;YAM1E,wBAAwB;IAetC;;;;OAIG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAkBzE;;;;OAIG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAuBzE;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAI1F;;;;OAIG;IACH,mBAAmB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAI7G;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKhD;;;OAGG;IACH,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAItD,uBAAuB,CAAC,aAAa,EAAE,MAAM;IAIvC,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/C,sBAAsB,CAAC,WAAW,EAAE,MAAM;CAe3C"}
|
|
@@ -93,7 +93,10 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
93
93
|
* @returns The requested L2 blocks
|
|
94
94
|
*/ async *getBlocks(start, limit) {
|
|
95
95
|
for await (const blockStorage of this.#blocks.valuesAsync(this.#computeBlockRange(start, limit))){
|
|
96
|
-
|
|
96
|
+
const block = await this.getBlockFromBlockStorage(blockStorage);
|
|
97
|
+
if (block) {
|
|
98
|
+
yield block;
|
|
99
|
+
}
|
|
97
100
|
}
|
|
98
101
|
}
|
|
99
102
|
/**
|
|
@@ -123,7 +126,8 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
123
126
|
const blockHash = (await header.hash()).toString();
|
|
124
127
|
const blockBodyBuffer = await this.#blockBodies.getAsync(blockHash);
|
|
125
128
|
if (blockBodyBuffer === undefined) {
|
|
126
|
-
|
|
129
|
+
this.#log.warn(`Could not find body for block ${header.globalVariables.blockNumber.toNumber()} ${blockHash}`);
|
|
130
|
+
return undefined;
|
|
127
131
|
}
|
|
128
132
|
const body = Body.fromBuffer(blockBodyBuffer);
|
|
129
133
|
const block = new L2Block(archive, header, body);
|
|
@@ -163,6 +167,9 @@ export { TxReceipt } from '@aztec/stdlib/tx';
|
|
|
163
167
|
return undefined;
|
|
164
168
|
}
|
|
165
169
|
const block = await this.getBlock(blockNumber);
|
|
170
|
+
if (!block) {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
166
173
|
const tx = block.block.body.txEffects[txIndex];
|
|
167
174
|
return new TxReceipt(txHash, TxReceipt.statusFromRevertCode(tx.revertCode), '', tx.transactionFee.toBigInt(), L2BlockHash.fromField(await block.block.hash()), block.block.number);
|
|
168
175
|
}
|
|
@@ -31,18 +31,18 @@ import { ContractClassLog, ExtendedContractClassLog, ExtendedPublicLog, LogId, P
|
|
|
31
31
|
block.body.txEffects.forEach((txEffect, txIndex)=>{
|
|
32
32
|
const txHash = txEffect.txHash;
|
|
33
33
|
const dataStartIndexForTx = dataStartIndexForBlock + txIndex * MAX_NOTE_HASHES_PER_TX;
|
|
34
|
-
txEffect.privateLogs.forEach((log)=>{
|
|
34
|
+
txEffect.privateLogs.forEach((log, logIndex)=>{
|
|
35
35
|
const tag = log.fields[0];
|
|
36
36
|
this.#log.debug(`Found private log with tag ${tag.toString()} in block ${block.number}`);
|
|
37
37
|
const currentLogs = taggedLogs.get(tag.toString()) ?? [];
|
|
38
|
-
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, block.number, log).toBuffer());
|
|
38
|
+
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, logIndex, block.number, log).toBuffer());
|
|
39
39
|
taggedLogs.set(tag.toString(), currentLogs);
|
|
40
40
|
});
|
|
41
|
-
txEffect.publicLogs.forEach((log)=>{
|
|
41
|
+
txEffect.publicLogs.forEach((log, logIndex)=>{
|
|
42
42
|
const tag = log.log[0];
|
|
43
43
|
this.#log.debug(`Found public log with tag ${tag.toString()} in block ${block.number}`);
|
|
44
44
|
const currentLogs = taggedLogs.get(tag.toString()) ?? [];
|
|
45
|
-
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, block.number, log).toBuffer());
|
|
45
|
+
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, logIndex, block.number, log).toBuffer());
|
|
46
46
|
taggedLogs.set(tag.toString(), currentLogs);
|
|
47
47
|
});
|
|
48
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAe,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,KAAK,iBAAiB,EAAwB,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,EAAE,SAAS,EAAY,MAAM,kBAAkB,CAAC;AAEjF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAM;IAEnC,OAAO,CAAC,iBAAiB,CAAa;IAEtC,OAAO,CAAC,GAAG,CAAiD;IAE/C,YAAY,CAAC,SAAS,EAAE,MAAM;IAUpC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE;IAK3B,YAAY,CAAC,SAAS,EAAE,MAAM;IAK9B,oBAAoB,CAAC,iBAAiB,EAAE,MAAM;IAIrD;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIzC;;;OAGG;IACI,cAAc;IAId,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9C;;;;OAIG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM;IAI9B;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAQjD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;;;;;;;;;IAa7E,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAI3E,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAU1D,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAIpE;;;;OAIG;IACU,WAAW,CAAC,MAAM,EAAE,MAAM;;;;;IAWvC;;;;OAIG;IACU,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAkB1E,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA2BlC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvD,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI5C;;;OAGG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAe,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,KAAK,iBAAiB,EAAwB,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,EAAE,SAAS,EAAY,MAAM,kBAAkB,CAAC;AAEjF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAM;IAEnC,OAAO,CAAC,iBAAiB,CAAa;IAEtC,OAAO,CAAC,GAAG,CAAiD;IAE/C,YAAY,CAAC,SAAS,EAAE,MAAM;IAUpC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE;IAK3B,YAAY,CAAC,SAAS,EAAE,MAAM;IAK9B,oBAAoB,CAAC,iBAAiB,EAAE,MAAM;IAIrD;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIzC;;;OAGG;IACI,cAAc;IAId,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9C;;;;OAIG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM;IAI9B;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAQjD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;;;;;;;;;IAa7E,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAI3E,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAU1D,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAIpE;;;;OAIG;IACU,WAAW,CAAC,MAAM,EAAE,MAAM;;;;;IAWvC;;;;OAIG;IACU,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAkB1E,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA2BlC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvD,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI5C;;;OAGG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B;;;OAGG;IACI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
|
|
@@ -168,12 +168,14 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
168
168
|
* Starts the block source. In this mock implementation, this is a noop.
|
|
169
169
|
* @returns A promise that signals the initialization of the l2 block source on completion.
|
|
170
170
|
*/ start() {
|
|
171
|
+
this.log.verbose('Starting mock L2 block source');
|
|
171
172
|
return Promise.resolve();
|
|
172
173
|
}
|
|
173
174
|
/**
|
|
174
175
|
* Stops the block source. In this mock implementation, this is a noop.
|
|
175
176
|
* @returns A promise that signals the l2 block source is now stopped.
|
|
176
177
|
*/ stop() {
|
|
178
|
+
this.log.verbose('Stopping mock L2 block source');
|
|
177
179
|
return Promise.resolve();
|
|
178
180
|
}
|
|
179
181
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.83.1-alpha-testnet.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -64,17 +64,17 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@aztec/blob-lib": "0.
|
|
68
|
-
"@aztec/blob-sink": "0.
|
|
69
|
-
"@aztec/constants": "0.
|
|
70
|
-
"@aztec/ethereum": "0.
|
|
71
|
-
"@aztec/foundation": "0.
|
|
72
|
-
"@aztec/kv-store": "0.
|
|
73
|
-
"@aztec/l1-artifacts": "0.
|
|
74
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
75
|
-
"@aztec/protocol-contracts": "0.
|
|
76
|
-
"@aztec/stdlib": "0.
|
|
77
|
-
"@aztec/telemetry-client": "0.
|
|
67
|
+
"@aztec/blob-lib": "0.83.1-alpha-testnet.0",
|
|
68
|
+
"@aztec/blob-sink": "0.83.1-alpha-testnet.0",
|
|
69
|
+
"@aztec/constants": "0.83.1-alpha-testnet.0",
|
|
70
|
+
"@aztec/ethereum": "0.83.1-alpha-testnet.0",
|
|
71
|
+
"@aztec/foundation": "0.83.1-alpha-testnet.0",
|
|
72
|
+
"@aztec/kv-store": "0.83.1-alpha-testnet.0",
|
|
73
|
+
"@aztec/l1-artifacts": "0.83.1-alpha-testnet.0",
|
|
74
|
+
"@aztec/noir-protocol-circuits-types": "0.83.1-alpha-testnet.0",
|
|
75
|
+
"@aztec/protocol-contracts": "0.83.1-alpha-testnet.0",
|
|
76
|
+
"@aztec/stdlib": "0.83.1-alpha-testnet.0",
|
|
77
|
+
"@aztec/telemetry-client": "0.83.1-alpha-testnet.0",
|
|
78
78
|
"debug": "^4.3.4",
|
|
79
79
|
"lodash.groupby": "^4.6.0",
|
|
80
80
|
"lodash.omit": "^4.5.0",
|
package/src/archiver/archiver.ts
CHANGED
|
@@ -313,15 +313,22 @@ export class Archiver extends EventEmitter implements ArchiveSource, Traceable {
|
|
|
313
313
|
localPendingBlockNumber > provenBlockNumber && (await this.canPrune(currentL1BlockNumber, currentL1Timestamp));
|
|
314
314
|
|
|
315
315
|
if (canPrune) {
|
|
316
|
-
const
|
|
317
|
-
|
|
316
|
+
const pruneFrom = provenBlockNumber + 1n;
|
|
317
|
+
|
|
318
|
+
const header = await this.getBlockHeader(Number(pruneFrom));
|
|
319
|
+
if (header === undefined) {
|
|
320
|
+
throw new Error(`Missing block header ${pruneFrom}`);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
const pruneFromSlotNumber = header.globalVariables.slotNumber.toBigInt();
|
|
324
|
+
const pruneFromEpochNumber = getEpochAtSlot(pruneFromSlotNumber, this.l1constants);
|
|
318
325
|
|
|
319
326
|
// Emit an event for listening services to react to the chain prune
|
|
320
327
|
this.emit(L2BlockSourceEvents.L2PruneDetected, {
|
|
321
328
|
type: L2BlockSourceEvents.L2PruneDetected,
|
|
322
|
-
blockNumber:
|
|
323
|
-
slotNumber:
|
|
324
|
-
epochNumber:
|
|
329
|
+
blockNumber: pruneFrom,
|
|
330
|
+
slotNumber: pruneFromSlotNumber,
|
|
331
|
+
epochNumber: pruneFromEpochNumber,
|
|
325
332
|
});
|
|
326
333
|
|
|
327
334
|
const blocksToUnwind = localPendingBlockNumber - provenBlockNumber;
|
|
@@ -8,6 +8,7 @@ import { times, timesParallel } from '@aztec/foundation/collection';
|
|
|
8
8
|
import { randomInt } from '@aztec/foundation/crypto';
|
|
9
9
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
10
10
|
import { Fr } from '@aztec/foundation/fields';
|
|
11
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
11
12
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
12
13
|
import { L2Block, wrapInBlock } from '@aztec/stdlib/block';
|
|
13
14
|
import {
|
|
@@ -254,6 +255,20 @@ export function describeArchiverDataStore(
|
|
|
254
255
|
it('returns undefined if tx is not found', async () => {
|
|
255
256
|
await expect(store.getTxEffect(TxHash.random())).resolves.toBeUndefined();
|
|
256
257
|
});
|
|
258
|
+
|
|
259
|
+
it('does not fail if the block is unwound while requesting a tx', async () => {
|
|
260
|
+
const expectedTx = await wrapInBlock(blocks[1].block.body.txEffects[0], blocks[1].block);
|
|
261
|
+
let done = false;
|
|
262
|
+
void (async () => {
|
|
263
|
+
while (!done) {
|
|
264
|
+
void store.getTxEffect(expectedTx.data.txHash);
|
|
265
|
+
await sleep(1);
|
|
266
|
+
}
|
|
267
|
+
})();
|
|
268
|
+
await store.unwindBlocks(blocks.length, blocks.length);
|
|
269
|
+
done = true;
|
|
270
|
+
expect(await store.getTxEffect(expectedTx.data.txHash)).toEqual(undefined);
|
|
271
|
+
});
|
|
257
272
|
});
|
|
258
273
|
|
|
259
274
|
describe('L1 to L2 Messages', () => {
|
package/src/archiver/config.ts
CHANGED
|
@@ -23,8 +23,8 @@ export type ArchiverConfig = {
|
|
|
23
23
|
/** URL for an archiver service. If set, will return an archiver client as opposed to starting a new one. */
|
|
24
24
|
archiverUrl?: string;
|
|
25
25
|
|
|
26
|
-
/**
|
|
27
|
-
|
|
26
|
+
/** List of URLS for L1 consensus clients */
|
|
27
|
+
l1ConsensusHostUrls?: string[];
|
|
28
28
|
|
|
29
29
|
/** The polling interval in ms for retrieving new L2 blocks and encrypted logs. */
|
|
30
30
|
archiverPollingIntervalMS?: number;
|
|
@@ -55,10 +55,10 @@ export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
|
|
|
55
55
|
description:
|
|
56
56
|
'URL for an archiver service. If set, will return an archiver client as opposed to starting a new one.',
|
|
57
57
|
},
|
|
58
|
-
|
|
59
|
-
env: '
|
|
60
|
-
description: '
|
|
61
|
-
parseEnv: (val: string) => val,
|
|
58
|
+
l1ConsensusHostUrls: {
|
|
59
|
+
env: 'L1_CONSENSUS_HOST_URLS',
|
|
60
|
+
description: 'List of URLS for L1 consensus clients.',
|
|
61
|
+
parseEnv: (val: string) => val.split(',').map(url => url.trim().replace(/\/$/, '')),
|
|
62
62
|
},
|
|
63
63
|
archiverPollingIntervalMS: {
|
|
64
64
|
env: 'ARCHIVER_POLLING_INTERVAL_MS',
|
|
@@ -131,7 +131,10 @@ export class BlockStore {
|
|
|
131
131
|
*/
|
|
132
132
|
async *getBlocks(start: number, limit: number): AsyncIterableIterator<PublishedL2Block> {
|
|
133
133
|
for await (const blockStorage of this.#blocks.valuesAsync(this.#computeBlockRange(start, limit))) {
|
|
134
|
-
|
|
134
|
+
const block = await this.getBlockFromBlockStorage(blockStorage);
|
|
135
|
+
if (block) {
|
|
136
|
+
yield block;
|
|
137
|
+
}
|
|
135
138
|
}
|
|
136
139
|
}
|
|
137
140
|
|
|
@@ -166,9 +169,8 @@ export class BlockStore {
|
|
|
166
169
|
const blockHash = (await header.hash()).toString();
|
|
167
170
|
const blockBodyBuffer = await this.#blockBodies.getAsync(blockHash);
|
|
168
171
|
if (blockBodyBuffer === undefined) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
);
|
|
172
|
+
this.#log.warn(`Could not find body for block ${header.globalVariables.blockNumber.toNumber()} ${blockHash}`);
|
|
173
|
+
return undefined;
|
|
172
174
|
}
|
|
173
175
|
const body = Body.fromBuffer(blockBodyBuffer);
|
|
174
176
|
const block = new L2Block(archive, header, body);
|
|
@@ -210,7 +212,11 @@ export class BlockStore {
|
|
|
210
212
|
return undefined;
|
|
211
213
|
}
|
|
212
214
|
|
|
213
|
-
const block =
|
|
215
|
+
const block = await this.getBlock(blockNumber);
|
|
216
|
+
if (!block) {
|
|
217
|
+
return undefined;
|
|
218
|
+
}
|
|
219
|
+
|
|
214
220
|
const tx = block.block.body.txEffects[txIndex];
|
|
215
221
|
|
|
216
222
|
return new TxReceipt(
|
|
@@ -49,21 +49,21 @@ export class LogStore {
|
|
|
49
49
|
const txHash = txEffect.txHash;
|
|
50
50
|
const dataStartIndexForTx = dataStartIndexForBlock + txIndex * MAX_NOTE_HASHES_PER_TX;
|
|
51
51
|
|
|
52
|
-
txEffect.privateLogs.forEach(log => {
|
|
52
|
+
txEffect.privateLogs.forEach((log, logIndex) => {
|
|
53
53
|
const tag = log.fields[0];
|
|
54
54
|
this.#log.debug(`Found private log with tag ${tag.toString()} in block ${block.number}`);
|
|
55
55
|
|
|
56
56
|
const currentLogs = taggedLogs.get(tag.toString()) ?? [];
|
|
57
|
-
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, block.number, log).toBuffer());
|
|
57
|
+
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, logIndex, block.number, log).toBuffer());
|
|
58
58
|
taggedLogs.set(tag.toString(), currentLogs);
|
|
59
59
|
});
|
|
60
60
|
|
|
61
|
-
txEffect.publicLogs.forEach(log => {
|
|
61
|
+
txEffect.publicLogs.forEach((log, logIndex) => {
|
|
62
62
|
const tag = log.log[0];
|
|
63
63
|
this.#log.debug(`Found public log with tag ${tag.toString()} in block ${block.number}`);
|
|
64
64
|
|
|
65
65
|
const currentLogs = taggedLogs.get(tag.toString()) ?? [];
|
|
66
|
-
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, block.number, log).toBuffer());
|
|
66
|
+
currentLogs.push(new TxScopedL2Log(txHash, dataStartIndexForTx, logIndex, block.number, log).toBuffer());
|
|
67
67
|
taggedLogs.set(tag.toString(), currentLogs);
|
|
68
68
|
});
|
|
69
69
|
});
|
|
@@ -209,6 +209,7 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
209
209
|
* @returns A promise that signals the initialization of the l2 block source on completion.
|
|
210
210
|
*/
|
|
211
211
|
public start(): Promise<void> {
|
|
212
|
+
this.log.verbose('Starting mock L2 block source');
|
|
212
213
|
return Promise.resolve();
|
|
213
214
|
}
|
|
214
215
|
|
|
@@ -217,6 +218,7 @@ export class MockL2BlockSource implements L2BlockSource {
|
|
|
217
218
|
* @returns A promise that signals the l2 block source is now stopped.
|
|
218
219
|
*/
|
|
219
220
|
public stop(): Promise<void> {
|
|
221
|
+
this.log.verbose('Stopping mock L2 block source');
|
|
220
222
|
return Promise.resolve();
|
|
221
223
|
}
|
|
222
224
|
}
|