@aztec/txe 0.0.1-commit.6230a0c → 0.0.1-commit.643667a5cb
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/index.d.ts +1 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +82 -50
- package/dest/oracle/interfaces.d.ts +2 -2
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.d.ts +5 -6
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +84 -26
- package/dest/rpc_translator.d.ts +5 -5
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +5 -5
- package/dest/state_machine/archiver.d.ts +1 -1
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +2 -0
- package/dest/state_machine/dummy_p2p_client.d.ts +15 -11
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +27 -15
- 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 +15 -10
- package/dest/state_machine/mock_epoch_cache.d.ts +3 -1
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +4 -0
- package/dest/txe_session.d.ts +4 -6
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +68 -16
- package/dest/util/txe_public_contract_data_source.d.ts +2 -3
- package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
- package/dest/util/txe_public_contract_data_source.js +5 -22
- package/dest/utils/block_creation.d.ts +1 -1
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +3 -1
- package/package.json +15 -15
- package/src/index.ts +83 -49
- package/src/oracle/interfaces.ts +1 -1
- package/src/oracle/txe_oracle_top_level_context.ts +77 -83
- package/src/rpc_translator.ts +5 -5
- package/src/state_machine/archiver.ts +2 -0
- package/src/state_machine/dummy_p2p_client.ts +39 -21
- package/src/state_machine/index.ts +25 -9
- package/src/state_machine/mock_epoch_cache.ts +5 -0
- package/src/txe_session.ts +66 -64
- package/src/util/txe_public_contract_data_source.ts +10 -36
- package/src/utils/block_creation.ts +3 -1
- package/dest/util/txe_contract_store.d.ts +0 -12
- package/dest/util/txe_contract_store.d.ts.map +0 -1
- package/dest/util/txe_contract_store.js +0 -22
- package/src/util/txe_contract_store.ts +0 -36
package/src/txe_session.ts
CHANGED
|
@@ -3,10 +3,12 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
3
3
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { KeyStore } from '@aztec/key-store';
|
|
5
5
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
6
|
-
import type {
|
|
6
|
+
import type { AccessScopes } from '@aztec/pxe/client/lazy';
|
|
7
7
|
import {
|
|
8
8
|
AddressStore,
|
|
9
|
+
AnchorBlockStore,
|
|
9
10
|
CapsuleStore,
|
|
11
|
+
ContractStore,
|
|
10
12
|
JobCoordinator,
|
|
11
13
|
NoteService,
|
|
12
14
|
NoteStore,
|
|
@@ -49,10 +51,10 @@ import type { IAvmExecutionOracle, ITxeExecutionOracle } from './oracle/interfac
|
|
|
49
51
|
import { TXEOraclePublicContext } from './oracle/txe_oracle_public_context.js';
|
|
50
52
|
import { TXEOracleTopLevelContext } from './oracle/txe_oracle_top_level_context.js';
|
|
51
53
|
import { RPCTranslator } from './rpc_translator.js';
|
|
54
|
+
import { TXEArchiver } from './state_machine/archiver.js';
|
|
52
55
|
import { TXEStateMachine } from './state_machine/index.js';
|
|
53
56
|
import type { ForeignCallArgs, ForeignCallResult } from './util/encoding.js';
|
|
54
57
|
import { TXEAccountStore } from './util/txe_account_store.js';
|
|
55
|
-
import { TXEContractStore } from './util/txe_contract_store.js';
|
|
56
58
|
import { getSingleTxBlockRequestHash, insertTxEffectIntoWorldTrees, makeTXEBlock } from './utils/block_creation.js';
|
|
57
59
|
import { makeTxEffect } from './utils/tx_effect_creation.js';
|
|
58
60
|
|
|
@@ -129,7 +131,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
129
131
|
| IPrivateExecutionOracle
|
|
130
132
|
| IAvmExecutionOracle
|
|
131
133
|
| ITxeExecutionOracle,
|
|
132
|
-
private contractStore:
|
|
134
|
+
private contractStore: ContractStore,
|
|
133
135
|
private noteStore: NoteStore,
|
|
134
136
|
private keyStore: KeyStore,
|
|
135
137
|
private addressStore: AddressStore,
|
|
@@ -146,12 +148,11 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
146
148
|
private nextBlockTimestamp: bigint,
|
|
147
149
|
) {}
|
|
148
150
|
|
|
149
|
-
static async init(
|
|
151
|
+
static async init(contractStore: ContractStore) {
|
|
150
152
|
const store = await openTmpStore('txe-session');
|
|
151
153
|
|
|
152
154
|
const addressStore = new AddressStore(store);
|
|
153
155
|
const privateEventStore = new PrivateEventStore(store);
|
|
154
|
-
const contractStore = new TXEContractStore(store);
|
|
155
156
|
const noteStore = new NoteStore(store);
|
|
156
157
|
const senderTaggingStore = new SenderTaggingStore(store);
|
|
157
158
|
const recipientTaggingStore = new RecipientTaggingStore(store);
|
|
@@ -170,13 +171,9 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
170
171
|
noteStore,
|
|
171
172
|
]);
|
|
172
173
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
await contractStore.addContractInstance(instance);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
const stateMachine = await TXEStateMachine.create(store);
|
|
174
|
+
const archiver = new TXEArchiver(store);
|
|
175
|
+
const anchorBlockStore = new AnchorBlockStore(store);
|
|
176
|
+
const stateMachine = await TXEStateMachine.create(archiver, anchorBlockStore, contractStore, noteStore);
|
|
180
177
|
|
|
181
178
|
const nextBlockTimestamp = BigInt(Math.floor(new Date().getTime() / 1000));
|
|
182
179
|
const version = new Fr(await stateMachine.node.getVersion());
|
|
@@ -319,6 +316,7 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
319
316
|
|
|
320
317
|
await new NoteService(this.noteStore, this.stateMachine.node, anchorBlock!, this.currentJobId).syncNoteNullifiers(
|
|
321
318
|
contractAddress,
|
|
319
|
+
'ALL_SCOPES',
|
|
322
320
|
);
|
|
323
321
|
const latestBlock = await this.stateMachine.node.getBlockHeader('latest');
|
|
324
322
|
|
|
@@ -335,29 +333,31 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
335
333
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
336
334
|
|
|
337
335
|
const utilityExecutor = this.utilityExecutorForContractSync(anchorBlock);
|
|
338
|
-
this.oracleHandler = new PrivateExecutionOracle(
|
|
339
|
-
Fr.ZERO,
|
|
340
|
-
new TxContext(this.chainId, this.version, GasSettings.empty()),
|
|
341
|
-
new CallContext(AztecAddress.ZERO, contractAddress, FunctionSelector.empty(), false),
|
|
342
|
-
anchorBlock!,
|
|
336
|
+
this.oracleHandler = new PrivateExecutionOracle({
|
|
337
|
+
argsHash: Fr.ZERO,
|
|
338
|
+
txContext: new TxContext(this.chainId, this.version, GasSettings.empty()),
|
|
339
|
+
callContext: new CallContext(AztecAddress.ZERO, contractAddress, FunctionSelector.empty(), false),
|
|
340
|
+
anchorBlockHeader: anchorBlock!,
|
|
343
341
|
utilityExecutor,
|
|
344
|
-
[],
|
|
345
|
-
[],
|
|
346
|
-
new HashedValuesCache(),
|
|
342
|
+
authWitnesses: [],
|
|
343
|
+
capsules: [],
|
|
344
|
+
executionCache: new HashedValuesCache(),
|
|
347
345
|
noteCache,
|
|
348
346
|
taggingIndexCache,
|
|
349
|
-
this.contractStore,
|
|
350
|
-
this.noteStore,
|
|
351
|
-
this.keyStore,
|
|
352
|
-
this.addressStore,
|
|
353
|
-
this.stateMachine.node,
|
|
354
|
-
this.senderTaggingStore,
|
|
355
|
-
this.recipientTaggingStore,
|
|
356
|
-
this.senderAddressBookStore,
|
|
357
|
-
this.capsuleStore,
|
|
358
|
-
this.privateEventStore,
|
|
359
|
-
this.
|
|
360
|
-
|
|
347
|
+
contractStore: this.contractStore,
|
|
348
|
+
noteStore: this.noteStore,
|
|
349
|
+
keyStore: this.keyStore,
|
|
350
|
+
addressStore: this.addressStore,
|
|
351
|
+
aztecNode: this.stateMachine.node,
|
|
352
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
353
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
354
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
355
|
+
capsuleStore: this.capsuleStore,
|
|
356
|
+
privateEventStore: this.privateEventStore,
|
|
357
|
+
contractSyncService: this.stateMachine.contractSyncService,
|
|
358
|
+
jobId: this.currentJobId,
|
|
359
|
+
scopes: 'ALL_SCOPES',
|
|
360
|
+
});
|
|
361
361
|
|
|
362
362
|
// We store the note and tagging index caches fed into the PrivateExecutionOracle (along with some other auxiliary
|
|
363
363
|
// data) in order to refer to it later, mimicking the way this object is used by the ContractFunctionSimulator. The
|
|
@@ -409,24 +409,25 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
409
409
|
this.stateMachine.node,
|
|
410
410
|
anchorBlockHeader,
|
|
411
411
|
this.currentJobId,
|
|
412
|
-
).syncNoteNullifiers(contractAddress);
|
|
412
|
+
).syncNoteNullifiers(contractAddress, 'ALL_SCOPES');
|
|
413
413
|
|
|
414
|
-
this.oracleHandler = new UtilityExecutionOracle(
|
|
414
|
+
this.oracleHandler = new UtilityExecutionOracle({
|
|
415
415
|
contractAddress,
|
|
416
|
-
[],
|
|
417
|
-
[],
|
|
416
|
+
authWitnesses: [],
|
|
417
|
+
capsules: [],
|
|
418
418
|
anchorBlockHeader,
|
|
419
|
-
this.contractStore,
|
|
420
|
-
this.noteStore,
|
|
421
|
-
this.keyStore,
|
|
422
|
-
this.addressStore,
|
|
423
|
-
this.stateMachine.node,
|
|
424
|
-
this.recipientTaggingStore,
|
|
425
|
-
this.senderAddressBookStore,
|
|
426
|
-
this.capsuleStore,
|
|
427
|
-
this.privateEventStore,
|
|
428
|
-
this.currentJobId,
|
|
429
|
-
|
|
419
|
+
contractStore: this.contractStore,
|
|
420
|
+
noteStore: this.noteStore,
|
|
421
|
+
keyStore: this.keyStore,
|
|
422
|
+
addressStore: this.addressStore,
|
|
423
|
+
aztecNode: this.stateMachine.node,
|
|
424
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
425
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
426
|
+
capsuleStore: this.capsuleStore,
|
|
427
|
+
privateEventStore: this.privateEventStore,
|
|
428
|
+
jobId: this.currentJobId,
|
|
429
|
+
scopes: 'ALL_SCOPES',
|
|
430
|
+
});
|
|
430
431
|
|
|
431
432
|
this.state = { name: 'UTILITY' };
|
|
432
433
|
this.logger.debug(`Entered state ${this.state.name}`);
|
|
@@ -494,29 +495,30 @@ export class TXESession implements TXESessionStateHandler {
|
|
|
494
495
|
}
|
|
495
496
|
|
|
496
497
|
private utilityExecutorForContractSync(anchorBlock: any) {
|
|
497
|
-
return async (call: FunctionCall) => {
|
|
498
|
+
return async (call: FunctionCall, scopes: AccessScopes) => {
|
|
498
499
|
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
|
|
499
500
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
500
501
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
501
502
|
}
|
|
502
503
|
|
|
503
504
|
try {
|
|
504
|
-
const oracle = new UtilityExecutionOracle(
|
|
505
|
-
call.to,
|
|
506
|
-
[],
|
|
507
|
-
[],
|
|
508
|
-
anchorBlock!,
|
|
509
|
-
this.contractStore,
|
|
510
|
-
this.noteStore,
|
|
511
|
-
this.keyStore,
|
|
512
|
-
this.addressStore,
|
|
513
|
-
this.stateMachine.node,
|
|
514
|
-
this.recipientTaggingStore,
|
|
515
|
-
this.senderAddressBookStore,
|
|
516
|
-
this.capsuleStore,
|
|
517
|
-
this.privateEventStore,
|
|
518
|
-
this.currentJobId,
|
|
519
|
-
|
|
505
|
+
const oracle = new UtilityExecutionOracle({
|
|
506
|
+
contractAddress: call.to,
|
|
507
|
+
authWitnesses: [],
|
|
508
|
+
capsules: [],
|
|
509
|
+
anchorBlockHeader: anchorBlock!,
|
|
510
|
+
contractStore: this.contractStore,
|
|
511
|
+
noteStore: this.noteStore,
|
|
512
|
+
keyStore: this.keyStore,
|
|
513
|
+
addressStore: this.addressStore,
|
|
514
|
+
aztecNode: this.stateMachine.node,
|
|
515
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
516
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
517
|
+
capsuleStore: this.capsuleStore,
|
|
518
|
+
privateEventStore: this.privateEventStore,
|
|
519
|
+
jobId: this.currentJobId,
|
|
520
|
+
scopes,
|
|
521
|
+
});
|
|
520
522
|
await new WASMSimulator()
|
|
521
523
|
.executeUserCircuit(toACVMWitness(0, call.args), entryPointArtifact, new Oracle(oracle).toACIRCallback())
|
|
522
524
|
.catch((err: Error) => {
|
|
@@ -1,19 +1,11 @@
|
|
|
1
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { ContractStore } from '@aztec/pxe/server';
|
|
4
|
-
import { type ContractArtifact, FunctionSelector
|
|
4
|
+
import { type ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
|
|
5
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
-
import {
|
|
7
|
-
type ContractClassPublic,
|
|
8
|
-
type ContractDataSource,
|
|
9
|
-
type ContractInstanceWithAddress,
|
|
10
|
-
computePrivateFunctionsRoot,
|
|
11
|
-
computePublicBytecodeCommitment,
|
|
12
|
-
getContractClassPrivateFunctionFromArtifact,
|
|
13
|
-
} from '@aztec/stdlib/contract';
|
|
6
|
+
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
14
7
|
|
|
15
8
|
export class TXEPublicContractDataSource implements ContractDataSource {
|
|
16
|
-
#privateFunctionsRoot: Map<string, Buffer> = new Map();
|
|
17
9
|
constructor(
|
|
18
10
|
private blockNumber: BlockNumber,
|
|
19
11
|
private contractStore: ContractStore,
|
|
@@ -24,42 +16,24 @@ export class TXEPublicContractDataSource implements ContractDataSource {
|
|
|
24
16
|
}
|
|
25
17
|
|
|
26
18
|
async getContractClass(id: Fr): Promise<ContractClassPublic | undefined> {
|
|
27
|
-
const contractClass = await this.contractStore.
|
|
19
|
+
const contractClass = await this.contractStore.getContractClassWithPreimage(id);
|
|
28
20
|
if (!contractClass) {
|
|
29
21
|
return;
|
|
30
22
|
}
|
|
31
|
-
const artifact = await this.contractStore.getContractArtifact(id);
|
|
32
|
-
if (!artifact) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
let privateFunctionsRoot;
|
|
37
|
-
if (!this.#privateFunctionsRoot.has(id.toString())) {
|
|
38
|
-
const privateFunctions = await Promise.all(
|
|
39
|
-
artifact.functions
|
|
40
|
-
.filter(fn => fn.functionType === FunctionType.PRIVATE)
|
|
41
|
-
.map(fn => getContractClassPrivateFunctionFromArtifact(fn)),
|
|
42
|
-
);
|
|
43
|
-
privateFunctionsRoot = await computePrivateFunctionsRoot(privateFunctions);
|
|
44
|
-
this.#privateFunctionsRoot.set(id.toString(), privateFunctionsRoot.toBuffer());
|
|
45
|
-
} else {
|
|
46
|
-
privateFunctionsRoot = Fr.fromBuffer(this.#privateFunctionsRoot.get(id.toString())!);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
23
|
return {
|
|
50
|
-
id,
|
|
51
|
-
artifactHash: contractClass
|
|
52
|
-
packedBytecode: contractClass
|
|
53
|
-
privateFunctionsRoot,
|
|
54
|
-
version: contractClass
|
|
24
|
+
id: contractClass.id,
|
|
25
|
+
artifactHash: contractClass.artifactHash,
|
|
26
|
+
packedBytecode: contractClass.packedBytecode,
|
|
27
|
+
privateFunctionsRoot: contractClass.privateFunctionsRoot,
|
|
28
|
+
version: contractClass.version,
|
|
55
29
|
privateFunctions: [],
|
|
56
30
|
utilityFunctions: [],
|
|
57
31
|
};
|
|
58
32
|
}
|
|
59
33
|
|
|
60
34
|
async getBytecodeCommitment(id: Fr): Promise<Fr | undefined> {
|
|
61
|
-
const contractClass = await this.contractStore.
|
|
62
|
-
return contractClass
|
|
35
|
+
const contractClass = await this.contractStore.getContractClassWithPreimage(id);
|
|
36
|
+
return contractClass?.publicBytecodeCommitment;
|
|
63
37
|
}
|
|
64
38
|
|
|
65
39
|
async getContract(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
|
|
@@ -87,7 +87,9 @@ export async function makeTXEBlock(
|
|
|
87
87
|
const newArchiveInfo = await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);
|
|
88
88
|
const newArchive = new AppendOnlyTreeSnapshot(new Fr(newArchiveInfo.root), Number(newArchiveInfo.size));
|
|
89
89
|
|
|
90
|
-
// L2Block requires checkpointNumber and indexWithinCheckpoint
|
|
90
|
+
// L2Block requires checkpointNumber and indexWithinCheckpoint.
|
|
91
|
+
// TXE uses 1-block-per-checkpoint for testing simplicity, so we can use block number as checkpoint number.
|
|
92
|
+
// This uses the deprecated fromBlockNumber method intentionally for the TXE testing environment.
|
|
91
93
|
const checkpointNumber = CheckpointNumber.fromBlockNumber(globalVariables.blockNumber);
|
|
92
94
|
const indexWithinCheckpoint = IndexWithinCheckpoint(0);
|
|
93
95
|
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ContractArtifact } from '@aztec/aztec.js/abi';
|
|
2
|
-
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
|
-
import { ContractStore } from '@aztec/pxe/server';
|
|
4
|
-
export type ContractArtifactWithHash = ContractArtifact & {
|
|
5
|
-
artifactHash: Fr;
|
|
6
|
-
};
|
|
7
|
-
export declare class TXEContractStore extends ContractStore {
|
|
8
|
-
#private;
|
|
9
|
-
addContractArtifact(id: Fr, artifact: ContractArtifact | ContractArtifactWithHash): Promise<void>;
|
|
10
|
-
getContractArtifact(contractClassId: Fr): Promise<ContractArtifact | ContractArtifactWithHash | undefined>;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX2NvbnRyYWN0X3N0b3JlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC90eGVfY29udHJhY3Rfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE1BQU0sTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsR0FBRztJQUFFLFlBQVksRUFBRSxFQUFFLENBQUE7Q0FBRSxDQUFDO0FBTy9FLHFCQUFhLGdCQUFpQixTQUFRLGFBQWE7O0lBRzNCLG1CQUFtQixDQUN2QyxFQUFFLEVBQUUsRUFBRSxFQUNOLFFBQVEsRUFBRSxnQkFBZ0IsR0FBRyx3QkFBd0IsR0FDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUtmO0lBRXFCLG1CQUFtQixDQUN2QyxlQUFlLEVBQUUsRUFBRSxHQUNsQixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsd0JBQXdCLEdBQUcsU0FBUyxDQUFDLENBUWxFO0NBQ0YifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"txe_contract_store.d.ts","sourceRoot":"","sources":["../../src/util/txe_contract_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,GAAG;IAAE,YAAY,EAAE,EAAE,CAAA;CAAE,CAAC;AAO/E,qBAAa,gBAAiB,SAAQ,aAAa;;IAG3B,mBAAmB,CACvC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,gBAAgB,GAAG,wBAAwB,GACpD,OAAO,CAAC,IAAI,CAAC,CAKf;IAEqB,mBAAmB,CACvC,eAAe,EAAE,EAAE,GAClB,OAAO,CAAC,gBAAgB,GAAG,wBAAwB,GAAG,SAAS,CAAC,CAQlE;CACF"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Fr } from '@aztec/aztec.js/fields';
|
|
2
|
-
import { ContractStore } from '@aztec/pxe/server';
|
|
3
|
-
/*
|
|
4
|
-
* A contract store that stores contract artifacts with their hashes. Since
|
|
5
|
-
* TXE typically deploys the same contract again and again for multiple tests, caching
|
|
6
|
-
* the *very* expensive artifact hash computation improves testing speed significantly.
|
|
7
|
-
*/ export class TXEContractStore extends ContractStore {
|
|
8
|
-
#artifactHashes = new Map();
|
|
9
|
-
async addContractArtifact(id, artifact) {
|
|
10
|
-
if ('artifactHash' in artifact) {
|
|
11
|
-
this.#artifactHashes.set(id.toString(), artifact.artifactHash.toBuffer());
|
|
12
|
-
}
|
|
13
|
-
await super.addContractArtifact(id, artifact);
|
|
14
|
-
}
|
|
15
|
-
async getContractArtifact(contractClassId) {
|
|
16
|
-
const artifact = await super.getContractArtifact(contractClassId);
|
|
17
|
-
if (artifact && this.#artifactHashes.has(contractClassId.toString())) {
|
|
18
|
-
artifact.artifactHash = Fr.fromBuffer(this.#artifactHashes.get(contractClassId.toString()));
|
|
19
|
-
}
|
|
20
|
-
return artifact;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { ContractArtifact } from '@aztec/aztec.js/abi';
|
|
2
|
-
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
|
-
import { ContractStore } from '@aztec/pxe/server';
|
|
4
|
-
|
|
5
|
-
export type ContractArtifactWithHash = ContractArtifact & { artifactHash: Fr };
|
|
6
|
-
|
|
7
|
-
/*
|
|
8
|
-
* A contract store that stores contract artifacts with their hashes. Since
|
|
9
|
-
* TXE typically deploys the same contract again and again for multiple tests, caching
|
|
10
|
-
* the *very* expensive artifact hash computation improves testing speed significantly.
|
|
11
|
-
*/
|
|
12
|
-
export class TXEContractStore extends ContractStore {
|
|
13
|
-
#artifactHashes: Map<string, Buffer> = new Map();
|
|
14
|
-
|
|
15
|
-
public override async addContractArtifact(
|
|
16
|
-
id: Fr,
|
|
17
|
-
artifact: ContractArtifact | ContractArtifactWithHash,
|
|
18
|
-
): Promise<void> {
|
|
19
|
-
if ('artifactHash' in artifact) {
|
|
20
|
-
this.#artifactHashes.set(id.toString(), artifact.artifactHash.toBuffer());
|
|
21
|
-
}
|
|
22
|
-
await super.addContractArtifact(id, artifact);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
public override async getContractArtifact(
|
|
26
|
-
contractClassId: Fr,
|
|
27
|
-
): Promise<ContractArtifact | ContractArtifactWithHash | undefined> {
|
|
28
|
-
const artifact = await super.getContractArtifact(contractClassId);
|
|
29
|
-
if (artifact && this.#artifactHashes.has(contractClassId.toString())) {
|
|
30
|
-
(artifact as ContractArtifactWithHash).artifactHash = Fr.fromBuffer(
|
|
31
|
-
this.#artifactHashes.get(contractClassId.toString())!,
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
return artifact;
|
|
35
|
-
}
|
|
36
|
-
}
|