@aztec/txe 0.0.1-commit.2ed92850 → 0.0.1-commit.3100065
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/AuthRegistry-FSRZIMX6.js +3 -0
- package/dest/AuthRegistry-FSRZIMX6.js.map +7 -0
- package/dest/ContractClassRegistry-N6NA3SFA.js +3 -0
- package/dest/ContractClassRegistry-N6NA3SFA.js.map +7 -0
- package/dest/ContractInstanceRegistry-NADDSLGL.js +3 -0
- package/dest/ContractInstanceRegistry-NADDSLGL.js.map +7 -0
- package/dest/FeeJuice-QBH5JWJV.js +3 -0
- package/dest/FeeJuice-QBH5JWJV.js.map +7 -0
- package/dest/HandshakeRegistry-KKUEU7XW.js +3 -0
- package/dest/HandshakeRegistry-KKUEU7XW.js.map +7 -0
- package/dest/MultiCallEntrypoint-TGICA67H.js +3 -0
- package/dest/MultiCallEntrypoint-TGICA67H.js.map +7 -0
- package/dest/SchnorrAccount-J5T6OKR3.js +3 -0
- package/dest/SchnorrAccount-J5T6OKR3.js.map +7 -0
- package/dest/SchnorrInitializerlessAccount-OOES6Q4F.js +3 -0
- package/dest/SchnorrInitializerlessAccount-OOES6Q4F.js.map +7 -0
- package/dest/bin/check_txe_oracle_version.d.ts +2 -0
- package/dest/bin/check_txe_oracle_version.d.ts.map +1 -0
- package/dest/bin/check_txe_oracle_version.js +61 -0
- package/dest/bin/index.js +3 -30
- package/dest/bin/index.js.map +7 -0
- package/dest/bin/oracle_test_server.d.ts +3 -0
- package/dest/bin/oracle_test_server.d.ts.map +1 -0
- package/dest/bin/oracle_test_server.js +41 -0
- package/dest/chunk-BJVAAXNA.js +3 -0
- package/dest/chunk-BJVAAXNA.js.map +7 -0
- package/dest/chunk-PDOEF22H.js +304 -0
- package/dest/chunk-PDOEF22H.js.map +7 -0
- package/dest/chunk-YP4ODNMQ.js +268 -0
- package/dest/chunk-YP4ODNMQ.js.map +7 -0
- package/dest/constants.d.ts +5 -1
- package/dest/constants.d.ts.map +1 -1
- package/dest/constants.js +9 -1
- package/dest/dispatcher_pool.d.ts +67 -0
- package/dest/dispatcher_pool.d.ts.map +1 -0
- package/dest/dispatcher_pool.js +286 -0
- package/dest/index.d.ts +51 -7
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +73 -157
- package/dest/metafile.json +39883 -0
- package/dest/msgpackr_fr_extension.d.ts +2 -0
- package/dest/msgpackr_fr_extension.d.ts.map +1 -0
- package/dest/msgpackr_fr_extension.js +21 -0
- package/dest/oracle/interfaces.d.ts +65 -30
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/tagging_secret_strategy.d.ts +12 -0
- package/dest/oracle/tagging_secret_strategy.d.ts.map +1 -0
- package/dest/oracle/tagging_secret_strategy.js +12 -0
- package/dest/oracle/test-resolver/default_fixtures.d.ts +9 -0
- package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
- package/dest/oracle/test-resolver/default_fixtures.js +207 -0
- package/dest/oracle/test-resolver/index.d.ts +9 -0
- package/dest/oracle/test-resolver/index.d.ts.map +1 -0
- package/dest/oracle/test-resolver/index.js +32 -0
- package/dest/oracle/test-resolver/resolver.d.ts +48 -0
- package/dest/oracle/test-resolver/resolver.d.ts.map +1 -0
- package/dest/oracle/test-resolver/resolver.js +181 -0
- package/dest/oracle/txe_oracle_public_context.d.ts +38 -14
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +63 -16
- package/dest/oracle/txe_oracle_registry.d.ts +170 -0
- package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
- package/dest/oracle/txe_oracle_registry.js +749 -0
- package/dest/oracle/txe_oracle_top_level_context.d.ts +56 -29
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +330 -103
- package/dest/oracle/txe_oracle_version.d.ts +17 -0
- package/dest/oracle/txe_oracle_version.d.ts.map +1 -0
- package/dest/oracle/txe_oracle_version.js +14 -0
- package/dest/oracle/txe_private_execution_oracle.d.ts +17 -0
- package/dest/oracle/txe_private_execution_oracle.d.ts.map +1 -0
- package/dest/oracle/txe_private_execution_oracle.js +15 -0
- package/dest/rpc_server.d.ts +14 -0
- package/dest/rpc_server.d.ts.map +1 -0
- package/dest/rpc_server.js +78 -0
- package/dest/rpc_translator.d.ts +113 -228
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +885 -613
- package/dest/server.bundle.js +3 -0
- package/dest/server.bundle.js.map +7 -0
- package/dest/state_machine/archiver.d.ts +6 -5
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +30 -20
- package/dest/state_machine/dummy_p2p_client.d.ts +29 -16
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +53 -20
- package/dest/state_machine/global_variable_builder.d.ts +10 -6
- package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
- package/dest/state_machine/global_variable_builder.js +8 -5
- package/dest/state_machine/index.d.ts +13 -7
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +60 -15
- package/dest/state_machine/mock_epoch_cache.d.ts +18 -3
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +33 -2
- package/dest/state_machine/synchronizer.d.ts +9 -6
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/state_machine/synchronizer.js +10 -6
- package/dest/txe_session.d.ts +89 -16
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +363 -56
- package/dest/utils/block_creation.d.ts +2 -2
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +5 -3
- package/dest/utils/encoding.d.ts +192 -0
- package/dest/utils/encoding.d.ts.map +1 -0
- package/dest/{util → utils}/encoding.js +7 -2
- package/dest/{util → utils}/expected_failure_error.d.ts +1 -1
- package/dest/utils/expected_failure_error.d.ts.map +1 -0
- package/dest/utils/tx_effect_creation.d.ts +1 -1
- package/dest/utils/tx_effect_creation.d.ts.map +1 -1
- package/dest/utils/tx_effect_creation.js +0 -1
- package/dest/{util → utils}/txe_account_store.d.ts +1 -1
- package/dest/utils/txe_account_store.d.ts.map +1 -0
- package/dest/utils/txe_artifact_resolver.d.ts +37 -0
- package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
- package/dest/utils/txe_artifact_resolver.js +161 -0
- package/dest/utils/txe_public_contract_data_source.d.ts +20 -0
- package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -0
- package/dest/utils/txe_public_contract_data_source.js +51 -0
- package/dest/worker.bundle.js +3 -0
- package/dest/worker.bundle.js.map +7 -0
- package/dest/worker.d.ts +2 -0
- package/dest/worker.d.ts.map +1 -0
- package/dest/worker.js +92 -0
- package/package.json +38 -21
- package/src/bin/check_txe_oracle_version.ts +70 -0
- package/src/bin/index.ts +11 -2
- package/src/bin/oracle_test_server.ts +51 -0
- package/src/constants.ts +11 -1
- package/src/dispatcher_pool.ts +317 -0
- package/src/index.ts +99 -190
- package/src/msgpackr_fr_extension.ts +23 -0
- package/src/oracle/interfaces.ts +71 -35
- package/src/oracle/tagging_secret_strategy.ts +25 -0
- package/src/oracle/test-resolver/default_fixtures.ts +282 -0
- package/src/oracle/test-resolver/index.ts +44 -0
- package/src/oracle/test-resolver/resolver.ts +245 -0
- package/src/oracle/txe_oracle_public_context.ts +76 -16
- package/src/oracle/txe_oracle_registry.ts +539 -0
- package/src/oracle/txe_oracle_top_level_context.ts +440 -168
- package/src/oracle/txe_oracle_version.ts +17 -0
- package/src/oracle/txe_private_execution_oracle.ts +30 -0
- package/src/rpc_server.ts +87 -0
- package/src/rpc_translator.ts +1098 -988
- package/src/state_machine/archiver.ts +43 -20
- package/src/state_machine/dummy_p2p_client.ts +83 -32
- package/src/state_machine/global_variable_builder.ts +12 -11
- package/src/state_machine/index.ts +84 -33
- package/src/state_machine/mock_epoch_cache.ts +43 -3
- package/src/state_machine/synchronizer.ts +13 -7
- package/src/txe_session.ts +603 -128
- package/src/utils/block_creation.ts +5 -2
- package/src/{util → utils}/encoding.ts +8 -2
- package/src/utils/tx_effect_creation.ts +0 -2
- package/src/utils/txe_artifact_resolver.ts +217 -0
- package/src/utils/txe_public_contract_data_source.ts +60 -0
- package/src/worker.ts +98 -0
- package/dest/util/encoding.d.ts +0 -720
- package/dest/util/encoding.d.ts.map +0 -1
- package/dest/util/expected_failure_error.d.ts.map +0 -1
- package/dest/util/txe_account_store.d.ts.map +0 -1
- package/dest/util/txe_contract_store.d.ts +0 -12
- package/dest/util/txe_contract_store.d.ts.map +0 -1
- package/dest/util/txe_contract_store.js +0 -22
- package/dest/util/txe_public_contract_data_source.d.ts +0 -21
- package/dest/util/txe_public_contract_data_source.d.ts.map +0 -1
- package/dest/util/txe_public_contract_data_source.js +0 -67
- package/src/util/txe_contract_store.ts +0 -36
- package/src/util/txe_public_contract_data_source.ts +0 -86
- /package/dest/{util → utils}/expected_failure_error.js +0 -0
- /package/dest/{util → utils}/txe_account_store.js +0 -0
- /package/src/{util → utils}/expected_failure_error.ts +0 -0
- /package/src/{util → utils}/txe_account_store.ts +0 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/* eslint-disable camelcase */ import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { withoutHexPrefix } from '@aztec/foundation/string';
|
|
3
|
+
import { BOUNDED_VEC, BYTE, BoundedVec, Option, makeEntry } from '@aztec/pxe/simulator';
|
|
4
|
+
import { toInputSlots } from '../txe_oracle_registry.js';
|
|
5
|
+
import { synthesizeDefaultFixtures } from './default_fixtures.js';
|
|
6
|
+
/** Name of the meta-oracle that Noir tests call to announce the next call's scenario by name. */ const SET_SCENARIO_ORACLE = 'aztec_oracle_test_set_scenario';
|
|
7
|
+
export const SET_SCENARIO_ENTRY = makeEntry({
|
|
8
|
+
params: [
|
|
9
|
+
{
|
|
10
|
+
name: 'name',
|
|
11
|
+
type: BOUNDED_VEC(BYTE)
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Oracle resolver for serialization tests. Selects a fixture scenario, verifies that the received inputs match, and
|
|
17
|
+
* returns the corresponding fixture output.
|
|
18
|
+
*
|
|
19
|
+
* For oracles with a single scenario, it is selected automatically. For oracles with multiple scenarios, the Noir test
|
|
20
|
+
* announces the scenario by name via the `aztec_oracle_test_set_scenario` meta-oracle before calling the real oracle.
|
|
21
|
+
*/ export class OracleTestResolver {
|
|
22
|
+
registry;
|
|
23
|
+
fixtures;
|
|
24
|
+
calledOracles;
|
|
25
|
+
pendingScenario;
|
|
26
|
+
logger;
|
|
27
|
+
constructor(registry, fixtures, logger){
|
|
28
|
+
this.registry = registry;
|
|
29
|
+
this.fixtures = fixtures;
|
|
30
|
+
this.calledOracles = new Set();
|
|
31
|
+
this.pendingScenario = new Map();
|
|
32
|
+
this.logger = logger ?? createLogger('txe:test-resolver');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Builds a resolver whose fixtures are the default scenarios synthesized from the registry's type mappings. The
|
|
36
|
+
* matching Noir serialization tests are auto-generated by `#[generate_oracle_tests]` from the same convention.
|
|
37
|
+
*/ static fromRegistry(registry, logger) {
|
|
38
|
+
return new OracleTestResolver(registry, synthesizeDefaultFixtures(registry), logger);
|
|
39
|
+
}
|
|
40
|
+
// eslint-disable-next-line require-await
|
|
41
|
+
async resolve_foreign_call(callData) {
|
|
42
|
+
const oracleName = callData.function;
|
|
43
|
+
this.logger.debug('Resolving oracle', {
|
|
44
|
+
oracleName
|
|
45
|
+
});
|
|
46
|
+
if (oracleName === SET_SCENARIO_ORACLE) {
|
|
47
|
+
return this.#handleSetScenario(callData);
|
|
48
|
+
}
|
|
49
|
+
if (!(oracleName in this.registry)) {
|
|
50
|
+
throw new Error(`Oracle '${oracleName}' not found in registry`);
|
|
51
|
+
}
|
|
52
|
+
const entry = this.registry[oracleName];
|
|
53
|
+
const scenarios = this.fixtures[oracleName];
|
|
54
|
+
if (!scenarios || scenarios.length === 0) {
|
|
55
|
+
throw new Error(`No fixture defined for oracle '${oracleName}'`);
|
|
56
|
+
}
|
|
57
|
+
const match = this.#selectScenario(callData.session_id, oracleName, scenarios);
|
|
58
|
+
this.#verifyInputs(callData.inputs, entry, match, oracleName);
|
|
59
|
+
this.calledOracles.add(oracleName);
|
|
60
|
+
this.logger.debug('Verified scenario for oracle', {
|
|
61
|
+
oracleName
|
|
62
|
+
});
|
|
63
|
+
const outputSlots = entry.serializeReturn(match.output);
|
|
64
|
+
return {
|
|
65
|
+
values: outputSlots.map((slot)=>Array.isArray(slot) ? slot.map(withoutHexPrefix) : withoutHexPrefix(slot))
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** Returns oracles that have a fixture defined but were never called during testing. */ getUncalledFixtures() {
|
|
69
|
+
return Object.keys(this.fixtures).filter((name)=>!this.calledOracles.has(name));
|
|
70
|
+
}
|
|
71
|
+
/** Returns oracles in the registry that have no fixture defined at all. */ getMissingFixtures() {
|
|
72
|
+
return Object.keys(this.registry).filter((name)=>!(name in this.fixtures));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Records the scenario name for the session's next oracle call. A test announces once per multi-scenario position
|
|
76
|
+
* (param or return), so successive announcements accumulate joined with `+`, matching the names the fixture
|
|
77
|
+
* synthesizer builds (e.g. `some+some`).
|
|
78
|
+
*/ #handleSetScenario(callData) {
|
|
79
|
+
const name = decodeScenarioName(callData.inputs);
|
|
80
|
+
const existing = this.pendingScenario.get(callData.session_id);
|
|
81
|
+
const scenario = existing !== undefined ? `${existing}+${name}` : name;
|
|
82
|
+
this.logger.debug('Setting scenario for next oracle call', {
|
|
83
|
+
sessionId: callData.session_id,
|
|
84
|
+
scenario
|
|
85
|
+
});
|
|
86
|
+
this.pendingScenario.set(callData.session_id, scenario);
|
|
87
|
+
return {
|
|
88
|
+
values: []
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/** Selects the fixture by the announced scenario name (for multi-scenario oracles) or returns the single fixture. */ #selectScenario(sessionId, oracleName, fixtures) {
|
|
92
|
+
const announced = this.pendingScenario.get(sessionId);
|
|
93
|
+
if (announced !== undefined) {
|
|
94
|
+
this.pendingScenario.delete(sessionId);
|
|
95
|
+
const match = fixtures.find((s)=>s.scenario === announced);
|
|
96
|
+
if (!match) {
|
|
97
|
+
const available = fixtures.map((s)=>s.scenario ?? '<default>').join(', ');
|
|
98
|
+
throw new Error(`No scenario '${announced}' for oracle '${oracleName}'. Available: ${available}`);
|
|
99
|
+
}
|
|
100
|
+
return match;
|
|
101
|
+
}
|
|
102
|
+
if (fixtures.length === 1) {
|
|
103
|
+
return fixtures[0];
|
|
104
|
+
}
|
|
105
|
+
throw new Error(`Oracle '${oracleName}' has ${fixtures.length} scenarios but none was announced before the call.`);
|
|
106
|
+
}
|
|
107
|
+
/** Deserializes actual inputs and verifies they match the scenario's expected inputs. */ #verifyInputs(rawInputs, entry, fixture, oracleName) {
|
|
108
|
+
const expectedInputs = fixture.inputs;
|
|
109
|
+
if (Object.keys(expectedInputs).length === 0) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const scenarioLabel = fixture.scenario ? ` (scenario '${fixture.scenario}')` : '';
|
|
113
|
+
const named = entry.deserializeParams(toInputSlots(rawInputs));
|
|
114
|
+
for (const param of named){
|
|
115
|
+
if (!(param.name in expectedInputs)) {
|
|
116
|
+
throw new Error(`Unexpected param '${param.name}' for oracle '${oracleName}'. ` + `Expected: ${Object.keys(expectedInputs).join(', ')}`);
|
|
117
|
+
}
|
|
118
|
+
if (!valuesEqual(param.value, expectedInputs[param.name])) {
|
|
119
|
+
throw new Error(`Input mismatch for oracle '${oracleName}'${scenarioLabel}: ` + `param '${param.name}' expected ${String(expectedInputs[param.name])} ` + `but got ${String(param.value)}. ${versionBumpHint(oracleName)}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Decodes the scenario name announced by `set_oracle_test_scenario`, whose argument is a `BoundedVec<u8, N>`
|
|
126
|
+
*/ function decodeScenarioName(inputs) {
|
|
127
|
+
const [{ value }] = SET_SCENARIO_ENTRY.deserializeParams(toInputSlots(inputs));
|
|
128
|
+
return String.fromCharCode(...value.data);
|
|
129
|
+
}
|
|
130
|
+
function valuesEqual(actual, expected) {
|
|
131
|
+
if (!isNonNullObject(actual) || !isNonNullObject(expected)) {
|
|
132
|
+
// Primitive scalars; String() bridges bigint vs number representations of the same seed. A primitive compared
|
|
133
|
+
// against an object is never equal.
|
|
134
|
+
return isNonNullObject(actual) === isNonNullObject(expected) && String(actual) === String(expected);
|
|
135
|
+
}
|
|
136
|
+
if (actual instanceof Option && expected instanceof Option) {
|
|
137
|
+
return actual.equals(expected, valuesEqual);
|
|
138
|
+
}
|
|
139
|
+
if (actual instanceof BoundedVec && expected instanceof BoundedVec) {
|
|
140
|
+
return actual.equals(expected, valuesEqual);
|
|
141
|
+
}
|
|
142
|
+
if (Array.isArray(actual) && Array.isArray(expected)) {
|
|
143
|
+
return actual.length === expected.length && actual.every((v, i)=>valuesEqual(v, expected[i]));
|
|
144
|
+
}
|
|
145
|
+
if (isPlainObject(actual) && isPlainObject(expected)) {
|
|
146
|
+
const expectedKeys = Object.keys(expected);
|
|
147
|
+
return Object.keys(actual).length === expectedKeys.length && expectedKeys.every((key)=>valuesEqual(actual[key], expected[key]));
|
|
148
|
+
}
|
|
149
|
+
if (actual.constructor !== expected.constructor) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
if (hasEquals(actual)) {
|
|
153
|
+
return actual.equals(expected);
|
|
154
|
+
}
|
|
155
|
+
const actualStr = customStringForm(actual);
|
|
156
|
+
const expectedStr = customStringForm(expected);
|
|
157
|
+
if (actualStr !== undefined && expectedStr !== undefined) {
|
|
158
|
+
return actualStr === expectedStr;
|
|
159
|
+
}
|
|
160
|
+
// Comparing blindly here could pass vacuously (e.g. two '[object Object]' strings), so refuse instead.
|
|
161
|
+
throw new Error(`valuesEqual cannot compare a '${actual.constructor?.name}' against a '${expected.constructor?.name}'. Add a branch for the type.`);
|
|
162
|
+
}
|
|
163
|
+
function isNonNullObject(value) {
|
|
164
|
+
return typeof value === 'object' && value !== null;
|
|
165
|
+
}
|
|
166
|
+
function isPlainObject(value) {
|
|
167
|
+
return isNonNullObject(value) && value.constructor === Object;
|
|
168
|
+
}
|
|
169
|
+
function hasEquals(value) {
|
|
170
|
+
return typeof value.equals === 'function';
|
|
171
|
+
}
|
|
172
|
+
/** The value's string form when its class overrides `toString` (a meaningful representation), undefined otherwise. */ function customStringForm(value) {
|
|
173
|
+
const { toString } = value;
|
|
174
|
+
if (typeof toString !== 'function' || toString === Object.prototype.toString) {
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
return toString.call(value);
|
|
178
|
+
}
|
|
179
|
+
function versionBumpHint(oracle) {
|
|
180
|
+
return oracle.startsWith('aztec_txe_') || oracle.startsWith('aztec_avm_') ? 'If you changed this oracle, consider bumping the TXE oracle version in yarn-project/txe/src/oracle/txe_oracle_version.ts.' : 'If you changed this oracle, consider bumping the PXE oracle version in yarn-project/pxe/src/oracle_version.ts.';
|
|
181
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import type { ContractStore } from '@aztec/pxe/server';
|
|
3
4
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
5
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
5
6
|
import { type MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
@@ -10,25 +11,48 @@ export declare class TXEOraclePublicContext implements IAvmExecutionOracle {
|
|
|
10
11
|
private forkedWorldTrees;
|
|
11
12
|
private txRequestHash;
|
|
12
13
|
private globalVariables;
|
|
14
|
+
private contractStore;
|
|
13
15
|
isAvm: true;
|
|
14
16
|
private logger;
|
|
15
17
|
private transientUniqueNoteHashes;
|
|
16
18
|
private transientSiloedNullifiers;
|
|
17
19
|
private publicDataWrites;
|
|
18
|
-
constructor(contractAddress: AztecAddress, forkedWorldTrees: MerkleTreeWriteOperations, txRequestHash: Fr, globalVariables: GlobalVariables);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
constructor(contractAddress: AztecAddress, forkedWorldTrees: MerkleTreeWriteOperations, txRequestHash: Fr, globalVariables: GlobalVariables, contractStore: ContractStore);
|
|
21
|
+
address(): Promise<AztecAddress>;
|
|
22
|
+
sender(): Promise<AztecAddress>;
|
|
23
|
+
blockNumber(): Promise<BlockNumber>;
|
|
24
|
+
timestamp(): Promise<bigint>;
|
|
25
|
+
isStaticCall(): Promise<boolean>;
|
|
26
|
+
chainId(): Promise<Fr>;
|
|
27
|
+
version(): Promise<Fr>;
|
|
28
|
+
emitNullifier(nullifier: Fr): Promise<void>;
|
|
29
|
+
emitNoteHash(noteHash: Fr): Promise<void>;
|
|
30
|
+
nullifierExists(siloedNullifier: Fr): Promise<boolean>;
|
|
31
|
+
storageWrite(slot: Fr, value: Fr): Promise<void>;
|
|
32
|
+
storageRead(slot: Fr, contractAddress: AztecAddress): Promise<Fr>;
|
|
33
|
+
getContractInstanceDeployer(address: AztecAddress): Promise<{
|
|
34
|
+
member: Fr;
|
|
35
|
+
exists: boolean;
|
|
36
|
+
}[]>;
|
|
37
|
+
getContractInstanceClassId(address: AztecAddress): Promise<{
|
|
38
|
+
member: Fr;
|
|
39
|
+
exists: boolean;
|
|
40
|
+
}[]>;
|
|
41
|
+
getContractInstanceInitializationHash(address: AztecAddress): Promise<{
|
|
42
|
+
member: Fr;
|
|
43
|
+
exists: boolean;
|
|
44
|
+
}[]>;
|
|
45
|
+
getContractInstanceImmutablesHash(address: AztecAddress): Promise<{
|
|
46
|
+
member: Fr;
|
|
47
|
+
exists: boolean;
|
|
48
|
+
}[]>;
|
|
49
|
+
private getContractInstanceMember;
|
|
50
|
+
returndataSize(): Promise<number>;
|
|
51
|
+
returndataCopy(_rdOffset: number, _copySize: number): Promise<Fr[]>;
|
|
52
|
+
call(_l2Gas: number, _daGas: number, _address: AztecAddress, _argsLength: number, _args: Fr[]): Promise<void>;
|
|
53
|
+
staticCall(_l2Gas: number, _daGas: number, _address: AztecAddress, _argsLength: number, _args: Fr[]): Promise<void>;
|
|
54
|
+
successCopy(): Promise<boolean>;
|
|
31
55
|
close(): Promise<L2Block>;
|
|
32
56
|
private makeTxEffect;
|
|
33
57
|
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhlX29yYWNsZV9wdWJsaWNfY29udGV4dC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yYWNsZS90eGVfb3JhY2xlX3B1YmxpY19jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR25ELE9BQU8sRUFFTCxLQUFLLHlCQUF5QixFQUcvQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0sa0JBQWtCLENBQUM7QUFHckUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzRCxxQkFBYSxzQkFBdUIsWUFBVyxtQkFBbUI7SUFTOUQsT0FBTyxDQUFDLGVBQWU7SUFDdkIsT0FBTyxDQUFDLGdCQUFnQjtJQUN4QixPQUFPLENBQUMsYUFBYTtJQUNyQixPQUFPLENBQUMsZUFBZTtJQUN2QixPQUFPLENBQUMsYUFBYTtJQVp2QixLQUFLLE9BQWlCO0lBRXRCLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFDdkIsT0FBTyxDQUFDLHlCQUF5QixDQUFZO0lBQzdDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBWTtJQUM3QyxPQUFPLENBQUMsZ0JBQWdCLENBQXlCO0lBRWpELFlBQ1UsZUFBZSxFQUFFLFlBQVksRUFDN0IsZ0JBQWdCLEVBQUUseUJBQXlCLEVBQzNDLGFBQWEsRUFBRSxFQUFFLEVBQ2pCLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLGFBQWEsRUFBRSxhQUFh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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txe_oracle_public_context.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_oracle_public_context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"txe_oracle_public_context.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_oracle_public_context.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,16 +11,18 @@ export class TXEOraclePublicContext {
|
|
|
11
11
|
forkedWorldTrees;
|
|
12
12
|
txRequestHash;
|
|
13
13
|
globalVariables;
|
|
14
|
+
contractStore;
|
|
14
15
|
isAvm;
|
|
15
16
|
logger;
|
|
16
17
|
transientUniqueNoteHashes;
|
|
17
18
|
transientSiloedNullifiers;
|
|
18
19
|
publicDataWrites;
|
|
19
|
-
constructor(contractAddress, forkedWorldTrees, txRequestHash, globalVariables){
|
|
20
|
+
constructor(contractAddress, forkedWorldTrees, txRequestHash, globalVariables, contractStore){
|
|
20
21
|
this.contractAddress = contractAddress;
|
|
21
22
|
this.forkedWorldTrees = forkedWorldTrees;
|
|
22
23
|
this.txRequestHash = txRequestHash;
|
|
23
24
|
this.globalVariables = globalVariables;
|
|
25
|
+
this.contractStore = contractStore;
|
|
24
26
|
this.isAvm = true;
|
|
25
27
|
this.transientUniqueNoteHashes = [];
|
|
26
28
|
this.transientSiloedNullifiers = [];
|
|
@@ -32,45 +34,44 @@ export class TXEOraclePublicContext {
|
|
|
32
34
|
timestamp: globalVariables.timestamp
|
|
33
35
|
});
|
|
34
36
|
}
|
|
35
|
-
|
|
37
|
+
address() {
|
|
36
38
|
return Promise.resolve(this.contractAddress);
|
|
37
39
|
}
|
|
38
|
-
|
|
40
|
+
sender() {
|
|
39
41
|
return Promise.resolve(AztecAddress.ZERO); // todo: change?
|
|
40
42
|
}
|
|
41
|
-
|
|
43
|
+
blockNumber() {
|
|
42
44
|
return Promise.resolve(this.globalVariables.blockNumber);
|
|
43
45
|
}
|
|
44
|
-
|
|
46
|
+
timestamp() {
|
|
45
47
|
return Promise.resolve(this.globalVariables.timestamp);
|
|
46
48
|
}
|
|
47
|
-
|
|
49
|
+
isStaticCall() {
|
|
48
50
|
return Promise.resolve(false);
|
|
49
51
|
}
|
|
50
|
-
|
|
52
|
+
chainId() {
|
|
51
53
|
return Promise.resolve(this.globalVariables.chainId);
|
|
52
54
|
}
|
|
53
|
-
|
|
55
|
+
version() {
|
|
54
56
|
return Promise.resolve(this.globalVariables.version);
|
|
55
57
|
}
|
|
56
|
-
async
|
|
58
|
+
async emitNullifier(nullifier) {
|
|
57
59
|
const siloedNullifier = await siloNullifier(this.contractAddress, nullifier);
|
|
58
60
|
this.transientSiloedNullifiers.push(siloedNullifier);
|
|
59
61
|
}
|
|
60
|
-
async
|
|
62
|
+
async emitNoteHash(noteHash) {
|
|
61
63
|
const siloedNoteHash = await siloNoteHash(this.contractAddress, noteHash);
|
|
62
64
|
// TODO: make the note hash unique - they are only siloed right now
|
|
63
65
|
this.transientUniqueNoteHashes.push(siloedNoteHash);
|
|
64
66
|
}
|
|
65
|
-
async
|
|
66
|
-
const nullifier = await siloNullifier(targetAddress, innerNullifier);
|
|
67
|
+
async nullifierExists(siloedNullifier) {
|
|
67
68
|
const treeIndex = (await this.forkedWorldTrees.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [
|
|
68
|
-
|
|
69
|
+
siloedNullifier.toBuffer()
|
|
69
70
|
]))[0];
|
|
70
|
-
const transientIndex = this.transientSiloedNullifiers.find((n)=>n.equals(
|
|
71
|
+
const transientIndex = this.transientSiloedNullifiers.find((n)=>n.equals(siloedNullifier));
|
|
71
72
|
return treeIndex !== undefined || transientIndex !== undefined;
|
|
72
73
|
}
|
|
73
|
-
async
|
|
74
|
+
async storageWrite(slot, value) {
|
|
74
75
|
this.logger.debug('AVM storage write', {
|
|
75
76
|
slot,
|
|
76
77
|
value
|
|
@@ -81,7 +82,7 @@ export class TXEOraclePublicContext {
|
|
|
81
82
|
new PublicDataTreeLeaf(dataWrite.leafSlot, dataWrite.value).toBuffer()
|
|
82
83
|
]);
|
|
83
84
|
}
|
|
84
|
-
async
|
|
85
|
+
async storageRead(slot, contractAddress) {
|
|
85
86
|
const leafSlot = await computePublicDataTreeLeafSlot(contractAddress, slot);
|
|
86
87
|
const lowLeafResult = await this.forkedWorldTrees.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
|
|
87
88
|
const value = !lowLeafResult || !lowLeafResult.alreadyPresent ? Fr.ZERO : (await this.forkedWorldTrees.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index)).leaf.value;
|
|
@@ -92,6 +93,52 @@ export class TXEOraclePublicContext {
|
|
|
92
93
|
});
|
|
93
94
|
return value;
|
|
94
95
|
}
|
|
96
|
+
getContractInstanceDeployer(address) {
|
|
97
|
+
return this.getContractInstanceMember(address, (i)=>i.deployer.toField());
|
|
98
|
+
}
|
|
99
|
+
getContractInstanceClassId(address) {
|
|
100
|
+
// TXE has no contract updates, so the current class always equals the original.
|
|
101
|
+
return this.getContractInstanceMember(address, (i)=>i.originalContractClassId);
|
|
102
|
+
}
|
|
103
|
+
getContractInstanceInitializationHash(address) {
|
|
104
|
+
return this.getContractInstanceMember(address, (i)=>i.initializationHash);
|
|
105
|
+
}
|
|
106
|
+
getContractInstanceImmutablesHash(address) {
|
|
107
|
+
return this.getContractInstanceMember(address, (i)=>i.immutablesHash);
|
|
108
|
+
}
|
|
109
|
+
// The one-element array mirrors the oracles' Noir return type, `[GetContractInstanceResult; 1]`.
|
|
110
|
+
async getContractInstanceMember(address, accessor) {
|
|
111
|
+
const instance = await this.contractStore.getContractInstance(address);
|
|
112
|
+
if (!instance) {
|
|
113
|
+
return [
|
|
114
|
+
{
|
|
115
|
+
member: Fr.ZERO,
|
|
116
|
+
exists: false
|
|
117
|
+
}
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
return [
|
|
121
|
+
{
|
|
122
|
+
member: accessor(instance),
|
|
123
|
+
exists: true
|
|
124
|
+
}
|
|
125
|
+
];
|
|
126
|
+
}
|
|
127
|
+
returndataSize() {
|
|
128
|
+
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
129
|
+
}
|
|
130
|
+
returndataCopy(_rdOffset, _copySize) {
|
|
131
|
+
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
132
|
+
}
|
|
133
|
+
call(_l2Gas, _daGas, _address, _argsLength, _args) {
|
|
134
|
+
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
135
|
+
}
|
|
136
|
+
staticCall(_l2Gas, _daGas, _address, _argsLength, _args) {
|
|
137
|
+
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
138
|
+
}
|
|
139
|
+
successCopy() {
|
|
140
|
+
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
141
|
+
}
|
|
95
142
|
async close() {
|
|
96
143
|
this.logger.debug('Exiting Public Context, building block with collected side effects', {
|
|
97
144
|
blockNumber: this.globalVariables.blockNumber
|