@aztec/txe 4.0.0-nightly.20250907 → 4.0.0-nightly.20260108
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/bin/index.d.ts +1 -1
- package/dest/bin/index.js +1 -1
- 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 +8 -4
- package/dest/oracle/interfaces.d.ts +57 -0
- package/dest/oracle/interfaces.d.ts.map +1 -0
- package/dest/oracle/interfaces.js +3 -0
- package/dest/oracle/txe_oracle_public_context.d.ts +12 -12
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +30 -34
- package/dest/oracle/txe_oracle_top_level_context.d.ts +65 -0
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -0
- package/dest/oracle/txe_oracle_top_level_context.js +463 -0
- package/dest/rpc_translator.d.ts +246 -0
- package/dest/rpc_translator.d.ts.map +1 -0
- package/dest/{txe_service/txe_service.js → rpc_translator.js} +201 -124
- package/dest/state_machine/archiver.d.ts +34 -13
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +111 -16
- package/dest/state_machine/dummy_p2p_client.d.ts +5 -2
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +9 -1
- package/dest/state_machine/global_variable_builder.d.ts +6 -17
- package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
- package/dest/state_machine/global_variable_builder.js +16 -23
- package/dest/state_machine/index.d.ts +5 -5
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +17 -21
- package/dest/state_machine/mock_epoch_cache.d.ts +6 -5
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +8 -7
- package/dest/state_machine/synchronizer.d.ts +5 -4
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/state_machine/synchronizer.js +5 -4
- package/dest/txe_session.d.ts +42 -46
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +241 -93
- package/dest/util/encoding.d.ts +623 -24
- package/dest/util/encoding.d.ts.map +1 -1
- package/dest/util/encoding.js +1 -1
- package/dest/util/expected_failure_error.d.ts +1 -1
- package/dest/util/expected_failure_error.d.ts.map +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} +4 -4
- package/dest/util/txe_public_contract_data_source.d.ts +8 -6
- package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
- package/dest/util/txe_public_contract_data_source.js +14 -12
- package/dest/utils/block_creation.d.ts +28 -0
- package/dest/utils/block_creation.d.ts.map +1 -0
- package/dest/utils/block_creation.js +45 -0
- package/dest/utils/tx_effect_creation.d.ts +6 -0
- package/dest/utils/tx_effect_creation.d.ts.map +1 -0
- package/dest/utils/tx_effect_creation.js +16 -0
- package/package.json +18 -17
- package/src/bin/index.ts +1 -1
- package/src/constants.ts +3 -0
- package/src/index.ts +20 -20
- package/src/oracle/interfaces.ts +86 -0
- package/src/oracle/txe_oracle_public_context.ts +37 -75
- package/src/oracle/txe_oracle_top_level_context.ts +716 -0
- package/src/{txe_service/txe_service.ts → rpc_translator.ts} +261 -125
- package/src/state_machine/archiver.ts +147 -29
- package/src/state_machine/dummy_p2p_client.ts +13 -2
- package/src/state_machine/global_variable_builder.ts +25 -42
- package/src/state_machine/index.ts +24 -21
- package/src/state_machine/mock_epoch_cache.ts +12 -11
- package/src/state_machine/synchronizer.ts +8 -7
- package/src/txe_session.ts +416 -115
- 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} +5 -4
- package/src/util/txe_public_contract_data_source.ts +16 -13
- package/src/utils/block_creation.ts +94 -0
- package/src/utils/tx_effect_creation.ts +38 -0
- package/dest/oracle/txe_oracle.d.ts +0 -124
- package/dest/oracle/txe_oracle.d.ts.map +0 -1
- package/dest/oracle/txe_oracle.js +0 -770
- package/dest/oracle/txe_typed_oracle.d.ts +0 -42
- package/dest/oracle/txe_typed_oracle.d.ts.map +0 -1
- package/dest/oracle/txe_typed_oracle.js +0 -83
- package/dest/txe_constants.d.ts +0 -2
- package/dest/txe_constants.d.ts.map +0 -1
- package/dest/txe_constants.js +0 -7
- package/dest/txe_service/txe_service.d.ts +0 -231
- package/dest/txe_service/txe_service.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 -11
- package/dest/util/txe_contract_data_provider.d.ts.map +0 -1
- package/src/oracle/txe_oracle.ts +0 -1287
- package/src/oracle/txe_typed_oracle.ts +0 -142
- package/src/txe_constants.ts +0 -9
|
@@ -1,30 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
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
|
|
12
|
-
import {
|
|
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 {
|
|
23
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
42
|
+
avmOpcodeAddress(): Promise<AztecAddress> {
|
|
50
43
|
return Promise.resolve(this.contractAddress);
|
|
51
44
|
}
|
|
52
45
|
|
|
53
|
-
|
|
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
|
-
|
|
54
|
+
avmOpcodeTimestamp(): Promise<bigint> {
|
|
58
55
|
return Promise.resolve(this.globalVariables.timestamp);
|
|
59
56
|
}
|
|
60
57
|
|
|
61
|
-
|
|
58
|
+
avmOpcodeIsStaticCall(): Promise<boolean> {
|
|
62
59
|
return Promise.resolve(false);
|
|
63
60
|
}
|
|
64
61
|
|
|
65
|
-
|
|
62
|
+
avmOpcodeChainId(): Promise<Fr> {
|
|
66
63
|
return Promise.resolve(this.globalVariables.chainId);
|
|
67
64
|
}
|
|
68
65
|
|
|
69
|
-
|
|
66
|
+
avmOpcodeVersion(): Promise<Fr> {
|
|
70
67
|
return Promise.resolve(this.globalVariables.version);
|
|
71
68
|
}
|
|
72
69
|
|
|
73
|
-
|
|
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
|
-
|
|
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
|
-
|
|
81
|
+
async avmOpcodeNullifierExists(innerNullifier: Fr, targetAddress: AztecAddress): Promise<boolean> {
|
|
85
82
|
const nullifier = await siloNullifier(targetAddress, innerNullifier!);
|
|
86
83
|
|
|
87
|
-
const treeIndex = (
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
104
|
+
async avmOpcodeStorageRead(slot: Fr): Promise<Fr> {
|
|
106
105
|
const leafSlot = await computePublicDataTreeLeafSlot(this.contractAddress, slot);
|
|
107
106
|
|
|
108
|
-
const lowLeafResult = await this.
|
|
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.
|
|
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
|
|
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.
|
|
133
|
+
await insertTxEffectIntoWorldTrees(txEffect, this.forkedWorldTrees);
|
|
135
134
|
|
|
136
|
-
const block =
|
|
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.
|
|
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
|
}
|