@aztec/archiver 0.76.4 → 0.77.0-testnet-ignition.21
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/README.md +1 -1
- package/dest/archiver/archiver.d.ts +22 -10
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +762 -713
- package/dest/archiver/archiver_store.d.ts +20 -7
- package/dest/archiver/archiver_store.d.ts.map +1 -1
- package/dest/archiver/archiver_store.js +4 -2
- package/dest/archiver/archiver_store_test_suite.d.ts +2 -2
- package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.js +398 -227
- package/dest/archiver/config.d.ts +1 -1
- package/dest/archiver/config.d.ts.map +1 -1
- package/dest/archiver/config.js +10 -12
- package/dest/archiver/data_retrieval.d.ts +17 -14
- package/dest/archiver/data_retrieval.d.ts.map +1 -1
- package/dest/archiver/data_retrieval.js +90 -88
- package/dest/archiver/errors.js +1 -2
- package/dest/archiver/index.d.ts +1 -1
- package/dest/archiver/index.d.ts.map +1 -1
- package/dest/archiver/index.js +0 -1
- package/dest/archiver/instrumentation.d.ts +3 -1
- package/dest/archiver/instrumentation.d.ts.map +1 -1
- package/dest/archiver/instrumentation.js +37 -17
- package/dest/archiver/kv_archiver_store/block_store.d.ts +5 -3
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/block_store.js +125 -130
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +2 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.js +45 -37
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +10 -2
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_instance_store.js +54 -15
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +16 -9
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +143 -160
- package/dest/archiver/kv_archiver_store/log_store.d.ts +5 -3
- package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/log_store.js +296 -255
- package/dest/archiver/kv_archiver_store/message_store.d.ts +3 -3
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/message_store.js +45 -50
- package/dest/archiver/kv_archiver_store/nullifier_store.d.ts +2 -2
- package/dest/archiver/kv_archiver_store/nullifier_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/nullifier_store.js +36 -43
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts +2 -2
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts.map +1 -1
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.js +17 -26
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +16 -7
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +1 -1
- package/dest/archiver/memory_archiver_store/memory_archiver_store.js +287 -247
- package/dest/archiver/structs/data_retrieval.js +5 -2
- package/dest/archiver/structs/published.js +1 -2
- package/dest/factory.d.ts +20 -6
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +54 -30
- package/dest/index.js +0 -1
- package/dest/rpc/index.d.ts +2 -1
- package/dest/rpc/index.d.ts.map +1 -1
- package/dest/rpc/index.js +8 -4
- package/dest/test/index.js +0 -1
- package/dest/test/mock_archiver.d.ts +3 -2
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_archiver.js +8 -13
- package/dest/test/mock_l1_to_l2_message_source.d.ts +2 -2
- package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/test/mock_l1_to_l2_message_source.js +4 -4
- package/dest/test/mock_l2_block_source.d.ts +5 -3
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +71 -68
- package/package.json +15 -16
- package/src/archiver/archiver.ts +149 -89
- package/src/archiver/archiver_store.ts +27 -27
- package/src/archiver/archiver_store_test_suite.ts +22 -15
- package/src/archiver/config.ts +1 -1
- package/src/archiver/data_retrieval.ts +32 -44
- package/src/archiver/index.ts +1 -1
- package/src/archiver/instrumentation.ts +11 -1
- package/src/archiver/kv_archiver_store/block_store.ts +10 -4
- package/src/archiver/kv_archiver_store/contract_class_store.ts +9 -9
- package/src/archiver/kv_archiver_store/contract_instance_store.ts +81 -3
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +44 -29
- package/src/archiver/kv_archiver_store/log_store.ts +56 -32
- package/src/archiver/kv_archiver_store/message_store.ts +4 -3
- package/src/archiver/kv_archiver_store/nullifier_store.ts +3 -2
- package/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts +3 -3
- package/src/archiver/memory_archiver_store/memory_archiver_store.ts +110 -57
- package/src/factory.ts +44 -25
- package/src/rpc/index.ts +2 -6
- package/src/test/mock_archiver.ts +3 -2
- package/src/test/mock_l1_to_l2_message_source.ts +2 -2
- package/src/test/mock_l2_block_source.ts +16 -15
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Data retrieved from logs
|
|
3
|
+
*/ /**
|
|
4
|
+
* Data retrieved from logs
|
|
5
|
+
*/ export { };
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FyY2hpdmVyL3N0cnVjdHMvcHVibGlzaGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
1
|
+
/** Extends a type with L1 published info (block number, hash, and timestamp) */ export { };
|
package/dest/factory.d.ts
CHANGED
|
@@ -1,10 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import type { BlobSinkClientInterface } from '@aztec/blob-sink/client';
|
|
2
|
+
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
3
|
+
import type { L2BlockSourceEventEmitter } from '@aztec/stdlib/block';
|
|
4
|
+
import type { ArchiverApi, Service } from '@aztec/stdlib/interfaces/server';
|
|
5
5
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
6
|
-
import {
|
|
6
|
+
import type { ArchiverConfig } from './archiver/config.js';
|
|
7
|
+
/**
|
|
8
|
+
* Creates a local archiver.
|
|
9
|
+
* @param config - The archiver configuration.
|
|
10
|
+
* @param blobSinkClient - The blob sink client.
|
|
11
|
+
* @param opts - The options.
|
|
12
|
+
* @param telemetry - The telemetry client.
|
|
13
|
+
* @returns The local archiver.
|
|
14
|
+
*/
|
|
7
15
|
export declare function createArchiver(config: ArchiverConfig & DataStoreConfig, blobSinkClient: BlobSinkClientInterface, opts?: {
|
|
8
16
|
blockUntilSync: boolean;
|
|
9
|
-
}, telemetry?: TelemetryClient): Promise<ArchiverApi &
|
|
17
|
+
}, telemetry?: TelemetryClient): Promise<ArchiverApi & Service & L2BlockSourceEventEmitter>;
|
|
18
|
+
/**
|
|
19
|
+
* Creates a remote archiver client.
|
|
20
|
+
* @param config - The archiver configuration.
|
|
21
|
+
* @returns The remote archiver client.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createRemoteArchiver(config: ArchiverConfig): ArchiverApi;
|
|
10
24
|
//# sourceMappingURL=factory.d.ts.map
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQ9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAMrE,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE5E,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,cAAc,EAAE,uBAAuB,EACvC,IAAI,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA6B,EAC5D,SAAS,GAAE,eAAsC,GAChD,OAAO,CAAC,WAAW,GAAG,OAAO,GAAG,yBAAyB,CAAC,CAM5D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CASxE"}
|
package/dest/factory.js
CHANGED
|
@@ -1,45 +1,67 @@
|
|
|
1
|
-
import { getComponentsVersionsFromConfig } from '@aztec/circuit-types';
|
|
2
|
-
import { computePublicBytecodeCommitment, getContractClassFromArtifact, } from '@aztec/circuits.js';
|
|
3
|
-
import { FunctionType, decodeFunctionSignature } from '@aztec/foundation/abi';
|
|
4
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
2
|
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
6
3
|
import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
|
|
7
4
|
import { TokenBridgeContractArtifact } from '@aztec/noir-contracts.js/TokenBridge';
|
|
8
|
-
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/
|
|
5
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
9
6
|
import { protocolContractNames, protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
10
|
-
import {
|
|
7
|
+
import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
|
|
8
|
+
import { FunctionType, decodeFunctionSignature } from '@aztec/stdlib/abi';
|
|
9
|
+
import { computePublicBytecodeCommitment, getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
10
|
+
import { getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
|
|
11
11
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
12
12
|
import { Archiver } from './archiver/archiver.js';
|
|
13
13
|
import { KVArchiverDataStore } from './archiver/index.js';
|
|
14
14
|
import { createArchiverClient } from './rpc/index.js';
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Creates a local archiver.
|
|
17
|
+
* @param config - The archiver configuration.
|
|
18
|
+
* @param blobSinkClient - The blob sink client.
|
|
19
|
+
* @param opts - The options.
|
|
20
|
+
* @param telemetry - The telemetry client.
|
|
21
|
+
* @returns The local archiver.
|
|
22
|
+
*/ export async function createArchiver(config, blobSinkClient, opts = {
|
|
23
|
+
blockUntilSync: true
|
|
24
|
+
}, telemetry = getTelemetryClient()) {
|
|
25
|
+
const store = await createStore('archiver', config, createLogger('archiver:lmdb'));
|
|
26
|
+
const archiverStore = new KVArchiverDataStore(store, config.maxLogs);
|
|
27
|
+
await registerProtocolContracts(archiverStore);
|
|
28
|
+
await registerCommonContracts(archiverStore);
|
|
29
|
+
return Archiver.createAndSync(config, archiverStore, {
|
|
30
|
+
telemetry,
|
|
31
|
+
blobSinkClient
|
|
32
|
+
}, opts.blockUntilSync);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Creates a remote archiver client.
|
|
36
|
+
* @param config - The archiver configuration.
|
|
37
|
+
* @returns The remote archiver client.
|
|
38
|
+
*/ export function createRemoteArchiver(config) {
|
|
16
39
|
if (!config.archiverUrl) {
|
|
17
|
-
|
|
18
|
-
const archiverStore = new KVArchiverDataStore(store, config.maxLogs);
|
|
19
|
-
await registerProtocolContracts(archiverStore);
|
|
20
|
-
await registerCommonContracts(archiverStore);
|
|
21
|
-
return Archiver.createAndSync(config, archiverStore, { telemetry, blobSinkClient }, opts.blockUntilSync);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
return createArchiverClient(config.archiverUrl, getComponentsVersionsFromConfig(config, protocolContractTreeRoot, getVKTreeRoot()));
|
|
40
|
+
throw new Error('Archiver URL is required');
|
|
25
41
|
}
|
|
42
|
+
return createArchiverClient(config.archiverUrl, getComponentsVersionsFromConfig(config, protocolContractTreeRoot, getVKTreeRoot()));
|
|
26
43
|
}
|
|
27
44
|
async function registerProtocolContracts(store) {
|
|
28
45
|
const blockNumber = 0;
|
|
29
|
-
for (const name of protocolContractNames)
|
|
30
|
-
const
|
|
46
|
+
for (const name of protocolContractNames){
|
|
47
|
+
const provider = new BundledProtocolContractsProvider();
|
|
48
|
+
const contract = await provider.getProtocolContractArtifact(name);
|
|
31
49
|
const contractClassPublic = {
|
|
32
50
|
...contract.contractClass,
|
|
33
51
|
privateFunctions: [],
|
|
34
|
-
unconstrainedFunctions: []
|
|
52
|
+
unconstrainedFunctions: []
|
|
35
53
|
};
|
|
36
|
-
const publicFunctionSignatures = contract.artifact.functions
|
|
37
|
-
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|
|
38
|
-
.map(fn => decodeFunctionSignature(fn.name, fn.parameters));
|
|
54
|
+
const publicFunctionSignatures = contract.artifact.functions.filter((fn)=>fn.functionType === FunctionType.PUBLIC).map((fn)=>decodeFunctionSignature(fn.name, fn.parameters));
|
|
39
55
|
await store.registerContractFunctionSignatures(contract.address, publicFunctionSignatures);
|
|
40
56
|
const bytecodeCommitment = await computePublicBytecodeCommitment(contractClassPublic.packedBytecode);
|
|
41
|
-
await store.addContractClasses([
|
|
42
|
-
|
|
57
|
+
await store.addContractClasses([
|
|
58
|
+
contractClassPublic
|
|
59
|
+
], [
|
|
60
|
+
bytecodeCommitment
|
|
61
|
+
], blockNumber);
|
|
62
|
+
await store.addContractInstances([
|
|
63
|
+
contract.instance
|
|
64
|
+
], blockNumber);
|
|
43
65
|
}
|
|
44
66
|
}
|
|
45
67
|
// TODO(#10007): Remove this method. We are explicitly registering these contracts
|
|
@@ -49,13 +71,15 @@ async function registerProtocolContracts(store) {
|
|
|
49
71
|
// TODO(#10007): Remove the dependency on noir-contracts.js from this package once we remove this.
|
|
50
72
|
async function registerCommonContracts(store) {
|
|
51
73
|
const blockNumber = 0;
|
|
52
|
-
const artifacts = [
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
74
|
+
const artifacts = [
|
|
75
|
+
TokenBridgeContractArtifact,
|
|
76
|
+
TokenContractArtifact
|
|
77
|
+
];
|
|
78
|
+
const classes = await Promise.all(artifacts.map(async (artifact)=>({
|
|
79
|
+
...await getContractClassFromArtifact(artifact),
|
|
80
|
+
privateFunctions: [],
|
|
81
|
+
unconstrainedFunctions: []
|
|
82
|
+
})));
|
|
83
|
+
const bytecodeCommitments = await Promise.all(classes.map((x)=>computePublicBytecodeCommitment(x.packedBytecode)));
|
|
59
84
|
await store.addContractClasses(classes, bytecodeCommitments, blockNumber);
|
|
60
85
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBa0MsK0JBQStCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RyxPQUFPLEVBRUwsK0JBQStCLEVBQy9CLDRCQUE0QixHQUM3QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRixPQUFPLEVBQXdCLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWxELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUNsQyxNQUF3QyxFQUN4QyxjQUF1QyxFQUN2QyxPQUFvQyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFDNUQsWUFBNkIsa0JBQWtCLEVBQUU7SUFFakQsSUFBSSxDQUFDLE1BQU0s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
|
package/dest/index.js
CHANGED
|
@@ -2,4 +2,3 @@ export * from './archiver/index.js';
|
|
|
2
2
|
export * from './factory.js';
|
|
3
3
|
export * from './rpc/index.js';
|
|
4
4
|
export { retrieveBlocksFromRollup, retrieveL2ProofVerifiedEvents } from './archiver/data_retrieval.js';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBRS9CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDIn0=
|
package/dest/rpc/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type ArchiverApi
|
|
1
|
+
import { type ArchiverApi } from '@aztec/stdlib/interfaces/server';
|
|
2
|
+
import { type ComponentsVersions } from '@aztec/stdlib/versioning';
|
|
2
3
|
export declare function createArchiverClient(url: string, versions: Partial<ComponentsVersions>, fetch?: (host: string, rpcMethod: string, body: any, useApiEndpoints: boolean, extraHeaders?: Record<string, string> | undefined, noRetry?: boolean | undefined) => Promise<{
|
|
3
4
|
response: any;
|
|
4
5
|
headers: {
|
package/dest/rpc/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rpc/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rpc/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,KAAK,kBAAkB,EAAgC,MAAM,0BAA0B,CAAC;AAGjG,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACrC,KAAK;;;;;EAAmC,GACvC,WAAW,CAMb;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,WAAW,iEAE3D"}
|
package/dest/rpc/index.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { ArchiverApiSchema, getVersioningResponseHandler, } from '@aztec/circuit-types';
|
|
2
1
|
import { createSafeJsonRpcClient } from '@aztec/foundation/json-rpc/client';
|
|
2
|
+
import { ArchiverApiSchema } from '@aztec/stdlib/interfaces/server';
|
|
3
|
+
import { getVersioningResponseHandler } from '@aztec/stdlib/versioning';
|
|
3
4
|
import { createTracedJsonRpcServer, makeTracedFetch } from '@aztec/telemetry-client';
|
|
4
|
-
export function createArchiverClient(url, versions, fetch = makeTracedFetch([
|
|
5
|
+
export function createArchiverClient(url, versions, fetch = makeTracedFetch([
|
|
6
|
+
1,
|
|
7
|
+
2,
|
|
8
|
+
3
|
|
9
|
+
], true)) {
|
|
5
10
|
return createSafeJsonRpcClient(url, ArchiverApiSchema, {
|
|
6
11
|
namespaceMethods: 'archiver',
|
|
7
12
|
fetch,
|
|
8
|
-
onResponse: getVersioningResponseHandler(versions)
|
|
13
|
+
onResponse: getVersioningResponseHandler(versions)
|
|
9
14
|
});
|
|
10
15
|
}
|
|
11
16
|
export function createArchiverRpcServer(handler) {
|
|
12
17
|
return createTracedJsonRpcServer(handler, ArchiverApiSchema);
|
|
13
18
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnBjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFFakIsNEJBQTRCLEdBQzdCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJGLE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsR0FBVyxFQUNYLFFBQXFDLEVBQ3JDLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUV4QyxPQUFPLHVCQUF1QixDQUFjLEdBQUcsRUFBRSxpQkFBaUIsRUFBRTtRQUNsRSxnQkFBZ0IsRUFBRSxVQUFVO1FBQzVCLEtBQUs7UUFDTCxVQUFVLEVBQUUsNEJBQTRCLENBQUMsUUFBUSxDQUFDO0tBQ25ELENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsT0FBb0I7SUFDMUQsT0FBTyx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUMvRCxDQUFDIn0=
|
package/dest/test/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export * from './mock_l2_block_source.js';
|
|
2
2
|
export * from './mock_l1_to_l2_message_source.js';
|
|
3
3
|
export * from './mock_archiver.js';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxvQkFBb0IsQ0FBQyJ9
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import type { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import type { L2Block, L2BlockSource } from '@aztec/stdlib/block';
|
|
3
|
+
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
3
4
|
import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
4
5
|
/**
|
|
5
6
|
* A mocked implementation of the archiver that implements L2BlockSource and L1ToL2MessageSource.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_archiver.d.ts","sourceRoot":"","sources":["../../src/test/mock_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mock_archiver.d.ts","sourceRoot":"","sources":["../../src/test/mock_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;GAEG;AACH,qBAAa,YAAa,SAAQ,iBAAkB,YAAW,aAAa,EAAE,mBAAmB;IAC/F,OAAO,CAAC,aAAa,CAAkC;IAEhD,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IAIxD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAIrD,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAGvE;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,OAAO,CAAC,WAAW,CAAY;gBAEnB,WAAW,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;IAM7C,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE;IAO7C,YAAY,CAAC,SAAS,EAAE,MAAM;CAW/C"}
|
|
@@ -2,12 +2,8 @@ import { MockL1ToL2MessageSource } from './mock_l1_to_l2_message_source.js';
|
|
|
2
2
|
import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
3
3
|
/**
|
|
4
4
|
* A mocked implementation of the archiver that implements L2BlockSource and L1ToL2MessageSource.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
this.messageSource = new MockL1ToL2MessageSource(0);
|
|
10
|
-
}
|
|
5
|
+
*/ export class MockArchiver extends MockL2BlockSource {
|
|
6
|
+
messageSource = new MockL1ToL2MessageSource(0);
|
|
11
7
|
setL1ToL2Messages(blockNumber, msgs) {
|
|
12
8
|
this.messageSource.setL1ToL2Messages(blockNumber, msgs);
|
|
13
9
|
}
|
|
@@ -20,18 +16,18 @@ export class MockArchiver extends MockL2BlockSource {
|
|
|
20
16
|
}
|
|
21
17
|
/**
|
|
22
18
|
* A mocked implementation of the archiver with a set of precomputed blocks and messages.
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
constructor(precomputed, messages)
|
|
19
|
+
*/ export class MockPrefilledArchiver extends MockArchiver {
|
|
20
|
+
precomputed;
|
|
21
|
+
constructor(precomputed, messages){
|
|
26
22
|
super();
|
|
27
23
|
this.precomputed = precomputed.slice();
|
|
28
|
-
messages.forEach((msgs, i)
|
|
24
|
+
messages.forEach((msgs, i)=>this.setL1ToL2Messages(i + 1, msgs));
|
|
29
25
|
}
|
|
30
26
|
setPrefilledBlocks(blocks, messages) {
|
|
31
|
-
for (const block of blocks)
|
|
27
|
+
for (const block of blocks){
|
|
32
28
|
this.precomputed[block.number - 1] = block;
|
|
33
29
|
}
|
|
34
|
-
messages.forEach((msgs, i)
|
|
30
|
+
messages.forEach((msgs, i)=>this.setL1ToL2Messages(blocks[i].number, msgs));
|
|
35
31
|
}
|
|
36
32
|
createBlocks(numBlocks) {
|
|
37
33
|
if (this.l2Blocks.length + numBlocks > this.precomputed.length) {
|
|
@@ -42,4 +38,3 @@ export class MockPrefilledArchiver extends MockArchiver {
|
|
|
42
38
|
return Promise.resolve();
|
|
43
39
|
}
|
|
44
40
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19hcmNoaXZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfYXJjaGl2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFOUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLGlCQUFpQjtJQUFuRDs7UUFDVSxrQkFBYSxHQUFHLElBQUksdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFhekQsQ0FBQztJQVhRLGlCQUFpQixDQUFDLFdBQW1CLEVBQUUsSUFBVTtRQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsV0FBbUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxjQUFrQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsWUFBWTtJQUdyRCxZQUFZLFdBQXNCLEVBQUUsUUFBZ0I7UUFDbEQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU0sa0JBQWtCLENBQUMsTUFBaUIsRUFBRSxRQUFnQjtRQUMzRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDN0MsQ0FBQztRQUNELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFZSxZQUFZLENBQUMsU0FBaUI7UUFDNUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvRCxNQUFNLElBQUksS0FBSyxDQUNiLDJDQUEyQyxTQUFTLDRCQUE0QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUN4RyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRiJ9
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
3
3
|
/**
|
|
4
4
|
* A mocked implementation of L1ToL2MessageSource to be used in tests.
|
|
5
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,gBAAgB,CAA2B;gBAE/B,WAAW,EAAE,MAAM;IAEhC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IAIjD,cAAc,CAAC,WAAW,EAAE,MAAM;IAIzC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAIrD,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAItE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;CAGlC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A mocked implementation of L1ToL2MessageSource to be used in tests.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
*/ export class MockL1ToL2MessageSource {
|
|
4
|
+
blockNumber;
|
|
5
|
+
messagesPerBlock;
|
|
6
|
+
constructor(blockNumber){
|
|
6
7
|
this.blockNumber = blockNumber;
|
|
7
8
|
this.messagesPerBlock = new Map();
|
|
8
9
|
}
|
|
@@ -22,4 +23,3 @@ export class MockL1ToL2MessageSource {
|
|
|
22
23
|
return Promise.resolve(this.blockNumber);
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDFfdG9fbDJfbWVzc2FnZV9zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7O0dBRUc7QUFDSCxNQUFNLE9BQU8sdUJBQXVCO0lBR2xDLFlBQW9CLFdBQW1CO1FBQW5CLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBRi9CLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUFnQixDQUFDO0lBRVQsQ0FBQztJQUVwQyxpQkFBaUIsQ0FBQyxXQUFtQixFQUFFLElBQVU7UUFDdEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLGNBQWMsQ0FBQyxXQUFtQjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsV0FBbUI7UUFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELHFCQUFxQixDQUFDLGNBQWtCO1FBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNGIn0=
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { type
|
|
1
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
+
import { L2Block, type L2BlockSource, type L2Tips } from '@aztec/stdlib/block';
|
|
3
|
+
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
4
|
+
import { type BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
3
5
|
/**
|
|
4
6
|
* A mocked implementation of L2BlockSource to be used in tests.
|
|
5
7
|
*/
|
|
@@ -51,7 +53,7 @@ export declare class MockL2BlockSource implements L2BlockSource {
|
|
|
51
53
|
* @returns The requested tx effect.
|
|
52
54
|
*/
|
|
53
55
|
getTxEffect(txHash: TxHash): Promise<{
|
|
54
|
-
data: import("@aztec/
|
|
56
|
+
data: import("@aztec/stdlib/tx").TxEffect;
|
|
55
57
|
l2BlockNumber: number;
|
|
56
58
|
l2BlockHash: `0x${string}`;
|
|
57
59
|
} | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"AACA,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;IACtC,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;IAI9C,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;IAIvC,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI5D;;;;OAIG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM;IAI9B;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAQ9D,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;;;;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;IAI7B;;;OAGG;IACI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import { L2Block, L2BlockHash, TxReceipt, TxStatus, getSlotRangeForEpoch, } from '@aztec/circuit-types';
|
|
2
|
-
import { EthAddress } from '@aztec/circuits.js';
|
|
3
1
|
import { DefaultL1ContractsConfig } from '@aztec/ethereum';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { L2Block, L2BlockHash } from '@aztec/stdlib/block';
|
|
5
|
+
import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
6
|
+
import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
5
7
|
/**
|
|
6
8
|
* A mocked implementation of L2BlockSource to be used in tests.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
this.provenBlockNumber = 0;
|
|
13
|
-
this.log = createLogger('archiver:mock_l2_block_source');
|
|
14
|
-
}
|
|
9
|
+
*/ export class MockL2BlockSource {
|
|
10
|
+
l2Blocks = [];
|
|
11
|
+
provenEpochNumber = 0;
|
|
12
|
+
provenBlockNumber = 0;
|
|
13
|
+
log = createLogger('archiver:mock_l2_block_source');
|
|
15
14
|
async createBlocks(numBlocks) {
|
|
16
|
-
for
|
|
15
|
+
for(let i = 0; i < numBlocks; i++){
|
|
17
16
|
const blockNum = this.l2Blocks.length + 1;
|
|
18
17
|
const block = await L2Block.random(blockNum);
|
|
19
18
|
this.l2Blocks.push(block);
|
|
@@ -35,24 +34,21 @@ export class MockL2BlockSource {
|
|
|
35
34
|
this.provenEpochNumber = provenEpochNumber;
|
|
36
35
|
}
|
|
37
36
|
/**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
getRollupAddress() {
|
|
37
|
+
* Method to fetch the rollup contract address at the base-layer.
|
|
38
|
+
* @returns The rollup address.
|
|
39
|
+
*/ getRollupAddress() {
|
|
42
40
|
return Promise.resolve(EthAddress.random());
|
|
43
41
|
}
|
|
44
42
|
/**
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
getRegistryAddress() {
|
|
43
|
+
* Method to fetch the registry contract address at the base-layer.
|
|
44
|
+
* @returns The registry address.
|
|
45
|
+
*/ getRegistryAddress() {
|
|
49
46
|
return Promise.resolve(EthAddress.random());
|
|
50
47
|
}
|
|
51
48
|
/**
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
getBlockNumber() {
|
|
49
|
+
* Gets the number of the latest L2 block processed by the block source implementation.
|
|
50
|
+
* @returns In this mock instance, returns the number of L2 blocks that we've mocked.
|
|
51
|
+
*/ getBlockNumber() {
|
|
56
52
|
return Promise.resolve(this.l2Blocks.length);
|
|
57
53
|
}
|
|
58
54
|
getProvenBlockNumber() {
|
|
@@ -62,59 +58,60 @@ export class MockL2BlockSource {
|
|
|
62
58
|
return Promise.resolve(this.provenEpochNumber);
|
|
63
59
|
}
|
|
64
60
|
/**
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
getBlock(number) {
|
|
61
|
+
* Gets an l2 block.
|
|
62
|
+
* @param number - The block number to return (inclusive).
|
|
63
|
+
* @returns The requested L2 block.
|
|
64
|
+
*/ getBlock(number) {
|
|
70
65
|
return Promise.resolve(this.l2Blocks[number - 1]);
|
|
71
66
|
}
|
|
72
67
|
/**
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return Promise.resolve(this.l2Blocks
|
|
80
|
-
.slice(from - 1, from - 1 + limit)
|
|
81
|
-
.filter(b => !proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber));
|
|
68
|
+
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
69
|
+
* @param from - Number of the first block to return (inclusive).
|
|
70
|
+
* @param limit - The maximum number of blocks to return.
|
|
71
|
+
* @returns The requested mocked L2 blocks.
|
|
72
|
+
*/ getBlocks(from, limit, proven) {
|
|
73
|
+
return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit).filter((b)=>!proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber));
|
|
82
74
|
}
|
|
83
75
|
getBlockHeader(number) {
|
|
84
76
|
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
|
|
85
77
|
}
|
|
86
78
|
getBlocksForEpoch(epochNumber) {
|
|
87
79
|
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
88
|
-
const [start, end] = getSlotRangeForEpoch(epochNumber, {
|
|
89
|
-
|
|
80
|
+
const [start, end] = getSlotRangeForEpoch(epochNumber, {
|
|
81
|
+
epochDuration
|
|
82
|
+
});
|
|
83
|
+
const blocks = this.l2Blocks.filter((b)=>{
|
|
90
84
|
const slot = b.header.globalVariables.slotNumber.toBigInt();
|
|
91
85
|
return slot >= start && slot <= end;
|
|
92
86
|
});
|
|
93
87
|
return Promise.resolve(blocks);
|
|
94
88
|
}
|
|
95
89
|
/**
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
90
|
+
* Gets a tx effect.
|
|
91
|
+
* @param txHash - The hash of a transaction which resulted in the returned tx effect.
|
|
92
|
+
* @returns The requested tx effect.
|
|
93
|
+
*/ async getTxEffect(txHash) {
|
|
94
|
+
const match = this.l2Blocks.flatMap((b)=>b.body.txEffects.map((tx)=>[
|
|
95
|
+
tx,
|
|
96
|
+
b
|
|
97
|
+
])).find(([tx])=>tx.txHash.equals(txHash));
|
|
104
98
|
if (!match) {
|
|
105
99
|
return Promise.resolve(undefined);
|
|
106
100
|
}
|
|
107
101
|
const [txEffect, block] = match;
|
|
108
|
-
return {
|
|
102
|
+
return {
|
|
103
|
+
data: txEffect,
|
|
104
|
+
l2BlockNumber: block.number,
|
|
105
|
+
l2BlockHash: (await block.hash()).toString()
|
|
106
|
+
};
|
|
109
107
|
}
|
|
110
108
|
/**
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
for (const txEffect of block.body.txEffects) {
|
|
109
|
+
* Gets a receipt of a settled tx.
|
|
110
|
+
* @param txHash - The hash of a tx we try to get the receipt for.
|
|
111
|
+
* @returns The requested tx receipt (or undefined if not found).
|
|
112
|
+
*/ async getSettledTxReceipt(txHash) {
|
|
113
|
+
for (const block of this.l2Blocks){
|
|
114
|
+
for (const txEffect of block.body.txEffects){
|
|
118
115
|
if (txEffect.txHash.equals(txHash)) {
|
|
119
116
|
return new TxReceipt(txHash, TxStatus.SUCCESS, '', txEffect.transactionFee.toBigInt(), L2BlockHash.fromField(await block.hash()), block.number);
|
|
120
117
|
}
|
|
@@ -126,15 +123,24 @@ export class MockL2BlockSource {
|
|
|
126
123
|
const [latest, proven, finalized] = [
|
|
127
124
|
await this.getBlockNumber(),
|
|
128
125
|
await this.getProvenBlockNumber(),
|
|
129
|
-
await this.getProvenBlockNumber()
|
|
126
|
+
await this.getProvenBlockNumber()
|
|
130
127
|
];
|
|
131
128
|
const latestBlock = this.l2Blocks[latest - 1];
|
|
132
129
|
const provenBlock = this.l2Blocks[proven - 1];
|
|
133
130
|
const finalizedBlock = this.l2Blocks[finalized - 1];
|
|
134
131
|
return {
|
|
135
|
-
latest: {
|
|
136
|
-
|
|
137
|
-
|
|
132
|
+
latest: {
|
|
133
|
+
number: latest,
|
|
134
|
+
hash: (await latestBlock?.hash())?.toString()
|
|
135
|
+
},
|
|
136
|
+
proven: {
|
|
137
|
+
number: proven,
|
|
138
|
+
hash: (await provenBlock?.hash())?.toString()
|
|
139
|
+
},
|
|
140
|
+
finalized: {
|
|
141
|
+
number: finalized,
|
|
142
|
+
hash: (await finalizedBlock?.hash())?.toString()
|
|
143
|
+
}
|
|
138
144
|
};
|
|
139
145
|
}
|
|
140
146
|
getL2EpochNumber() {
|
|
@@ -150,18 +156,15 @@ export class MockL2BlockSource {
|
|
|
150
156
|
throw new Error('Method not implemented.');
|
|
151
157
|
}
|
|
152
158
|
/**
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
start() {
|
|
159
|
+
* Starts the block source. In this mock implementation, this is a noop.
|
|
160
|
+
* @returns A promise that signals the initialization of the l2 block source on completion.
|
|
161
|
+
*/ start() {
|
|
157
162
|
return Promise.resolve();
|
|
158
163
|
}
|
|
159
164
|
/**
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
stop() {
|
|
165
|
+
* Stops the block source. In this mock implementation, this is a noop.
|
|
166
|
+
* @returns A promise that signals the l2 block source is now stopped.
|
|
167
|
+
*/ stop() {
|
|
164
168
|
return Promise.resolve();
|
|
165
169
|
}
|
|
166
170
|
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX2wyX2Jsb2NrX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsT0FBTyxFQUNQLFdBQVcsRUFJWCxTQUFTLEVBQ1QsUUFBUSxFQUNSLG9CQUFvQixHQUNyQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUE5QjtRQUNZLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFFM0Isc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUU5QixRQUFHLEdBQUcsWUFBWSxDQUFDLCtCQUErQixDQUFDLENBQUM7SUEyTDlELENBQUM7SUF6TFEsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFpQjtRQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxTQUFTLHFDQUFxQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVN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
|