@aztec/p2p 0.0.1-commit.1142ef1 → 0.0.1-commit.18ccd8f0
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/bootstrap/bootstrap.d.ts +4 -3
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +4 -4
- package/dest/client/factory.d.ts +1 -1
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +6 -5
- package/dest/client/p2p_client.js +1 -1
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
- package/dest/config.d.ts +8 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +4 -2
- 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 +20 -9
- package/dest/mem_pools/attestation_pool/mocks.d.ts +4 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +8 -5
- package/dest/mem_pools/instrumentation.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +2 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +15 -10
- 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 +91 -50
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +19 -5
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +59 -3
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +79 -5
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +47 -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 +122 -0
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +4 -4
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +2 -2
- package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -1
- 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/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +41 -10
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -6
- package/dest/msg_validators/clock_tolerance.d.ts +21 -0
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
- package/dest/msg_validators/clock_tolerance.js +37 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +3 -3
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +55 -31
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +3 -3
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +93 -64
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
- package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +4 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +8 -3
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +21 -11
- 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 +3 -2
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
- 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 +3 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
- package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/size_validator.js +23 -0
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
- package/dest/services/discv5/discV5_service.js +1 -1
- package/dest/services/dummy_service.d.ts +13 -1
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +39 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +2 -3
- 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 +19 -8
- package/dest/services/libp2p/libp2p_service.d.ts +13 -7
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +55 -46
- package/dest/services/peer-manager/metrics.d.ts +2 -2
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +20 -5
- 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 +8 -2
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
- package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
- package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
- 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 +3 -1
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.d.ts +6 -5
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +17 -5
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +14 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +15 -3
- 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 +33 -3
- 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 +2 -1
- package/dest/services/reqresp/reqresp.d.ts +6 -1
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +58 -22
- package/dest/services/service.d.ts +4 -1
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +4 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +9 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +16 -5
- package/dest/services/tx_collection/index.d.ts +2 -1
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -0
- 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 +9 -2
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
- 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 +8 -8
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +5 -5
- package/dest/services/tx_provider.d.ts +3 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.js +5 -5
- package/dest/test-helpers/index.d.ts +3 -1
- package/dest/test-helpers/index.d.ts.map +1 -1
- package/dest/test-helpers/index.js +2 -0
- package/dest/test-helpers/test_tx_provider.d.ts +40 -0
- package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
- package/dest/test-helpers/test_tx_provider.js +41 -0
- package/dest/test-helpers/testbench-utils.d.ts +158 -0
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
- package/dest/test-helpers/testbench-utils.js +297 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +212 -132
- package/dest/testbench/worker_client_manager.d.ts +51 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +226 -44
- package/package.json +16 -16
- package/src/bootstrap/bootstrap.ts +7 -4
- package/src/client/factory.ts +6 -10
- package/src/client/p2p_client.ts +6 -6
- package/src/client/test/tx_proposal_collector/README.md +227 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
- package/src/config.ts +8 -3
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +17 -9
- package/src/mem_pools/attestation_pool/mocks.ts +6 -4
- package/src/mem_pools/instrumentation.ts +2 -1
- package/src/mem_pools/tx_pool/README.md +28 -13
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
- package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
- package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
- package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
- package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
- package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -14
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -8
- package/src/msg_validators/clock_tolerance.ts +51 -0
- package/src/msg_validators/proposal_validator/proposal_validator.ts +31 -31
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +91 -67
- package/src/msg_validators/tx_validator/block_header_validator.ts +7 -4
- package/src/msg_validators/tx_validator/data_validator.ts +6 -2
- package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
- package/src/msg_validators/tx_validator/factory.ts +64 -23
- package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
- package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
- package/src/msg_validators/tx_validator/index.ts +1 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
- package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
- package/src/msg_validators/tx_validator/size_validator.ts +22 -0
- package/src/msg_validators/tx_validator/timestamp_validator.ts +6 -3
- package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
- package/src/services/discv5/discV5_service.ts +1 -1
- package/src/services/dummy_service.ts +45 -0
- package/src/services/encoding.ts +2 -3
- package/src/services/libp2p/instrumentation.ts +20 -7
- package/src/services/libp2p/libp2p_service.ts +92 -66
- package/src/services/peer-manager/metrics.ts +21 -4
- package/src/services/peer-manager/peer_scoring.ts +4 -1
- package/src/services/reqresp/batch-tx-requester/README.md +305 -0
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
- package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
- package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
- package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
- package/src/services/reqresp/constants.ts +14 -0
- package/src/services/reqresp/interface.ts +3 -0
- package/src/services/reqresp/metrics.ts +34 -9
- package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +16 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +46 -4
- package/src/services/reqresp/protocols/status.ts +5 -3
- package/src/services/reqresp/reqresp.ts +66 -19
- package/src/services/service.ts +4 -0
- package/src/services/tx_collection/config.ts +15 -1
- package/src/services/tx_collection/fast_tx_collection.ts +36 -13
- package/src/services/tx_collection/index.ts +5 -0
- package/src/services/tx_collection/instrumentation.ts +11 -2
- package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
- package/src/services/tx_collection/slow_tx_collection.ts +2 -2
- package/src/services/tx_collection/tx_collection.ts +8 -8
- package/src/services/tx_provider.ts +2 -2
- package/src/services/tx_provider_instrumentation.ts +11 -5
- package/src/test-helpers/index.ts +2 -0
- package/src/test-helpers/test_tx_provider.ts +64 -0
- package/src/test-helpers/testbench-utils.ts +374 -0
- package/src/testbench/p2p_client_testbench_worker.ts +321 -126
- package/src/testbench/worker_client_manager.ts +304 -47
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
- package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
|
@@ -4,26 +4,75 @@ export function sharedProposalValidatorTests(params) {
|
|
|
4
4
|
describe('shared proposal validation logic', ()=>{
|
|
5
5
|
let epochCache;
|
|
6
6
|
let validator;
|
|
7
|
+
const previousSlot = getSlot(99);
|
|
8
|
+
const currentSlot = getSlot(100);
|
|
9
|
+
const nextSlot = getSlot(101);
|
|
10
|
+
function mockGetProposer(currentProposer, nextProposer, previousProposer) {
|
|
11
|
+
epochCache.getProposerAttesterAddressInSlot.mockImplementation((slot)=>{
|
|
12
|
+
if (slot === currentSlot) {
|
|
13
|
+
return Promise.resolve(currentProposer);
|
|
14
|
+
}
|
|
15
|
+
if (slot === nextSlot) {
|
|
16
|
+
return Promise.resolve(nextProposer);
|
|
17
|
+
}
|
|
18
|
+
if (slot === previousSlot && previousProposer) {
|
|
19
|
+
return Promise.resolve(previousProposer);
|
|
20
|
+
}
|
|
21
|
+
throw new Error('Unexpected argument');
|
|
22
|
+
});
|
|
23
|
+
}
|
|
7
24
|
beforeEach(()=>{
|
|
8
25
|
epochCache = epochCacheMock();
|
|
9
26
|
validator = validatorFactory(epochCache, {
|
|
10
27
|
txsPermitted: true
|
|
11
28
|
});
|
|
29
|
+
epochCache.getCurrentAndNextSlot.mockReturnValue({
|
|
30
|
+
currentSlot: currentSlot,
|
|
31
|
+
nextSlot: nextSlot
|
|
32
|
+
});
|
|
12
33
|
});
|
|
13
|
-
it('returns high tolerance error if slot number is not current or next slot', async ()=>{
|
|
14
|
-
const header = makeHeader(1,
|
|
34
|
+
it('returns high tolerance error if slot number is not current or next slot (outside clock tolerance)', async ()=>{
|
|
35
|
+
const header = makeHeader(1, 99, 99);
|
|
15
36
|
const mockProposal = await makeProposal({
|
|
16
37
|
blockHeader: header,
|
|
17
38
|
lastBlockHeader: header
|
|
18
39
|
});
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
40
|
+
// Mock getEpochAndSlotNow to return time OUTSIDE clock tolerance (1000ms elapsed)
|
|
41
|
+
epochCache.getEpochAndSlotNow.mockReturnValue({
|
|
42
|
+
epoch: 1,
|
|
43
|
+
slot: currentSlot,
|
|
44
|
+
ts: 1000n,
|
|
45
|
+
nowMs: 1001000n
|
|
24
46
|
});
|
|
47
|
+
epochCache.getProposerAttesterAddressInSlot.mockResolvedValue(getAddress());
|
|
25
48
|
const result = await validator.validate(mockProposal);
|
|
26
|
-
expect(result).
|
|
49
|
+
expect(result).toEqual({
|
|
50
|
+
result: 'reject',
|
|
51
|
+
severity: PeerErrorSeverity.HighToleranceError
|
|
52
|
+
});
|
|
53
|
+
// Should not try to resolve proposers if base validation fails
|
|
54
|
+
expect(epochCache.getProposerAttesterAddressInSlot).not.toHaveBeenCalled();
|
|
55
|
+
});
|
|
56
|
+
it('returns ignore if previous slot proposal is within clock tolerance', async ()=>{
|
|
57
|
+
const previousProposer = getSigner();
|
|
58
|
+
const header = makeHeader(1, 99, 99);
|
|
59
|
+
const mockProposal = await makeProposal({
|
|
60
|
+
blockHeader: header,
|
|
61
|
+
lastBlockHeader: header,
|
|
62
|
+
signer: previousProposer
|
|
63
|
+
});
|
|
64
|
+
// Mock getEpochAndSlotNow to return time WITHIN clock tolerance (100ms elapsed)
|
|
65
|
+
epochCache.getEpochAndSlotNow.mockReturnValue({
|
|
66
|
+
epoch: 1,
|
|
67
|
+
slot: currentSlot,
|
|
68
|
+
ts: 1000n,
|
|
69
|
+
nowMs: 1000100n
|
|
70
|
+
});
|
|
71
|
+
mockGetProposer(getAddress(), getAddress(), getAddress(previousProposer));
|
|
72
|
+
const result = await validator.validate(mockProposal);
|
|
73
|
+
expect(result).toEqual({
|
|
74
|
+
result: 'ignore'
|
|
75
|
+
});
|
|
27
76
|
});
|
|
28
77
|
it('returns mid tolerance error if proposer is not current proposer for current slot', async ()=>{
|
|
29
78
|
const currentProposer = getSigner();
|
|
@@ -35,14 +84,12 @@ export function sharedProposalValidatorTests(params) {
|
|
|
35
84
|
lastBlockHeader: header,
|
|
36
85
|
signer: invalidProposer
|
|
37
86
|
});
|
|
38
|
-
|
|
39
|
-
currentSlot: getSlot(100),
|
|
40
|
-
nextSlot: getSlot(101),
|
|
41
|
-
currentProposer: getAddress(currentProposer),
|
|
42
|
-
nextProposer: getAddress(nextProposer)
|
|
43
|
-
});
|
|
87
|
+
mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
|
|
44
88
|
const result = await validator.validate(mockProposal);
|
|
45
|
-
expect(result).
|
|
89
|
+
expect(result).toEqual({
|
|
90
|
+
result: 'reject',
|
|
91
|
+
severity: PeerErrorSeverity.MidToleranceError
|
|
92
|
+
});
|
|
46
93
|
});
|
|
47
94
|
it('returns mid tolerance error if proposer is not next proposer for next slot', async ()=>{
|
|
48
95
|
const currentProposer = getSigner();
|
|
@@ -54,14 +101,12 @@ export function sharedProposalValidatorTests(params) {
|
|
|
54
101
|
lastBlockHeader: header,
|
|
55
102
|
signer: invalidProposer
|
|
56
103
|
});
|
|
57
|
-
|
|
58
|
-
currentSlot: getSlot(100),
|
|
59
|
-
nextSlot: getSlot(101),
|
|
60
|
-
currentProposer: getAddress(currentProposer),
|
|
61
|
-
nextProposer: getAddress(nextProposer)
|
|
62
|
-
});
|
|
104
|
+
mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
|
|
63
105
|
const result = await validator.validate(mockProposal);
|
|
64
|
-
expect(result).
|
|
106
|
+
expect(result).toEqual({
|
|
107
|
+
result: 'reject',
|
|
108
|
+
severity: PeerErrorSeverity.MidToleranceError
|
|
109
|
+
});
|
|
65
110
|
});
|
|
66
111
|
it('returns mid tolerance error if proposer is current proposer but proposal is for next slot', async ()=>{
|
|
67
112
|
const currentProposer = getSigner();
|
|
@@ -72,14 +117,12 @@ export function sharedProposalValidatorTests(params) {
|
|
|
72
117
|
lastBlockHeader: header,
|
|
73
118
|
signer: currentProposer
|
|
74
119
|
});
|
|
75
|
-
|
|
76
|
-
currentSlot: getSlot(100),
|
|
77
|
-
nextSlot: getSlot(101),
|
|
78
|
-
currentProposer: getAddress(currentProposer),
|
|
79
|
-
nextProposer: getAddress(nextProposer)
|
|
80
|
-
});
|
|
120
|
+
mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
|
|
81
121
|
const result = await validator.validate(mockProposal);
|
|
82
|
-
expect(result).
|
|
122
|
+
expect(result).toEqual({
|
|
123
|
+
result: 'reject',
|
|
124
|
+
severity: PeerErrorSeverity.MidToleranceError
|
|
125
|
+
});
|
|
83
126
|
});
|
|
84
127
|
it('returns undefined if proposal is valid for current slot and proposer', async ()=>{
|
|
85
128
|
const currentProposer = getSigner();
|
|
@@ -90,14 +133,11 @@ export function sharedProposalValidatorTests(params) {
|
|
|
90
133
|
lastBlockHeader: header,
|
|
91
134
|
signer: currentProposer
|
|
92
135
|
});
|
|
93
|
-
|
|
94
|
-
currentSlot: getSlot(100),
|
|
95
|
-
nextSlot: getSlot(101),
|
|
96
|
-
currentProposer: getAddress(currentProposer),
|
|
97
|
-
nextProposer: getAddress(nextProposer)
|
|
98
|
-
});
|
|
136
|
+
mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
|
|
99
137
|
const result = await validator.validate(mockProposal);
|
|
100
|
-
expect(result).
|
|
138
|
+
expect(result).toEqual({
|
|
139
|
+
result: 'accept'
|
|
140
|
+
});
|
|
101
141
|
});
|
|
102
142
|
it('returns undefined if proposal is valid for next slot and proposer', async ()=>{
|
|
103
143
|
const currentProposer = getSigner();
|
|
@@ -108,14 +148,11 @@ export function sharedProposalValidatorTests(params) {
|
|
|
108
148
|
lastBlockHeader: header,
|
|
109
149
|
signer: nextProposer
|
|
110
150
|
});
|
|
111
|
-
|
|
112
|
-
currentSlot: getSlot(100),
|
|
113
|
-
nextSlot: getSlot(101),
|
|
114
|
-
currentProposer: getAddress(currentProposer),
|
|
115
|
-
nextProposer: getAddress(nextProposer)
|
|
116
|
-
});
|
|
151
|
+
mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
|
|
117
152
|
const result = await validator.validate(mockProposal);
|
|
118
|
-
expect(result).
|
|
153
|
+
expect(result).toEqual({
|
|
154
|
+
result: 'accept'
|
|
155
|
+
});
|
|
119
156
|
});
|
|
120
157
|
describe('transaction permission validation', ()=>{
|
|
121
158
|
it('returns mid tolerance error if txs not permitted and proposal contains txHashes', async ()=>{
|
|
@@ -130,14 +167,12 @@ export function sharedProposalValidatorTests(params) {
|
|
|
130
167
|
signer: currentProposer,
|
|
131
168
|
txHashes: getTxHashes(2)
|
|
132
169
|
});
|
|
133
|
-
|
|
134
|
-
currentSlot: getSlot(100),
|
|
135
|
-
nextSlot: getSlot(101),
|
|
136
|
-
currentProposer: getAddress(currentProposer),
|
|
137
|
-
nextProposer: getAddress()
|
|
138
|
-
});
|
|
170
|
+
mockGetProposer(getAddress(currentProposer), getAddress());
|
|
139
171
|
const result = await validatorWithTxsDisabled.validate(mockProposal);
|
|
140
|
-
expect(result).
|
|
172
|
+
expect(result).toEqual({
|
|
173
|
+
result: 'reject',
|
|
174
|
+
severity: PeerErrorSeverity.MidToleranceError
|
|
175
|
+
});
|
|
141
176
|
});
|
|
142
177
|
it('returns undefined if txs not permitted but proposal has no txHashes', async ()=>{
|
|
143
178
|
const currentProposer = getSigner();
|
|
@@ -151,14 +186,11 @@ export function sharedProposalValidatorTests(params) {
|
|
|
151
186
|
signer: currentProposer,
|
|
152
187
|
txHashes: getTxHashes(0)
|
|
153
188
|
});
|
|
154
|
-
|
|
155
|
-
currentSlot: getSlot(100),
|
|
156
|
-
nextSlot: getSlot(101),
|
|
157
|
-
currentProposer: getAddress(currentProposer),
|
|
158
|
-
nextProposer: getAddress()
|
|
159
|
-
});
|
|
189
|
+
mockGetProposer(getAddress(currentProposer), getAddress());
|
|
160
190
|
const result = await validatorWithTxsDisabled.validate(mockProposal);
|
|
161
|
-
expect(result).
|
|
191
|
+
expect(result).toEqual({
|
|
192
|
+
result: 'accept'
|
|
193
|
+
});
|
|
162
194
|
});
|
|
163
195
|
it('returns undefined if txs permitted and proposal contains txHashes', async ()=>{
|
|
164
196
|
const currentProposer = getSigner();
|
|
@@ -169,14 +201,11 @@ export function sharedProposalValidatorTests(params) {
|
|
|
169
201
|
signer: currentProposer,
|
|
170
202
|
txHashes: getTxHashes(2)
|
|
171
203
|
});
|
|
172
|
-
|
|
173
|
-
currentSlot: getSlot(100),
|
|
174
|
-
nextSlot: getSlot(101),
|
|
175
|
-
currentProposer: getAddress(currentProposer),
|
|
176
|
-
nextProposer: getAddress()
|
|
177
|
-
});
|
|
204
|
+
mockGetProposer(getAddress(currentProposer), getAddress());
|
|
178
205
|
const result = await validator.validate(mockProposal);
|
|
179
|
-
expect(result).
|
|
206
|
+
expect(result).toEqual({
|
|
207
|
+
result: 'accept'
|
|
208
|
+
});
|
|
180
209
|
});
|
|
181
210
|
});
|
|
182
211
|
});
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import { type LoggerBindings } from '@aztec/foundation/log';
|
|
2
3
|
import { type AnyTx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
3
4
|
export interface ArchiveSource {
|
|
4
5
|
getArchiveIndices: (archives: Fr[]) => Promise<(bigint | undefined)[]>;
|
|
5
6
|
}
|
|
6
7
|
export declare class BlockHeaderTxValidator<T extends AnyTx> implements TxValidator<T> {
|
|
7
8
|
#private;
|
|
8
|
-
constructor(archiveSource: ArchiveSource);
|
|
9
|
+
constructor(archiveSource: ArchiveSource, bindings?: LoggerBindings);
|
|
9
10
|
validateTx(tx: T): Promise<TxValidationResult>;
|
|
10
11
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfaGVhZGVyX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9ibG9ja19oZWFkZXJfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsS0FBSyxLQUFLLEVBQXlCLEtBQUssa0JBQWtCLEVBQUUsS0FBSyxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoSCxNQUFNLFdBQVcsYUFBYTtJQUM1QixpQkFBaUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3hFO0FBRUQscUJBQWEsc0JBQXNCLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7O0lBSTVFLFlBQVksYUFBYSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRSxjQUFjLEVBR2xFO0lBRUssVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBU25EO0NBQ0YifQ==
|
|
@@ -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,gCAAgC,CAAC;
|
|
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;AACzD,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,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,EAAE,QAAQ,CAAC,EAAE,cAAc,EAGlE;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CASnD;CACF"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { TX_ERROR_BLOCK_HEADER } from '@aztec/stdlib/tx';
|
|
3
3
|
export class BlockHeaderTxValidator {
|
|
4
|
-
#log
|
|
4
|
+
#log;
|
|
5
5
|
#archiveSource;
|
|
6
|
-
constructor(archiveSource){
|
|
6
|
+
constructor(archiveSource, bindings){
|
|
7
7
|
this.#archiveSource = archiveSource;
|
|
8
|
+
this.#log = createLogger('p2p:tx_validator:tx_block_header', bindings);
|
|
8
9
|
}
|
|
9
10
|
async validateTx(tx) {
|
|
10
11
|
const [index] = await this.#archiveSource.getArchiveIndices([
|
|
11
|
-
await tx.data.constants.anchorBlockHeader.hash()
|
|
12
|
+
(await tx.data.constants.anchorBlockHeader.hash()).toField()
|
|
12
13
|
]);
|
|
13
14
|
if (index === undefined) {
|
|
14
15
|
this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} for referencing an unknown block header`);
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { type LoggerBindings } from '@aztec/foundation/log';
|
|
1
2
|
import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
2
3
|
export declare class DataTxValidator implements TxValidator<Tx> {
|
|
3
4
|
#private;
|
|
5
|
+
constructor(bindings?: LoggerBindings);
|
|
4
6
|
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
5
7
|
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFTTCxFQUFFLEVBQ0YsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIscUJBQWEsZUFBZ0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUdyRCxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FNcEQ7Q0FtR0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EASL,EAAE,EACF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAGrD,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAMpD;CAmGF"}
|
|
@@ -3,7 +3,10 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
3
3
|
import { computeCalldataHash } from '@aztec/stdlib/hash';
|
|
4
4
|
import { TX_ERROR_CALLDATA_COUNT_MISMATCH, TX_ERROR_CALLDATA_COUNT_TOO_LARGE, TX_ERROR_CONTRACT_CLASS_LOGS, TX_ERROR_CONTRACT_CLASS_LOG_COUNT, TX_ERROR_CONTRACT_CLASS_LOG_LENGTH, TX_ERROR_CONTRACT_CLASS_LOG_SORTING, TX_ERROR_INCORRECT_CALLDATA, TX_ERROR_INCORRECT_HASH, Tx } from '@aztec/stdlib/tx';
|
|
5
5
|
export class DataTxValidator {
|
|
6
|
-
#log
|
|
6
|
+
#log;
|
|
7
|
+
constructor(bindings){
|
|
8
|
+
this.#log = createLogger('p2p:tx_validator:tx_data', bindings);
|
|
9
|
+
}
|
|
7
10
|
async validateTx(tx) {
|
|
8
11
|
const reason = await this.#hasCorrectHash(tx) ?? await this.#hasCorrectCalldata(tx) ?? await this.#hasCorrectContractClassLogs(tx);
|
|
9
12
|
return reason ? {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { type LoggerBindings } from '@aztec/foundation/log';
|
|
1
2
|
import { type AnyTx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
2
3
|
export interface NullifierSource {
|
|
3
4
|
nullifiersExist: (nullifiers: Buffer[]) => Promise<boolean[]>;
|
|
4
5
|
}
|
|
5
6
|
export declare class DoubleSpendTxValidator<T extends AnyTx> implements TxValidator<T> {
|
|
6
7
|
#private;
|
|
7
|
-
constructor(nullifierSource: NullifierSource);
|
|
8
|
+
constructor(nullifierSource: NullifierSource, bindings?: LoggerBindings);
|
|
8
9
|
validateTx(tx: T): Promise<TxValidationResult>;
|
|
9
10
|
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG91YmxlX3NwZW5kX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9kb3VibGVfc3BlbmRfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEVBQ0wsS0FBSyxLQUFLLEVBSVYsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsTUFBTSxXQUFXLGVBQWU7SUFDOUIsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0NBQy9EO0FBRUQscUJBQWEsc0JBQXNCLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7O0lBSTVFLFlBQVksZUFBZSxFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsRUFBRSxjQUFjLEVBR3RFO0lBRUssVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBZ0JuRDtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"double_spend_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/double_spend_validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"double_spend_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/double_spend_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,EACL,KAAK,KAAK,EAIV,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAC/D;AAED,qBAAa,sBAAsB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAI5E,YAAY,eAAe,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,cAAc,EAGtE;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgBnD;CACF"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { TX_ERROR_DUPLICATE_NULLIFIER_IN_TX, TX_ERROR_EXISTING_NULLIFIER, Tx } from '@aztec/stdlib/tx';
|
|
3
3
|
export class DoubleSpendTxValidator {
|
|
4
|
-
#log
|
|
4
|
+
#log;
|
|
5
5
|
#nullifierSource;
|
|
6
|
-
constructor(nullifierSource){
|
|
6
|
+
constructor(nullifierSource, bindings){
|
|
7
7
|
this.#nullifierSource = nullifierSource;
|
|
8
|
+
this.#log = createLogger('p2p:tx_validator:tx_double_spend', bindings);
|
|
8
9
|
}
|
|
9
10
|
async validateTx(tx) {
|
|
10
11
|
const nullifiers = tx instanceof Tx ? tx.data.getNonEmptyNullifiers() : tx.txEffect.nullifiers;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import type { LoggerBindings } from '@aztec/foundation/log';
|
|
3
4
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
4
5
|
import type { GasFees } from '@aztec/stdlib/gas';
|
|
5
6
|
import type { AllowedElement, ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
6
7
|
import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
7
|
-
import type { Tx, TxValidationResult } from '@aztec/stdlib/tx';
|
|
8
|
+
import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
|
|
8
9
|
import type { UInt64 } from '@aztec/stdlib/types';
|
|
9
10
|
export interface MessageValidator {
|
|
10
11
|
validator: {
|
|
@@ -12,5 +13,9 @@ export interface MessageValidator {
|
|
|
12
13
|
};
|
|
13
14
|
severity: PeerErrorSeverity;
|
|
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
|
-
|
|
16
|
+
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[], bindings?: LoggerBindings): Record<string, MessageValidator>[];
|
|
17
|
+
export declare function createTxReqRespValidator(verifier: ClientProtocolCircuitVerifier, { l1ChainId, rollupVersion }: {
|
|
18
|
+
l1ChainId: number;
|
|
19
|
+
rollupVersion: number;
|
|
20
|
+
}, bindings?: LoggerBindings): TxValidator;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHNUQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssRUFDVixjQUFjLEVBQ2QsNkJBQTZCLEVBQzdCLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWVsRCxNQUFNLFdBQVcsZ0JBQWdCO0lBQy9CLFNBQVMsRUFBRTtRQUNULFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBQ2pELENBQUM7SUFDRixRQUFRLEVBQUUsaUJBQWlCLENBQUM7Q0FDN0I7QUFFRCx3QkFBZ0IseUJBQXlCLENBQ3ZDLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLHNCQUFzQixFQUFFLHNCQUFzQixFQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUNoQixTQUFTLEVBQUUsTUFBTSxFQUNqQixhQUFhLEVBQUUsTUFBTSxFQUNyQixxQkFBcUIsRUFBRSxFQUFFLEVBQ3pCLGtCQUFrQixFQUFFLGtCQUFrQixFQUN0QyxhQUFhLEVBQUUsNkJBQTZCLEVBQzVDLFlBQVksRUFBRSxPQUFPLEVBQ3JCLGNBQWMsR0FBRSxjQUFjLEVBQU8sRUFDckMsUUFBUSxDQUFDLEVBQUUsY0FBYyxHQUN4QixNQUFNLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0F5RXBDO0FBRUQsd0JBQWdCLHdCQUF3QixDQUN0QyxRQUFRLEVBQUUsNkJBQTZCLEVBQ3ZDLEVBQ0UsU0FBUyxFQUNULGFBQWEsRUFDZCxFQUFFO0lBQ0QsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixhQUFhLEVBQUUsTUFBTSxDQUFDO0NBQ3ZCLEVBQ0QsUUFBUSxDQUFDLEVBQUUsY0FBYyxHQUN4QixXQUFXLENBZWIifQ==
|
|
@@ -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,gCAAgC,CAAC;
|
|
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;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,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,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAelD,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,EACrC,QAAQ,CAAC,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAyEpC;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,6BAA6B,EACvC,EACE,SAAS,EACT,aAAa,EACd,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,EACD,QAAQ,CAAC,EAAE,cAAc,GACxB,WAAW,CAeb"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
3
|
-
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
3
|
+
import { ProtocolContractAddress, protocolContractsHash } from '@aztec/protocol-contracts';
|
|
4
4
|
import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
5
5
|
import { DatabasePublicStateSource, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
6
|
+
import { AggregateTxValidator } from './aggregate_tx_validator.js';
|
|
6
7
|
import { ArchiveCache } from './archive_cache.js';
|
|
7
8
|
import { BlockHeaderTxValidator } from './block_header_validator.js';
|
|
8
9
|
import { DataTxValidator } from './data_validator.js';
|
|
@@ -10,19 +11,20 @@ import { DoubleSpendTxValidator } from './double_spend_validator.js';
|
|
|
10
11
|
import { GasTxValidator } from './gas_validator.js';
|
|
11
12
|
import { MetadataTxValidator } from './metadata_validator.js';
|
|
12
13
|
import { PhasesTxValidator } from './phases_validator.js';
|
|
14
|
+
import { SizeTxValidator } from './size_validator.js';
|
|
13
15
|
import { TimestampTxValidator } from './timestamp_validator.js';
|
|
14
16
|
import { TxPermittedValidator } from './tx_permitted_validator.js';
|
|
15
17
|
import { TxProofValidator } from './tx_proof_validator.js';
|
|
16
|
-
export function createTxMessageValidators(timestamp, blockNumber, worldStateSynchronizer, gasFees, l1ChainId, rollupVersion, protocolContractsHash, contractDataSource, proofVerifier, txsPermitted, allowedInSetup = []) {
|
|
18
|
+
export function createTxMessageValidators(timestamp, blockNumber, worldStateSynchronizer, gasFees, l1ChainId, rollupVersion, protocolContractsHash, contractDataSource, proofVerifier, txsPermitted, allowedInSetup = [], bindings) {
|
|
17
19
|
const merkleTree = worldStateSynchronizer.getCommitted();
|
|
18
20
|
return [
|
|
19
21
|
{
|
|
20
22
|
txsPermittedValidator: {
|
|
21
|
-
validator: new TxPermittedValidator(txsPermitted),
|
|
23
|
+
validator: new TxPermittedValidator(txsPermitted, bindings),
|
|
22
24
|
severity: PeerErrorSeverity.MidToleranceError
|
|
23
25
|
},
|
|
24
26
|
dataValidator: {
|
|
25
|
-
validator: new DataTxValidator(),
|
|
27
|
+
validator: new DataTxValidator(bindings),
|
|
26
28
|
severity: PeerErrorSeverity.HighToleranceError
|
|
27
29
|
},
|
|
28
30
|
metadataValidator: {
|
|
@@ -31,14 +33,14 @@ export function createTxMessageValidators(timestamp, blockNumber, worldStateSync
|
|
|
31
33
|
rollupVersion: new Fr(rollupVersion),
|
|
32
34
|
protocolContractsHash,
|
|
33
35
|
vkTreeRoot: getVKTreeRoot()
|
|
34
|
-
}),
|
|
36
|
+
}, bindings),
|
|
35
37
|
severity: PeerErrorSeverity.HighToleranceError
|
|
36
38
|
},
|
|
37
39
|
timestampValidator: {
|
|
38
40
|
validator: new TimestampTxValidator({
|
|
39
41
|
timestamp,
|
|
40
42
|
blockNumber
|
|
41
|
-
}),
|
|
43
|
+
}, bindings),
|
|
42
44
|
severity: PeerErrorSeverity.MidToleranceError
|
|
43
45
|
},
|
|
44
46
|
doubleSpendValidator: {
|
|
@@ -48,27 +50,35 @@ export function createTxMessageValidators(timestamp, blockNumber, worldStateSync
|
|
|
48
50
|
const indices = await merkleTree.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers);
|
|
49
51
|
return indices.map((index)=>index !== undefined);
|
|
50
52
|
}
|
|
51
|
-
}),
|
|
53
|
+
}, bindings),
|
|
52
54
|
severity: PeerErrorSeverity.HighToleranceError
|
|
53
55
|
},
|
|
54
56
|
gasValidator: {
|
|
55
|
-
validator: new GasTxValidator(new DatabasePublicStateSource(merkleTree), ProtocolContractAddress.FeeJuice, gasFees),
|
|
57
|
+
validator: new GasTxValidator(new DatabasePublicStateSource(merkleTree), ProtocolContractAddress.FeeJuice, gasFees, bindings),
|
|
56
58
|
severity: PeerErrorSeverity.HighToleranceError
|
|
57
59
|
},
|
|
58
60
|
phasesValidator: {
|
|
59
|
-
validator: new PhasesTxValidator(contractDataSource, allowedInSetup, timestamp),
|
|
61
|
+
validator: new PhasesTxValidator(contractDataSource, allowedInSetup, timestamp, bindings),
|
|
60
62
|
severity: PeerErrorSeverity.MidToleranceError
|
|
61
63
|
},
|
|
62
64
|
blockHeaderValidator: {
|
|
63
|
-
validator: new BlockHeaderTxValidator(new ArchiveCache(merkleTree)),
|
|
65
|
+
validator: new BlockHeaderTxValidator(new ArchiveCache(merkleTree), bindings),
|
|
64
66
|
severity: PeerErrorSeverity.HighToleranceError
|
|
65
67
|
}
|
|
66
68
|
},
|
|
67
69
|
{
|
|
68
70
|
proofValidator: {
|
|
69
|
-
validator: new TxProofValidator(proofVerifier),
|
|
71
|
+
validator: new TxProofValidator(proofVerifier, bindings),
|
|
70
72
|
severity: PeerErrorSeverity.MidToleranceError
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
];
|
|
74
76
|
}
|
|
77
|
+
export function createTxReqRespValidator(verifier, { l1ChainId, rollupVersion }, bindings) {
|
|
78
|
+
return new AggregateTxValidator(new MetadataTxValidator({
|
|
79
|
+
l1ChainId: new Fr(l1ChainId),
|
|
80
|
+
rollupVersion: new Fr(rollupVersion),
|
|
81
|
+
protocolContractsHash,
|
|
82
|
+
vkTreeRoot: getVKTreeRoot()
|
|
83
|
+
}, bindings), new SizeTxValidator(bindings), new DataTxValidator(bindings), new TxProofValidator(verifier, bindings));
|
|
84
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { type LoggerBindings } from '@aztec/foundation/log';
|
|
1
2
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
2
3
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
3
4
|
import type { PublicStateSource } from '@aztec/stdlib/trees';
|
|
4
5
|
import { type Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
|
|
5
6
|
export declare class GasTxValidator implements TxValidator<Tx> {
|
|
6
7
|
#private;
|
|
7
|
-
constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees);
|
|
8
|
+
constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees, bindings?: LoggerBindings);
|
|
8
9
|
validateTx(tx: Tx): Promise<TxValidationResult>;
|
|
9
10
|
validateTxFee(tx: Tx): Promise<TxValidationResult>;
|
|
10
11
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9nYXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQU8sT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBS0wsS0FBSyxFQUFFLEVBQ1AsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFJMUIscUJBQWEsY0FBZSxZQUFXLFdBQVcsQ0FBQyxFQUFFLENBQUM7O0lBTXBELFlBQ0UsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQ25DLGVBQWUsRUFBRSxZQUFZLEVBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFNMUI7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FTcEQ7SUFtRFksYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBeUI5RDtDQUNGIn0=
|
|
@@ -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":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,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,YACE,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,YAAY,EAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,cAAc,EAM1B;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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { AVM_MAX_PROCESSABLE_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS } from '@aztec/constants';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
4
|
-
import { getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
|
|
5
|
-
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
6
4
|
import { Gas } from '@aztec/stdlib/gas';
|
|
7
|
-
import { TX_ERROR_GAS_LIMIT_TOO_HIGH, TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE, TX_ERROR_INSUFFICIENT_FEE_PER_GAS, TX_ERROR_INSUFFICIENT_GAS_LIMIT
|
|
5
|
+
import { TX_ERROR_GAS_LIMIT_TOO_HIGH, TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE, TX_ERROR_INSUFFICIENT_FEE_PER_GAS, TX_ERROR_INSUFFICIENT_GAS_LIMIT } from '@aztec/stdlib/tx';
|
|
6
|
+
import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
|
|
8
7
|
export class GasTxValidator {
|
|
9
|
-
#log
|
|
8
|
+
#log;
|
|
10
9
|
#publicDataSource;
|
|
11
10
|
#feeJuiceAddress;
|
|
12
11
|
#gasFees;
|
|
13
|
-
constructor(publicDataSource, feeJuiceAddress, gasFees){
|
|
12
|
+
constructor(publicDataSource, feeJuiceAddress, gasFees, bindings){
|
|
13
|
+
this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
|
|
14
14
|
this.#publicDataSource = publicDataSource;
|
|
15
15
|
this.#feeJuiceAddress = feeJuiceAddress;
|
|
16
16
|
this.#gasFees = gasFees;
|
|
@@ -84,22 +84,17 @@ export class GasTxValidator {
|
|
|
84
84
|
async validateTxFee(tx) {
|
|
85
85
|
const feePayer = tx.data.feePayer;
|
|
86
86
|
// Compute the maximum fee that this tx may pay, based on its gasLimits and maxFeePerGas
|
|
87
|
-
const feeLimit = tx
|
|
87
|
+
const feeLimit = getTxFeeLimit(tx);
|
|
88
88
|
// Read current balance of the feePayer
|
|
89
89
|
const initialBalance = await this.#publicDataSource.storageRead(this.#feeJuiceAddress, await computeFeePayerBalanceStorageSlot(feePayer));
|
|
90
90
|
// If there is a claim in this tx that increases the fee payer balance in Fee Juice, add it to balance
|
|
91
|
-
const
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
// - args[0]: Amount recipient.
|
|
95
|
-
// - args[1]: Amount being claimed.
|
|
96
|
-
const claimFunctionCall = setupFns.find((fn)=>fn.request.contractAddress.equals(this.#feeJuiceAddress) && fn.request.msgSender.equals(this.#feeJuiceAddress) && fn.calldata.length > 2 && fn.functionSelector.equals(increasePublicBalanceSelector) && fn.args[0].equals(feePayer.toField()) && !fn.request.isStaticCall);
|
|
97
|
-
const balance = claimFunctionCall ? initialBalance.add(claimFunctionCall.args[1]) : initialBalance;
|
|
98
|
-
if (balance.lt(feeLimit)) {
|
|
91
|
+
const claimAmount = await getFeePayerClaimAmount(tx, this.#feeJuiceAddress);
|
|
92
|
+
const balance = initialBalance.toBigInt() + claimAmount;
|
|
93
|
+
if (balance < feeLimit) {
|
|
99
94
|
this.#log.verbose(`Rejecting transaction due to not enough fee payer balance`, {
|
|
100
95
|
feePayer,
|
|
101
|
-
balance
|
|
102
|
-
feeLimit
|
|
96
|
+
balance,
|
|
97
|
+
feeLimit
|
|
103
98
|
});
|
|
104
99
|
return {
|
|
105
100
|
result: 'invalid',
|
|
@@ -11,4 +11,5 @@ export * from './allowed_public_setup.js';
|
|
|
11
11
|
export * from './archive_cache.js';
|
|
12
12
|
export * from './tx_permitted_validator.js';
|
|
13
13
|
export * from './timestamp_validator.js';
|
|
14
|
-
|
|
14
|
+
export * from './size_validator.js';
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHFCQUFxQixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC"}
|