@aztec/simulator 1.0.0 → 1.1.2
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/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +3 -4
- package/dest/public/avm/fixtures/initializers.d.ts +2 -1
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
- package/dest/public/avm/fixtures/initializers.js +2 -2
- package/dest/public/avm/fixtures/utils.d.ts +2 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -1
- package/dest/public/avm/fixtures/utils.js +1 -0
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +5 -3
- package/dest/public/db_interfaces.d.ts +4 -3
- package/dest/public/db_interfaces.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +2 -3
- package/dest/public/hinting_db_sources.d.ts +2 -1
- package/dest/public/hinting_db_sources.d.ts.map +1 -1
- package/dest/public/hinting_db_sources.js +2 -2
- package/dest/public/public_db_sources.d.ts +2 -1
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +4 -2
- package/dest/public/public_tx_simulator/public_tx_context.js +1 -1
- package/dest/public/state_manager/state_manager.d.ts +4 -3
- package/dest/public/state_manager/state_manager.d.ts.map +1 -1
- package/dest/public/state_manager/state_manager.js +8 -8
- package/package.json +15 -15
- package/src/public/avm/fixtures/avm_simulation_tester.ts +3 -4
- package/src/public/avm/fixtures/initializers.ts +4 -3
- package/src/public/avm/fixtures/utils.ts +2 -0
- package/src/public/avm/opcodes/control_flow.ts +6 -4
- package/src/public/db_interfaces.ts +4 -3
- package/src/public/fixtures/public_tx_simulation_tester.ts +7 -3
- package/src/public/hinting_db_sources.ts +3 -2
- package/src/public/public_db_sources.ts +5 -2
- package/src/public/public_tx_simulator/public_tx_context.ts +1 -1
- package/src/public/state_manager/state_manager.ts +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avm_simulation_tester.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/fixtures/avm_simulation_tester.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAKjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AAEzF,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAErF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"avm_simulation_tester.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/fixtures/avm_simulation_tester.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAKjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AAEzF,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAErF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAW1E;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,uBAAuB;IAI5D,OAAO,CAAC,YAAY;gBAFpB,kBAAkB,EAAE,wBAAwB,EAC5C,WAAW,EAAE,yBAAyB,EAC9B,YAAY,EAAE,6BAA6B;WAKxC,MAAM,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBnD;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,GAAG,EAAE,EACX,YAAY,UAAQ,GACnB,OAAO,CAAC,qBAAqB,CAAC;CAsClC"}
|
|
@@ -10,8 +10,7 @@ import { PublicPersistableStateManager } from '../../state_manager/state_manager
|
|
|
10
10
|
import { AvmSimulator } from '../avm_simulator.js';
|
|
11
11
|
import { BaseAvmSimulationTester } from './base_avm_simulation_tester.js';
|
|
12
12
|
import { initContext, initExecutionEnvironment } from './initializers.js';
|
|
13
|
-
import {
|
|
14
|
-
const TIMESTAMP = 99833n;
|
|
13
|
+
import { DEFAULT_TIMESTAMP, getContractFunctionAbi, getFunctionSelector, resolveContractAssertionMessage } from './utils.js';
|
|
15
14
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
16
15
|
/**
|
|
17
16
|
* A test class that extends the BaseAvmSimulationTester to enable real-app testing of the core AvmSimulator.
|
|
@@ -29,7 +28,7 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
29
28
|
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
30
29
|
const trace = new SideEffectTrace();
|
|
31
30
|
const firstNullifier = new Fr(420000);
|
|
32
|
-
const stateManager = PublicPersistableStateManager.create(treesDB, contractsDB, trace, /*doMerkleOperations=*/ false, firstNullifier,
|
|
31
|
+
const stateManager = PublicPersistableStateManager.create(treesDB, contractsDB, trace, /*doMerkleOperations=*/ false, firstNullifier, DEFAULT_TIMESTAMP);
|
|
33
32
|
return new AvmSimulationTester(contractDataSource, merkleTrees, stateManager);
|
|
34
33
|
}
|
|
35
34
|
/**
|
|
@@ -47,7 +46,7 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
47
46
|
...encodedArgs
|
|
48
47
|
];
|
|
49
48
|
const globals = GlobalVariables.empty();
|
|
50
|
-
globals.timestamp =
|
|
49
|
+
globals.timestamp = DEFAULT_TIMESTAMP;
|
|
51
50
|
globals.gasFees = DEFAULT_GAS_FEES;
|
|
52
51
|
const environment = initExecutionEnvironment({
|
|
53
52
|
calldata,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
2
2
|
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
3
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
3
4
|
import type { PublicContractsDB, PublicTreesDB } from '../../public_db_sources.js';
|
|
4
5
|
import type { PublicSideEffectTraceInterface } from '../../side_effect_trace_interface.js';
|
|
5
6
|
import { NullifierManager } from '../../state_manager/nullifiers.js';
|
|
@@ -25,7 +26,7 @@ export declare function initPersistableStateManager(overrides?: {
|
|
|
25
26
|
nullifiers?: NullifierManager;
|
|
26
27
|
doMerkleOperations?: boolean;
|
|
27
28
|
firstNullifier?: Fr;
|
|
28
|
-
|
|
29
|
+
timestamp?: UInt64;
|
|
29
30
|
}): PublicPersistableStateManager;
|
|
30
31
|
/**
|
|
31
32
|
* Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializers.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/fixtures/initializers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"initializers.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/fixtures/initializers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI1D;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,CAAC,EAAE;IACtC,gBAAgB,CAAC,EAAE,6BAA6B,CAAC;IACjD,GAAG,CAAC,EAAE,uBAAuB,CAAC;IAC9B,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC,GAAG,UAAU,CAQb;AAED,+DAA+D;AAC/D,wBAAgB,2BAA2B,CAAC,SAAS,CAAC,EAAE;IACtD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,KAAK,CAAC,EAAE,8BAA8B,CAAC;IACvC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,6BAA6B,CAYhC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAW9G;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAWzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAKtF"}
|
|
@@ -10,7 +10,7 @@ import { AvmContext } from '../avm_context.js';
|
|
|
10
10
|
import { AvmExecutionEnvironment } from '../avm_execution_environment.js';
|
|
11
11
|
import { AvmMachineState } from '../avm_machine_state.js';
|
|
12
12
|
import { AvmSimulator } from '../avm_simulator.js';
|
|
13
|
-
import {
|
|
13
|
+
import { DEFAULT_TIMESTAMP } from './utils.js';
|
|
14
14
|
/**
|
|
15
15
|
* Create a new AVM context with default values.
|
|
16
16
|
*/ export function initContext(overrides) {
|
|
@@ -20,7 +20,7 @@ import { DEFAULT_BLOCK_NUMBER } from './utils.js';
|
|
|
20
20
|
}
|
|
21
21
|
/** Creates an empty state manager with mocked host storage. */ export function initPersistableStateManager(overrides) {
|
|
22
22
|
const treesDB = overrides?.treesDB || mock();
|
|
23
|
-
return new PublicPersistableStateManager(treesDB, overrides?.contractsDB || mock(), overrides?.trace || mock(), overrides?.firstNullifier || new Fr(27), overrides?.
|
|
23
|
+
return new PublicPersistableStateManager(treesDB, overrides?.contractsDB || mock(), overrides?.trace || mock(), overrides?.firstNullifier || new Fr(27), overrides?.timestamp || DEFAULT_TIMESTAMP, overrides?.doMerkleOperations || false, overrides?.publicStorage, overrides?.nullifiers);
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
|
|
@@ -2,9 +2,11 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
2
2
|
import { type ContractArtifact, type FunctionAbi, type FunctionArtifact, FunctionSelector } from '@aztec/stdlib/abi';
|
|
3
3
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
import { type ContractClassPublic, type ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
5
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
5
6
|
import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js';
|
|
6
7
|
import type { AvmRevertReason } from '../errors.js';
|
|
7
8
|
export declare const PUBLIC_DISPATCH_FN_NAME = "public_dispatch";
|
|
9
|
+
export declare const DEFAULT_TIMESTAMP: UInt64;
|
|
8
10
|
export declare const DEFAULT_BLOCK_NUMBER = 42;
|
|
9
11
|
/**
|
|
10
12
|
* Create a new object with all the same properties as the original, except for the ones in the overrides object.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/fixtures/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAEjC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/fixtures/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAEjC,MAAM,wBAAwB,CAAC;AAKhC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMlD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,uBAAuB,oBAAoB,CAAC;AACzD,eAAO,MAAM,iBAAiB,EAAE,MAAe,CAAC;AAChD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,GAAG,CAEhE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,CAE1D;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CAK3B;AAED,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,gBAAgB,GACjC,gBAAgB,GAAG,SAAS,CAE9B;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,gBAAgB,GACjC,WAAW,GAAG,SAAS,CAKzB;AAED,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,eAAe,EAC7B,MAAM,EAAE,EAAE,EAAE,EACZ,gBAAgB,EAAE,gBAAgB,GACjC,MAAM,GAAG,SAAS,CAWpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,8BAA8B,CAClD,eAAe,EAAE,GAAG,EAAE,EACtB,QAAQ,EAAE,YAAY,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,SAAI,EACR,uBAAuB,CAAC,EAAE,EAAE,GAC3B,OAAO,CAAC;IACT,aAAa,EAAE,mBAAmB,CAAC;IACnC,gBAAgB,EAAE,2BAA2B,CAAC;IAC9C,wBAAwB,EAAE,EAAE,CAAC;CAC9B,CAAC,CA4BD"}
|
|
@@ -12,6 +12,7 @@ import merge from 'lodash.merge';
|
|
|
12
12
|
import { resolveAssertionMessageFromRevertData, traverseCauseChain } from '../../../common/index.js';
|
|
13
13
|
import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js';
|
|
14
14
|
export const PUBLIC_DISPATCH_FN_NAME = 'public_dispatch';
|
|
15
|
+
export const DEFAULT_TIMESTAMP = 99833n;
|
|
15
16
|
export const DEFAULT_BLOCK_NUMBER = 42;
|
|
16
17
|
/**
|
|
17
18
|
* Create a new object with all the same properties as the original, except for the ones in the overrides object.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control_flow.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/control_flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,IAAK,SAAQ,WAAW;IAMvB,OAAO,CAAC,UAAU;IAL9B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAkB;IAEhD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAA2C;gBAEhE,UAAU,EAAE,MAAM;IAIzB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,SAAS,IAAI,OAAO;CAGrC;AAED,qBAAa,KAAM,SAAQ,WAAW;IAalC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,GAAG;IAdb,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAmB;IAGjD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM;IAKR,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"control_flow.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/control_flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,IAAK,SAAQ,WAAW;IAMvB,OAAO,CAAC,UAAU;IAL9B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAkB;IAEhD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAA2C;gBAEhE,UAAU,EAAE,MAAM;IAIzB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,SAAS,IAAI,OAAO;CAGrC;AAED,qBAAa,KAAM,SAAQ,WAAW;IAalC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,GAAG;IAdb,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAmB;IAGjD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM;IAKR,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxC,SAAS,IAAI,OAAO;CAGrC;AAED,qBAAa,YAAa,SAAQ,WAAW;IAM/B,OAAO,CAAC,GAAG;IALvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAuB;IAErD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAA2C;gBAEhE,GAAG,EAAE,MAAM;IAIlB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxC,SAAS,IAAI,OAAO;CAGrC;AAED,qBAAa,cAAe,SAAQ,WAAW;IAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAoB;IAChD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAyB;IAEvD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAAuB;;IAMnD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxC,SAAS,IAAI,OAAO;CAGrC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TypeTag } from '../avm_memory_types.js';
|
|
1
2
|
import { InstructionExecutionError } from '../errors.js';
|
|
2
3
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
4
|
import { Addressing } from './addressing_mode.js';
|
|
@@ -45,9 +46,10 @@ export class JumpI extends Instruction {
|
|
|
45
46
|
const operands = [
|
|
46
47
|
this.condOffset
|
|
47
48
|
];
|
|
48
|
-
const [
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
const [resolvedCondOffset] = addressing.resolve(operands, memory);
|
|
50
|
+
memory.checkTag(TypeTag.UINT1, resolvedCondOffset);
|
|
51
|
+
const condition = memory.getAs(resolvedCondOffset);
|
|
52
|
+
if (condition.toNumber() == 0) {
|
|
51
53
|
context.machineState.pc = context.machineState.nextPc;
|
|
52
54
|
} else {
|
|
53
55
|
context.machineState.pc = this.loc;
|
|
@@ -2,6 +2,7 @@ import type { Fr } from '@aztec/foundation/fields';
|
|
|
2
2
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
3
3
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
5
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
5
6
|
/**
|
|
6
7
|
* Database interface for providing access to public state.
|
|
7
8
|
*/
|
|
@@ -26,12 +27,12 @@ export interface PublicStateDBInterface {
|
|
|
26
27
|
*/
|
|
27
28
|
export interface PublicContractsDBInterface {
|
|
28
29
|
/**
|
|
29
|
-
* Returns a
|
|
30
|
+
* Returns a contract instance given its address and the given timestamp, or undefined if not exists.
|
|
30
31
|
* @param address - Address of the contract.
|
|
31
|
-
* @param
|
|
32
|
+
* @param timestamp - Timestamp to get the contract instance at. Contract updates might change the instance.
|
|
32
33
|
* @returns The contract instance or undefined if not found.
|
|
33
34
|
*/
|
|
34
|
-
getContractInstance(address: AztecAddress,
|
|
35
|
+
getContractInstance(address: AztecAddress, timestamp: UInt64): Promise<ContractInstanceWithAddress | undefined>;
|
|
35
36
|
/**
|
|
36
37
|
* Returns a publicly deployed contract class.
|
|
37
38
|
* @param contractClassId - ID of the contract class.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db_interfaces.d.ts","sourceRoot":"","sources":["../../src/public/db_interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"db_interfaces.d.ts","sourceRoot":"","sources":["../../src/public/db_interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAE3D;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAAC;IAEhH;;;;OAIG;IACH,gBAAgB,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IAEhF;;;;OAIG;IACH,qBAAqB,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAEpE;;;;;OAKG;IACH,oBAAoB,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAmB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAiC,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAG3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAmB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAiC,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAG3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AASxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,KAAK,qBAAqB,EAA0B,MAAM,YAAY,CAAC;AAIhF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,uBAAuB;;IASjE,OAAO,CAAC,OAAO;IARjB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,aAAa,CAAC,CAAS;gBAG7B,UAAU,EAAE,yBAAyB,EACrC,kBAAkB,EAAE,wBAAwB,EAC5C,OAAO,GAAE,eAAkC,EACnC,OAAO,GAAE,mBAA+C;WAgB9C,MAAM,CACxB,OAAO,GAAE,eAAkC,EAC3C,OAAO,GAAE,mBAA+C,GACvD,OAAO,CAAC,wBAAwB,CAAC;IAM7B,gBAAgB,CAAC,MAAM,EAAE,MAAM;IAIzB,QAAQ,CACnB,MAAM,EAAE,YAAY,EACpB,UAAU,GAAE,gBAAgB,EAAO,EACnC,QAAQ,GAAE,gBAAgB,EAAO,EACjC,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,GAAE,YAAqB,EAE/B,iBAAiB,GAAE,qBAA4F,GAC9G,OAAO,CAAC,EAAE,CAAC;IAsBD,UAAU,CACrB,MAAM,EAAE,YAAY,EACpB,UAAU,GAAE,gBAAgB,EAAO,EACnC,QAAQ,GAAE,gBAAgB,EAAO,EACjC,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,GAAE,YAAqB,EAE/B,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,OAAO,GAAE,MAAsB,GAC9B,OAAO,CAAC,cAAc,CAAC;IAyBb,mBAAmB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,EAC7B,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,CAAC,EAAE,YAAY,EACvB,iBAAiB,CAAC,EAAE,qBAAqB,GACxC,OAAO,CAAC,cAAc,CAAC;IAInB,kBAAkB;CAuB1B;AAED,wBAAgB,cAAc,oBAM7B"}
|
|
@@ -6,13 +6,12 @@ import { PublicCallRequest } from '@aztec/stdlib/kernel';
|
|
|
6
6
|
import { GlobalVariables, PublicCallRequestWithCalldata } from '@aztec/stdlib/tx';
|
|
7
7
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
8
8
|
import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
|
|
9
|
-
import { DEFAULT_BLOCK_NUMBER, getContractFunctionAbi, getFunctionSelector } from '../avm/fixtures/utils.js';
|
|
9
|
+
import { DEFAULT_BLOCK_NUMBER, DEFAULT_TIMESTAMP, getContractFunctionAbi, getFunctionSelector } from '../avm/fixtures/utils.js';
|
|
10
10
|
import { PublicContractsDB } from '../public_db_sources.js';
|
|
11
11
|
import { MeasuredPublicTxSimulator } from '../public_tx_simulator/measured_public_tx_simulator.js';
|
|
12
12
|
import { TestExecutorMetrics } from '../test_executor_metrics.js';
|
|
13
13
|
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
14
14
|
import { createTxForPublicCalls } from './utils.js';
|
|
15
|
-
const TIMESTAMP = 99833n;
|
|
16
15
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
17
16
|
/**
|
|
18
17
|
* A test class that extends the BaseAvmSimulationTester to enable real-app testing of the PublicTxSimulator.
|
|
@@ -92,7 +91,7 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
92
91
|
}
|
|
93
92
|
export function defaultGlobals() {
|
|
94
93
|
const globals = GlobalVariables.empty();
|
|
95
|
-
globals.timestamp =
|
|
94
|
+
globals.timestamp = DEFAULT_TIMESTAMP;
|
|
96
95
|
globals.gasFees = DEFAULT_GAS_FEES; // apply some nonzero default gas fees
|
|
97
96
|
globals.blockNumber = DEFAULT_BLOCK_NUMBER;
|
|
98
97
|
return globals;
|
|
@@ -5,6 +5,7 @@ import { type AvmExecutionHints } from '@aztec/stdlib/avm';
|
|
|
5
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
6
|
import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
7
7
|
import { type BatchInsertionResult, type IndexedTreeId, MerkleTreeId, type MerkleTreeLeafType, type MerkleTreeWriteOperations, type SequentialInsertionResult, type TreeHeights } from '@aztec/stdlib/trees';
|
|
8
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
8
9
|
import type { PublicContractsDBInterface } from './db_interfaces.js';
|
|
9
10
|
/**
|
|
10
11
|
* A public contracts database that forwards requests and collects AVM hints.
|
|
@@ -14,7 +15,7 @@ export declare class HintingPublicContractsDB implements PublicContractsDBInterf
|
|
|
14
15
|
private hints;
|
|
15
16
|
private contractClassIds;
|
|
16
17
|
constructor(db: PublicContractsDBInterface, hints: AvmExecutionHints);
|
|
17
|
-
getContractInstance(address: AztecAddress,
|
|
18
|
+
getContractInstance(address: AztecAddress, timestamp: UInt64): Promise<ContractInstanceWithAddress | undefined>;
|
|
18
19
|
getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined>;
|
|
19
20
|
getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined>;
|
|
20
21
|
getDebugFunctionName(contractAddress: AztecAddress, selector: FunctionSelector): Promise<string | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hinting_db_sources.d.ts","sourceRoot":"","sources":["../../src/public/hinting_db_sources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAOL,KAAK,iBAAiB,EASvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAK9B,KAAK,yBAAyB,EAC9B,KAAK,WAAW,EAGjB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"hinting_db_sources.d.ts","sourceRoot":"","sources":["../../src/public/hinting_db_sources.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,8 +17,8 @@ import { strict as assert } from 'assert';
|
|
|
17
17
|
this.hints = hints;
|
|
18
18
|
this.contractClassIds = new Set();
|
|
19
19
|
}
|
|
20
|
-
async getContractInstance(address,
|
|
21
|
-
const instance = await this.db.getContractInstance(address,
|
|
20
|
+
async getContractInstance(address, timestamp) {
|
|
21
|
+
const instance = await this.db.getContractInstance(address, timestamp);
|
|
22
22
|
if (instance) {
|
|
23
23
|
// We don't need to hint the block number because it doesn't change.
|
|
24
24
|
this.hints.contractInstances.push(new AvmContractInstanceHint(instance.address, instance.salt, instance.deployer, instance.currentContractClassId, instance.originalContractClassId, instance.initializationHash, instance.publicKeys));
|
|
@@ -5,6 +5,7 @@ import { type ContractClassPublic, type ContractDataSource, type ContractInstanc
|
|
|
5
5
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
6
6
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
7
7
|
import { TreeSnapshots, type Tx } from '@aztec/stdlib/tx';
|
|
8
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
8
9
|
import type { PublicContractsDBInterface, PublicStateDBInterface } from './db_interfaces.js';
|
|
9
10
|
/**
|
|
10
11
|
* Implements the PublicContractsDBInterface using a ContractDataSource.
|
|
@@ -82,7 +83,7 @@ export declare class PublicContractsDB implements PublicContractsDBInterface {
|
|
|
82
83
|
* Then, clears the tx cache.
|
|
83
84
|
*/
|
|
84
85
|
commitContractsForTx(onlyNonRevertibles?: boolean): void;
|
|
85
|
-
getContractInstance(address: AztecAddress,
|
|
86
|
+
getContractInstance(address: AztecAddress, timestamp: UInt64): Promise<ContractInstanceWithAddress | undefined>;
|
|
86
87
|
getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined>;
|
|
87
88
|
getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined>;
|
|
88
89
|
getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public_db_sources.d.ts","sourceRoot":"","sources":["../../src/public/public_db_sources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAK9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAEjC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAGjF,OAAO,EACL,YAAY,EAKb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"public_db_sources.d.ts","sourceRoot":"","sources":["../../src/public/public_db_sources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAK9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAEjC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAGjF,OAAO,EACL,YAAY,EAKb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG7F;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,0BAA0B;IAgBtD,OAAO,CAAC,UAAU;IAR9B,OAAO,CAAC,2BAA2B,CAAyB;IAC5D,OAAO,CAAC,wBAAwB,CAAyB;IACzD,OAAO,CAAC,UAAU,CAAyB;IAE3C,OAAO,CAAC,uBAAuB,CAAyB;IAExD,OAAO,CAAC,GAAG,CAAmD;gBAE1C,UAAU,EAAE,kBAAkB;IAElD;;;OAGG;IACU,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD;;;OAGG;IACU,4BAA4B,CAAC,EAAE,EAAE,EAAE;IAKhD;;;OAGG;IACU,yBAAyB,CAAC,EAAE,EAAE,EAAE;IAK7C;;;;OAIG;YACW,+BAA+B;IAO7C;;;;OAIG;YACW,4BAA4B;IAK1C;;;;OAIG;IACH,OAAO,CAAC,iCAAiC;IAQzC;;;;OAIG;IACH,OAAO,CAAC,8BAA8B;IAQtC;;;;;OAKG;YACW,0BAA0B;IAoBxC;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;IAcpC;;OAEG;IACI,mBAAmB;IAM1B;;;OAGG;IACI,oBAAoB,CAAC,kBAAkB,GAAE,OAAe;IAuBlD,mBAAmB,CAC9B,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC;IAUtC,gBAAgB,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAU/E,qBAAqB,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAyBnE,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAGlH;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,YAAW,sBAAsB;IAG9C,OAAO,CAAC,QAAQ,CAAC,EAAE;IAF/B,OAAO,CAAC,MAAM,CAA6C;gBAE9B,EAAE,EAAE,yBAAyB;IAE7C,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IA2B1D,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3E,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAc9D,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAcvD,aAAa,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1C,oBAAoB,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBrD,cAAc,CAAC,eAAe,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlD,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCpE,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;CASxD"}
|
|
@@ -148,9 +148,11 @@ import { TxContractCache } from './tx_contract_cache.js';
|
|
|
148
148
|
// to the constructor right now. If we can make this class more private, we should
|
|
149
149
|
// reconsider this. A litmus test is in how many places we need to initialize with a
|
|
150
150
|
// dummy block number (tests or not) and pass block numbers to `super`.
|
|
151
|
-
|
|
151
|
+
// Note: Block number got changed to timestamp so this comment ^ is outdated. Keeping
|
|
152
|
+
// the comment as is as I am not part of the AVM cabal.
|
|
153
|
+
async getContractInstance(address, timestamp) {
|
|
152
154
|
// Check caches in order: tx revertible -> tx non-revertible -> block -> data source
|
|
153
|
-
return this.currentTxRevertibleCache.getInstance(address) ?? this.currentTxNonRevertibleCache.getInstance(address) ?? this.blockCache.getInstance(address) ?? await this.dataSource.getContract(address,
|
|
155
|
+
return this.currentTxRevertibleCache.getInstance(address) ?? this.currentTxNonRevertibleCache.getInstance(address) ?? this.blockCache.getInstance(address) ?? await this.dataSource.getContract(address, timestamp);
|
|
154
156
|
}
|
|
155
157
|
async getContractClass(contractClassId) {
|
|
156
158
|
// Check caches in order: tx revertible -> tx non-revertible -> block -> data source
|
|
@@ -68,7 +68,7 @@ import { getCallRequestsWithCalldataByPhase } from '../utils.js';
|
|
|
68
68
|
const trace = new SideEffectTrace();
|
|
69
69
|
const firstNullifier = nonRevertibleAccumulatedDataFromPrivate.nullifiers[0];
|
|
70
70
|
// Transaction level state manager that will be forked for revertible phases.
|
|
71
|
-
const txStateManager = PublicPersistableStateManager.create(treesDB, contractsDB, trace, doMerkleOperations, firstNullifier, globalVariables.
|
|
71
|
+
const txStateManager = PublicPersistableStateManager.create(treesDB, contractsDB, trace, doMerkleOperations, firstNullifier, globalVariables.timestamp);
|
|
72
72
|
const gasSettings = tx.data.constants.txContext.gasSettings;
|
|
73
73
|
const gasUsedByPrivate = tx.data.gasUsed;
|
|
74
74
|
// Gas allocated to public is "whatever's left" after private, but with some max applied.
|
|
@@ -5,6 +5,7 @@ import { SerializableContractInstance } from '@aztec/stdlib/contract';
|
|
|
5
5
|
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
6
6
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
7
7
|
import type { TreeSnapshots } from '@aztec/stdlib/tx';
|
|
8
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
8
9
|
import type { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
9
10
|
import type { PublicContractsDBInterface } from '../db_interfaces.js';
|
|
10
11
|
import type { PublicTreesDB } from '../public_db_sources.js';
|
|
@@ -25,7 +26,7 @@ export declare class PublicPersistableStateManager {
|
|
|
25
26
|
private readonly contractsDB;
|
|
26
27
|
private readonly trace;
|
|
27
28
|
private readonly firstNullifier;
|
|
28
|
-
private readonly
|
|
29
|
+
private readonly timestamp;
|
|
29
30
|
private readonly doMerkleOperations;
|
|
30
31
|
private readonly publicStorage;
|
|
31
32
|
private readonly nullifiers;
|
|
@@ -33,12 +34,12 @@ export declare class PublicPersistableStateManager {
|
|
|
33
34
|
/** Make sure a forked state is never merged twice. */
|
|
34
35
|
private alreadyMergedIntoParent;
|
|
35
36
|
constructor(treesDB: PublicTreesDB, contractsDB: PublicContractsDBInterface, trace: PublicSideEffectTraceInterface, firstNullifier: Fr, // Needed for note hashes.
|
|
36
|
-
|
|
37
|
+
timestamp: UInt64, // Needed for contract updates.
|
|
37
38
|
doMerkleOperations?: boolean, publicStorage?: PublicStorage, nullifiers?: NullifierManager);
|
|
38
39
|
/**
|
|
39
40
|
* Create a new state manager
|
|
40
41
|
*/
|
|
41
|
-
static create(treesDB: PublicTreesDB, contractsDB: PublicContractsDBInterface, trace: PublicSideEffectTraceInterface, doMerkleOperations: boolean | undefined, firstNullifier: Fr,
|
|
42
|
+
static create(treesDB: PublicTreesDB, contractsDB: PublicContractsDBInterface, trace: PublicSideEffectTraceInterface, doMerkleOperations: boolean | undefined, firstNullifier: Fr, timestamp: UInt64): PublicPersistableStateManager;
|
|
42
43
|
/**
|
|
43
44
|
* Create a new state manager forked from this one
|
|
44
45
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state_manager.d.ts","sourceRoot":"","sources":["../../../src/public/state_manager/state_manager.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAI9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,iCAAiC,EAA+B,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"state_manager.d.ts","sourceRoot":"","sources":["../../../src/public/state_manager/state_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,18 +24,18 @@ import { PublicStorage } from './public_storage.js';
|
|
|
24
24
|
contractsDB;
|
|
25
25
|
trace;
|
|
26
26
|
firstNullifier;
|
|
27
|
-
|
|
27
|
+
timestamp;
|
|
28
28
|
doMerkleOperations;
|
|
29
29
|
publicStorage;
|
|
30
30
|
nullifiers;
|
|
31
31
|
log;
|
|
32
32
|
/** Make sure a forked state is never merged twice. */ alreadyMergedIntoParent;
|
|
33
|
-
constructor(treesDB, contractsDB, trace, firstNullifier,
|
|
33
|
+
constructor(treesDB, contractsDB, trace, firstNullifier, timestamp, doMerkleOperations = false, publicStorage = new PublicStorage(treesDB), nullifiers = new NullifierManager(treesDB)){
|
|
34
34
|
this.treesDB = treesDB;
|
|
35
35
|
this.contractsDB = contractsDB;
|
|
36
36
|
this.trace = trace;
|
|
37
37
|
this.firstNullifier = firstNullifier;
|
|
38
|
-
this.
|
|
38
|
+
this.timestamp = timestamp;
|
|
39
39
|
this.doMerkleOperations = doMerkleOperations;
|
|
40
40
|
this.publicStorage = publicStorage;
|
|
41
41
|
this.nullifiers = nullifiers;
|
|
@@ -44,14 +44,14 @@ import { PublicStorage } from './public_storage.js';
|
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* Create a new state manager
|
|
47
|
-
*/ static create(treesDB, contractsDB, trace, doMerkleOperations = false, firstNullifier,
|
|
48
|
-
return new PublicPersistableStateManager(treesDB, contractsDB, trace, firstNullifier,
|
|
47
|
+
*/ static create(treesDB, contractsDB, trace, doMerkleOperations = false, firstNullifier, timestamp) {
|
|
48
|
+
return new PublicPersistableStateManager(treesDB, contractsDB, trace, firstNullifier, timestamp, doMerkleOperations);
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* Create a new state manager forked from this one
|
|
52
52
|
*/ async fork() {
|
|
53
53
|
await this.treesDB.createCheckpoint();
|
|
54
|
-
return new PublicPersistableStateManager(this.treesDB, this.contractsDB, this.trace.fork(), this.firstNullifier, this.
|
|
54
|
+
return new PublicPersistableStateManager(this.treesDB, this.contractsDB, this.trace.fork(), this.firstNullifier, this.timestamp, this.doMerkleOperations, this.publicStorage.fork(), this.nullifiers.fork());
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Accept forked world state modifications & traced side effects / hints
|
|
@@ -240,7 +240,7 @@ import { PublicStorage } from './public_storage.js';
|
|
|
240
240
|
* @returns the contract instance or undefined if it does not exist.
|
|
241
241
|
*/ async getContractInstance(contractAddress) {
|
|
242
242
|
this.log.trace(`Getting contract instance for address ${contractAddress}`);
|
|
243
|
-
const instanceWithAddress = await this.contractsDB.getContractInstance(contractAddress, this.
|
|
243
|
+
const instanceWithAddress = await this.contractsDB.getContractInstance(contractAddress, this.timestamp);
|
|
244
244
|
const exists = instanceWithAddress !== undefined;
|
|
245
245
|
const instance = exists ? new SerializableContractInstance(instanceWithAddress) : undefined;
|
|
246
246
|
if (!exists) {
|
|
@@ -290,7 +290,7 @@ import { PublicStorage } from './public_storage.js';
|
|
|
290
290
|
const computedHash = await poseidon2Hash(preImage);
|
|
291
291
|
assert(hash.equals(computedHash), `Shared mutable values hash mismatch for contract instance ${instance.address}. Expected: ${hash}, computed: ${computedHash}`);
|
|
292
292
|
// We now check that, depending on the current block, the current class id is correct.
|
|
293
|
-
const expectedClassIdRaw = sharedMutableValues.svc.getCurrentAt(this.
|
|
293
|
+
const expectedClassIdRaw = sharedMutableValues.svc.getCurrentAt(this.timestamp).at(0);
|
|
294
294
|
const expectedClassId = expectedClassIdRaw.isZero() ? instance.originalContractClassId : expectedClassIdRaw;
|
|
295
295
|
assert(instance.currentContractClassId.equals(expectedClassId), `Current class id mismatch
|
|
296
296
|
for contract instance ${instance.address}. Expected: ${expectedClassId}, current: ${instance.currentContractClassId}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./server": "./dest/server.js",
|
|
@@ -62,25 +62,25 @@
|
|
|
62
62
|
]
|
|
63
63
|
},
|
|
64
64
|
"dependencies": {
|
|
65
|
-
"@aztec/constants": "1.
|
|
66
|
-
"@aztec/foundation": "1.
|
|
67
|
-
"@aztec/noir-acvm_js": "1.
|
|
68
|
-
"@aztec/noir-noirc_abi": "1.
|
|
69
|
-
"@aztec/noir-protocol-circuits-types": "1.
|
|
70
|
-
"@aztec/noir-types": "1.
|
|
71
|
-
"@aztec/protocol-contracts": "1.
|
|
72
|
-
"@aztec/stdlib": "1.
|
|
73
|
-
"@aztec/telemetry-client": "1.
|
|
74
|
-
"@aztec/world-state": "1.
|
|
65
|
+
"@aztec/constants": "1.1.2",
|
|
66
|
+
"@aztec/foundation": "1.1.2",
|
|
67
|
+
"@aztec/noir-acvm_js": "1.1.2",
|
|
68
|
+
"@aztec/noir-noirc_abi": "1.1.2",
|
|
69
|
+
"@aztec/noir-protocol-circuits-types": "1.1.2",
|
|
70
|
+
"@aztec/noir-types": "1.1.2",
|
|
71
|
+
"@aztec/protocol-contracts": "1.1.2",
|
|
72
|
+
"@aztec/stdlib": "1.1.2",
|
|
73
|
+
"@aztec/telemetry-client": "1.1.2",
|
|
74
|
+
"@aztec/world-state": "1.1.2",
|
|
75
75
|
"lodash.clonedeep": "^4.5.0",
|
|
76
76
|
"lodash.merge": "^4.6.2",
|
|
77
77
|
"tslib": "^2.4.0"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@aztec/kv-store": "1.
|
|
81
|
-
"@aztec/merkle-tree": "1.
|
|
82
|
-
"@aztec/noir-contracts.js": "1.
|
|
83
|
-
"@aztec/noir-test-contracts.js": "1.
|
|
80
|
+
"@aztec/kv-store": "1.1.2",
|
|
81
|
+
"@aztec/merkle-tree": "1.1.2",
|
|
82
|
+
"@aztec/noir-contracts.js": "1.1.2",
|
|
83
|
+
"@aztec/noir-test-contracts.js": "1.1.2",
|
|
84
84
|
"@jest/globals": "^30.0.0",
|
|
85
85
|
"@types/jest": "^30.0.0",
|
|
86
86
|
"@types/lodash.clonedeep": "^4.5.7",
|
|
@@ -15,13 +15,12 @@ import { AvmSimulator } from '../avm_simulator.js';
|
|
|
15
15
|
import { BaseAvmSimulationTester } from './base_avm_simulation_tester.js';
|
|
16
16
|
import { initContext, initExecutionEnvironment } from './initializers.js';
|
|
17
17
|
import {
|
|
18
|
-
|
|
18
|
+
DEFAULT_TIMESTAMP,
|
|
19
19
|
getContractFunctionAbi,
|
|
20
20
|
getFunctionSelector,
|
|
21
21
|
resolveContractAssertionMessage,
|
|
22
22
|
} from './utils.js';
|
|
23
23
|
|
|
24
|
-
const TIMESTAMP = 99833n;
|
|
25
24
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
26
25
|
|
|
27
26
|
/**
|
|
@@ -52,7 +51,7 @@ export class AvmSimulationTester extends BaseAvmSimulationTester {
|
|
|
52
51
|
trace,
|
|
53
52
|
/*doMerkleOperations=*/ false,
|
|
54
53
|
firstNullifier,
|
|
55
|
-
|
|
54
|
+
DEFAULT_TIMESTAMP,
|
|
56
55
|
);
|
|
57
56
|
return new AvmSimulationTester(contractDataSource, merkleTrees, stateManager);
|
|
58
57
|
}
|
|
@@ -77,7 +76,7 @@ export class AvmSimulationTester extends BaseAvmSimulationTester {
|
|
|
77
76
|
const calldata = [fnSelector.toField(), ...encodedArgs];
|
|
78
77
|
|
|
79
78
|
const globals = GlobalVariables.empty();
|
|
80
|
-
globals.timestamp =
|
|
79
|
+
globals.timestamp = DEFAULT_TIMESTAMP;
|
|
81
80
|
globals.gasFees = DEFAULT_GAS_FEES;
|
|
82
81
|
|
|
83
82
|
const environment = initExecutionEnvironment({
|
|
@@ -4,6 +4,7 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
4
4
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
5
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
6
6
|
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
7
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
7
8
|
|
|
8
9
|
import { mock } from 'jest-mock-extended';
|
|
9
10
|
|
|
@@ -16,7 +17,7 @@ import { AvmContext } from '../avm_context.js';
|
|
|
16
17
|
import { AvmExecutionEnvironment } from '../avm_execution_environment.js';
|
|
17
18
|
import { AvmMachineState } from '../avm_machine_state.js';
|
|
18
19
|
import { AvmSimulator } from '../avm_simulator.js';
|
|
19
|
-
import {
|
|
20
|
+
import { DEFAULT_TIMESTAMP } from './utils.js';
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* Create a new AVM context with default values.
|
|
@@ -44,7 +45,7 @@ export function initPersistableStateManager(overrides?: {
|
|
|
44
45
|
nullifiers?: NullifierManager;
|
|
45
46
|
doMerkleOperations?: boolean;
|
|
46
47
|
firstNullifier?: Fr;
|
|
47
|
-
|
|
48
|
+
timestamp?: UInt64;
|
|
48
49
|
}): PublicPersistableStateManager {
|
|
49
50
|
const treesDB = overrides?.treesDB || mock<PublicTreesDB>();
|
|
50
51
|
return new PublicPersistableStateManager(
|
|
@@ -52,7 +53,7 @@ export function initPersistableStateManager(overrides?: {
|
|
|
52
53
|
overrides?.contractsDB || mock<PublicContractsDB>(),
|
|
53
54
|
overrides?.trace || mock<PublicSideEffectTraceInterface>(),
|
|
54
55
|
overrides?.firstNullifier || new Fr(27),
|
|
55
|
-
overrides?.
|
|
56
|
+
overrides?.timestamp || DEFAULT_TIMESTAMP,
|
|
56
57
|
overrides?.doMerkleOperations || false,
|
|
57
58
|
overrides?.publicStorage,
|
|
58
59
|
overrides?.nullifiers,
|
|
@@ -17,6 +17,7 @@ import { isNoirCallStackUnresolved } from '@aztec/stdlib/errors';
|
|
|
17
17
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
18
18
|
import { deriveKeys } from '@aztec/stdlib/keys';
|
|
19
19
|
import { makeContractClassPublic, makeContractInstanceFromClassId } from '@aztec/stdlib/testing';
|
|
20
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
20
21
|
|
|
21
22
|
import { strict as assert } from 'assert';
|
|
22
23
|
import merge from 'lodash.merge';
|
|
@@ -26,6 +27,7 @@ import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js';
|
|
|
26
27
|
import type { AvmRevertReason } from '../errors.js';
|
|
27
28
|
|
|
28
29
|
export const PUBLIC_DISPATCH_FN_NAME = 'public_dispatch';
|
|
30
|
+
export const DEFAULT_TIMESTAMP: UInt64 = 99833n;
|
|
29
31
|
export const DEFAULT_BLOCK_NUMBER = 42;
|
|
30
32
|
|
|
31
33
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import type
|
|
2
|
+
import { TypeTag, type Uint1 } from '../avm_memory_types.js';
|
|
3
3
|
import { InstructionExecutionError } from '../errors.js';
|
|
4
4
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
5
5
|
import { Addressing } from './addressing_mode.js';
|
|
@@ -55,10 +55,12 @@ export class JumpI extends Instruction {
|
|
|
55
55
|
);
|
|
56
56
|
|
|
57
57
|
const operands = [this.condOffset];
|
|
58
|
-
const [
|
|
59
|
-
const condition = memory.getAs<IntegralValue>(condOffset);
|
|
58
|
+
const [resolvedCondOffset] = addressing.resolve(operands, memory);
|
|
60
59
|
|
|
61
|
-
|
|
60
|
+
memory.checkTag(TypeTag.UINT1, resolvedCondOffset);
|
|
61
|
+
const condition = memory.getAs<Uint1>(resolvedCondOffset);
|
|
62
|
+
|
|
63
|
+
if (condition.toNumber() == 0) {
|
|
62
64
|
context.machineState.pc = context.machineState.nextPc;
|
|
63
65
|
} else {
|
|
64
66
|
context.machineState.pc = this.loc;
|
|
@@ -2,6 +2,7 @@ import type { Fr } from '@aztec/foundation/fields';
|
|
|
2
2
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
3
3
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
5
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Database interface for providing access to public state.
|
|
@@ -29,12 +30,12 @@ export interface PublicStateDBInterface {
|
|
|
29
30
|
*/
|
|
30
31
|
export interface PublicContractsDBInterface {
|
|
31
32
|
/**
|
|
32
|
-
* Returns a
|
|
33
|
+
* Returns a contract instance given its address and the given timestamp, or undefined if not exists.
|
|
33
34
|
* @param address - Address of the contract.
|
|
34
|
-
* @param
|
|
35
|
+
* @param timestamp - Timestamp to get the contract instance at. Contract updates might change the instance.
|
|
35
36
|
* @returns The contract instance or undefined if not found.
|
|
36
37
|
*/
|
|
37
|
-
getContractInstance(address: AztecAddress,
|
|
38
|
+
getContractInstance(address: AztecAddress, timestamp: UInt64): Promise<ContractInstanceWithAddress | undefined>;
|
|
38
39
|
|
|
39
40
|
/**
|
|
40
41
|
* Returns a publicly deployed contract class.
|
|
@@ -9,7 +9,12 @@ import { GlobalVariables, PublicCallRequestWithCalldata, type Tx } from '@aztec/
|
|
|
9
9
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
10
10
|
|
|
11
11
|
import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
DEFAULT_BLOCK_NUMBER,
|
|
14
|
+
DEFAULT_TIMESTAMP,
|
|
15
|
+
getContractFunctionAbi,
|
|
16
|
+
getFunctionSelector,
|
|
17
|
+
} from '../avm/fixtures/utils.js';
|
|
13
18
|
import { PublicContractsDB } from '../public_db_sources.js';
|
|
14
19
|
import { MeasuredPublicTxSimulator } from '../public_tx_simulator/measured_public_tx_simulator.js';
|
|
15
20
|
import type { PublicTxResult } from '../public_tx_simulator/public_tx_simulator.js';
|
|
@@ -17,7 +22,6 @@ import { TestExecutorMetrics } from '../test_executor_metrics.js';
|
|
|
17
22
|
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
18
23
|
import { type TestPrivateInsertions, createTxForPublicCalls } from './utils.js';
|
|
19
24
|
|
|
20
|
-
const TIMESTAMP = 99833n;
|
|
21
25
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
22
26
|
|
|
23
27
|
export type TestEnqueuedCall = {
|
|
@@ -175,7 +179,7 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
175
179
|
|
|
176
180
|
export function defaultGlobals() {
|
|
177
181
|
const globals = GlobalVariables.empty();
|
|
178
|
-
globals.timestamp =
|
|
182
|
+
globals.timestamp = DEFAULT_TIMESTAMP;
|
|
179
183
|
globals.gasFees = DEFAULT_GAS_FEES; // apply some nonzero default gas fees
|
|
180
184
|
globals.blockNumber = DEFAULT_BLOCK_NUMBER;
|
|
181
185
|
return globals;
|
|
@@ -39,6 +39,7 @@ import {
|
|
|
39
39
|
merkleTreeIds,
|
|
40
40
|
} from '@aztec/stdlib/trees';
|
|
41
41
|
import { TreeSnapshots } from '@aztec/stdlib/tx';
|
|
42
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
42
43
|
|
|
43
44
|
import { strict as assert } from 'assert';
|
|
44
45
|
|
|
@@ -58,9 +59,9 @@ export class HintingPublicContractsDB implements PublicContractsDBInterface {
|
|
|
58
59
|
|
|
59
60
|
public async getContractInstance(
|
|
60
61
|
address: AztecAddress,
|
|
61
|
-
|
|
62
|
+
timestamp: UInt64,
|
|
62
63
|
): Promise<ContractInstanceWithAddress | undefined> {
|
|
63
|
-
const instance = await this.db.getContractInstance(address,
|
|
64
|
+
const instance = await this.db.getContractInstance(address, timestamp);
|
|
64
65
|
if (instance) {
|
|
65
66
|
// We don't need to hint the block number because it doesn't change.
|
|
66
67
|
this.hints.contractInstances.push(
|
|
@@ -25,6 +25,7 @@ import {
|
|
|
25
25
|
getTreeName,
|
|
26
26
|
} from '@aztec/stdlib/trees';
|
|
27
27
|
import { TreeSnapshots, type Tx } from '@aztec/stdlib/tx';
|
|
28
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
28
29
|
|
|
29
30
|
import type { PublicContractsDBInterface, PublicStateDBInterface } from './db_interfaces.js';
|
|
30
31
|
import { TxContractCache } from './tx_contract_cache.js';
|
|
@@ -210,16 +211,18 @@ export class PublicContractsDB implements PublicContractsDBInterface {
|
|
|
210
211
|
// to the constructor right now. If we can make this class more private, we should
|
|
211
212
|
// reconsider this. A litmus test is in how many places we need to initialize with a
|
|
212
213
|
// dummy block number (tests or not) and pass block numbers to `super`.
|
|
214
|
+
// Note: Block number got changed to timestamp so this comment ^ is outdated. Keeping
|
|
215
|
+
// the comment as is as I am not part of the AVM cabal.
|
|
213
216
|
public async getContractInstance(
|
|
214
217
|
address: AztecAddress,
|
|
215
|
-
|
|
218
|
+
timestamp: UInt64,
|
|
216
219
|
): Promise<ContractInstanceWithAddress | undefined> {
|
|
217
220
|
// Check caches in order: tx revertible -> tx non-revertible -> block -> data source
|
|
218
221
|
return (
|
|
219
222
|
this.currentTxRevertibleCache.getInstance(address) ??
|
|
220
223
|
this.currentTxNonRevertibleCache.getInstance(address) ??
|
|
221
224
|
this.blockCache.getInstance(address) ??
|
|
222
|
-
(await this.dataSource.getContract(address,
|
|
225
|
+
(await this.dataSource.getContract(address, timestamp))
|
|
223
226
|
);
|
|
224
227
|
}
|
|
225
228
|
|
|
@@ -19,6 +19,7 @@ import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
|
19
19
|
import { SharedMutableValues, SharedMutableValuesWithHash } from '@aztec/stdlib/shared-mutable';
|
|
20
20
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
21
21
|
import type { TreeSnapshots } from '@aztec/stdlib/tx';
|
|
22
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
22
23
|
|
|
23
24
|
import { strict as assert } from 'assert';
|
|
24
25
|
|
|
@@ -50,7 +51,7 @@ export class PublicPersistableStateManager {
|
|
|
50
51
|
private readonly contractsDB: PublicContractsDBInterface,
|
|
51
52
|
private readonly trace: PublicSideEffectTraceInterface,
|
|
52
53
|
private readonly firstNullifier: Fr, // Needed for note hashes.
|
|
53
|
-
private readonly
|
|
54
|
+
private readonly timestamp: UInt64, // Needed for contract updates.
|
|
54
55
|
private readonly doMerkleOperations: boolean = false,
|
|
55
56
|
private readonly publicStorage: PublicStorage = new PublicStorage(treesDB),
|
|
56
57
|
private readonly nullifiers: NullifierManager = new NullifierManager(treesDB),
|
|
@@ -65,14 +66,14 @@ export class PublicPersistableStateManager {
|
|
|
65
66
|
trace: PublicSideEffectTraceInterface,
|
|
66
67
|
doMerkleOperations: boolean = false,
|
|
67
68
|
firstNullifier: Fr,
|
|
68
|
-
|
|
69
|
+
timestamp: UInt64,
|
|
69
70
|
): PublicPersistableStateManager {
|
|
70
71
|
return new PublicPersistableStateManager(
|
|
71
72
|
treesDB,
|
|
72
73
|
contractsDB,
|
|
73
74
|
trace,
|
|
74
75
|
firstNullifier,
|
|
75
|
-
|
|
76
|
+
timestamp,
|
|
76
77
|
doMerkleOperations,
|
|
77
78
|
);
|
|
78
79
|
}
|
|
@@ -87,7 +88,7 @@ export class PublicPersistableStateManager {
|
|
|
87
88
|
this.contractsDB,
|
|
88
89
|
this.trace.fork(),
|
|
89
90
|
this.firstNullifier,
|
|
90
|
-
this.
|
|
91
|
+
this.timestamp,
|
|
91
92
|
this.doMerkleOperations,
|
|
92
93
|
this.publicStorage.fork(),
|
|
93
94
|
this.nullifiers.fork(),
|
|
@@ -335,7 +336,7 @@ export class PublicPersistableStateManager {
|
|
|
335
336
|
*/
|
|
336
337
|
public async getContractInstance(contractAddress: AztecAddress): Promise<SerializableContractInstance | undefined> {
|
|
337
338
|
this.log.trace(`Getting contract instance for address ${contractAddress}`);
|
|
338
|
-
const instanceWithAddress = await this.contractsDB.getContractInstance(contractAddress, this.
|
|
339
|
+
const instanceWithAddress = await this.contractsDB.getContractInstance(contractAddress, this.timestamp);
|
|
339
340
|
const exists = instanceWithAddress !== undefined;
|
|
340
341
|
|
|
341
342
|
const instance = exists ? new SerializableContractInstance(instanceWithAddress) : undefined;
|
|
@@ -413,7 +414,7 @@ export class PublicPersistableStateManager {
|
|
|
413
414
|
);
|
|
414
415
|
|
|
415
416
|
// We now check that, depending on the current block, the current class id is correct.
|
|
416
|
-
const expectedClassIdRaw = sharedMutableValues.svc.getCurrentAt(this.
|
|
417
|
+
const expectedClassIdRaw = sharedMutableValues.svc.getCurrentAt(this.timestamp).at(0)!;
|
|
417
418
|
const expectedClassId = expectedClassIdRaw.isZero() ? instance.originalContractClassId : expectedClassIdRaw;
|
|
418
419
|
assert(
|
|
419
420
|
instance.currentContractClassId.equals(expectedClassId),
|