@aztec/txe 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c
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/bin/index.d.ts +1 -1
- package/dest/constants.d.ts +3 -0
- package/dest/constants.d.ts.map +1 -0
- package/dest/constants.js +2 -0
- package/dest/index.d.ts +1 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +3 -2
- package/dest/oracle/interfaces.d.ts +10 -7
- package/dest/oracle/interfaces.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.d.ts +6 -6
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_public_context.js +7 -8
- package/dest/oracle/txe_oracle_top_level_context.d.ts +22 -12
- package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
- package/dest/oracle/txe_oracle_top_level_context.js +124 -78
- package/dest/rpc_translator.d.ts +29 -14
- package/dest/rpc_translator.d.ts.map +1 -1
- package/dest/rpc_translator.js +108 -45
- package/dest/state_machine/archiver.d.ts +21 -51
- package/dest/state_machine/archiver.d.ts.map +1 -1
- package/dest/state_machine/archiver.js +64 -94
- package/dest/state_machine/dummy_p2p_client.d.ts +9 -6
- package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
- package/dest/state_machine/dummy_p2p_client.js +16 -8
- package/dest/state_machine/global_variable_builder.d.ts +6 -4
- package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
- package/dest/state_machine/global_variable_builder.js +13 -1
- package/dest/state_machine/index.d.ts +5 -5
- package/dest/state_machine/index.d.ts.map +1 -1
- package/dest/state_machine/index.js +22 -19
- package/dest/state_machine/mock_epoch_cache.d.ts +12 -10
- package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
- package/dest/state_machine/mock_epoch_cache.js +17 -13
- package/dest/state_machine/synchronizer.d.ts +3 -2
- package/dest/state_machine/synchronizer.d.ts.map +1 -1
- package/dest/state_machine/synchronizer.js +5 -4
- package/dest/txe_session.d.ts +21 -13
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +97 -48
- package/dest/util/encoding.d.ts +615 -16
- package/dest/util/encoding.d.ts.map +1 -1
- package/dest/util/encoding.js +1 -1
- package/dest/util/expected_failure_error.d.ts +1 -1
- package/dest/util/expected_failure_error.d.ts.map +1 -1
- package/dest/util/txe_account_store.d.ts +10 -0
- package/dest/util/txe_account_store.d.ts.map +1 -0
- package/dest/util/{txe_account_data_provider.js → txe_account_store.js} +1 -1
- package/dest/util/txe_contract_store.d.ts +12 -0
- package/dest/util/txe_contract_store.d.ts.map +1 -0
- package/dest/util/{txe_contract_data_provider.js → txe_contract_store.js} +3 -3
- package/dest/util/txe_public_contract_data_source.d.ts +7 -6
- package/dest/util/txe_public_contract_data_source.d.ts.map +1 -1
- package/dest/util/txe_public_contract_data_source.js +11 -11
- package/dest/utils/block_creation.d.ts +21 -6
- package/dest/utils/block_creation.d.ts.map +1 -1
- package/dest/utils/block_creation.js +36 -4
- package/dest/utils/tx_effect_creation.d.ts +3 -3
- package/dest/utils/tx_effect_creation.d.ts.map +1 -1
- package/dest/utils/tx_effect_creation.js +4 -7
- package/package.json +18 -17
- package/src/constants.ts +3 -0
- package/src/index.ts +15 -12
- package/src/oracle/interfaces.ts +9 -6
- package/src/oracle/txe_oracle_public_context.ts +9 -14
- package/src/oracle/txe_oracle_top_level_context.ts +174 -105
- package/src/rpc_translator.ts +134 -56
- package/src/state_machine/archiver.ts +65 -117
- package/src/state_machine/dummy_p2p_client.ts +22 -10
- package/src/state_machine/global_variable_builder.ts +22 -4
- package/src/state_machine/index.ts +27 -18
- package/src/state_machine/mock_epoch_cache.ts +20 -20
- package/src/state_machine/synchronizer.ts +6 -5
- package/src/txe_session.ts +195 -82
- package/src/util/encoding.ts +1 -1
- package/src/util/{txe_account_data_provider.ts → txe_account_store.ts} +1 -1
- package/src/util/{txe_contract_data_provider.ts → txe_contract_store.ts} +3 -3
- package/src/util/txe_public_contract_data_source.ts +13 -12
- package/src/utils/block_creation.ts +47 -14
- package/src/utils/tx_effect_creation.ts +5 -12
- package/dest/util/txe_account_data_provider.d.ts +0 -10
- package/dest/util/txe_account_data_provider.d.ts.map +0 -1
- package/dest/util/txe_contract_data_provider.d.ts +0 -12
- package/dest/util/txe_contract_data_provider.d.ts.map +0 -1
package/dest/rpc_translator.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { Fr, Point } from '@aztec/aztec.js/fields';
|
|
2
2
|
import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX } from '@aztec/constants';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { packAsHintedNote } from '@aztec/pxe/simulator';
|
|
5
|
+
import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
|
|
5
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
-
import {
|
|
7
|
+
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
7
8
|
import { addressFromSingle, arrayOfArraysToBoundedVecOfArrays, arrayToBoundedVec, bufferToU8Array, fromArray, fromSingle, fromUintArray, fromUintBoundedVec, toArray, toForeignCallResult, toSingle } from './util/encoding.js';
|
|
9
|
+
const MAX_EVENT_LEN = 12; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_RESERVED_FIELDS
|
|
10
|
+
const MAX_PRIVATE_EVENTS_PER_TXE_QUERY = 5;
|
|
8
11
|
export class UnavailableOracleError extends Error {
|
|
9
12
|
constructor(oracleName){
|
|
10
13
|
super(`${oracleName} oracles not available with the current handler`);
|
|
@@ -64,7 +67,7 @@ export class RPCTranslator {
|
|
|
64
67
|
}
|
|
65
68
|
async txeSetPrivateTXEContext(foreignContractAddressIsSome, foreignContractAddressValue, foreignAnchorBlockNumberIsSome, foreignAnchorBlockNumberValue) {
|
|
66
69
|
const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
|
|
67
|
-
const anchorBlockNumber = fromSingle(foreignAnchorBlockNumberIsSome).toBool() ? fromSingle(foreignAnchorBlockNumberValue).toNumber() : undefined;
|
|
70
|
+
const anchorBlockNumber = fromSingle(foreignAnchorBlockNumberIsSome).toBool() ? BlockNumber(fromSingle(foreignAnchorBlockNumberValue).toNumber()) : undefined;
|
|
68
71
|
const privateContextInputs = await this.stateHandler.enterPrivateState(contractAddress, anchorBlockNumber);
|
|
69
72
|
return toForeignCallResult(privateContextInputs.toFields().map(toSingle));
|
|
70
73
|
}
|
|
@@ -80,6 +83,12 @@ export class RPCTranslator {
|
|
|
80
83
|
}
|
|
81
84
|
// Other oracles - these get handled by the oracle handler
|
|
82
85
|
// TXE-specific oracles
|
|
86
|
+
txeGetDefaultAddress() {
|
|
87
|
+
const defaultAddress = this.handlerAsTxe().txeGetDefaultAddress();
|
|
88
|
+
return toForeignCallResult([
|
|
89
|
+
toSingle(defaultAddress)
|
|
90
|
+
]);
|
|
91
|
+
}
|
|
83
92
|
async txeGetNextBlockNumber() {
|
|
84
93
|
const nextBlockNumber = await this.handlerAsTxe().txeGetNextBlockNumber();
|
|
85
94
|
return toForeignCallResult([
|
|
@@ -163,8 +172,29 @@ export class RPCTranslator {
|
|
|
163
172
|
...arrayToBoundedVec(toArray(nullifiers), MAX_NULLIFIERS_PER_TX)
|
|
164
173
|
]);
|
|
165
174
|
}
|
|
166
|
-
|
|
167
|
-
|
|
175
|
+
async txeGetPrivateEvents(foreignSelector, foreignContractAddress, foreignScope) {
|
|
176
|
+
const selector = EventSelector.fromField(fromSingle(foreignSelector));
|
|
177
|
+
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
178
|
+
const scope = addressFromSingle(foreignScope);
|
|
179
|
+
const events = await this.handlerAsTxe().txeGetPrivateEvents(selector, contractAddress, scope);
|
|
180
|
+
if (events.length > MAX_PRIVATE_EVENTS_PER_TXE_QUERY) {
|
|
181
|
+
throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);
|
|
182
|
+
}
|
|
183
|
+
if (events.some((e)=>e.length > MAX_EVENT_LEN)) {
|
|
184
|
+
throw new Error(`Some private event has length larger than maxLen ${MAX_EVENT_LEN}`);
|
|
185
|
+
}
|
|
186
|
+
// This is a workaround as Noir does not currently let us return nested structs with arrays. We instead return a raw
|
|
187
|
+
// multidimensional array in get_private_events_oracle and create the BoundedVecs here.
|
|
188
|
+
const rawArrayStorage = events.map((e)=>e.concat(Array(MAX_EVENT_LEN - e.length).fill(new Fr(0)))).concat(Array(MAX_PRIVATE_EVENTS_PER_TXE_QUERY - events.length).fill(Array(MAX_EVENT_LEN).fill(new Fr(0)))).flat();
|
|
189
|
+
const eventLengths = events.map((e)=>new Fr(e.length)).concat(Array(MAX_PRIVATE_EVENTS_PER_TXE_QUERY - events.length).fill(new Fr(0)));
|
|
190
|
+
const queryLength = new Fr(events.length);
|
|
191
|
+
return toForeignCallResult([
|
|
192
|
+
toArray(rawArrayStorage),
|
|
193
|
+
toArray(eventLengths),
|
|
194
|
+
toSingle(queryLength)
|
|
195
|
+
]);
|
|
196
|
+
}
|
|
197
|
+
privateStoreInExecutionCache(foreignValues, foreignHash) {
|
|
168
198
|
const values = fromArray(foreignValues);
|
|
169
199
|
const hash = fromSingle(foreignHash);
|
|
170
200
|
this.handlerAsPrivate().privateStoreInExecutionCache(values, hash);
|
|
@@ -186,26 +216,28 @@ export class RPCTranslator {
|
|
|
186
216
|
this.handlerAsMisc().utilityDebugLog(level, message, fields);
|
|
187
217
|
return toForeignCallResult([]);
|
|
188
218
|
}
|
|
189
|
-
async utilityStorageRead(foreignContractAddress, foreignStartStorageSlot,
|
|
219
|
+
async utilityStorageRead(foreignBlockHash, foreignContractAddress, foreignStartStorageSlot, foreignNumberOfElements) {
|
|
220
|
+
const blockHash = L2BlockHash.fromString(foreignBlockHash);
|
|
190
221
|
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
191
222
|
const startStorageSlot = fromSingle(foreignStartStorageSlot);
|
|
192
|
-
const blockNumber = fromSingle(foreignBlockNumber).toNumber();
|
|
193
223
|
const numberOfElements = fromSingle(foreignNumberOfElements).toNumber();
|
|
194
|
-
const values = await this.handlerAsUtility().utilityStorageRead(contractAddress, startStorageSlot,
|
|
224
|
+
const values = await this.handlerAsUtility().utilityStorageRead(blockHash, contractAddress, startStorageSlot, numberOfElements);
|
|
195
225
|
return toForeignCallResult([
|
|
196
226
|
toArray(values)
|
|
197
227
|
]);
|
|
198
228
|
}
|
|
199
|
-
async utilityGetPublicDataWitness(
|
|
200
|
-
const
|
|
229
|
+
async utilityGetPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
|
|
230
|
+
const blockHash = L2BlockHash.fromString(foreignBlockHash);
|
|
201
231
|
const leafSlot = fromSingle(foreignLeafSlot);
|
|
202
|
-
const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(
|
|
232
|
+
const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(blockHash, leafSlot);
|
|
203
233
|
if (!witness) {
|
|
204
|
-
throw new Error(`Public data witness not found for slot ${leafSlot} at block ${
|
|
234
|
+
throw new Error(`Public data witness not found for slot ${leafSlot} at block ${blockHash.toString()}.`);
|
|
205
235
|
}
|
|
206
236
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
207
237
|
}
|
|
208
|
-
async utilityGetNotes(foreignStorageSlot, foreignNumSelects, foreignSelectByIndexes, foreignSelectByOffsets, foreignSelectByLengths, foreignSelectValues, foreignSelectComparators, foreignSortByIndexes, foreignSortByOffsets, foreignSortByLengths, foreignSortOrder, foreignLimit, foreignOffset, foreignStatus, foreignMaxNotes,
|
|
238
|
+
async utilityGetNotes(foreignOwnerIsSome, foreignOwnerValue, foreignStorageSlot, foreignNumSelects, foreignSelectByIndexes, foreignSelectByOffsets, foreignSelectByLengths, foreignSelectValues, foreignSelectComparators, foreignSortByIndexes, foreignSortByOffsets, foreignSortByLengths, foreignSortOrder, foreignLimit, foreignOffset, foreignStatus, foreignMaxNotes, foreignPackedHintedNoteLength) {
|
|
239
|
+
// Parse Option<AztecAddress>: ownerIsSome is 0 for None, 1 for Some
|
|
240
|
+
const owner = fromSingle(foreignOwnerIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignOwnerValue)) : undefined;
|
|
209
241
|
const storageSlot = fromSingle(foreignStorageSlot);
|
|
210
242
|
const numSelects = fromSingle(foreignNumSelects).toNumber();
|
|
211
243
|
const selectByIndexes = fromArray(foreignSelectByIndexes).map((fr)=>fr.toNumber());
|
|
@@ -221,21 +253,31 @@ export class RPCTranslator {
|
|
|
221
253
|
const offset = fromSingle(foreignOffset).toNumber();
|
|
222
254
|
const status = fromSingle(foreignStatus).toNumber();
|
|
223
255
|
const maxNotes = fromSingle(foreignMaxNotes).toNumber();
|
|
224
|
-
const
|
|
225
|
-
const noteDatas = await this.handlerAsUtility().utilityGetNotes(storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status);
|
|
226
|
-
const returnDataAsArrayOfArrays = noteDatas.map(
|
|
256
|
+
const packedHintedNoteLength = fromSingle(foreignPackedHintedNoteLength).toNumber();
|
|
257
|
+
const noteDatas = await this.handlerAsUtility().utilityGetNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status);
|
|
258
|
+
const returnDataAsArrayOfArrays = noteDatas.map((noteData)=>packAsHintedNote({
|
|
259
|
+
contractAddress: noteData.contractAddress,
|
|
260
|
+
owner: noteData.owner,
|
|
261
|
+
randomness: noteData.randomness,
|
|
262
|
+
storageSlot: noteData.storageSlot,
|
|
263
|
+
noteNonce: noteData.noteNonce,
|
|
264
|
+
isPending: noteData.isPending,
|
|
265
|
+
note: noteData.note
|
|
266
|
+
}));
|
|
227
267
|
// Now we convert each sub-array to an array of ForeignCallSingles
|
|
228
268
|
const returnDataAsArrayOfForeignCallSingleArrays = returnDataAsArrayOfArrays.map((subArray)=>subArray.map(toSingle));
|
|
229
269
|
// At last we convert the array of arrays to a bounded vec of arrays
|
|
230
|
-
return toForeignCallResult(arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfForeignCallSingleArrays, maxNotes,
|
|
270
|
+
return toForeignCallResult(arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfForeignCallSingleArrays, maxNotes, packedHintedNoteLength));
|
|
231
271
|
}
|
|
232
|
-
privateNotifyCreatedNote(foreignStorageSlot, foreignNoteTypeId, foreignNote, foreignNoteHash, foreignCounter) {
|
|
272
|
+
privateNotifyCreatedNote(foreignOwner, foreignStorageSlot, foreignRandomness, foreignNoteTypeId, foreignNote, foreignNoteHash, foreignCounter) {
|
|
273
|
+
const owner = addressFromSingle(foreignOwner);
|
|
233
274
|
const storageSlot = fromSingle(foreignStorageSlot);
|
|
275
|
+
const randomness = fromSingle(foreignRandomness);
|
|
234
276
|
const noteTypeId = NoteSelector.fromField(fromSingle(foreignNoteTypeId));
|
|
235
277
|
const note = fromArray(foreignNote);
|
|
236
278
|
const noteHash = fromSingle(foreignNoteHash);
|
|
237
279
|
const counter = fromSingle(foreignCounter).toNumber();
|
|
238
|
-
this.handlerAsPrivate().privateNotifyCreatedNote(storageSlot, noteTypeId, note, noteHash, counter);
|
|
280
|
+
this.handlerAsPrivate().privateNotifyCreatedNote(owner, storageSlot, randomness, noteTypeId, note, noteHash, counter);
|
|
239
281
|
return toForeignCallResult([]);
|
|
240
282
|
}
|
|
241
283
|
async privateNotifyNullifiedNote(foreignInnerNullifier, foreignNoteHash, foreignCounter) {
|
|
@@ -250,6 +292,14 @@ export class RPCTranslator {
|
|
|
250
292
|
await this.handlerAsPrivate().privateNotifyCreatedNullifier(innerNullifier);
|
|
251
293
|
return toForeignCallResult([]);
|
|
252
294
|
}
|
|
295
|
+
async privateIsNullifierPending(foreignInnerNullifier, foreignContractAddress) {
|
|
296
|
+
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
297
|
+
const contractAddress = addressFromSingle(foreignContractAddress);
|
|
298
|
+
const isPending = await this.handlerAsPrivate().privateIsNullifierPending(innerNullifier, contractAddress);
|
|
299
|
+
return toForeignCallResult([
|
|
300
|
+
toSingle(new Fr(isPending))
|
|
301
|
+
]);
|
|
302
|
+
}
|
|
253
303
|
async utilityCheckNullifierExists(foreignInnerNullifier) {
|
|
254
304
|
const innerNullifier = fromSingle(foreignInnerNullifier);
|
|
255
305
|
const exists = await this.handlerAsUtility().utilityCheckNullifierExists(innerNullifier);
|
|
@@ -286,12 +336,12 @@ export class RPCTranslator {
|
|
|
286
336
|
privateCallPrivateFunction(_foreignTargetContractAddress, _foreignFunctionSelector, _foreignArgsHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
|
|
287
337
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead');
|
|
288
338
|
}
|
|
289
|
-
async utilityGetNullifierMembershipWitness(
|
|
290
|
-
const
|
|
339
|
+
async utilityGetNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
340
|
+
const blockHash = L2BlockHash.fromString(foreignBlockHash);
|
|
291
341
|
const nullifier = fromSingle(foreignNullifier);
|
|
292
|
-
const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(
|
|
342
|
+
const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(blockHash, nullifier);
|
|
293
343
|
if (!witness) {
|
|
294
|
-
throw new Error(`Nullifier membership witness not found at block ${
|
|
344
|
+
throw new Error(`Nullifier membership witness not found at block ${blockHash}.`);
|
|
295
345
|
}
|
|
296
346
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
297
347
|
}
|
|
@@ -314,37 +364,49 @@ export class RPCTranslator {
|
|
|
314
364
|
privateNotifySetMinRevertibleSideEffectCounter(_foreignMinRevertibleSideEffectCounter) {
|
|
315
365
|
throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
|
|
316
366
|
}
|
|
317
|
-
async
|
|
318
|
-
const
|
|
367
|
+
async privateIsSideEffectCounterRevertible(foreignSideEffectCounter) {
|
|
368
|
+
const sideEffectCounter = fromSingle(foreignSideEffectCounter).toNumber();
|
|
369
|
+
const isRevertible = await this.handlerAsPrivate().privateIsSideEffectCounterRevertible(sideEffectCounter);
|
|
370
|
+
return toForeignCallResult([
|
|
371
|
+
toSingle(new Fr(isRevertible))
|
|
372
|
+
]);
|
|
373
|
+
}
|
|
374
|
+
utilityGetUtilityContext() {
|
|
375
|
+
const context = this.handlerAsUtility().utilityGetUtilityContext();
|
|
319
376
|
return toForeignCallResult(context.toNoirRepresentation());
|
|
320
377
|
}
|
|
321
378
|
async utilityGetBlockHeader(foreignBlockNumber) {
|
|
322
|
-
const blockNumber = fromSingle(foreignBlockNumber).toNumber();
|
|
379
|
+
const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
|
|
323
380
|
const header = await this.handlerAsUtility().utilityGetBlockHeader(blockNumber);
|
|
324
381
|
if (!header) {
|
|
325
382
|
throw new Error(`Block header not found for block ${blockNumber}.`);
|
|
326
383
|
}
|
|
327
384
|
return toForeignCallResult(header.toFields().map(toSingle));
|
|
328
385
|
}
|
|
329
|
-
async
|
|
330
|
-
const
|
|
331
|
-
const treeId = fromSingle(foreignTreeId).toNumber();
|
|
386
|
+
async utilityGetNoteHashMembershipWitness(foreignBlockHash, foreignLeafValue) {
|
|
387
|
+
const blockHash = L2BlockHash.fromString(foreignBlockHash);
|
|
332
388
|
const leafValue = fromSingle(foreignLeafValue);
|
|
333
|
-
const witness = await this.handlerAsUtility().
|
|
389
|
+
const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(blockHash, leafValue);
|
|
334
390
|
if (!witness) {
|
|
335
|
-
throw new Error(`
|
|
391
|
+
throw new Error(`Note hash ${leafValue} not found in the note hash tree at block ${blockHash.toString()}.`);
|
|
336
392
|
}
|
|
337
|
-
return toForeignCallResult(
|
|
338
|
-
toSingle(witness[0]),
|
|
339
|
-
toArray(witness.slice(1))
|
|
340
|
-
]);
|
|
393
|
+
return toForeignCallResult(witness.toNoirRepresentation());
|
|
341
394
|
}
|
|
342
|
-
async
|
|
343
|
-
const
|
|
395
|
+
async utilityGetArchiveMembershipWitness(foreignBlockHash, foreignLeafValue) {
|
|
396
|
+
const blockHash = L2BlockHash.fromString(foreignBlockHash);
|
|
397
|
+
const leafValue = fromSingle(foreignLeafValue);
|
|
398
|
+
const witness = await this.handlerAsUtility().utilityGetArchiveMembershipWitness(blockHash, leafValue);
|
|
399
|
+
if (!witness) {
|
|
400
|
+
throw new Error(`Block hash ${leafValue} not found in the archive tree at block ${blockHash.toString()}.`);
|
|
401
|
+
}
|
|
402
|
+
return toForeignCallResult(witness.toNoirRepresentation());
|
|
403
|
+
}
|
|
404
|
+
async utilityGetLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
|
|
405
|
+
const blockHash = L2BlockHash.fromString(foreignBlockHash);
|
|
344
406
|
const nullifier = fromSingle(foreignNullifier);
|
|
345
|
-
const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(
|
|
407
|
+
const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(blockHash, nullifier);
|
|
346
408
|
if (!witness) {
|
|
347
|
-
throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${
|
|
409
|
+
throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
|
|
348
410
|
}
|
|
349
411
|
return toForeignCallResult(witness.toNoirRepresentation());
|
|
350
412
|
}
|
|
@@ -438,9 +500,10 @@ export class RPCTranslator {
|
|
|
438
500
|
// TODO(#8811): Implement
|
|
439
501
|
return toForeignCallResult([]);
|
|
440
502
|
}
|
|
441
|
-
async avmOpcodeStorageRead(foreignSlot) {
|
|
503
|
+
async avmOpcodeStorageRead(foreignSlot, foreignContractAddress) {
|
|
442
504
|
const slot = fromSingle(foreignSlot);
|
|
443
|
-
const
|
|
505
|
+
const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
|
|
506
|
+
const value = (await this.handlerAsAvm().avmOpcodeStorageRead(slot, contractAddress)).value;
|
|
444
507
|
return toForeignCallResult([
|
|
445
508
|
toSingle(new Fr(value))
|
|
446
509
|
]);
|
|
@@ -553,7 +616,7 @@ export class RPCTranslator {
|
|
|
553
616
|
avmOpcodeSuccessCopy() {
|
|
554
617
|
throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
|
|
555
618
|
}
|
|
556
|
-
async txePrivateCallNewFlow(foreignFrom, foreignTargetContractAddress, foreignFunctionSelector,
|
|
619
|
+
async txePrivateCallNewFlow(foreignFrom, foreignTargetContractAddress, foreignFunctionSelector, foreignArgs, foreignArgsHash, foreignIsStaticCall) {
|
|
557
620
|
const from = addressFromSingle(foreignFrom);
|
|
558
621
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
559
622
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
@@ -565,7 +628,7 @@ export class RPCTranslator {
|
|
|
565
628
|
toArray(returnValues)
|
|
566
629
|
]);
|
|
567
630
|
}
|
|
568
|
-
async txeSimulateUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector,
|
|
631
|
+
async txeSimulateUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
|
|
569
632
|
const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
|
|
570
633
|
const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
|
|
571
634
|
const args = fromArray(foreignArgs);
|
|
@@ -574,7 +637,7 @@ export class RPCTranslator {
|
|
|
574
637
|
toArray(returnValues)
|
|
575
638
|
]);
|
|
576
639
|
}
|
|
577
|
-
async txePublicCallNewFlow(foreignFrom, foreignAddress,
|
|
640
|
+
async txePublicCallNewFlow(foreignFrom, foreignAddress, foreignCalldata, foreignIsStaticCall) {
|
|
578
641
|
const from = addressFromSingle(foreignFrom);
|
|
579
642
|
const address = addressFromSingle(foreignAddress);
|
|
580
643
|
const calldata = fromArray(foreignCalldata);
|
|
@@ -1,61 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ArchiverDataSourceBase } from '@aztec/archiver';
|
|
2
|
+
import { type EpochNumber, type SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
4
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
5
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
7
|
-
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
6
|
+
import type { L2Tips, ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
7
|
+
import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
8
8
|
import type { L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
/**
|
|
10
|
+
* TXE Archiver implementation.
|
|
11
|
+
* Provides most of the endpoints needed by the node for reading from and writing to state,
|
|
12
|
+
* without needing any of the extra overhead that the Archiver itself requires (i.e. an L1 client).
|
|
13
|
+
*/
|
|
14
|
+
export declare class TXEArchiver extends ArchiverDataSourceBase {
|
|
15
|
+
private readonly updater;
|
|
12
16
|
constructor(db: AztecAsyncKVStore);
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
* @returns The number of the latest L2 block processed by the block source implementation.
|
|
17
|
-
*/
|
|
18
|
-
getBlockNumber(): Promise<number>;
|
|
19
|
-
/**
|
|
20
|
-
* Gets the number of the latest L2 block proven seen by the block source implementation.
|
|
21
|
-
* @returns The number of the latest L2 block proven seen by the block source implementation.
|
|
22
|
-
*/
|
|
23
|
-
getProvenBlockNumber(): Promise<number>;
|
|
24
|
-
/**
|
|
25
|
-
* Gets a published l2 block. If a negative number is passed, the block returned is the most recent.
|
|
26
|
-
* @param number - The block number to return (inclusive).
|
|
27
|
-
* @returns The requested L2 block.
|
|
28
|
-
*/
|
|
29
|
-
getPublishedBlock(number: number): Promise<PublishedL2Block | undefined>;
|
|
30
|
-
/**
|
|
31
|
-
* Gets an l2 block. If a negative number is passed, the block returned is the most recent.
|
|
32
|
-
* @param number - The block number to return (inclusive).
|
|
33
|
-
* @returns The requested L2 block.
|
|
34
|
-
*/
|
|
35
|
-
getBlock(number: number | 'latest'): Promise<L2Block | undefined>;
|
|
36
|
-
/**
|
|
37
|
-
* Gets an l2 block header.
|
|
38
|
-
* @param number - The block number to return or 'latest' for the most recent one.
|
|
39
|
-
* @returns The requested L2 block header.
|
|
40
|
-
*/
|
|
41
|
-
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
|
|
42
|
-
getBlocks(from: number, limit: number, _proven?: boolean): Promise<L2Block[]>;
|
|
43
|
-
getL2SlotNumber(): Promise<bigint>;
|
|
44
|
-
getL2EpochNumber(): Promise<bigint>;
|
|
45
|
-
getBlocksForEpoch(_epochNumber: bigint): Promise<L2Block[]>;
|
|
46
|
-
getBlockHeadersForEpoch(_epochNumber: bigint): Promise<BlockHeader[]>;
|
|
47
|
-
isEpochComplete(_epochNumber: bigint): Promise<boolean>;
|
|
48
|
-
getL2Tips(): Promise<L2Tips>;
|
|
17
|
+
addCheckpoints(checkpoints: PublishedCheckpoint[], result?: ValidateCheckpointResult): Promise<boolean>;
|
|
18
|
+
getRollupAddress(): Promise<EthAddress>;
|
|
19
|
+
getRegistryAddress(): Promise<EthAddress>;
|
|
49
20
|
getL1Constants(): Promise<L1RollupConstants>;
|
|
50
21
|
getGenesisValues(): Promise<{
|
|
51
22
|
genesisArchiveRoot: Fr;
|
|
52
23
|
}>;
|
|
24
|
+
getL1Timestamp(): Promise<bigint | undefined>;
|
|
25
|
+
getL2Tips(): Promise<L2Tips>;
|
|
26
|
+
getL2SlotNumber(): Promise<SlotNumber | undefined>;
|
|
27
|
+
getL2EpochNumber(): Promise<EpochNumber | undefined>;
|
|
28
|
+
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
|
|
53
29
|
syncImmediate(): Promise<void>;
|
|
54
|
-
getContract(_address: AztecAddress, _timestamp?: UInt64): Promise<ContractInstanceWithAddress | undefined>;
|
|
55
|
-
getRollupAddress(): Promise<EthAddress>;
|
|
56
|
-
getRegistryAddress(): Promise<EthAddress>;
|
|
57
|
-
getL1Timestamp(): Promise<bigint>;
|
|
58
|
-
isPendingChainInvalid(): Promise<boolean>;
|
|
59
|
-
getPendingChainValidationStatus(): Promise<ValidateBlockResult>;
|
|
60
30
|
}
|
|
61
|
-
//# sourceMappingURL=
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0ZV9tYWNoaW5lL2FyY2hpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBaUQsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RyxPQUFPLEVBQW9CLEtBQUssV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQW9DLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRTs7OztHQUlHO0FBQ0gscUJBQWEsV0FBWSxTQUFRLHNCQUFzQjtJQUNyRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBNEM7SUFFcEUsWUFBWSxFQUFFLEVBQUUsaUJBQWlCLEVBR2hDO0lBR1ksY0FBYyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FHbkg7SUFJTSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRTdDO0lBRU0sa0JBQWtCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUUvQztJQUVNLGNBQWMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FFbEQ7SUFFTSxnQkFBZ0IsSUFBSSxPQUFPLENBQUM7UUFBRSxrQkFBa0IsRUFBRSxFQUFFLENBQUE7S0FBRSxDQUFDLENBRTdEO0lBRU0sY0FBYyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRW5EO0lBRVksU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0E4QnhDO0lBRU0sZUFBZSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXhEO0lBRU0sZ0JBQWdCLElBQUksT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FFMUQ7SUFFTSxlQUFlLENBQUMsWUFBWSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWxFO0lBRU0sYUFBYSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFcEM7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/state_machine/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/state_machine/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAiD,MAAM,iBAAiB,CAAC;AAExG,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACtG,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAoC,MAAM,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,sBAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IAEpE,YAAY,EAAE,EAAE,iBAAiB,EAGhC;IAGY,cAAc,CAAC,WAAW,EAAE,mBAAmB,EAAE,EAAE,MAAM,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGnH;IAIM,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,CAE7C;IAEM,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,CAE/C;IAEM,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAElD;IAEM,gBAAgB,IAAI,OAAO,CAAC;QAAE,kBAAkB,EAAE,EAAE,CAAA;KAAE,CAAC,CAE7D;IAEM,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEnD;IAEY,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CA8BxC;IAEM,eAAe,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAExD;IAEM,gBAAgB,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAE1D;IAEM,eAAe,CAAC,YAAY,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAElE;IAEM,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;CACF"}
|
|
@@ -1,70 +1,77 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ArchiverDataSourceBase, ArchiverDataStoreUpdater, KVArchiverDataStore } from '@aztec/archiver';
|
|
2
2
|
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
|
+
/**
|
|
6
|
+
* TXE Archiver implementation.
|
|
7
|
+
* Provides most of the endpoints needed by the node for reading from and writing to state,
|
|
8
|
+
* without needing any of the extra overhead that the Archiver itself requires (i.e. an L1 client).
|
|
9
|
+
*/ export class TXEArchiver extends ArchiverDataSourceBase {
|
|
10
|
+
updater = new ArchiverDataStoreUpdater(this.store);
|
|
8
11
|
constructor(db){
|
|
9
|
-
|
|
12
|
+
const store = new KVArchiverDataStore(db, 9999, {
|
|
13
|
+
epochDuration: 32
|
|
14
|
+
});
|
|
15
|
+
super(store);
|
|
10
16
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
]);
|
|
16
|
-
return opResults.every(Boolean);
|
|
17
|
+
// TXE-specific method for adding checkpoints
|
|
18
|
+
async addCheckpoints(checkpoints, result) {
|
|
19
|
+
await this.updater.setNewCheckpointData(checkpoints, result);
|
|
20
|
+
return true;
|
|
17
21
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
*/ getBlockNumber() {
|
|
22
|
-
return this.store.getSynchedL2BlockNumber();
|
|
22
|
+
// Abstract method implementations
|
|
23
|
+
getRollupAddress() {
|
|
24
|
+
throw new Error('TXE Archiver does not implement "getRollupAddress"');
|
|
23
25
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* @returns The number of the latest L2 block proven seen by the block source implementation.
|
|
27
|
-
*/ getProvenBlockNumber() {
|
|
28
|
-
return this.store.getSynchedL2BlockNumber();
|
|
26
|
+
getRegistryAddress() {
|
|
27
|
+
throw new Error('TXE Archiver does not implement "getRegistryAddress"');
|
|
29
28
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
* @param number - The block number to return (inclusive).
|
|
33
|
-
* @returns The requested L2 block.
|
|
34
|
-
*/ async getPublishedBlock(number) {
|
|
35
|
-
// If the number provided is -ve, then return the latest block.
|
|
36
|
-
if (number < 0) {
|
|
37
|
-
number = await this.store.getSynchedL2BlockNumber();
|
|
38
|
-
}
|
|
39
|
-
if (number == 0) {
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
const blocks = await this.store.getPublishedBlocks(number, 1);
|
|
43
|
-
return blocks.length === 0 ? undefined : blocks[0];
|
|
29
|
+
getL1Constants() {
|
|
30
|
+
throw new Error('TXE Archiver does not implement "getL1Constants"');
|
|
44
31
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
*/ getBlock(number) {
|
|
50
|
-
return this.getPublishedBlock(number != 'latest' ? number : -1).then((block)=>block?.block);
|
|
32
|
+
getGenesisValues() {
|
|
33
|
+
return Promise.resolve({
|
|
34
|
+
genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT)
|
|
35
|
+
});
|
|
51
36
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
37
|
+
getL1Timestamp() {
|
|
38
|
+
throw new Error('TXE Archiver does not implement "getL1Timestamp"');
|
|
39
|
+
}
|
|
40
|
+
async getL2Tips() {
|
|
41
|
+
// In TXE there is no possibility of reorgs and no blocks are ever getting proven so we just set 'latest', 'proven'
|
|
42
|
+
// and 'finalized' to the latest block.
|
|
43
|
+
const blockHeader = await this.getBlockHeader('latest');
|
|
44
|
+
if (!blockHeader) {
|
|
45
|
+
throw new Error('L2Tips requested from TXE Archiver but no block header found');
|
|
59
46
|
}
|
|
60
|
-
|
|
61
|
-
|
|
47
|
+
const number = blockHeader.globalVariables.blockNumber;
|
|
48
|
+
const hash = (await blockHeader.hash()).toString();
|
|
49
|
+
const checkpointedBlock = await this.getCheckpointedBlock(number);
|
|
50
|
+
if (!checkpointedBlock) {
|
|
51
|
+
throw new Error(`L2Tips requested from TXE Archiver but no checkpointed block found for block number ${number}`);
|
|
62
52
|
}
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
53
|
+
const checkpoint = await this.store.getRangeOfCheckpoints(CheckpointNumber.fromBlockNumber(number), 1);
|
|
54
|
+
if (checkpoint.length === 0) {
|
|
55
|
+
throw new Error(`L2Tips requested from TXE Archiver but no checkpoint found for block number ${number}`);
|
|
56
|
+
}
|
|
57
|
+
const blockId = {
|
|
58
|
+
number,
|
|
59
|
+
hash
|
|
60
|
+
};
|
|
61
|
+
const checkpointId = {
|
|
62
|
+
number: checkpoint[0].checkpointNumber,
|
|
63
|
+
hash: checkpoint[0].header.hash().toString()
|
|
64
|
+
};
|
|
65
|
+
const tipId = {
|
|
66
|
+
block: blockId,
|
|
67
|
+
checkpoint: checkpointId
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
proposed: blockId,
|
|
71
|
+
proven: tipId,
|
|
72
|
+
finalized: tipId,
|
|
73
|
+
checkpointed: tipId
|
|
74
|
+
};
|
|
68
75
|
}
|
|
69
76
|
getL2SlotNumber() {
|
|
70
77
|
throw new Error('TXE Archiver does not implement "getL2SlotNumber"');
|
|
@@ -72,47 +79,10 @@ export class TXEArchiver extends ArchiverStoreHelper {
|
|
|
72
79
|
getL2EpochNumber() {
|
|
73
80
|
throw new Error('TXE Archiver does not implement "getL2EpochNumber"');
|
|
74
81
|
}
|
|
75
|
-
getBlocksForEpoch(_epochNumber) {
|
|
76
|
-
throw new Error('TXE Archiver does not implement "getBlocksForEpoch"');
|
|
77
|
-
}
|
|
78
|
-
getBlockHeadersForEpoch(_epochNumber) {
|
|
79
|
-
throw new Error('TXE Archiver does not implement "getBlockHeadersForEpoch"');
|
|
80
|
-
}
|
|
81
82
|
isEpochComplete(_epochNumber) {
|
|
82
83
|
throw new Error('TXE Archiver does not implement "isEpochComplete"');
|
|
83
84
|
}
|
|
84
|
-
getL2Tips() {
|
|
85
|
-
throw new Error('TXE Archiver does not implement "getL2Tips"');
|
|
86
|
-
}
|
|
87
|
-
getL1Constants() {
|
|
88
|
-
throw new Error('TXE Archiver does not implement "getL2Constants"');
|
|
89
|
-
}
|
|
90
|
-
getGenesisValues() {
|
|
91
|
-
return Promise.resolve({
|
|
92
|
-
genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT)
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
85
|
syncImmediate() {
|
|
96
86
|
throw new Error('TXE Archiver does not implement "syncImmediate"');
|
|
97
87
|
}
|
|
98
|
-
getContract(_address, _timestamp) {
|
|
99
|
-
throw new Error('TXE Archiver does not implement "getContract"');
|
|
100
|
-
}
|
|
101
|
-
getRollupAddress() {
|
|
102
|
-
throw new Error('TXE Archiver does not implement "getRollupAddress"');
|
|
103
|
-
}
|
|
104
|
-
getRegistryAddress() {
|
|
105
|
-
throw new Error('TXE Archiver does not implement "getRegistryAddress"');
|
|
106
|
-
}
|
|
107
|
-
getL1Timestamp() {
|
|
108
|
-
throw new Error('TXE Archiver does not implement "getL1Timestamp"');
|
|
109
|
-
}
|
|
110
|
-
isPendingChainInvalid() {
|
|
111
|
-
return Promise.resolve(false);
|
|
112
|
-
}
|
|
113
|
-
getPendingChainValidationStatus() {
|
|
114
|
-
return Promise.resolve({
|
|
115
|
-
valid: true
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
88
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import type { AuthRequest, ENR, P2P, P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PConfig, P2PSyncState, PeerId, ReqRespSubProtocol, ReqRespSubProtocolHandler, ReqRespSubProtocolValidators, StatusMessage } from '@aztec/p2p';
|
|
2
3
|
import type { EthAddress, L2BlockStreamEvent, L2Tips } from '@aztec/stdlib/block';
|
|
3
4
|
import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
4
|
-
import type {
|
|
5
|
+
import type { BlockProposal, CheckpointAttestation, CheckpointProposal } from '@aztec/stdlib/p2p';
|
|
5
6
|
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
6
7
|
export declare class DummyP2P implements P2P {
|
|
7
8
|
validate(_txs: Tx[]): Promise<void>;
|
|
@@ -10,7 +11,10 @@ export declare class DummyP2P implements P2P {
|
|
|
10
11
|
getEncodedEnr(): Promise<string | undefined>;
|
|
11
12
|
getPeers(_includePending?: boolean): Promise<PeerInfo[]>;
|
|
12
13
|
broadcastProposal(_proposal: BlockProposal): Promise<void>;
|
|
14
|
+
broadcastCheckpointProposal(_proposal: CheckpointProposal): Promise<void>;
|
|
15
|
+
broadcastCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void>;
|
|
13
16
|
registerBlockProposalHandler(_handler: P2PBlockReceivedCallback): void;
|
|
17
|
+
registerCheckpointProposalHandler(_handler: P2PCheckpointReceivedCallback): void;
|
|
14
18
|
requestTxs(_txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
15
19
|
requestTxByHash(_txHash: TxHash): Promise<Tx | undefined>;
|
|
16
20
|
sendTx(_tx: Tx): Promise<void>;
|
|
@@ -28,9 +32,8 @@ export declare class DummyP2P implements P2P {
|
|
|
28
32
|
getEnr(): ENR | undefined;
|
|
29
33
|
isP2PClient(): true;
|
|
30
34
|
getTxsByHash(_txHashes: TxHash[]): Promise<Tx[]>;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
addAttestations(_attestations: BlockAttestation[]): Promise<void>;
|
|
35
|
+
getCheckpointAttestationsForSlot(_slot: SlotNumber, _proposalId?: string): Promise<CheckpointAttestation[]>;
|
|
36
|
+
addCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void>;
|
|
34
37
|
getL2BlockHash(_number: number): Promise<string | undefined>;
|
|
35
38
|
updateP2PConfig(_config: Partial<P2PConfig>): Promise<void>;
|
|
36
39
|
getL2Tips(): Promise<L2Tips>;
|
|
@@ -49,4 +52,4 @@ export declare class DummyP2P implements P2P {
|
|
|
49
52
|
handleAuthRequestFromPeer(_authRequest: AuthRequest, _peerId: PeerId): Promise<StatusMessage>;
|
|
50
53
|
registerThisValidatorAddresses(_address: EthAddress[]): void;
|
|
51
54
|
}
|
|
52
|
-
//# sourceMappingURL=
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVtbXlfcDJwX2NsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YXRlX21hY2hpbmUvZHVtbXlfcDJwX2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFDVixXQUFXLEVBQ1gsR0FBRyxFQUNILEdBQUcsRUFDSCx3QkFBd0IsRUFDeEIsNkJBQTZCLEVBQzdCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsNEJBQTRCLEVBQzVCLGFBQWEsRUFDZCxNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEYsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEcsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5ELHFCQUFhLFFBQVMsWUFBVyxHQUFHO0lBQzNCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUV6QztJQUVNLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBRTVCO0lBRU0sYUFBYSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUVwQztJQUVNLGFBQWEsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVsRDtJQUVNLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxD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
|