@aztec-labs/txe 6.0.0-nightly.20260829
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-D4XJULH3.js +3 -0
- package/dest/AuthRegistry-D4XJULH3.js.map +7 -0
- package/dest/ContractClassRegistry-Q76MXQZD.js +3 -0
- package/dest/ContractClassRegistry-Q76MXQZD.js.map +7 -0
- package/dest/ContractInstanceRegistry-CTRARU77.js +3 -0
- package/dest/ContractInstanceRegistry-CTRARU77.js.map +7 -0
- package/dest/FeeJuice-YLTJXWYJ.js +3 -0
- package/dest/FeeJuice-YLTJXWYJ.js.map +7 -0
- package/dest/HandshakeRegistry-BRPEG7GL.js +3 -0
- package/dest/HandshakeRegistry-BRPEG7GL.js.map +7 -0
- package/dest/MultiCallEntrypoint-CJHMYQT5.js +3 -0
- package/dest/MultiCallEntrypoint-CJHMYQT5.js.map +7 -0
- package/dest/SchnorrAccount-OB4N4QIM.js +3 -0
- package/dest/SchnorrAccount-OB4N4QIM.js.map +7 -0
- package/dest/SchnorrInitializerlessAccount-TWGKRUSY.js +3 -0
- package/dest/SchnorrInitializerlessAccount-TWGKRUSY.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 +22 -0
- package/dest/bin/index.d.ts +3 -0
- package/dest/bin/index.d.ts.map +1 -0
- package/dest/bin/index.js +4 -0
- 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-F4QVFWNM.js +258 -0
- package/dest/chunk-F4QVFWNM.js.map +7 -0
- package/dest/chunk-LILEKW2X.js +304 -0
- package/dest/chunk-LILEKW2X.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 +288 -0
- package/dest/index.d.ts +52 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +102 -0
- package/dest/metafile.json +38805 -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 +90 -0
- package/dest/oracle/interfaces.d.ts.map +1 -0
- package/dest/oracle/interfaces.js +3 -0
- package/dest/oracle/noir-structs/gas_settings_data.d.ts +14 -0
- package/dest/oracle/noir-structs/gas_settings_data.d.ts.map +1 -0
- package/dest/oracle/noir-structs/gas_settings_data.js +1 -0
- package/dest/oracle/noir-structs/tx_effects_data.d.ts +11 -0
- package/dest/oracle/noir-structs/tx_effects_data.d.ts.map +1 -0
- package/dest/oracle/noir-structs/tx_effects_data.js +1 -0
- 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 +207 -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 +58 -0
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -0
- package/dest/oracle/txe_oracle_public_context.js +170 -0
- package/dest/oracle/txe_oracle_registry.d.ts +164 -0
- package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
- package/dest/oracle/txe_oracle_registry.js +753 -0
- package/dest/oracle/txe_oracle_top_level_context.d.ts +128 -0
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -0
- package/dest/oracle/txe_oracle_top_level_context.js +815 -0
- 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 +140 -0
- package/dest/rpc_translator.d.ts.map +1 -0
- package/dest/rpc_translator.js +976 -0
- package/dest/server.bundle.js +3 -0
- package/dest/server.bundle.js.map +7 -0
- package/dest/state_machine/archiver.d.ts +32 -0
- package/dest/state_machine/archiver.d.ts.map +1 -0
- package/dest/state_machine/archiver.js +95 -0
- package/dest/state_machine/dummy_p2p_client.d.ts +69 -0
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -0
- package/dest/state_machine/dummy_p2p_client.js +180 -0
- package/dest/state_machine/global_variable_builder.d.ts +15 -0
- package/dest/state_machine/global_variable_builder.d.ts.map +1 -0
- package/dest/state_machine/global_variable_builder.js +25 -0
- package/dest/state_machine/index.d.ts +22 -0
- package/dest/state_machine/index.d.ts.map +1 -0
- package/dest/state_machine/index.js +110 -0
- package/dest/state_machine/mock_epoch_cache.d.ts +43 -0
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -0
- package/dest/state_machine/mock_epoch_cache.js +88 -0
- package/dest/state_machine/synchronizer.d.ts +41 -0
- package/dest/state_machine/synchronizer.d.ts.map +1 -0
- package/dest/state_machine/synchronizer.js +70 -0
- package/dest/txe_session.d.ts +179 -0
- package/dest/txe_session.d.ts.map +1 -0
- package/dest/txe_session.js +697 -0
- 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 +59 -0
- package/dest/utils/encoding.d.ts +194 -0
- package/dest/utils/encoding.d.ts.map +1 -0
- package/dest/utils/encoding.js +136 -0
- package/dest/utils/expected_failure_error.d.ts +4 -0
- package/dest/utils/expected_failure_error.d.ts.map +1 -0
- package/dest/utils/expected_failure_error.js +5 -0
- package/dest/utils/tx_effect_creation.d.ts +5 -0
- package/dest/utils/tx_effect_creation.d.ts.map +1 -0
- package/dest/utils/tx_effect_creation.js +12 -0
- package/dest/utils/txe_account_store.d.ts +10 -0
- package/dest/utils/txe_account_store.d.ts.map +1 -0
- package/dest/utils/txe_account_store.js +17 -0
- package/dest/utils/txe_artifact_resolver.d.ts +36 -0
- package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
- package/dest/utils/txe_artifact_resolver.js +160 -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 +115 -0
- package/src/bin/check_txe_oracle_version.ts +31 -0
- package/src/bin/index.ts +49 -0
- package/src/bin/oracle_test_server.ts +51 -0
- package/src/constants.ts +13 -0
- package/src/dispatcher_pool.ts +319 -0
- package/src/index.ts +152 -0
- package/src/msgpackr_fr_extension.ts +22 -0
- package/src/oracle/interfaces.ts +125 -0
- package/src/oracle/noir-structs/gas_settings_data.ts +16 -0
- package/src/oracle/noir-structs/tx_effects_data.ts +11 -0
- package/src/oracle/tagging_secret_strategy.ts +25 -0
- package/src/oracle/test-resolver/default_fixtures.ts +278 -0
- package/src/oracle/test-resolver/index.ts +43 -0
- package/src/oracle/test-resolver/resolver.ts +245 -0
- package/src/oracle/txe_oracle_public_context.ts +220 -0
- package/src/oracle/txe_oracle_registry.ts +501 -0
- package/src/oracle/txe_oracle_top_level_context.ts +1086 -0
- package/src/oracle/txe_oracle_version.ts +17 -0
- package/src/oracle/txe_private_execution_oracle.ts +30 -0
- package/src/rpc_server.ts +86 -0
- package/src/rpc_translator.ts +1229 -0
- package/src/state_machine/archiver.ts +118 -0
- package/src/state_machine/dummy_p2p_client.ts +264 -0
- package/src/state_machine/global_variable_builder.ts +39 -0
- package/src/state_machine/index.ts +152 -0
- package/src/state_machine/mock_epoch_cache.ts +111 -0
- package/src/state_machine/synchronizer.ts +105 -0
- package/src/txe_session.ts +1107 -0
- package/src/utils/block_creation.ts +91 -0
- package/src/utils/encoding.ts +171 -0
- package/src/utils/expected_failure_error.ts +5 -0
- package/src/utils/tx_effect_creation.ts +28 -0
- package/src/utils/txe_account_store.ts +23 -0
- 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
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec-labs/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
3
|
+
import { type Logger, createLogger } from '@aztec-labs/foundation/log';
|
|
4
|
+
import type { ContractStore } from '@aztec-labs/pxe/server';
|
|
5
|
+
import { PublicDataWrite } from '@aztec-labs/stdlib/avm';
|
|
6
|
+
import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
|
|
7
|
+
import type { L2Block } from '@aztec-labs/stdlib/block';
|
|
8
|
+
import type { ContractInstancePreimageWithAddress } from '@aztec-labs/stdlib/contract';
|
|
9
|
+
import { computePublicDataTreeLeafSlot, siloNoteHash, siloNullifier } from '@aztec-labs/stdlib/hash';
|
|
10
|
+
import {
|
|
11
|
+
MerkleTreeId,
|
|
12
|
+
type MerkleTreeWriteOperations,
|
|
13
|
+
PublicDataTreeLeaf,
|
|
14
|
+
PublicDataTreeLeafPreimage,
|
|
15
|
+
} from '@aztec-labs/stdlib/trees';
|
|
16
|
+
import { GlobalVariables, TxEffect, TxHash } from '@aztec-labs/stdlib/tx';
|
|
17
|
+
|
|
18
|
+
import { insertTxEffectIntoWorldTrees, makeTXEBlock } from '../utils/block_creation.js';
|
|
19
|
+
import type { IAvmExecutionOracle } from './interfaces.js';
|
|
20
|
+
|
|
21
|
+
export class TXEOraclePublicContext implements IAvmExecutionOracle {
|
|
22
|
+
isAvm = true as const;
|
|
23
|
+
|
|
24
|
+
private logger: Logger;
|
|
25
|
+
private transientUniqueNoteHashes: Fr[] = [];
|
|
26
|
+
private transientSiloedNullifiers: Fr[] = [];
|
|
27
|
+
private publicDataWrites: PublicDataWrite[] = [];
|
|
28
|
+
|
|
29
|
+
constructor(
|
|
30
|
+
private contractAddress: AztecAddress,
|
|
31
|
+
private forkedWorldTrees: MerkleTreeWriteOperations,
|
|
32
|
+
private txRequestHash: Fr,
|
|
33
|
+
private globalVariables: GlobalVariables,
|
|
34
|
+
private contractStore: ContractStore,
|
|
35
|
+
) {
|
|
36
|
+
this.logger = createLogger('txe:public_context');
|
|
37
|
+
|
|
38
|
+
this.logger.debug('Entering Public Context', {
|
|
39
|
+
contractAddress,
|
|
40
|
+
blockNumber: globalVariables.blockNumber,
|
|
41
|
+
timestamp: globalVariables.timestamp,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
address(): Promise<AztecAddress> {
|
|
46
|
+
return Promise.resolve(this.contractAddress);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
sender(): Promise<AztecAddress> {
|
|
50
|
+
return Promise.resolve(AztecAddress.ZERO); // todo: change?
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
blockNumber(): Promise<BlockNumber> {
|
|
54
|
+
return Promise.resolve(this.globalVariables.blockNumber);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
timestamp(): Promise<bigint> {
|
|
58
|
+
return Promise.resolve(this.globalVariables.timestamp);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
isStaticCall(): Promise<boolean> {
|
|
62
|
+
return Promise.resolve(false);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
chainId(): Promise<Fr> {
|
|
66
|
+
return Promise.resolve(this.globalVariables.chainId);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
version(): Promise<Fr> {
|
|
70
|
+
return Promise.resolve(this.globalVariables.version);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async emitNullifier(nullifier: Fr) {
|
|
74
|
+
const siloedNullifier = await siloNullifier(this.contractAddress, nullifier);
|
|
75
|
+
this.transientSiloedNullifiers.push(siloedNullifier);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async emitNoteHash(noteHash: Fr) {
|
|
79
|
+
const siloedNoteHash = await siloNoteHash(this.contractAddress, noteHash);
|
|
80
|
+
// TODO: make the note hash unique - they are only siloed right now
|
|
81
|
+
this.transientUniqueNoteHashes.push(siloedNoteHash);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async nullifierExists(siloedNullifier: Fr): Promise<boolean> {
|
|
85
|
+
const treeIndex = (
|
|
86
|
+
await this.forkedWorldTrees.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [siloedNullifier.toBuffer()])
|
|
87
|
+
)[0];
|
|
88
|
+
const transientIndex = this.transientSiloedNullifiers.find(n => n.equals(siloedNullifier));
|
|
89
|
+
|
|
90
|
+
return treeIndex !== undefined || transientIndex !== undefined;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async storageWrite(slot: Fr, value: Fr) {
|
|
94
|
+
this.logger.debug('AVM storage write', { slot, value });
|
|
95
|
+
|
|
96
|
+
const dataWrite = new PublicDataWrite(await computePublicDataTreeLeafSlot(this.contractAddress, slot), value);
|
|
97
|
+
|
|
98
|
+
this.publicDataWrites.push(dataWrite);
|
|
99
|
+
|
|
100
|
+
await this.forkedWorldTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [
|
|
101
|
+
new PublicDataTreeLeaf(dataWrite.leafSlot, dataWrite.value).toBuffer(),
|
|
102
|
+
]);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
async storageRead(slot: Fr, contractAddress: AztecAddress): Promise<Fr> {
|
|
106
|
+
const leafSlot = await computePublicDataTreeLeafSlot(contractAddress, slot);
|
|
107
|
+
|
|
108
|
+
const lowLeafResult = await this.forkedWorldTrees.getPreviousValueIndex(
|
|
109
|
+
MerkleTreeId.PUBLIC_DATA_TREE,
|
|
110
|
+
leafSlot.toBigInt(),
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
const value =
|
|
114
|
+
!lowLeafResult || !lowLeafResult.alreadyPresent
|
|
115
|
+
? Fr.ZERO
|
|
116
|
+
: (
|
|
117
|
+
(await this.forkedWorldTrees.getLeafPreimage(
|
|
118
|
+
MerkleTreeId.PUBLIC_DATA_TREE,
|
|
119
|
+
lowLeafResult.index,
|
|
120
|
+
)) as PublicDataTreeLeafPreimage
|
|
121
|
+
).leaf.value;
|
|
122
|
+
|
|
123
|
+
this.logger.debug('AVM storage read', { slot, contractAddress, value });
|
|
124
|
+
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
getContractInstanceDeployer(address: AztecAddress): Promise<{ member: Fr; exists: boolean }[]> {
|
|
129
|
+
return this.getContractInstanceMember(address, i => i.deployer.toField());
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
getContractInstanceClassId(address: AztecAddress): Promise<{ member: Fr; exists: boolean }[]> {
|
|
133
|
+
// TXE has no contract updates, so the current class always equals the original.
|
|
134
|
+
return this.getContractInstanceMember(address, i => i.originalContractClassId);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
getContractInstanceInitializationHash(address: AztecAddress): Promise<{ member: Fr; exists: boolean }[]> {
|
|
138
|
+
return this.getContractInstanceMember(address, i => i.initializationHash);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
getContractInstanceImmutablesHash(address: AztecAddress): Promise<{ member: Fr; exists: boolean }[]> {
|
|
142
|
+
return this.getContractInstanceMember(address, i => i.immutablesHash);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// The one-element array mirrors the oracles' Noir return type, `[GetContractInstanceResult; 1]`.
|
|
146
|
+
private async getContractInstanceMember(
|
|
147
|
+
address: AztecAddress,
|
|
148
|
+
accessor: (instance: ContractInstancePreimageWithAddress) => Fr,
|
|
149
|
+
): Promise<{ member: Fr; exists: boolean }[]> {
|
|
150
|
+
const instance = await this.contractStore.getContractInstance(address);
|
|
151
|
+
if (!instance) {
|
|
152
|
+
return [{ member: Fr.ZERO, exists: false }];
|
|
153
|
+
}
|
|
154
|
+
return [{ member: accessor(instance), exists: true }];
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
returndataSize(): Promise<number> {
|
|
158
|
+
throw new Error(
|
|
159
|
+
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
returndataCopy(_rdOffset: number, _copySize: number): Promise<Fr[]> {
|
|
164
|
+
throw new Error(
|
|
165
|
+
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
call(_l2Gas: number, _daGas: number, _address: AztecAddress, _argsLength: number, _args: Fr[]): Promise<void> {
|
|
170
|
+
throw new Error(
|
|
171
|
+
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
staticCall(_l2Gas: number, _daGas: number, _address: AztecAddress, _argsLength: number, _args: Fr[]): Promise<void> {
|
|
176
|
+
throw new Error(
|
|
177
|
+
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
successCopy(): Promise<boolean> {
|
|
182
|
+
throw new Error(
|
|
183
|
+
'Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead',
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
async close(): Promise<L2Block> {
|
|
188
|
+
this.logger.debug('Exiting Public Context, building block with collected side effects', {
|
|
189
|
+
blockNumber: this.globalVariables.blockNumber,
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
const txEffect = this.makeTxEffect();
|
|
193
|
+
await insertTxEffectIntoWorldTrees(txEffect, this.forkedWorldTrees);
|
|
194
|
+
|
|
195
|
+
const block = await makeTXEBlock(this.forkedWorldTrees, this.globalVariables, [txEffect]);
|
|
196
|
+
|
|
197
|
+
await this.forkedWorldTrees.close();
|
|
198
|
+
|
|
199
|
+
this.logger.debug('Exited PublicContext with built block', {
|
|
200
|
+
blockNumber: block.number,
|
|
201
|
+
txEffects: block.body.txEffects,
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
return block;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
private makeTxEffect(): TxEffect {
|
|
208
|
+
const txEffect = TxEffect.empty();
|
|
209
|
+
|
|
210
|
+
txEffect.noteHashes = this.transientUniqueNoteHashes;
|
|
211
|
+
txEffect.nullifiers = [this.txRequestHash, ...this.transientSiloedNullifiers];
|
|
212
|
+
|
|
213
|
+
txEffect.publicDataWrites = this.publicDataWrites;
|
|
214
|
+
// TODO: support public logs
|
|
215
|
+
|
|
216
|
+
txEffect.txHash = new TxHash(new Fr(this.globalVariables.blockNumber));
|
|
217
|
+
|
|
218
|
+
return txEffect;
|
|
219
|
+
}
|
|
220
|
+
}
|