@aztec/txe 4.0.0-nightly.20260113 → 4.0.0-nightly.20260115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/oracle/txe_oracle_top_level_context.d.ts +1 -1
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +2 -1
- package/dest/rpc_translator.js +1 -1
- package/dest/state_machine/archiver.d.ts +20 -69
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +33 -177
- package/dest/util/encoding.d.ts +17 -17
- package/dest/utils/block_creation.d.ts +1 -1
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +1 -1
- package/package.json +16 -16
- package/src/oracle/txe_oracle_top_level_context.ts +2 -1
- package/src/rpc_translator.ts +1 -1
- package/src/state_machine/archiver.ts +36 -232
- package/src/utils/block_creation.ts +1 -0
|
@@ -62,4 +62,4 @@ export declare class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecut
|
|
|
62
62
|
close(): [bigint, Map<string, AuthWitness>];
|
|
63
63
|
private getLastBlockNumber;
|
|
64
64
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX29yYWNsZV90b3BfbGV2ZWxfY29udGV4dC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yYWNsZS90eGVfb3JhY2xlX3RvcF9sZXZlbF9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHcEQsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osU0FBUyxFQUVULGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUVuQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFJTCxLQUFLLFdBQVcsRUFNakIsTUFBTSxzQkFBc0IsQ0FBQztBQWdCOUIsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsYUFBYSxFQUFnQixnQkFBZ0IsRUFBZ0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN2SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLDJCQUEyQixFQUF5QixNQUFNLHdCQUF3QixDQUFDO0FBWWpHLE9BQU8sRUFTTCxNQUFNLEVBRVAsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUlsRCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixD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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txe_oracle_top_level_context.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_oracle_top_level_context.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EAET,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,KAAK,WAAW,EAMjB,MAAM,sBAAsB,CAAC;AAgB9B,OAAO,EAAE,KAAK,gBAAgB,EAAE,aAAa,EAAgB,gBAAgB,EAAgB,MAAM,mBAAmB,CAAC;AACvH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,KAAK,2BAA2B,EAAyB,MAAM,wBAAwB,CAAC;AAYjG,OAAO,EASL,MAAM,EAEP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,qBAAa,wBAAyB,YAAW,WAAW,EAAE,mBAAmB;IAO7E,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,qBAAqB;IAC7B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IApBlB,MAAM,OAAiB;IACvB,KAAK,OAAiB;IAEtB,OAAO,CAAC,MAAM,CAAS;IAEvB,YACU,YAAY,EAAE,eAAe,EAC7B,aAAa,EAAE,gBAAgB,EAC/B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,eAAe,EAC7B,kBAAkB,EAAE,kBAAkB,EACtC,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,EAAE,EACX,OAAO,EAAE,EAAE,EACX,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAI3C;IAED,oCAAoC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM1D;IAID,qBAAqB,IAAI,EAAE,CAE1B;IAGD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAOlE;IAED,oBAAoB,IAAI,YAAY,CAEnC;IAEK,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAElD;IAED,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE1C;IAEK,wBAAwB,oBAE7B;IAEK,mBAAmB;;;;
|
|
1
|
+
{"version":3,"file":"txe_oracle_top_level_context.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_oracle_top_level_context.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EAET,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,KAAK,WAAW,EAMjB,MAAM,sBAAsB,CAAC;AAgB9B,OAAO,EAAE,KAAK,gBAAgB,EAAE,aAAa,EAAgB,gBAAgB,EAAgB,MAAM,mBAAmB,CAAC;AACvH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,KAAK,2BAA2B,EAAyB,MAAM,wBAAwB,CAAC;AAYjG,OAAO,EASL,MAAM,EAEP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,qBAAa,wBAAyB,YAAW,WAAW,EAAE,mBAAmB;IAO7E,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,qBAAqB;IAC7B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IApBlB,MAAM,OAAiB;IACvB,KAAK,OAAiB;IAEtB,OAAO,CAAC,MAAM,CAAS;IAEvB,YACU,YAAY,EAAE,eAAe,EAC7B,aAAa,EAAE,gBAAgB,EAC/B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,eAAe,EAC7B,kBAAkB,EAAE,kBAAkB,EACtC,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,EAAE,EACX,OAAO,EAAE,EAAE,EACX,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAI3C;IAED,oCAAoC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM1D;IAID,qBAAqB,IAAI,EAAE,CAE1B;IAGD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAOlE;IAED,oBAAoB,IAAI,YAAY,CAEnC;IAEK,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,CAElD;IAED,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE1C;IAEK,wBAAwB,oBAE7B;IAEK,mBAAmB;;;;OAYxB;IAEK,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,mBASpG;IAEK,kBAAkB,CAAC,MAAM,EAAE,MAAM,iBAMtC;IAED,qBAAqB,CAAC,QAAQ,EAAE,MAAM,QAGrC;IAEK,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,EAAE,EAAE,iBAkB5F;IAEK,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,EAAE,EAAE,6DAahG;IAEK,gBAAgB,CAAC,MAAM,EAAE,EAAE,6DAQhC;IAEK,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,iBAU7D;IAEK,SAAS,CAAC,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,EAAE,EAAE,CAAA;KAAO,iBAuBlD;IAEK,qBAAqB,CACzB,IAAI,EAAE,YAAY,EAClB,qBAAqB,0BAAoC,EACzD,gBAAgB,8BAA6C,EAC7D,IAAI,EAAE,EAAE,EAAE,EACV,QAAQ,GAAE,EAAc,EACxB,YAAY,GAAE,OAAe,iBAwM9B;IAEK,oBAAoB,CACxB,IAAI,EAAE,YAAY,EAClB,qBAAqB,EAAE,YAAY,EACnC,QAAQ,EAAE,EAAE,EAAE,EACd,YAAY,EAAE,OAAO,iBAyItB;IAEK,0BAA0B,CAC9B,qBAAqB,EAAE,YAAY,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,EAAE,EAAE,iBAwBX;YAEa,kBAAkB;IAoDhC,KAAK,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAG1C;YAEa,kBAAkB;CAIjC"}
|
|
@@ -97,7 +97,8 @@ export class TXEOracleTopLevelContext {
|
|
|
97
97
|
return (await this.stateMachine.node.getBlockHeader('latest')).globalVariables.timestamp;
|
|
98
98
|
}
|
|
99
99
|
async txeGetLastTxEffects() {
|
|
100
|
-
const
|
|
100
|
+
const latestBlockNumber = await this.stateMachine.archiver.getBlockNumber();
|
|
101
|
+
const block = await this.stateMachine.archiver.getBlock(latestBlockNumber);
|
|
101
102
|
if (block.body.txEffects.length != 1) {
|
|
102
103
|
// Note that calls like env.mine() will result in blocks with no transactions, hitting this
|
|
103
104
|
throw new Error(`Expected a single transaction in the last block, found ${block.body.txEffects.length}`);
|
package/dest/rpc_translator.js
CHANGED
|
@@ -261,7 +261,7 @@ export class RPCTranslator {
|
|
|
261
261
|
randomness: noteData.randomness,
|
|
262
262
|
storageSlot: noteData.storageSlot,
|
|
263
263
|
noteNonce: noteData.noteNonce,
|
|
264
|
-
|
|
264
|
+
isPending: noteData.isPending,
|
|
265
265
|
note: noteData.note
|
|
266
266
|
}));
|
|
267
267
|
// Now we convert each sub-array to an array of ForeignCallSingles
|
|
@@ -1,80 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ArchiverDataSourceBase } from '@aztec/archiver';
|
|
2
|
+
import { type EpochNumber, type SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
5
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
6
|
-
import type {
|
|
7
|
-
import
|
|
8
|
-
import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
9
|
-
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
6
|
+
import type { L2Tips, ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
7
|
+
import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
10
8
|
import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
/**
|
|
10
|
+
* TXE Archiver implementation.
|
|
11
|
+
* Provides most of the endpoints needed by the node for reading from and writing to state,
|
|
12
|
+
* without needing any of the extra overhead that the Archiver itself requires (i.e. an L1 client).
|
|
13
|
+
*/
|
|
14
|
+
export declare class TXEArchiver extends ArchiverDataSourceBase {
|
|
15
|
+
private readonly updater;
|
|
14
16
|
constructor(db: AztecAsyncKVStore);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Gets the number of the latest L2 block processed by the block source implementation.
|
|
20
|
-
* @returns The number of the latest L2 block processed by the block source implementation.
|
|
21
|
-
*/
|
|
22
|
-
getBlockNumber(): Promise<BlockNumber>;
|
|
23
|
-
/**
|
|
24
|
-
* Gets the number of the latest L2 block proven seen by the block source implementation.
|
|
25
|
-
* @returns The number of the latest L2 block proven seen by the block source implementation.
|
|
26
|
-
*/
|
|
27
|
-
getProvenBlockNumber(): Promise<BlockNumber>;
|
|
28
|
-
/**
|
|
29
|
-
* Gets a published l2 block. If a negative number is passed, the block returned is the most recent.
|
|
30
|
-
* @param number - The block number to return (inclusive).
|
|
31
|
-
* @returns The requested L2 block.
|
|
32
|
-
*/
|
|
33
|
-
getPublishedBlock(number: number): Promise<PublishedL2Block | undefined>;
|
|
34
|
-
getPublishedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<PublishedL2Block[]>;
|
|
35
|
-
getL2BlocksNew(from: BlockNumber, limit: number, proven?: boolean): Promise<L2BlockNew[]>;
|
|
36
|
-
private retrievePublishedBlocks;
|
|
37
|
-
/**
|
|
38
|
-
* Gets an l2 block. If a negative number is passed, the block returned is the most recent.
|
|
39
|
-
* @param number - The block number to return (inclusive).
|
|
40
|
-
* @returns The requested L2 block.
|
|
41
|
-
*/
|
|
42
|
-
getL2Block(number: BlockNumber | 'latest'): Promise<L2Block | undefined>;
|
|
43
|
-
/**
|
|
44
|
-
* Gets an L2 block (new format).
|
|
45
|
-
* @param number - The block number to return.
|
|
46
|
-
* @returns The requested L2 block.
|
|
47
|
-
*/
|
|
48
|
-
getL2BlockNew(number: BlockNumber): Promise<L2BlockNew | undefined>;
|
|
49
|
-
/**
|
|
50
|
-
* Gets an l2 block header.
|
|
51
|
-
* @param number - The block number to return or 'latest' for the most recent one.
|
|
52
|
-
* @returns The requested L2 block header.
|
|
53
|
-
*/
|
|
54
|
-
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
|
|
55
|
-
getBlockRange(from: number, limit: number, _proven?: boolean): Promise<L2Block[]>;
|
|
56
|
-
getPublishedCheckpoints(_from: CheckpointNumber, _limit: number): Promise<PublishedCheckpoint[]>;
|
|
57
|
-
getCheckpointByArchive(_archive: Fr): Promise<Checkpoint | undefined>;
|
|
58
|
-
getL2SlotNumber(): Promise<SlotNumber | undefined>;
|
|
59
|
-
getL2EpochNumber(): Promise<EpochNumber>;
|
|
60
|
-
getCheckpointsForEpoch(_epochNumber: EpochNumber): Promise<Checkpoint[]>;
|
|
61
|
-
getBlocksForEpoch(_epochNumber: EpochNumber): Promise<L2Block[]>;
|
|
62
|
-
getBlockHeadersForEpoch(_epochNumber: EpochNumber): Promise<BlockHeader[]>;
|
|
63
|
-
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
|
|
64
|
-
getL2Tips(): Promise<L2Tips>;
|
|
17
|
+
addCheckpoints(checkpoints: PublishedCheckpoint[], result?: ValidateCheckpointResult): Promise<boolean>;
|
|
18
|
+
getRollupAddress(): Promise<EthAddress>;
|
|
19
|
+
getRegistryAddress(): Promise<EthAddress>;
|
|
65
20
|
getL1Constants(): Promise<L1RollupConstants>;
|
|
66
21
|
getGenesisValues(): Promise<{
|
|
67
22
|
genesisArchiveRoot: Fr;
|
|
68
23
|
}>;
|
|
24
|
+
getL1Timestamp(): Promise<bigint | undefined>;
|
|
25
|
+
getL2Tips(): Promise<L2Tips>;
|
|
26
|
+
getL2SlotNumber(): Promise<SlotNumber | undefined>;
|
|
27
|
+
getL2EpochNumber(): Promise<EpochNumber | undefined>;
|
|
28
|
+
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
|
|
69
29
|
syncImmediate(): Promise<void>;
|
|
70
|
-
getContract(_address: AztecAddress, _timestamp?: UInt64): Promise<ContractInstanceWithAddress | undefined>;
|
|
71
|
-
getRollupAddress(): Promise<EthAddress>;
|
|
72
|
-
getRegistryAddress(): Promise<EthAddress>;
|
|
73
|
-
getL1Timestamp(): Promise<bigint>;
|
|
74
|
-
isPendingChainInvalid(): Promise<boolean>;
|
|
75
|
-
getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
|
|
76
|
-
getPublishedBlockByHash(_blockHash: Fr): Promise<PublishedL2Block | undefined>;
|
|
77
|
-
getPublishedBlockByArchive(_archive: Fr): Promise<PublishedL2Block | undefined>;
|
|
78
|
-
getCheckpointedBlocks(_from: BlockNumber, _limit: number, _proven?: boolean): Promise<never[]>;
|
|
79
30
|
}
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0ZV9tYWNoaW5lL2FyY2hpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBaUQsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RyxPQUFPLEVBQW9CLEtBQUssV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQW9DLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRTs7OztHQUlHO0FBQ0gscUJBQWEsV0FBWSxTQUFRLHNCQUFzQjtJQUNyRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBNEM7SUFFcEUsWUFBWSxFQUFFLEVBQUUsaUJBQWlCLEVBR2hDO0lBR00sY0FBYyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FFN0c7SUFJTSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRTdDO0lBRU0sa0JBQWtCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUUvQztJQUVNLGNBQWMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FFbEQ7SUFFTSxnQkFBZ0IsSUFBSSxPQUFPLENBQUM7UUFBRSxrQkFBa0IsRUFBRSxFQUFFLENBQUE7S0FBRSxDQUFDLENBRTdEO0lBRU0sY0FBYyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRW5EO0lBRVksU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0E4QnhDO0lBRU0sZUFBZSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXhEO0lBRU0sZ0JBQWdCLElBQUksT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FFMUQ7SUFFTSxlQUFlLENBQUMsWUFBWSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWxFO0lBRU0sYUFBYSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFcEM7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/state_machine/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/state_machine/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAiD,MAAM,iBAAiB,CAAC;AAExG,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACtG,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAoC,MAAM,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,sBAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IAEpE,YAAY,EAAE,EAAE,iBAAiB,EAGhC;IAGM,cAAc,CAAC,WAAW,EAAE,mBAAmB,EAAE,EAAE,MAAM,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAE7G;IAIM,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,CAE7C;IAEM,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,CAE/C;IAEM,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAElD;IAEM,gBAAgB,IAAI,OAAO,CAAC;QAAE,kBAAkB,EAAE,EAAE,CAAA;KAAE,CAAC,CAE7D;IAEM,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEnD;IAEY,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CA8BxC;IAEM,eAAe,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAExD;IAEM,gBAAgB,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAE1D;IAEM,eAAe,CAAC,YAAY,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAElE;IAEM,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;CACF"}
|
|
@@ -1,154 +1,38 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ArchiverDataSourceBase, ArchiverDataStoreUpdater, KVArchiverDataStore } from '@aztec/archiver';
|
|
2
2
|
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
3
|
-
import {
|
|
3
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export class TXEArchiver extends ArchiverStoreHelper {
|
|
5
|
+
/**
|
|
6
|
+
* TXE Archiver implementation.
|
|
7
|
+
* Provides most of the endpoints needed by the node for reading from and writing to state,
|
|
8
|
+
* without needing any of the extra overhead that the Archiver itself requires (i.e. an L1 client).
|
|
9
|
+
*/ export class TXEArchiver extends ArchiverDataSourceBase {
|
|
10
|
+
updater = new ArchiverDataStoreUpdater(this.store);
|
|
12
11
|
constructor(db){
|
|
13
|
-
|
|
12
|
+
const store = new KVArchiverDataStore(db, 9999);
|
|
13
|
+
super(store);
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
const publishedBlocks = await this.getPublishedBlocks(number, 1);
|
|
20
|
-
if (publishedBlocks.length === 0) {
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
return publishedBlocks[0].block;
|
|
24
|
-
}
|
|
25
|
-
async getBlocks(from, limit, proven) {
|
|
26
|
-
const publishedBlocks = await this.getPublishedBlocks(from, limit, proven);
|
|
27
|
-
return publishedBlocks.map((x)=>x.block);
|
|
28
|
-
}
|
|
29
|
-
async addCheckpoints(checkpoints, _result) {
|
|
30
|
-
const allBlocks = checkpoints.flatMap((ch)=>ch.checkpoint.blocks);
|
|
31
|
-
const opResults = await Promise.all([
|
|
32
|
-
this.store.addLogs(allBlocks),
|
|
33
|
-
this.store.addCheckpoints(checkpoints)
|
|
34
|
-
]);
|
|
35
|
-
return opResults.every(Boolean);
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Gets the number of the latest L2 block processed by the block source implementation.
|
|
39
|
-
* @returns The number of the latest L2 block processed by the block source implementation.
|
|
40
|
-
*/ getBlockNumber() {
|
|
41
|
-
return this.store.getLatestBlockNumber();
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Gets the number of the latest L2 block proven seen by the block source implementation.
|
|
45
|
-
* @returns The number of the latest L2 block proven seen by the block source implementation.
|
|
46
|
-
*/ getProvenBlockNumber() {
|
|
47
|
-
return this.store.getProvenBlockNumber();
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Gets a published l2 block. If a negative number is passed, the block returned is the most recent.
|
|
51
|
-
* @param number - The block number to return (inclusive).
|
|
52
|
-
* @returns The requested L2 block.
|
|
53
|
-
*/ async getPublishedBlock(number) {
|
|
54
|
-
// If the number provided is -ve, then return the latest block.
|
|
55
|
-
if (number < 0) {
|
|
56
|
-
number = await this.store.getLatestBlockNumber();
|
|
57
|
-
}
|
|
58
|
-
if (number == 0) {
|
|
59
|
-
return undefined;
|
|
60
|
-
}
|
|
61
|
-
const publishedBlocks = await this.retrievePublishedBlocks(BlockNumber(number), 1);
|
|
62
|
-
return publishedBlocks.length === 0 ? undefined : publishedBlocks[0];
|
|
15
|
+
// TXE-specific method for adding checkpoints
|
|
16
|
+
addCheckpoints(checkpoints, result) {
|
|
17
|
+
return this.updater.addCheckpointsWithContractData(checkpoints, result);
|
|
63
18
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
async getL2BlocksNew(from, limit, proven) {
|
|
68
|
-
const blocks = await this.store.getBlocks(from, limit);
|
|
69
|
-
if (proven === true) {
|
|
70
|
-
const provenBlockNumber = await this.store.getProvenBlockNumber();
|
|
71
|
-
return blocks.filter((b)=>b.number <= provenBlockNumber);
|
|
72
|
-
}
|
|
73
|
-
return blocks;
|
|
74
|
-
}
|
|
75
|
-
async retrievePublishedBlocks(from, limit, proven) {
|
|
76
|
-
const checkpoints = await this.store.getRangeOfCheckpoints(CheckpointNumber(from), limit);
|
|
77
|
-
const provenCheckpointNumber = await this.store.getProvenCheckpointNumber();
|
|
78
|
-
const blocks = (await Promise.all(checkpoints.map((ch)=>this.store.getBlocksForCheckpoint(ch.checkpointNumber)))).filter(isDefined);
|
|
79
|
-
const olbBlocks = [];
|
|
80
|
-
for(let i = 0; i < checkpoints.length; i++){
|
|
81
|
-
const blockForCheckpoint = blocks[i][0];
|
|
82
|
-
const checkpoint = checkpoints[i];
|
|
83
|
-
if (proven === true && checkpoint.checkpointNumber > provenCheckpointNumber) {
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
const oldCheckpoint = new Checkpoint(blockForCheckpoint.archive, checkpoint.header, [
|
|
87
|
-
blockForCheckpoint
|
|
88
|
-
], checkpoint.checkpointNumber);
|
|
89
|
-
const oldBlock = L2Block.fromCheckpoint(oldCheckpoint);
|
|
90
|
-
const publishedBlock = new PublishedL2Block(oldBlock, checkpoint.l1, checkpoint.attestations.map((x)=>CommitteeAttestation.fromBuffer(x)));
|
|
91
|
-
olbBlocks.push(publishedBlock);
|
|
92
|
-
}
|
|
93
|
-
return olbBlocks;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Gets an l2 block. If a negative number is passed, the block returned is the most recent.
|
|
97
|
-
* @param number - The block number to return (inclusive).
|
|
98
|
-
* @returns The requested L2 block.
|
|
99
|
-
*/ getL2Block(number) {
|
|
100
|
-
return this.getPublishedBlock(number != 'latest' ? number : -1).then((b)=>b?.block);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Gets an L2 block (new format).
|
|
104
|
-
* @param number - The block number to return.
|
|
105
|
-
* @returns The requested L2 block.
|
|
106
|
-
*/ getL2BlockNew(number) {
|
|
107
|
-
if (number === 0) {
|
|
108
|
-
return Promise.resolve(undefined);
|
|
109
|
-
}
|
|
110
|
-
return this.store.getBlock(number);
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Gets an l2 block header.
|
|
114
|
-
* @param number - The block number to return or 'latest' for the most recent one.
|
|
115
|
-
* @returns The requested L2 block header.
|
|
116
|
-
*/ async getBlockHeader(number) {
|
|
117
|
-
if (number === 'latest') {
|
|
118
|
-
number = await this.store.getLatestBlockNumber();
|
|
119
|
-
}
|
|
120
|
-
if (number === 0) {
|
|
121
|
-
return undefined;
|
|
122
|
-
}
|
|
123
|
-
const headers = await this.store.getBlockHeaders(BlockNumber(number), 1);
|
|
124
|
-
return headers.length === 0 ? undefined : headers[0];
|
|
125
|
-
}
|
|
126
|
-
getBlockRange(from, limit, _proven) {
|
|
127
|
-
return this.getPublishedBlocks(BlockNumber(from), limit).then((blocks)=>blocks.map((b)=>b.block));
|
|
128
|
-
}
|
|
129
|
-
getPublishedCheckpoints(_from, _limit) {
|
|
130
|
-
throw new Error('TXE Archiver does not implement "getPublishedCheckpoints"');
|
|
131
|
-
}
|
|
132
|
-
getCheckpointByArchive(_archive) {
|
|
133
|
-
throw new Error('TXE Archiver does not implement "getCheckpointByArchive"');
|
|
134
|
-
}
|
|
135
|
-
getL2SlotNumber() {
|
|
136
|
-
throw new Error('TXE Archiver does not implement "getL2SlotNumber"');
|
|
137
|
-
}
|
|
138
|
-
getL2EpochNumber() {
|
|
139
|
-
throw new Error('TXE Archiver does not implement "getL2EpochNumber"');
|
|
19
|
+
// Abstract method implementations
|
|
20
|
+
getRollupAddress() {
|
|
21
|
+
throw new Error('TXE Archiver does not implement "getRollupAddress"');
|
|
140
22
|
}
|
|
141
|
-
|
|
142
|
-
throw new Error('TXE Archiver does not implement "
|
|
23
|
+
getRegistryAddress() {
|
|
24
|
+
throw new Error('TXE Archiver does not implement "getRegistryAddress"');
|
|
143
25
|
}
|
|
144
|
-
|
|
145
|
-
throw new Error('TXE Archiver does not implement "
|
|
26
|
+
getL1Constants() {
|
|
27
|
+
throw new Error('TXE Archiver does not implement "getL1Constants"');
|
|
146
28
|
}
|
|
147
|
-
|
|
148
|
-
|
|
29
|
+
getGenesisValues() {
|
|
30
|
+
return Promise.resolve({
|
|
31
|
+
genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT)
|
|
32
|
+
});
|
|
149
33
|
}
|
|
150
|
-
|
|
151
|
-
throw new Error('TXE Archiver does not implement "
|
|
34
|
+
getL1Timestamp() {
|
|
35
|
+
throw new Error('TXE Archiver does not implement "getL1Timestamp"');
|
|
152
36
|
}
|
|
153
37
|
async getL2Tips() {
|
|
154
38
|
// In TXE there is no possibility of reorgs and no blocks are ever getting proven so we just set 'latest', 'proven'
|
|
@@ -186,44 +70,16 @@ export class TXEArchiver extends ArchiverStoreHelper {
|
|
|
186
70
|
checkpointed: tipId
|
|
187
71
|
};
|
|
188
72
|
}
|
|
189
|
-
|
|
190
|
-
throw new Error('TXE Archiver does not implement "
|
|
73
|
+
getL2SlotNumber() {
|
|
74
|
+
throw new Error('TXE Archiver does not implement "getL2SlotNumber"');
|
|
191
75
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
76
|
+
getL2EpochNumber() {
|
|
77
|
+
throw new Error('TXE Archiver does not implement "getL2EpochNumber"');
|
|
78
|
+
}
|
|
79
|
+
isEpochComplete(_epochNumber) {
|
|
80
|
+
throw new Error('TXE Archiver does not implement "isEpochComplete"');
|
|
196
81
|
}
|
|
197
82
|
syncImmediate() {
|
|
198
83
|
throw new Error('TXE Archiver does not implement "syncImmediate"');
|
|
199
84
|
}
|
|
200
|
-
getContract(_address, _timestamp) {
|
|
201
|
-
throw new Error('TXE Archiver does not implement "getContract"');
|
|
202
|
-
}
|
|
203
|
-
getRollupAddress() {
|
|
204
|
-
throw new Error('TXE Archiver does not implement "getRollupAddress"');
|
|
205
|
-
}
|
|
206
|
-
getRegistryAddress() {
|
|
207
|
-
throw new Error('TXE Archiver does not implement "getRegistryAddress"');
|
|
208
|
-
}
|
|
209
|
-
getL1Timestamp() {
|
|
210
|
-
throw new Error('TXE Archiver does not implement "getL1Timestamp"');
|
|
211
|
-
}
|
|
212
|
-
isPendingChainInvalid() {
|
|
213
|
-
return Promise.resolve(false);
|
|
214
|
-
}
|
|
215
|
-
getPendingChainValidationStatus() {
|
|
216
|
-
return Promise.resolve({
|
|
217
|
-
valid: true
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
getPublishedBlockByHash(_blockHash) {
|
|
221
|
-
throw new Error('Method not implemented.');
|
|
222
|
-
}
|
|
223
|
-
getPublishedBlockByArchive(_archive) {
|
|
224
|
-
throw new Error('Method not implemented.');
|
|
225
|
-
}
|
|
226
|
-
getCheckpointedBlocks(_from, _limit, _proven) {
|
|
227
|
-
throw new Error('TXE Archiver does not implement "getCheckpointedBlocks"');
|
|
228
|
-
}
|
|
229
85
|
}
|
package/dest/util/encoding.d.ts
CHANGED
|
@@ -150,7 +150,7 @@ export declare const ForeignCallArgsSchema: z.ZodArray<z.ZodUnion<[z.ZodString,
|
|
|
150
150
|
error_kind: "custom";
|
|
151
151
|
} & import("@aztec/stdlib/abi").AbiType) | undefined>;
|
|
152
152
|
}>, z.ZodObject<{
|
|
153
|
-
bytecode: import("
|
|
153
|
+
bytecode: import("@aztec/foundation/schemas").ZodFor<Buffer<ArrayBufferLike>>;
|
|
154
154
|
verificationKey: z.ZodOptional<z.ZodString>;
|
|
155
155
|
debugSymbols: z.ZodString;
|
|
156
156
|
debug: z.ZodOptional<z.ZodObject<{
|
|
@@ -656,27 +656,27 @@ export declare const ForeignCallArgsSchema: z.ZodArray<z.ZodUnion<[z.ZodString,
|
|
|
656
656
|
}>;
|
|
657
657
|
}>, z.ZodIntersection<z.ZodObject<{
|
|
658
658
|
version: z.ZodLiteral<1>;
|
|
659
|
-
salt: import("
|
|
660
|
-
deployer: import("
|
|
661
|
-
currentContractClassId: import("
|
|
662
|
-
originalContractClassId: import("
|
|
663
|
-
initializationHash: import("
|
|
659
|
+
salt: import("@aztec/foundation/schemas").ZodFor<Fr>;
|
|
660
|
+
deployer: import("@aztec/foundation/schemas").ZodFor<AztecAddress>;
|
|
661
|
+
currentContractClassId: import("@aztec/foundation/schemas").ZodFor<Fr>;
|
|
662
|
+
originalContractClassId: import("@aztec/foundation/schemas").ZodFor<Fr>;
|
|
663
|
+
initializationHash: import("@aztec/foundation/schemas").ZodFor<Fr>;
|
|
664
664
|
publicKeys: z.ZodEffects<z.ZodObject<{
|
|
665
|
-
masterNullifierPublicKey: z.ZodType<import("
|
|
666
|
-
masterIncomingViewingPublicKey: z.ZodType<import("
|
|
667
|
-
masterOutgoingViewingPublicKey: z.ZodType<import("
|
|
668
|
-
masterTaggingPublicKey: z.ZodType<import("
|
|
665
|
+
masterNullifierPublicKey: z.ZodType<import("@aztec/foundation/schemas").Point, any, string>;
|
|
666
|
+
masterIncomingViewingPublicKey: z.ZodType<import("@aztec/foundation/schemas").Point, any, string>;
|
|
667
|
+
masterOutgoingViewingPublicKey: z.ZodType<import("@aztec/foundation/schemas").Point, any, string>;
|
|
668
|
+
masterTaggingPublicKey: z.ZodType<import("@aztec/foundation/schemas").Point, any, string>;
|
|
669
669
|
}, "strip", z.ZodTypeAny, {
|
|
670
|
-
masterNullifierPublicKey: import("
|
|
671
|
-
masterIncomingViewingPublicKey: import("
|
|
672
|
-
masterOutgoingViewingPublicKey: import("
|
|
673
|
-
masterTaggingPublicKey: import("
|
|
670
|
+
masterNullifierPublicKey: import("@aztec/foundation/schemas").Point;
|
|
671
|
+
masterIncomingViewingPublicKey: import("@aztec/foundation/schemas").Point;
|
|
672
|
+
masterOutgoingViewingPublicKey: import("@aztec/foundation/schemas").Point;
|
|
673
|
+
masterTaggingPublicKey: import("@aztec/foundation/schemas").Point;
|
|
674
674
|
}, {
|
|
675
675
|
masterNullifierPublicKey: string;
|
|
676
676
|
masterIncomingViewingPublicKey: string;
|
|
677
677
|
masterOutgoingViewingPublicKey: string;
|
|
678
678
|
masterTaggingPublicKey: string;
|
|
679
|
-
}>, import("
|
|
679
|
+
}>, import("@aztec/stdlib/keys").PublicKeys, {
|
|
680
680
|
masterNullifierPublicKey: string;
|
|
681
681
|
masterIncomingViewingPublicKey: string;
|
|
682
682
|
masterOutgoingViewingPublicKey: string;
|
|
@@ -689,7 +689,7 @@ export declare const ForeignCallArgsSchema: z.ZodArray<z.ZodUnion<[z.ZodString,
|
|
|
689
689
|
currentContractClassId: Fr;
|
|
690
690
|
originalContractClassId: Fr;
|
|
691
691
|
initializationHash: Fr;
|
|
692
|
-
publicKeys: import("
|
|
692
|
+
publicKeys: import("@aztec/stdlib/keys").PublicKeys;
|
|
693
693
|
}, {
|
|
694
694
|
version: 1;
|
|
695
695
|
salt?: any;
|
|
@@ -704,7 +704,7 @@ export declare const ForeignCallArgsSchema: z.ZodArray<z.ZodUnion<[z.ZodString,
|
|
|
704
704
|
masterTaggingPublicKey: string;
|
|
705
705
|
};
|
|
706
706
|
}>, z.ZodObject<{
|
|
707
|
-
address: import("
|
|
707
|
+
address: import("@aztec/foundation/schemas").ZodFor<AztecAddress>;
|
|
708
708
|
}, "strip", z.ZodTypeAny, {
|
|
709
709
|
address: AztecAddress;
|
|
710
710
|
}, {
|
|
@@ -25,4 +25,4 @@ export declare function makeTXEBlockHeader(worldTrees: MerkleTreeWriteOperations
|
|
|
25
25
|
* @returns The created L2Block with proper archive chaining
|
|
26
26
|
*/
|
|
27
27
|
export declare function makeTXEBlock(worldTrees: MerkleTreeWriteOperations, globalVariables: GlobalVariables, txEffects: TxEffect[]): Promise<L2Block>;
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfY3JlYXRpb24uZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ibG9ja19jcmVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBUSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkUsT0FBTyxFQUF3QyxLQUFLLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU3RDs7OztHQUlHO0FBQ0gsd0JBQWdCLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsRUFBRSxDQUV4RTtBQUVELHdCQUFzQiw0QkFBNEIsQ0FDaEQsUUFBUSxFQUFFLFFBQVEsRUFDbEIsVUFBVSxFQUFFLHlCQUF5QixHQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBa0JmO0FBRUQsd0JBQXNCLGtCQUFrQixDQUN0QyxVQUFVLEVBQUUseUJBQXlCLEVBQ3JDLGVBQWUsRUFBRSxlQUFlLEdBQy9CLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FnQnhCO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsd0JBQXNCLFlBQVksQ0FDaEMsVUFBVSxFQUFFLHlCQUF5QixFQUNyQyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQ3BCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FXbEIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_creation.d.ts","sourceRoot":"","sources":["../../src/utils/block_creation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAQ,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAwC,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,WAAW,GAAG,EAAE,CAExE;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,yBAAyB,GACpC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,yBAAyB,EACrC,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"block_creation.d.ts","sourceRoot":"","sources":["../../src/utils/block_creation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAQ,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAwC,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,WAAW,GAAG,EAAE,CAExE;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,yBAAyB,GACpC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,yBAAyB,EACrC,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,aAAa,CAAC,CAgBxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,yBAAyB,EACrC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,OAAO,CAAC,CAWlB"}
|
|
@@ -19,7 +19,7 @@ export async function insertTxEffectIntoWorldTrees(txEffect, worldTrees) {
|
|
|
19
19
|
export async function makeTXEBlockHeader(worldTrees, globalVariables) {
|
|
20
20
|
const stateReference = await worldTrees.getStateReference();
|
|
21
21
|
const archiveInfo = await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);
|
|
22
|
-
return new L2BlockHeader(new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root), Number(archiveInfo.size)), Fr.ZERO, Fr.ZERO, stateReference, globalVariables, Fr.ZERO, Fr.ZERO, Fr.ZERO, Fr.ZERO);
|
|
22
|
+
return new L2BlockHeader(new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root), Number(archiveInfo.size)), Fr.ZERO, Fr.ZERO, Fr.ZERO, stateReference, globalVariables, Fr.ZERO, Fr.ZERO, Fr.ZERO, Fr.ZERO);
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* Creates an L2Block with proper archive chaining.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/txe",
|
|
3
|
-
"version": "4.0.0-nightly.
|
|
3
|
+
"version": "4.0.0-nightly.20260115",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"bin": "./dest/bin/index.js",
|
|
@@ -61,27 +61,27 @@
|
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@aztec/accounts": "4.0.0-nightly.
|
|
65
|
-
"@aztec/archiver": "4.0.0-nightly.
|
|
66
|
-
"@aztec/aztec-node": "4.0.0-nightly.
|
|
67
|
-
"@aztec/aztec.js": "4.0.0-nightly.
|
|
68
|
-
"@aztec/bb-prover": "4.0.0-nightly.
|
|
69
|
-
"@aztec/constants": "4.0.0-nightly.
|
|
70
|
-
"@aztec/foundation": "4.0.0-nightly.
|
|
71
|
-
"@aztec/key-store": "4.0.0-nightly.
|
|
72
|
-
"@aztec/kv-store": "4.0.0-nightly.
|
|
73
|
-
"@aztec/protocol-contracts": "4.0.0-nightly.
|
|
74
|
-
"@aztec/pxe": "4.0.0-nightly.
|
|
75
|
-
"@aztec/simulator": "4.0.0-nightly.
|
|
76
|
-
"@aztec/stdlib": "4.0.0-nightly.
|
|
77
|
-
"@aztec/world-state": "4.0.0-nightly.
|
|
64
|
+
"@aztec/accounts": "4.0.0-nightly.20260115",
|
|
65
|
+
"@aztec/archiver": "4.0.0-nightly.20260115",
|
|
66
|
+
"@aztec/aztec-node": "4.0.0-nightly.20260115",
|
|
67
|
+
"@aztec/aztec.js": "4.0.0-nightly.20260115",
|
|
68
|
+
"@aztec/bb-prover": "4.0.0-nightly.20260115",
|
|
69
|
+
"@aztec/constants": "4.0.0-nightly.20260115",
|
|
70
|
+
"@aztec/foundation": "4.0.0-nightly.20260115",
|
|
71
|
+
"@aztec/key-store": "4.0.0-nightly.20260115",
|
|
72
|
+
"@aztec/kv-store": "4.0.0-nightly.20260115",
|
|
73
|
+
"@aztec/protocol-contracts": "4.0.0-nightly.20260115",
|
|
74
|
+
"@aztec/pxe": "4.0.0-nightly.20260115",
|
|
75
|
+
"@aztec/simulator": "4.0.0-nightly.20260115",
|
|
76
|
+
"@aztec/stdlib": "4.0.0-nightly.20260115",
|
|
77
|
+
"@aztec/world-state": "4.0.0-nightly.20260115",
|
|
78
78
|
"zod": "^3.23.8"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
81
|
"@jest/globals": "^30.0.0",
|
|
82
82
|
"@types/jest": "^30.0.0",
|
|
83
83
|
"@types/node": "^22.15.17",
|
|
84
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
84
|
+
"@typescript/native-preview": "7.0.0-dev.20260113.1",
|
|
85
85
|
"jest": "^30.0.0",
|
|
86
86
|
"jest-mock-extended": "^4.0.0",
|
|
87
87
|
"ts-node": "^10.9.1",
|
|
@@ -156,7 +156,8 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
|
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
async txeGetLastTxEffects() {
|
|
159
|
-
const
|
|
159
|
+
const latestBlockNumber = await this.stateMachine.archiver.getBlockNumber();
|
|
160
|
+
const block = await this.stateMachine.archiver.getBlock(latestBlockNumber);
|
|
160
161
|
|
|
161
162
|
if (block!.body.txEffects.length != 1) {
|
|
162
163
|
// Note that calls like env.mine() will result in blocks with no transactions, hitting this
|
package/src/rpc_translator.ts
CHANGED
|
@@ -1,216 +1,51 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ArchiverDataSourceBase, ArchiverDataStoreUpdater, KVArchiverDataStore } from '@aztec/archiver';
|
|
2
2
|
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
3
|
-
import {
|
|
3
|
+
import { CheckpointNumber, type EpochNumber, type SlotNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
|
-
import { isDefined } from '@aztec/foundation/types';
|
|
7
6
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
8
|
-
import type {
|
|
9
|
-
import {
|
|
10
|
-
type CheckpointId,
|
|
11
|
-
CommitteeAttestation,
|
|
12
|
-
L2Block,
|
|
13
|
-
type L2BlockId,
|
|
14
|
-
type L2BlockNew,
|
|
15
|
-
type L2BlockSource,
|
|
16
|
-
type L2TipId,
|
|
17
|
-
type L2Tips,
|
|
18
|
-
PublishedL2Block,
|
|
19
|
-
type ValidateCheckpointResult,
|
|
20
|
-
} from '@aztec/stdlib/block';
|
|
21
|
-
import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
22
|
-
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
7
|
+
import type { CheckpointId, L2BlockId, L2TipId, L2Tips, ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
8
|
+
import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
23
9
|
import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
24
|
-
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
25
|
-
import type { UInt64 } from '@aztec/stdlib/types';
|
|
26
10
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
public async getBlock(number: BlockNumber): Promise<L2Block | undefined> {
|
|
36
|
-
if (number === 0) {
|
|
37
|
-
return undefined;
|
|
38
|
-
}
|
|
39
|
-
const publishedBlocks = await this.getPublishedBlocks(number, 1);
|
|
40
|
-
if (publishedBlocks.length === 0) {
|
|
41
|
-
return undefined;
|
|
42
|
-
}
|
|
43
|
-
return publishedBlocks[0].block;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
public async getBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<L2Block[]> {
|
|
47
|
-
const publishedBlocks = await this.getPublishedBlocks(from, limit, proven);
|
|
48
|
-
return publishedBlocks.map(x => x.block);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
public override async addCheckpoints(
|
|
52
|
-
checkpoints: PublishedCheckpoint[],
|
|
53
|
-
_result?: ValidateCheckpointResult,
|
|
54
|
-
): Promise<boolean> {
|
|
55
|
-
const allBlocks = checkpoints.flatMap(ch => ch.checkpoint.blocks);
|
|
56
|
-
const opResults = await Promise.all([this.store.addLogs(allBlocks), this.store.addCheckpoints(checkpoints)]);
|
|
57
|
-
|
|
58
|
-
return opResults.every(Boolean);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Gets the number of the latest L2 block processed by the block source implementation.
|
|
63
|
-
* @returns The number of the latest L2 block processed by the block source implementation.
|
|
64
|
-
*/
|
|
65
|
-
public getBlockNumber(): Promise<BlockNumber> {
|
|
66
|
-
return this.store.getLatestBlockNumber();
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Gets the number of the latest L2 block proven seen by the block source implementation.
|
|
71
|
-
* @returns The number of the latest L2 block proven seen by the block source implementation.
|
|
72
|
-
*/
|
|
73
|
-
public override getProvenBlockNumber(): Promise<BlockNumber> {
|
|
74
|
-
return this.store.getProvenBlockNumber();
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Gets a published l2 block. If a negative number is passed, the block returned is the most recent.
|
|
79
|
-
* @param number - The block number to return (inclusive).
|
|
80
|
-
* @returns The requested L2 block.
|
|
81
|
-
*/
|
|
82
|
-
public async getPublishedBlock(number: number): Promise<PublishedL2Block | undefined> {
|
|
83
|
-
// If the number provided is -ve, then return the latest block.
|
|
84
|
-
if (number < 0) {
|
|
85
|
-
number = await this.store.getLatestBlockNumber();
|
|
86
|
-
}
|
|
87
|
-
if (number == 0) {
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
const publishedBlocks = await this.retrievePublishedBlocks(BlockNumber(number), 1);
|
|
91
|
-
return publishedBlocks.length === 0 ? undefined : publishedBlocks[0];
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
getPublishedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<PublishedL2Block[]> {
|
|
95
|
-
return this.retrievePublishedBlocks(from, limit, proven);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
async getL2BlocksNew(from: BlockNumber, limit: number, proven?: boolean): Promise<L2BlockNew[]> {
|
|
99
|
-
const blocks = await this.store.getBlocks(from, limit);
|
|
11
|
+
/**
|
|
12
|
+
* TXE Archiver implementation.
|
|
13
|
+
* Provides most of the endpoints needed by the node for reading from and writing to state,
|
|
14
|
+
* without needing any of the extra overhead that the Archiver itself requires (i.e. an L1 client).
|
|
15
|
+
*/
|
|
16
|
+
export class TXEArchiver extends ArchiverDataSourceBase {
|
|
17
|
+
private readonly updater = new ArchiverDataStoreUpdater(this.store);
|
|
100
18
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
return blocks;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
private async retrievePublishedBlocks(
|
|
109
|
-
from: BlockNumber,
|
|
110
|
-
limit: number,
|
|
111
|
-
proven?: boolean,
|
|
112
|
-
): Promise<PublishedL2Block[]> {
|
|
113
|
-
const checkpoints = await this.store.getRangeOfCheckpoints(CheckpointNumber(from), limit);
|
|
114
|
-
const provenCheckpointNumber = await this.store.getProvenCheckpointNumber();
|
|
115
|
-
const blocks = (
|
|
116
|
-
await Promise.all(checkpoints.map(ch => this.store.getBlocksForCheckpoint(ch.checkpointNumber)))
|
|
117
|
-
).filter(isDefined);
|
|
118
|
-
|
|
119
|
-
const olbBlocks: PublishedL2Block[] = [];
|
|
120
|
-
for (let i = 0; i < checkpoints.length; i++) {
|
|
121
|
-
const blockForCheckpoint = blocks[i][0];
|
|
122
|
-
const checkpoint = checkpoints[i];
|
|
123
|
-
if (proven === true && checkpoint.checkpointNumber > provenCheckpointNumber) {
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
const oldCheckpoint = new Checkpoint(
|
|
127
|
-
blockForCheckpoint.archive,
|
|
128
|
-
checkpoint.header,
|
|
129
|
-
[blockForCheckpoint],
|
|
130
|
-
checkpoint.checkpointNumber,
|
|
131
|
-
);
|
|
132
|
-
const oldBlock = L2Block.fromCheckpoint(oldCheckpoint);
|
|
133
|
-
const publishedBlock = new PublishedL2Block(
|
|
134
|
-
oldBlock,
|
|
135
|
-
checkpoint.l1,
|
|
136
|
-
checkpoint.attestations.map(x => CommitteeAttestation.fromBuffer(x)),
|
|
137
|
-
);
|
|
138
|
-
olbBlocks.push(publishedBlock);
|
|
139
|
-
}
|
|
140
|
-
return olbBlocks;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Gets an l2 block. If a negative number is passed, the block returned is the most recent.
|
|
145
|
-
* @param number - The block number to return (inclusive).
|
|
146
|
-
* @returns The requested L2 block.
|
|
147
|
-
*/
|
|
148
|
-
public getL2Block(number: BlockNumber | 'latest'): Promise<L2Block | undefined> {
|
|
149
|
-
return this.getPublishedBlock(number != 'latest' ? number : -1).then(b => b?.block);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Gets an L2 block (new format).
|
|
154
|
-
* @param number - The block number to return.
|
|
155
|
-
* @returns The requested L2 block.
|
|
156
|
-
*/
|
|
157
|
-
public getL2BlockNew(number: BlockNumber): Promise<L2BlockNew | undefined> {
|
|
158
|
-
if (number === 0) {
|
|
159
|
-
return Promise.resolve(undefined);
|
|
160
|
-
}
|
|
161
|
-
return this.store.getBlock(number);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Gets an l2 block header.
|
|
166
|
-
* @param number - The block number to return or 'latest' for the most recent one.
|
|
167
|
-
* @returns The requested L2 block header.
|
|
168
|
-
*/
|
|
169
|
-
public async getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined> {
|
|
170
|
-
if (number === 'latest') {
|
|
171
|
-
number = await this.store.getLatestBlockNumber();
|
|
172
|
-
}
|
|
173
|
-
if (number === 0) {
|
|
174
|
-
return undefined;
|
|
175
|
-
}
|
|
176
|
-
const headers = await this.store.getBlockHeaders(BlockNumber(number), 1);
|
|
177
|
-
return headers.length === 0 ? undefined : headers[0];
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
public getBlockRange(from: number, limit: number, _proven?: boolean): Promise<L2Block[]> {
|
|
181
|
-
return this.getPublishedBlocks(BlockNumber(from), limit).then(blocks => blocks.map(b => b.block));
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
public getPublishedCheckpoints(_from: CheckpointNumber, _limit: number): Promise<PublishedCheckpoint[]> {
|
|
185
|
-
throw new Error('TXE Archiver does not implement "getPublishedCheckpoints"');
|
|
19
|
+
constructor(db: AztecAsyncKVStore) {
|
|
20
|
+
const store = new KVArchiverDataStore(db, 9999);
|
|
21
|
+
super(store);
|
|
186
22
|
}
|
|
187
23
|
|
|
188
|
-
|
|
189
|
-
|
|
24
|
+
// TXE-specific method for adding checkpoints
|
|
25
|
+
public addCheckpoints(checkpoints: PublishedCheckpoint[], result?: ValidateCheckpointResult): Promise<boolean> {
|
|
26
|
+
return this.updater.addCheckpointsWithContractData(checkpoints, result);
|
|
190
27
|
}
|
|
191
28
|
|
|
192
|
-
|
|
193
|
-
throw new Error('TXE Archiver does not implement "getL2SlotNumber"');
|
|
194
|
-
}
|
|
29
|
+
// Abstract method implementations
|
|
195
30
|
|
|
196
|
-
public
|
|
197
|
-
throw new Error('TXE Archiver does not implement "
|
|
31
|
+
public getRollupAddress(): Promise<EthAddress> {
|
|
32
|
+
throw new Error('TXE Archiver does not implement "getRollupAddress"');
|
|
198
33
|
}
|
|
199
34
|
|
|
200
|
-
public
|
|
201
|
-
throw new Error('TXE Archiver does not implement "
|
|
35
|
+
public getRegistryAddress(): Promise<EthAddress> {
|
|
36
|
+
throw new Error('TXE Archiver does not implement "getRegistryAddress"');
|
|
202
37
|
}
|
|
203
38
|
|
|
204
|
-
public
|
|
205
|
-
throw new Error('TXE Archiver does not implement "
|
|
39
|
+
public getL1Constants(): Promise<L1RollupConstants> {
|
|
40
|
+
throw new Error('TXE Archiver does not implement "getL1Constants"');
|
|
206
41
|
}
|
|
207
42
|
|
|
208
|
-
public
|
|
209
|
-
|
|
43
|
+
public getGenesisValues(): Promise<{ genesisArchiveRoot: Fr }> {
|
|
44
|
+
return Promise.resolve({ genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT) });
|
|
210
45
|
}
|
|
211
46
|
|
|
212
|
-
public
|
|
213
|
-
throw new Error('TXE Archiver does not implement "
|
|
47
|
+
public getL1Timestamp(): Promise<bigint | undefined> {
|
|
48
|
+
throw new Error('TXE Archiver does not implement "getL1Timestamp"');
|
|
214
49
|
}
|
|
215
50
|
|
|
216
51
|
public async getL2Tips(): Promise<L2Tips> {
|
|
@@ -245,50 +80,19 @@ export class TXEArchiver extends ArchiverStoreHelper implements L2BlockSource {
|
|
|
245
80
|
};
|
|
246
81
|
}
|
|
247
82
|
|
|
248
|
-
public
|
|
249
|
-
throw new Error('TXE Archiver does not implement "
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
public getGenesisValues(): Promise<{ genesisArchiveRoot: Fr }> {
|
|
253
|
-
return Promise.resolve({ genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT) });
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
public syncImmediate(): Promise<void> {
|
|
257
|
-
throw new Error('TXE Archiver does not implement "syncImmediate"');
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
public getContract(_address: AztecAddress, _timestamp?: UInt64): Promise<ContractInstanceWithAddress | undefined> {
|
|
261
|
-
throw new Error('TXE Archiver does not implement "getContract"');
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
public getRollupAddress(): Promise<EthAddress> {
|
|
265
|
-
throw new Error('TXE Archiver does not implement "getRollupAddress"');
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
public getRegistryAddress(): Promise<EthAddress> {
|
|
269
|
-
throw new Error('TXE Archiver does not implement "getRegistryAddress"');
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
public getL1Timestamp(): Promise<bigint> {
|
|
273
|
-
throw new Error('TXE Archiver does not implement "getL1Timestamp"');
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
public isPendingChainInvalid(): Promise<boolean> {
|
|
277
|
-
return Promise.resolve(false);
|
|
83
|
+
public getL2SlotNumber(): Promise<SlotNumber | undefined> {
|
|
84
|
+
throw new Error('TXE Archiver does not implement "getL2SlotNumber"');
|
|
278
85
|
}
|
|
279
86
|
|
|
280
|
-
public
|
|
281
|
-
|
|
87
|
+
public getL2EpochNumber(): Promise<EpochNumber | undefined> {
|
|
88
|
+
throw new Error('TXE Archiver does not implement "getL2EpochNumber"');
|
|
282
89
|
}
|
|
283
90
|
|
|
284
|
-
|
|
285
|
-
throw new Error('
|
|
286
|
-
}
|
|
287
|
-
getPublishedBlockByArchive(_archive: Fr): Promise<PublishedL2Block | undefined> {
|
|
288
|
-
throw new Error('Method not implemented.');
|
|
91
|
+
public isEpochComplete(_epochNumber: EpochNumber): Promise<boolean> {
|
|
92
|
+
throw new Error('TXE Archiver does not implement "isEpochComplete"');
|
|
289
93
|
}
|
|
290
94
|
|
|
291
|
-
|
|
292
|
-
throw new Error('TXE Archiver does not implement "
|
|
95
|
+
public syncImmediate(): Promise<void> {
|
|
96
|
+
throw new Error('TXE Archiver does not implement "syncImmediate"');
|
|
293
97
|
}
|
|
294
98
|
}
|