@aztec/aztec-node 5.0.0-nightly.20260504 → 5.0.0-nightly.20260512
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/aztec-node/block_response_helpers.d.ts +6 -9
- package/dest/aztec-node/block_response_helpers.d.ts.map +1 -1
- package/dest/aztec-node/block_response_helpers.js +2 -8
- package/dest/aztec-node/public_data_overrides.d.ts +13 -0
- package/dest/aztec-node/public_data_overrides.d.ts.map +1 -0
- package/dest/aztec-node/public_data_overrides.js +21 -0
- package/dest/aztec-node/server.d.ts +13 -7
- package/dest/aztec-node/server.d.ts.map +1 -1
- package/dest/aztec-node/server.js +141 -196
- package/dest/sentinel/sentinel.d.ts +4 -2
- package/dest/sentinel/sentinel.d.ts.map +1 -1
- package/dest/sentinel/sentinel.js +13 -7
- package/package.json +26 -26
- package/src/aztec-node/block_response_helpers.ts +5 -20
- package/src/aztec-node/public_data_overrides.ts +35 -0
- package/src/aztec-node/server.ts +147 -206
- package/src/sentinel/sentinel.ts +26 -9
|
@@ -398,11 +398,11 @@ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
|
398
398
|
import { createProverNode } from '@aztec/prover-node';
|
|
399
399
|
import { createKeyStoreForProver } from '@aztec/prover-node/config';
|
|
400
400
|
import { FeeProviderImpl, GlobalVariableBuilder, SequencerClient } from '@aztec/sequencer-client';
|
|
401
|
-
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
401
|
+
import { PublicContractsDB, PublicProcessorFactory } from '@aztec/simulator/server';
|
|
402
402
|
import { AttestationsBlockWatcher, EpochPruneWatcher, createSlasher } from '@aztec/slasher';
|
|
403
403
|
import { CollectionLimitsConfig, PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
404
404
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
405
|
-
import { BlockHash,
|
|
405
|
+
import { BlockHash, BlockTag, inspectBlockParameter } from '@aztec/stdlib/block';
|
|
406
406
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
407
407
|
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
408
408
|
import { AztecNodeAdminConfigSchema } from '@aztec/stdlib/interfaces/client';
|
|
@@ -414,12 +414,13 @@ import { PublicSimulationOutput, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
414
414
|
import { getPackageVersion } from '@aztec/stdlib/update-checker';
|
|
415
415
|
import { Attributes, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
416
416
|
import { FullNodeCheckpointsBuilder as CheckpointsBuilder, FullNodeCheckpointsBuilder, NodeKeystoreAdapter, ValidatorClient, createProposalHandler, createValidatorClient } from '@aztec/validator-client';
|
|
417
|
-
import { createWorldStateSynchronizer } from '@aztec/world-state';
|
|
417
|
+
import { createWorldState, createWorldStateSynchronizer } from '@aztec/world-state';
|
|
418
418
|
import { createPublicClient } from 'viem';
|
|
419
419
|
import { createSentinel } from '../sentinel/factory.js';
|
|
420
420
|
import { blockResponseFromBlockData, blockResponseFromL2Block, checkpointResponseFromCheckpointData, checkpointResponseFromPublishedCheckpoint } from './block_response_helpers.js';
|
|
421
421
|
import { createKeyStoreForValidator } from './config.js';
|
|
422
422
|
import { NodeMetrics } from './node_metrics.js';
|
|
423
|
+
import { applyPublicDataOverrides } from './public_data_overrides.js';
|
|
423
424
|
_dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
424
425
|
[Attributes.TX_HASH]: tx.getTxHash().toString()
|
|
425
426
|
}));
|
|
@@ -463,7 +464,6 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
463
464
|
], []));
|
|
464
465
|
}
|
|
465
466
|
metrics;
|
|
466
|
-
initialHeaderHashPromise;
|
|
467
467
|
// Prevent two snapshot operations to happen simultaneously
|
|
468
468
|
isUploadingSnapshot;
|
|
469
469
|
tracer;
|
|
@@ -495,8 +495,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
495
495
|
this.validatorClient = validatorClient;
|
|
496
496
|
this.keyStoreManager = keyStoreManager;
|
|
497
497
|
this.debugLogStore = debugLogStore;
|
|
498
|
-
this.
|
|
499
|
-
this.isUploadingSnapshot = false;
|
|
498
|
+
this.isUploadingSnapshot = (_initProto(this), false);
|
|
500
499
|
this.metrics = new NodeMetrics(telemetry, 'AztecNodeService');
|
|
501
500
|
this.tracer = telemetry.getTracer('AztecNodeService');
|
|
502
501
|
this.log.info(`Aztec Node version: ${this.packageVersion}`);
|
|
@@ -528,14 +527,27 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
528
527
|
return this.blockSource.getL2Tips();
|
|
529
528
|
}
|
|
530
529
|
async getBlockHeader(number) {
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
530
|
+
if (number === 'latest') {
|
|
531
|
+
return (await this.blockSource.getBlockData({
|
|
532
|
+
tag: 'proposed'
|
|
533
|
+
}))?.header;
|
|
534
534
|
}
|
|
535
|
-
return this.blockSource.
|
|
535
|
+
return (await this.blockSource.getBlockData({
|
|
536
|
+
number
|
|
537
|
+
}))?.header;
|
|
536
538
|
}
|
|
537
539
|
async getCheckpointedBlocks(from, limit) {
|
|
538
|
-
|
|
540
|
+
const blocks = await this.blockSource.getBlocks({
|
|
541
|
+
from,
|
|
542
|
+
limit,
|
|
543
|
+
onlyCheckpointed: true
|
|
544
|
+
});
|
|
545
|
+
const ctxByCheckpoint = await this.#getCheckpointContextsForBlocks(blocks);
|
|
546
|
+
return Promise.all(blocks.map((block)=>blockResponseFromL2Block(block, {
|
|
547
|
+
includeTransactions: true,
|
|
548
|
+
includeL1PublishInfo: true,
|
|
549
|
+
includeAttestations: true
|
|
550
|
+
}, ctxByCheckpoint.get(block.checkpointNumber))));
|
|
539
551
|
}
|
|
540
552
|
getCheckpointsDataForEpoch(epoch) {
|
|
541
553
|
return this.blockSource.getCheckpointsDataForEpoch(epoch);
|
|
@@ -570,7 +582,11 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
570
582
|
isChainTip(value) {
|
|
571
583
|
return value === 'proposed' || value === 'checkpointed' || value === 'proven' || value === 'finalized';
|
|
572
584
|
}
|
|
573
|
-
|
|
585
|
+
/**
|
|
586
|
+
* Normalizes a {@link BlockParameter} (which may be a bare value) into a
|
|
587
|
+
* {@link NormalizedBlockParameter} object form. Performs no chain-tip resolution — tag
|
|
588
|
+
* lookups are deferred to the underlying block source.
|
|
589
|
+
*/ normalizeBlockParameter(param) {
|
|
574
590
|
if (BlockHash.isBlockHash(param)) {
|
|
575
591
|
return {
|
|
576
592
|
hash: param
|
|
@@ -581,15 +597,13 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
581
597
|
number: param
|
|
582
598
|
};
|
|
583
599
|
}
|
|
584
|
-
if (param === '
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
number: await this.getBlockNumber(param)
|
|
592
|
-
};
|
|
600
|
+
if (typeof param === 'string') {
|
|
601
|
+
if (this.isBlockTag(param)) {
|
|
602
|
+
return {
|
|
603
|
+
tag: param === 'latest' ? 'proposed' : param
|
|
604
|
+
};
|
|
605
|
+
}
|
|
606
|
+
throw new BadRequestError(`Invalid BlockParameter tag: ${param}`);
|
|
593
607
|
}
|
|
594
608
|
if (typeof param === 'object' && param !== null) {
|
|
595
609
|
if ('number' in param) {
|
|
@@ -607,9 +621,20 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
607
621
|
archive: param.archive
|
|
608
622
|
};
|
|
609
623
|
}
|
|
624
|
+
if ('tag' in param) {
|
|
625
|
+
if (this.isBlockTag(param.tag)) {
|
|
626
|
+
return {
|
|
627
|
+
tag: param.tag
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
throw new BadRequestError(`Invalid BlockParameter tag: ${param.tag}`);
|
|
631
|
+
}
|
|
610
632
|
}
|
|
611
633
|
throw new BadRequestError(`Invalid BlockParameter: ${JSON.stringify(param)}`);
|
|
612
634
|
}
|
|
635
|
+
isBlockTag(value) {
|
|
636
|
+
return BlockTag.includes(value);
|
|
637
|
+
}
|
|
613
638
|
async resolveCheckpointParameter(param) {
|
|
614
639
|
if (typeof param === 'number') {
|
|
615
640
|
return {
|
|
@@ -640,93 +665,60 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
640
665
|
}
|
|
641
666
|
throw new BadRequestError(`Invalid CheckpointParameter: ${JSON.stringify(param)}`);
|
|
642
667
|
}
|
|
668
|
+
/** Fetches checkpoint-level L1 and attestation data for use as block response context. */ async #getCheckpointContext(checkpointNumber) {
|
|
669
|
+
const checkpoint = await this.blockSource.getCheckpointData(checkpointNumber);
|
|
670
|
+
if (!checkpoint) {
|
|
671
|
+
return undefined;
|
|
672
|
+
}
|
|
673
|
+
return {
|
|
674
|
+
l1: checkpoint.l1,
|
|
675
|
+
attestations: checkpoint.attestations
|
|
676
|
+
};
|
|
677
|
+
}
|
|
643
678
|
async getBlock(param, options = {}) {
|
|
644
|
-
const
|
|
679
|
+
const query = this.normalizeBlockParameter(param);
|
|
645
680
|
const wantTxs = !!options.includeTransactions;
|
|
646
681
|
const wantContext = !!options.includeL1PublishInfo || !!options.includeAttestations;
|
|
647
|
-
if (resolved.hash !== undefined) {
|
|
648
|
-
const initial = await this.#getInitialHeaderHash();
|
|
649
|
-
if (resolved.hash.equals(initial)) {
|
|
650
|
-
return await this.buildGenesisBlockResponse(options);
|
|
651
|
-
}
|
|
652
|
-
if (wantTxs) {
|
|
653
|
-
const block = await this.blockSource.getL2BlockByHash(resolved.hash);
|
|
654
|
-
if (!block) {
|
|
655
|
-
return undefined;
|
|
656
|
-
}
|
|
657
|
-
const ctx = wantContext ? await this.blockSource.getBlockDataWithCheckpointContext(block.number) : undefined;
|
|
658
|
-
return await blockResponseFromL2Block(block, options, ctx);
|
|
659
|
-
}
|
|
660
|
-
const data = await this.blockSource.getBlockHeaderByHash(resolved.hash);
|
|
661
|
-
if (!data) {
|
|
662
|
-
return undefined;
|
|
663
|
-
}
|
|
664
|
-
const blockNumber = data.globalVariables.blockNumber;
|
|
665
|
-
const ctx = wantContext ? await this.blockSource.getBlockDataWithCheckpointContext(blockNumber) : undefined;
|
|
666
|
-
if (ctx) {
|
|
667
|
-
return blockResponseFromBlockData(ctx.data, blockNumber, options, ctx);
|
|
668
|
-
}
|
|
669
|
-
const blockData = await this.blockSource.getBlockData(blockNumber);
|
|
670
|
-
if (!blockData) {
|
|
671
|
-
return undefined;
|
|
672
|
-
}
|
|
673
|
-
return blockResponseFromBlockData(blockData, blockNumber, options);
|
|
674
|
-
}
|
|
675
|
-
if (resolved.archive !== undefined) {
|
|
676
|
-
if (wantTxs) {
|
|
677
|
-
const block = await this.blockSource.getL2BlockByArchive(resolved.archive);
|
|
678
|
-
if (!block) {
|
|
679
|
-
return undefined;
|
|
680
|
-
}
|
|
681
|
-
const ctx = wantContext ? await this.blockSource.getBlockDataWithCheckpointContext(block.number) : undefined;
|
|
682
|
-
return await blockResponseFromL2Block(block, options, ctx);
|
|
683
|
-
}
|
|
684
|
-
const data = await this.blockSource.getBlockDataByArchive(resolved.archive);
|
|
685
|
-
if (!data) {
|
|
686
|
-
return undefined;
|
|
687
|
-
}
|
|
688
|
-
const blockNumber = data.header.globalVariables.blockNumber;
|
|
689
|
-
const ctx = wantContext ? await this.blockSource.getBlockDataWithCheckpointContext(blockNumber) : undefined;
|
|
690
|
-
return blockResponseFromBlockData(data, blockNumber, options, ctx);
|
|
691
|
-
}
|
|
692
|
-
const blockNumber = resolved.number;
|
|
693
|
-
if (blockNumber === BlockNumber.ZERO) {
|
|
694
|
-
return await this.buildGenesisBlockResponse(options);
|
|
695
|
-
}
|
|
696
682
|
if (wantTxs) {
|
|
697
|
-
const block = await this.blockSource.
|
|
683
|
+
const block = await this.blockSource.getBlock(query);
|
|
698
684
|
if (!block) {
|
|
699
685
|
return undefined;
|
|
700
686
|
}
|
|
701
|
-
const ctx = wantContext ? await this.
|
|
687
|
+
const ctx = wantContext ? await this.#getCheckpointContext(block.checkpointNumber) : undefined;
|
|
702
688
|
return await blockResponseFromL2Block(block, options, ctx);
|
|
703
689
|
}
|
|
704
|
-
const
|
|
705
|
-
if (!
|
|
690
|
+
const data = await this.blockSource.getBlockData(query);
|
|
691
|
+
if (!data) {
|
|
706
692
|
return undefined;
|
|
707
693
|
}
|
|
708
|
-
|
|
694
|
+
const ctx = wantContext ? await this.#getCheckpointContext(data.checkpointNumber) : undefined;
|
|
695
|
+
return blockResponseFromBlockData(data, options, ctx);
|
|
709
696
|
}
|
|
710
697
|
async getBlocks(from, limit, options = {}) {
|
|
711
698
|
const wantTxs = !!options.includeTransactions;
|
|
712
699
|
const wantContext = !!options.includeL1PublishInfo || !!options.includeAttestations;
|
|
713
700
|
if (wantTxs) {
|
|
714
|
-
const blocks = await this.blockSource.getBlocks(
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
const results = [];
|
|
721
|
-
for(let i = 0; i < limit; i++){
|
|
722
|
-
const blockNumber = BlockNumber(from + i);
|
|
723
|
-
const ctx = await this.blockSource.getBlockDataWithCheckpointContext(blockNumber);
|
|
724
|
-
if (!ctx) {
|
|
725
|
-
break;
|
|
726
|
-
}
|
|
727
|
-
results.push(blockResponseFromBlockData(ctx.data, blockNumber, options, ctx));
|
|
701
|
+
const blocks = await this.blockSource.getBlocks({
|
|
702
|
+
from,
|
|
703
|
+
limit
|
|
704
|
+
});
|
|
705
|
+
const ctxByCheckpoint = await this.#getCheckpointContextsForBlocks(wantContext ? blocks : []);
|
|
706
|
+
return await Promise.all(blocks.map((block)=>blockResponseFromL2Block(block, options, ctxByCheckpoint.get(block.checkpointNumber))));
|
|
728
707
|
}
|
|
729
|
-
|
|
708
|
+
const dataItems = await this.blockSource.getBlocksData({
|
|
709
|
+
from,
|
|
710
|
+
limit
|
|
711
|
+
});
|
|
712
|
+
const ctxByCheckpoint = await this.#getCheckpointContextsForBlocks(wantContext ? dataItems : []);
|
|
713
|
+
return await Promise.all(dataItems.map((data)=>blockResponseFromBlockData(data, options, ctxByCheckpoint.get(data.checkpointNumber))));
|
|
714
|
+
}
|
|
715
|
+
/** Fetches checkpoint context for a set of blocks, deduplicating shared checkpoints. */ async #getCheckpointContextsForBlocks(blocks) {
|
|
716
|
+
const unique = Array.from(new Set(blocks.map((b)=>b.checkpointNumber)));
|
|
717
|
+
const entries = await Promise.all(unique.map(async (n)=>[
|
|
718
|
+
n,
|
|
719
|
+
await this.#getCheckpointContext(n)
|
|
720
|
+
]));
|
|
721
|
+
return new Map(entries);
|
|
730
722
|
}
|
|
731
723
|
async getCheckpoint(param, options = {}) {
|
|
732
724
|
const resolved = await this.resolveCheckpointParameter(param);
|
|
@@ -758,30 +750,6 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
758
750
|
const datas = await this.blockSource.getCheckpointDataRange(from, limit);
|
|
759
751
|
return datas.map((d)=>checkpointResponseFromCheckpointData(d, options));
|
|
760
752
|
}
|
|
761
|
-
async buildGenesisBlockResponse(options) {
|
|
762
|
-
const initial = this.worldStateSynchronizer.getCommitted().getInitialHeader();
|
|
763
|
-
const empty = L2Block.empty(initial);
|
|
764
|
-
const response = {
|
|
765
|
-
header: empty.header,
|
|
766
|
-
archive: empty.archive,
|
|
767
|
-
hash: await this.#getInitialHeaderHash(),
|
|
768
|
-
checkpointNumber: empty.checkpointNumber,
|
|
769
|
-
indexWithinCheckpoint: empty.indexWithinCheckpoint,
|
|
770
|
-
number: empty.number
|
|
771
|
-
};
|
|
772
|
-
if (options.includeTransactions) {
|
|
773
|
-
response.body = empty.body;
|
|
774
|
-
}
|
|
775
|
-
if (options.includeL1PublishInfo) {
|
|
776
|
-
response.l1 = {
|
|
777
|
-
published: false
|
|
778
|
-
};
|
|
779
|
-
}
|
|
780
|
-
if (options.includeAttestations) {
|
|
781
|
-
response.attestations = [];
|
|
782
|
-
}
|
|
783
|
-
return response;
|
|
784
|
-
}
|
|
785
753
|
/**
|
|
786
754
|
* initializes the Aztec Node, wait for component to sync.
|
|
787
755
|
* @param config - The configuration to be used by the aztec node.
|
|
@@ -791,7 +759,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
791
759
|
...inputConfig
|
|
792
760
|
}; // Copy the config so we dont mutate the input object
|
|
793
761
|
const log = deps.logger ?? createLogger('node');
|
|
794
|
-
const packageVersion = getPackageVersion()
|
|
762
|
+
const packageVersion = getPackageVersion();
|
|
795
763
|
const telemetry = deps.telemetry ?? getTelemetryClient();
|
|
796
764
|
const dateProvider = deps.dateProvider ?? new DateProvider();
|
|
797
765
|
const ethereumChain = createEthereumChain(config.l1RpcUrls, config.l1ChainId);
|
|
@@ -866,6 +834,10 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
866
834
|
// Track started resources so we can clean up on partial failure during node creation.
|
|
867
835
|
const started = [];
|
|
868
836
|
try {
|
|
837
|
+
// Create world-state first so we can retrieve the initial header before constructing the archiver.
|
|
838
|
+
const nativeWs = await createWorldState(config, options.genesis);
|
|
839
|
+
const initialHeader = nativeWs.getInitialHeader();
|
|
840
|
+
const initialBlockHash = await initialHeader.hash();
|
|
869
841
|
const archiver = await createArchiver(config, {
|
|
870
842
|
blobClient,
|
|
871
843
|
epochCache,
|
|
@@ -873,10 +845,10 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
873
845
|
dateProvider
|
|
874
846
|
}, {
|
|
875
847
|
blockUntilSync: !config.skipArchiverInitialSync
|
|
876
|
-
});
|
|
848
|
+
}, initialHeader, initialBlockHash);
|
|
877
849
|
started.push(archiver);
|
|
878
|
-
//
|
|
879
|
-
const worldStateSynchronizer = await createWorldStateSynchronizer(config, archiver,
|
|
850
|
+
// The synchronizer takes ownership of the native world-state from here
|
|
851
|
+
const worldStateSynchronizer = await createWorldStateSynchronizer(config, archiver, nativeWs, telemetry);
|
|
880
852
|
started.push(worldStateSynchronizer);
|
|
881
853
|
const useRealVerifiers = config.realProofs || config.debugForceTxProofVerification;
|
|
882
854
|
let peerProofVerifier;
|
|
@@ -912,7 +884,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
912
884
|
log.info('Starting in prover-only mode: skipping validator, sequencer, sentinel, and slasher subsystems');
|
|
913
885
|
}
|
|
914
886
|
// create the tx pool and the p2p client, which will need the l2 block source
|
|
915
|
-
const p2pClient = await createP2PClient(config, archiver, peerProofVerifier, worldStateSynchronizer, epochCache, feeProvider, packageVersion, dateProvider, telemetry, deps.p2pClientDeps);
|
|
887
|
+
const p2pClient = await createP2PClient(config, archiver, peerProofVerifier, worldStateSynchronizer, epochCache, feeProvider, packageVersion, dateProvider, telemetry, deps.p2pClientDeps, initialBlockHash);
|
|
916
888
|
started.push(p2pClient);
|
|
917
889
|
// We'll accumulate sentinel watchers here
|
|
918
890
|
const watchers = [];
|
|
@@ -1220,32 +1192,26 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1220
1192
|
async getPrivateLogsByTags(tags, page, referenceBlock) {
|
|
1221
1193
|
let upToBlockNumber;
|
|
1222
1194
|
if (referenceBlock) {
|
|
1223
|
-
const
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
if (!header) {
|
|
1229
|
-
throw new Error(`Block ${referenceBlock.toString()} not found in the node. This might indicate a reorg has occurred.`);
|
|
1230
|
-
}
|
|
1231
|
-
upToBlockNumber = header.globalVariables.blockNumber;
|
|
1195
|
+
const data = await this.blockSource.getBlockData({
|
|
1196
|
+
hash: referenceBlock
|
|
1197
|
+
});
|
|
1198
|
+
if (!data) {
|
|
1199
|
+
throw new Error(`Block ${referenceBlock.toString()} not found in the node. This might indicate a reorg has occurred.`);
|
|
1232
1200
|
}
|
|
1201
|
+
upToBlockNumber = data.header.globalVariables.blockNumber;
|
|
1233
1202
|
}
|
|
1234
1203
|
return this.logsSource.getPrivateLogsByTags(tags, page, upToBlockNumber);
|
|
1235
1204
|
}
|
|
1236
1205
|
async getPublicLogsByTagsFromContract(contractAddress, tags, page, referenceBlock) {
|
|
1237
1206
|
let upToBlockNumber;
|
|
1238
1207
|
if (referenceBlock) {
|
|
1239
|
-
const
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
if (!header) {
|
|
1245
|
-
throw new Error(`Block ${referenceBlock.toString()} not found in the node. This might indicate a reorg has occurred.`);
|
|
1246
|
-
}
|
|
1247
|
-
upToBlockNumber = header.globalVariables.blockNumber;
|
|
1208
|
+
const data = await this.blockSource.getBlockData({
|
|
1209
|
+
hash: referenceBlock
|
|
1210
|
+
});
|
|
1211
|
+
if (!data) {
|
|
1212
|
+
throw new Error(`Block ${referenceBlock.toString()} not found in the node. This might indicate a reorg has occurred.`);
|
|
1248
1213
|
}
|
|
1214
|
+
upToBlockNumber = data.header.globalVariables.blockNumber;
|
|
1249
1215
|
}
|
|
1250
1216
|
return this.logsSource.getPublicLogsByTagsFromContract(contractAddress, tags, page, upToBlockNumber);
|
|
1251
1217
|
}
|
|
@@ -1479,10 +1445,12 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1479
1445
|
* @param epoch - The epoch at which to get the data.
|
|
1480
1446
|
* @returns The L2 to L1 messages (empty array if the epoch is not found).
|
|
1481
1447
|
*/ async getL2ToL1Messages(epoch) {
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1448
|
+
const blocks = await this.blockSource.getBlocks({
|
|
1449
|
+
epoch,
|
|
1450
|
+
onlyCheckpointed: true
|
|
1451
|
+
});
|
|
1452
|
+
const blocksInCheckpoints = chunkBy(blocks, (block)=>block.header.globalVariables.slotNumber);
|
|
1453
|
+
return blocksInCheckpoints.map((slotBlocks)=>slotBlocks.map((block)=>block.body.txEffects.map((txEffect)=>txEffect.l2ToL1Msgs)));
|
|
1486
1454
|
}
|
|
1487
1455
|
async getNullifierMembershipWitness(referenceBlock, nullifier) {
|
|
1488
1456
|
const db = await this.getWorldState(referenceBlock);
|
|
@@ -1537,7 +1505,9 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1537
1505
|
/**
|
|
1538
1506
|
* Simulates the public part of a transaction with the current state.
|
|
1539
1507
|
* @param tx - The transaction to simulate.
|
|
1540
|
-
|
|
1508
|
+
* @param skipFeeEnforcement - If true, fee enforcement is skipped.
|
|
1509
|
+
* @param overrides - Optional pre-simulation overrides applied to the ephemeral fork and contract DB.
|
|
1510
|
+
**/ async simulatePublicCalls(tx, skipFeeEnforcement = false, overrides) {
|
|
1541
1511
|
// Check total gas limit for simulation
|
|
1542
1512
|
const gasSettings = tx.data.constants.txContext.gasSettings;
|
|
1543
1513
|
const txGasLimit = gasSettings.gasLimits.l2Gas;
|
|
@@ -1562,6 +1532,7 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1562
1532
|
await this.worldStateSynchronizer.syncImmediate(latestBlockNumber);
|
|
1563
1533
|
const merkleTreeFork = await this.worldStateSynchronizer.fork();
|
|
1564
1534
|
try {
|
|
1535
|
+
await applyPublicDataOverrides(merkleTreeFork, overrides?.publicStorage);
|
|
1565
1536
|
const config = PublicSimulatorConfig.from({
|
|
1566
1537
|
skipFeeEnforcement,
|
|
1567
1538
|
collectDebugLogs: true,
|
|
@@ -1572,7 +1543,11 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1572
1543
|
maxDebugLogMemoryReads: this.config.rpcSimulatePublicMaxDebugLogMemoryReads
|
|
1573
1544
|
})
|
|
1574
1545
|
});
|
|
1575
|
-
const
|
|
1546
|
+
const contractsDB = new PublicContractsDB(this.contractDataSource, this.log.getBindings());
|
|
1547
|
+
if (overrides?.contracts) {
|
|
1548
|
+
contractsDB.addContracts(Object.values(overrides.contracts).map(({ instance })=>instance));
|
|
1549
|
+
}
|
|
1550
|
+
const processor = publicProcessorFactory.create(merkleTreeFork, newGlobalVariables, config, contractsDB);
|
|
1576
1551
|
// REFACTOR: Consider merging ProcessReturnValues into ProcessedTx
|
|
1577
1552
|
const [processedTxs, failedTxs, _usedTxs, returns, debugLogs] = await processor.process([
|
|
1578
1553
|
tx
|
|
@@ -1857,12 +1832,6 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1857
1832
|
});
|
|
1858
1833
|
}
|
|
1859
1834
|
}
|
|
1860
|
-
#getInitialHeaderHash() {
|
|
1861
|
-
if (!this.initialHeaderHashPromise) {
|
|
1862
|
-
this.initialHeaderHashPromise = this.worldStateSynchronizer.getCommitted().getInitialHeader().hash();
|
|
1863
|
-
}
|
|
1864
|
-
return this.initialHeaderHashPromise;
|
|
1865
|
-
}
|
|
1866
1835
|
/**
|
|
1867
1836
|
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
1868
1837
|
* @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
|
|
@@ -1875,69 +1844,45 @@ _dec = trackSpan('AztecNodeService.simulatePublicCalls', (tx)=>({
|
|
|
1875
1844
|
} catch (err) {
|
|
1876
1845
|
this.log.error(`Error getting world state: ${err}`);
|
|
1877
1846
|
}
|
|
1878
|
-
|
|
1879
|
-
|
|
1847
|
+
const query = this.normalizeBlockParameter(block);
|
|
1848
|
+
if ('tag' in query && query.tag === 'proposed') {
|
|
1849
|
+
this.log.debug(`Using committed db for latest block, world state synced upto ${blockSyncedTo}`);
|
|
1880
1850
|
return this.worldStateSynchronizer.getCommitted();
|
|
1881
1851
|
}
|
|
1882
|
-
|
|
1883
|
-
let blockNumber;
|
|
1884
|
-
if (BlockHash.isBlockHash(block)) {
|
|
1885
|
-
const initialBlockHash = await this.#getInitialHeaderHash();
|
|
1886
|
-
if (block.equals(initialBlockHash)) {
|
|
1887
|
-
// Block 0 is a first-class historical block: its state lives in the trees' persisted
|
|
1888
|
-
// block-0 payload. Resolving the genesis hash to block number 0 lets the snapshot path
|
|
1889
|
-
// pin reads to genesis state even after the node has advanced past it.
|
|
1890
|
-
blockNumber = BlockNumber.ZERO;
|
|
1891
|
-
} else {
|
|
1892
|
-
const header = await this.blockSource.getBlockHeaderByHash(block);
|
|
1893
|
-
if (!header) {
|
|
1894
|
-
throw new Error(`Block hash ${block.toString()} not found when querying world state. If the node API has been queried with anchor block hash possibly a reorg has occurred.`);
|
|
1895
|
-
}
|
|
1896
|
-
blockNumber = header.getBlockNumber();
|
|
1897
|
-
}
|
|
1898
|
-
} else {
|
|
1899
|
-
blockNumber = block;
|
|
1900
|
-
}
|
|
1852
|
+
const blockNumber = await this.resolveBlockNumber(block);
|
|
1901
1853
|
// Check it's within world state sync range
|
|
1902
1854
|
if (blockNumber > blockSyncedTo) {
|
|
1903
1855
|
throw new Error(`Queried block ${inspectBlockParameter(block)} not yet synced by the node (node is synced upto ${blockSyncedTo}).`);
|
|
1904
1856
|
}
|
|
1905
1857
|
this.log.debug(`Using snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`);
|
|
1906
1858
|
const snapshot = this.worldStateSynchronizer.getSnapshot(blockNumber);
|
|
1907
|
-
// Double-check world-state synced to the same block hash as was requested
|
|
1908
|
-
|
|
1859
|
+
// Double-check world-state synced to the same block hash as was requested.
|
|
1860
|
+
// Block 0 is skipped: the snapshot returned by `getSnapshot(0)` is the *pre*-genesis archive
|
|
1861
|
+
// (size 0), so leaf 0 is not yet inserted from that snapshot's view even though block 0's hash
|
|
1862
|
+
// does live at archive index 0 in the committed tree. The genesis hash is already validated by
|
|
1863
|
+
// the archiver when it resolves the hash query to block number 0.
|
|
1864
|
+
const requestedHash = 'hash' in query ? query.hash : undefined;
|
|
1865
|
+
if (requestedHash !== undefined && blockNumber !== BlockNumber.ZERO) {
|
|
1909
1866
|
const blockHash = await snapshot.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(blockNumber));
|
|
1910
|
-
if (!blockHash || !
|
|
1911
|
-
|
|
1912
|
-
throw new Error(`Block hash ${block.toString()} not found in world state at block number ${blockNumber} (world state has ${blockHash?.toString() ?? 'no hash'} at that index, genesis header hash is ${initialBlockHash.toString()}). If the node API has been queried with anchor block hash possibly a reorg has occurred.`);
|
|
1867
|
+
if (!blockHash || !requestedHash.equals(blockHash)) {
|
|
1868
|
+
throw new Error(`Block hash ${requestedHash.toString()} not found in world state at block number ${blockNumber} (world state has ${blockHash?.toString() ?? 'no hash'} at that index, genesis header hash is ${this.blockSource.getGenesisBlockHash().toString()}). If the node API has been queried with anchor block hash possibly a reorg has occurred.`);
|
|
1913
1869
|
}
|
|
1914
1870
|
}
|
|
1915
1871
|
return snapshot;
|
|
1916
1872
|
}
|
|
1917
1873
|
/** Resolves any {@link BlockParameter} variant to a concrete block number. */ async resolveBlockNumber(block) {
|
|
1918
|
-
const
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
const initialBlockHash = await this.#getInitialHeaderHash();
|
|
1924
|
-
if (resolved.hash.equals(initialBlockHash)) {
|
|
1925
|
-
return BlockNumber.ZERO;
|
|
1874
|
+
const query = this.normalizeBlockParameter(block);
|
|
1875
|
+
const blockNumber = await this.blockSource.getBlockNumber(query);
|
|
1876
|
+
if (blockNumber === undefined) {
|
|
1877
|
+
if ('hash' in query) {
|
|
1878
|
+
throw new Error(`Block hash ${query.hash.toString()} not found when querying world state. If the node API has been queried with anchor block hash possibly a reorg has occurred.`);
|
|
1926
1879
|
}
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
throw new Error(`Block hash ${resolved.hash.toString()} not found.`);
|
|
1930
|
-
}
|
|
1931
|
-
return header.getBlockNumber();
|
|
1932
|
-
}
|
|
1933
|
-
if (resolved.archive !== undefined) {
|
|
1934
|
-
const header = await this.blockSource.getBlockHeaderByArchive(resolved.archive);
|
|
1935
|
-
if (!header) {
|
|
1936
|
-
throw new Error(`Block with archive ${resolved.archive.toString()} not found.`);
|
|
1880
|
+
if ('archive' in query) {
|
|
1881
|
+
throw new Error(`Block with archive ${query.archive.toString()} not found.`);
|
|
1937
1882
|
}
|
|
1938
|
-
|
|
1883
|
+
throw new Error(`Block not found for ${inspectBlockParameter(block)}.`);
|
|
1939
1884
|
}
|
|
1940
|
-
|
|
1885
|
+
return blockNumber;
|
|
1941
1886
|
}
|
|
1942
1887
|
/**
|
|
1943
1888
|
* Ensure we fully sync the world state
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
|
-
import { CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { CheckpointNumber, CheckpointProposalHash, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
5
5
|
import { type L2TipsStore } from '@aztec/kv-store/stores';
|
|
@@ -27,6 +27,8 @@ export declare class Sentinel extends Sentinel_base implements L2BlockStreamEven
|
|
|
27
27
|
protected slotNumberToCheckpoint: Map<SlotNumber, {
|
|
28
28
|
checkpointNumber: CheckpointNumber;
|
|
29
29
|
archive: string;
|
|
30
|
+
/** Hex keccak256 of the consensus payload bytes; used to fetch matching p2p attestations. */
|
|
31
|
+
proposalPayloadHash: CheckpointProposalHash;
|
|
30
32
|
attestors: EthAddress[];
|
|
31
33
|
}>;
|
|
32
34
|
constructor(epochCache: EpochCache, archiver: L2BlockSource, p2p: P2PClient, store: SentinelStore, config: SentinelRuntimeConfig, logger?: import("@aztec/foundation/log").Logger);
|
|
@@ -93,4 +95,4 @@ export declare class Sentinel extends Sentinel_base implements L2BlockStreamEven
|
|
|
93
95
|
} | undefined;
|
|
94
96
|
}
|
|
95
97
|
export {};
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudGluZWwuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZW50aW5lbC9zZW50aW5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsVUFBVSxFQUNYLE1BQU0saUNBQWlDLENBQUM7QUFFekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQXFCLEtBQUssV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0UsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFJTCxLQUFLLE9BQU8sRUFDWixLQUFLLGNBQWMsRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsS0FBSyxhQUFhLEVBQ2xCLGFBQWEsRUFDYixLQUFLLGtCQUFrQixFQUN2QixLQUFLLHlCQUF5QixFQUUvQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3hELE9BQU8sS0FBSyxFQUNWLG9CQUFvQixFQUNwQixjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLGVBQWUsRUFDaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUlsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTNDLE1BQU0sTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQ3RDLGFBQWEsRUFDYixpQ0FB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../src/sentinel/sentinel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../src/sentinel/sentinel.ts"],"names":[],"mappings":"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"}
|