@aztec/txe 4.0.0-nightly.20250907 → 4.0.0-nightly.20260107

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 (100) hide show
  1. package/dest/bin/index.d.ts +1 -1
  2. package/dest/bin/index.js +1 -1
  3. package/dest/constants.d.ts +3 -0
  4. package/dest/constants.d.ts.map +1 -0
  5. package/dest/constants.js +2 -0
  6. package/dest/index.d.ts +1 -1
  7. package/dest/index.d.ts.map +1 -1
  8. package/dest/index.js +8 -4
  9. package/dest/oracle/interfaces.d.ts +57 -0
  10. package/dest/oracle/interfaces.d.ts.map +1 -0
  11. package/dest/oracle/interfaces.js +3 -0
  12. package/dest/oracle/txe_oracle_public_context.d.ts +12 -12
  13. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
  14. package/dest/oracle/txe_oracle_public_context.js +30 -34
  15. package/dest/oracle/txe_oracle_top_level_context.d.ts +65 -0
  16. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -0
  17. package/dest/oracle/txe_oracle_top_level_context.js +463 -0
  18. package/dest/rpc_translator.d.ts +246 -0
  19. package/dest/rpc_translator.d.ts.map +1 -0
  20. package/dest/{txe_service/txe_service.js → rpc_translator.js} +201 -124
  21. package/dest/state_machine/archiver.d.ts +34 -13
  22. package/dest/state_machine/archiver.d.ts.map +1 -1
  23. package/dest/state_machine/archiver.js +111 -16
  24. package/dest/state_machine/dummy_p2p_client.d.ts +5 -2
  25. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  26. package/dest/state_machine/dummy_p2p_client.js +9 -1
  27. package/dest/state_machine/global_variable_builder.d.ts +5 -16
  28. package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
  29. package/dest/state_machine/global_variable_builder.js +15 -22
  30. package/dest/state_machine/index.d.ts +5 -5
  31. package/dest/state_machine/index.d.ts.map +1 -1
  32. package/dest/state_machine/index.js +17 -21
  33. package/dest/state_machine/mock_epoch_cache.d.ts +6 -5
  34. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
  35. package/dest/state_machine/mock_epoch_cache.js +8 -7
  36. package/dest/state_machine/synchronizer.d.ts +5 -4
  37. package/dest/state_machine/synchronizer.d.ts.map +1 -1
  38. package/dest/state_machine/synchronizer.js +5 -4
  39. package/dest/txe_session.d.ts +42 -46
  40. package/dest/txe_session.d.ts.map +1 -1
  41. package/dest/txe_session.js +241 -93
  42. package/dest/util/encoding.d.ts +623 -24
  43. package/dest/util/encoding.d.ts.map +1 -1
  44. package/dest/util/encoding.js +1 -1
  45. package/dest/util/expected_failure_error.d.ts +1 -1
  46. package/dest/util/expected_failure_error.d.ts.map +1 -1
  47. package/dest/util/txe_account_store.d.ts +10 -0
  48. package/dest/util/txe_account_store.d.ts.map +1 -0
  49. package/dest/util/{txe_account_data_provider.js → txe_account_store.js} +1 -1
  50. package/dest/util/txe_contract_store.d.ts +12 -0
  51. package/dest/util/txe_contract_store.d.ts.map +1 -0
  52. package/dest/util/{txe_contract_data_provider.js → txe_contract_store.js} +4 -4
  53. package/dest/util/txe_public_contract_data_source.d.ts +8 -6
  54. package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
  55. package/dest/util/txe_public_contract_data_source.js +14 -12
  56. package/dest/utils/block_creation.d.ts +28 -0
  57. package/dest/utils/block_creation.d.ts.map +1 -0
  58. package/dest/utils/block_creation.js +45 -0
  59. package/dest/utils/tx_effect_creation.d.ts +6 -0
  60. package/dest/utils/tx_effect_creation.d.ts.map +1 -0
  61. package/dest/utils/tx_effect_creation.js +16 -0
  62. package/package.json +18 -17
  63. package/src/bin/index.ts +1 -1
  64. package/src/constants.ts +3 -0
  65. package/src/index.ts +20 -20
  66. package/src/oracle/interfaces.ts +86 -0
  67. package/src/oracle/txe_oracle_public_context.ts +37 -75
  68. package/src/oracle/txe_oracle_top_level_context.ts +716 -0
  69. package/src/{txe_service/txe_service.ts → rpc_translator.ts} +261 -125
  70. package/src/state_machine/archiver.ts +147 -29
  71. package/src/state_machine/dummy_p2p_client.ts +13 -2
  72. package/src/state_machine/global_variable_builder.ts +24 -41
  73. package/src/state_machine/index.ts +24 -21
  74. package/src/state_machine/mock_epoch_cache.ts +12 -11
  75. package/src/state_machine/synchronizer.ts +8 -7
  76. package/src/txe_session.ts +416 -115
  77. package/src/util/encoding.ts +1 -1
  78. package/src/util/{txe_account_data_provider.ts → txe_account_store.ts} +1 -1
  79. package/src/util/{txe_contract_data_provider.ts → txe_contract_store.ts} +5 -4
  80. package/src/util/txe_public_contract_data_source.ts +16 -13
  81. package/src/utils/block_creation.ts +94 -0
  82. package/src/utils/tx_effect_creation.ts +38 -0
  83. package/dest/oracle/txe_oracle.d.ts +0 -124
  84. package/dest/oracle/txe_oracle.d.ts.map +0 -1
  85. package/dest/oracle/txe_oracle.js +0 -770
  86. package/dest/oracle/txe_typed_oracle.d.ts +0 -42
  87. package/dest/oracle/txe_typed_oracle.d.ts.map +0 -1
  88. package/dest/oracle/txe_typed_oracle.js +0 -83
  89. package/dest/txe_constants.d.ts +0 -2
  90. package/dest/txe_constants.d.ts.map +0 -1
  91. package/dest/txe_constants.js +0 -7
  92. package/dest/txe_service/txe_service.d.ts +0 -231
  93. package/dest/txe_service/txe_service.d.ts.map +0 -1
  94. package/dest/util/txe_account_data_provider.d.ts +0 -10
  95. package/dest/util/txe_account_data_provider.d.ts.map +0 -1
  96. package/dest/util/txe_contract_data_provider.d.ts +0 -11
  97. package/dest/util/txe_contract_data_provider.d.ts.map +0 -1
  98. package/src/oracle/txe_oracle.ts +0 -1287
  99. package/src/oracle/txe_typed_oracle.ts +0 -142
  100. package/src/txe_constants.ts +0 -9
@@ -1,30 +1,24 @@
1
- import {
2
- MAX_NOTE_HASHES_PER_TX,
3
- MAX_NULLIFIERS_PER_TX,
4
- NULLIFIER_SUBTREE_HEIGHT,
5
- NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
6
- } from '@aztec/constants';
7
- import { padArrayEnd } from '@aztec/foundation/collection';
8
- import { Fr } from '@aztec/foundation/fields';
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
9
3
  import { type Logger, createLogger } from '@aztec/foundation/log';
10
4
  import { PublicDataWrite } from '@aztec/stdlib/avm';
11
- import type { AztecAddress } from '@aztec/stdlib/aztec-address';
12
- import { Body, L2Block } from '@aztec/stdlib/block';
5
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
6
+ import type { L2Block } from '@aztec/stdlib/block';
13
7
  import { computePublicDataTreeLeafSlot, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
14
- import { makeAppendOnlyTreeSnapshot, makeContentCommitment } from '@aztec/stdlib/testing';
15
8
  import {
16
- AppendOnlyTreeSnapshot,
17
9
  MerkleTreeId,
18
10
  type MerkleTreeWriteOperations,
19
11
  PublicDataTreeLeaf,
20
12
  PublicDataTreeLeafPreimage,
21
13
  } from '@aztec/stdlib/trees';
22
- import { BlockHeader, GlobalVariables, TxEffect, TxHash } from '@aztec/stdlib/tx';
23
- import type { UInt32 } from '@aztec/stdlib/types';
14
+ import { GlobalVariables, TxEffect, TxHash } from '@aztec/stdlib/tx';
15
+
16
+ import { insertTxEffectIntoWorldTrees, makeTXEBlock } from '../utils/block_creation.js';
17
+ import type { IAvmExecutionOracle } from './interfaces.js';
24
18
 
25
- import { TXETypedOracle } from './txe_typed_oracle.js';
19
+ export class TXEOraclePublicContext implements IAvmExecutionOracle {
20
+ isAvm = true as const;
26
21
 
27
- export class TXEOraclePublicContext extends TXETypedOracle {
28
22
  private logger: Logger;
29
23
  private transientUniqueNoteHashes: Fr[] = [];
30
24
  private transientSiloedNullifiers: Fr[] = [];
@@ -32,80 +26,85 @@ export class TXEOraclePublicContext extends TXETypedOracle {
32
26
 
33
27
  constructor(
34
28
  private contractAddress: AztecAddress,
35
- private worldTrees: MerkleTreeWriteOperations,
29
+ private forkedWorldTrees: MerkleTreeWriteOperations,
36
30
  private txRequestHash: Fr,
37
31
  private globalVariables: GlobalVariables,
38
32
  ) {
39
- super();
40
33
  this.logger = createLogger('txe:public_context');
41
34
 
42
- this.logger.debug('Entering PublicContext', {
35
+ this.logger.debug('Entering Public Context', {
43
36
  contractAddress,
44
37
  blockNumber: globalVariables.blockNumber,
45
38
  timestamp: globalVariables.timestamp,
46
39
  });
47
40
  }
48
41
 
49
- override avmOpcodeAddress(): Promise<AztecAddress> {
42
+ avmOpcodeAddress(): Promise<AztecAddress> {
50
43
  return Promise.resolve(this.contractAddress);
51
44
  }
52
45
 
53
- override avmOpcodeBlockNumber(): Promise<UInt32> {
46
+ avmOpcodeSender(): Promise<AztecAddress> {
47
+ return Promise.resolve(AztecAddress.ZERO); // todo: change?
48
+ }
49
+
50
+ avmOpcodeBlockNumber(): Promise<BlockNumber> {
54
51
  return Promise.resolve(this.globalVariables.blockNumber);
55
52
  }
56
53
 
57
- override avmOpcodeTimestamp(): Promise<bigint> {
54
+ avmOpcodeTimestamp(): Promise<bigint> {
58
55
  return Promise.resolve(this.globalVariables.timestamp);
59
56
  }
60
57
 
61
- override avmOpcodeIsStaticCall(): Promise<boolean> {
58
+ avmOpcodeIsStaticCall(): Promise<boolean> {
62
59
  return Promise.resolve(false);
63
60
  }
64
61
 
65
- override avmOpcodeChainId(): Promise<Fr> {
62
+ avmOpcodeChainId(): Promise<Fr> {
66
63
  return Promise.resolve(this.globalVariables.chainId);
67
64
  }
68
65
 
69
- override avmOpcodeVersion(): Promise<Fr> {
66
+ avmOpcodeVersion(): Promise<Fr> {
70
67
  return Promise.resolve(this.globalVariables.version);
71
68
  }
72
69
 
73
- override async avmOpcodeEmitNullifier(nullifier: Fr) {
70
+ async avmOpcodeEmitNullifier(nullifier: Fr) {
74
71
  const siloedNullifier = await siloNullifier(this.contractAddress, nullifier);
75
72
  this.transientSiloedNullifiers.push(siloedNullifier);
76
73
  }
77
74
 
78
- override async avmOpcodeEmitNoteHash(noteHash: Fr) {
75
+ async avmOpcodeEmitNoteHash(noteHash: Fr) {
79
76
  const siloedNoteHash = await siloNoteHash(this.contractAddress, noteHash);
80
77
  // TODO: make the note hash unique - they are only siloed right now
81
78
  this.transientUniqueNoteHashes.push(siloedNoteHash);
82
79
  }
83
80
 
84
- override async avmOpcodeNullifierExists(innerNullifier: Fr, targetAddress: AztecAddress): Promise<boolean> {
81
+ async avmOpcodeNullifierExists(innerNullifier: Fr, targetAddress: AztecAddress): Promise<boolean> {
85
82
  const nullifier = await siloNullifier(targetAddress, innerNullifier!);
86
83
 
87
- const treeIndex = (await this.worldTrees.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [nullifier.toBuffer()]))[0];
84
+ const treeIndex = (
85
+ await this.forkedWorldTrees.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [nullifier.toBuffer()])
86
+ )[0];
88
87
  const transientIndex = this.transientSiloedNullifiers.find(n => n.equals(nullifier));
89
88
 
90
89
  return treeIndex !== undefined || transientIndex !== undefined;
91
90
  }
92
91
 
93
- override async avmOpcodeStorageWrite(slot: Fr, value: Fr) {
92
+ async avmOpcodeStorageWrite(slot: Fr, value: Fr) {
94
93
  this.logger.debug('AVM storage write', { slot, value });
95
94
 
96
95
  const dataWrite = new PublicDataWrite(await computePublicDataTreeLeafSlot(this.contractAddress, slot), value);
97
96
 
98
97
  this.publicDataWrites.push(dataWrite);
99
98
 
100
- await this.worldTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [
99
+ await this.forkedWorldTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [
101
100
  new PublicDataTreeLeaf(dataWrite.leafSlot, dataWrite.value).toBuffer(),
102
101
  ]);
103
102
  }
104
103
 
105
- override async avmOpcodeStorageRead(slot: Fr): Promise<Fr> {
104
+ async avmOpcodeStorageRead(slot: Fr): Promise<Fr> {
106
105
  const leafSlot = await computePublicDataTreeLeafSlot(this.contractAddress, slot);
107
106
 
108
- const lowLeafResult = await this.worldTrees.getPreviousValueIndex(
107
+ const lowLeafResult = await this.forkedWorldTrees.getPreviousValueIndex(
109
108
  MerkleTreeId.PUBLIC_DATA_TREE,
110
109
  leafSlot.toBigInt(),
111
110
  );
@@ -114,7 +113,7 @@ export class TXEOraclePublicContext extends TXETypedOracle {
114
113
  !lowLeafResult || !lowLeafResult.alreadyPresent
115
114
  ? Fr.ZERO
116
115
  : (
117
- (await this.worldTrees.getLeafPreimage(
116
+ (await this.forkedWorldTrees.getLeafPreimage(
118
117
  MerkleTreeId.PUBLIC_DATA_TREE,
119
118
  lowLeafResult.index,
120
119
  )) as PublicDataTreeLeafPreimage
@@ -126,20 +125,16 @@ export class TXEOraclePublicContext extends TXETypedOracle {
126
125
  }
127
126
 
128
127
  async close(): Promise<L2Block> {
129
- this.logger.debug('Exiting PublicContext, building block with collected side effects', {
128
+ this.logger.debug('Exiting Public Context, building block with collected side effects', {
130
129
  blockNumber: this.globalVariables.blockNumber,
131
130
  });
132
131
 
133
132
  const txEffect = this.makeTxEffect();
134
- await this.insertSideEffectIntoWorldTrees(txEffect);
133
+ await insertTxEffectIntoWorldTrees(txEffect, this.forkedWorldTrees);
135
134
 
136
- const block = new L2Block(
137
- makeAppendOnlyTreeSnapshot(this.globalVariables.blockNumber),
138
- await this.makeBlockHeader(),
139
- new Body([txEffect]),
140
- );
135
+ const block = await makeTXEBlock(this.forkedWorldTrees, this.globalVariables, [txEffect]);
141
136
 
142
- await this.worldTrees.close();
137
+ await this.forkedWorldTrees.close();
143
138
 
144
139
  this.logger.debug('Exited PublicContext with built block', {
145
140
  blockNumber: block.number,
@@ -162,37 +157,4 @@ export class TXEOraclePublicContext extends TXETypedOracle {
162
157
 
163
158
  return txEffect;
164
159
  }
165
-
166
- private async insertSideEffectIntoWorldTrees(txEffect: TxEffect) {
167
- const l1ToL2Messages = Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(0).map(Fr.zero);
168
-
169
- await this.worldTrees.appendLeaves(
170
- MerkleTreeId.NOTE_HASH_TREE,
171
- padArrayEnd(txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
172
- );
173
-
174
- await this.worldTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2Messages);
175
-
176
- // We do not need to add public data writes because we apply them as we go.
177
-
178
- await this.worldTrees.batchInsert(
179
- MerkleTreeId.NULLIFIER_TREE,
180
- padArrayEnd(txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX).map(nullifier => nullifier.toBuffer()),
181
- NULLIFIER_SUBTREE_HEIGHT,
182
- );
183
- }
184
-
185
- private async makeBlockHeader(): Promise<BlockHeader> {
186
- const stateReference = await this.worldTrees.getStateReference();
187
- const archiveInfo = await this.worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);
188
-
189
- return new BlockHeader(
190
- new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root), Number(archiveInfo.size)),
191
- makeContentCommitment(),
192
- stateReference,
193
- this.globalVariables,
194
- Fr.ZERO,
195
- Fr.ZERO,
196
- );
197
- }
198
160
  }