@aztec/txe 0.0.1-commit.21caa21 → 0.0.1-commit.21ecf947b
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/constants.d.ts +3 -0
- package/dest/constants.d.ts.map +1 -0
- package/dest/constants.js +2 -0
- package/dest/index.d.ts +1 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +3 -2
- package/dest/oracle/interfaces.d.ts +11 -8
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.d.ts +7 -7
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +10 -12
- package/dest/oracle/txe_oracle_top_level_context.d.ts +23 -13
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +174 -76
- package/dest/rpc_translator.d.ts +29 -17
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +125 -58
- package/dest/state_machine/archiver.d.ts +21 -52
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +63 -94
- package/dest/state_machine/dummy_p2p_client.d.ts +16 -12
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +35 -21
- package/dest/state_machine/global_variable_builder.d.ts +6 -5
- package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
- package/dest/state_machine/global_variable_builder.js +13 -1
- package/dest/state_machine/index.d.ts +7 -7
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +39 -22
- package/dest/state_machine/mock_epoch_cache.d.ts +9 -6
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +14 -7
- package/dest/state_machine/synchronizer.d.ts +3 -2
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/state_machine/synchronizer.js +5 -4
- package/dest/txe_session.d.ts +21 -13
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +154 -48
- package/dest/util/encoding.d.ts +618 -19
- package/dest/util/encoding.d.ts.map +1 -1
- package/dest/util/encoding.js +1 -1
- package/dest/util/txe_account_store.d.ts +10 -0
- package/dest/util/txe_account_store.d.ts.map +1 -0
- package/dest/util/{txe_account_data_provider.js → txe_account_store.js} +1 -1
- package/dest/util/txe_contract_store.d.ts +12 -0
- package/dest/util/txe_contract_store.d.ts.map +1 -0
- package/dest/util/{txe_contract_data_provider.js → txe_contract_store.js} +3 -3
- package/dest/util/txe_public_contract_data_source.d.ts +7 -6
- package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
- package/dest/util/txe_public_contract_data_source.js +11 -11
- package/dest/utils/block_creation.d.ts +21 -6
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +38 -4
- package/dest/utils/tx_effect_creation.d.ts +3 -3
- package/dest/utils/tx_effect_creation.d.ts.map +1 -1
- package/dest/utils/tx_effect_creation.js +4 -7
- package/package.json +18 -18
- package/src/constants.ts +3 -0
- package/src/index.ts +15 -12
- package/src/oracle/interfaces.ts +10 -7
- package/src/oracle/txe_oracle_public_context.ts +12 -19
- package/src/oracle/txe_oracle_top_level_context.ts +210 -117
- package/src/rpc_translator.ts +154 -58
- package/src/state_machine/archiver.ts +59 -114
- package/src/state_machine/dummy_p2p_client.ts +48 -27
- package/src/state_machine/global_variable_builder.ts +21 -4
- package/src/state_machine/index.ts +59 -21
- package/src/state_machine/mock_epoch_cache.ts +15 -11
- package/src/state_machine/synchronizer.ts +6 -5
- package/src/txe_session.ts +208 -93
- package/src/util/encoding.ts +1 -1
- package/src/util/{txe_account_data_provider.ts → txe_account_store.ts} +1 -1
- package/src/util/{txe_contract_data_provider.ts → txe_contract_store.ts} +3 -3
- package/src/util/txe_public_contract_data_source.ts +13 -12
- package/src/utils/block_creation.ts +49 -15
- package/src/utils/tx_effect_creation.ts +5 -12
- package/dest/util/txe_account_data_provider.d.ts +0 -10
- package/dest/util/txe_account_data_provider.d.ts.map +0 -1
- package/dest/util/txe_contract_data_provider.d.ts +0 -12
- package/dest/util/txe_contract_data_provider.d.ts.map +0 -1
|
@@ -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;IAEY,cAAc,CAAC,WAAW,EAAE,mBAAmB,EAAE,EAAE,MAAM,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhH;IAEM,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,CAgCxC;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,70 +1,76 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ArchiverDataSourceBase, ArchiverDataStoreUpdater, KVArchiverDataStore } from '@aztec/archiver';
|
|
2
2
|
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
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);
|
|
8
11
|
constructor(db){
|
|
9
|
-
|
|
12
|
+
const store = new KVArchiverDataStore(db, 9999, {
|
|
13
|
+
epochDuration: 32
|
|
14
|
+
});
|
|
15
|
+
super(store);
|
|
10
16
|
}
|
|
11
|
-
async
|
|
12
|
-
|
|
13
|
-
this.store.addLogs(blocks.map((block)=>block.block)),
|
|
14
|
-
this.store.addBlocks(blocks)
|
|
15
|
-
]);
|
|
16
|
-
return opResults.every(Boolean);
|
|
17
|
+
async addCheckpoints(checkpoints, result) {
|
|
18
|
+
await this.updater.addCheckpoints(checkpoints, result);
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
* @returns The number of the latest L2 block processed by the block source implementation.
|
|
21
|
-
*/ getBlockNumber() {
|
|
22
|
-
return this.store.getSynchedL2BlockNumber();
|
|
20
|
+
getRollupAddress() {
|
|
21
|
+
throw new Error('TXE Archiver does not implement "getRollupAddress"');
|
|
23
22
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* @returns The number of the latest L2 block proven seen by the block source implementation.
|
|
27
|
-
*/ getProvenBlockNumber() {
|
|
28
|
-
return this.store.getSynchedL2BlockNumber();
|
|
23
|
+
getRegistryAddress() {
|
|
24
|
+
throw new Error('TXE Archiver does not implement "getRegistryAddress"');
|
|
29
25
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
* @param number - The block number to return (inclusive).
|
|
33
|
-
* @returns The requested L2 block.
|
|
34
|
-
*/ async getPublishedBlock(number) {
|
|
35
|
-
// If the number provided is -ve, then return the latest block.
|
|
36
|
-
if (number < 0) {
|
|
37
|
-
number = await this.store.getSynchedL2BlockNumber();
|
|
38
|
-
}
|
|
39
|
-
if (number == 0) {
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
const blocks = await this.store.getPublishedBlocks(number, 1);
|
|
43
|
-
return blocks.length === 0 ? undefined : blocks[0];
|
|
26
|
+
getL1Constants() {
|
|
27
|
+
throw new Error('TXE Archiver does not implement "getL1Constants"');
|
|
44
28
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
*/ getBlock(number) {
|
|
50
|
-
return this.getPublishedBlock(number != 'latest' ? number : -1).then((block)=>block?.block);
|
|
29
|
+
getGenesisValues() {
|
|
30
|
+
return Promise.resolve({
|
|
31
|
+
genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT)
|
|
32
|
+
});
|
|
51
33
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
34
|
+
getL1Timestamp() {
|
|
35
|
+
throw new Error('TXE Archiver does not implement "getL1Timestamp"');
|
|
36
|
+
}
|
|
37
|
+
async getL2Tips() {
|
|
38
|
+
// In TXE there is no possibility of reorgs and no blocks are ever getting proven so we just set 'latest', 'proven'
|
|
39
|
+
// and 'finalized' to the latest block.
|
|
40
|
+
const blockHeader = await this.getBlockHeader('latest');
|
|
41
|
+
if (!blockHeader) {
|
|
42
|
+
throw new Error('L2Tips requested from TXE Archiver but no block header found');
|
|
59
43
|
}
|
|
60
|
-
|
|
61
|
-
|
|
44
|
+
const number = blockHeader.globalVariables.blockNumber;
|
|
45
|
+
const hash = (await blockHeader.hash()).toString();
|
|
46
|
+
const checkpointedBlock = await this.getCheckpointedBlock(number);
|
|
47
|
+
if (!checkpointedBlock) {
|
|
48
|
+
throw new Error(`L2Tips requested from TXE Archiver but no checkpointed block found for block number ${number}`);
|
|
62
49
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
50
|
+
// TXE uses 1-block-per-checkpoint for testing simplicity, so we can use block number as checkpoint number.
|
|
51
|
+
// This uses the deprecated fromBlockNumber method intentionally for the TXE testing environment.
|
|
52
|
+
const checkpoint = await this.store.getRangeOfCheckpoints(CheckpointNumber.fromBlockNumber(number), 1);
|
|
53
|
+
if (checkpoint.length === 0) {
|
|
54
|
+
throw new Error(`L2Tips requested from TXE Archiver but no checkpoint found for block number ${number}`);
|
|
55
|
+
}
|
|
56
|
+
const blockId = {
|
|
57
|
+
number,
|
|
58
|
+
hash
|
|
59
|
+
};
|
|
60
|
+
const checkpointId = {
|
|
61
|
+
number: checkpoint[0].checkpointNumber,
|
|
62
|
+
hash: checkpoint[0].header.hash().toString()
|
|
63
|
+
};
|
|
64
|
+
const tipId = {
|
|
65
|
+
block: blockId,
|
|
66
|
+
checkpoint: checkpointId
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
proposed: blockId,
|
|
70
|
+
proven: tipId,
|
|
71
|
+
finalized: tipId,
|
|
72
|
+
checkpointed: tipId
|
|
73
|
+
};
|
|
68
74
|
}
|
|
69
75
|
getL2SlotNumber() {
|
|
70
76
|
throw new Error('TXE Archiver does not implement "getL2SlotNumber"');
|
|
@@ -72,47 +78,10 @@ export class TXEArchiver extends ArchiverStoreHelper {
|
|
|
72
78
|
getL2EpochNumber() {
|
|
73
79
|
throw new Error('TXE Archiver does not implement "getL2EpochNumber"');
|
|
74
80
|
}
|
|
75
|
-
getBlocksForEpoch(_epochNumber) {
|
|
76
|
-
throw new Error('TXE Archiver does not implement "getBlocksForEpoch"');
|
|
77
|
-
}
|
|
78
|
-
getBlockHeadersForEpoch(_epochNumber) {
|
|
79
|
-
throw new Error('TXE Archiver does not implement "getBlockHeadersForEpoch"');
|
|
80
|
-
}
|
|
81
81
|
isEpochComplete(_epochNumber) {
|
|
82
82
|
throw new Error('TXE Archiver does not implement "isEpochComplete"');
|
|
83
83
|
}
|
|
84
|
-
getL2Tips() {
|
|
85
|
-
throw new Error('TXE Archiver does not implement "getL2Tips"');
|
|
86
|
-
}
|
|
87
|
-
getL1Constants() {
|
|
88
|
-
throw new Error('TXE Archiver does not implement "getL2Constants"');
|
|
89
|
-
}
|
|
90
|
-
getGenesisValues() {
|
|
91
|
-
return Promise.resolve({
|
|
92
|
-
genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT)
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
84
|
syncImmediate() {
|
|
96
85
|
throw new Error('TXE Archiver does not implement "syncImmediate"');
|
|
97
86
|
}
|
|
98
|
-
getContract(_address, _timestamp) {
|
|
99
|
-
throw new Error('TXE Archiver does not implement "getContract"');
|
|
100
|
-
}
|
|
101
|
-
getRollupAddress() {
|
|
102
|
-
throw new Error('TXE Archiver does not implement "getRollupAddress"');
|
|
103
|
-
}
|
|
104
|
-
getRegistryAddress() {
|
|
105
|
-
throw new Error('TXE Archiver does not implement "getRegistryAddress"');
|
|
106
|
-
}
|
|
107
|
-
getL1Timestamp() {
|
|
108
|
-
throw new Error('TXE Archiver does not implement "getL1Timestamp"');
|
|
109
|
-
}
|
|
110
|
-
isPendingChainInvalid() {
|
|
111
|
-
return Promise.resolve(false);
|
|
112
|
-
}
|
|
113
|
-
getPendingChainValidationStatus() {
|
|
114
|
-
return Promise.resolve({
|
|
115
|
-
valid: true
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
87
|
}
|
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
import type { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
-
import type { AuthRequest, ENR, P2P, P2PBlockReceivedCallback, P2PConfig, P2PSyncState, PeerId, ReqRespSubProtocol, ReqRespSubProtocolHandler, ReqRespSubProtocolValidators, StatusMessage } from '@aztec/p2p';
|
|
2
|
+
import type { AuthRequest, ENR, P2P, P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PConfig, P2PDuplicateAttestationCallback, P2PDuplicateProposalCallback, P2PSyncState, PeerId, ReqRespSubProtocol, ReqRespSubProtocolHandler, ReqRespSubProtocolValidators, StatusMessage } from '@aztec/p2p';
|
|
3
3
|
import type { EthAddress, L2BlockStreamEvent, L2Tips } from '@aztec/stdlib/block';
|
|
4
4
|
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
5
|
-
import type {
|
|
6
|
-
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
5
|
+
import type { BlockProposal, CheckpointAttestation, CheckpointProposal } from '@aztec/stdlib/p2p';
|
|
6
|
+
import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
7
7
|
export declare class DummyP2P implements P2P {
|
|
8
|
-
broadcastAttestations(_attestations: BlockAttestation[]): Promise<void>;
|
|
9
8
|
validate(_txs: Tx[]): Promise<void>;
|
|
10
9
|
clear(): Promise<void>;
|
|
11
10
|
getPendingTxs(): Promise<Tx[]>;
|
|
12
11
|
getEncodedEnr(): Promise<string | undefined>;
|
|
13
12
|
getPeers(_includePending?: boolean): Promise<PeerInfo[]>;
|
|
14
13
|
broadcastProposal(_proposal: BlockProposal): Promise<void>;
|
|
14
|
+
broadcastCheckpointProposal(_proposal: CheckpointProposal): Promise<void>;
|
|
15
|
+
broadcastCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void>;
|
|
15
16
|
registerBlockProposalHandler(_handler: P2PBlockReceivedCallback): void;
|
|
17
|
+
registerCheckpointProposalHandler(_handler: P2PCheckpointReceivedCallback): void;
|
|
16
18
|
requestTxs(_txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
17
19
|
requestTxByHash(_txHash: TxHash): Promise<Tx | undefined>;
|
|
18
20
|
sendTx(_tx: Tx): Promise<void>;
|
|
19
|
-
|
|
21
|
+
handleFailedExecution(_txHashes: TxHash[]): Promise<void>;
|
|
20
22
|
getTxByHashFromPool(_txHash: TxHash): Promise<Tx | undefined>;
|
|
21
23
|
getTxByHash(_txHash: TxHash): Promise<Tx | undefined>;
|
|
22
24
|
getArchivedTxByHash(_txHash: TxHash): Promise<Tx | undefined>;
|
|
23
25
|
getTxStatus(_txHash: TxHash): Promise<'pending' | 'mined' | undefined>;
|
|
24
26
|
iteratePendingTxs(): AsyncIterableIterator<Tx>;
|
|
27
|
+
iterateEligiblePendingTxs(): AsyncIterableIterator<Tx>;
|
|
25
28
|
getPendingTxCount(): Promise<number>;
|
|
26
29
|
start(): Promise<void>;
|
|
27
30
|
stop(): Promise<void>;
|
|
@@ -30,25 +33,26 @@ export declare class DummyP2P implements P2P {
|
|
|
30
33
|
getEnr(): ENR | undefined;
|
|
31
34
|
isP2PClient(): true;
|
|
32
35
|
getTxsByHash(_txHashes: TxHash[]): Promise<Tx[]>;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
addAttestations(_attestations: BlockAttestation[]): Promise<void>;
|
|
36
|
+
getCheckpointAttestationsForSlot(_slot: SlotNumber, _proposalId?: string): Promise<CheckpointAttestation[]>;
|
|
37
|
+
addOwnCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void>;
|
|
36
38
|
getL2BlockHash(_number: number): Promise<string | undefined>;
|
|
37
39
|
updateP2PConfig(_config: Partial<P2PConfig>): Promise<void>;
|
|
38
40
|
getL2Tips(): Promise<L2Tips>;
|
|
39
41
|
handleBlockStreamEvent(_event: L2BlockStreamEvent): Promise<void>;
|
|
40
42
|
sync(): void;
|
|
41
|
-
requestTxsByHash(_txHashes: TxHash[]): Promise<Tx[]>;
|
|
42
|
-
getTxs(_filter: 'all' | 'pending' | 'mined'): Promise<Tx[]>;
|
|
43
43
|
getTxsByHashFromPool(_txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
44
44
|
hasTxsInPool(_txHashes: TxHash[]): Promise<boolean[]>;
|
|
45
45
|
addTxsToPool(_txs: Tx[]): Promise<number>;
|
|
46
46
|
getSyncedLatestBlockNum(): Promise<number>;
|
|
47
47
|
getSyncedProvenBlockNum(): Promise<number>;
|
|
48
48
|
getSyncedLatestSlot(): Promise<bigint>;
|
|
49
|
-
|
|
49
|
+
protectTxs(_txHashes: TxHash[], _blockHeader: BlockHeader): Promise<TxHash[]>;
|
|
50
|
+
prepareForSlot(_slotNumber: SlotNumber): Promise<void>;
|
|
50
51
|
addReqRespSubProtocol(_subProtocol: ReqRespSubProtocol, _handler: ReqRespSubProtocolHandler, _validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol]): Promise<void>;
|
|
51
52
|
handleAuthRequestFromPeer(_authRequest: AuthRequest, _peerId: PeerId): Promise<StatusMessage>;
|
|
52
53
|
registerThisValidatorAddresses(_address: EthAddress[]): void;
|
|
54
|
+
registerDuplicateProposalCallback(_callback: P2PDuplicateProposalCallback): void;
|
|
55
|
+
registerDuplicateAttestationCallback(_callback: P2PDuplicateAttestationCallback): void;
|
|
56
|
+
hasBlockProposalsForSlot(_slot: SlotNumber): Promise<boolean>;
|
|
53
57
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVtbXlfcDJwX2NsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YXRlX21hY2hpbmUvZHVtbXlfcDJwX2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFDVixXQUFXLEVBQ1gsR0FBRyxFQUNILEdBQUcsRUFDSCx3QkFBd0IsRUFDeEIsNkJBQTZCLEVBQzdCLFNBQVMsRUFDVCwrQkFBK0IsRUFDL0IsNEJBQTRCLEVBQzVCLFlBQVksRUFDWixNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsYUFBYSxFQUNkLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRixPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLHFCQUFhLFFBQVMsWUFBVyxHQUFHO0lBQzNCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUV6QztJQUVNLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBRTVCO0lBRU0sYUFBYSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUVwQztJQUVNLGFBQWEsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVsRDtJQUVNLFFBQVEsQ0FBQyxlQUFlLENBQUMs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dummy_p2p_client.d.ts","sourceRoot":"","sources":["../../src/state_machine/dummy_p2p_client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EACV,WAAW,EACX,GAAG,EACH,GAAG,EACH,wBAAwB,EACxB,SAAS,EACT,YAAY,EACZ,MAAM,EACN,kBAAkB,EAClB,yBAAyB,EACzB,4BAA4B,EAC5B,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"dummy_p2p_client.d.ts","sourceRoot":"","sources":["../../src/state_machine/dummy_p2p_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
export class DummyP2P {
|
|
2
|
-
broadcastAttestations(_attestations) {
|
|
3
|
-
return Promise.resolve();
|
|
4
|
-
}
|
|
5
2
|
validate(_txs) {
|
|
6
3
|
return Promise.resolve();
|
|
7
4
|
}
|
|
@@ -20,9 +17,18 @@ export class DummyP2P {
|
|
|
20
17
|
broadcastProposal(_proposal) {
|
|
21
18
|
throw new Error('DummyP2P does not implement "broadcastProposal"');
|
|
22
19
|
}
|
|
20
|
+
broadcastCheckpointProposal(_proposal) {
|
|
21
|
+
throw new Error('DummyP2P does not implement "broadcastCheckpointProposal"');
|
|
22
|
+
}
|
|
23
|
+
broadcastCheckpointAttestations(_attestations) {
|
|
24
|
+
throw new Error('DummyP2P does not implement "broadcastCheckpointAttestations"');
|
|
25
|
+
}
|
|
23
26
|
registerBlockProposalHandler(_handler) {
|
|
24
27
|
throw new Error('DummyP2P does not implement "registerBlockProposalHandler"');
|
|
25
28
|
}
|
|
29
|
+
registerCheckpointProposalHandler(_handler) {
|
|
30
|
+
throw new Error('DummyP2P does not implement "registerCheckpointProposalHandler"');
|
|
31
|
+
}
|
|
26
32
|
requestTxs(_txHashes) {
|
|
27
33
|
throw new Error('DummyP2P does not implement "requestTxs"');
|
|
28
34
|
}
|
|
@@ -32,8 +38,8 @@ export class DummyP2P {
|
|
|
32
38
|
sendTx(_tx) {
|
|
33
39
|
throw new Error('DummyP2P does not implement "sendTx"');
|
|
34
40
|
}
|
|
35
|
-
|
|
36
|
-
throw new Error('DummyP2P does not implement "
|
|
41
|
+
handleFailedExecution(_txHashes) {
|
|
42
|
+
throw new Error('DummyP2P does not implement "handleFailedExecution"');
|
|
37
43
|
}
|
|
38
44
|
getTxByHashFromPool(_txHash) {
|
|
39
45
|
throw new Error('DummyP2P does not implement "getTxByHashFromPool"');
|
|
@@ -45,11 +51,16 @@ export class DummyP2P {
|
|
|
45
51
|
throw new Error('DummyP2P does not implement "getArchivedTxByHash"');
|
|
46
52
|
}
|
|
47
53
|
getTxStatus(_txHash) {
|
|
48
|
-
|
|
54
|
+
// In TXE there is no concept of transactions but we need to implement this because of tagging. We return 'mined'
|
|
55
|
+
// tx status for any tx hash.
|
|
56
|
+
return Promise.resolve('mined');
|
|
49
57
|
}
|
|
50
58
|
iteratePendingTxs() {
|
|
51
59
|
throw new Error('DummyP2P does not implement "iteratePendingTxs"');
|
|
52
60
|
}
|
|
61
|
+
iterateEligiblePendingTxs() {
|
|
62
|
+
throw new Error('DummyP2P does not implement "iterateEligiblePendingTxs"');
|
|
63
|
+
}
|
|
53
64
|
getPendingTxCount() {
|
|
54
65
|
throw new Error('DummyP2P does not implement "getPendingTxCount"');
|
|
55
66
|
}
|
|
@@ -74,14 +85,11 @@ export class DummyP2P {
|
|
|
74
85
|
getTxsByHash(_txHashes) {
|
|
75
86
|
throw new Error('DummyP2P does not implement "getTxsByHash"');
|
|
76
87
|
}
|
|
77
|
-
|
|
78
|
-
throw new Error('DummyP2P does not implement "
|
|
79
|
-
}
|
|
80
|
-
deleteAttestation(_attestation) {
|
|
81
|
-
return Promise.resolve();
|
|
88
|
+
getCheckpointAttestationsForSlot(_slot, _proposalId) {
|
|
89
|
+
throw new Error('DummyP2P does not implement "getCheckpointAttestationsForSlot"');
|
|
82
90
|
}
|
|
83
|
-
|
|
84
|
-
throw new Error('DummyP2P does not implement "
|
|
91
|
+
addOwnCheckpointAttestations(_attestations) {
|
|
92
|
+
throw new Error('DummyP2P does not implement "addOwnCheckpointAttestations"');
|
|
85
93
|
}
|
|
86
94
|
getL2BlockHash(_number) {
|
|
87
95
|
throw new Error('DummyP2P does not implement "getL2BlockHash"');
|
|
@@ -98,12 +106,6 @@ export class DummyP2P {
|
|
|
98
106
|
sync() {
|
|
99
107
|
throw new Error('DummyP2P does not implement "sync"');
|
|
100
108
|
}
|
|
101
|
-
requestTxsByHash(_txHashes) {
|
|
102
|
-
throw new Error('DummyP2P does not implement "requestTxsByHash"');
|
|
103
|
-
}
|
|
104
|
-
getTxs(_filter) {
|
|
105
|
-
throw new Error('DummyP2P does not implement "getTxs"');
|
|
106
|
-
}
|
|
107
109
|
getTxsByHashFromPool(_txHashes) {
|
|
108
110
|
throw new Error('DummyP2P does not implement "getTxsByHashFromPool"');
|
|
109
111
|
}
|
|
@@ -122,8 +124,11 @@ export class DummyP2P {
|
|
|
122
124
|
getSyncedLatestSlot() {
|
|
123
125
|
throw new Error('DummyP2P does not implement "getSyncedLatestSlot"');
|
|
124
126
|
}
|
|
125
|
-
|
|
126
|
-
throw new Error('DummyP2P does not implement "
|
|
127
|
+
protectTxs(_txHashes, _blockHeader) {
|
|
128
|
+
throw new Error('DummyP2P does not implement "protectTxs".');
|
|
129
|
+
}
|
|
130
|
+
prepareForSlot(_slotNumber) {
|
|
131
|
+
return Promise.resolve();
|
|
127
132
|
}
|
|
128
133
|
addReqRespSubProtocol(_subProtocol, _handler, _validator) {
|
|
129
134
|
throw new Error('DummyP2P does not implement "addReqRespSubProtocol".');
|
|
@@ -133,4 +138,13 @@ export class DummyP2P {
|
|
|
133
138
|
}
|
|
134
139
|
//This is no-op
|
|
135
140
|
registerThisValidatorAddresses(_address) {}
|
|
141
|
+
registerDuplicateProposalCallback(_callback) {
|
|
142
|
+
throw new Error('DummyP2P does not implement "registerDuplicateProposalCallback"');
|
|
143
|
+
}
|
|
144
|
+
registerDuplicateAttestationCallback(_callback) {
|
|
145
|
+
throw new Error('DummyP2P does not implement "registerDuplicateAttestationCallback"');
|
|
146
|
+
}
|
|
147
|
+
hasBlockProposalsForSlot(_slot) {
|
|
148
|
+
throw new Error('DummyP2P does not implement "hasBlockProposalsForSlot"');
|
|
149
|
+
}
|
|
136
150
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { BlockNumber, type SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
5
|
-
import { type GlobalVariableBuilder, GlobalVariables } from '@aztec/stdlib/tx';
|
|
5
|
+
import { type CheckpointGlobalVariables, type GlobalVariableBuilder, GlobalVariables } from '@aztec/stdlib/tx';
|
|
6
6
|
export declare class TXEGlobalVariablesBuilder implements GlobalVariableBuilder {
|
|
7
|
-
|
|
8
|
-
buildGlobalVariables(_blockNumber:
|
|
7
|
+
getCurrentMinFees(): Promise<GasFees>;
|
|
8
|
+
buildGlobalVariables(_blockNumber: BlockNumber, _coinbase: EthAddress, _feeRecipient: AztecAddress, _slotNumber?: SlotNumber): Promise<GlobalVariables>;
|
|
9
|
+
buildCheckpointGlobalVariables(_coinbase: EthAddress, _feeRecipient: AztecAddress, _slotNumber: SlotNumber): Promise<CheckpointGlobalVariables>;
|
|
9
10
|
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsX3ZhcmlhYmxlX2J1aWxkZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0ZV9tYWNoaW5lL2dsb2JhbF92YXJpYWJsZV9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFNUMsT0FBTyxFQUFFLEtBQUsseUJBQXlCLEVBQUUsS0FBSyxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRyxxQkFBYSx5QkFBMEIsWUFBVyxxQkFBcUI7SUFDOUQsaUJBQWlCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUUzQztJQUVNLG9CQUFvQixDQUN6QixZQUFZLEVBQUUsV0FBVyxFQUN6QixTQUFTLEVBQUUsVUFBVSxFQUNyQixhQUFhLEVBQUUsWUFBWSxFQUMzQixXQUFXLENBQUMsRUFBRSxVQUFVLEdBQ3ZCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FFMUI7SUFFTSw4QkFBOEIsQ0FDbkMsU0FBUyxFQUFFLFVBQVUsRUFDckIsYUFBYSxFQUFFLFlBQVksRUFDM0IsV0FBVyxFQUFFLFVBQVUsR0FDdEIsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBV3BDO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global_variable_builder.d.ts","sourceRoot":"","sources":["../../src/state_machine/global_variable_builder.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"global_variable_builder.d.ts","sourceRoot":"","sources":["../../src/state_machine/global_variable_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,KAAK,yBAAyB,EAAE,KAAK,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/G,qBAAa,yBAA0B,YAAW,qBAAqB;IAC9D,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE3C;IAEM,oBAAoB,CACzB,YAAY,EAAE,WAAW,EACzB,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,UAAU,GACvB,OAAO,CAAC,eAAe,CAAC,CAE1B;IAEM,8BAA8B,CACnC,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,YAAY,EAC3B,WAAW,EAAE,UAAU,GACtB,OAAO,CAAC,yBAAyB,CAAC,CAWpC;CACF"}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
2
2
|
import { makeGlobalVariables } from '@aztec/stdlib/testing';
|
|
3
3
|
export class TXEGlobalVariablesBuilder {
|
|
4
|
-
|
|
4
|
+
getCurrentMinFees() {
|
|
5
5
|
return Promise.resolve(new GasFees(0, 0));
|
|
6
6
|
}
|
|
7
7
|
buildGlobalVariables(_blockNumber, _coinbase, _feeRecipient, _slotNumber) {
|
|
8
8
|
return Promise.resolve(makeGlobalVariables());
|
|
9
9
|
}
|
|
10
|
+
buildCheckpointGlobalVariables(_coinbase, _feeRecipient, _slotNumber) {
|
|
11
|
+
const vars = makeGlobalVariables();
|
|
12
|
+
return Promise.resolve({
|
|
13
|
+
chainId: vars.chainId,
|
|
14
|
+
version: vars.version,
|
|
15
|
+
slotNumber: vars.slotNumber,
|
|
16
|
+
timestamp: vars.timestamp,
|
|
17
|
+
coinbase: vars.coinbase,
|
|
18
|
+
feeRecipient: vars.feeRecipient,
|
|
19
|
+
gasFees: vars.gasFees
|
|
20
|
+
});
|
|
21
|
+
}
|
|
10
22
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import {
|
|
3
|
-
import { type L2Block } from '@aztec/stdlib/block';
|
|
1
|
+
import { type AnchorBlockStore, type ContractStore, ContractSyncService, type NoteStore } from '@aztec/pxe/server';
|
|
2
|
+
import { L2Block } from '@aztec/stdlib/block';
|
|
4
3
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
5
4
|
import { TXEArchiver } from './archiver.js';
|
|
6
5
|
import { TXESynchronizer } from './synchronizer.js';
|
|
@@ -8,9 +7,10 @@ export declare class TXEStateMachine {
|
|
|
8
7
|
node: AztecNode;
|
|
9
8
|
synchronizer: TXESynchronizer;
|
|
10
9
|
archiver: TXEArchiver;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
anchorBlockStore: AnchorBlockStore;
|
|
11
|
+
contractSyncService: ContractSyncService;
|
|
12
|
+
constructor(node: AztecNode, synchronizer: TXESynchronizer, archiver: TXEArchiver, anchorBlockStore: AnchorBlockStore, contractSyncService: ContractSyncService);
|
|
13
|
+
static create(archiver: TXEArchiver, anchorBlockStore: AnchorBlockStore, contractStore: ContractStore, noteStore: NoteStore): Promise<TXEStateMachine>;
|
|
14
14
|
handleL2Block(block: L2Block): Promise<void>;
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0ZV9tYWNoaW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUFFLEtBQUssYUFBYSxFQUFFLG1CQUFtQixFQUFFLEtBQUssU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSWpFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBS3BELHFCQUFhLGVBQWU7SUFFakIsSUFBSSxFQUFFLFNBQVM7SUFDZixZQUFZLEVBQUUsZUFBZTtJQUM3QixRQUFRLEVBQUUsV0FBVztJQUNyQixnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDbEMsbUJBQW1CLEVBQUUsbUJBQW1CO0lBTGpELFlBQ1MsSUFBSSxFQUFFLFNBQVMsRUFDZixZQUFZLEVBQUUsZUFBZSxFQUM3QixRQUFRLEVBQUUsV0FBVyxFQUNyQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQzdDO0lBRUosT0FBb0IsTUFBTSxDQUN4QixRQUFRLEVBQUUsV0FBVyxFQUNyQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsYUFBYSxFQUFFLGFBQWEsRUFDNUIsU0FBUyxFQUFFLFNBQVMsNEJBb0NyQjtJQUVZLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxpQkF5Q3hDO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state_machine/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state_machine/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAIjE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,qBAAa,eAAe;IAEjB,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,eAAe;IAC7B,QAAQ,EAAE,WAAW;IACrB,gBAAgB,EAAE,gBAAgB;IAClC,mBAAmB,EAAE,mBAAmB;IALjD,YACS,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,eAAe,EAC7B,QAAQ,EAAE,WAAW,EACrB,gBAAgB,EAAE,gBAAgB,EAClC,mBAAmB,EAAE,mBAAmB,EAC7C;IAEJ,OAAoB,MAAM,CACxB,QAAQ,EAAE,WAAW,EACrB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,4BAoCrB;IAEY,aAAa,CAAC,KAAK,EAAE,OAAO,iBAyCxC;CACF"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { AztecNodeService } from '@aztec/aztec-node';
|
|
2
2
|
import { TestCircuitVerifier } from '@aztec/bb-prover/test';
|
|
3
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
+
import { ContractSyncService } from '@aztec/pxe/server';
|
|
7
|
+
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
8
|
+
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
6
9
|
import { getPackageVersion } from '@aztec/stdlib/update-checker';
|
|
7
|
-
import { TXEArchiver } from './archiver.js';
|
|
8
10
|
import { DummyP2P } from './dummy_p2p_client.js';
|
|
9
11
|
import { TXEGlobalVariablesBuilder } from './global_variable_builder.js';
|
|
10
12
|
import { MockEpochCache } from './mock_epoch_cache.js';
|
|
@@ -15,37 +17,52 @@ export class TXEStateMachine {
|
|
|
15
17
|
node;
|
|
16
18
|
synchronizer;
|
|
17
19
|
archiver;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
anchorBlockStore;
|
|
21
|
+
contractSyncService;
|
|
22
|
+
constructor(node, synchronizer, archiver, anchorBlockStore, contractSyncService){
|
|
20
23
|
this.node = node;
|
|
21
24
|
this.synchronizer = synchronizer;
|
|
22
25
|
this.archiver = archiver;
|
|
23
|
-
this.
|
|
26
|
+
this.anchorBlockStore = anchorBlockStore;
|
|
27
|
+
this.contractSyncService = contractSyncService;
|
|
24
28
|
}
|
|
25
|
-
static async create(
|
|
26
|
-
const archiver = new TXEArchiver(db);
|
|
29
|
+
static async create(archiver, anchorBlockStore, contractStore, noteStore) {
|
|
27
30
|
const synchronizer = await TXESynchronizer.create();
|
|
28
|
-
const syncDataProvider = new SyncDataProvider(db);
|
|
29
31
|
const aztecNodeConfig = {};
|
|
30
32
|
const log = createLogger('txe_node');
|
|
31
33
|
const node = new AztecNodeService(aztecNodeConfig, new DummyP2P(), archiver, archiver, archiver, archiver, synchronizer, undefined, undefined, undefined, undefined, VERSION, CHAIN_ID, new TXEGlobalVariablesBuilder(), new MockEpochCache(), getPackageVersion() ?? '', new TestCircuitVerifier(), undefined, log);
|
|
32
|
-
|
|
34
|
+
const contractSyncService = new ContractSyncService(node, contractStore, noteStore, createLogger('txe:contract_sync'));
|
|
35
|
+
return new this(node, synchronizer, archiver, anchorBlockStore, contractSyncService);
|
|
33
36
|
}
|
|
34
37
|
async handleL2Block(block) {
|
|
38
|
+
// Create a checkpoint from the block manually.
|
|
39
|
+
// TXE uses 1-block-per-checkpoint for testing simplicity, so we can use block number as checkpoint number.
|
|
40
|
+
// This uses the deprecated fromBlockNumber method intentionally for the TXE testing environment.
|
|
41
|
+
const checkpointNumber = CheckpointNumber.fromBlockNumber(block.number);
|
|
42
|
+
const checkpoint = new Checkpoint(block.archive, CheckpointHeader.from({
|
|
43
|
+
lastArchiveRoot: block.header.lastArchive.root,
|
|
44
|
+
inHash: Fr.ZERO,
|
|
45
|
+
blobsHash: Fr.ZERO,
|
|
46
|
+
blockHeadersHash: Fr.ZERO,
|
|
47
|
+
epochOutHash: Fr.ZERO,
|
|
48
|
+
slotNumber: block.header.globalVariables.slotNumber,
|
|
49
|
+
timestamp: block.header.globalVariables.timestamp,
|
|
50
|
+
coinbase: block.header.globalVariables.coinbase,
|
|
51
|
+
feeRecipient: block.header.globalVariables.feeRecipient,
|
|
52
|
+
gasFees: block.header.globalVariables.gasFees,
|
|
53
|
+
totalManaUsed: block.header.totalManaUsed
|
|
54
|
+
}), [
|
|
55
|
+
block
|
|
56
|
+
], checkpointNumber);
|
|
57
|
+
const publishedCheckpoint = new PublishedCheckpoint(checkpoint, new L1PublishedData(BigInt(block.header.globalVariables.blockNumber), block.header.globalVariables.timestamp, block.header.globalVariables.blockNumber.toString()), []);
|
|
58
|
+
// Wipe contract sync cache when anchor block changes (mirrors BlockSynchronizer behavior)
|
|
59
|
+
this.contractSyncService.wipe();
|
|
35
60
|
await Promise.all([
|
|
36
61
|
this.synchronizer.handleL2Block(block),
|
|
37
|
-
this.archiver.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
blockHash: block.header.globalVariables.blockNumber.toString(),
|
|
42
|
-
blockNumber: BigInt(block.header.globalVariables.blockNumber),
|
|
43
|
-
timestamp: block.header.globalVariables.timestamp
|
|
44
|
-
},
|
|
45
|
-
attestations: []
|
|
46
|
-
})
|
|
47
|
-
]),
|
|
48
|
-
this.syncDataProvider.setHeader(block.getBlockHeader())
|
|
62
|
+
this.archiver.addCheckpoints([
|
|
63
|
+
publishedCheckpoint
|
|
64
|
+
], undefined),
|
|
65
|
+
this.anchorBlockStore.setHeader(block.header)
|
|
49
66
|
]);
|
|
50
67
|
}
|
|
51
68
|
}
|