@aztec/simulator 0.32.1 → 0.33.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 +5 -3
- package/dest/acvm/oracle/index.d.ts +0 -1
- package/dest/acvm/oracle/index.d.ts.map +1 -1
- package/dest/acvm/oracle/index.js +1 -2
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +2 -3
- package/dest/avm/avm_context.d.ts +4 -14
- package/dest/avm/avm_context.d.ts.map +1 -1
- package/dest/avm/avm_context.js +10 -22
- package/dest/avm/avm_gas.d.ts +71 -0
- package/dest/avm/avm_gas.d.ts.map +1 -0
- package/dest/avm/avm_gas.js +161 -0
- package/dest/avm/avm_machine_state.d.ts +4 -2
- package/dest/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/avm/avm_machine_state.js +8 -2
- package/dest/avm/avm_memory_types.d.ts +53 -1
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +95 -2
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +10 -8
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +44 -16
- package/dest/avm/opcodes/addressing_mode.d.ts +5 -3
- package/dest/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/avm/opcodes/addressing_mode.js +5 -1
- package/dest/avm/opcodes/arithmetic.d.ts +7 -3
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +27 -16
- package/dest/avm/opcodes/bitwise.d.ts +21 -20
- package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/avm/opcodes/bitwise.js +43 -65
- package/dest/avm/opcodes/comparators.d.ts +12 -9
- package/dest/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/avm/opcodes/comparators.js +22 -32
- package/dest/avm/opcodes/context_getters.d.ts +20 -0
- package/dest/avm/opcodes/context_getters.d.ts.map +1 -0
- package/dest/avm/opcodes/context_getters.js +26 -0
- package/dest/avm/opcodes/contract.d.ts +14 -0
- package/dest/avm/opcodes/contract.d.ts.map +1 -0
- package/dest/avm/opcodes/contract.js +49 -0
- package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/avm/opcodes/control_flow.js +12 -2
- package/dest/avm/opcodes/environment_getters.d.ts +30 -33
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +34 -43
- package/dest/avm/opcodes/external_calls.d.ts +13 -19
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +50 -68
- package/dest/avm/opcodes/hashing.d.ts +2 -1
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +37 -18
- package/dest/avm/opcodes/index.d.ts +1 -0
- package/dest/avm/opcodes/index.d.ts.map +1 -1
- package/dest/avm/opcodes/index.js +2 -1
- package/dest/avm/opcodes/instruction.d.ts +10 -15
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +12 -22
- package/dest/avm/opcodes/instruction_impl.d.ts +14 -0
- package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction_impl.js +37 -16
- package/dest/avm/opcodes/memory.d.ts +4 -3
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +38 -19
- package/dest/avm/opcodes/storage.d.ts +5 -0
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +21 -7
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +7 -5
- package/dest/avm/serialization/instruction_serialization.d.ts +12 -11
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +13 -12
- package/dest/avm/temporary_executor_migration.d.ts +2 -0
- package/dest/avm/temporary_executor_migration.d.ts.map +1 -1
- package/dest/avm/temporary_executor_migration.js +14 -3
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +6 -2
- package/dest/public/executor.d.ts +10 -2
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +59 -20
- package/dest/public/index.d.ts +1 -1
- package/dest/public/index.d.ts.map +1 -1
- package/package.json +15 -9
- package/src/acvm/oracle/index.ts +0 -1
- package/src/acvm/oracle/oracle.ts +1 -2
- package/src/avm/avm_context.ts +11 -33
- package/src/avm/{avm_gas_cost.ts → avm_gas.ts} +75 -21
- package/src/avm/avm_machine_state.ts +9 -2
- package/src/avm/avm_memory_types.ts +130 -2
- package/src/avm/avm_simulator.ts +9 -7
- package/src/avm/opcodes/accrued_substate.ts +57 -22
- package/src/avm/opcodes/addressing_mode.ts +8 -3
- package/src/avm/opcodes/arithmetic.ts +32 -22
- package/src/avm/opcodes/bitwise.ts +49 -83
- package/src/avm/opcodes/comparators.ts +28 -43
- package/src/avm/opcodes/context_getters.ts +32 -0
- package/src/avm/opcodes/contract.ts +58 -0
- package/src/avm/opcodes/control_flow.ts +23 -5
- package/src/avm/opcodes/environment_getters.ts +35 -44
- package/src/avm/opcodes/external_calls.ts +65 -84
- package/src/avm/opcodes/hashing.ts +45 -22
- package/src/avm/opcodes/index.ts +1 -0
- package/src/avm/opcodes/instruction.ts +14 -26
- package/src/avm/opcodes/instruction_impl.ts +45 -15
- package/src/avm/opcodes/memory.ts +48 -28
- package/src/avm/opcodes/storage.ts +26 -12
- package/src/avm/serialization/bytecode_serialization.ts +6 -3
- package/src/avm/serialization/instruction_serialization.ts +1 -0
- package/src/avm/temporary_executor_migration.ts +16 -2
- package/src/client/private_execution.ts +8 -2
- package/src/public/executor.ts +75 -22
- package/src/public/index.ts +2 -2
- package/dest/acvm/oracle/debug.d.ts +0 -19
- package/dest/acvm/oracle/debug.d.ts.map +0 -1
- package/dest/acvm/oracle/debug.js +0 -95
- package/dest/avm/avm_gas_cost.d.ts +0 -322
- package/dest/avm/avm_gas_cost.d.ts.map +0 -1
- package/dest/avm/avm_gas_cost.js +0 -118
- package/src/acvm/oracle/debug.ts +0 -109
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// All code in this file needs to die once the public executor is phased out.
|
|
2
2
|
import { UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
|
|
3
|
-
import { ContractStorageRead, ContractStorageUpdateRequest, L2ToL1Message, SideEffect, } from '@aztec/circuits.js';
|
|
3
|
+
import { ContractStorageRead, ContractStorageUpdateRequest, L2ToL1Message, SideEffect, SideEffectLinkedToNoteHash, } from '@aztec/circuits.js';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { createSimulationError } from '../common/errors.js';
|
|
6
6
|
import { AvmExecutionEnvironment } from './avm_execution_environment.js';
|
|
7
|
+
import { Mov } from './opcodes/memory.js';
|
|
7
8
|
/** Temporary Method
|
|
8
9
|
*
|
|
9
10
|
* Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
|
|
@@ -56,7 +57,7 @@ export function temporaryConvertAvmResults(execution, newWorldState, result) {
|
|
|
56
57
|
const nestedExecutions = [];
|
|
57
58
|
const nullifierReadRequests = [];
|
|
58
59
|
const nullifierNonExistentReadRequests = [];
|
|
59
|
-
const newNullifiers =
|
|
60
|
+
const newNullifiers = newWorldState.newNullifiers.map((nullifier, i) => new SideEffectLinkedToNoteHash(nullifier.toField(), Fr.zero(), new Fr(i + 1)));
|
|
60
61
|
const unencryptedLogs = UnencryptedFunctionL2Logs.empty();
|
|
61
62
|
const newL2ToL1Messages = newWorldState.newL1Messages.map(() => L2ToL1Message.empty());
|
|
62
63
|
// TODO keep track of side effect counters
|
|
@@ -80,4 +81,14 @@ export function temporaryConvertAvmResults(execution, newWorldState, result) {
|
|
|
80
81
|
revertReason: result.revertReason ? createSimulationError(result.revertReason) : undefined,
|
|
81
82
|
};
|
|
82
83
|
}
|
|
83
|
-
|
|
84
|
+
export function isAvmBytecode(bytecode) {
|
|
85
|
+
const magicBuf = Buffer.from([
|
|
86
|
+
Mov.opcode, // opcode
|
|
87
|
+
0x00, // indirect
|
|
88
|
+
...Buffer.from('000018ca', 'hex'), // srcOffset
|
|
89
|
+
...Buffer.from('000018ca', 'hex'), // dstOffset
|
|
90
|
+
]);
|
|
91
|
+
const magicSize = magicBuf.length;
|
|
92
|
+
return bytecode.subarray(-magicSize).equals(magicBuf);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG9yYXJ5X2V4ZWN1dG9yX21pZ3JhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdm0vdGVtcG9yYXJ5X2V4ZWN1dG9yX21pZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2RUFBNkU7QUFDN0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUNMLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFFNUIsYUFBYSxFQUViLFVBQVUsRUFDViwwQkFBMEIsR0FDM0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHekUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTFDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsc0NBQXNDLENBQ3BELE9BQXdCLEVBQ3hCLGVBQWdDO0lBRWhDLDBHQUEwRztJQUMxRyxPQUFPLElBQUksdUJBQXVCLENBQ2hDLE9BQU8sQ0FBQyxlQUFlLEVBQ3ZCLE9BQU8sQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQzFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLGdDQUFnQztJQUMvRCxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFDN0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUI7SUFDekMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRTtJQUMxQixnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFO0lBQzFCLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7SUFDMUIsc0JBQXNCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUNoQyxlQUFl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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private_execution.d.ts","sourceRoot":"","sources":["../../src/client/private_execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAoD,MAAM,oBAAoB,CAAC;AACzG,OAAO,
|
|
1
|
+
{"version":3,"file":"private_execution.d.ts","sourceRoot":"","sources":["../../src/client/private_execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAoD,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAgB,KAAK,iCAAiC,EAAsB,MAAM,uBAAuB,CAAC;AACjH,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAOpE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,iCAAiC,EAC3C,eAAe,EAAE,YAAY,EAC7B,YAAY,EAAE,YAAY,EAC1B,GAAG,8CAAwD,GAC1D,OAAO,CAAC,eAAe,CAAC,CA6D1B"}
|
|
@@ -31,7 +31,11 @@ export async function executePrivateFunction(context, artifact, contractAddress,
|
|
|
31
31
|
publicInputs.unencryptedLogsHash = Fr.fromBuffer(unencryptedLogs.hash());
|
|
32
32
|
publicInputs.unencryptedLogPreimagesLength = new Fr(unencryptedLogs.getSerializedLength());
|
|
33
33
|
const callStackItem = new PrivateCallStackItem(contractAddress, functionData, publicInputs);
|
|
34
|
-
|
|
34
|
+
// Mocking the return type to be an array of 4 fields
|
|
35
|
+
// TODO: @LHerskind must be updated as we are progressing with the macros to get the information
|
|
36
|
+
const returnTypes = [{ kind: 'array', length: 4, type: { kind: 'field' } }];
|
|
37
|
+
const mockArtifact = { ...artifact, returnTypes };
|
|
38
|
+
const returnValues = decodeReturnValues(mockArtifact, publicInputs.returnValues);
|
|
35
39
|
const noteHashReadRequestPartialWitnesses = context.getNoteHashReadRequestPartialWitnesses(publicInputs.noteHashReadRequests);
|
|
36
40
|
const newNotes = context.getNewNotes();
|
|
37
41
|
const nestedExecutions = context.getNestedExecutions();
|
|
@@ -51,4 +55,4 @@ export async function executePrivateFunction(context, artifact, contractAddress,
|
|
|
51
55
|
unencryptedLogs,
|
|
52
56
|
};
|
|
53
57
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9leGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L3ByaXZhdGVfZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RyxPQUFPLEVBQXdELGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakgsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsc0JBQXNCLENBQzFDLE9BQStCLEVBQy9CLFFBQTJDLEVBQzNDLGVBQTZCLEVBQzdCLFlBQTBCLEVBQzFCLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxrQ0FBa0MsQ0FBQztJQUUzRCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDL0MsR0FBRyxDQUFDLCtCQUErQixlQUFlLElBQUksZ0JBQWdCLElBQUksUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDNUYsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUMvQixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFN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
|
|
@@ -16,6 +16,7 @@ export declare class PublicExecutor {
|
|
|
16
16
|
private readonly commitmentsDb;
|
|
17
17
|
private readonly header;
|
|
18
18
|
constructor(stateDb: PublicStateDB, contractsDb: PublicContractsDB, commitmentsDb: CommitmentsDB, header: Header);
|
|
19
|
+
private readonly log;
|
|
19
20
|
/**
|
|
20
21
|
* Executes a public execution request.
|
|
21
22
|
* @param execution - The execution to run.
|
|
@@ -24,12 +25,19 @@ export declare class PublicExecutor {
|
|
|
24
25
|
*/
|
|
25
26
|
simulate(execution: PublicExecution, globalVariables: GlobalVariables, sideEffectCounter?: number): Promise<PublicExecutionResult>;
|
|
26
27
|
/**
|
|
27
|
-
* Executes a public execution request
|
|
28
|
+
* Executes a public execution request with the ACVM.
|
|
28
29
|
* @param execution - The execution to run.
|
|
29
30
|
* @param globalVariables - The global variables to use.
|
|
30
31
|
* @returns The result of the run plus all nested runs.
|
|
31
32
|
*/
|
|
32
|
-
|
|
33
|
+
private simulateAcvm;
|
|
34
|
+
/**
|
|
35
|
+
* Executes a public execution request in the AVM.
|
|
36
|
+
* @param execution - The execution to run.
|
|
37
|
+
* @param globalVariables - The global variables to use.
|
|
38
|
+
* @returns The result of the run plus all nested runs.
|
|
39
|
+
*/
|
|
40
|
+
private simulateAvm;
|
|
33
41
|
/**
|
|
34
42
|
* These functions are currently housed in the temporary executor as it relies on access to
|
|
35
43
|
* oracles like the contractsDB and this is the least intrusive way to achieve this.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/public/executor.ts"],"names":[],"mappings":";AACA,OAAO,EAAM,KAAK,eAAe,EAAE,KAAK,MAAM,EAA6B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/public/executor.ts"],"names":[],"mappings":";AACA,OAAO,EAAM,KAAK,eAAe,EAAE,KAAK,MAAM,EAA6B,MAAM,oBAAoB,CAAC;AAsBtG,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,qBAAqB,EAAwB,MAAM,gBAAgB,CAAC;AACxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,GAAG,8CAAwD,GAC1D,OAAO,CAAC,qBAAqB,CAAC,CAyHhC;AAED;;GAEG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAHN,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM;IAGjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwD;IAC5E;;;;;OAKG;IACU,QAAQ,CACnB,SAAS,EAAE,eAAe,EAC1B,eAAe,EAAE,eAAe,EAChC,iBAAiB,GAAE,MAAU,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAcjC;;;;;OAKG;YACW,YAAY;IAyC1B;;;;;OAKG;YACW,WAAW;IAuBzB;;;;;OAKG;IAEH;;;;;OAKG;IACU,WAAW,CAAC,YAAY,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgE1E;;;;;;OAMG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAgClE"}
|
package/dest/public/executor.js
CHANGED
|
@@ -10,7 +10,7 @@ import { AvmMachineState } from '../avm/avm_machine_state.js';
|
|
|
10
10
|
import { AvmSimulator } from '../avm/avm_simulator.js';
|
|
11
11
|
import { HostStorage } from '../avm/journal/host_storage.js';
|
|
12
12
|
import { AvmPersistableStateManager } from '../avm/journal/index.js';
|
|
13
|
-
import { temporaryConvertAvmResults, temporaryCreateAvmExecutionEnvironment, } from '../avm/temporary_executor_migration.js';
|
|
13
|
+
import { isAvmBytecode, temporaryConvertAvmResults, temporaryCreateAvmExecutionEnvironment, } from '../avm/temporary_executor_migration.js';
|
|
14
14
|
import { AcirSimulator } from '../client/simulator.js';
|
|
15
15
|
import { ExecutionError, createSimulationError } from '../common/errors.js';
|
|
16
16
|
import { SideEffectCounter } from '../common/index.js';
|
|
@@ -119,6 +119,7 @@ export class PublicExecutor {
|
|
|
119
119
|
this.contractsDb = contractsDb;
|
|
120
120
|
this.commitmentsDb = commitmentsDb;
|
|
121
121
|
this.header = header;
|
|
122
|
+
this.log = createDebugLogger('aztec:simulator:public_executor');
|
|
122
123
|
}
|
|
123
124
|
/**
|
|
124
125
|
* Executes a public execution request.
|
|
@@ -127,6 +128,25 @@ export class PublicExecutor {
|
|
|
127
128
|
* @returns The result of the run plus all nested runs.
|
|
128
129
|
*/
|
|
129
130
|
async simulate(execution, globalVariables, sideEffectCounter = 0) {
|
|
131
|
+
const selector = execution.functionData.selector;
|
|
132
|
+
const bytecode = await this.contractsDb.getBytecode(execution.contractAddress, selector);
|
|
133
|
+
if (!bytecode) {
|
|
134
|
+
throw new Error(`Bytecode not found for ${execution.contractAddress}:${selector}`);
|
|
135
|
+
}
|
|
136
|
+
if (isAvmBytecode(bytecode)) {
|
|
137
|
+
return await this.simulateAvm(execution, globalVariables, sideEffectCounter);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
return await this.simulateAcvm(execution, globalVariables, sideEffectCounter);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Executes a public execution request with the ACVM.
|
|
145
|
+
* @param execution - The execution to run.
|
|
146
|
+
* @param globalVariables - The global variables to use.
|
|
147
|
+
* @returns The result of the run plus all nested runs.
|
|
148
|
+
*/
|
|
149
|
+
async simulateAcvm(execution, globalVariables, sideEffectCounter = 0) {
|
|
130
150
|
const selector = execution.functionData.selector;
|
|
131
151
|
const acir = await this.contractsDb.getBytecode(execution.contractAddress, selector);
|
|
132
152
|
if (!acir) {
|
|
@@ -143,7 +163,7 @@ export class PublicExecutor {
|
|
|
143
163
|
return executionResult;
|
|
144
164
|
}
|
|
145
165
|
/**
|
|
146
|
-
* Executes a public execution request in the
|
|
166
|
+
* Executes a public execution request in the AVM.
|
|
147
167
|
* @param execution - The execution to run.
|
|
148
168
|
* @param globalVariables - The global variables to use.
|
|
149
169
|
* @returns The result of the run plus all nested runs.
|
|
@@ -155,7 +175,7 @@ export class PublicExecutor {
|
|
|
155
175
|
const worldStateJournal = new AvmPersistableStateManager(hostStorage);
|
|
156
176
|
const executionEnv = temporaryCreateAvmExecutionEnvironment(execution, globalVariables);
|
|
157
177
|
// TODO(@spalladino) Load initial gas from the public execution request
|
|
158
|
-
const machineState = new AvmMachineState(
|
|
178
|
+
const machineState = new AvmMachineState(1e10, 1e10, 1e10);
|
|
159
179
|
const context = new AvmContext(worldStateJournal, executionEnv, machineState);
|
|
160
180
|
const simulator = new AvmSimulator(context);
|
|
161
181
|
const result = await simulator.execute();
|
|
@@ -180,6 +200,7 @@ export class PublicExecutor {
|
|
|
180
200
|
const bbPath = path.resolve('../../barretenberg/cpp');
|
|
181
201
|
const artifactsPath = path.resolve('target');
|
|
182
202
|
// Create the directory if it does not exist
|
|
203
|
+
await fs.rm(artifactsPath, { recursive: true, force: true });
|
|
183
204
|
await fs.mkdir(artifactsPath, { recursive: true });
|
|
184
205
|
const calldataPath = path.join(artifactsPath, 'calldata.bin');
|
|
185
206
|
const bytecodePath = path.join(artifactsPath, 'avm_bytecode.bin');
|
|
@@ -187,23 +208,37 @@ export class PublicExecutor {
|
|
|
187
208
|
const { args, functionData, contractAddress } = avmExecution;
|
|
188
209
|
const bytecode = await this.contractsDb.getBytecode(contractAddress, functionData.selector);
|
|
189
210
|
// Write call data and bytecode to files.
|
|
190
|
-
await
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
]
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
'-b',
|
|
197
|
-
bytecodePath,
|
|
198
|
-
'-d',
|
|
199
|
-
calldataPath,
|
|
200
|
-
'-o',
|
|
201
|
-
proofPath,
|
|
202
|
-
]);
|
|
211
|
+
await fs.writeFile(calldataPath, args.map(c => c.toBuffer()));
|
|
212
|
+
await fs.writeFile(bytecodePath, bytecode);
|
|
213
|
+
const bbExec = path.join(bbPath, 'build', 'bin', 'bb');
|
|
214
|
+
const bbArgs = ['avm_prove', '-b', bytecodePath, '-d', calldataPath, '-o', proofPath];
|
|
215
|
+
this.log(`calling '${bbExec} ${bbArgs.join(' ')}'`);
|
|
216
|
+
const bbBinary = spawn(bbExec, bbArgs);
|
|
203
217
|
// The binary writes the proof and the verification key to the write path.
|
|
204
218
|
return new Promise((resolve, reject) => {
|
|
219
|
+
let stdout = '';
|
|
220
|
+
let stderr = '';
|
|
205
221
|
bbBinary.on('close', () => {
|
|
206
|
-
|
|
222
|
+
this.log(`Proof generation complete. Reading proof and vk from ${proofPath}.`);
|
|
223
|
+
return resolve(Promise.all([fs.readFile(proofPath), fs.readFile(path.join(artifactsPath, 'vk'))]));
|
|
224
|
+
});
|
|
225
|
+
// Catch stdout.
|
|
226
|
+
bbBinary.stdout.on('data', (data) => {
|
|
227
|
+
stdout += data.toString();
|
|
228
|
+
});
|
|
229
|
+
bbBinary.stdout.on('end', () => {
|
|
230
|
+
if (stdout.length > 0) {
|
|
231
|
+
this.log(`stdout: ${stdout}`);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
// Catch stderr.
|
|
235
|
+
bbBinary.stderr.on('data', (data) => {
|
|
236
|
+
stderr += data.toString();
|
|
237
|
+
});
|
|
238
|
+
bbBinary.stderr.on('end', () => {
|
|
239
|
+
if (stderr.length > 0) {
|
|
240
|
+
this.log(`stderr: ${stderr}`);
|
|
241
|
+
}
|
|
207
242
|
});
|
|
208
243
|
// Catch and propagate errors from spawning
|
|
209
244
|
bbBinary.on('error', err => {
|
|
@@ -225,8 +260,12 @@ export class PublicExecutor {
|
|
|
225
260
|
const vkPath = path.join(artifactsPath, 'vk');
|
|
226
261
|
const proofPath = path.join(artifactsPath, 'proof');
|
|
227
262
|
// Write the verification key and the proof to files.
|
|
228
|
-
await
|
|
229
|
-
|
|
263
|
+
await fs.writeFile(vkPath, vk);
|
|
264
|
+
await fs.writeFile(proofPath, proof);
|
|
265
|
+
const bbExec = path.join(bbPath, 'build', 'bin', 'bb');
|
|
266
|
+
const bbArgs = ['avm_verify', '-p', proofPath];
|
|
267
|
+
this.log(`calling '${bbPath} ${bbArgs.join(' ')}'`);
|
|
268
|
+
const bbBinary = spawn(bbExec, bbArgs);
|
|
230
269
|
// The binary prints to stdout 1 if the proof is valid and 0 if it is not.
|
|
231
270
|
return new Promise((resolve, reject) => {
|
|
232
271
|
let result = Buffer.alloc(0);
|
|
@@ -243,4 +282,4 @@ export class PublicExecutor {
|
|
|
243
282
|
});
|
|
244
283
|
}
|
|
245
284
|
}
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxFQUFFLEVBQXFDLHlCQUF5QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0IsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsc0NBQXNDLEdBQ3ZDLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENB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
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxFQUFFLEVBQXFDLHlCQUF5QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0IsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMEJBQTBCLEVBQzFCLHNDQUFzQyxHQUN2QyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFN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
|
package/dest/public/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from './db.js';
|
|
2
|
-
export { PublicExecution, PublicExecutionResult, isPublicExecutionResult, collectPublicDataReads, collectPublicDataUpdateRequests, } from './execution.js';
|
|
2
|
+
export { type PublicExecution, type PublicExecutionResult, isPublicExecutionResult, collectPublicDataReads, collectPublicDataUpdateRequests, } from './execution.js';
|
|
3
3
|
export { PublicExecutor } from './executor.js';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/public/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/public/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,uBAAuB,EACvB,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.33.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -16,24 +16,31 @@
|
|
|
16
16
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
17
17
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
18
18
|
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
19
|
-
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules
|
|
19
|
+
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests"
|
|
20
20
|
},
|
|
21
21
|
"inherits": [
|
|
22
22
|
"../package.common.json"
|
|
23
23
|
],
|
|
24
24
|
"jest": {
|
|
25
|
-
"preset": "ts-jest/presets/default-esm",
|
|
26
25
|
"moduleNameMapper": {
|
|
27
26
|
"^(\\.{1,2}/.*)\\.[cm]?js$": "$1"
|
|
28
27
|
},
|
|
29
28
|
"testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
|
|
30
|
-
"rootDir": "./src"
|
|
29
|
+
"rootDir": "./src",
|
|
30
|
+
"transform": {
|
|
31
|
+
"^.+\\.tsx?$": [
|
|
32
|
+
"@swc/jest"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"extensionsToTreatAsEsm": [
|
|
36
|
+
".ts"
|
|
37
|
+
]
|
|
31
38
|
},
|
|
32
39
|
"dependencies": {
|
|
33
|
-
"@aztec/circuit-types": "0.
|
|
34
|
-
"@aztec/circuits.js": "0.
|
|
35
|
-
"@aztec/foundation": "0.
|
|
36
|
-
"@aztec/types": "0.
|
|
40
|
+
"@aztec/circuit-types": "0.33.0",
|
|
41
|
+
"@aztec/circuits.js": "0.33.0",
|
|
42
|
+
"@aztec/foundation": "0.33.0",
|
|
43
|
+
"@aztec/types": "0.33.0",
|
|
37
44
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
38
45
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
39
46
|
"levelup": "^5.1.1",
|
|
@@ -53,7 +60,6 @@
|
|
|
53
60
|
"jest": "^29.5.0",
|
|
54
61
|
"jest-mock-extended": "^3.0.4",
|
|
55
62
|
"lodash.merge": "^4.6.2",
|
|
56
|
-
"ts-jest": "^29.1.0",
|
|
57
63
|
"ts-node": "^10.9.1",
|
|
58
64
|
"typescript": "^5.0.4",
|
|
59
65
|
"viem": "^2.7.15"
|
package/src/acvm/oracle/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
|
-
import { RETURN_VALUES_LENGTH } from '@aztec/circuits.js';
|
|
2
|
+
import { RETURN_VALUES_LENGTH, acvmFieldMessageToString, oracleDebugCallToFormattedStr } from '@aztec/circuits.js';
|
|
3
3
|
import { EventSelector, FunctionSelector } from '@aztec/foundation/abi';
|
|
4
4
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
5
5
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
@@ -9,7 +9,6 @@ import { createDebugLogger } from '@aztec/foundation/log';
|
|
|
9
9
|
import { type ACVMField } from '../acvm_types.js';
|
|
10
10
|
import { frToBoolean, frToNumber, fromACVMField } from '../deserialize.js';
|
|
11
11
|
import { toACVMField, toAcvmEnqueuePublicFunctionResult } from '../serialize.js';
|
|
12
|
-
import { acvmFieldMessageToString, oracleDebugCallToFormattedStr } from './debug.js';
|
|
13
12
|
import { type TypedOracle } from './typed_oracle.js';
|
|
14
13
|
|
|
15
14
|
/**
|
package/src/avm/avm_context.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type AztecAddress, FunctionSelector } from '@aztec/circuits.js';
|
|
|
2
2
|
import { type Fr } from '@aztec/foundation/fields';
|
|
3
3
|
|
|
4
4
|
import { type AvmExecutionEnvironment } from './avm_execution_environment.js';
|
|
5
|
+
import { type Gas, gasToGasLeft } from './avm_gas.js';
|
|
5
6
|
import { AvmMachineState } from './avm_machine_state.js';
|
|
6
7
|
import { type AvmPersistableStateManager } from './journal/journal.js';
|
|
7
8
|
|
|
@@ -33,47 +34,24 @@ export class AvmContext {
|
|
|
33
34
|
*
|
|
34
35
|
* @param address - The contract instance to initialize a context for
|
|
35
36
|
* @param calldata - Data/arguments for nested call
|
|
37
|
+
* @param allocatedGas - Gas allocated for the nested call
|
|
38
|
+
* @param callType - Type of call (CALL or STATICCALL)
|
|
36
39
|
* @returns new AvmContext instance
|
|
37
40
|
*/
|
|
38
41
|
public createNestedContractCallContext(
|
|
39
42
|
address: AztecAddress,
|
|
40
43
|
calldata: Fr[],
|
|
44
|
+
allocatedGas: Gas,
|
|
45
|
+
callType: 'CALL' | 'STATICCALL',
|
|
41
46
|
temporaryFunctionSelector: FunctionSelector = FunctionSelector.empty(),
|
|
42
47
|
): AvmContext {
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
);
|
|
48
|
+
const deriveFn =
|
|
49
|
+
callType === 'CALL'
|
|
50
|
+
? this.environment.deriveEnvironmentForNestedCall
|
|
51
|
+
: this.environment.deriveEnvironmentForNestedStaticCall;
|
|
52
|
+
const newExecutionEnvironment = deriveFn.call(this.environment, address, calldata, temporaryFunctionSelector);
|
|
48
53
|
const forkedWorldState = this.persistableState.fork();
|
|
49
|
-
const machineState = AvmMachineState.fromState(
|
|
50
|
-
return new AvmContext(forkedWorldState, newExecutionEnvironment, machineState);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Prepare a new AVM context that will be ready for an external/nested static call
|
|
55
|
-
* - Fork the world state journal
|
|
56
|
-
* - Derive a machine state from the current state
|
|
57
|
-
* - E.g., gas metering is preserved but pc is reset
|
|
58
|
-
* - Derive an execution environment from the caller/parent
|
|
59
|
-
* - Alter both address and storageAddress
|
|
60
|
-
*
|
|
61
|
-
* @param address - The contract instance to initialize a context for
|
|
62
|
-
* @param calldata - Data/arguments for nested call
|
|
63
|
-
* @returns new AvmContext instance
|
|
64
|
-
*/
|
|
65
|
-
public createNestedContractStaticCallContext(
|
|
66
|
-
address: AztecAddress,
|
|
67
|
-
calldata: Fr[],
|
|
68
|
-
temporaryFunctionSelector: FunctionSelector = FunctionSelector.empty(),
|
|
69
|
-
): AvmContext {
|
|
70
|
-
const newExecutionEnvironment = this.environment.deriveEnvironmentForNestedStaticCall(
|
|
71
|
-
address,
|
|
72
|
-
calldata,
|
|
73
|
-
temporaryFunctionSelector,
|
|
74
|
-
);
|
|
75
|
-
const forkedWorldState = this.persistableState.fork();
|
|
76
|
-
const machineState = AvmMachineState.fromState(this.machineState);
|
|
54
|
+
const machineState = AvmMachineState.fromState(gasToGasLeft(allocatedGas));
|
|
77
55
|
return new AvmContext(forkedWorldState, newExecutionEnvironment, machineState);
|
|
78
56
|
}
|
|
79
57
|
}
|