@aztec/simulator 0.22.0
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/README.md +47 -0
- package/dest/acvm/acvm.d.ts +39 -0
- package/dest/acvm/acvm.d.ts.map +1 -0
- package/dest/acvm/acvm.js +97 -0
- package/dest/acvm/acvm_types.d.ts +10 -0
- package/dest/acvm/acvm_types.d.ts.map +1 -0
- package/dest/acvm/acvm_types.js +2 -0
- package/dest/acvm/deserialize.d.ts +24 -0
- package/dest/acvm/deserialize.d.ts.map +1 -0
- package/dest/acvm/deserialize.js +31 -0
- package/dest/acvm/index.d.ts +6 -0
- package/dest/acvm/index.d.ts.map +1 -0
- package/dest/acvm/index.js +6 -0
- package/dest/acvm/oracle/debug.d.ts +19 -0
- package/dest/acvm/oracle/debug.d.ts.map +1 -0
- package/dest/acvm/oracle/debug.js +95 -0
- package/dest/acvm/oracle/index.d.ts +15 -0
- package/dest/acvm/oracle/index.d.ts.map +1 -0
- package/dest/acvm/oracle/index.js +4 -0
- package/dest/acvm/oracle/oracle.d.ts +38 -0
- package/dest/acvm/oracle/oracle.d.ts.map +1 -0
- package/dest/acvm/oracle/oracle.js +193 -0
- package/dest/acvm/oracle/typed_oracle.d.ts +88 -0
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -0
- package/dest/acvm/oracle/typed_oracle.js +103 -0
- package/dest/acvm/serialize.d.ts +30 -0
- package/dest/acvm/serialize.d.ts.map +1 -0
- package/dest/acvm/serialize.js +67 -0
- package/dest/avm/avm_context.d.ts +49 -0
- package/dest/avm/avm_context.d.ts.map +1 -0
- package/dest/avm/avm_context.js +56 -0
- package/dest/avm/avm_execution_environment.d.ts +28 -0
- package/dest/avm/avm_execution_environment.d.ts.map +1 -0
- package/dest/avm/avm_execution_environment.js +42 -0
- package/dest/avm/avm_machine_state.d.ts +62 -0
- package/dest/avm/avm_machine_state.d.ts.map +1 -0
- package/dest/avm/avm_machine_state.js +69 -0
- package/dest/avm/avm_memory_types.d.ts +113 -0
- package/dest/avm/avm_memory_types.d.ts.map +1 -0
- package/dest/avm/avm_memory_types.js +269 -0
- package/dest/avm/avm_message_call_result.d.ts +16 -0
- package/dest/avm/avm_message_call_result.d.ts.map +1 -0
- package/dest/avm/avm_message_call_result.js +21 -0
- package/dest/avm/avm_simulator.d.ts +22 -0
- package/dest/avm/avm_simulator.d.ts.map +1 -0
- package/dest/avm/avm_simulator.js +74 -0
- package/dest/avm/errors.d.ts +30 -0
- package/dest/avm/errors.d.ts.map +1 -0
- package/dest/avm/errors.js +44 -0
- package/dest/avm/fixtures/index.d.ts +28 -0
- package/dest/avm/fixtures/index.d.ts.map +1 -0
- package/dest/avm/fixtures/index.js +44 -0
- package/dest/avm/journal/host_storage.d.ts +13 -0
- package/dest/avm/journal/host_storage.d.ts.map +1 -0
- package/dest/avm/journal/host_storage.js +13 -0
- package/dest/avm/journal/index.d.ts +3 -0
- package/dest/avm/journal/index.d.ts.map +1 -0
- package/dest/avm/journal/index.js +3 -0
- package/dest/avm/journal/journal.d.ts +95 -0
- package/dest/avm/journal/journal.d.ts.map +1 -0
- package/dest/avm/journal/journal.js +217 -0
- package/dest/avm/opcodes/accrued_substate.d.ts +42 -0
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -0
- package/dest/avm/opcodes/accrued_substate.js +82 -0
- package/dest/avm/opcodes/arithmetic.d.ts +28 -0
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -0
- package/dest/avm/opcodes/arithmetic.js +59 -0
- package/dest/avm/opcodes/bitwise.d.ts +40 -0
- package/dest/avm/opcodes/bitwise.d.ts.map +1 -0
- package/dest/avm/opcodes/bitwise.js +92 -0
- package/dest/avm/opcodes/comparators.d.ts +22 -0
- package/dest/avm/opcodes/comparators.d.ts.map +1 -0
- package/dest/avm/opcodes/comparators.js +51 -0
- package/dest/avm/opcodes/control_flow.d.ts +57 -0
- package/dest/avm/opcodes/control_flow.d.ts.map +1 -0
- package/dest/avm/opcodes/control_flow.js +118 -0
- package/dest/avm/opcodes/environment_getters.d.ts +74 -0
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -0
- package/dest/avm/opcodes/environment_getters.js +151 -0
- package/dest/avm/opcodes/external_calls.d.ts +34 -0
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -0
- package/dest/avm/opcodes/external_calls.js +103 -0
- package/dest/avm/opcodes/index.d.ts +11 -0
- package/dest/avm/opcodes/index.d.ts.map +1 -0
- package/dest/avm/opcodes/index.js +11 -0
- package/dest/avm/opcodes/instruction.d.ts +43 -0
- package/dest/avm/opcodes/instruction.d.ts.map +1 -0
- package/dest/avm/opcodes/instruction.js +44 -0
- package/dest/avm/opcodes/instruction_impl.d.ts +28 -0
- package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -0
- package/dest/avm/opcodes/instruction_impl.js +47 -0
- package/dest/avm/opcodes/memory.d.ts +55 -0
- package/dest/avm/opcodes/memory.d.ts.map +1 -0
- package/dest/avm/opcodes/memory.js +125 -0
- package/dest/avm/opcodes/storage.d.ts +31 -0
- package/dest/avm/opcodes/storage.d.ts.map +1 -0
- package/dest/avm/opcodes/storage.js +59 -0
- package/dest/avm/serialization/buffer_cursor.d.ts +25 -0
- package/dest/avm/serialization/buffer_cursor.d.ts.map +1 -0
- package/dest/avm/serialization/buffer_cursor.js +94 -0
- package/dest/avm/serialization/bytecode_serialization.d.ts +25 -0
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -0
- package/dest/avm/serialization/bytecode_serialization.js +100 -0
- package/dest/avm/serialization/instruction_serialization.d.ts +91 -0
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -0
- package/dest/avm/serialization/instruction_serialization.js +146 -0
- package/dest/client/client_execution_context.d.ts +188 -0
- package/dest/client/client_execution_context.d.ts.map +1 -0
- package/dest/client/client_execution_context.js +326 -0
- package/dest/client/db_oracle.d.ts +155 -0
- package/dest/client/db_oracle.d.ts.map +1 -0
- package/dest/client/db_oracle.js +17 -0
- package/dest/client/execution_note_cache.d.ts +54 -0
- package/dest/client/execution_note_cache.d.ts.map +1 -0
- package/dest/client/execution_note_cache.js +82 -0
- package/dest/client/execution_result.d.ts +67 -0
- package/dest/client/execution_result.d.ts.map +1 -0
- package/dest/client/execution_result.js +32 -0
- package/dest/client/index.d.ts +4 -0
- package/dest/client/index.d.ts.map +1 -0
- package/dest/client/index.js +4 -0
- package/dest/client/pick_notes.d.ts +80 -0
- package/dest/client/pick_notes.d.ts.map +1 -0
- package/dest/client/pick_notes.js +45 -0
- package/dest/client/private_execution.d.ts +10 -0
- package/dest/client/private_execution.d.ts.map +1 -0
- package/dest/client/private_execution.js +55 -0
- package/dest/client/simulator.d.ts +100 -0
- package/dest/client/simulator.d.ts.map +1 -0
- package/dest/client/simulator.js +171 -0
- package/dest/client/unconstrained_execution.d.ts +10 -0
- package/dest/client/unconstrained_execution.d.ts.map +1 -0
- package/dest/client/unconstrained_execution.js +25 -0
- package/dest/client/view_data_oracle.d.ts +139 -0
- package/dest/client/view_data_oracle.d.ts.map +1 -0
- package/dest/client/view_data_oracle.js +196 -0
- package/dest/common/errors.d.ts +36 -0
- package/dest/common/errors.d.ts.map +1 -0
- package/dest/common/errors.js +57 -0
- package/dest/common/index.d.ts +4 -0
- package/dest/common/index.d.ts.map +1 -0
- package/dest/common/index.js +4 -0
- package/dest/common/packed_args_cache.d.ts +28 -0
- package/dest/common/packed_args_cache.d.ts.map +1 -0
- package/dest/common/packed_args_cache.js +50 -0
- package/dest/common/side_effect_counter.d.ts +9 -0
- package/dest/common/side_effect_counter.d.ts.map +1 -0
- package/dest/common/side_effect_counter.js +14 -0
- package/dest/index.d.ts +4 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +4 -0
- package/dest/public/db.d.ts +77 -0
- package/dest/public/db.d.ts.map +1 -0
- package/dest/public/db.js +2 -0
- package/dest/public/execution.d.ts +62 -0
- package/dest/public/execution.d.ts.map +1 -0
- package/dest/public/execution.js +61 -0
- package/dest/public/executor.d.ts +27 -0
- package/dest/public/executor.d.ts.map +1 -0
- package/dest/public/executor.js +83 -0
- package/dest/public/index.d.ts +4 -0
- package/dest/public/index.d.ts.map +1 -0
- package/dest/public/index.js +4 -0
- package/dest/public/public_execution_context.d.ts +103 -0
- package/dest/public/public_execution_context.d.ts.map +1 -0
- package/dest/public/public_execution_context.js +175 -0
- package/dest/public/state_actions.d.ts +39 -0
- package/dest/public/state_actions.d.ts.map +1 -0
- package/dest/public/state_actions.js +79 -0
- package/dest/test/utils.d.ts +12 -0
- package/dest/test/utils.d.ts.map +1 -0
- package/dest/test/utils.js +23 -0
- package/dest/utils.d.ts +27 -0
- package/dest/utils.d.ts.map +1 -0
- package/dest/utils.js +28 -0
- package/package.json +66 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { FunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
|
+
import { FunctionSelector, GlobalVariables, Header } from '@aztec/circuits.js';
|
|
3
|
+
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
6
|
+
import { TypedOracle } from '../acvm/index.js';
|
|
7
|
+
import { PackedArgsCache, SideEffectCounter } from '../common/index.js';
|
|
8
|
+
import { CommitmentsDB, PublicContractsDB, PublicStateDB } from './db.js';
|
|
9
|
+
import { PublicExecution, PublicExecutionResult } from './execution.js';
|
|
10
|
+
/**
|
|
11
|
+
* The execution context for a public tx simulation.
|
|
12
|
+
*/
|
|
13
|
+
export declare class PublicExecutionContext extends TypedOracle {
|
|
14
|
+
/**
|
|
15
|
+
* Data for this execution.
|
|
16
|
+
*/
|
|
17
|
+
readonly execution: PublicExecution;
|
|
18
|
+
private readonly header;
|
|
19
|
+
private readonly globalVariables;
|
|
20
|
+
private readonly packedArgsCache;
|
|
21
|
+
private readonly sideEffectCounter;
|
|
22
|
+
private readonly stateDb;
|
|
23
|
+
private readonly contractsDb;
|
|
24
|
+
private readonly commitmentsDb;
|
|
25
|
+
private log;
|
|
26
|
+
private storageActions;
|
|
27
|
+
private nestedExecutions;
|
|
28
|
+
private unencryptedLogs;
|
|
29
|
+
constructor(
|
|
30
|
+
/**
|
|
31
|
+
* Data for this execution.
|
|
32
|
+
*/
|
|
33
|
+
execution: PublicExecution, header: Header, globalVariables: GlobalVariables, packedArgsCache: PackedArgsCache, sideEffectCounter: SideEffectCounter, stateDb: PublicStateDB, contractsDb: PublicContractsDB, commitmentsDb: CommitmentsDB, log?: import("@aztec/foundation/log").DebugLogger);
|
|
34
|
+
/**
|
|
35
|
+
* Generates the initial witness for a public function.
|
|
36
|
+
* @param args - The arguments to the function.
|
|
37
|
+
* @param callContext - The call context of the function.
|
|
38
|
+
* @param header - Contains data required to reconstruct a block hash (historical roots etc.).
|
|
39
|
+
* @param globalVariables - The global variables.
|
|
40
|
+
* @param witnessStartIndex - The index where to start inserting the parameters.
|
|
41
|
+
* @returns The initial witness.
|
|
42
|
+
*/
|
|
43
|
+
getInitialWitness(witnessStartIndex?: number): Map<number, string>;
|
|
44
|
+
/**
|
|
45
|
+
* Return the nested execution results during this execution.
|
|
46
|
+
*/
|
|
47
|
+
getNestedExecutions(): PublicExecutionResult[];
|
|
48
|
+
/**
|
|
49
|
+
* Return the encrypted logs emitted during this execution.
|
|
50
|
+
*/
|
|
51
|
+
getUnencryptedLogs(): FunctionL2Logs;
|
|
52
|
+
/**
|
|
53
|
+
* Return the data read and updated during this execution.
|
|
54
|
+
*/
|
|
55
|
+
getStorageActionData(): {
|
|
56
|
+
contractStorageReads: import("@aztec/circuits.js").ContractStorageRead[];
|
|
57
|
+
contractStorageUpdateRequests: import("@aztec/circuits.js").ContractStorageUpdateRequest[];
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Pack the given arguments.
|
|
61
|
+
* @param args - Arguments to pack
|
|
62
|
+
*/
|
|
63
|
+
packArguments(args: Fr[]): Promise<Fr>;
|
|
64
|
+
/**
|
|
65
|
+
* Fetches the a message from the db, given its key.
|
|
66
|
+
* @param msgKey - A buffer representing the message key.
|
|
67
|
+
* @returns The l1 to l2 message data
|
|
68
|
+
*/
|
|
69
|
+
getL1ToL2Message(msgKey: Fr): Promise<import("../acvm/index.js").MessageLoadOracleInputs<16>>;
|
|
70
|
+
/**
|
|
71
|
+
* Emit an unencrypted log.
|
|
72
|
+
* @param log - The unencrypted log to be emitted.
|
|
73
|
+
*/
|
|
74
|
+
emitUnencryptedLog(log: UnencryptedL2Log): void;
|
|
75
|
+
/**
|
|
76
|
+
* Retrieves the portal contract address associated with the given contract address.
|
|
77
|
+
* Returns zero address if the input contract address is not found or invalid.
|
|
78
|
+
* @param contractAddress - The address of the contract whose portal address is to be fetched.
|
|
79
|
+
* @returns The portal contract address.
|
|
80
|
+
*/
|
|
81
|
+
getPortalContractAddress(contractAddress: AztecAddress): Promise<EthAddress>;
|
|
82
|
+
/**
|
|
83
|
+
* Read the public storage data.
|
|
84
|
+
* @param startStorageSlot - The starting storage slot.
|
|
85
|
+
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
86
|
+
*/
|
|
87
|
+
storageRead(startStorageSlot: Fr, numberOfElements: number): Promise<Fr[]>;
|
|
88
|
+
/**
|
|
89
|
+
* Write some values to the public storage.
|
|
90
|
+
* @param startStorageSlot - The starting storage slot.
|
|
91
|
+
* @param values - The values to be written.
|
|
92
|
+
*/
|
|
93
|
+
storageWrite(startStorageSlot: Fr, values: Fr[]): Promise<Fr[]>;
|
|
94
|
+
/**
|
|
95
|
+
* Calls a public function as a nested execution.
|
|
96
|
+
* @param targetContractAddress - The address of the contract to call.
|
|
97
|
+
* @param functionSelector - The function selector of the function to call.
|
|
98
|
+
* @param argsHash - The packed arguments to pass to the function.
|
|
99
|
+
* @returns The return values of the public function.
|
|
100
|
+
*/
|
|
101
|
+
callPublicFunction(targetContractAddress: AztecAddress, functionSelector: FunctionSelector, argsHash: Fr): Promise<Fr[]>;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=public_execution_context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public_execution_context.d.ts","sourceRoot":"","sources":["../../src/public/public_execution_context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAA6B,gBAAgB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAIxE;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;IAMnD;;OAEG;aACa,SAAS,EAAE,eAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,GAAG;IAhBb,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,eAAe,CAA0B;;IAG/C;;OAEG;IACa,SAAS,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EAAE,aAAa,EACrC,GAAG,8CAAgE;IAM7E;;;;;;;;OAQG;IACI,iBAAiB,CAAC,iBAAiB,SAAI;IAO9C;;OAEG;IACI,mBAAmB;IAI1B;;OAEG;IACI,kBAAkB;IAIzB;;OAEG;IACI,oBAAoB;;;;IAK3B;;;OAGG;IACI,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAI7C;;;;OAIG;IACU,gBAAgB,CAAC,MAAM,EAAE,EAAE;IAIxC;;;OAGG;IACI,kBAAkB,CAAC,GAAG,EAAE,gBAAgB;IAM/C;;;;;OAKG;IACU,wBAAwB,CAAC,eAAe,EAAE,YAAY;IAInE;;;;OAIG;IACU,WAAW,CAAC,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM;IAYvE;;;;OAIG;IACU,YAAY,CAAC,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IAc5D;;;;;;OAMG;IACU,kBAAkB,CAC7B,qBAAqB,EAAE,YAAY,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,EAAE;CAuDf"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { FunctionL2Logs } from '@aztec/circuit-types';
|
|
2
|
+
import { CallContext, FunctionData } from '@aztec/circuits.js';
|
|
3
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
5
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
6
|
+
import { TypedOracle, toACVMWitness } from '../acvm/index.js';
|
|
7
|
+
import { executePublicFunction } from './executor.js';
|
|
8
|
+
import { ContractStorageActionsCollector } from './state_actions.js';
|
|
9
|
+
/**
|
|
10
|
+
* The execution context for a public tx simulation.
|
|
11
|
+
*/
|
|
12
|
+
export class PublicExecutionContext extends TypedOracle {
|
|
13
|
+
constructor(
|
|
14
|
+
/**
|
|
15
|
+
* Data for this execution.
|
|
16
|
+
*/
|
|
17
|
+
execution, header, globalVariables, packedArgsCache, sideEffectCounter, stateDb, contractsDb, commitmentsDb, log = createDebugLogger('aztec:simulator:public_execution_context')) {
|
|
18
|
+
super();
|
|
19
|
+
this.execution = execution;
|
|
20
|
+
this.header = header;
|
|
21
|
+
this.globalVariables = globalVariables;
|
|
22
|
+
this.packedArgsCache = packedArgsCache;
|
|
23
|
+
this.sideEffectCounter = sideEffectCounter;
|
|
24
|
+
this.stateDb = stateDb;
|
|
25
|
+
this.contractsDb = contractsDb;
|
|
26
|
+
this.commitmentsDb = commitmentsDb;
|
|
27
|
+
this.log = log;
|
|
28
|
+
this.nestedExecutions = [];
|
|
29
|
+
this.unencryptedLogs = [];
|
|
30
|
+
this.storageActions = new ContractStorageActionsCollector(stateDb, execution.contractAddress);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generates the initial witness for a public function.
|
|
34
|
+
* @param args - The arguments to the function.
|
|
35
|
+
* @param callContext - The call context of the function.
|
|
36
|
+
* @param header - Contains data required to reconstruct a block hash (historical roots etc.).
|
|
37
|
+
* @param globalVariables - The global variables.
|
|
38
|
+
* @param witnessStartIndex - The index where to start inserting the parameters.
|
|
39
|
+
* @returns The initial witness.
|
|
40
|
+
*/
|
|
41
|
+
getInitialWitness(witnessStartIndex = 0) {
|
|
42
|
+
const { callContext, args } = this.execution;
|
|
43
|
+
const fields = [...callContext.toFields(), ...this.header.toFields(), ...this.globalVariables.toFields(), ...args];
|
|
44
|
+
return toACVMWitness(witnessStartIndex, fields);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Return the nested execution results during this execution.
|
|
48
|
+
*/
|
|
49
|
+
getNestedExecutions() {
|
|
50
|
+
return this.nestedExecutions;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Return the encrypted logs emitted during this execution.
|
|
54
|
+
*/
|
|
55
|
+
getUnencryptedLogs() {
|
|
56
|
+
return new FunctionL2Logs(this.unencryptedLogs.map(log => log.toBuffer()));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Return the data read and updated during this execution.
|
|
60
|
+
*/
|
|
61
|
+
getStorageActionData() {
|
|
62
|
+
const [contractStorageReads, contractStorageUpdateRequests] = this.storageActions.collect();
|
|
63
|
+
return { contractStorageReads, contractStorageUpdateRequests };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Pack the given arguments.
|
|
67
|
+
* @param args - Arguments to pack
|
|
68
|
+
*/
|
|
69
|
+
packArguments(args) {
|
|
70
|
+
return Promise.resolve(this.packedArgsCache.pack(args));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Fetches the a message from the db, given its key.
|
|
74
|
+
* @param msgKey - A buffer representing the message key.
|
|
75
|
+
* @returns The l1 to l2 message data
|
|
76
|
+
*/
|
|
77
|
+
async getL1ToL2Message(msgKey) {
|
|
78
|
+
return await this.commitmentsDb.getL1ToL2Message(msgKey);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Emit an unencrypted log.
|
|
82
|
+
* @param log - The unencrypted log to be emitted.
|
|
83
|
+
*/
|
|
84
|
+
emitUnencryptedLog(log) {
|
|
85
|
+
// TODO(https://github.com/AztecProtocol/aztec-packages/issues/885)
|
|
86
|
+
this.unencryptedLogs.push(log);
|
|
87
|
+
this.log(`Emitted unencrypted log: "${log.toHumanReadable()}"`);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Retrieves the portal contract address associated with the given contract address.
|
|
91
|
+
* Returns zero address if the input contract address is not found or invalid.
|
|
92
|
+
* @param contractAddress - The address of the contract whose portal address is to be fetched.
|
|
93
|
+
* @returns The portal contract address.
|
|
94
|
+
*/
|
|
95
|
+
async getPortalContractAddress(contractAddress) {
|
|
96
|
+
return (await this.contractsDb.getPortalContractAddress(contractAddress)) ?? EthAddress.ZERO;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Read the public storage data.
|
|
100
|
+
* @param startStorageSlot - The starting storage slot.
|
|
101
|
+
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
102
|
+
*/
|
|
103
|
+
async storageRead(startStorageSlot, numberOfElements) {
|
|
104
|
+
const values = [];
|
|
105
|
+
for (let i = 0; i < Number(numberOfElements); i++) {
|
|
106
|
+
const storageSlot = new Fr(startStorageSlot.value + BigInt(i));
|
|
107
|
+
const sideEffectCounter = this.sideEffectCounter.count();
|
|
108
|
+
const value = await this.storageActions.read(storageSlot, sideEffectCounter);
|
|
109
|
+
this.log(`Oracle storage read: slot=${storageSlot.toString()} value=${value.toString()}`);
|
|
110
|
+
values.push(value);
|
|
111
|
+
}
|
|
112
|
+
return values;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Write some values to the public storage.
|
|
116
|
+
* @param startStorageSlot - The starting storage slot.
|
|
117
|
+
* @param values - The values to be written.
|
|
118
|
+
*/
|
|
119
|
+
async storageWrite(startStorageSlot, values) {
|
|
120
|
+
const newValues = [];
|
|
121
|
+
for (let i = 0; i < values.length; i++) {
|
|
122
|
+
const storageSlot = new Fr(startStorageSlot.value + BigInt(i));
|
|
123
|
+
const newValue = values[i];
|
|
124
|
+
const sideEffectCounter = this.sideEffectCounter.count();
|
|
125
|
+
await this.storageActions.write(storageSlot, newValue, sideEffectCounter);
|
|
126
|
+
await this.stateDb.storageWrite(this.execution.contractAddress, storageSlot, newValue);
|
|
127
|
+
this.log(`Oracle storage write: slot=${storageSlot.toString()} value=${newValue.toString()}`);
|
|
128
|
+
newValues.push(newValue);
|
|
129
|
+
}
|
|
130
|
+
return newValues;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Calls a public function as a nested execution.
|
|
134
|
+
* @param targetContractAddress - The address of the contract to call.
|
|
135
|
+
* @param functionSelector - The function selector of the function to call.
|
|
136
|
+
* @param argsHash - The packed arguments to pass to the function.
|
|
137
|
+
* @returns The return values of the public function.
|
|
138
|
+
*/
|
|
139
|
+
async callPublicFunction(targetContractAddress, functionSelector, argsHash) {
|
|
140
|
+
const args = this.packedArgsCache.unpack(argsHash);
|
|
141
|
+
this.log(`Public function call: addr=${targetContractAddress} selector=${functionSelector} args=${args.join(',')}`);
|
|
142
|
+
const portalAddress = (await this.contractsDb.getPortalContractAddress(targetContractAddress)) ?? EthAddress.ZERO;
|
|
143
|
+
const isInternal = await this.contractsDb.getIsInternal(targetContractAddress, functionSelector);
|
|
144
|
+
if (isInternal === undefined) {
|
|
145
|
+
throw new Error(`ERR: Method not found - ${targetContractAddress.toString()}:${functionSelector.toString()}`);
|
|
146
|
+
}
|
|
147
|
+
const acir = await this.contractsDb.getBytecode(targetContractAddress, functionSelector);
|
|
148
|
+
if (!acir) {
|
|
149
|
+
throw new Error(`Bytecode not found for ${targetContractAddress}:${functionSelector}`);
|
|
150
|
+
}
|
|
151
|
+
const functionData = new FunctionData(functionSelector, isInternal, false, false);
|
|
152
|
+
const callContext = CallContext.from({
|
|
153
|
+
msgSender: this.execution.contractAddress,
|
|
154
|
+
portalContractAddress: portalAddress,
|
|
155
|
+
storageContractAddress: targetContractAddress,
|
|
156
|
+
functionSelector,
|
|
157
|
+
isContractDeployment: false,
|
|
158
|
+
isDelegateCall: false,
|
|
159
|
+
isStaticCall: false,
|
|
160
|
+
startSideEffectCounter: 0, // TODO use counters in public execution
|
|
161
|
+
});
|
|
162
|
+
const nestedExecution = {
|
|
163
|
+
args,
|
|
164
|
+
contractAddress: targetContractAddress,
|
|
165
|
+
functionData,
|
|
166
|
+
callContext,
|
|
167
|
+
};
|
|
168
|
+
const context = new PublicExecutionContext(nestedExecution, this.header, this.globalVariables, this.packedArgsCache, this.sideEffectCounter, this.stateDb, this.contractsDb, this.commitmentsDb, this.log);
|
|
169
|
+
const childExecutionResult = await executePublicFunction(context, acir);
|
|
170
|
+
this.nestedExecutions.push(childExecutionResult);
|
|
171
|
+
this.log(`Returning from nested call: ret=${childExecutionResult.returnValues.join(', ')}`);
|
|
172
|
+
return childExecutionResult.returnValues;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2V4ZWN1dGlvbl9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy9wdWJsaWNfZXhlY3V0aW9uX2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBNkMsTUFBTSxvQkFBb0IsQ0FBQztBQUUxRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJOUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFdBQVc7SUFLckQ7SUFDRTs7T0FFRztJQUNhLFNBQTBCLEVBQ3pCLE1BQWMsRUFDZCxlQUFnQyxFQUNoQyxlQUFnQyxFQUNoQyxpQkFBb0MsRUFDcEMsT0FBc0IsRUFDdEIsV0FBOEIsRUFDOUIsYUFBNEIsRUFDckMsTUFBTSxpQkFBaUIsQ0FBQywwQ0FBMEMsQ0FBQztRQUUzRSxLQUFLLEVBQUUsQ0FBQztRQVZRLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQ3pCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN0Qixn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
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ContractStorageRead, ContractStorageUpdateRequest } from '@aztec/circuits.js';
|
|
2
|
+
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
+
import { PublicStateDB } from './db.js';
|
|
5
|
+
/**
|
|
6
|
+
* Implements read/write operations on a contract public storage, collecting
|
|
7
|
+
* all read and update operations, and collapsing them into a single
|
|
8
|
+
* read or update per slot.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ContractStorageActionsCollector {
|
|
11
|
+
private db;
|
|
12
|
+
private address;
|
|
13
|
+
private readonly contractStorageReads;
|
|
14
|
+
private readonly contractStorageUpdateRequests;
|
|
15
|
+
constructor(db: PublicStateDB, address: AztecAddress);
|
|
16
|
+
/**
|
|
17
|
+
* Returns the current value of a slot according to the latest update request for it,
|
|
18
|
+
* falling back to the public db. Collects the operation in storage reads,
|
|
19
|
+
* as long as there is no existing update request.
|
|
20
|
+
* @param storageSlot - Slot to check.
|
|
21
|
+
* @param sideEffectCounter - Side effect counter associated with this storage action.
|
|
22
|
+
* @returns The current value as affected by all update requests so far.
|
|
23
|
+
*/
|
|
24
|
+
read(storageSlot: Fr, sideEffectCounter: number): Promise<Fr>;
|
|
25
|
+
/**
|
|
26
|
+
* Sets a new value for a slot in the internal update requests cache,
|
|
27
|
+
* clearing any previous storage read or update operation for the same slot.
|
|
28
|
+
* @param storageSlot - Slot to write to.
|
|
29
|
+
* @param newValue - Value to write to it.
|
|
30
|
+
* @param sideEffectCounter - Side effect counter associated with this storage action.
|
|
31
|
+
*/
|
|
32
|
+
write(storageSlot: Fr, newValue: Fr, sideEffectCounter: number): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Returns all storage reads and update requests performed.
|
|
35
|
+
* @returns All storage read and update requests.
|
|
36
|
+
*/
|
|
37
|
+
collect(): [ContractStorageRead[], ContractStorageUpdateRequest[]];
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=state_actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state_actions.d.ts","sourceRoot":"","sources":["../../src/public/state_actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;GAIG;AACH,qBAAa,+BAA+B;IAiB9B,OAAO,CAAC,EAAE;IAAiB,OAAO,CAAC,OAAO;IAftD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAGvB;IAGd,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAOhC;gBAEM,EAAE,EAAE,aAAa,EAAU,OAAO,EAAE,YAAY;IAEpE;;;;;;;OAOG;IACU,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IAe1E;;;;;;OAMG;IACU,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3F;;;OAGG;IACI,OAAO,IAAI,CAAC,mBAAmB,EAAE,EAAE,4BAA4B,EAAE,CAAC;CAiB1E"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ContractStorageRead, ContractStorageUpdateRequest } from '@aztec/circuits.js';
|
|
2
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
3
|
+
/**
|
|
4
|
+
* Implements read/write operations on a contract public storage, collecting
|
|
5
|
+
* all read and update operations, and collapsing them into a single
|
|
6
|
+
* read or update per slot.
|
|
7
|
+
*/
|
|
8
|
+
export class ContractStorageActionsCollector {
|
|
9
|
+
constructor(db, address) {
|
|
10
|
+
this.db = db;
|
|
11
|
+
this.address = address;
|
|
12
|
+
// Map from slot to first read value
|
|
13
|
+
this.contractStorageReads = new Map();
|
|
14
|
+
// Map from slot to first read value and latest updated value
|
|
15
|
+
this.contractStorageUpdateRequests = new Map();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns the current value of a slot according to the latest update request for it,
|
|
19
|
+
* falling back to the public db. Collects the operation in storage reads,
|
|
20
|
+
* as long as there is no existing update request.
|
|
21
|
+
* @param storageSlot - Slot to check.
|
|
22
|
+
* @param sideEffectCounter - Side effect counter associated with this storage action.
|
|
23
|
+
* @returns The current value as affected by all update requests so far.
|
|
24
|
+
*/
|
|
25
|
+
async read(storageSlot, sideEffectCounter) {
|
|
26
|
+
const slot = storageSlot.value;
|
|
27
|
+
const updateRequest = this.contractStorageUpdateRequests.get(slot);
|
|
28
|
+
if (updateRequest) {
|
|
29
|
+
return updateRequest.newValue;
|
|
30
|
+
}
|
|
31
|
+
const read = this.contractStorageReads.get(slot);
|
|
32
|
+
if (read) {
|
|
33
|
+
return read.currentValue;
|
|
34
|
+
}
|
|
35
|
+
const value = await this.db.storageRead(this.address, storageSlot);
|
|
36
|
+
this.contractStorageReads.set(slot, { currentValue: value, sideEffectCounter });
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Sets a new value for a slot in the internal update requests cache,
|
|
41
|
+
* clearing any previous storage read or update operation for the same slot.
|
|
42
|
+
* @param storageSlot - Slot to write to.
|
|
43
|
+
* @param newValue - Value to write to it.
|
|
44
|
+
* @param sideEffectCounter - Side effect counter associated with this storage action.
|
|
45
|
+
*/
|
|
46
|
+
async write(storageSlot, newValue, sideEffectCounter) {
|
|
47
|
+
const slot = storageSlot.value;
|
|
48
|
+
const updateRequest = this.contractStorageUpdateRequests.get(slot);
|
|
49
|
+
if (updateRequest) {
|
|
50
|
+
this.contractStorageUpdateRequests.set(slot, { oldValue: updateRequest.oldValue, newValue, sideEffectCounter });
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const read = this.contractStorageReads.get(slot);
|
|
54
|
+
if (read) {
|
|
55
|
+
this.contractStorageReads.delete(slot);
|
|
56
|
+
this.contractStorageUpdateRequests.set(slot, { oldValue: read.currentValue, newValue, sideEffectCounter });
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const oldValue = await this.db.storageRead(this.address, storageSlot);
|
|
60
|
+
this.contractStorageUpdateRequests.set(slot, { oldValue, newValue, sideEffectCounter });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Returns all storage reads and update requests performed.
|
|
65
|
+
* @returns All storage read and update requests.
|
|
66
|
+
*/
|
|
67
|
+
collect() {
|
|
68
|
+
const reads = Array.from(this.contractStorageReads.entries()).map(([slot, valueAndCounter]) => ContractStorageRead.from({
|
|
69
|
+
storageSlot: new Fr(slot),
|
|
70
|
+
...valueAndCounter,
|
|
71
|
+
}));
|
|
72
|
+
const updateRequests = Array.from(this.contractStorageUpdateRequests.entries()).map(([slot, valuesAndCounter]) => ContractStorageUpdateRequest.from({
|
|
73
|
+
storageSlot: new Fr(slot),
|
|
74
|
+
...valuesAndCounter,
|
|
75
|
+
}));
|
|
76
|
+
return [reads, updateRequests];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVfYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvc3RhdGVfYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJOUM7Ozs7R0FJRztBQUNILE1BQU0sT0FBTywrQkFBK0I7SUFpQjFDLFlBQW9CLEVBQWlCLEVBQVUsT0FBcUI7UUFBaEQsT0FBRSxHQUFGLEVBQUUsQ0FBZTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFoQnBFLG9DQUFvQztRQUNuQix5QkFBb0IsR0FHakMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVkLDZEQUE2RDtRQUM1QyxrQ0FBNkIsR0FPMUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUV5RCxDQUFDO0lBRXhFOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQWUsRUFBRSxpQkFBeUI7UUFDMUQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUMvQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25FLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0IsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFB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
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { L1ToL2Message } from '@aztec/circuit-types';
|
|
2
|
+
import { AztecAddress, Fr } from '@aztec/circuits.js';
|
|
3
|
+
/**
|
|
4
|
+
* Test utility function to craft an L1 to L2 message.
|
|
5
|
+
* @param selector - The cross chain message selector.
|
|
6
|
+
* @param contentPreimage - The args after the selector.
|
|
7
|
+
* @param targetContract - The contract to consume the message.
|
|
8
|
+
* @param secret - The secret to unlock the message.
|
|
9
|
+
* @returns The L1 to L2 message.
|
|
10
|
+
*/
|
|
11
|
+
export declare const buildL1ToL2Message: (selector: string, contentPreimage: Fr[], targetContract: AztecAddress, secret: Fr) => L1ToL2Message;
|
|
12
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/test/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,aAAa,EAAW,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAc,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAIlE;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,aACnB,MAAM,mBACC,EAAE,EAAE,kBACL,YAAY,UACpB,EAAE,kBAoBX,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { L1Actor, L1ToL2Message, L2Actor } from '@aztec/circuit-types';
|
|
2
|
+
import { EthAddress, Fr } from '@aztec/circuits.js';
|
|
3
|
+
import { computeSecretMessageHash } from '@aztec/circuits.js/abis';
|
|
4
|
+
import { sha256 } from '@aztec/foundation/crypto';
|
|
5
|
+
/**
|
|
6
|
+
* Test utility function to craft an L1 to L2 message.
|
|
7
|
+
* @param selector - The cross chain message selector.
|
|
8
|
+
* @param contentPreimage - The args after the selector.
|
|
9
|
+
* @param targetContract - The contract to consume the message.
|
|
10
|
+
* @param secret - The secret to unlock the message.
|
|
11
|
+
* @returns The L1 to L2 message.
|
|
12
|
+
*/
|
|
13
|
+
export const buildL1ToL2Message = (selector, contentPreimage, targetContract, secret) => {
|
|
14
|
+
// Write the selector into a buffer.
|
|
15
|
+
const selectorBuf = Buffer.from(selector, 'hex');
|
|
16
|
+
const contentBuf = Buffer.concat([selectorBuf, ...contentPreimage.map(field => field.toBuffer())]);
|
|
17
|
+
const content = Fr.fromBufferReduce(sha256(contentBuf));
|
|
18
|
+
const secretHash = computeSecretMessageHash(secret);
|
|
19
|
+
// Eventually the kernel will need to prove the kernel portal pair exists within the contract tree,
|
|
20
|
+
// EthAddress.random() will need to be replaced when this happens
|
|
21
|
+
return new L1ToL2Message(new L1Actor(EthAddress.random(), 1), new L2Actor(targetContract, 1), content, secretHash, 0, 0);
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBQWdCLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQ2hDLFFBQWdCLEVBQ2hCLGVBQXFCLEVBQ3JCLGNBQTRCLEVBQzVCLE1BQVUsRUFDVixFQUFFO0lBQ0Ysb0NBQW9DO0lBQ3BDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWpELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUV4RCxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwRCxtR0FBbUc7SUFDbkcsaUVBQWlFO0lBQ2pFLE9BQU8sSUFBSSxhQUFhLENBQ3RCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFDbkMsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUM5QixPQUFPLEVBQ1AsVUFBVSxFQUNWLENBQUMsRUFDRCxDQUFDLENBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
|
package/dest/utils.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { GrumpkinPrivateKey } from '@aztec/circuits.js';
|
|
2
|
+
import { Grumpkin } from '@aztec/circuits.js/barretenberg';
|
|
3
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
+
/**
|
|
5
|
+
* A point in the format that Aztec.nr uses.
|
|
6
|
+
*/
|
|
7
|
+
export type NoirPoint = {
|
|
8
|
+
/** The x coordinate. */
|
|
9
|
+
x: bigint;
|
|
10
|
+
/** The y coordinate. */
|
|
11
|
+
y: bigint;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Computes the resulting storage slot for an entry in a mapping.
|
|
15
|
+
* @param mappingSlot - The slot of the mapping within state.
|
|
16
|
+
* @param owner - The key of the mapping.
|
|
17
|
+
* @returns The slot in the contract storage where the value is stored.
|
|
18
|
+
*/
|
|
19
|
+
export declare function computeSlotForMapping(mappingSlot: Fr, owner: NoirPoint | Fr): Fr;
|
|
20
|
+
/**
|
|
21
|
+
* Computes the public key for a private key.
|
|
22
|
+
* @param privateKey - The private key.
|
|
23
|
+
* @param grumpkin - The grumpkin instance.
|
|
24
|
+
* @returns The public key.
|
|
25
|
+
*/
|
|
26
|
+
export declare function toPublicKey(privateKey: GrumpkinPrivateKey, grumpkin: Grumpkin): NoirPoint;
|
|
27
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,EAAE,MAK3E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAMzF"}
|
package/dest/utils.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Grumpkin } from '@aztec/circuits.js/barretenberg';
|
|
2
|
+
import { pedersenHash } from '@aztec/foundation/crypto';
|
|
3
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
+
/**
|
|
5
|
+
* Computes the resulting storage slot for an entry in a mapping.
|
|
6
|
+
* @param mappingSlot - The slot of the mapping within state.
|
|
7
|
+
* @param owner - The key of the mapping.
|
|
8
|
+
* @returns The slot in the contract storage where the value is stored.
|
|
9
|
+
*/
|
|
10
|
+
export function computeSlotForMapping(mappingSlot, owner) {
|
|
11
|
+
const isFr = (owner) => typeof owner.value === 'bigint';
|
|
12
|
+
const ownerField = isFr(owner) ? owner : new Fr(owner.x);
|
|
13
|
+
return Fr.fromBuffer(pedersenHash([mappingSlot, ownerField].map(f => f.toBuffer())));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Computes the public key for a private key.
|
|
17
|
+
* @param privateKey - The private key.
|
|
18
|
+
* @param grumpkin - The grumpkin instance.
|
|
19
|
+
* @returns The public key.
|
|
20
|
+
*/
|
|
21
|
+
export function toPublicKey(privateKey, grumpkin) {
|
|
22
|
+
const point = grumpkin.mul(Grumpkin.generator, privateKey);
|
|
23
|
+
return {
|
|
24
|
+
x: point.x.value,
|
|
25
|
+
y: point.y.value,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFZOUM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsV0FBZSxFQUFFLEtBQXFCO0lBQzFFLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBcUIsRUFBZSxFQUFFLENBQUMsT0FBUSxLQUFZLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztJQUM3RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpELE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsVUFBOEIsRUFBRSxRQUFrQjtJQUM1RSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDM0QsT0FBTztRQUNMLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDaEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSztLQUNqQixDQUFDO0FBQ0osQ0FBQyJ9
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aztec/simulator",
|
|
3
|
+
"version": "0.22.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": "./dest/index.js",
|
|
6
|
+
"typedocOptions": {
|
|
7
|
+
"entryPoints": [
|
|
8
|
+
"./src/index.ts"
|
|
9
|
+
],
|
|
10
|
+
"name": "Simulator",
|
|
11
|
+
"tsconfig": "./tsconfig.json"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "yarn clean && tsc -b",
|
|
15
|
+
"build:dev": "tsc -b --watch",
|
|
16
|
+
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
17
|
+
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
18
|
+
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
19
|
+
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --passWithNoTests"
|
|
20
|
+
},
|
|
21
|
+
"inherits": [
|
|
22
|
+
"../package.common.json"
|
|
23
|
+
],
|
|
24
|
+
"jest": {
|
|
25
|
+
"preset": "ts-jest/presets/default-esm",
|
|
26
|
+
"moduleNameMapper": {
|
|
27
|
+
"^(\\.{1,2}/.*)\\.[cm]?js$": "$1"
|
|
28
|
+
},
|
|
29
|
+
"testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
|
|
30
|
+
"rootDir": "./src"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@aztec/circuit-types": "0.22.0",
|
|
34
|
+
"@aztec/circuits.js": "0.22.0",
|
|
35
|
+
"@aztec/foundation": "0.22.0",
|
|
36
|
+
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
37
|
+
"levelup": "^5.1.1",
|
|
38
|
+
"memdown": "^6.1.1",
|
|
39
|
+
"tslib": "^2.4.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@aztec/kv-store": "workspace:^",
|
|
43
|
+
"@aztec/merkle-tree": "workspace:^",
|
|
44
|
+
"@aztec/noir-contracts": "workspace:^",
|
|
45
|
+
"@jest/globals": "^29.5.0",
|
|
46
|
+
"@types/jest": "^29.5.0",
|
|
47
|
+
"@types/levelup": "^5.1.3",
|
|
48
|
+
"@types/memdown": "^3.0.2",
|
|
49
|
+
"@types/node": "^18.7.23",
|
|
50
|
+
"jest": "^29.5.0",
|
|
51
|
+
"jest-mock-extended": "^3.0.4",
|
|
52
|
+
"ts-jest": "^29.1.0",
|
|
53
|
+
"ts-node": "^10.9.1",
|
|
54
|
+
"typescript": "^5.0.4",
|
|
55
|
+
"viem": "^1.2.5"
|
|
56
|
+
},
|
|
57
|
+
"files": [
|
|
58
|
+
"dest",
|
|
59
|
+
"src",
|
|
60
|
+
"!*.test.*"
|
|
61
|
+
],
|
|
62
|
+
"types": "./dest/index.d.ts",
|
|
63
|
+
"engines": {
|
|
64
|
+
"node": ">=18"
|
|
65
|
+
}
|
|
66
|
+
}
|