@aztec/simulator 1.0.0-staging.2 → 1.0.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/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +4 -3
- package/dest/public/avm/fixtures/initializers.d.ts +1 -2
- 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 +0 -2
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -1
- package/dest/public/avm/fixtures/utils.js +0 -1
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +3 -5
- package/dest/public/db_interfaces.d.ts +3 -4
- 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 +3 -2
- package/dest/public/hinting_db_sources.d.ts +1 -2
- 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 +1 -2
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +2 -4
- package/dest/public/public_tx_simulator/public_tx_context.js +1 -1
- package/dest/public/state_manager/state_manager.d.ts +3 -4
- 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 +4 -3
- package/src/public/avm/fixtures/initializers.ts +3 -4
- package/src/public/avm/fixtures/utils.ts +0 -2
- package/src/public/avm/opcodes/control_flow.ts +4 -6
- package/src/public/db_interfaces.ts +3 -4
- package/src/public/fixtures/public_tx_simulation_tester.ts +3 -7
- package/src/public/hinting_db_sources.ts +2 -3
- package/src/public/public_db_sources.ts +2 -5
- package/src/public/public_tx_simulator/public_tx_context.ts +1 -1
- package/src/public/state_manager/state_manager.ts +6 -7
|
@@ -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;AAY1E;;;;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,7 +10,8 @@ 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 {
|
|
13
|
+
import { DEFAULT_BLOCK_NUMBER, getContractFunctionAbi, getFunctionSelector, resolveContractAssertionMessage } from './utils.js';
|
|
14
|
+
const TIMESTAMP = 99833n;
|
|
14
15
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
15
16
|
/**
|
|
16
17
|
* A test class that extends the BaseAvmSimulationTester to enable real-app testing of the core AvmSimulator.
|
|
@@ -28,7 +29,7 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
28
29
|
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
29
30
|
const trace = new SideEffectTrace();
|
|
30
31
|
const firstNullifier = new Fr(420000);
|
|
31
|
-
const stateManager = PublicPersistableStateManager.create(treesDB, contractsDB, trace, /*doMerkleOperations=*/ false, firstNullifier,
|
|
32
|
+
const stateManager = PublicPersistableStateManager.create(treesDB, contractsDB, trace, /*doMerkleOperations=*/ false, firstNullifier, DEFAULT_BLOCK_NUMBER);
|
|
32
33
|
return new AvmSimulationTester(contractDataSource, merkleTrees, stateManager);
|
|
33
34
|
}
|
|
34
35
|
/**
|
|
@@ -46,7 +47,7 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
46
47
|
...encodedArgs
|
|
47
48
|
];
|
|
48
49
|
const globals = GlobalVariables.empty();
|
|
49
|
-
globals.timestamp =
|
|
50
|
+
globals.timestamp = TIMESTAMP;
|
|
50
51
|
globals.gasFees = DEFAULT_GAS_FEES;
|
|
51
52
|
const environment = initExecutionEnvironment({
|
|
52
53
|
calldata,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
2
2
|
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
3
|
-
import type { UInt64 } from '@aztec/stdlib/types';
|
|
4
3
|
import type { PublicContractsDB, PublicTreesDB } from '../../public_db_sources.js';
|
|
5
4
|
import type { PublicSideEffectTraceInterface } from '../../side_effect_trace_interface.js';
|
|
6
5
|
import { NullifierManager } from '../../state_manager/nullifiers.js';
|
|
@@ -26,7 +25,7 @@ export declare function initPersistableStateManager(overrides?: {
|
|
|
26
25
|
nullifiers?: NullifierManager;
|
|
27
26
|
doMerkleOperations?: boolean;
|
|
28
27
|
firstNullifier?: Fr;
|
|
29
|
-
|
|
28
|
+
blockNumber?: number;
|
|
30
29
|
}): PublicPersistableStateManager;
|
|
31
30
|
/**
|
|
32
31
|
* 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;AAInD,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,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,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_BLOCK_NUMBER } 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_TIMESTAMP } 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?.blockNumber || DEFAULT_BLOCK_NUMBER, 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,11 +2,9 @@ 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';
|
|
6
5
|
import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js';
|
|
7
6
|
import type { AvmRevertReason } from '../errors.js';
|
|
8
7
|
export declare const PUBLIC_DISPATCH_FN_NAME = "public_dispatch";
|
|
9
|
-
export declare const DEFAULT_TIMESTAMP: UInt64;
|
|
10
8
|
export declare const DEFAULT_BLOCK_NUMBER = 42;
|
|
11
9
|
/**
|
|
12
10
|
* 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;AAUhC,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,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,7 +12,6 @@ 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;
|
|
16
15
|
export const DEFAULT_BLOCK_NUMBER = 42;
|
|
17
16
|
/**
|
|
18
17
|
* 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;IAmBxC,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,4 +1,3 @@
|
|
|
1
|
-
import { TypeTag } from '../avm_memory_types.js';
|
|
2
1
|
import { InstructionExecutionError } from '../errors.js';
|
|
3
2
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
3
|
import { Addressing } from './addressing_mode.js';
|
|
@@ -46,10 +45,9 @@ export class JumpI extends Instruction {
|
|
|
46
45
|
const operands = [
|
|
47
46
|
this.condOffset
|
|
48
47
|
];
|
|
49
|
-
const [
|
|
50
|
-
memory.
|
|
51
|
-
|
|
52
|
-
if (condition.toNumber() == 0) {
|
|
48
|
+
const [condOffset] = addressing.resolve(operands, memory);
|
|
49
|
+
const condition = memory.getAs(condOffset);
|
|
50
|
+
if (condition.toBigInt() == 0n) {
|
|
53
51
|
context.machineState.pc = context.machineState.nextPc;
|
|
54
52
|
} else {
|
|
55
53
|
context.machineState.pc = this.loc;
|
|
@@ -2,7 +2,6 @@ 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';
|
|
6
5
|
/**
|
|
7
6
|
* Database interface for providing access to public state.
|
|
8
7
|
*/
|
|
@@ -27,12 +26,12 @@ export interface PublicStateDBInterface {
|
|
|
27
26
|
*/
|
|
28
27
|
export interface PublicContractsDBInterface {
|
|
29
28
|
/**
|
|
30
|
-
* Returns a contract instance
|
|
29
|
+
* Returns a publicly deployed contract instance.
|
|
31
30
|
* @param address - Address of the contract.
|
|
32
|
-
* @param
|
|
31
|
+
* @param blockNumber - The block number at which to retrieve the contract instance.
|
|
33
32
|
* @returns The contract instance or undefined if not found.
|
|
34
33
|
*/
|
|
35
|
-
getContractInstance(address: AztecAddress,
|
|
34
|
+
getContractInstance(address: AztecAddress, blockNumber: number): Promise<ContractInstanceWithAddress | undefined>;
|
|
36
35
|
/**
|
|
37
36
|
* Returns a publicly deployed contract class.
|
|
38
37
|
* @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;AAE/F;;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,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAAC;IAElH;;;;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;AAIxF,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;AAKhF,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,12 +6,13 @@ 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,
|
|
9
|
+
import { DEFAULT_BLOCK_NUMBER, 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;
|
|
15
16
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
16
17
|
/**
|
|
17
18
|
* A test class that extends the BaseAvmSimulationTester to enable real-app testing of the PublicTxSimulator.
|
|
@@ -91,7 +92,7 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
91
92
|
}
|
|
92
93
|
export function defaultGlobals() {
|
|
93
94
|
const globals = GlobalVariables.empty();
|
|
94
|
-
globals.timestamp =
|
|
95
|
+
globals.timestamp = TIMESTAMP;
|
|
95
96
|
globals.gasFees = DEFAULT_GAS_FEES; // apply some nonzero default gas fees
|
|
96
97
|
globals.blockNumber = DEFAULT_BLOCK_NUMBER;
|
|
97
98
|
return globals;
|
|
@@ -5,7 +5,6 @@ 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';
|
|
9
8
|
import type { PublicContractsDBInterface } from './db_interfaces.js';
|
|
10
9
|
/**
|
|
11
10
|
* A public contracts database that forwards requests and collects AVM hints.
|
|
@@ -15,7 +14,7 @@ export declare class HintingPublicContractsDB implements PublicContractsDBInterf
|
|
|
15
14
|
private hints;
|
|
16
15
|
private contractClassIds;
|
|
17
16
|
constructor(db: PublicContractsDBInterface, hints: AvmExecutionHints);
|
|
18
|
-
getContractInstance(address: AztecAddress,
|
|
17
|
+
getContractInstance(address: AztecAddress, blockNumber: number): Promise<ContractInstanceWithAddress | undefined>;
|
|
19
18
|
getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined>;
|
|
20
19
|
getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined>;
|
|
21
20
|
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, blockNumber) {
|
|
21
|
+
const instance = await this.db.getContractInstance(address, blockNumber);
|
|
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,7 +5,6 @@ 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';
|
|
9
8
|
import type { PublicContractsDBInterface, PublicStateDBInterface } from './db_interfaces.js';
|
|
10
9
|
/**
|
|
11
10
|
* Implements the PublicContractsDBInterface using a ContractDataSource.
|
|
@@ -83,7 +82,7 @@ export declare class PublicContractsDB implements PublicContractsDBInterface {
|
|
|
83
82
|
* Then, clears the tx cache.
|
|
84
83
|
*/
|
|
85
84
|
commitContractsForTx(onlyNonRevertibles?: boolean): void;
|
|
86
|
-
getContractInstance(address: AztecAddress,
|
|
85
|
+
getContractInstance(address: AztecAddress, blockNumber: number): Promise<ContractInstanceWithAddress | undefined>;
|
|
87
86
|
getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined>;
|
|
88
87
|
getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined>;
|
|
89
88
|
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":"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"}
|
|
@@ -148,11 +148,9 @@ 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
|
-
|
|
152
|
-
// the comment as is as I am not part of the AVM cabal.
|
|
153
|
-
async getContractInstance(address, timestamp) {
|
|
151
|
+
async getContractInstance(address, blockNumber) {
|
|
154
152
|
// Check caches in order: tx revertible -> tx non-revertible -> block -> data source
|
|
155
|
-
return this.currentTxRevertibleCache.getInstance(address) ?? this.currentTxNonRevertibleCache.getInstance(address) ?? this.blockCache.getInstance(address) ?? await this.dataSource.getContract(address,
|
|
153
|
+
return this.currentTxRevertibleCache.getInstance(address) ?? this.currentTxNonRevertibleCache.getInstance(address) ?? this.blockCache.getInstance(address) ?? await this.dataSource.getContract(address, blockNumber);
|
|
156
154
|
}
|
|
157
155
|
async getContractClass(contractClassId) {
|
|
158
156
|
// 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.blockNumber);
|
|
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,7 +5,6 @@ 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';
|
|
9
8
|
import type { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
10
9
|
import type { PublicContractsDBInterface } from '../db_interfaces.js';
|
|
11
10
|
import type { PublicTreesDB } from '../public_db_sources.js';
|
|
@@ -26,7 +25,7 @@ export declare class PublicPersistableStateManager {
|
|
|
26
25
|
private readonly contractsDB;
|
|
27
26
|
private readonly trace;
|
|
28
27
|
private readonly firstNullifier;
|
|
29
|
-
private readonly
|
|
28
|
+
private readonly blockNumber;
|
|
30
29
|
private readonly doMerkleOperations;
|
|
31
30
|
private readonly publicStorage;
|
|
32
31
|
private readonly nullifiers;
|
|
@@ -34,12 +33,12 @@ export declare class PublicPersistableStateManager {
|
|
|
34
33
|
/** Make sure a forked state is never merged twice. */
|
|
35
34
|
private alreadyMergedIntoParent;
|
|
36
35
|
constructor(treesDB: PublicTreesDB, contractsDB: PublicContractsDBInterface, trace: PublicSideEffectTraceInterface, firstNullifier: Fr, // Needed for note hashes.
|
|
37
|
-
|
|
36
|
+
blockNumber: number, // Needed for contract updates.
|
|
38
37
|
doMerkleOperations?: boolean, publicStorage?: PublicStorage, nullifiers?: NullifierManager);
|
|
39
38
|
/**
|
|
40
39
|
* Create a new state manager
|
|
41
40
|
*/
|
|
42
|
-
static create(treesDB: PublicTreesDB, contractsDB: PublicContractsDBInterface, trace: PublicSideEffectTraceInterface, doMerkleOperations: boolean | undefined, firstNullifier: Fr,
|
|
41
|
+
static create(treesDB: PublicTreesDB, contractsDB: PublicContractsDBInterface, trace: PublicSideEffectTraceInterface, doMerkleOperations: boolean | undefined, firstNullifier: Fr, blockNumber: number): PublicPersistableStateManager;
|
|
43
42
|
/**
|
|
44
43
|
* Create a new state manager forked from this one
|
|
45
44
|
*/
|
|
@@ -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
|
+
blockNumber;
|
|
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, blockNumber, 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.blockNumber = blockNumber;
|
|
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, blockNumber) {
|
|
48
|
+
return new PublicPersistableStateManager(treesDB, contractsDB, trace, firstNullifier, blockNumber, 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.blockNumber, 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.blockNumber);
|
|
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.blockNumber).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.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
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.0.0
|
|
66
|
-
"@aztec/foundation": "1.0.0
|
|
67
|
-
"@aztec/noir-acvm_js": "1.0.0
|
|
68
|
-
"@aztec/noir-noirc_abi": "1.0.0
|
|
69
|
-
"@aztec/noir-protocol-circuits-types": "1.0.0
|
|
70
|
-
"@aztec/noir-types": "1.0.0
|
|
71
|
-
"@aztec/protocol-contracts": "1.0.0
|
|
72
|
-
"@aztec/stdlib": "1.0.0
|
|
73
|
-
"@aztec/telemetry-client": "1.0.0
|
|
74
|
-
"@aztec/world-state": "1.0.0
|
|
65
|
+
"@aztec/constants": "1.0.0",
|
|
66
|
+
"@aztec/foundation": "1.0.0",
|
|
67
|
+
"@aztec/noir-acvm_js": "1.0.0",
|
|
68
|
+
"@aztec/noir-noirc_abi": "1.0.0",
|
|
69
|
+
"@aztec/noir-protocol-circuits-types": "1.0.0",
|
|
70
|
+
"@aztec/noir-types": "1.0.0",
|
|
71
|
+
"@aztec/protocol-contracts": "1.0.0",
|
|
72
|
+
"@aztec/stdlib": "1.0.0",
|
|
73
|
+
"@aztec/telemetry-client": "1.0.0",
|
|
74
|
+
"@aztec/world-state": "1.0.0",
|
|
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.0.0
|
|
81
|
-
"@aztec/merkle-tree": "1.0.0
|
|
82
|
-
"@aztec/noir-contracts.js": "1.0.0
|
|
83
|
-
"@aztec/noir-test-contracts.js": "1.0.0
|
|
80
|
+
"@aztec/kv-store": "1.0.0",
|
|
81
|
+
"@aztec/merkle-tree": "1.0.0",
|
|
82
|
+
"@aztec/noir-contracts.js": "1.0.0",
|
|
83
|
+
"@aztec/noir-test-contracts.js": "1.0.0",
|
|
84
84
|
"@jest/globals": "^30.0.0",
|
|
85
85
|
"@types/jest": "^30.0.0",
|
|
86
86
|
"@types/lodash.clonedeep": "^4.5.7",
|
|
@@ -15,12 +15,13 @@ 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_BLOCK_NUMBER,
|
|
19
19
|
getContractFunctionAbi,
|
|
20
20
|
getFunctionSelector,
|
|
21
21
|
resolveContractAssertionMessage,
|
|
22
22
|
} from './utils.js';
|
|
23
23
|
|
|
24
|
+
const TIMESTAMP = 99833n;
|
|
24
25
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
25
26
|
|
|
26
27
|
/**
|
|
@@ -51,7 +52,7 @@ export class AvmSimulationTester extends BaseAvmSimulationTester {
|
|
|
51
52
|
trace,
|
|
52
53
|
/*doMerkleOperations=*/ false,
|
|
53
54
|
firstNullifier,
|
|
54
|
-
|
|
55
|
+
DEFAULT_BLOCK_NUMBER,
|
|
55
56
|
);
|
|
56
57
|
return new AvmSimulationTester(contractDataSource, merkleTrees, stateManager);
|
|
57
58
|
}
|
|
@@ -76,7 +77,7 @@ export class AvmSimulationTester extends BaseAvmSimulationTester {
|
|
|
76
77
|
const calldata = [fnSelector.toField(), ...encodedArgs];
|
|
77
78
|
|
|
78
79
|
const globals = GlobalVariables.empty();
|
|
79
|
-
globals.timestamp =
|
|
80
|
+
globals.timestamp = TIMESTAMP;
|
|
80
81
|
globals.gasFees = DEFAULT_GAS_FEES;
|
|
81
82
|
|
|
82
83
|
const environment = initExecutionEnvironment({
|
|
@@ -4,7 +4,6 @@ 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';
|
|
8
7
|
|
|
9
8
|
import { mock } from 'jest-mock-extended';
|
|
10
9
|
|
|
@@ -17,7 +16,7 @@ import { AvmContext } from '../avm_context.js';
|
|
|
17
16
|
import { AvmExecutionEnvironment } from '../avm_execution_environment.js';
|
|
18
17
|
import { AvmMachineState } from '../avm_machine_state.js';
|
|
19
18
|
import { AvmSimulator } from '../avm_simulator.js';
|
|
20
|
-
import {
|
|
19
|
+
import { DEFAULT_BLOCK_NUMBER } from './utils.js';
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
22
|
* Create a new AVM context with default values.
|
|
@@ -45,7 +44,7 @@ export function initPersistableStateManager(overrides?: {
|
|
|
45
44
|
nullifiers?: NullifierManager;
|
|
46
45
|
doMerkleOperations?: boolean;
|
|
47
46
|
firstNullifier?: Fr;
|
|
48
|
-
|
|
47
|
+
blockNumber?: number;
|
|
49
48
|
}): PublicPersistableStateManager {
|
|
50
49
|
const treesDB = overrides?.treesDB || mock<PublicTreesDB>();
|
|
51
50
|
return new PublicPersistableStateManager(
|
|
@@ -53,7 +52,7 @@ export function initPersistableStateManager(overrides?: {
|
|
|
53
52
|
overrides?.contractsDB || mock<PublicContractsDB>(),
|
|
54
53
|
overrides?.trace || mock<PublicSideEffectTraceInterface>(),
|
|
55
54
|
overrides?.firstNullifier || new Fr(27),
|
|
56
|
-
overrides?.
|
|
55
|
+
overrides?.blockNumber || DEFAULT_BLOCK_NUMBER,
|
|
57
56
|
overrides?.doMerkleOperations || false,
|
|
58
57
|
overrides?.publicStorage,
|
|
59
58
|
overrides?.nullifiers,
|
|
@@ -17,7 +17,6 @@ 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';
|
|
21
20
|
|
|
22
21
|
import { strict as assert } from 'assert';
|
|
23
22
|
import merge from 'lodash.merge';
|
|
@@ -27,7 +26,6 @@ import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js';
|
|
|
27
26
|
import type { AvmRevertReason } from '../errors.js';
|
|
28
27
|
|
|
29
28
|
export const PUBLIC_DISPATCH_FN_NAME = 'public_dispatch';
|
|
30
|
-
export const DEFAULT_TIMESTAMP: UInt64 = 99833n;
|
|
31
29
|
export const DEFAULT_BLOCK_NUMBER = 42;
|
|
32
30
|
|
|
33
31
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import {
|
|
2
|
+
import type { IntegralValue } 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,12 +55,10 @@ export class JumpI extends Instruction {
|
|
|
55
55
|
);
|
|
56
56
|
|
|
57
57
|
const operands = [this.condOffset];
|
|
58
|
-
const [
|
|
58
|
+
const [condOffset] = addressing.resolve(operands, memory);
|
|
59
|
+
const condition = memory.getAs<IntegralValue>(condOffset);
|
|
59
60
|
|
|
60
|
-
|
|
61
|
-
const condition = memory.getAs<Uint1>(resolvedCondOffset);
|
|
62
|
-
|
|
63
|
-
if (condition.toNumber() == 0) {
|
|
61
|
+
if (condition.toBigInt() == 0n) {
|
|
64
62
|
context.machineState.pc = context.machineState.nextPc;
|
|
65
63
|
} else {
|
|
66
64
|
context.machineState.pc = this.loc;
|
|
@@ -2,7 +2,6 @@ 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';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* Database interface for providing access to public state.
|
|
@@ -30,12 +29,12 @@ export interface PublicStateDBInterface {
|
|
|
30
29
|
*/
|
|
31
30
|
export interface PublicContractsDBInterface {
|
|
32
31
|
/**
|
|
33
|
-
* Returns a contract instance
|
|
32
|
+
* Returns a publicly deployed contract instance.
|
|
34
33
|
* @param address - Address of the contract.
|
|
35
|
-
* @param
|
|
34
|
+
* @param blockNumber - The block number at which to retrieve the contract instance.
|
|
36
35
|
* @returns The contract instance or undefined if not found.
|
|
37
36
|
*/
|
|
38
|
-
getContractInstance(address: AztecAddress,
|
|
37
|
+
getContractInstance(address: AztecAddress, blockNumber: number): Promise<ContractInstanceWithAddress | undefined>;
|
|
39
38
|
|
|
40
39
|
/**
|
|
41
40
|
* Returns a publicly deployed contract class.
|
|
@@ -9,12 +9,7 @@ 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 {
|
|
13
|
-
DEFAULT_BLOCK_NUMBER,
|
|
14
|
-
DEFAULT_TIMESTAMP,
|
|
15
|
-
getContractFunctionAbi,
|
|
16
|
-
getFunctionSelector,
|
|
17
|
-
} from '../avm/fixtures/utils.js';
|
|
12
|
+
import { DEFAULT_BLOCK_NUMBER, getContractFunctionAbi, getFunctionSelector } from '../avm/fixtures/utils.js';
|
|
18
13
|
import { PublicContractsDB } from '../public_db_sources.js';
|
|
19
14
|
import { MeasuredPublicTxSimulator } from '../public_tx_simulator/measured_public_tx_simulator.js';
|
|
20
15
|
import type { PublicTxResult } from '../public_tx_simulator/public_tx_simulator.js';
|
|
@@ -22,6 +17,7 @@ import { TestExecutorMetrics } from '../test_executor_metrics.js';
|
|
|
22
17
|
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
23
18
|
import { type TestPrivateInsertions, createTxForPublicCalls } from './utils.js';
|
|
24
19
|
|
|
20
|
+
const TIMESTAMP = 99833n;
|
|
25
21
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
26
22
|
|
|
27
23
|
export type TestEnqueuedCall = {
|
|
@@ -179,7 +175,7 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
179
175
|
|
|
180
176
|
export function defaultGlobals() {
|
|
181
177
|
const globals = GlobalVariables.empty();
|
|
182
|
-
globals.timestamp =
|
|
178
|
+
globals.timestamp = TIMESTAMP;
|
|
183
179
|
globals.gasFees = DEFAULT_GAS_FEES; // apply some nonzero default gas fees
|
|
184
180
|
globals.blockNumber = DEFAULT_BLOCK_NUMBER;
|
|
185
181
|
return globals;
|
|
@@ -39,7 +39,6 @@ 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';
|
|
43
42
|
|
|
44
43
|
import { strict as assert } from 'assert';
|
|
45
44
|
|
|
@@ -59,9 +58,9 @@ export class HintingPublicContractsDB implements PublicContractsDBInterface {
|
|
|
59
58
|
|
|
60
59
|
public async getContractInstance(
|
|
61
60
|
address: AztecAddress,
|
|
62
|
-
|
|
61
|
+
blockNumber: number,
|
|
63
62
|
): Promise<ContractInstanceWithAddress | undefined> {
|
|
64
|
-
const instance = await this.db.getContractInstance(address,
|
|
63
|
+
const instance = await this.db.getContractInstance(address, blockNumber);
|
|
65
64
|
if (instance) {
|
|
66
65
|
// We don't need to hint the block number because it doesn't change.
|
|
67
66
|
this.hints.contractInstances.push(
|
|
@@ -25,7 +25,6 @@ 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';
|
|
29
28
|
|
|
30
29
|
import type { PublicContractsDBInterface, PublicStateDBInterface } from './db_interfaces.js';
|
|
31
30
|
import { TxContractCache } from './tx_contract_cache.js';
|
|
@@ -211,18 +210,16 @@ export class PublicContractsDB implements PublicContractsDBInterface {
|
|
|
211
210
|
// to the constructor right now. If we can make this class more private, we should
|
|
212
211
|
// reconsider this. A litmus test is in how many places we need to initialize with a
|
|
213
212
|
// 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.
|
|
216
213
|
public async getContractInstance(
|
|
217
214
|
address: AztecAddress,
|
|
218
|
-
|
|
215
|
+
blockNumber: number,
|
|
219
216
|
): Promise<ContractInstanceWithAddress | undefined> {
|
|
220
217
|
// Check caches in order: tx revertible -> tx non-revertible -> block -> data source
|
|
221
218
|
return (
|
|
222
219
|
this.currentTxRevertibleCache.getInstance(address) ??
|
|
223
220
|
this.currentTxNonRevertibleCache.getInstance(address) ??
|
|
224
221
|
this.blockCache.getInstance(address) ??
|
|
225
|
-
(await this.dataSource.getContract(address,
|
|
222
|
+
(await this.dataSource.getContract(address, blockNumber))
|
|
226
223
|
);
|
|
227
224
|
}
|
|
228
225
|
|
|
@@ -19,7 +19,6 @@ 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';
|
|
23
22
|
|
|
24
23
|
import { strict as assert } from 'assert';
|
|
25
24
|
|
|
@@ -51,7 +50,7 @@ export class PublicPersistableStateManager {
|
|
|
51
50
|
private readonly contractsDB: PublicContractsDBInterface,
|
|
52
51
|
private readonly trace: PublicSideEffectTraceInterface,
|
|
53
52
|
private readonly firstNullifier: Fr, // Needed for note hashes.
|
|
54
|
-
private readonly
|
|
53
|
+
private readonly blockNumber: number, // Needed for contract updates.
|
|
55
54
|
private readonly doMerkleOperations: boolean = false,
|
|
56
55
|
private readonly publicStorage: PublicStorage = new PublicStorage(treesDB),
|
|
57
56
|
private readonly nullifiers: NullifierManager = new NullifierManager(treesDB),
|
|
@@ -66,14 +65,14 @@ export class PublicPersistableStateManager {
|
|
|
66
65
|
trace: PublicSideEffectTraceInterface,
|
|
67
66
|
doMerkleOperations: boolean = false,
|
|
68
67
|
firstNullifier: Fr,
|
|
69
|
-
|
|
68
|
+
blockNumber: number,
|
|
70
69
|
): PublicPersistableStateManager {
|
|
71
70
|
return new PublicPersistableStateManager(
|
|
72
71
|
treesDB,
|
|
73
72
|
contractsDB,
|
|
74
73
|
trace,
|
|
75
74
|
firstNullifier,
|
|
76
|
-
|
|
75
|
+
blockNumber,
|
|
77
76
|
doMerkleOperations,
|
|
78
77
|
);
|
|
79
78
|
}
|
|
@@ -88,7 +87,7 @@ export class PublicPersistableStateManager {
|
|
|
88
87
|
this.contractsDB,
|
|
89
88
|
this.trace.fork(),
|
|
90
89
|
this.firstNullifier,
|
|
91
|
-
this.
|
|
90
|
+
this.blockNumber,
|
|
92
91
|
this.doMerkleOperations,
|
|
93
92
|
this.publicStorage.fork(),
|
|
94
93
|
this.nullifiers.fork(),
|
|
@@ -336,7 +335,7 @@ export class PublicPersistableStateManager {
|
|
|
336
335
|
*/
|
|
337
336
|
public async getContractInstance(contractAddress: AztecAddress): Promise<SerializableContractInstance | undefined> {
|
|
338
337
|
this.log.trace(`Getting contract instance for address ${contractAddress}`);
|
|
339
|
-
const instanceWithAddress = await this.contractsDB.getContractInstance(contractAddress, this.
|
|
338
|
+
const instanceWithAddress = await this.contractsDB.getContractInstance(contractAddress, this.blockNumber);
|
|
340
339
|
const exists = instanceWithAddress !== undefined;
|
|
341
340
|
|
|
342
341
|
const instance = exists ? new SerializableContractInstance(instanceWithAddress) : undefined;
|
|
@@ -414,7 +413,7 @@ export class PublicPersistableStateManager {
|
|
|
414
413
|
);
|
|
415
414
|
|
|
416
415
|
// We now check that, depending on the current block, the current class id is correct.
|
|
417
|
-
const expectedClassIdRaw = sharedMutableValues.svc.getCurrentAt(this.
|
|
416
|
+
const expectedClassIdRaw = sharedMutableValues.svc.getCurrentAt(this.blockNumber).at(0)!;
|
|
418
417
|
const expectedClassId = expectedClassIdRaw.isZero() ? instance.originalContractClassId : expectedClassIdRaw;
|
|
419
418
|
assert(
|
|
420
419
|
instance.currentContractClassId.equals(expectedClassId),
|