@aztec/p2p 0.0.1-commit.d3ec352c → 0.0.1-commit.d431d1c
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/client/factory.d.ts +2 -2
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +2 -3
- package/dest/client/interface.d.ts +18 -5
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +11 -14
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +456 -124
- package/dest/config.d.ts +4 -7
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +10 -13
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +239 -265
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -109
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
- package/dest/mem_pools/attestation_pool/mocks.d.ts +11 -8
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +17 -13
- package/dest/mem_pools/instrumentation.d.ts +7 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +30 -12
- package/dest/mem_pools/interface.d.ts +3 -4
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +36 -27
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +31 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +156 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +115 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +76 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
- package/dest/mem_pools/tx_pool/index.d.ts +1 -2
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +6 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +8 -4
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- 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 +25 -20
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +13 -11
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +7 -10
- package/dest/msg_validators/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.js +73 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +157 -0
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- 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/factory.d.ts +2 -2
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +1 -1
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +8 -14
- package/dest/msg_validators/tx_validator/index.d.ts +2 -1
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.js +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/size_validator.d.ts +6 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +20 -0
- package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
- package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/services/dummy_service.d.ts +6 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +3 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +7 -6
- package/dest/services/libp2p/instrumentation.d.ts +1 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +20 -73
- package/dest/services/libp2p/libp2p_service.d.ts +30 -13
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +704 -150
- package/dest/services/peer-manager/metrics.d.ts +6 -1
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +18 -21
- package/dest/services/peer-manager/peer_manager.d.ts +2 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +4 -12
- package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +2 -5
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/constants.d.ts +12 -0
- package/dest/services/reqresp/constants.d.ts.map +1 -0
- package/dest/services/reqresp/constants.js +7 -0
- package/dest/services/reqresp/interface.d.ts +4 -4
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +3 -3
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +5 -21
- package/dest/services/reqresp/protocols/auth.d.ts +2 -2
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/auth.js +2 -2
- package/dest/services/reqresp/protocols/block.js +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +7 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +2 -2
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +1 -1
- package/dest/services/reqresp/protocols/status.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +4 -1
- package/dest/services/reqresp/protocols/tx.d.ts +2 -3
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +402 -24
- package/dest/services/service.d.ts +16 -3
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/instrumentation.js +4 -14
- package/dest/services/tx_collection/slow_tx_collection.d.ts +3 -3
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.d.ts +4 -4
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +1 -1
- package/dest/services/tx_provider.d.ts +2 -1
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +11 -2
- package/dest/services/tx_provider_instrumentation.d.ts +5 -2
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +13 -13
- package/dest/test-helpers/mock-tx-helpers.js +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +29 -16
- package/dest/testbench/worker_client_manager.d.ts +1 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +6 -1
- package/package.json +16 -16
- package/src/client/factory.ts +5 -10
- package/src/client/interface.ts +19 -4
- package/src/client/p2p_client.ts +92 -147
- package/src/config.ts +12 -18
- package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -289
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +163 -141
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
- package/src/mem_pools/attestation_pool/mocks.ts +21 -15
- package/src/mem_pools/instrumentation.ts +38 -14
- package/src/mem_pools/interface.ts +2 -4
- package/src/mem_pools/tx_pool/README.md +270 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +363 -368
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +131 -0
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +207 -0
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +159 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +91 -0
- package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/mem_pools/tx_pool/index.ts +0 -1
- package/src/mem_pools/tx_pool/priority.ts +8 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +8 -3
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +18 -13
- package/src/msg_validators/attestation_validator/attestation_validator.ts +17 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +9 -12
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +85 -0
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +191 -0
- package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
- package/src/msg_validators/tx_validator/block_header_validator.ts +1 -1
- package/src/msg_validators/tx_validator/data_validator.ts +12 -4
- package/src/msg_validators/tx_validator/factory.ts +1 -1
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +8 -25
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +13 -5
- package/src/msg_validators/tx_validator/size_validator.ts +18 -0
- package/src/msg_validators/tx_validator/test_utils.ts +1 -1
- package/src/msg_validators/tx_validator/timestamp_validator.ts +3 -1
- package/src/services/dummy_service.ts +6 -0
- package/src/services/encoding.ts +6 -5
- package/src/services/libp2p/instrumentation.ts +19 -73
- package/src/services/libp2p/libp2p_service.ts +338 -117
- package/src/services/peer-manager/metrics.ts +22 -21
- package/src/services/peer-manager/peer_manager.ts +5 -4
- package/src/services/peer-manager/peer_scoring.ts +1 -5
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +3 -1
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/interface.ts +3 -3
- package/src/services/reqresp/metrics.ts +7 -23
- package/src/services/reqresp/protocols/auth.ts +2 -2
- package/src/services/reqresp/protocols/block.ts +1 -1
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +9 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +1 -1
- package/src/services/reqresp/protocols/status.ts +7 -4
- package/src/services/reqresp/protocols/tx.ts +1 -2
- package/src/services/service.ts +19 -4
- package/src/services/tx_collection/config.ts +1 -1
- package/src/services/tx_collection/instrumentation.ts +4 -21
- package/src/services/tx_collection/slow_tx_collection.ts +2 -2
- package/src/services/tx_collection/tx_collection.ts +4 -4
- package/src/services/tx_provider.ts +17 -2
- package/src/services/tx_provider_instrumentation.ts +18 -14
- package/src/test-helpers/mock-pubsub.ts +1 -1
- package/src/test-helpers/mock-tx-helpers.ts +1 -1
- package/src/test-helpers/reqresp-nodes.ts +1 -1
- package/src/testbench/p2p_client_testbench_worker.ts +41 -21
- package/src/testbench/worker_client_manager.ts +6 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -81
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -239
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -285
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
-
import { type
|
|
2
|
+
import { type CheckpointAttestation, PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
3
3
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
4
4
|
import type { AttestationPool } from '../../mem_pools/attestation_pool/attestation_pool.js';
|
|
5
|
-
import {
|
|
5
|
+
import { CheckpointAttestationValidator } from './attestation_validator.js';
|
|
6
6
|
/**
|
|
7
7
|
* FishermanAttestationValidator extends the base AttestationValidator to add
|
|
8
8
|
* additional validation for fisherman nodes: verifying that attestations sign
|
|
@@ -11,10 +11,10 @@ import { AttestationValidator } from './attestation_validator.js';
|
|
|
11
11
|
* handled by LibP2PService based on the fishermanMode config to ensure a better
|
|
12
12
|
* view of the network.
|
|
13
13
|
*/
|
|
14
|
-
export declare class FishermanAttestationValidator extends
|
|
14
|
+
export declare class FishermanAttestationValidator extends CheckpointAttestationValidator {
|
|
15
15
|
private attestationPool;
|
|
16
16
|
private invalidAttestationCounter;
|
|
17
17
|
constructor(epochCache: EpochCacheInterface, attestationPool: AttestationPool, telemetryClient: TelemetryClient);
|
|
18
|
-
validate(message:
|
|
18
|
+
validate(message: CheckpointAttestation): Promise<PeerErrorSeverity | undefined>;
|
|
19
19
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzaGVybWFuX2F0dGVzdGF0aW9uX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9maXNoZXJtYW5fYXR0ZXN0YXRpb25fdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRixPQUFPLEVBQXVCLEtBQUssZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEYsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUU7Ozs7Ozs7R0FPRztBQUNILHFCQUFhLDZCQUE4QixTQUFRLDhCQUE4QjtJQUs3RSxPQUFPLENBQUMsZUFBZTtJQUp6QixPQUFPLENBQUMseUJBQXlCLENBQUM7SUFFbEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQ3ZCLGVBQWUsRUFBRSxlQUFlLEVBQ3hDLGVBQWUsRUFBRSxlQUFlLEVBT2pDO0lBRWMsUUFBUSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBd0Q5RjtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fisherman_attestation_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/attestation_validator/fisherman_attestation_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"fisherman_attestation_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/attestation_validator/fisherman_attestation_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAE5E;;;;;;;GAOG;AACH,qBAAa,6BAA8B,SAAQ,8BAA8B;IAK7E,OAAO,CAAC,eAAe;IAJzB,OAAO,CAAC,yBAAyB,CAAC;IAElC,YACE,UAAU,EAAE,mBAAmB,EACvB,eAAe,EAAE,eAAe,EACxC,eAAe,EAAE,eAAe,EAOjC;IAEc,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAwD9F;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
2
|
-
import { Attributes, Metrics
|
|
3
|
-
import {
|
|
2
|
+
import { Attributes, Metrics } from '@aztec/telemetry-client';
|
|
3
|
+
import { CheckpointAttestationValidator } from './attestation_validator.js';
|
|
4
4
|
/**
|
|
5
5
|
* FishermanAttestationValidator extends the base AttestationValidator to add
|
|
6
6
|
* additional validation for fisherman nodes: verifying that attestations sign
|
|
@@ -8,17 +8,14 @@ import { AttestationValidator } from './attestation_validator.js';
|
|
|
8
8
|
* Invalid attestations are rejected (not propagated), but peer penalization is
|
|
9
9
|
* handled by LibP2PService based on the fishermanMode config to ensure a better
|
|
10
10
|
* view of the network.
|
|
11
|
-
*/ export class FishermanAttestationValidator extends
|
|
11
|
+
*/ export class FishermanAttestationValidator extends CheckpointAttestationValidator {
|
|
12
12
|
attestationPool;
|
|
13
13
|
invalidAttestationCounter;
|
|
14
14
|
constructor(epochCache, attestationPool, telemetryClient){
|
|
15
15
|
super(epochCache), this.attestationPool = attestationPool;
|
|
16
16
|
this.logger = this.logger.createChild('[FISHERMAN]');
|
|
17
17
|
const meter = telemetryClient.getMeter('FishermanAttestationValidator');
|
|
18
|
-
this.invalidAttestationCounter = meter.createUpDownCounter(Metrics.VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT
|
|
19
|
-
description: 'The number of invalid attestations received',
|
|
20
|
-
valueType: ValueType.INT
|
|
21
|
-
});
|
|
18
|
+
this.invalidAttestationCounter = meter.createUpDownCounter(Metrics.VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT);
|
|
22
19
|
}
|
|
23
20
|
async validate(message) {
|
|
24
21
|
// First run the standard validation
|
|
@@ -38,17 +35,17 @@ import { AttestationValidator } from './attestation_validator.js';
|
|
|
38
35
|
return undefined;
|
|
39
36
|
}
|
|
40
37
|
const proposalId = message.archive.toString();
|
|
41
|
-
const proposal = await this.attestationPool.
|
|
38
|
+
const proposal = await this.attestationPool.getCheckpointProposal(proposalId);
|
|
42
39
|
if (proposal) {
|
|
43
40
|
// Compare the attestation payload with the proposal payload
|
|
44
|
-
if (!message.payload.equals(proposal
|
|
41
|
+
if (!message.payload.equals(proposal)) {
|
|
45
42
|
this.logger.error(`Attestation payload mismatch for slot ${slotNumberBigInt}! ` + `Attester ${attester.toString()} signed different data than the proposal.`, {
|
|
46
43
|
slot: slotNumberBigInt.toString(),
|
|
47
44
|
attester: attester.toString(),
|
|
48
45
|
proposer: proposer.toString(),
|
|
49
46
|
proposalArchive: proposal.archive.toString(),
|
|
50
47
|
attestationArchive: message.archive.toString(),
|
|
51
|
-
proposalHeader: proposal.
|
|
48
|
+
proposalHeader: proposal.checkpointHeader.hash().toString(),
|
|
52
49
|
attestationHeader: message.payload.header.hash().toString()
|
|
53
50
|
});
|
|
54
51
|
// Track invalid attestation metric
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from './tx_validator/index.js';
|
|
2
|
-
export * from './
|
|
2
|
+
export * from './proposal_validator/index.js';
|
|
3
3
|
export * from './attestation_validator/index.js';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxrQ0FBa0MsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/msg_validators/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/msg_validators/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import type { BlockProposal, P2PValidator } from '@aztec/stdlib/p2p';
|
|
3
|
+
import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
|
|
4
|
+
export declare class BlockProposalValidator extends ProposalValidator<BlockProposal> implements P2PValidator<BlockProposal> {
|
|
5
|
+
constructor(epochCache: EpochCacheInterface, opts: {
|
|
6
|
+
txsPermitted: boolean;
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixxQkFBYSxzQkFBdUIsU0FBUSxpQkFBaUIsQ0FBQyxhQUFhLENBQUUsWUFBVyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ2pILFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUE7S0FBRSxFQUUzRTtDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,qBAAa,sBAAuB,SAAQ,iBAAiB,CAAC,aAAa,CAAE,YAAW,YAAY,CAAC,aAAa,CAAC;IACjH,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAE3E;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import type { CheckpointProposal, P2PValidator } from '@aztec/stdlib/p2p';
|
|
3
|
+
import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
|
|
4
|
+
export declare class CheckpointProposalValidator extends ProposalValidator<CheckpointProposal> implements P2PValidator<CheckpointProposal> {
|
|
5
|
+
constructor(epochCache: EpochCacheInterface, opts: {
|
|
6
|
+
txsPermitted: boolean;
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixxQkFBYSwyQkFDWCxTQUFRLGlCQUFpQixDQUFDLGtCQUFrQixDQUM1QyxZQUFXLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztJQUUzQyxZQUFZLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7UUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFBO0tBQUUsRUFFM0U7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,qBAAa,2BACX,SAAQ,iBAAiB,CAAC,kBAAkB,CAC5C,YAAW,YAAY,CAAC,kBAAkB,CAAC;IAE3C,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAE3E;CACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './block_proposal_validator.js';
|
|
2
|
+
export * from './checkpoint_proposal_validator.js';
|
|
3
|
+
export * from './proposal_validator.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMseUJBQXlCLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
3
|
+
import { BlockProposal, CheckpointProposal, PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
4
|
+
export declare abstract class ProposalValidator<TProposal extends BlockProposal | CheckpointProposal> {
|
|
5
|
+
protected epochCache: EpochCacheInterface;
|
|
6
|
+
protected logger: Logger;
|
|
7
|
+
protected txsPermitted: boolean;
|
|
8
|
+
constructor(epochCache: EpochCacheInterface, opts: {
|
|
9
|
+
txsPermitted: boolean;
|
|
10
|
+
}, loggerName: string);
|
|
11
|
+
validate(proposal: TProposal): Promise<PeerErrorSeverity | undefined>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekYsOEJBQXNCLGlCQUFpQixDQUFDLFNBQVMsU0FBUyxhQUFhLEdBQUcsa0JBQWtCO0lBQzFGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDMUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDekIsU0FBUyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUM7SUFFaEMsWUFBWSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQTtLQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFJL0Y7SUFFWSxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBbUVqRjtDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEzF,8BAAsB,iBAAiB,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB;IAC1F,SAAS,CAAC,UAAU,EAAE,mBAAmB,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;IAEhC,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAAE,UAAU,EAAE,MAAM,EAI/F;IAEY,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAmEjF;CACF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { NoCommitteeError } from '@aztec/ethereum/contracts';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
4
|
+
export class ProposalValidator {
|
|
5
|
+
epochCache;
|
|
6
|
+
logger;
|
|
7
|
+
txsPermitted;
|
|
8
|
+
constructor(epochCache, opts, loggerName){
|
|
9
|
+
this.epochCache = epochCache;
|
|
10
|
+
this.txsPermitted = opts.txsPermitted;
|
|
11
|
+
this.logger = createLogger(loggerName);
|
|
12
|
+
}
|
|
13
|
+
async validate(proposal) {
|
|
14
|
+
try {
|
|
15
|
+
// Slot check
|
|
16
|
+
const { currentSlot, nextSlot } = this.epochCache.getCurrentAndNextSlot();
|
|
17
|
+
const slotNumber = proposal.slotNumber;
|
|
18
|
+
if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
|
|
19
|
+
this.logger.debug(`Penalizing peer for invalid slot number ${slotNumber}`, {
|
|
20
|
+
currentSlot,
|
|
21
|
+
nextSlot
|
|
22
|
+
});
|
|
23
|
+
return PeerErrorSeverity.HighToleranceError;
|
|
24
|
+
}
|
|
25
|
+
// Signature validity
|
|
26
|
+
const proposer = proposal.getSender();
|
|
27
|
+
if (!proposer) {
|
|
28
|
+
this.logger.debug(`Penalizing peer for proposal with invalid signature`);
|
|
29
|
+
return PeerErrorSeverity.MidToleranceError;
|
|
30
|
+
}
|
|
31
|
+
// Transactions permitted check
|
|
32
|
+
const embeddedTxCount = proposal.txs?.length ?? 0;
|
|
33
|
+
if (!this.txsPermitted && (proposal.txHashes.length > 0 || embeddedTxCount > 0)) {
|
|
34
|
+
this.logger.debug(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when transactions are not permitted`);
|
|
35
|
+
return PeerErrorSeverity.MidToleranceError;
|
|
36
|
+
}
|
|
37
|
+
// Embedded txs must be listed in txHashes
|
|
38
|
+
const hashSet = new Set(proposal.txHashes.map((h)=>h.toString()));
|
|
39
|
+
const missingTxHashes = embeddedTxCount > 0 ? proposal.txs.filter((tx)=>!hashSet.has(tx.getTxHash().toString())).map((tx)=>tx.getTxHash().toString()) : [];
|
|
40
|
+
if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
|
|
41
|
+
this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
|
|
42
|
+
embeddedTxCount,
|
|
43
|
+
txHashesLength: proposal.txHashes.length,
|
|
44
|
+
missingTxHashes
|
|
45
|
+
});
|
|
46
|
+
return PeerErrorSeverity.MidToleranceError;
|
|
47
|
+
}
|
|
48
|
+
// Proposer check
|
|
49
|
+
const expectedProposer = await this.epochCache.getProposerAttesterAddressInSlot(slotNumber);
|
|
50
|
+
if (expectedProposer !== undefined && !proposer.equals(expectedProposer)) {
|
|
51
|
+
this.logger.debug(`Penalizing peer for invalid proposer for current slot ${slotNumber}`, {
|
|
52
|
+
expectedProposer,
|
|
53
|
+
proposer: proposer.toString()
|
|
54
|
+
});
|
|
55
|
+
return PeerErrorSeverity.MidToleranceError;
|
|
56
|
+
}
|
|
57
|
+
// Validate tx hashes for all txs embedded in the proposal
|
|
58
|
+
if (!(await Promise.all(proposal.txs?.map((tx)=>tx.validateTxHash()) ?? [])).every((v)=>v)) {
|
|
59
|
+
this.logger.warn(`Penalizing peer for invalid tx hashes in proposal`, {
|
|
60
|
+
proposer,
|
|
61
|
+
slotNumber
|
|
62
|
+
});
|
|
63
|
+
return PeerErrorSeverity.LowToleranceError;
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
} catch (e) {
|
|
67
|
+
if (e instanceof NoCommitteeError) {
|
|
68
|
+
return PeerErrorSeverity.LowToleranceError;
|
|
69
|
+
}
|
|
70
|
+
throw e;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import type { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
3
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
|
+
import { type BlockProposal, type CheckpointProposal, PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
5
|
+
import type { TxHash } from '@aztec/stdlib/tx';
|
|
6
|
+
import type { MockProxy } from 'jest-mock-extended';
|
|
7
|
+
export interface ProposalValidatorTestParams<TProposal extends BlockProposal | CheckpointProposal> {
|
|
8
|
+
validatorFactory: (epochCache: EpochCacheInterface, opts: {
|
|
9
|
+
txsPermitted: boolean;
|
|
10
|
+
}) => {
|
|
11
|
+
validate: (proposal: TProposal) => Promise<PeerErrorSeverity | undefined>;
|
|
12
|
+
};
|
|
13
|
+
makeProposal: (options?: any) => Promise<TProposal>;
|
|
14
|
+
makeHeader: (epochNumber: number | bigint, slotNumber: number | bigint, blockNumber: number | bigint) => any;
|
|
15
|
+
getSigner: () => Secp256k1Signer;
|
|
16
|
+
getAddress: (signer?: Secp256k1Signer) => EthAddress;
|
|
17
|
+
getSlot: (slot: number | bigint) => any;
|
|
18
|
+
getTxHashes: (n: number) => TxHash[];
|
|
19
|
+
getTxs: () => any[];
|
|
20
|
+
epochCacheMock: () => MockProxy<EpochCacheInterface>;
|
|
21
|
+
}
|
|
22
|
+
export declare function sharedProposalValidatorTests<TProposal extends BlockProposal | CheckpointProposal>(params: ProposalValidatorTestParams<TProposal>): void;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yX3Rlc3Rfc3VpdGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvcHJvcG9zYWxfdmFsaWRhdG9yX3Rlc3Rfc3VpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25HLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELE1BQU0sV0FBVywyQkFBMkIsQ0FBQyxTQUFTLFNBQVMsYUFBYSxHQUFHLGtCQUFrQjtJQUMvRixnQkFBZ0IsRUFBRSxDQUNoQixVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUE7S0FBRSxLQUM1QjtRQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEtBQUssT0FBTyxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxDQUFBO0tBQUUsQ0FBQztJQUNuRixZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELFVBQVUsRUFBRSxDQUFDLFdBQVcsRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEdBQUcsTUFBTSxLQUFLLEdBQUcsQ0FBQztJQUM3RyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7SUFDakMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsZUFBZSxLQUFLLFVBQVUsQ0FBQztJQUNyRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sS0FBSyxHQUFHLENBQUM7SUFDeEMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUNyQyxNQUFNLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNwQixjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztDQUN0RDtBQUVELHdCQUFnQiw0QkFBNEIsQ0FBQyxTQUFTLFNBQVMsYUFBYSxHQUFHLGtCQUFrQixFQUMvRixNQUFNLEVBQUUsMkJBQTJCLENBQUMsU0FBUyxDQUFDLFFBc0svQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposal_validator_test_suite.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator_test_suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,2BAA2B,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB;IAC/F,gBAAgB,EAAE,CAChB,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,KAC5B;QAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAA;KAAE,CAAC;IACnF,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC;IAC7G,SAAS,EAAE,MAAM,eAAe,CAAC;IACjC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,UAAU,CAAC;IACrD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACrC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAC;CACtD;AAED,wBAAgB,4BAA4B,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB,EAC/F,MAAM,EAAE,2BAA2B,CAAC,SAAS,CAAC,QAsK/C"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
2
|
+
export function sharedProposalValidatorTests(params) {
|
|
3
|
+
const { validatorFactory, makeProposal, makeHeader, getSigner, getAddress, getSlot, getTxHashes, epochCacheMock } = params;
|
|
4
|
+
describe('shared proposal validation logic', ()=>{
|
|
5
|
+
let epochCache;
|
|
6
|
+
let validator;
|
|
7
|
+
const currentSlot = getSlot(100);
|
|
8
|
+
const nextSlot = getSlot(101);
|
|
9
|
+
function mockGetProposer(currentProposer, nextProposer) {
|
|
10
|
+
epochCache.getProposerAttesterAddressInSlot.mockImplementation((slot)=>{
|
|
11
|
+
if (slot === currentSlot) {
|
|
12
|
+
return Promise.resolve(currentProposer);
|
|
13
|
+
}
|
|
14
|
+
if (slot === nextSlot) {
|
|
15
|
+
return Promise.resolve(nextProposer);
|
|
16
|
+
}
|
|
17
|
+
throw new Error('Unexpected argument');
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
beforeEach(()=>{
|
|
21
|
+
epochCache = epochCacheMock();
|
|
22
|
+
validator = validatorFactory(epochCache, {
|
|
23
|
+
txsPermitted: true
|
|
24
|
+
});
|
|
25
|
+
epochCache.getCurrentAndNextSlot.mockReturnValue({
|
|
26
|
+
currentSlot: currentSlot,
|
|
27
|
+
nextSlot: nextSlot
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
it('returns high tolerance error if slot number is not current or next slot', async ()=>{
|
|
31
|
+
const header = makeHeader(1, 99, 99);
|
|
32
|
+
const mockProposal = await makeProposal({
|
|
33
|
+
blockHeader: header,
|
|
34
|
+
lastBlockHeader: header
|
|
35
|
+
});
|
|
36
|
+
epochCache.getProposerAttesterAddressInSlot.mockResolvedValue(getAddress());
|
|
37
|
+
const result = await validator.validate(mockProposal);
|
|
38
|
+
expect(result).toBe(PeerErrorSeverity.HighToleranceError);
|
|
39
|
+
// Should not try to resolve proposers if base validation fails
|
|
40
|
+
expect(epochCache.getProposerAttesterAddressInSlot).not.toHaveBeenCalled();
|
|
41
|
+
});
|
|
42
|
+
it('returns mid tolerance error if proposer is not current proposer for current slot', async ()=>{
|
|
43
|
+
const currentProposer = getSigner();
|
|
44
|
+
const nextProposer = getSigner();
|
|
45
|
+
const invalidProposer = getSigner();
|
|
46
|
+
const header = makeHeader(1, 100, 100);
|
|
47
|
+
const mockProposal = await makeProposal({
|
|
48
|
+
blockHeader: header,
|
|
49
|
+
lastBlockHeader: header,
|
|
50
|
+
signer: invalidProposer
|
|
51
|
+
});
|
|
52
|
+
mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
|
|
53
|
+
const result = await validator.validate(mockProposal);
|
|
54
|
+
expect(result).toBe(PeerErrorSeverity.MidToleranceError);
|
|
55
|
+
});
|
|
56
|
+
it('returns mid tolerance error if proposer is not next proposer for next slot', async ()=>{
|
|
57
|
+
const currentProposer = getSigner();
|
|
58
|
+
const nextProposer = getSigner();
|
|
59
|
+
const invalidProposer = getSigner();
|
|
60
|
+
const header = makeHeader(1, 101, 101);
|
|
61
|
+
const mockProposal = await makeProposal({
|
|
62
|
+
blockHeader: header,
|
|
63
|
+
lastBlockHeader: header,
|
|
64
|
+
signer: invalidProposer
|
|
65
|
+
});
|
|
66
|
+
mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
|
|
67
|
+
const result = await validator.validate(mockProposal);
|
|
68
|
+
expect(result).toBe(PeerErrorSeverity.MidToleranceError);
|
|
69
|
+
});
|
|
70
|
+
it('returns mid tolerance error if proposer is current proposer but proposal is for next slot', async ()=>{
|
|
71
|
+
const currentProposer = getSigner();
|
|
72
|
+
const nextProposer = getSigner();
|
|
73
|
+
const header = makeHeader(1, 101, 101);
|
|
74
|
+
const mockProposal = await makeProposal({
|
|
75
|
+
blockHeader: header,
|
|
76
|
+
lastBlockHeader: header,
|
|
77
|
+
signer: currentProposer
|
|
78
|
+
});
|
|
79
|
+
mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
|
|
80
|
+
const result = await validator.validate(mockProposal);
|
|
81
|
+
expect(result).toBe(PeerErrorSeverity.MidToleranceError);
|
|
82
|
+
});
|
|
83
|
+
it('returns undefined if proposal is valid for current slot and proposer', async ()=>{
|
|
84
|
+
const currentProposer = getSigner();
|
|
85
|
+
const nextProposer = getSigner();
|
|
86
|
+
const header = makeHeader(1, 100, 100);
|
|
87
|
+
const mockProposal = await makeProposal({
|
|
88
|
+
blockHeader: header,
|
|
89
|
+
lastBlockHeader: header,
|
|
90
|
+
signer: currentProposer
|
|
91
|
+
});
|
|
92
|
+
mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
|
|
93
|
+
const result = await validator.validate(mockProposal);
|
|
94
|
+
expect(result).toBeUndefined();
|
|
95
|
+
});
|
|
96
|
+
it('returns undefined if proposal is valid for next slot and proposer', async ()=>{
|
|
97
|
+
const currentProposer = getSigner();
|
|
98
|
+
const nextProposer = getSigner();
|
|
99
|
+
const header = makeHeader(1, 101, 101);
|
|
100
|
+
const mockProposal = await makeProposal({
|
|
101
|
+
blockHeader: header,
|
|
102
|
+
lastBlockHeader: header,
|
|
103
|
+
signer: nextProposer
|
|
104
|
+
});
|
|
105
|
+
mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
|
|
106
|
+
const result = await validator.validate(mockProposal);
|
|
107
|
+
expect(result).toBeUndefined();
|
|
108
|
+
});
|
|
109
|
+
describe('transaction permission validation', ()=>{
|
|
110
|
+
it('returns mid tolerance error if txs not permitted and proposal contains txHashes', async ()=>{
|
|
111
|
+
const currentProposer = getSigner();
|
|
112
|
+
const validatorWithTxsDisabled = validatorFactory(epochCache, {
|
|
113
|
+
txsPermitted: false
|
|
114
|
+
});
|
|
115
|
+
const header = makeHeader(1, 100, 100);
|
|
116
|
+
const mockProposal = await makeProposal({
|
|
117
|
+
blockHeader: header,
|
|
118
|
+
lastBlockHeader: header,
|
|
119
|
+
signer: currentProposer,
|
|
120
|
+
txHashes: getTxHashes(2)
|
|
121
|
+
});
|
|
122
|
+
mockGetProposer(getAddress(currentProposer), getAddress());
|
|
123
|
+
const result = await validatorWithTxsDisabled.validate(mockProposal);
|
|
124
|
+
expect(result).toBe(PeerErrorSeverity.MidToleranceError);
|
|
125
|
+
});
|
|
126
|
+
it('returns undefined if txs not permitted but proposal has no txHashes', async ()=>{
|
|
127
|
+
const currentProposer = getSigner();
|
|
128
|
+
const validatorWithTxsDisabled = validatorFactory(epochCache, {
|
|
129
|
+
txsPermitted: false
|
|
130
|
+
});
|
|
131
|
+
const header = makeHeader(1, 100, 100);
|
|
132
|
+
const mockProposal = await makeProposal({
|
|
133
|
+
blockHeader: header,
|
|
134
|
+
lastBlockHeader: header,
|
|
135
|
+
signer: currentProposer,
|
|
136
|
+
txHashes: getTxHashes(0)
|
|
137
|
+
});
|
|
138
|
+
mockGetProposer(getAddress(currentProposer), getAddress());
|
|
139
|
+
const result = await validatorWithTxsDisabled.validate(mockProposal);
|
|
140
|
+
expect(result).toBeUndefined();
|
|
141
|
+
});
|
|
142
|
+
it('returns undefined if txs permitted and proposal contains txHashes', async ()=>{
|
|
143
|
+
const currentProposer = getSigner();
|
|
144
|
+
const header = makeHeader(1, 100, 100);
|
|
145
|
+
const mockProposal = await makeProposal({
|
|
146
|
+
blockHeader: header,
|
|
147
|
+
lastBlockHeader: header,
|
|
148
|
+
signer: currentProposer,
|
|
149
|
+
txHashes: getTxHashes(2)
|
|
150
|
+
});
|
|
151
|
+
mockGetProposer(getAddress(currentProposer), getAddress());
|
|
152
|
+
const result = await validator.validate(mockProposal);
|
|
153
|
+
expect(result).toBeUndefined();
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import type { ArchiveSource } from '@aztec/p2p';
|
|
3
3
|
import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
|
|
4
4
|
/**
|
|
@@ -11,4 +11,4 @@ export declare class ArchiveCache implements ArchiveSource {
|
|
|
11
11
|
constructor(db: MerkleTreeReadOperations);
|
|
12
12
|
getArchiveIndices(archives: Fr[]): Promise<(bigint | undefined)[]>;
|
|
13
13
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZV9jYWNoZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hcmNoaXZlX2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR2hGOzs7R0FHRztBQUNILHFCQUFhLFlBQWEsWUFBVyxhQUFhO0lBR3BDLE9BQU8sQ0FBQyxFQUFFO0lBRnRCLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTlCLFlBQW9CLEVBQUUsRUFBRSx3QkFBd0IsRUFFL0M7SUFFWSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FVOUU7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive_cache.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/archive_cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"archive_cache.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/archive_cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAGhF;;;GAGG;AACH,qBAAa,YAAa,YAAW,aAAa;IAGpC,OAAO,CAAC,EAAE;IAFtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,YAAoB,EAAE,EAAE,wBAAwB,EAE/C;IAEY,iBAAiB,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAU9E;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { type AnyTx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
3
3
|
export interface ArchiveSource {
|
|
4
4
|
getArchiveIndices: (archives: Fr[]) => Promise<(bigint | undefined)[]>;
|
|
@@ -8,4 +8,4 @@ export declare class BlockHeaderTxValidator<T extends AnyTx> implements TxValida
|
|
|
8
8
|
constructor(archiveSource: ArchiveSource);
|
|
9
9
|
validateTx(tx: T): Promise<TxValidationResult>;
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfaGVhZGVyX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9ibG9ja19oZWFkZXJfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpELE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBeUIsS0FBSyxrQkFBa0IsRUFBRSxLQUFLLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhILE1BQU0sV0FBVyxhQUFhO0lBQzVCLGlCQUFpQixFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDeEU7QUFFRCxxQkFBYSxzQkFBc0IsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFFLFlBQVcsV0FBVyxDQUFDLENBQUMsQ0FBQzs7SUFJNUUsWUFBWSxhQUFhLEVBQUUsYUFBYSxFQUV2QztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQU9uRDtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_header_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/block_header_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"block_header_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/block_header_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,KAAK,KAAK,EAAyB,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhH,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;CACxE;AAED,qBAAa,sBAAsB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAI5E,YAAY,aAAa,EAAE,aAAa,EAEvC;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAOnD;CACF"}
|
|
@@ -3,4 +3,4 @@ export declare class DataTxValidator implements TxValidator<Tx> {
|
|
|
3
3
|
#private;
|
|
4
4
|
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
5
5
|
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQVNMLEVBQUUsRUFDRixLQUFLLGtCQUFrQixFQUN2QixLQUFLLFdBQVcsRUFDakIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixxQkFBYSxlQUFnQixZQUFXLFdBQVcsQ0FBQyxFQUFFLENBQUM7O0lBRy9DLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQU1wRDtDQW1HRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,EAAE,EACF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAG/C,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAMpD;
|
|
1
|
+
{"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,EAAE,EACF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAG/C,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAMpD;CAmGF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
4
4
|
import type { GasFees } from '@aztec/stdlib/gas';
|
|
5
5
|
import type { AllowedElement, ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
@@ -13,4 +13,4 @@ export interface MessageValidator {
|
|
|
13
13
|
severity: PeerErrorSeverity;
|
|
14
14
|
}
|
|
15
15
|
export declare function createTxMessageValidators(timestamp: UInt64, blockNumber: BlockNumber, worldStateSynchronizer: WorldStateSynchronizer, gasFees: GasFees, l1ChainId: number, rollupVersion: number, protocolContractsHash: Fr, contractDataSource: ContractDataSource, proofVerifier: ClientProtocolCircuitVerifier, txsPermitted: boolean, allowedInSetup?: AllowedElement[]): Record<string, MessageValidator>[];
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHcEQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssRUFDVixjQUFjLEVBQ2QsNkJBQTZCLEVBQzdCLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBYWxELE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0IsU0FBUyxFQUFFO1FBQ1QsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDakQsQ0FBQztJQUNGLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQztDQUM3QjtBQUVELHdCQUFnQix5QkFBeUIsQ0FDdkMsU0FBUyxFQUFFLE1BQU0sRUFDakIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLGFBQWEsRUFBRSxNQUFNLEVBQ3JCLHFCQUFxQixFQUFFLEVBQUUsRUFDekIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQ3RDLGFBQWEsRUFBRSw2QkFBNkIsRUFDNUMsWUFBWSxFQUFFLE9BQU8sRUFDckIsY0FBYyxHQUFFLGNBQWMsRUFBTyxHQUNwQyxNQUFNLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0ErRHBDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EACV,cAAc,EACd,6BAA6B,EAC7B,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,EAAE,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAalD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE;QACT,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;KACjD,CAAC;IACF,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,EAAE,EACzB,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,6BAA6B,EAC5C,YAAY,EAAE,OAAO,EACrB,cAAc,GAAE,cAAc,EAAO,GACpC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CA+DpC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
3
3
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
4
4
|
import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
2
|
+
import { type Tx } from '@aztec/stdlib/tx';
|
|
3
|
+
export type FeePayerBalanceDelta = {
|
|
4
|
+
feeLimit: bigint;
|
|
5
|
+
claimAmount: bigint;
|
|
6
|
+
};
|
|
7
|
+
export declare function getTxFeeLimit(tx: Tx): bigint;
|
|
8
|
+
export declare function getFeePayerClaimAmount(tx: Tx, feeJuiceAddress: AztecAddress): Promise<bigint>;
|
|
9
|
+
export declare function getFeePayerBalanceDelta(tx: Tx, feeJuiceAddress: AztecAddress): Promise<FeePayerBalanceDelta>;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlX3BheWVyX2JhbGFuY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZmVlX3BheWVyX2JhbGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFvQixNQUFNLGtCQUFrQixDQUFDO0FBRTdELE1BQU0sTUFBTSxvQkFBb0IsR0FBRztJQUNqQyxRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLFdBQVcsRUFBRSxNQUFNLENBQUM7Q0FDckIsQ0FBQztBQUlGLHdCQUFnQixhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBRTVDO0FBRUQsd0JBQXNCLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBZ0JuRztBQUVELHdCQUFzQix1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBS2xIIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee_payer_balance.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/fee_payer_balance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,EAAoB,MAAM,kBAAkB,CAAC;AAE7D,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF,wBAAgB,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAE5C;AAED,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBnG;AAED,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAKlH"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
|
|
2
|
+
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
3
|
+
import { TxExecutionPhase } from '@aztec/stdlib/tx';
|
|
4
|
+
const increasePublicBalanceSelectorPromise = FunctionSelector.fromSignature('_increase_public_balance((Field),u128)');
|
|
5
|
+
export function getTxFeeLimit(tx) {
|
|
6
|
+
return tx.data.constants.txContext.gasSettings.getFeeLimit().toBigInt();
|
|
7
|
+
}
|
|
8
|
+
export async function getFeePayerClaimAmount(tx, feeJuiceAddress) {
|
|
9
|
+
const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
|
|
10
|
+
const increasePublicBalanceSelector = await increasePublicBalanceSelectorPromise;
|
|
11
|
+
const feePayer = tx.data.feePayer;
|
|
12
|
+
const claimFunctionCall = setupFns.find((fn)=>fn.request.contractAddress.equals(feeJuiceAddress) && fn.request.msgSender.equals(feeJuiceAddress) && fn.calldata.length > 2 && fn.functionSelector.equals(increasePublicBalanceSelector) && fn.args[0].equals(feePayer.toField()) && !fn.request.isStaticCall);
|
|
13
|
+
return claimFunctionCall ? claimFunctionCall.args[1].toBigInt() : 0n;
|
|
14
|
+
}
|
|
15
|
+
export async function getFeePayerBalanceDelta(tx, feeJuiceAddress) {
|
|
16
|
+
return {
|
|
17
|
+
feeLimit: getTxFeeLimit(tx),
|
|
18
|
+
claimAmount: await getFeePayerClaimAmount(tx, feeJuiceAddress)
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -8,4 +8,4 @@ export declare class GasTxValidator implements TxValidator<Tx> {
|
|
|
8
8
|
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
9
9
|
validateTxFee(tx: Tx): Promise<TxValidationResult>;
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9nYXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBTyxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFLTCxLQUFLLEVBQUUsRUFDUCxLQUFLLGtCQUFrQixFQUN2QixLQUFLLFdBQVcsRUFDakIsTUFBTSxrQkFBa0IsQ0FBQztBQUkxQixxQkFBYSxjQUFlLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNcEQsWUFBWSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBSS9GO0lBRUssVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBU3BEO0lBbURZLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQXlCOUQ7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/gas_validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAO,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAKL,KAAK,EAAE,EACP,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAI1B,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;IAMpD,YAAY,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAI/F;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CASpD;IAmDY,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyB9D;CACF"}
|