@aztec/p2p 4.0.0-devnet.2-patch.4 → 4.0.0-devnet.3-patch.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -3
- package/dest/client/factory.d.ts +4 -5
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +30 -28
- package/dest/client/interface.d.ts +8 -13
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +6 -13
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +22 -88
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +2 -4
- package/dest/config.d.ts +29 -10
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +80 -31
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +2 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +2 -2
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +4 -4
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +3 -2
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +2 -0
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
- package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +10 -6
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/index.js +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +9 -5
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +46 -8
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +81 -17
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +9 -10
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +5 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -2
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +179 -151
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +48 -36
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +35 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +133 -6
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +247 -60
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +67 -3
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +104 -37
- package/dest/msg_validators/tx_validator/index.d.ts +3 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +2 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
- package/dest/services/dummy_service.d.ts +4 -4
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +4 -4
- package/dest/services/encoding.d.ts +6 -2
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +14 -8
- package/dest/services/gossipsub/topic_score_params.d.ts +18 -6
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +32 -10
- package/dest/services/libp2p/libp2p_service.d.ts +16 -13
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +97 -93
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/reqresp.d.ts +1 -1
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +16 -8
- package/dest/services/service.d.ts +5 -3
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +39 -29
- package/dest/services/tx_collection/tx_source.d.ts +6 -5
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +9 -7
- package/dest/services/tx_provider.d.ts +3 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +4 -4
- package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +1 -2
- package/dest/test-helpers/mock-pubsub.d.ts +4 -4
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +8 -2
- package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +2 -2
- package/dest/test-helpers/testbench-utils.d.ts +2 -2
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +2 -1
- package/dest/testbench/p2p_client_testbench_worker.js +7 -6
- package/dest/testbench/worker_client_manager.d.ts +3 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +4 -1
- package/dest/util.d.ts +2 -2
- package/dest/util.d.ts.map +1 -1
- package/package.json +14 -14
- package/src/client/factory.ts +49 -45
- package/src/client/interface.ts +8 -13
- package/src/client/p2p_client.ts +24 -117
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +2 -3
- package/src/config.ts +115 -33
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +2 -1
- package/src/mem_pools/tx_pool/priority.ts +4 -4
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +3 -1
- package/src/mem_pools/tx_pool_v2/README.md +9 -1
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +3 -2
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -0
- package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
- package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +2 -2
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +10 -6
- package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
- package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
- package/src/mem_pools/tx_pool_v2/index.ts +1 -1
- package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +113 -18
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +11 -11
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +14 -2
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +188 -153
- package/src/msg_validators/attestation_validator/README.md +49 -0
- package/src/msg_validators/proposal_validator/README.md +123 -0
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
- package/src/msg_validators/proposal_validator/proposal_validator.ts +63 -40
- package/src/msg_validators/tx_validator/README.md +119 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -3
- package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
- package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +42 -1
- package/src/msg_validators/tx_validator/factory.ts +394 -78
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
- package/src/msg_validators/tx_validator/gas_validator.ts +123 -27
- package/src/msg_validators/tx_validator/index.ts +2 -0
- package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
- package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
- package/src/services/dummy_service.ts +6 -6
- package/src/services/encoding.ts +14 -7
- package/src/services/gossipsub/README.md +29 -14
- package/src/services/gossipsub/topic_score_params.ts +49 -13
- package/src/services/libp2p/libp2p_service.ts +111 -101
- package/src/services/reqresp/README.md +229 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/reqresp.ts +18 -10
- package/src/services/service.ts +11 -2
- package/src/services/tx_collection/file_store_tx_source.ts +43 -31
- package/src/services/tx_collection/tx_source.ts +8 -7
- package/src/services/tx_provider.ts +2 -2
- package/src/test-helpers/make-test-p2p-clients.ts +0 -2
- package/src/test-helpers/mock-pubsub.ts +13 -6
- package/src/test-helpers/reqresp-nodes.ts +2 -5
- package/src/test-helpers/testbench-utils.ts +2 -1
- package/src/testbench/p2p_client_testbench_worker.ts +3 -6
- package/src/testbench/worker_client_manager.ts +11 -4
- package/src/util.ts +7 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
|
@@ -378,13 +378,10 @@ import { RunningPromise } from '@aztec/foundation/promise';
|
|
|
378
378
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
379
379
|
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
380
380
|
import { L2BlockStream } from '@aztec/stdlib/block';
|
|
381
|
-
import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
382
381
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
383
382
|
import { Attributes, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
384
383
|
import { getP2PDefaultConfig } from '../config.js';
|
|
385
384
|
import { TxPoolError } from '../errors/tx-pool.error.js';
|
|
386
|
-
import { ReqRespSubProtocol } from '../services/reqresp/interface.js';
|
|
387
|
-
import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
|
|
388
385
|
import { TxProvider } from '../services/tx_provider.js';
|
|
389
386
|
import { P2PClientState } from './interface.js';
|
|
390
387
|
_dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
@@ -439,7 +436,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
439
436
|
validatorAddresses;
|
|
440
437
|
/** Tracks the last slot for which we called prepareForSlot */ lastSlotProcessed;
|
|
441
438
|
/** Polls for slot changes and calls prepareForSlot on the tx pool */ slotMonitor;
|
|
442
|
-
constructor(
|
|
439
|
+
constructor(store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, epochCache, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
|
|
443
440
|
super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this.txFileStore = txFileStore, this.epochCache = epochCache, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = (_initProto(this), P2PClientState.IDLE), this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [], this.lastSlotProcessed = SlotNumber.ZERO;
|
|
444
441
|
this.config = {
|
|
445
442
|
...getP2PDefaultConfig(),
|
|
@@ -448,29 +445,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
448
445
|
this.txPool = mempools.txPool;
|
|
449
446
|
this.attestationPool = mempools.attestationPool;
|
|
450
447
|
this.txProvider = new TxProvider(this.txCollection, this.txPool, this, this.log.createChild('tx-provider'), this.telemetry);
|
|
451
|
-
// Default to collecting all txs when we see a valid proposal
|
|
452
|
-
// This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
|
|
453
|
-
// Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
|
|
454
|
-
// TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
|
|
455
|
-
// validator-client code into here so we can validate a proposal is reasonable.
|
|
456
|
-
this.registerBlockProposalHandler(async (block, sender)=>{
|
|
457
|
-
this.log.debug(`Received block proposal from ${sender.toString()}`);
|
|
458
|
-
// TODO(palla/txs): Need to subtract validatorReexecuteDeadlineMs from this deadline (see ValidatorClient.getReexecutionDeadline)
|
|
459
|
-
const constants = this.txCollection.getConstants();
|
|
460
|
-
const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
|
|
461
|
-
const deadline = new Date(nextSlotTimestampSeconds * 1000);
|
|
462
|
-
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
|
|
463
|
-
if (!parentBlock) {
|
|
464
|
-
this.log.debug(`Cannot collect txs for proposal as parent block not found`);
|
|
465
|
-
return false;
|
|
466
|
-
}
|
|
467
|
-
const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
|
|
468
|
-
await this.txProvider.getTxsForBlockProposal(block, blockNumber, {
|
|
469
|
-
pinnedPeer: sender,
|
|
470
|
-
deadline
|
|
471
|
-
});
|
|
472
|
-
return true;
|
|
473
|
-
});
|
|
474
448
|
this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
|
|
475
449
|
this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
|
|
476
450
|
}
|
|
@@ -492,6 +466,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
492
466
|
getPeers(includePending) {
|
|
493
467
|
return Promise.resolve(this.p2pService.getPeers(includePending));
|
|
494
468
|
}
|
|
469
|
+
getGossipMeshPeerCount(topicType) {
|
|
470
|
+
return Promise.resolve(this.p2pService.getGossipMeshPeerCount(topicType));
|
|
471
|
+
}
|
|
495
472
|
getL2BlockHash(number) {
|
|
496
473
|
return this.l2Tips.getL2BlockHash(number);
|
|
497
474
|
}
|
|
@@ -694,23 +671,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
694
671
|
registerDuplicateAttestationCallback(callback) {
|
|
695
672
|
this.p2pService.registerDuplicateAttestationCallback(callback);
|
|
696
673
|
}
|
|
697
|
-
/**
|
|
698
|
-
* Uses the batched Request Response protocol to request a set of transactions from the network.
|
|
699
|
-
*/ async requestTxsByHash(txHashes, pinnedPeerId) {
|
|
700
|
-
const timeoutMs = 8000; // Longer timeout for now
|
|
701
|
-
const maxRetryAttempts = 10; // Keep retrying within the timeout
|
|
702
|
-
const requests = chunkTxHashesRequest(txHashes);
|
|
703
|
-
const maxPeers = Math.min(Math.ceil(requests.length / 3), 10);
|
|
704
|
-
const txBatches = await this.p2pService.sendBatchRequest(ReqRespSubProtocol.TX, requests, pinnedPeerId, timeoutMs, maxPeers, maxRetryAttempts);
|
|
705
|
-
const txs = txBatches.flat();
|
|
706
|
-
if (txs.length > 0) {
|
|
707
|
-
await this.txPool.addPendingTxs(txs);
|
|
708
|
-
}
|
|
709
|
-
const txHashesStr = txHashes.map((tx)=>tx.toString()).join(', ');
|
|
710
|
-
this.log.debug(`Requested txs ${txHashesStr} (${txs.length} / ${txHashes.length}) from peers`);
|
|
711
|
-
// We return all transactions, even the not found ones to the caller, such they can handle missing items themselves.
|
|
712
|
-
return txs;
|
|
713
|
-
}
|
|
714
674
|
async getPendingTxs(limit, after) {
|
|
715
675
|
if (limit !== undefined && limit <= 0) {
|
|
716
676
|
throw new TypeError('limit must be greater than 0');
|
|
@@ -766,42 +726,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
766
726
|
return this.txPool.hasTxs(txHashes);
|
|
767
727
|
}
|
|
768
728
|
/**
|
|
769
|
-
* Returns transactions in the transaction pool by hash.
|
|
770
|
-
* If a transaction is not in the pool, it will be requested from the network.
|
|
771
|
-
* @param txHashes - Hashes of the transactions to look for.
|
|
772
|
-
* @returns The txs found, or undefined if not found in the order requested.
|
|
773
|
-
*/ async getTxsByHash(txHashes, pinnedPeerId) {
|
|
774
|
-
const txs = await Promise.all(txHashes.map((txHash)=>this.txPool.getTxByHash(txHash)));
|
|
775
|
-
const missingTxHashes = txs.map((tx, index)=>[
|
|
776
|
-
tx,
|
|
777
|
-
index
|
|
778
|
-
]).filter(([tx, _index])=>!tx).map(([_tx, index])=>txHashes[index]);
|
|
779
|
-
if (missingTxHashes.length === 0) {
|
|
780
|
-
return txs;
|
|
781
|
-
}
|
|
782
|
-
const missingTxs = await this.requestTxsByHash(missingTxHashes, pinnedPeerId);
|
|
783
|
-
// TODO: optimize
|
|
784
|
-
// Merge the found txs in order
|
|
785
|
-
const mergingTxs = txHashes.map((txHash)=>{
|
|
786
|
-
// Is it in the txs list from the mempool?
|
|
787
|
-
for (const tx of txs){
|
|
788
|
-
if (tx !== undefined && tx.getTxHash().equals(txHash)) {
|
|
789
|
-
return tx;
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
// Is it in the fetched missing txs?
|
|
793
|
-
// Note: this is an O(n^2) operation, but we expect the number of missing txs to be small.
|
|
794
|
-
for (const tx of missingTxs){
|
|
795
|
-
if (tx.getTxHash().equals(txHash)) {
|
|
796
|
-
return tx;
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
// Otherwise return undefined
|
|
800
|
-
return undefined;
|
|
801
|
-
});
|
|
802
|
-
return mergingTxs;
|
|
803
|
-
}
|
|
804
|
-
/**
|
|
805
729
|
* Returns an archived transaction in the transaction pool by its hash.
|
|
806
730
|
* @param txHash - Hash of the archived transaction to look for.
|
|
807
731
|
* @returns A single tx or undefined.
|
|
@@ -967,17 +891,27 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
967
891
|
});
|
|
968
892
|
}
|
|
969
893
|
/**
|
|
970
|
-
* Returns true if the prune
|
|
971
|
-
* If the
|
|
972
|
-
* If they differ, the prune spans across checkpoints (epoch prune).
|
|
894
|
+
* Returns true if the prune is an epoch prune (new checkpoint number is less than old).
|
|
895
|
+
* If the checkpoint number stays the same or increases, the prune is within a checkpoint.
|
|
973
896
|
*/ async isEpochPrune(newCheckpoint) {
|
|
974
897
|
const tips = await this.l2Tips.getL2Tips();
|
|
975
898
|
const oldCheckpointNumber = tips.checkpointed.checkpoint.number;
|
|
976
|
-
if (oldCheckpointNumber <= CheckpointNumber.
|
|
899
|
+
if (oldCheckpointNumber <= CheckpointNumber.INITIAL) {
|
|
977
900
|
return false;
|
|
978
901
|
}
|
|
979
|
-
const
|
|
980
|
-
|
|
902
|
+
const newCheckpointNumber = newCheckpoint.number;
|
|
903
|
+
// We check that the new checkpoint number is less than the old checkpoint number in order to consider it an epoch prune.
|
|
904
|
+
// To be more certain that it is an epoch prune, we will check that at least 2 checkpoints were removed.
|
|
905
|
+
// This means we should avoid thinking checkpoints removed by L1 re-orgs are epoch prunes
|
|
906
|
+
const thresholdForEpochPrune = CheckpointNumber(oldCheckpointNumber - 2);
|
|
907
|
+
const isEpochPrune = newCheckpointNumber <= thresholdForEpochPrune;
|
|
908
|
+
if (isEpochPrune) {
|
|
909
|
+
this.log.info(`Detected epoch prune to ${newCheckpointNumber}`, {
|
|
910
|
+
oldCheckpointNumber,
|
|
911
|
+
newCheckpointNumber,
|
|
912
|
+
thresholdForEpochPrune
|
|
913
|
+
});
|
|
914
|
+
}
|
|
981
915
|
return isEpochPrune;
|
|
982
916
|
}
|
|
983
917
|
/** Checks if the slot has changed and calls prepareForSlot if so. */ async maybeCallPrepareForSlot() {
|
|
@@ -1017,8 +951,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
1017
951
|
this.currentState = newState;
|
|
1018
952
|
this.log.debug(`Moved from state ${P2PClientState[oldState]} to ${P2PClientState[this.currentState]}`);
|
|
1019
953
|
}
|
|
1020
|
-
|
|
1021
|
-
return this.p2pService.
|
|
954
|
+
validateTxsReceivedInBlockProposal(txs) {
|
|
955
|
+
return this.p2pService.validateTxsReceivedInBlockProposal(txs);
|
|
1022
956
|
}
|
|
1023
957
|
/**
|
|
1024
958
|
* Protects existing transactions by hash for a given slot.
|
|
@@ -4,14 +4,12 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
4
4
|
import { sleep } from '@aztec/foundation/sleep';
|
|
5
5
|
import { DateProvider, Timer, executeTimeout } from '@aztec/foundation/timer';
|
|
6
6
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
7
|
-
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
8
7
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
9
8
|
import { peerIdFromString } from '@libp2p/peer-id';
|
|
10
9
|
import { BatchTxRequesterCollector, SendBatchRequestCollector } from '../../../services/index.js';
|
|
11
10
|
import { RateLimitStatus } from '../../../services/reqresp/rate-limiter/rate_limiter.js';
|
|
12
11
|
import { MissingTxsTracker } from '../../../services/tx_collection/missing_txs_tracker.js';
|
|
13
|
-
import { AlwaysTrueCircuitVerifier } from '../../../test-helpers/index.js';
|
|
14
|
-
import { BENCHMARK_CONSTANTS, InMemoryAttestationPool, InMemoryTxPool, UNLIMITED_RATE_LIMIT_QUOTA, calculateInternalTimeout, createMockEpochCache, createMockWorldStateSynchronizer } from '../../../test-helpers/index.js';
|
|
12
|
+
import { AlwaysTrueCircuitVerifier, BENCHMARK_CONSTANTS, InMemoryAttestationPool, InMemoryTxPool, UNLIMITED_RATE_LIMIT_QUOTA, calculateInternalTimeout, createMockEpochCache, createMockWorldStateSynchronizer } from '../../../test-helpers/index.js';
|
|
15
13
|
import { createP2PClient } from '../../index.js';
|
|
16
14
|
import { deserializeBlockProposal, deserializeTx, deserializeTxHash } from './proposal_tx_collector_worker_protocol.js';
|
|
17
15
|
let client;
|
|
@@ -84,7 +82,7 @@ async function startClient(config, clientIndex) {
|
|
|
84
82
|
store: kvStore,
|
|
85
83
|
logger
|
|
86
84
|
};
|
|
87
|
-
client = await createP2PClient(
|
|
85
|
+
client = await createP2PClient(config, l2BlockSource, proofVerifier, worldState, epochCache, 'proposal-tx-collector-bench-worker', new DateProvider(), telemetry, deps);
|
|
88
86
|
await client.start();
|
|
89
87
|
installUnlimitedRateLimits();
|
|
90
88
|
for(let i = 0; i < 120; i++){
|
package/dest/config.d.ts
CHANGED
|
@@ -8,7 +8,15 @@ import { type TxFileStoreConfig } from './services/tx_file_store/config.js';
|
|
|
8
8
|
/**
|
|
9
9
|
* P2P client configuration values.
|
|
10
10
|
*/
|
|
11
|
-
export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, ChainConfig, TxCollectionConfig, TxFileStoreConfig, Pick<SequencerConfig, 'blockDurationMs'> {
|
|
11
|
+
export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, ChainConfig, TxCollectionConfig, TxFileStoreConfig, Pick<SequencerConfig, 'blockDurationMs' | 'expectedBlockProposalsPerSlot' | 'maxTxsPerBlock'> {
|
|
12
|
+
/** Maximum transactions per block for validation. Overrides maxTxsPerBlock for gossip validation when set. */
|
|
13
|
+
validateMaxTxsPerBlock?: number;
|
|
14
|
+
/** Maximum transactions per checkpoint for validation. Used as fallback for maxTxsPerBlock when that is not set. */
|
|
15
|
+
validateMaxTxsPerCheckpoint?: number;
|
|
16
|
+
/** Maximum L2 gas per block for validation. When set, txs exceeding this limit are rejected. */
|
|
17
|
+
validateMaxL2BlockGas?: number;
|
|
18
|
+
/** Maximum DA gas per block for validation. When set, txs exceeding this limit are rejected. */
|
|
19
|
+
validateMaxDABlockGas?: number;
|
|
12
20
|
/** A flag dictating whether the P2P subsystem should be enabled. */
|
|
13
21
|
p2pEnabled: boolean;
|
|
14
22
|
/** The frequency in which to check for new L2 blocks. */
|
|
@@ -83,8 +91,8 @@ export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, Cha
|
|
|
83
91
|
preferredPeers: string[];
|
|
84
92
|
/** The maximum possible size of the P2P DB in KB. Overwrites the general dataStoreMapSizeKb. */
|
|
85
93
|
p2pStoreMapSizeKb?: number;
|
|
86
|
-
/**
|
|
87
|
-
|
|
94
|
+
/** Additional entries to extend the default setup allow list. */
|
|
95
|
+
txPublicSetupAllowListExtend: AllowedElement[];
|
|
88
96
|
/** The maximum number of pending txs before evicting lower priority txs. */
|
|
89
97
|
maxPendingTxCount: number;
|
|
90
98
|
/** The node's seen message ID cache size */
|
|
@@ -113,6 +121,8 @@ export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, Cha
|
|
|
113
121
|
broadcastEquivocatedProposals?: boolean;
|
|
114
122
|
/** Minimum age (ms) a transaction must have been in the pool before it's eligible for block building. */
|
|
115
123
|
minTxPoolAgeMs: number;
|
|
124
|
+
/** Minimum percentage fee increase required to replace an existing tx via RPC (0 = no bump). */
|
|
125
|
+
priceBumpPercentage: bigint;
|
|
116
126
|
}
|
|
117
127
|
export declare const DEFAULT_P2P_PORT = 40400;
|
|
118
128
|
export declare const p2pConfigMappings: ConfigMappingsType<P2PConfig>;
|
|
@@ -148,6 +158,7 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
148
158
|
doubleSpendSeverePeerPenaltyWindow: unknown;
|
|
149
159
|
dropTransactions: unknown;
|
|
150
160
|
dropTransactionsProbability: unknown;
|
|
161
|
+
expectedBlockProposalsPerSlot: unknown;
|
|
151
162
|
fishermanMode: unknown;
|
|
152
163
|
gossipsubD: unknown;
|
|
153
164
|
gossipsubDLazy: unknown;
|
|
@@ -168,6 +179,7 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
168
179
|
listenAddress: unknown;
|
|
169
180
|
maxPeerCount: unknown;
|
|
170
181
|
maxPendingTxCount: unknown;
|
|
182
|
+
maxTxsPerBlock: unknown;
|
|
171
183
|
minTxPoolAgeMs: unknown;
|
|
172
184
|
overallRequestTimeoutMs: unknown;
|
|
173
185
|
p2pAllowOnlyValidators: unknown;
|
|
@@ -185,6 +197,7 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
185
197
|
peerIdPrivateKeyPath: unknown;
|
|
186
198
|
peerPenaltyValues: unknown;
|
|
187
199
|
preferredPeers: unknown;
|
|
200
|
+
priceBumpPercentage: unknown;
|
|
188
201
|
privatePeers: unknown;
|
|
189
202
|
queryForIp: unknown;
|
|
190
203
|
rollupVersion: unknown;
|
|
@@ -216,18 +229,24 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
216
229
|
txFileStoreUploadConcurrency: unknown;
|
|
217
230
|
txFileStoreUrl: unknown;
|
|
218
231
|
txPoolDeleteTxsAfterReorg: unknown;
|
|
219
|
-
|
|
232
|
+
txPublicSetupAllowListExtend: unknown;
|
|
233
|
+
validateMaxDABlockGas: unknown;
|
|
234
|
+
validateMaxL2BlockGas: unknown;
|
|
235
|
+
validateMaxTxsPerBlock: unknown;
|
|
236
|
+
validateMaxTxsPerCheckpoint: unknown;
|
|
220
237
|
}, "bootstrapNodes" | "dataDirectory" | "dataStoreMapSizeKb" | "l1ChainId" | "listenAddress" | "p2pBroadcastPort" | "p2pIp" | "p2pPort" | "peerIdPrivateKey" | "peerIdPrivateKeyPath" | "queryForIp">>;
|
|
221
238
|
/**
|
|
222
239
|
* Parses a string to a list of allowed elements.
|
|
223
|
-
* Each
|
|
224
|
-
* `I:${address}`
|
|
225
|
-
* `
|
|
226
|
-
*
|
|
227
|
-
*
|
|
240
|
+
* Each entry is expected to be of one of the following formats:
|
|
241
|
+
* `I:${address}:${selector}` — instance (contract address) with function selector
|
|
242
|
+
* `C:${classId}:${selector}` — class with function selector
|
|
243
|
+
*
|
|
244
|
+
* An optional flags segment can be appended after the selector:
|
|
245
|
+
* `I:${address}:${selector}:${flags}` or `C:${classId}:${selector}:${flags}`
|
|
246
|
+
* where flags is a `+`-separated list of: `os` (onlySelf), `rn` (rejectNullMsgSender), `cl=N` (calldataLength).
|
|
228
247
|
*
|
|
229
248
|
* @param value The string to parse
|
|
230
249
|
* @returns A list of allowed elements
|
|
231
250
|
*/
|
|
232
251
|
export declare function parseAllowList(value: string): AllowedElement[];
|
|
233
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUN2QixXQUFXLEVBU1osTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFHbEYsT0FBTyxFQUNMLEtBQUssY0FBYyxFQUNuQixLQUFLLFdBQVcsRUFDaEIsS0FBSyxlQUFlLEVBR3JCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0saURBQWlELENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQTRCLE1BQU0sOEJBQThCLENBQUM7QUFDL0YsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQThCLE1BQU0sb0NBQW9DLENBQUM7QUFDekcsT0FBTyxFQUFFLEtBQUssaUJBQWlCLEVBQTZCLE1BQU0sb0NBQW9DLENBQUM7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLFdBQVcsU0FDZixTQUFRLGdCQUFnQixFQUN0QixzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsR0FBRywrQkFBK0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMvRiw4R0FBOEc7SUFDOUcsc0JBQXNCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFaEMsb0hBQW9IO0lBQ3BILDJCQUEyQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBRXJDLGdHQUFnRztJQUNoRyxxQkFBcUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUUvQixnR0FBZ0c7SUFDaEcscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFL0Isb0VBQW9FO0lBQ3BFLFVBQVUsRUFBRSxPQUFPLENBQUM7SUFFcEIseURBQXlEO0lBQ3pELG9CQUFv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
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,EASZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAGlF,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,EAGrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,oCAAoC,CAAC;AACzG,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,oCAAoC,CAAC;AAEvG;;GAEG;AACH,MAAM,WAAW,SACf,SAAQ,gBAAgB,EACtB,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,+BAA+B,GAAG,gBAAgB,CAAC;IAC/F,8GAA8G;IAC9G,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,oHAAoH;IACpH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC,gGAAgG;IAChG,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,gGAAgG;IAChG,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,oEAAoE;IACpE,UAAU,EAAE,OAAO,CAAC;IAEpB,yDAAyD;IACzD,oBAAoB,EAAE,MAAM,CAAC;IAE7B,wDAAwD;IACxD,mBAAmB,EAAE,MAAM,CAAC;IAE5B,uDAAuD;IACvD,qBAAqB,EAAE,MAAM,CAAC;IAE9B,oEAAoE;IACpE,6BAA6B,EAAE,OAAO,CAAC;IAEvC,qDAAqD;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAE5B,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IAEpB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAEhB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IAEtB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAEvC,4IAA4I;IAC5I,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,+CAA+C;IAC/C,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,sEAAsE;IACtE,4BAA4B,EAAE,OAAO,CAAC;IAEtC,iGAAiG;IACjG,yBAAyB,EAAE,OAAO,CAAC;IAEnC,8GAA8G;IAC9G,YAAY,EAAE,MAAM,CAAC;IAErB,+HAA+H;IAC/H,UAAU,EAAE,OAAO,CAAC;IAEpB,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAE1B,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IAEnB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IAErB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IAErB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IAEvB,qEAAqE;IACrE,qBAAqB,EAAE,OAAO,CAAC;IAE/B,sEAAsE;IACtE,qBAAqB,EAAE,MAAM,CAAC;IAE9B,iFAAiF;IACjF,qBAAqB,EAAE,MAAM,CAAC;IAE9B,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IAEzB,gHAAgH;IAChH,kCAAkC,EAAE,MAAM,CAAC;IAE3C,gKAAgK;IAChK,sBAAsB,EAAE,MAAM,CAAC;IAE/B,iFAAiF;IACjF,yCAAyC,EAAE,MAAM,CAAC;IAElD,2GAA2G;IAC3G,wCAAwC,EAAE,MAAM,CAAC;IAEjD,oIAAoI;IACpI,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAE5B,sIAAsI;IACtI,eAAe,EAAE,MAAM,CAAC;IAExB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,iCAAiC;IACjC,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,gGAAgG;IAChG,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,iEAAiE;IACjE,4BAA4B,EAAE,cAAc,EAAE,CAAC;IAE/C,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAE1B,4CAA4C;IAC5C,oBAAoB,EAAE,MAAM,CAAC;IAE7B,8DAA8D;IAC9D,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC,gDAAgD;IAChD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iFAAiF;IACjF,+BAA+B,EAAE,MAAM,CAAC;IAExC,2HAA2H;IAC3H,mBAAmB,EAAE,OAAO,CAAC;IAE7B,2EAA2E;IAC3E,gBAAgB,EAAE,OAAO,CAAC;IAE1B,mFAAmF;IACnF,2BAA2B,EAAE,MAAM,CAAC;IAEpC,yGAAyG;IACzG,yBAAyB,EAAE,OAAO,CAAC;IAEnC,oGAAoG;IACpG,0BAA0B,EAAE,OAAO,CAAC;IAEpC,iJAAiJ;IACjJ,aAAa,EAAE,OAAO,CAAC;IAEvB,2IAA2I;IAC3I,6BAA6B,CAAC,EAAE,OAAO,CAAC;IAExC,yGAAyG;IACzG,cAAc,EAAE,MAAM,CAAC;IAEvB,gGAAgG;IAChG,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,eAAO,MAAM,iBAAiB,EAAE,kBAAkB,CAAC,SAAS,CAsT3D,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,CAE/C;AAED,wBAAgB,mBAAmB,IAAI,SAAS,CAE/C;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,SAAS,EACP,OAAO,GACP,SAAS,GACT,kBAAkB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,gBAAgB,GAChB,eAAe,GACf,YAAY,CACf,GACC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,GAC9C,IAAI,CAAC,eAAe,EAAE,eAAe,GAAG,oBAAoB,CAAC,GAC7D,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAgBjC,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sMAGlC,CAAC;AA+BF;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CA2C9D"}
|
package/dest/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { booleanConfigHelper, getConfigFromMappings, getDefaultConfig, numberConfigHelper, percentageConfigHelper, pickConfigMappings, secretStringConfigHelper } from '@aztec/foundation/config';
|
|
1
|
+
import { bigintConfigHelper, booleanConfigHelper, getConfigFromMappings, getDefaultConfig, numberConfigHelper, percentageConfigHelper, pickConfigMappings, secretStringConfigHelper } from '@aztec/foundation/config';
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { dataConfigMappings } from '@aztec/kv-store/config';
|
|
4
4
|
import { FunctionSelector } from '@aztec/stdlib/abi/function-selector';
|
|
@@ -10,6 +10,26 @@ import { txCollectionConfigMappings } from './services/tx_collection/config.js';
|
|
|
10
10
|
import { txFileStoreConfigMappings } from './services/tx_file_store/config.js';
|
|
11
11
|
export const DEFAULT_P2P_PORT = 40400;
|
|
12
12
|
export const p2pConfigMappings = {
|
|
13
|
+
validateMaxTxsPerBlock: {
|
|
14
|
+
env: 'VALIDATOR_MAX_TX_PER_BLOCK',
|
|
15
|
+
description: 'Maximum transactions per block for validation. Overrides maxTxsPerBlock for gossip validation when set.',
|
|
16
|
+
parseEnv: (val)=>val ? parseInt(val, 10) : undefined
|
|
17
|
+
},
|
|
18
|
+
validateMaxTxsPerCheckpoint: {
|
|
19
|
+
env: 'VALIDATOR_MAX_TX_PER_CHECKPOINT',
|
|
20
|
+
description: 'Maximum transactions per checkpoint for validation. Used as fallback for maxTxsPerBlock when that is not set.',
|
|
21
|
+
parseEnv: (val)=>val ? parseInt(val, 10) : undefined
|
|
22
|
+
},
|
|
23
|
+
validateMaxL2BlockGas: {
|
|
24
|
+
env: 'VALIDATOR_MAX_L2_BLOCK_GAS',
|
|
25
|
+
description: 'Maximum L2 gas per block for validation. When set, txs exceeding this limit are rejected.',
|
|
26
|
+
parseEnv: (val)=>val ? parseInt(val, 10) : undefined
|
|
27
|
+
},
|
|
28
|
+
validateMaxDABlockGas: {
|
|
29
|
+
env: 'VALIDATOR_MAX_DA_BLOCK_GAS',
|
|
30
|
+
description: 'Maximum DA gas per block for validation. When set, txs exceeding this limit are rejected.',
|
|
31
|
+
parseEnv: (val)=>val ? parseInt(val, 10) : undefined
|
|
32
|
+
},
|
|
13
33
|
p2pEnabled: {
|
|
14
34
|
env: 'P2P_ENABLED',
|
|
15
35
|
description: 'A flag dictating whether the P2P subsystem should be enabled.',
|
|
@@ -206,11 +226,11 @@ export const p2pConfigMappings = {
|
|
|
206
226
|
parseEnv: (val)=>val ? +val : undefined,
|
|
207
227
|
description: 'The maximum possible size of the P2P DB in KB. Overwrites the general dataStoreMapSizeKb.'
|
|
208
228
|
},
|
|
209
|
-
|
|
229
|
+
txPublicSetupAllowListExtend: {
|
|
210
230
|
env: 'TX_PUBLIC_SETUP_ALLOWLIST',
|
|
211
231
|
parseEnv: (val)=>parseAllowList(val),
|
|
212
|
-
description: '
|
|
213
|
-
printDefault: ()=>'AuthRegistry
|
|
232
|
+
description: 'Additional entries to extend the default setup allow list. Format: I:address:selector[:flags],C:classId:selector[:flags]. Flags: os (onlySelf), rn (rejectNullMsgSender), cl=N (calldataLength), joined with +.',
|
|
233
|
+
printDefault: ()=>'Default: AuthRegistry._set_authorized, AuthRegistry.set_authorized, FeeJuice._increase_public_balance'
|
|
214
234
|
},
|
|
215
235
|
maxPendingTxCount: {
|
|
216
236
|
env: 'P2P_MAX_PENDING_TX_COUNT',
|
|
@@ -278,6 +298,11 @@ export const p2pConfigMappings = {
|
|
|
278
298
|
description: 'Minimum age (ms) a transaction must have been in the pool before it is eligible for block building.',
|
|
279
299
|
...numberConfigHelper(2_000)
|
|
280
300
|
},
|
|
301
|
+
priceBumpPercentage: {
|
|
302
|
+
env: 'P2P_RPC_PRICE_BUMP_PERCENTAGE',
|
|
303
|
+
description: 'Minimum percentage fee increase required to replace an existing tx via RPC. Even at 0%, replacement still requires paying at least 1 unit more.',
|
|
304
|
+
...bigintConfigHelper(10n)
|
|
305
|
+
},
|
|
281
306
|
...sharedSequencerConfigMappings,
|
|
282
307
|
...p2pReqRespConfigMappings,
|
|
283
308
|
...batchTxRequesterConfigMappings,
|
|
@@ -312,13 +337,37 @@ export const bootnodeConfigMappings = pickConfigMappings({
|
|
|
312
337
|
...dataConfigMappings,
|
|
313
338
|
...chainConfigMappings
|
|
314
339
|
}, bootnodeConfigKeys);
|
|
340
|
+
/**
|
|
341
|
+
* Parses a `+`-separated flags string into validation properties for an allow list entry.
|
|
342
|
+
* Supported flags: `os` (onlySelf), `rn` (rejectNullMsgSender), `cl=N` (calldataLength).
|
|
343
|
+
*/ function parseFlags(flags, entry) {
|
|
344
|
+
const result = {};
|
|
345
|
+
for (const flag of flags.split('+')){
|
|
346
|
+
if (flag === 'os') {
|
|
347
|
+
result.onlySelf = true;
|
|
348
|
+
} else if (flag === 'rn') {
|
|
349
|
+
result.rejectNullMsgSender = true;
|
|
350
|
+
} else if (flag.startsWith('cl=')) {
|
|
351
|
+
const n = parseInt(flag.slice(3), 10);
|
|
352
|
+
if (isNaN(n) || n < 0) {
|
|
353
|
+
throw new Error(`Invalid allow list entry "${entry}": invalid calldataLength in flag "${flag}". Expected a non-negative integer.`);
|
|
354
|
+
}
|
|
355
|
+
result.calldataLength = n;
|
|
356
|
+
} else {
|
|
357
|
+
throw new Error(`Invalid allow list entry "${entry}": unknown flag "${flag}". Supported flags: os, rn, cl=N.`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return result;
|
|
361
|
+
}
|
|
315
362
|
/**
|
|
316
363
|
* Parses a string to a list of allowed elements.
|
|
317
|
-
* Each
|
|
318
|
-
* `I:${address}`
|
|
319
|
-
* `
|
|
320
|
-
*
|
|
321
|
-
*
|
|
364
|
+
* Each entry is expected to be of one of the following formats:
|
|
365
|
+
* `I:${address}:${selector}` — instance (contract address) with function selector
|
|
366
|
+
* `C:${classId}:${selector}` — class with function selector
|
|
367
|
+
*
|
|
368
|
+
* An optional flags segment can be appended after the selector:
|
|
369
|
+
* `I:${address}:${selector}:${flags}` or `C:${classId}:${selector}:${flags}`
|
|
370
|
+
* where flags is a `+`-separated list of: `os` (onlySelf), `rn` (rejectNullMsgSender), `cl=N` (calldataLength).
|
|
322
371
|
*
|
|
323
372
|
* @param value The string to parse
|
|
324
373
|
* @returns A list of allowed elements
|
|
@@ -328,30 +377,30 @@ export const bootnodeConfigMappings = pickConfigMappings({
|
|
|
328
377
|
return entries;
|
|
329
378
|
}
|
|
330
379
|
for (const val of value.split(',')){
|
|
331
|
-
const
|
|
332
|
-
|
|
380
|
+
const trimmed = val.trim();
|
|
381
|
+
if (!trimmed) {
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
const [typeString, identifierString, selectorString, flagsString] = trimmed.split(':');
|
|
385
|
+
if (!selectorString) {
|
|
386
|
+
throw new Error(`Invalid allow list entry "${trimmed}": selector is required. Expected format: I:address:selector or C:classId:selector`);
|
|
387
|
+
}
|
|
388
|
+
const selector = FunctionSelector.fromString(selectorString);
|
|
389
|
+
const flags = flagsString ? parseFlags(flagsString, trimmed) : {};
|
|
333
390
|
if (typeString === 'I') {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
} else {
|
|
340
|
-
entries.push({
|
|
341
|
-
address: AztecAddress.fromString(identifierString)
|
|
342
|
-
});
|
|
343
|
-
}
|
|
391
|
+
entries.push({
|
|
392
|
+
address: AztecAddress.fromString(identifierString),
|
|
393
|
+
selector,
|
|
394
|
+
...flags
|
|
395
|
+
});
|
|
344
396
|
} else if (typeString === 'C') {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
classId: Fr.fromHexString(identifierString)
|
|
353
|
-
});
|
|
354
|
-
}
|
|
397
|
+
entries.push({
|
|
398
|
+
classId: Fr.fromHexString(identifierString),
|
|
399
|
+
selector,
|
|
400
|
+
...flags
|
|
401
|
+
});
|
|
402
|
+
} else {
|
|
403
|
+
throw new Error(`Invalid allow list entry "${trimmed}": unknown type "${typeString}". Expected "I" (instance) or "C" (class).`);
|
|
355
404
|
}
|
|
356
405
|
}
|
|
357
406
|
return entries;
|
|
@@ -13,4 +13,4 @@ export declare class FeePayerBalanceEvictionRule implements EvictionRule {
|
|
|
13
13
|
private getEvictionsForFeePayer;
|
|
14
14
|
private createPublicStateSource;
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX3BheWVyX2JhbGFuY2VfZXZpY3Rpb25fcnVsZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sL2V2aWN0aW9uL2ZlZV9wYXllcl9iYWxhbmNlX2V2aWN0aW9uX3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUk5RSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUVwQixLQUFLLGNBQWMsRUFDbkIsS0FBSyxZQUFZLEVBRWpCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMscUJBQWEsMkJBQTRCLFlBQVcsWUFBWTtJQU1sRCxPQUFPLENBQUMsVUFBVTtJQUw5QixTQUFnQixJQUFJLDZCQUE2QjtJQUNqRCxTQUFnQixNQUFNLHVCQUF1QjtJQUU3QyxPQUFPLENBQUMsR0FBRyxDQUF1RTtJQUVsRixZQUFvQixVQUFVLEVBQUUsc0JBQXNCLEVBQUk7SUFFcEQsS0FBSyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0ErQ3ZGO0lBRUQsWUFBWSxDQUFDLE9BQU8sRUFBRSxhQUFhLEdBQUcsSUFBSSxDQUFHO1lBRS9CLGlCQUFpQjtZQXNCakIsdUJBQXVCO0lBNERyQyxPQUFPLENBQUMsdUJBQXVCO0NBR2hDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fee_payer_balance_eviction_rule.d.ts","sourceRoot":"","sources":["../../../../src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAI9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,cAAc,EACnB,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,2BAA4B,YAAW,YAAY;IAMlD,OAAO,CAAC,UAAU;IAL9B,SAAgB,IAAI,6BAA6B;IACjD,SAAgB,MAAM,uBAAuB;IAE7C,OAAO,CAAC,GAAG,CAAuE;IAElF,YAAoB,UAAU,EAAE,sBAAsB,EAAI;IAEpD,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"fee_payer_balance_eviction_rule.d.ts","sourceRoot":"","sources":["../../../../src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAI9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,cAAc,EACnB,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,2BAA4B,YAAW,YAAY;IAMlD,OAAO,CAAC,UAAU;IAL9B,SAAgB,IAAI,6BAA6B;IACjD,SAAgB,MAAM,uBAAuB;IAE7C,OAAO,CAAC,GAAG,CAAuE;IAElF,YAAoB,UAAU,EAAE,sBAAsB,EAAI;IAEpD,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CA+CvF;IAED,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAG;YAE/B,iBAAiB;YAsBjB,uBAAuB;IA4DrC,OAAO,CAAC,uBAAuB;CAGhC"}
|
|
@@ -21,10 +21,11 @@ export class FeePayerBalanceEvictionRule {
|
|
|
21
21
|
}
|
|
22
22
|
if (context.event === EvictionEvent.BLOCK_MINED) {
|
|
23
23
|
const blockNumber = context.block.getBlockNumber();
|
|
24
|
+
const blockHash = await context.block.hash();
|
|
24
25
|
// Ensure world state is synced to this block before accessing the snapshot.
|
|
25
26
|
// This handles the race where a block is added to the archiver
|
|
26
27
|
// but the world state hasn't synced it yet.
|
|
27
|
-
await this.worldState.syncImmediate(blockNumber);
|
|
28
|
+
await this.worldState.syncImmediate(blockNumber, blockHash);
|
|
28
29
|
return await this.evictForFeePayers(context.feePayers, this.worldState.getSnapshot(blockNumber), txPool);
|
|
29
30
|
}
|
|
30
31
|
// TODO: fix this edge-case
|
|
@@ -6,7 +6,7 @@ import type { Tx } from '@aztec/stdlib/tx';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function getPendingTxPriority(tx: Tx): string;
|
|
8
8
|
/**
|
|
9
|
-
* Returns the priority of a tx.
|
|
9
|
+
* Returns the priority of a tx based on the L2 priority fee only, capped by the max fees per gas.
|
|
10
10
|
*/
|
|
11
11
|
export declare function getTxPriorityFee(tx: Tx): bigint;
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpb3JpdHkuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvdHhfcG9vbC9wcmlvcml0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzQzs7OztHQUlHO0FBQ0gsd0JBQWdCLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUVuRDtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUcvQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"priority.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/priority.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"priority.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/priority.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAG/C"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { minBigint } from '@aztec/foundation/bigint';
|
|
1
2
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
2
3
|
/**
|
|
3
4
|
* Returns a string representing the priority of a tx.
|
|
@@ -7,9 +8,8 @@ import { Buffer32 } from '@aztec/foundation/buffer';
|
|
|
7
8
|
return Buffer32.fromBigInt(getTxPriorityFee(tx)).toString();
|
|
8
9
|
}
|
|
9
10
|
/**
|
|
10
|
-
* Returns the priority of a tx.
|
|
11
|
+
* Returns the priority of a tx based on the L2 priority fee only, capped by the max fees per gas.
|
|
11
12
|
*/ export function getTxPriorityFee(tx) {
|
|
12
|
-
const priorityFees = tx.getGasSettings()
|
|
13
|
-
|
|
14
|
-
return totalFees;
|
|
13
|
+
const { maxPriorityFeesPerGas: priorityFees, maxFeesPerGas } = tx.getGasSettings();
|
|
14
|
+
return minBigint(maxFeesPerGas.feePerL2Gas, priorityFees.feePerL2Gas);
|
|
15
15
|
}
|
|
@@ -4,4 +4,4 @@ import type { TxPool } from './tx_pool.js';
|
|
|
4
4
|
* @param getTxPool - Gets a fresh TxPool
|
|
5
5
|
*/
|
|
6
6
|
export declare function describeTxPool(getTxPool: () => TxPool): void;
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcG9vbF90ZXN0X3N1aXRlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWVtX3Bvb2xzL3R4X3Bvb2wvdHhfcG9vbF90ZXN0X3N1aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzQzs7O0dBR0c7QUFDSCx3QkFBZ0IsY0FBYyxDQUFDLFNBQVMsRUFBRSxNQUFNLE1BQU0sUUFvVHJEIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/tx_pool_test_suite.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"tx_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/tx_pool_test_suite.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,MAAM,QAoTrD"}
|
|
@@ -264,7 +264,9 @@ import { BlockHeader, GlobalVariables } from '@aztec/stdlib/tx';
|
|
|
264
264
|
});
|
|
265
265
|
it('returns pending tx hashes sorted by priority', async ()=>{
|
|
266
266
|
const withPriorityFee = (tx, fee)=>{
|
|
267
|
-
unfreeze(tx.data.constants.txContext.gasSettings)
|
|
267
|
+
const gs = unfreeze(tx.data.constants.txContext.gasSettings);
|
|
268
|
+
gs.maxPriorityFeesPerGas = new GasFees(fee, fee);
|
|
269
|
+
gs.maxFeesPerGas = new GasFees(fee, fee);
|
|
268
270
|
return tx;
|
|
269
271
|
};
|
|
270
272
|
const tx1 = withPriorityFee(await mockTx(0), 1000);
|
|
@@ -14,4 +14,4 @@ export declare class FeePayerBalanceEvictionRule implements EvictionRule {
|
|
|
14
14
|
private evictForFeePayers;
|
|
15
15
|
private getEvictionsForFeePayer;
|
|
16
16
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX3BheWVyX2JhbGFuY2VfZXZpY3Rpb25fcnVsZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sX3YyL2V2aWN0aW9uL2ZlZV9wYXllcl9iYWxhbmNlX2V2aWN0aW9uX3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUk5RSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRzs7O0dBR0c7QUFDSCxxQkFBYSwyQkFBNEIsWUFBVyxZQUFZO0lBTWxELE9BQU8sQ0FBQyxVQUFVO0lBTDlCLFNBQWdCLElBQUksNkJBQTZCO0lBQ2pELFNBQWdCLE1BQU0sdUJBQXVCO0lBRTdDLE9BQU8sQ0FBQyxHQUFHLENBQWtFO0lBRTdFLFlBQW9CLFVBQVUsRUFBRSxzQkFBc0IsRUFBSTtJQUVwRCxLQUFLLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FpQ25GO1lBRWEsaUJBQWlCO1lBeUJqQix1QkFBdUI7Q0FzQ3RDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fee_payer_balance_eviction_rule.d.ts","sourceRoot":"","sources":["../../../../src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAI9E,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGrG;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,YAAY;IAMlD,OAAO,CAAC,UAAU;IAL9B,SAAgB,IAAI,6BAA6B;IACjD,SAAgB,MAAM,uBAAuB;IAE7C,OAAO,CAAC,GAAG,CAAkE;IAE7E,YAAoB,UAAU,EAAE,sBAAsB,EAAI;IAEpD,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"fee_payer_balance_eviction_rule.d.ts","sourceRoot":"","sources":["../../../../src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAI9E,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGrG;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,YAAY;IAMlD,OAAO,CAAC,UAAU;IAL9B,SAAgB,IAAI,6BAA6B;IACjD,SAAgB,MAAM,uBAAuB;IAE7C,OAAO,CAAC,GAAG,CAAkE;IAE7E,YAAoB,UAAU,EAAE,sBAAsB,EAAI;IAEpD,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAiCnF;YAEa,iBAAiB;YAyBjB,uBAAuB;CAsCtC"}
|
|
@@ -26,11 +26,12 @@ import { EvictionEvent } from './interfaces.js';
|
|
|
26
26
|
}
|
|
27
27
|
if (context.event === EvictionEvent.BLOCK_MINED) {
|
|
28
28
|
const blockNumber = context.block.getBlockNumber();
|
|
29
|
-
await
|
|
29
|
+
const blockHash = await context.block.hash();
|
|
30
|
+
await this.worldState.syncImmediate(blockNumber, blockHash);
|
|
30
31
|
return await this.evictForFeePayers(context.feePayers, this.worldState.getSnapshot(blockNumber), pool);
|
|
31
32
|
}
|
|
32
33
|
if (context.event === EvictionEvent.CHAIN_PRUNED) {
|
|
33
|
-
await this.worldState.syncImmediate(
|
|
34
|
+
await this.worldState.syncImmediate();
|
|
34
35
|
const feePayers = pool.getPendingFeePayers();
|
|
35
36
|
return await this.evictForFeePayers(feePayers, this.worldState.getSnapshot(context.blockNumber), pool);
|
|
36
37
|
}
|
|
@@ -16,4 +16,4 @@ export declare class FeePayerBalancePreAddRule implements PreAddRule {
|
|
|
16
16
|
private log;
|
|
17
17
|
check(incomingMeta: TxMetaData, poolAccess: PreAddPoolAccess, _context?: PreAddContext): Promise<PreAddResult>;
|
|
18
18
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX3BheWVyX2JhbGFuY2VfcHJlX2FkZF9ydWxlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWVtX3Bvb2xzL3R4X3Bvb2xfdjIvZXZpY3Rpb24vZmVlX3BheWVyX2JhbGFuY2VfcHJlX2FkZF9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBbUIsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsS0FBSyxhQUFhLEVBQ2xCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssWUFBWSxFQUNqQixLQUFLLFVBQVUsRUFFaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6Qjs7Ozs7Ozs7OztHQVVHO0FBQ0gscUJBQWEseUJBQTBCLFlBQVcsVUFBVTtJQUMxRCxTQUFnQixJQUFJLDJCQUEyQjtJQUUvQyxPQUFPLENBQUMsR0FBRyxDQUFpRTtJQUV0RSxLQUFLLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FnR25IO0NBQ0YifQ==
|