@aztec/simulator 0.47.1 → 0.49.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/acvm/acvm.d.ts +2 -2
- package/dest/acvm/acvm.d.ts.map +1 -1
- package/dest/acvm/acvm.js +12 -7
- package/dest/acvm/oracle/oracle.d.ts +3 -3
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +8 -9
- package/dest/acvm/oracle/typed_oracle.d.ts +5 -5
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +6 -6
- package/dest/avm/avm_gas.d.ts +1 -0
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +142 -79
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +2 -2
- package/dest/avm/opcodes/accrued_substate.js +2 -2
- package/dest/avm/opcodes/commitment.js +4 -4
- package/dest/avm/opcodes/conversion.js +2 -2
- package/dest/avm/opcodes/external_calls.js +4 -4
- package/dest/avm/opcodes/instruction.d.ts +2 -1
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +8 -5
- package/dest/avm/opcodes/memory.js +2 -2
- package/dest/avm/opcodes/storage.js +3 -3
- package/dest/avm/serialization/instruction_serialization.js +2 -2
- package/dest/client/client_execution_context.d.ts +8 -8
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +22 -23
- package/dest/client/db_oracle.d.ts +4 -3
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/execution_note_cache.d.ts +17 -13
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +65 -26
- package/dest/client/execution_result.d.ts +3 -2
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +20 -9
- package/dest/client/private_execution.js +3 -3
- package/dest/client/simulator.d.ts +7 -6
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +14 -12
- package/dest/client/test_utils.d.ts +9 -0
- package/dest/client/test_utils.d.ts.map +1 -0
- package/dest/client/test_utils.js +21 -0
- package/dest/client/view_data_oracle.d.ts +2 -1
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +4 -3
- package/dest/index.d.ts +0 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -2
- package/dest/providers/acvm_native.js +2 -2
- package/dest/public/abstract_phase_manager.d.ts.map +1 -1
- package/dest/public/abstract_phase_manager.js +3 -3
- package/dest/public/executor.d.ts +4 -1
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +10 -2
- package/dest/public/executor_metrics.d.ts +10 -0
- package/dest/public/executor_metrics.d.ts.map +1 -0
- package/dest/public/executor_metrics.js +32 -0
- package/dest/public/fee_payment.d.ts +2 -2
- package/dest/public/fee_payment.d.ts.map +1 -1
- package/dest/public/fee_payment.js +9 -10
- package/dest/public/hints_builder.d.ts.map +1 -1
- package/dest/public/hints_builder.js +1 -1
- package/dest/public/public_processor.d.ts +6 -5
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +38 -18
- package/dest/public/public_processor_metrics.d.ts +19 -0
- package/dest/public/public_processor_metrics.d.ts.map +1 -0
- package/dest/public/public_processor_metrics.js +59 -0
- package/package.json +9 -9
- package/src/acvm/acvm.ts +14 -5
- package/src/acvm/oracle/oracle.ts +8 -23
- package/src/acvm/oracle/typed_oracle.ts +8 -21
- package/src/avm/avm_gas.ts +145 -79
- package/src/avm/fixtures/index.ts +1 -0
- package/src/avm/opcodes/accrued_substate.ts +1 -1
- package/src/avm/opcodes/commitment.ts +3 -3
- package/src/avm/opcodes/conversion.ts +1 -1
- package/src/avm/opcodes/external_calls.ts +3 -3
- package/src/avm/opcodes/instruction.ts +7 -4
- package/src/avm/opcodes/memory.ts +1 -1
- package/src/avm/opcodes/storage.ts +2 -2
- package/src/avm/serialization/instruction_serialization.ts +1 -1
- package/src/client/client_execution_context.ts +23 -20
- package/src/client/db_oracle.ts +9 -3
- package/src/client/execution_note_cache.ts +76 -25
- package/src/client/execution_result.ts +29 -9
- package/src/client/private_execution.ts +2 -2
- package/src/client/simulator.ts +18 -14
- package/src/client/test_utils.ts +30 -0
- package/src/client/view_data_oracle.ts +2 -1
- package/src/index.ts +0 -1
- package/src/providers/acvm_native.ts +1 -1
- package/src/public/abstract_phase_manager.ts +1 -2
- package/src/public/executor.ts +14 -1
- package/src/public/executor_metrics.ts +48 -0
- package/src/public/fee_payment.ts +8 -10
- package/src/public/hints_builder.ts +2 -2
- package/src/public/public_processor.ts +52 -20
- package/src/public/public_processor_metrics.ts +92 -0
- package/dest/utils.d.ts +0 -12
- package/dest/utils.d.ts.map +0 -1
- package/dest/utils.js +0 -11
- package/src/utils.ts +0 -18
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
2
|
import { NestedProcessReturnValues, PublicKernelType, Tx, makeProcessedTx, validateProcessedTx, } from '@aztec/circuit-types';
|
|
3
|
-
import { AztecAddress,
|
|
3
|
+
import { AztecAddress, ContractClassRegisteredEvent, FEE_JUICE_ADDRESS, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PublicDataUpdateRequest, } from '@aztec/circuits.js';
|
|
4
4
|
import { times } from '@aztec/foundation/collection';
|
|
5
5
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
6
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
7
|
+
import { ClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer';
|
|
6
8
|
import { PublicExecutor, computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot, } from '@aztec/simulator';
|
|
7
9
|
import { Attributes, trackSpan } from '@aztec/telemetry-client';
|
|
8
10
|
import { PhaseManagerFactory } from './phase_manager_factory.js';
|
|
9
11
|
import { ContractsDataSourcePublicDB, WorldStateDB, WorldStatePublicDB } from './public_db_sources.js';
|
|
10
12
|
import { RealPublicKernelCircuitSimulator } from './public_kernel.js';
|
|
13
|
+
import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
11
14
|
/**
|
|
12
15
|
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
13
16
|
*/
|
|
@@ -22,16 +25,16 @@ export class PublicProcessorFactory {
|
|
|
22
25
|
* Creates a new instance of a PublicProcessor.
|
|
23
26
|
* @param historicalHeader - The header of a block previous to the one in which the tx is included.
|
|
24
27
|
* @param globalVariables - The global variables for the block being processed.
|
|
25
|
-
* @param newContracts - Provides access to contract bytecode for public executions.
|
|
26
28
|
* @returns A new instance of a PublicProcessor.
|
|
27
29
|
*/
|
|
28
|
-
create(
|
|
29
|
-
|
|
30
|
+
create(maybeHistoricalHeader, globalVariables) {
|
|
31
|
+
const { merkleTree, telemetryClient } = this;
|
|
32
|
+
const historicalHeader = maybeHistoricalHeader ?? merkleTree.getInitialHeader();
|
|
30
33
|
const publicContractsDB = new ContractsDataSourcePublicDB(this.contractDataSource);
|
|
31
|
-
const worldStatePublicDB = new WorldStatePublicDB(
|
|
32
|
-
const worldStateDB = new WorldStateDB(
|
|
33
|
-
const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB, historicalHeader);
|
|
34
|
-
return new PublicProcessor(
|
|
34
|
+
const worldStatePublicDB = new WorldStatePublicDB(merkleTree);
|
|
35
|
+
const worldStateDB = new WorldStateDB(merkleTree);
|
|
36
|
+
const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB, historicalHeader, telemetryClient);
|
|
37
|
+
return new PublicProcessor(merkleTree, publicExecutor, new RealPublicKernelCircuitSimulator(this.simulator), globalVariables, historicalHeader, publicContractsDB, worldStatePublicDB, this.telemetryClient);
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
/**
|
|
@@ -52,14 +55,18 @@ let PublicProcessor = (() => {
|
|
|
52
55
|
this.publicContractsDB = publicContractsDB;
|
|
53
56
|
this.publicStateDB = publicStateDB;
|
|
54
57
|
this.log = log;
|
|
55
|
-
this.
|
|
58
|
+
this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
|
|
59
|
+
}
|
|
60
|
+
get tracer() {
|
|
61
|
+
return this.metrics.tracer;
|
|
56
62
|
}
|
|
57
63
|
/**
|
|
58
64
|
* Run each tx through the public circuit and the public kernel circuit if needed.
|
|
59
65
|
* @param txs - Txs to process.
|
|
66
|
+
* @param processedTxHandler - Handler for processed txs in the context of block building or proving.
|
|
60
67
|
* @returns The list of processed txs with their circuit simulation outputs.
|
|
61
68
|
*/
|
|
62
|
-
async process(txs, maxTransactions = txs.length,
|
|
69
|
+
async process(txs, maxTransactions = txs.length, processedTxHandler, txValidator) {
|
|
63
70
|
// The processor modifies the tx objects in place, so we need to clone them.
|
|
64
71
|
txs = txs.map(tx => Tx.clone(tx));
|
|
65
72
|
const result = [];
|
|
@@ -96,9 +103,9 @@ let PublicProcessor = (() => {
|
|
|
96
103
|
throw new Error(`Transaction ${invalid[0].hash} invalid after processing public functions`);
|
|
97
104
|
}
|
|
98
105
|
}
|
|
99
|
-
// if we were given a
|
|
100
|
-
if (
|
|
101
|
-
await
|
|
106
|
+
// if we were given a handler then send the transaction to it for block building or proving
|
|
107
|
+
if (processedTxHandler) {
|
|
108
|
+
await processedTxHandler.addNewTx(processedTx);
|
|
102
109
|
}
|
|
103
110
|
result.push(processedTx);
|
|
104
111
|
returns = returns.concat(returnValues ?? []);
|
|
@@ -130,24 +137,25 @@ let PublicProcessor = (() => {
|
|
|
130
137
|
if (feePayer.isZero()) {
|
|
131
138
|
return finalPublicDataUpdateRequests;
|
|
132
139
|
}
|
|
133
|
-
const
|
|
140
|
+
const feeJuiceAddress = AztecAddress.fromBigInt(FEE_JUICE_ADDRESS);
|
|
134
141
|
const balanceSlot = computeFeePayerBalanceStorageSlot(feePayer);
|
|
135
142
|
const leafSlot = computeFeePayerBalanceLeafSlot(feePayer);
|
|
136
143
|
const txFee = tx.data.getTransactionFee(this.globalVariables.gasFees);
|
|
137
|
-
this.log.debug(`Deducting ${txFee} balance in
|
|
144
|
+
this.log.debug(`Deducting ${txFee} balance in Fee Juice for ${feePayer}`);
|
|
138
145
|
const existingBalanceWriteIndex = finalPublicDataUpdateRequests.findIndex(request => request.leafSlot.equals(leafSlot));
|
|
139
146
|
const balance = existingBalanceWriteIndex > -1
|
|
140
147
|
? finalPublicDataUpdateRequests[existingBalanceWriteIndex].newValue
|
|
141
|
-
: await this.publicStateDB.storageRead(
|
|
148
|
+
: await this.publicStateDB.storageRead(feeJuiceAddress, balanceSlot);
|
|
142
149
|
if (balance.lt(txFee)) {
|
|
143
150
|
throw new Error(`Not enough balance for fee payer to pay for transaction (got ${balance} needs ${txFee})`);
|
|
144
151
|
}
|
|
145
152
|
const updatedBalance = balance.sub(txFee);
|
|
146
|
-
await this.publicStateDB.storageWrite(
|
|
153
|
+
await this.publicStateDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance);
|
|
147
154
|
finalPublicDataUpdateRequests[existingBalanceWriteIndex > -1 ? existingBalanceWriteIndex : MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX] = new PublicDataUpdateRequest(leafSlot, updatedBalance, 0);
|
|
148
155
|
return finalPublicDataUpdateRequests;
|
|
149
156
|
}
|
|
150
157
|
async processTxWithPublicCalls(tx) {
|
|
158
|
+
const timer = new Timer();
|
|
151
159
|
let returnValues = [];
|
|
152
160
|
const publicProvingRequests = [];
|
|
153
161
|
let phase = PhaseManagerFactory.phaseFromTx(tx, this.db, this.publicExecutor, this.publicKernel, this.globalVariables, this.historicalHeader, this.publicContractsDB, this.publicStateDB);
|
|
@@ -157,8 +165,17 @@ let PublicProcessor = (() => {
|
|
|
157
165
|
let finalKernelOutput;
|
|
158
166
|
let revertReason;
|
|
159
167
|
const gasUsed = {};
|
|
168
|
+
let phaseCount = 0;
|
|
160
169
|
while (phase) {
|
|
170
|
+
phaseCount++;
|
|
171
|
+
const phaseTimer = new Timer();
|
|
161
172
|
const output = await phase.handle(tx, publicKernelPublicInput, lastKernelArtifact);
|
|
173
|
+
if (output.revertReason) {
|
|
174
|
+
this.metrics.recordRevertedPhase(phase.phase);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.metrics.recordPhaseDuration(phase.phase, phaseTimer.ms());
|
|
178
|
+
}
|
|
162
179
|
gasUsed[phase.phase] = output.gasUsed;
|
|
163
180
|
if (phase.phase === PublicKernelType.APP_LOGIC) {
|
|
164
181
|
returnValues = output.returnValues;
|
|
@@ -171,8 +188,11 @@ let PublicProcessor = (() => {
|
|
|
171
188
|
phase = PhaseManagerFactory.phaseFromOutput(publicKernelPublicInput, phase, this.db, this.publicExecutor, this.publicKernel, this.globalVariables, this.historicalHeader, this.publicContractsDB, this.publicStateDB);
|
|
172
189
|
}
|
|
173
190
|
if (!finalKernelOutput) {
|
|
191
|
+
this.metrics.recordFailedTx();
|
|
174
192
|
throw new Error('Final public kernel was not executed.');
|
|
175
193
|
}
|
|
194
|
+
this.metrics.recordClassRegistration(...ContractClassRegisteredEvent.fromLogs(tx.unencryptedLogs.unrollLogs(), ClassRegistererAddress));
|
|
195
|
+
this.metrics.recordTx(phaseCount, timer.ms());
|
|
176
196
|
const processedTx = makeProcessedTx(tx, finalKernelOutput, publicProvingRequests, revertReason, gasUsed);
|
|
177
197
|
return [processedTx, returnValues];
|
|
178
198
|
}
|
|
@@ -188,4 +208,4 @@ let PublicProcessor = (() => {
|
|
|
188
208
|
_a;
|
|
189
209
|
})();
|
|
190
210
|
export { PublicProcessor };
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLHlCQUF5QixFQUV6QixnQkFBZ0IsRUFHaEIsRUFBRSxFQUVGLGVBQWUsRUFDZixtQkFBbUIsR0FDcEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUlqQixzQ0FBc0MsRUFDdEMsMkNBQTJDLEVBQzNDLHVCQUF1QixHQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQ0wsY0FBYyxFQUdkLDhCQUE4QixFQUM5QixpQ0FBaUMsR0FDbEMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFxQyxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUtuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHdEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1UsVUFBZ0MsRUFDaEMsa0JBQXNDLEVBQ3RDLFNBQTZCLEVBQzdCLGVBQWdDO1FBSGhDLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFDN0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7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
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLHlCQUF5QixFQUd6QixnQkFBZ0IsRUFHaEIsRUFBRSxFQUVGLGVBQWUsRUFDZixtQkFBbUIsR0FDcEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsWUFBWSxFQUNaLDRCQUE0QixFQUM1QixpQkFBaUIsRUFJakIsc0NBQXNDLEVBQ3RDLDJDQUEyQyxFQUMzQyx1QkFBdUIsR0FDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFDTCxjQUFjLEVBR2QsOEJBQThCLEVBQzlCLGlDQUFpQyxHQUNsQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQXFDLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS25HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV2RTs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFDVSxVQUFnQyxFQUNoQyxrQkFBc0MsRUFD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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type PublicKernelType } from '@aztec/circuit-types';
|
|
2
|
+
import { type ContractClassRegisteredEvent } from '@aztec/circuits.js';
|
|
3
|
+
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
4
|
+
export declare class PublicProcessorMetrics {
|
|
5
|
+
readonly tracer: Tracer;
|
|
6
|
+
private txDuration;
|
|
7
|
+
private txCount;
|
|
8
|
+
private txPhaseCount;
|
|
9
|
+
private phaseDuration;
|
|
10
|
+
private phaseCount;
|
|
11
|
+
private bytecodeDeployed;
|
|
12
|
+
constructor(client: TelemetryClient, name?: string);
|
|
13
|
+
recordPhaseDuration(phaseName: PublicKernelType, durationMs: number): void;
|
|
14
|
+
recordTx(phaseCount: number, durationMs: number): void;
|
|
15
|
+
recordFailedTx(): void;
|
|
16
|
+
recordRevertedPhase(phaseName: PublicKernelType): void;
|
|
17
|
+
recordClassRegistration(...events: ContractClassRegisteredEvent[]): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=public_processor_metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public_processor_metrics.d.ts","sourceRoot":"","sources":["../../src/public/public_processor_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,sBAAsB;IACjC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,gBAAgB,CAAY;gBAExB,MAAM,EAAE,eAAe,EAAE,IAAI,SAAoB;IAkC7D,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM;IAKnE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAQ/C,cAAc;IAMd,mBAAmB,CAAC,SAAS,EAAE,gBAAgB;IAI/C,uBAAuB,CAAC,GAAG,MAAM,EAAE,4BAA4B,EAAE;CAUlE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Attributes, Metrics, ValueType, } from '@aztec/telemetry-client';
|
|
2
|
+
export class PublicProcessorMetrics {
|
|
3
|
+
constructor(client, name = 'PublicProcessor') {
|
|
4
|
+
this.tracer = client.getTracer(name);
|
|
5
|
+
const meter = client.getMeter(name);
|
|
6
|
+
this.txDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_DURATION, {
|
|
7
|
+
description: 'How long it takes to process a transaction',
|
|
8
|
+
unit: 'ms',
|
|
9
|
+
valueType: ValueType.INT,
|
|
10
|
+
});
|
|
11
|
+
this.txCount = meter.createUpDownCounter(Metrics.PUBLIC_PROCESSOR_TX_COUNT, {
|
|
12
|
+
description: 'Number of transactions processed',
|
|
13
|
+
});
|
|
14
|
+
this.txPhaseCount = meter.createUpDownCounter(Metrics.PUBLIC_PROCESSOR_TX_PHASE_COUNT, {
|
|
15
|
+
description: 'Number of phases processed',
|
|
16
|
+
});
|
|
17
|
+
this.phaseDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_PHASE_DURATION, {
|
|
18
|
+
description: 'How long it takes to process a phase',
|
|
19
|
+
unit: 'ms',
|
|
20
|
+
valueType: ValueType.INT,
|
|
21
|
+
});
|
|
22
|
+
this.phaseCount = meter.createUpDownCounter(Metrics.PUBLIC_PROCESSOR_PHASE_COUNT, {
|
|
23
|
+
description: 'Number of failed phases',
|
|
24
|
+
});
|
|
25
|
+
this.bytecodeDeployed = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE, {
|
|
26
|
+
description: 'Size of deployed bytecode',
|
|
27
|
+
unit: 'By',
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
recordPhaseDuration(phaseName, durationMs) {
|
|
31
|
+
this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: true });
|
|
32
|
+
this.phaseDuration.record(Math.ceil(durationMs), { [Attributes.TX_PHASE_NAME]: phaseName });
|
|
33
|
+
}
|
|
34
|
+
recordTx(phaseCount, durationMs) {
|
|
35
|
+
this.txPhaseCount.add(phaseCount);
|
|
36
|
+
this.txDuration.record(Math.ceil(durationMs));
|
|
37
|
+
this.txCount.add(1, {
|
|
38
|
+
[Attributes.OK]: true,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
recordFailedTx() {
|
|
42
|
+
this.txCount.add(1, {
|
|
43
|
+
[Attributes.OK]: false,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
recordRevertedPhase(phaseName) {
|
|
47
|
+
this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: false });
|
|
48
|
+
}
|
|
49
|
+
recordClassRegistration(...events) {
|
|
50
|
+
let totalBytecode = 0;
|
|
51
|
+
for (const event of events) {
|
|
52
|
+
totalBytecode += event.packedPublicBytecode.length;
|
|
53
|
+
}
|
|
54
|
+
if (totalBytecode > 0) {
|
|
55
|
+
this.bytecodeDeployed.record(totalBytecode);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvcl9tZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy9wdWJsaWNfcHJvY2Vzc29yX21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLFVBQVUsRUFFVixPQUFPLEVBSVAsU0FBUyxHQUNWLE1BQU0seUJBQXlCLENBQUM7QUFFakMsTUFBTSxPQUFPLHNCQUFzQjtJQVlqQyxZQUFZLE1BQXVCLEVBQUUsSUFBSSxHQUFHLGlCQUFpQjtRQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFO1lBQzVFLFdBQVcsRUFBRSw0Q0FBNEM7WUFDekQsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7U0FDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFO1lBQzFFLFdBQVcsRUFBRSxrQ0FBa0M7U0FDaEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLCtCQUErQixFQUFFO1lBQ3JGLFdBQVcsRUFBRSw0QkFBNEI7U0FDMUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsRUFBRTtZQUNsRixXQUFXLEVBQUUsc0NBQXNDO1lBQ25ELElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRTtZQUNoRixXQUFXLEVBQUUseUJBQXlCO1NBQ3ZDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRTtZQUMzRixXQUFXLEVBQUUsMkJBQTJCO1lBQ3hDLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQTJCLEVBQUUsVUFBa0I7UUFDakUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELFFBQVEsQ0FBQyxVQUFrQixFQUFFLFVBQWtCO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNsQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUEyQjtRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsdUJBQXVCLENBQUMsR0FBRyxNQUFzQztRQUMvRCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixhQUFhLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.49.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -56,14 +56,14 @@
|
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@aztec/circuit-types": "0.
|
|
60
|
-
"@aztec/circuits.js": "0.
|
|
61
|
-
"@aztec/foundation": "0.
|
|
62
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
63
|
-
"@aztec/protocol-contracts": "0.
|
|
64
|
-
"@aztec/telemetry-client": "0.
|
|
65
|
-
"@aztec/types": "0.
|
|
66
|
-
"@aztec/world-state": "0.
|
|
59
|
+
"@aztec/circuit-types": "0.49.2",
|
|
60
|
+
"@aztec/circuits.js": "0.49.2",
|
|
61
|
+
"@aztec/foundation": "0.49.2",
|
|
62
|
+
"@aztec/noir-protocol-circuits-types": "0.49.2",
|
|
63
|
+
"@aztec/protocol-contracts": "0.49.2",
|
|
64
|
+
"@aztec/telemetry-client": "0.49.2",
|
|
65
|
+
"@aztec/types": "0.49.2",
|
|
66
|
+
"@aztec/world-state": "0.49.2",
|
|
67
67
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
68
68
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
69
69
|
"levelup": "^5.1.1",
|
package/src/acvm/acvm.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type NoirCallStack, type SourceCodeLocation } from '@aztec/circuit-types';
|
|
2
|
-
import {
|
|
2
|
+
import type { BrilligFunctionId, FunctionDebugMetadata, OpcodeLocation } from '@aztec/foundation/abi';
|
|
3
3
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
4
|
|
|
5
5
|
import {
|
|
@@ -41,10 +41,16 @@ export interface ACIRExecutionResult {
|
|
|
41
41
|
function getSourceCodeLocationsFromOpcodeLocation(
|
|
42
42
|
opcodeLocation: string,
|
|
43
43
|
debug: FunctionDebugMetadata,
|
|
44
|
+
brilligFunctionId?: BrilligFunctionId,
|
|
44
45
|
): SourceCodeLocation[] {
|
|
45
46
|
const { debugSymbols, files } = debug;
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
let callStack = debugSymbols.locations[opcodeLocation] || [];
|
|
49
|
+
if (callStack.length === 0) {
|
|
50
|
+
if (brilligFunctionId !== undefined) {
|
|
51
|
+
callStack = debugSymbols.brillig_locations[brilligFunctionId][opcodeLocation] || [];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
48
54
|
return callStack.map(call => {
|
|
49
55
|
const { file: fileId, span } = call;
|
|
50
56
|
|
|
@@ -76,8 +82,11 @@ function getSourceCodeLocationsFromOpcodeLocation(
|
|
|
76
82
|
export function resolveOpcodeLocations(
|
|
77
83
|
opcodeLocations: OpcodeLocation[],
|
|
78
84
|
debug: FunctionDebugMetadata,
|
|
85
|
+
brilligFunctionId?: BrilligFunctionId,
|
|
79
86
|
): SourceCodeLocation[] {
|
|
80
|
-
return opcodeLocations.flatMap(opcodeLocation =>
|
|
87
|
+
return opcodeLocations.flatMap(opcodeLocation =>
|
|
88
|
+
getSourceCodeLocationsFromOpcodeLocation(opcodeLocation, debug, brilligFunctionId),
|
|
89
|
+
);
|
|
81
90
|
}
|
|
82
91
|
|
|
83
92
|
/**
|
|
@@ -143,13 +152,13 @@ export function extractCallStack(
|
|
|
143
152
|
if (!('callStack' in error) || !error.callStack) {
|
|
144
153
|
return undefined;
|
|
145
154
|
}
|
|
146
|
-
const { callStack } = error;
|
|
155
|
+
const { callStack, brilligFunctionId } = error;
|
|
147
156
|
if (!debug) {
|
|
148
157
|
return callStack;
|
|
149
158
|
}
|
|
150
159
|
|
|
151
160
|
try {
|
|
152
|
-
return resolveOpcodeLocations(callStack, debug);
|
|
161
|
+
return resolveOpcodeLocations(callStack, debug, brilligFunctionId);
|
|
153
162
|
} catch (err) {
|
|
154
163
|
return callStack;
|
|
155
164
|
}
|
|
@@ -247,14 +247,14 @@ export class Oracle {
|
|
|
247
247
|
[storageSlot]: ACVMField[],
|
|
248
248
|
[noteTypeId]: ACVMField[],
|
|
249
249
|
note: ACVMField[],
|
|
250
|
-
[
|
|
250
|
+
[noteHash]: ACVMField[],
|
|
251
251
|
[counter]: ACVMField[],
|
|
252
252
|
): ACVMField {
|
|
253
253
|
this.typedOracle.notifyCreatedNote(
|
|
254
254
|
fromACVMField(storageSlot),
|
|
255
255
|
NoteSelector.fromField(fromACVMField(noteTypeId)),
|
|
256
256
|
note.map(fromACVMField),
|
|
257
|
-
fromACVMField(
|
|
257
|
+
fromACVMField(noteHash),
|
|
258
258
|
+counter,
|
|
259
259
|
);
|
|
260
260
|
return toACVMField(0);
|
|
@@ -262,10 +262,10 @@ export class Oracle {
|
|
|
262
262
|
|
|
263
263
|
async notifyNullifiedNote(
|
|
264
264
|
[innerNullifier]: ACVMField[],
|
|
265
|
-
[
|
|
265
|
+
[noteHash]: ACVMField[],
|
|
266
266
|
[counter]: ACVMField[],
|
|
267
267
|
): Promise<ACVMField> {
|
|
268
|
-
await this.typedOracle.notifyNullifiedNote(fromACVMField(innerNullifier), fromACVMField(
|
|
268
|
+
await this.typedOracle.notifyNullifiedNote(fromACVMField(innerNullifier), fromACVMField(noteHash), +counter);
|
|
269
269
|
return toACVMField(0);
|
|
270
270
|
}
|
|
271
271
|
|
|
@@ -440,25 +440,6 @@ export class Oracle {
|
|
|
440
440
|
return [endSideEffectCounter, returnsHash].map(toACVMField);
|
|
441
441
|
}
|
|
442
442
|
|
|
443
|
-
async callPublicFunction(
|
|
444
|
-
[contractAddress]: ACVMField[],
|
|
445
|
-
[functionSelector]: ACVMField[],
|
|
446
|
-
[argsHash]: ACVMField[],
|
|
447
|
-
[sideEffectCounter]: ACVMField[],
|
|
448
|
-
[isStaticCall]: ACVMField[],
|
|
449
|
-
[isDelegateCall]: ACVMField[],
|
|
450
|
-
): Promise<ACVMField[]> {
|
|
451
|
-
const returnValues = await this.typedOracle.callPublicFunction(
|
|
452
|
-
AztecAddress.fromField(fromACVMField(contractAddress)),
|
|
453
|
-
FunctionSelector.fromField(fromACVMField(functionSelector)),
|
|
454
|
-
fromACVMField(argsHash),
|
|
455
|
-
frToNumber(fromACVMField(sideEffectCounter)),
|
|
456
|
-
frToBoolean(fromACVMField(isStaticCall)),
|
|
457
|
-
frToBoolean(fromACVMField(isDelegateCall)),
|
|
458
|
-
);
|
|
459
|
-
return returnValues.map(toACVMField);
|
|
460
|
-
}
|
|
461
|
-
|
|
462
443
|
async enqueuePublicFunctionCall(
|
|
463
444
|
[contractAddress]: ACVMField[],
|
|
464
445
|
[functionSelector]: ACVMField[],
|
|
@@ -495,6 +476,10 @@ export class Oracle {
|
|
|
495
476
|
);
|
|
496
477
|
}
|
|
497
478
|
|
|
479
|
+
notifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]) {
|
|
480
|
+
this.typedOracle.notifySetMinRevertibleSideEffectCounter(frToNumber(fromACVMField(minRevertibleSideEffectCounter)));
|
|
481
|
+
}
|
|
482
|
+
|
|
498
483
|
aes128Encrypt(input: ACVMField[], initializationVector: ACVMField[], key: ACVMField[]): ACVMField[] {
|
|
499
484
|
// Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
|
|
500
485
|
const processedInput = Buffer.from(input.map(fromACVMField).map(f => f.toNumber()));
|
|
@@ -27,8 +27,8 @@ export interface NoteData {
|
|
|
27
27
|
storageSlot: Fr;
|
|
28
28
|
/** The nonce of the note. */
|
|
29
29
|
nonce: Fr;
|
|
30
|
-
/**
|
|
31
|
-
|
|
30
|
+
/** A hash of the note. */
|
|
31
|
+
noteHash: Fr;
|
|
32
32
|
/** The corresponding nullifier of the note. Undefined for pending notes. */
|
|
33
33
|
siloedNullifier?: Fr;
|
|
34
34
|
/** The note's leaf index in the note hash tree. Undefined for pending notes. */
|
|
@@ -158,17 +158,11 @@ export abstract class TypedOracle {
|
|
|
158
158
|
throw new OracleMethodNotAvailableError('getNotes');
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
-
notifyCreatedNote(
|
|
162
|
-
_storageSlot: Fr,
|
|
163
|
-
_noteTypeId: NoteSelector,
|
|
164
|
-
_note: Fr[],
|
|
165
|
-
_innerNoteHash: Fr,
|
|
166
|
-
_counter: number,
|
|
167
|
-
): void {
|
|
161
|
+
notifyCreatedNote(_storageSlot: Fr, _noteTypeId: NoteSelector, _note: Fr[], _noteHash: Fr, _counter: number): void {
|
|
168
162
|
throw new OracleMethodNotAvailableError('notifyCreatedNote');
|
|
169
163
|
}
|
|
170
164
|
|
|
171
|
-
notifyNullifiedNote(_innerNullifier: Fr,
|
|
165
|
+
notifyNullifiedNote(_innerNullifier: Fr, _noteHash: Fr, _counter: number): Promise<void> {
|
|
172
166
|
throw new OracleMethodNotAvailableError('notifyNullifiedNote');
|
|
173
167
|
}
|
|
174
168
|
|
|
@@ -253,17 +247,6 @@ export abstract class TypedOracle {
|
|
|
253
247
|
throw new OracleMethodNotAvailableError('callPrivateFunction');
|
|
254
248
|
}
|
|
255
249
|
|
|
256
|
-
callPublicFunction(
|
|
257
|
-
_targetContractAddress: AztecAddress,
|
|
258
|
-
_functionSelector: FunctionSelector,
|
|
259
|
-
_argsHash: Fr,
|
|
260
|
-
_sideEffectCounter: number,
|
|
261
|
-
_isStaticCall: boolean,
|
|
262
|
-
_isDelegateCall: boolean,
|
|
263
|
-
): Promise<Fr[]> {
|
|
264
|
-
throw new OracleMethodNotAvailableError('callPublicFunction');
|
|
265
|
-
}
|
|
266
|
-
|
|
267
250
|
enqueuePublicFunctionCall(
|
|
268
251
|
_targetContractAddress: AztecAddress,
|
|
269
252
|
_functionSelector: FunctionSelector,
|
|
@@ -286,6 +269,10 @@ export abstract class TypedOracle {
|
|
|
286
269
|
throw new OracleMethodNotAvailableError('setPublicTeardownFunctionCall');
|
|
287
270
|
}
|
|
288
271
|
|
|
272
|
+
notifySetMinRevertibleSideEffectCounter(_minRevertibleSideEffectCounter: number): void {
|
|
273
|
+
throw new OracleMethodNotAvailableError('notifySetMinRevertibleSideEffectCounter');
|
|
274
|
+
}
|
|
275
|
+
|
|
289
276
|
aes128Encrypt(_input: Buffer, _initializationVector: Buffer, _key: Buffer): Buffer {
|
|
290
277
|
throw new OracleMethodNotAvailableError('encrypt');
|
|
291
278
|
}
|