@aztec/txe 0.0.1-commit.d3ec352c → 0.0.1-commit.d58ff9d0
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/AuthRegistry-QVGDDH5X.js +3 -0
- package/dest/AuthRegistry-QVGDDH5X.js.map +7 -0
- package/dest/ContractClassRegistry-VWR3F42P.js +3 -0
- package/dest/ContractClassRegistry-VWR3F42P.js.map +7 -0
- package/dest/ContractInstanceRegistry-FHIWE33X.js +3 -0
- package/dest/ContractInstanceRegistry-FHIWE33X.js.map +7 -0
- package/dest/FeeJuice-SAOWVGG7.js +3 -0
- package/dest/FeeJuice-SAOWVGG7.js.map +7 -0
- package/dest/HandshakeRegistry-GY5CPEPS.js +3 -0
- package/dest/HandshakeRegistry-GY5CPEPS.js.map +7 -0
- package/dest/MultiCallEntrypoint-QG5H33ZZ.js +3 -0
- package/dest/MultiCallEntrypoint-QG5H33ZZ.js.map +7 -0
- package/dest/SchnorrAccount-NME3E45O.js +3 -0
- package/dest/SchnorrAccount-NME3E45O.js.map +7 -0
- package/dest/SchnorrInitializerlessAccount-WTGXU6SW.js +3 -0
- package/dest/SchnorrInitializerlessAccount-WTGXU6SW.js.map +7 -0
- package/dest/bin/check_txe_oracle_version.d.ts +2 -0
- package/dest/bin/check_txe_oracle_version.d.ts.map +1 -0
- package/dest/bin/check_txe_oracle_version.js +53 -0
- package/dest/bin/index.js +3 -30
- package/dest/bin/index.js.map +7 -0
- package/dest/bin/oracle_test_server.d.ts +3 -0
- package/dest/bin/oracle_test_server.d.ts.map +1 -0
- package/dest/bin/oracle_test_server.js +41 -0
- package/dest/chunk-32UHX7YY.js +3 -0
- package/dest/chunk-32UHX7YY.js.map +7 -0
- package/dest/chunk-GSUKUCKV.js +260 -0
- package/dest/chunk-GSUKUCKV.js.map +7 -0
- package/dest/chunk-UP4KKUVA.js +304 -0
- package/dest/chunk-UP4KKUVA.js.map +7 -0
- package/dest/constants.d.ts +7 -0
- package/dest/constants.d.ts.map +1 -0
- package/dest/constants.js +10 -0
- package/dest/dispatcher_pool.d.ts +67 -0
- package/dest/dispatcher_pool.d.ts.map +1 -0
- package/dest/dispatcher_pool.js +286 -0
- package/dest/index.d.ts +51 -7
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +75 -158
- package/dest/metafile.json +38759 -0
- package/dest/msgpackr_fr_extension.d.ts +2 -0
- package/dest/msgpackr_fr_extension.d.ts.map +1 -0
- package/dest/msgpackr_fr_extension.js +21 -0
- package/dest/oracle/interfaces.d.ts +71 -30
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/tagging_secret_strategy.d.ts +12 -0
- package/dest/oracle/tagging_secret_strategy.d.ts.map +1 -0
- package/dest/oracle/tagging_secret_strategy.js +12 -0
- package/dest/oracle/test-resolver/default_fixtures.d.ts +16 -0
- package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
- package/dest/oracle/test-resolver/default_fixtures.js +200 -0
- package/dest/oracle/test-resolver/index.d.ts +9 -0
- package/dest/oracle/test-resolver/index.d.ts.map +1 -0
- package/dest/oracle/test-resolver/index.js +32 -0
- package/dest/oracle/test-resolver/resolver.d.ts +48 -0
- package/dest/oracle/test-resolver/resolver.d.ts.map +1 -0
- package/dest/oracle/test-resolver/resolver.js +181 -0
- package/dest/oracle/txe_oracle_public_context.d.ts +40 -16
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +69 -23
- package/dest/oracle/txe_oracle_registry.d.ts +172 -0
- package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
- package/dest/oracle/txe_oracle_registry.js +767 -0
- package/dest/oracle/txe_oracle_top_level_context.d.ts +79 -30
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +653 -285
- package/dest/oracle/txe_oracle_version.d.ts +17 -0
- package/dest/oracle/txe_oracle_version.d.ts.map +1 -0
- package/dest/oracle/txe_oracle_version.js +14 -0
- package/dest/oracle/txe_private_execution_oracle.d.ts +17 -0
- package/dest/oracle/txe_private_execution_oracle.d.ts.map +1 -0
- package/dest/oracle/txe_private_execution_oracle.js +15 -0
- package/dest/rpc_server.d.ts +14 -0
- package/dest/rpc_server.d.ts.map +1 -0
- package/dest/rpc_server.js +78 -0
- package/dest/rpc_translator.d.ts +115 -216
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +901 -560
- package/dest/server.bundle.js +3 -0
- package/dest/server.bundle.js.map +7 -0
- package/dest/state_machine/archiver.d.ts +23 -58
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +76 -112
- package/dest/state_machine/dummy_p2p_client.d.ts +31 -17
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +63 -25
- package/dest/state_machine/global_variable_builder.d.ts +10 -5
- package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
- package/dest/state_machine/global_variable_builder.js +20 -5
- package/dest/state_machine/index.d.ts +14 -8
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +84 -27
- package/dest/state_machine/mock_epoch_cache.d.ts +24 -8
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +43 -9
- package/dest/state_machine/synchronizer.d.ts +14 -6
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/state_machine/synchronizer.js +23 -10
- package/dest/txe_session.d.ts +102 -20
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +442 -75
- package/dest/utils/block_creation.d.ts +20 -6
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +40 -6
- package/dest/utils/encoding.d.ts +192 -0
- package/dest/utils/encoding.d.ts.map +1 -0
- package/dest/{util → utils}/encoding.js +8 -3
- package/dest/{util → utils}/expected_failure_error.d.ts +1 -1
- package/dest/utils/expected_failure_error.d.ts.map +1 -0
- package/dest/utils/tx_effect_creation.d.ts +2 -3
- package/dest/utils/tx_effect_creation.d.ts.map +1 -1
- package/dest/utils/tx_effect_creation.js +3 -7
- package/dest/utils/txe_account_store.d.ts +10 -0
- package/dest/utils/txe_account_store.d.ts.map +1 -0
- package/dest/{util/txe_account_data_provider.js → utils/txe_account_store.js} +1 -1
- package/dest/utils/txe_artifact_resolver.d.ts +37 -0
- package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
- package/dest/utils/txe_artifact_resolver.js +161 -0
- package/dest/utils/txe_public_contract_data_source.d.ts +20 -0
- package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -0
- package/dest/utils/txe_public_contract_data_source.js +51 -0
- package/dest/worker.bundle.js +3 -0
- package/dest/worker.bundle.js.map +7 -0
- package/dest/worker.d.ts +2 -0
- package/dest/worker.d.ts.map +1 -0
- package/dest/worker.js +92 -0
- package/package.json +39 -22
- package/src/bin/check_txe_oracle_version.ts +67 -0
- package/src/bin/index.ts +11 -2
- package/src/bin/oracle_test_server.ts +51 -0
- package/src/constants.ts +13 -0
- package/src/dispatcher_pool.ts +317 -0
- package/src/index.ts +113 -201
- package/src/msgpackr_fr_extension.ts +23 -0
- package/src/oracle/interfaces.ts +77 -35
- package/src/oracle/tagging_secret_strategy.ts +25 -0
- package/src/oracle/test-resolver/default_fixtures.ts +271 -0
- package/src/oracle/test-resolver/index.ts +44 -0
- package/src/oracle/test-resolver/resolver.ts +245 -0
- package/src/oracle/txe_oracle_public_context.ts +82 -27
- package/src/oracle/txe_oracle_registry.ts +556 -0
- package/src/oracle/txe_oracle_top_level_context.ts +555 -189
- package/src/oracle/txe_oracle_version.ts +17 -0
- package/src/oracle/txe_private_execution_oracle.ts +30 -0
- package/src/rpc_server.ts +87 -0
- package/src/rpc_translator.ts +1115 -923
- package/src/state_machine/archiver.ts +81 -132
- package/src/state_machine/dummy_p2p_client.ts +96 -38
- package/src/state_machine/global_variable_builder.ts +28 -10
- package/src/state_machine/index.ts +118 -44
- package/src/state_machine/mock_epoch_cache.ts +53 -14
- package/src/state_machine/synchronizer.ts +32 -12
- package/src/txe_session.ts +727 -123
- package/src/utils/block_creation.ts +50 -16
- package/src/{util → utils}/encoding.ts +9 -3
- package/src/utils/tx_effect_creation.ts +3 -13
- package/src/{util/txe_account_data_provider.ts → utils/txe_account_store.ts} +1 -1
- package/src/utils/txe_artifact_resolver.ts +217 -0
- package/src/utils/txe_public_contract_data_source.ts +60 -0
- package/src/worker.ts +98 -0
- package/dest/util/encoding.d.ts +0 -121
- package/dest/util/encoding.d.ts.map +0 -1
- package/dest/util/expected_failure_error.d.ts.map +0 -1
- 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
- package/dest/util/txe_contract_data_provider.js +0 -22
- package/dest/util/txe_public_contract_data_source.d.ts +0 -21
- package/dest/util/txe_public_contract_data_source.d.ts.map +0 -1
- package/dest/util/txe_public_contract_data_source.js +0 -67
- package/src/util/txe_contract_data_provider.ts +0 -36
- package/src/util/txe_public_contract_data_source.ts +0 -86
- /package/dest/{util → utils}/expected_failure_error.js +0 -0
- /package/src/{util → utils}/expected_failure_error.ts +0 -0
|
@@ -1,77 +1,151 @@
|
|
|
1
1
|
import { type AztecNodeConfig, 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
|
-
|
|
6
|
-
|
|
6
|
+
import {
|
|
7
|
+
type AnchorBlockStore,
|
|
8
|
+
ContractClassService,
|
|
9
|
+
type ContractStore,
|
|
10
|
+
ContractSyncService,
|
|
11
|
+
type NoteStore,
|
|
12
|
+
} from '@aztec/pxe/server';
|
|
13
|
+
import { TxResolverService } from '@aztec/pxe/simulator';
|
|
14
|
+
import { L2Block, type L2TipsProvider } from '@aztec/stdlib/block';
|
|
15
|
+
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
7
16
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
8
|
-
import {
|
|
17
|
+
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
9
18
|
|
|
10
19
|
import { TXEArchiver } from './archiver.js';
|
|
11
20
|
import { DummyP2P } from './dummy_p2p_client.js';
|
|
12
|
-
import { TXEGlobalVariablesBuilder } from './global_variable_builder.js';
|
|
21
|
+
import { TXEFeeProvider, TXEGlobalVariablesBuilder } from './global_variable_builder.js';
|
|
13
22
|
import { MockEpochCache } from './mock_epoch_cache.js';
|
|
14
23
|
import { TXESynchronizer } from './synchronizer.js';
|
|
15
24
|
|
|
16
25
|
const VERSION = 1;
|
|
17
26
|
const CHAIN_ID = 1;
|
|
27
|
+
// Hardcoded so the bundled TXE doesn't try to read stdlib's package.json at a relative path
|
|
28
|
+
// that becomes invalid once bundled
|
|
29
|
+
const PACKAGE_VERSION = 'txe';
|
|
18
30
|
|
|
19
31
|
export class TXEStateMachine {
|
|
20
32
|
constructor(
|
|
21
33
|
public node: AztecNode,
|
|
22
34
|
public synchronizer: TXESynchronizer,
|
|
23
35
|
public archiver: TXEArchiver,
|
|
24
|
-
public
|
|
36
|
+
public anchorBlockStore: AnchorBlockStore,
|
|
37
|
+
public contractSyncService: ContractSyncService,
|
|
38
|
+
public contractClassService: ContractClassService,
|
|
39
|
+
public txResolver: TxResolverService,
|
|
25
40
|
) {}
|
|
26
41
|
|
|
27
|
-
public static async create(
|
|
28
|
-
|
|
42
|
+
public static async create(
|
|
43
|
+
archiver: TXEArchiver,
|
|
44
|
+
anchorBlockStore: AnchorBlockStore,
|
|
45
|
+
contractStore: ContractStore,
|
|
46
|
+
noteStore: NoteStore,
|
|
47
|
+
) {
|
|
29
48
|
const synchronizer = await TXESynchronizer.create();
|
|
30
|
-
const syncDataProvider = new SyncDataProvider(db);
|
|
31
|
-
|
|
32
49
|
const aztecNodeConfig = {} as AztecNodeConfig;
|
|
33
50
|
|
|
34
51
|
const log = createLogger('txe_node');
|
|
35
|
-
const node = new AztecNodeService(
|
|
36
|
-
aztecNodeConfig,
|
|
37
|
-
new DummyP2P(),
|
|
38
|
-
archiver,
|
|
39
|
-
archiver,
|
|
40
|
-
archiver,
|
|
41
|
-
archiver,
|
|
42
|
-
synchronizer,
|
|
43
|
-
undefined,
|
|
44
|
-
undefined,
|
|
45
|
-
undefined,
|
|
46
|
-
undefined,
|
|
47
|
-
|
|
48
|
-
CHAIN_ID,
|
|
49
|
-
|
|
50
|
-
new
|
|
51
|
-
|
|
52
|
-
new
|
|
53
|
-
|
|
52
|
+
const node = new AztecNodeService({
|
|
53
|
+
config: aztecNodeConfig,
|
|
54
|
+
p2pClient: new DummyP2P(),
|
|
55
|
+
blockSource: archiver,
|
|
56
|
+
logsSource: archiver,
|
|
57
|
+
contractDataSource: archiver,
|
|
58
|
+
l1ToL2MessageSource: archiver,
|
|
59
|
+
worldStateSynchronizer: synchronizer,
|
|
60
|
+
sequencer: undefined,
|
|
61
|
+
proverNode: undefined,
|
|
62
|
+
slasherClient: undefined,
|
|
63
|
+
validatorsSentinel: undefined,
|
|
64
|
+
stopStartedWatchers: async () => {},
|
|
65
|
+
l1ChainId: CHAIN_ID,
|
|
66
|
+
version: VERSION,
|
|
67
|
+
globalVariableBuilder: new TXEGlobalVariablesBuilder(),
|
|
68
|
+
rollupContract: undefined,
|
|
69
|
+
feeProvider: new TXEFeeProvider(),
|
|
70
|
+
epochCache: new MockEpochCache(),
|
|
71
|
+
packageVersion: PACKAGE_VERSION,
|
|
72
|
+
peerProofVerifier: new TestCircuitVerifier(),
|
|
73
|
+
rpcProofVerifier: new TestCircuitVerifier(),
|
|
74
|
+
telemetry: undefined,
|
|
54
75
|
log,
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
const contractClassService = new ContractClassService(node, contractStore);
|
|
79
|
+
const contractSyncService = new ContractSyncService(
|
|
80
|
+
node,
|
|
81
|
+
contractStore,
|
|
82
|
+
contractClassService,
|
|
83
|
+
noteStore,
|
|
84
|
+
createLogger('txe:contract_sync'),
|
|
55
85
|
);
|
|
56
86
|
|
|
57
|
-
|
|
87
|
+
const txResolver = new TxResolverService(node);
|
|
88
|
+
|
|
89
|
+
return new this(
|
|
90
|
+
node,
|
|
91
|
+
synchronizer,
|
|
92
|
+
archiver,
|
|
93
|
+
anchorBlockStore,
|
|
94
|
+
contractSyncService,
|
|
95
|
+
contractClassService,
|
|
96
|
+
txResolver,
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** Returns an {@link L2TipsProvider} backed by this node's chain tips. */
|
|
101
|
+
public get l2TipsProvider(): L2TipsProvider {
|
|
102
|
+
const node = this.node;
|
|
103
|
+
return {
|
|
104
|
+
getL2Tips: () => node.getChainTips(),
|
|
105
|
+
};
|
|
58
106
|
}
|
|
59
107
|
|
|
60
|
-
public async handleL2Block(block: L2Block) {
|
|
108
|
+
public async handleL2Block(block: L2Block, l1ToL2Messages: Fr[] = []) {
|
|
109
|
+
// Create a checkpoint from the block manually.
|
|
110
|
+
// TXE uses 1-block-per-checkpoint for testing simplicity, so we can use block number as checkpoint number.
|
|
111
|
+
// This uses the deprecated fromBlockNumber method intentionally for the TXE testing environment.
|
|
112
|
+
const checkpointNumber = CheckpointNumber.fromBlockNumber(block.number);
|
|
113
|
+
const checkpoint = new Checkpoint(
|
|
114
|
+
block.archive,
|
|
115
|
+
CheckpointHeader.from({
|
|
116
|
+
lastArchiveRoot: block.header.lastArchive.root,
|
|
117
|
+
inHash: Fr.ZERO,
|
|
118
|
+
blobsHash: Fr.ZERO,
|
|
119
|
+
blockHeadersHash: Fr.ZERO,
|
|
120
|
+
epochOutHash: Fr.ZERO,
|
|
121
|
+
slotNumber: block.header.globalVariables.slotNumber,
|
|
122
|
+
timestamp: block.header.globalVariables.timestamp,
|
|
123
|
+
coinbase: block.header.globalVariables.coinbase,
|
|
124
|
+
feeRecipient: block.header.globalVariables.feeRecipient,
|
|
125
|
+
gasFees: block.header.globalVariables.gasFees,
|
|
126
|
+
totalManaUsed: block.header.totalManaUsed,
|
|
127
|
+
accumulatedFees: block.header.totalFees,
|
|
128
|
+
}),
|
|
129
|
+
[block],
|
|
130
|
+
checkpointNumber,
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
const publishedCheckpoint = new PublishedCheckpoint(
|
|
134
|
+
checkpoint,
|
|
135
|
+
new L1PublishedData(
|
|
136
|
+
BigInt(block.header.globalVariables.blockNumber),
|
|
137
|
+
block.header.globalVariables.timestamp,
|
|
138
|
+
block.header.globalVariables.blockNumber.toString(),
|
|
139
|
+
),
|
|
140
|
+
[],
|
|
141
|
+
);
|
|
142
|
+
// Wipe contract sync cache when anchor block changes (mirrors BlockSynchronizer behavior)
|
|
143
|
+
this.contractSyncService.wipe();
|
|
144
|
+
|
|
61
145
|
await Promise.all([
|
|
62
|
-
this.synchronizer.handleL2Block(block
|
|
63
|
-
this.archiver.
|
|
64
|
-
|
|
65
|
-
block,
|
|
66
|
-
l1: {
|
|
67
|
-
blockHash: block.header.globalVariables.blockNumber.toString(),
|
|
68
|
-
blockNumber: BigInt(block.header.globalVariables.blockNumber),
|
|
69
|
-
timestamp: block.header.globalVariables.timestamp,
|
|
70
|
-
},
|
|
71
|
-
attestations: [],
|
|
72
|
-
}),
|
|
73
|
-
]),
|
|
74
|
-
this.syncDataProvider.setHeader(block.getBlockHeader()),
|
|
146
|
+
this.synchronizer.handleL2Block(block, l1ToL2Messages),
|
|
147
|
+
this.archiver.addCheckpoints([publishedCheckpoint], undefined),
|
|
148
|
+
this.anchorBlockStore.setHeader(block.header),
|
|
75
149
|
]);
|
|
76
150
|
}
|
|
77
151
|
}
|
|
@@ -1,37 +1,60 @@
|
|
|
1
1
|
import type { EpochAndSlot, EpochCacheInterface, EpochCommitteeInfo, SlotTag } from '@aztec/epoch-cache';
|
|
2
2
|
import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
|
+
import { EmptyL1RollupConstants, type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Mock implementation of the EpochCacheInterface used to satisfy dependencies of AztecNodeService.
|
|
7
8
|
* Since in TXE we don't validate transactions, mock suffices here.
|
|
8
9
|
*/
|
|
9
10
|
export class MockEpochCache implements EpochCacheInterface {
|
|
10
|
-
getCommittee(): Promise<EpochCommitteeInfo> {
|
|
11
|
+
getCommittee(_slot: SlotTag = 'now'): Promise<EpochCommitteeInfo> {
|
|
11
12
|
return Promise.resolve({
|
|
12
13
|
committee: undefined,
|
|
13
14
|
seed: 0n,
|
|
14
15
|
epoch: EpochNumber.ZERO,
|
|
16
|
+
isEscapeHatchOpen: false,
|
|
15
17
|
});
|
|
16
18
|
}
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
getSlotNow(): SlotNumber {
|
|
21
|
+
return SlotNumber(0);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
getTargetSlot(): SlotNumber {
|
|
25
|
+
return SlotNumber(0);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getEpochNow(): EpochNumber {
|
|
29
|
+
return EpochNumber.ZERO;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getTargetEpoch(): EpochNumber {
|
|
33
|
+
return EpochNumber.ZERO;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
getEpochAndSlotNow(): EpochAndSlot & { nowMs: bigint } {
|
|
19
37
|
return {
|
|
20
38
|
epoch: EpochNumber.ZERO,
|
|
21
39
|
slot: SlotNumber(0),
|
|
22
40
|
ts: 0n,
|
|
41
|
+
nowMs: 0n,
|
|
23
42
|
};
|
|
24
43
|
}
|
|
25
44
|
|
|
26
|
-
getEpochAndSlotInNextL1Slot(): EpochAndSlot & {
|
|
45
|
+
getEpochAndSlotInNextL1Slot(): EpochAndSlot & { nowSeconds: bigint } {
|
|
27
46
|
return {
|
|
28
47
|
epoch: EpochNumber.ZERO,
|
|
29
48
|
slot: SlotNumber(0),
|
|
30
49
|
ts: 0n,
|
|
31
|
-
|
|
50
|
+
nowSeconds: 0n,
|
|
32
51
|
};
|
|
33
52
|
}
|
|
34
53
|
|
|
54
|
+
getTargetEpochAndSlotInNextL1Slot(): EpochAndSlot & { nowSeconds: bigint } {
|
|
55
|
+
return this.getEpochAndSlotInNextL1Slot();
|
|
56
|
+
}
|
|
57
|
+
|
|
35
58
|
getProposerIndexEncoding(_epoch: EpochNumber, _slot: SlotNumber, _seed: bigint): `0x${string}` {
|
|
36
59
|
return '0x00';
|
|
37
60
|
}
|
|
@@ -40,18 +63,22 @@ export class MockEpochCache implements EpochCacheInterface {
|
|
|
40
63
|
return 0n;
|
|
41
64
|
}
|
|
42
65
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
nextProposer: EthAddress | undefined;
|
|
46
|
-
currentSlot: SlotNumber;
|
|
47
|
-
nextSlot: SlotNumber;
|
|
48
|
-
}> {
|
|
49
|
-
return Promise.resolve({
|
|
50
|
-
currentProposer: undefined,
|
|
51
|
-
nextProposer: undefined,
|
|
66
|
+
getCurrentAndNextSlot(): { currentSlot: SlotNumber; nextSlot: SlotNumber } {
|
|
67
|
+
return {
|
|
52
68
|
currentSlot: SlotNumber(0),
|
|
53
69
|
nextSlot: SlotNumber(0),
|
|
54
|
-
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
getTargetAndNextSlot(): { targetSlot: SlotNumber; nextSlot: SlotNumber } {
|
|
74
|
+
return {
|
|
75
|
+
targetSlot: SlotNumber(0),
|
|
76
|
+
nextSlot: SlotNumber(0),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
getProposerAttesterAddressInSlot(_slot: SlotNumber): Promise<EthAddress | undefined> {
|
|
81
|
+
return Promise.resolve(undefined);
|
|
55
82
|
}
|
|
56
83
|
|
|
57
84
|
isInCommittee(_slot: SlotTag, _validator: EthAddress): Promise<boolean> {
|
|
@@ -65,4 +92,16 @@ export class MockEpochCache implements EpochCacheInterface {
|
|
|
65
92
|
filterInCommittee(_slot: SlotTag, _validators: EthAddress[]): Promise<EthAddress[]> {
|
|
66
93
|
return Promise.resolve([]);
|
|
67
94
|
}
|
|
95
|
+
|
|
96
|
+
isEscapeHatchOpen(_epoch: EpochNumber): Promise<boolean> {
|
|
97
|
+
return Promise.resolve(false);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
isEscapeHatchOpenAtSlot(_slot: SlotTag): Promise<boolean> {
|
|
101
|
+
return Promise.resolve(false);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
getL1Constants(): L1RollupConstants {
|
|
105
|
+
return EmptyL1RollupConstants;
|
|
106
|
+
}
|
|
68
107
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
|
|
2
2
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
3
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
|
+
import { AvmSimulatorPool } from '@aztec/simulator/server';
|
|
6
|
+
import type { BlockHash, L2Block } from '@aztec/stdlib/block';
|
|
5
7
|
import type {
|
|
6
8
|
MerkleTreeReadOperations,
|
|
7
9
|
MerkleTreeWriteOperations,
|
|
@@ -15,31 +17,39 @@ export class TXESynchronizer implements WorldStateSynchronizer {
|
|
|
15
17
|
// This works when set to 1 as well.
|
|
16
18
|
private blockNumber = BlockNumber.ZERO;
|
|
17
19
|
|
|
20
|
+
/** AVM execution backend (simulator pool + CDB server) shared across all public simulations. */
|
|
21
|
+
public avmSimulator!: AvmSimulatorPool;
|
|
22
|
+
|
|
18
23
|
constructor(public nativeWorldStateService: NativeWorldStateService) {}
|
|
19
24
|
|
|
20
25
|
static async create() {
|
|
21
|
-
const nativeWorldStateService = await NativeWorldStateService.
|
|
26
|
+
const nativeWorldStateService = await NativeWorldStateService.ephemeral();
|
|
27
|
+
|
|
28
|
+
const synchronizer = new this(nativeWorldStateService);
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
synchronizer.avmSimulator = await AvmSimulatorPool.spawn({
|
|
31
|
+
wsdbIpcPath: nativeWorldStateService.getIpcPath(),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
return synchronizer;
|
|
24
35
|
}
|
|
25
36
|
|
|
26
|
-
public async handleL2Block(block:
|
|
37
|
+
public async handleL2Block(block: L2Block, l1ToL2Messages: Fr[] = []) {
|
|
27
38
|
await this.nativeWorldStateService.handleL2BlockAndMessages(
|
|
28
39
|
block,
|
|
29
|
-
|
|
30
|
-
true,
|
|
40
|
+
padArrayEnd<Fr, number>(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP),
|
|
31
41
|
);
|
|
32
42
|
|
|
33
43
|
this.blockNumber = block.header.globalVariables.blockNumber;
|
|
34
44
|
}
|
|
35
45
|
|
|
36
46
|
/**
|
|
37
|
-
* Forces an immediate sync to an optionally provided minimum block number
|
|
47
|
+
* Forces an immediate sync to an optionally provided minimum block number.
|
|
38
48
|
* @param targetBlockNumber - The target block number that we must sync to. Will download unproven blocks if needed to reach it.
|
|
39
|
-
* @param
|
|
49
|
+
* @param blockHash - If provided, verifies the block at targetBlockNumber matches this hash.
|
|
40
50
|
* @returns A promise that resolves with the block number the world state was synced to
|
|
41
51
|
*/
|
|
42
|
-
public syncImmediate(_minBlockNumber?: BlockNumber,
|
|
52
|
+
public syncImmediate(_minBlockNumber?: BlockNumber, _blockHash?: BlockHash): Promise<BlockNumber> {
|
|
43
53
|
return Promise.resolve(this.blockNumber);
|
|
44
54
|
}
|
|
45
55
|
|
|
@@ -58,6 +68,11 @@ export class TXESynchronizer implements WorldStateSynchronizer {
|
|
|
58
68
|
return this.nativeWorldStateService.getSnapshot(BlockNumber(blockNumber));
|
|
59
69
|
}
|
|
60
70
|
|
|
71
|
+
/** Gets a snapshot at the given block number. The TXE has no reorgs, so the fork hash is not verified. */
|
|
72
|
+
public getVerifiedSnapshot(blockNumber: number, _blockHash: BlockHash): Promise<MerkleTreeReadOperations> {
|
|
73
|
+
return Promise.resolve(this.getSnapshot(blockNumber));
|
|
74
|
+
}
|
|
75
|
+
|
|
61
76
|
/** Backups the db to the target path. */
|
|
62
77
|
public backupTo(dstPath: string, compact?: boolean): Promise<Record<Exclude<SnapshotDataKeys, 'archiver'>, string>> {
|
|
63
78
|
return this.nativeWorldStateService.backupTo(dstPath, compact);
|
|
@@ -71,8 +86,8 @@ export class TXESynchronizer implements WorldStateSynchronizer {
|
|
|
71
86
|
throw new Error('TXE Synchronizer does not implement "status"');
|
|
72
87
|
}
|
|
73
88
|
|
|
74
|
-
public stop(): Promise<void> {
|
|
75
|
-
|
|
89
|
+
public async stop(): Promise<void> {
|
|
90
|
+
await this.closeIpc();
|
|
76
91
|
}
|
|
77
92
|
|
|
78
93
|
public stopSync(): Promise<void> {
|
|
@@ -86,4 +101,9 @@ export class TXESynchronizer implements WorldStateSynchronizer {
|
|
|
86
101
|
public clear(): Promise<void> {
|
|
87
102
|
throw new Error('TXE Synchronizer does not implement "clear"');
|
|
88
103
|
}
|
|
104
|
+
|
|
105
|
+
/** Clean up IPC resources. */
|
|
106
|
+
public async closeIpc(): Promise<void> {
|
|
107
|
+
await this.avmSimulator?.[Symbol.asyncDispose]();
|
|
108
|
+
}
|
|
89
109
|
}
|