@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.
Files changed (175) hide show
  1. package/dest/AuthRegistry-QVGDDH5X.js +3 -0
  2. package/dest/AuthRegistry-QVGDDH5X.js.map +7 -0
  3. package/dest/ContractClassRegistry-VWR3F42P.js +3 -0
  4. package/dest/ContractClassRegistry-VWR3F42P.js.map +7 -0
  5. package/dest/ContractInstanceRegistry-FHIWE33X.js +3 -0
  6. package/dest/ContractInstanceRegistry-FHIWE33X.js.map +7 -0
  7. package/dest/FeeJuice-SAOWVGG7.js +3 -0
  8. package/dest/FeeJuice-SAOWVGG7.js.map +7 -0
  9. package/dest/HandshakeRegistry-GY5CPEPS.js +3 -0
  10. package/dest/HandshakeRegistry-GY5CPEPS.js.map +7 -0
  11. package/dest/MultiCallEntrypoint-QG5H33ZZ.js +3 -0
  12. package/dest/MultiCallEntrypoint-QG5H33ZZ.js.map +7 -0
  13. package/dest/SchnorrAccount-NME3E45O.js +3 -0
  14. package/dest/SchnorrAccount-NME3E45O.js.map +7 -0
  15. package/dest/SchnorrInitializerlessAccount-WTGXU6SW.js +3 -0
  16. package/dest/SchnorrInitializerlessAccount-WTGXU6SW.js.map +7 -0
  17. package/dest/bin/check_txe_oracle_version.d.ts +2 -0
  18. package/dest/bin/check_txe_oracle_version.d.ts.map +1 -0
  19. package/dest/bin/check_txe_oracle_version.js +53 -0
  20. package/dest/bin/index.js +3 -30
  21. package/dest/bin/index.js.map +7 -0
  22. package/dest/bin/oracle_test_server.d.ts +3 -0
  23. package/dest/bin/oracle_test_server.d.ts.map +1 -0
  24. package/dest/bin/oracle_test_server.js +41 -0
  25. package/dest/chunk-32UHX7YY.js +3 -0
  26. package/dest/chunk-32UHX7YY.js.map +7 -0
  27. package/dest/chunk-GSUKUCKV.js +260 -0
  28. package/dest/chunk-GSUKUCKV.js.map +7 -0
  29. package/dest/chunk-UP4KKUVA.js +304 -0
  30. package/dest/chunk-UP4KKUVA.js.map +7 -0
  31. package/dest/constants.d.ts +7 -0
  32. package/dest/constants.d.ts.map +1 -0
  33. package/dest/constants.js +10 -0
  34. package/dest/dispatcher_pool.d.ts +67 -0
  35. package/dest/dispatcher_pool.d.ts.map +1 -0
  36. package/dest/dispatcher_pool.js +286 -0
  37. package/dest/index.d.ts +51 -7
  38. package/dest/index.d.ts.map +1 -1
  39. package/dest/index.js +75 -158
  40. package/dest/metafile.json +38759 -0
  41. package/dest/msgpackr_fr_extension.d.ts +2 -0
  42. package/dest/msgpackr_fr_extension.d.ts.map +1 -0
  43. package/dest/msgpackr_fr_extension.js +21 -0
  44. package/dest/oracle/interfaces.d.ts +71 -30
  45. package/dest/oracle/interfaces.d.ts.map +1 -1
  46. package/dest/oracle/tagging_secret_strategy.d.ts +12 -0
  47. package/dest/oracle/tagging_secret_strategy.d.ts.map +1 -0
  48. package/dest/oracle/tagging_secret_strategy.js +12 -0
  49. package/dest/oracle/test-resolver/default_fixtures.d.ts +16 -0
  50. package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
  51. package/dest/oracle/test-resolver/default_fixtures.js +200 -0
  52. package/dest/oracle/test-resolver/index.d.ts +9 -0
  53. package/dest/oracle/test-resolver/index.d.ts.map +1 -0
  54. package/dest/oracle/test-resolver/index.js +32 -0
  55. package/dest/oracle/test-resolver/resolver.d.ts +48 -0
  56. package/dest/oracle/test-resolver/resolver.d.ts.map +1 -0
  57. package/dest/oracle/test-resolver/resolver.js +181 -0
  58. package/dest/oracle/txe_oracle_public_context.d.ts +40 -16
  59. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
  60. package/dest/oracle/txe_oracle_public_context.js +69 -23
  61. package/dest/oracle/txe_oracle_registry.d.ts +172 -0
  62. package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
  63. package/dest/oracle/txe_oracle_registry.js +767 -0
  64. package/dest/oracle/txe_oracle_top_level_context.d.ts +79 -30
  65. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
  66. package/dest/oracle/txe_oracle_top_level_context.js +653 -285
  67. package/dest/oracle/txe_oracle_version.d.ts +17 -0
  68. package/dest/oracle/txe_oracle_version.d.ts.map +1 -0
  69. package/dest/oracle/txe_oracle_version.js +14 -0
  70. package/dest/oracle/txe_private_execution_oracle.d.ts +17 -0
  71. package/dest/oracle/txe_private_execution_oracle.d.ts.map +1 -0
  72. package/dest/oracle/txe_private_execution_oracle.js +15 -0
  73. package/dest/rpc_server.d.ts +14 -0
  74. package/dest/rpc_server.d.ts.map +1 -0
  75. package/dest/rpc_server.js +78 -0
  76. package/dest/rpc_translator.d.ts +115 -216
  77. package/dest/rpc_translator.d.ts.map +1 -1
  78. package/dest/rpc_translator.js +901 -560
  79. package/dest/server.bundle.js +3 -0
  80. package/dest/server.bundle.js.map +7 -0
  81. package/dest/state_machine/archiver.d.ts +23 -58
  82. package/dest/state_machine/archiver.d.ts.map +1 -1
  83. package/dest/state_machine/archiver.js +76 -112
  84. package/dest/state_machine/dummy_p2p_client.d.ts +31 -17
  85. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  86. package/dest/state_machine/dummy_p2p_client.js +63 -25
  87. package/dest/state_machine/global_variable_builder.d.ts +10 -5
  88. package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
  89. package/dest/state_machine/global_variable_builder.js +20 -5
  90. package/dest/state_machine/index.d.ts +14 -8
  91. package/dest/state_machine/index.d.ts.map +1 -1
  92. package/dest/state_machine/index.js +84 -27
  93. package/dest/state_machine/mock_epoch_cache.d.ts +24 -8
  94. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
  95. package/dest/state_machine/mock_epoch_cache.js +43 -9
  96. package/dest/state_machine/synchronizer.d.ts +14 -6
  97. package/dest/state_machine/synchronizer.d.ts.map +1 -1
  98. package/dest/state_machine/synchronizer.js +23 -10
  99. package/dest/txe_session.d.ts +102 -20
  100. package/dest/txe_session.d.ts.map +1 -1
  101. package/dest/txe_session.js +442 -75
  102. package/dest/utils/block_creation.d.ts +20 -6
  103. package/dest/utils/block_creation.d.ts.map +1 -1
  104. package/dest/utils/block_creation.js +40 -6
  105. package/dest/utils/encoding.d.ts +192 -0
  106. package/dest/utils/encoding.d.ts.map +1 -0
  107. package/dest/{util → utils}/encoding.js +8 -3
  108. package/dest/{util → utils}/expected_failure_error.d.ts +1 -1
  109. package/dest/utils/expected_failure_error.d.ts.map +1 -0
  110. package/dest/utils/tx_effect_creation.d.ts +2 -3
  111. package/dest/utils/tx_effect_creation.d.ts.map +1 -1
  112. package/dest/utils/tx_effect_creation.js +3 -7
  113. package/dest/utils/txe_account_store.d.ts +10 -0
  114. package/dest/utils/txe_account_store.d.ts.map +1 -0
  115. package/dest/{util/txe_account_data_provider.js → utils/txe_account_store.js} +1 -1
  116. package/dest/utils/txe_artifact_resolver.d.ts +37 -0
  117. package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
  118. package/dest/utils/txe_artifact_resolver.js +161 -0
  119. package/dest/utils/txe_public_contract_data_source.d.ts +20 -0
  120. package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -0
  121. package/dest/utils/txe_public_contract_data_source.js +51 -0
  122. package/dest/worker.bundle.js +3 -0
  123. package/dest/worker.bundle.js.map +7 -0
  124. package/dest/worker.d.ts +2 -0
  125. package/dest/worker.d.ts.map +1 -0
  126. package/dest/worker.js +92 -0
  127. package/package.json +39 -22
  128. package/src/bin/check_txe_oracle_version.ts +67 -0
  129. package/src/bin/index.ts +11 -2
  130. package/src/bin/oracle_test_server.ts +51 -0
  131. package/src/constants.ts +13 -0
  132. package/src/dispatcher_pool.ts +317 -0
  133. package/src/index.ts +113 -201
  134. package/src/msgpackr_fr_extension.ts +23 -0
  135. package/src/oracle/interfaces.ts +77 -35
  136. package/src/oracle/tagging_secret_strategy.ts +25 -0
  137. package/src/oracle/test-resolver/default_fixtures.ts +271 -0
  138. package/src/oracle/test-resolver/index.ts +44 -0
  139. package/src/oracle/test-resolver/resolver.ts +245 -0
  140. package/src/oracle/txe_oracle_public_context.ts +82 -27
  141. package/src/oracle/txe_oracle_registry.ts +556 -0
  142. package/src/oracle/txe_oracle_top_level_context.ts +555 -189
  143. package/src/oracle/txe_oracle_version.ts +17 -0
  144. package/src/oracle/txe_private_execution_oracle.ts +30 -0
  145. package/src/rpc_server.ts +87 -0
  146. package/src/rpc_translator.ts +1115 -923
  147. package/src/state_machine/archiver.ts +81 -132
  148. package/src/state_machine/dummy_p2p_client.ts +96 -38
  149. package/src/state_machine/global_variable_builder.ts +28 -10
  150. package/src/state_machine/index.ts +118 -44
  151. package/src/state_machine/mock_epoch_cache.ts +53 -14
  152. package/src/state_machine/synchronizer.ts +32 -12
  153. package/src/txe_session.ts +727 -123
  154. package/src/utils/block_creation.ts +50 -16
  155. package/src/{util → utils}/encoding.ts +9 -3
  156. package/src/utils/tx_effect_creation.ts +3 -13
  157. package/src/{util/txe_account_data_provider.ts → utils/txe_account_store.ts} +1 -1
  158. package/src/utils/txe_artifact_resolver.ts +217 -0
  159. package/src/utils/txe_public_contract_data_source.ts +60 -0
  160. package/src/worker.ts +98 -0
  161. package/dest/util/encoding.d.ts +0 -121
  162. package/dest/util/encoding.d.ts.map +0 -1
  163. package/dest/util/expected_failure_error.d.ts.map +0 -1
  164. package/dest/util/txe_account_data_provider.d.ts +0 -10
  165. package/dest/util/txe_account_data_provider.d.ts.map +0 -1
  166. package/dest/util/txe_contract_data_provider.d.ts +0 -12
  167. package/dest/util/txe_contract_data_provider.d.ts.map +0 -1
  168. package/dest/util/txe_contract_data_provider.js +0 -22
  169. package/dest/util/txe_public_contract_data_source.d.ts +0 -21
  170. package/dest/util/txe_public_contract_data_source.d.ts.map +0 -1
  171. package/dest/util/txe_public_contract_data_source.js +0 -67
  172. package/src/util/txe_contract_data_provider.ts +0 -36
  173. package/src/util/txe_public_contract_data_source.ts +0 -86
  174. /package/dest/{util → utils}/expected_failure_error.js +0 -0
  175. /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 type { AztecAsyncKVStore } from '@aztec/kv-store';
5
- import { SyncDataProvider } from '@aztec/pxe/server';
6
- import { type L2Block, PublishedL2Block } from '@aztec/stdlib/block';
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 { getPackageVersion } from '@aztec/stdlib/update-checker';
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 syncDataProvider: SyncDataProvider,
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(db: AztecAsyncKVStore) {
28
- const archiver = new TXEArchiver(db);
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
- VERSION,
48
- CHAIN_ID,
49
- new TXEGlobalVariablesBuilder(),
50
- new MockEpochCache(),
51
- getPackageVersion() ?? '',
52
- new TestCircuitVerifier(),
53
- undefined,
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
- return new this(node, synchronizer, archiver, syncDataProvider);
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.toL2Block()),
63
- this.archiver.addBlocks([
64
- PublishedL2Block.fromFields({
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
- getEpochAndSlotNow(): EpochAndSlot {
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 & { now: bigint } {
45
+ getEpochAndSlotInNextL1Slot(): EpochAndSlot & { nowSeconds: bigint } {
27
46
  return {
28
47
  epoch: EpochNumber.ZERO,
29
48
  slot: SlotNumber(0),
30
49
  ts: 0n,
31
- now: 0n,
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
- getProposerAttesterAddressInCurrentOrNextSlot(): Promise<{
44
- currentProposer: EthAddress | undefined;
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 { Fr } from '@aztec/foundation/fields';
4
- import type { L2BlockNew } from '@aztec/stdlib/block';
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.tmp();
26
+ const nativeWorldStateService = await NativeWorldStateService.ephemeral();
27
+
28
+ const synchronizer = new this(nativeWorldStateService);
22
29
 
23
- return new this(nativeWorldStateService);
30
+ synchronizer.avmSimulator = await AvmSimulatorPool.spawn({
31
+ wsdbIpcPath: nativeWorldStateService.getIpcPath(),
32
+ });
33
+
34
+ return synchronizer;
24
35
  }
25
36
 
26
- public async handleL2Block(block: L2BlockNew) {
37
+ public async handleL2Block(block: L2Block, l1ToL2Messages: Fr[] = []) {
27
38
  await this.nativeWorldStateService.handleL2BlockAndMessages(
28
39
  block,
29
- Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(0).map(Fr.zero),
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 skipThrowIfTargetNotReached - Whether to skip throwing if the target block number is not reached.
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, _skipThrowIfTargetNotReached?: boolean): Promise<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
- throw new Error('TXE Synchronizer does not implement "stop"');
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
  }