chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5rc2__py3-none-any.whl
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.
- chia/_tests/blockchain/blockchain_test_utils.py +2 -3
- chia/_tests/blockchain/test_augmented_chain.py +2 -3
- chia/_tests/blockchain/test_blockchain.py +261 -44
- chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
- chia/_tests/blockchain/test_build_chains.py +197 -1
- chia/_tests/blockchain/test_get_block_generator.py +1 -1
- chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +3 -4
- chia/_tests/clvm/test_message_conditions.py +2 -2
- chia/_tests/clvm/test_puzzle_compression.py +2 -3
- chia/_tests/clvm/test_puzzles.py +1 -2
- chia/_tests/clvm/test_singletons.py +2 -3
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +30 -25
- chia/_tests/cmds/test_dev_gh.py +1 -1
- chia/_tests/cmds/test_farm_cmd.py +1 -1
- chia/_tests/cmds/test_show.py +1 -2
- chia/_tests/cmds/wallet/test_did.py +101 -56
- chia/_tests/cmds/wallet/test_nft.py +109 -84
- chia/_tests/cmds/wallet/test_notifications.py +1 -1
- chia/_tests/cmds/wallet/test_offer.toffer +1 -1
- chia/_tests/cmds/wallet/test_vcs.py +8 -8
- chia/_tests/cmds/wallet/test_wallet.py +100 -46
- chia/_tests/conftest.py +31 -20
- chia/_tests/connection_utils.py +1 -1
- chia/_tests/core/consensus/stores/__init__.py +0 -0
- chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
- chia/_tests/core/consensus/test_block_creation.py +2 -31
- chia/_tests/core/consensus/test_pot_iterations.py +38 -3
- chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
- chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
- chia/_tests/core/daemon/test_daemon.py +80 -0
- chia/_tests/core/data_layer/test_data_layer.py +1 -1
- chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
- chia/_tests/core/data_layer/test_data_rpc.py +14 -10
- chia/_tests/core/data_layer/test_data_store.py +5 -5
- chia/_tests/core/farmer/test_farmer_api.py +2 -2
- chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
- chia/_tests/core/full_node/ram_db.py +3 -1
- chia/_tests/core/full_node/stores/test_block_store.py +28 -16
- chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
- chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_address_manager.py +200 -27
- chia/_tests/core/full_node/test_block_height_map.py +2 -2
- chia/_tests/core/full_node/test_conditions.py +7 -6
- chia/_tests/core/full_node/test_full_node.py +456 -40
- chia/_tests/core/full_node/test_generator_tools.py +32 -2
- chia/_tests/core/full_node/test_hint_management.py +1 -1
- chia/_tests/core/full_node/test_node_load.py +20 -21
- chia/_tests/core/full_node/test_performance.py +3 -4
- chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
- chia/_tests/core/full_node/test_subscriptions.py +1 -2
- chia/_tests/core/full_node/test_transactions.py +9 -5
- chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
- chia/_tests/core/large_block.py +1 -2
- chia/_tests/core/make_block_generator.py +3 -4
- chia/_tests/core/mempool/test_mempool.py +36 -86
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
- chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
- chia/_tests/core/mempool/test_mempool_manager.py +421 -69
- chia/_tests/core/mempool/test_mempool_performance.py +3 -2
- chia/_tests/core/mempool/test_singleton_fast_forward.py +60 -131
- chia/_tests/core/server/flood.py +1 -1
- chia/_tests/core/server/test_dos.py +1 -1
- chia/_tests/core/server/test_node_discovery.py +41 -27
- chia/_tests/core/server/test_rate_limits.py +1 -1
- chia/_tests/core/server/test_server.py +1 -1
- chia/_tests/core/services/test_services.py +5 -5
- chia/_tests/core/ssl/test_ssl.py +1 -1
- chia/_tests/core/test_cost_calculation.py +6 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_crawler_rpc.py +1 -1
- chia/_tests/core/test_db_conversion.py +3 -1
- chia/_tests/core/test_db_validation.py +5 -3
- chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
- chia/_tests/core/test_filter.py +4 -1
- chia/_tests/core/test_full_node_rpc.py +99 -82
- chia/_tests/core/test_program.py +2 -2
- chia/_tests/core/util/test_block_cache.py +1 -1
- chia/_tests/core/util/test_keychain.py +2 -2
- chia/_tests/core/util/test_lockfile.py +1 -1
- chia/_tests/core/util/test_log_exceptions.py +5 -5
- chia/_tests/core/util/test_streamable.py +81 -22
- chia/_tests/db/test_db_wrapper.py +1 -3
- chia/_tests/environments/wallet.py +5 -5
- chia/_tests/farmer_harvester/test_farmer.py +9 -7
- chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
- chia/_tests/generator/test_compression.py +1 -2
- chia/_tests/generator/test_rom.py +8 -4
- chia/_tests/plot_sync/test_plot_sync.py +3 -3
- chia/_tests/plot_sync/test_receiver.py +3 -3
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +3 -3
- chia/_tests/plot_sync/util.py +2 -2
- chia/_tests/pools/test_pool_cmdline.py +48 -21
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
- chia/_tests/pools/test_pool_rpc.py +237 -105
- chia/_tests/pools/test_pool_wallet.py +11 -2
- chia/_tests/pools/test_wallet_pool_store.py +5 -4
- chia/_tests/rpc/test_rpc_client.py +1 -1
- chia/_tests/simulation/test_simulation.py +13 -8
- chia/_tests/simulation/test_simulator.py +2 -2
- chia/_tests/timelord/test_new_peak.py +191 -47
- chia/_tests/timelord/test_timelord.py +1 -1
- chia/_tests/tools/test_full_sync.py +0 -2
- chia/_tests/tools/test_run_block.py +3 -1
- chia/_tests/util/benchmark_cost.py +3 -3
- chia/_tests/util/benchmarks.py +2 -2
- chia/_tests/util/blockchain.py +11 -5
- chia/_tests/util/blockchain_mock.py +1 -4
- chia/_tests/util/coin_store.py +29 -0
- chia/_tests/util/constants.py +2 -18
- chia/_tests/util/full_sync.py +3 -3
- chia/_tests/util/generator_tools_testing.py +2 -3
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +33 -31
- chia/_tests/util/network_protocol_data.py +19 -17
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +3 -1
- chia/_tests/util/run_block.py +2 -2
- chia/_tests/util/setup_nodes.py +7 -7
- chia/_tests/util/spend_sim.py +47 -55
- chia/_tests/util/test_condition_tools.py +5 -4
- chia/_tests/util/test_config.py +2 -2
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +12 -14
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_paginator.py +4 -4
- chia/_tests/util/test_priority_mutex.py +2 -2
- chia/_tests/util/test_replace_str_to_bytes.py +15 -5
- chia/_tests/util/test_ssl_check.py +1 -1
- chia/_tests/util/test_testnet_overrides.py +13 -3
- chia/_tests/util/time_out_assert.py +4 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
- chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
- chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
- chia/_tests/wallet/conftest.py +11 -12
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
- chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
- chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
- chia/_tests/wallet/nft_wallet/config.py +1 -1
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
- chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
- chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
- chia/_tests/wallet/test_clvm_casts.py +88 -0
- chia/_tests/wallet/test_coin_management.py +1 -1
- chia/_tests/wallet/test_coin_selection.py +1 -1
- chia/_tests/wallet/test_conditions.py +1 -1
- chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
- chia/_tests/wallet/test_notifications.py +5 -3
- chia/_tests/wallet/test_sign_coin_spends.py +6 -6
- chia/_tests/wallet/test_signer_protocol.py +13 -12
- chia/_tests/wallet/test_singleton.py +1 -1
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +108 -29
- chia/_tests/wallet/test_wallet_action_scope.py +9 -2
- chia/_tests/wallet/test_wallet_blockchain.py +2 -3
- chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
- chia/_tests/wallet/test_wallet_node.py +2 -4
- chia/_tests/wallet/test_wallet_retry.py +4 -2
- chia/_tests/wallet/test_wallet_state_manager.py +191 -5
- chia/_tests/wallet/test_wallet_test_framework.py +1 -1
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
- chia/_tests/wallet/wallet_block_tools.py +6 -6
- chia/_tests/weight_proof/test_weight_proof.py +10 -48
- chia/apis.py +1 -1
- chia/cmds/beta.py +1 -1
- chia/cmds/chia.py +9 -9
- chia/cmds/cmd_classes.py +12 -11
- chia/cmds/cmd_helpers.py +1 -1
- chia/cmds/cmds_util.py +12 -9
- chia/cmds/coin_funcs.py +2 -2
- chia/cmds/configure.py +2 -2
- chia/cmds/data.py +0 -2
- chia/cmds/data_funcs.py +1 -1
- chia/cmds/db_validate_func.py +1 -2
- chia/cmds/dev/__init__.py +0 -0
- chia/cmds/dev/data.py +273 -0
- chia/cmds/{gh.py → dev/gh.py} +5 -5
- chia/cmds/dev/main.py +22 -0
- chia/cmds/dev/mempool.py +78 -0
- chia/cmds/dev/mempool_funcs.py +63 -0
- chia/cmds/farm_funcs.py +5 -4
- chia/cmds/init_funcs.py +11 -11
- chia/cmds/keys.py +2 -2
- chia/cmds/keys_funcs.py +4 -4
- chia/cmds/netspace_funcs.py +1 -1
- chia/cmds/peer_funcs.py +2 -2
- chia/cmds/plotnft_funcs.py +72 -26
- chia/cmds/rpc.py +1 -1
- chia/cmds/show_funcs.py +5 -5
- chia/cmds/signer.py +8 -7
- chia/cmds/sim_funcs.py +8 -9
- chia/cmds/wallet.py +2 -2
- chia/cmds/wallet_funcs.py +165 -131
- chia/{util → consensus}/augmented_chain.py +1 -2
- chia/consensus/block_body_validation.py +54 -40
- chia/consensus/block_creation.py +42 -76
- chia/consensus/block_header_validation.py +32 -26
- chia/consensus/block_record.py +0 -3
- chia/consensus/blockchain.py +23 -32
- chia/consensus/blockchain_interface.py +1 -5
- chia/consensus/check_time_locks.py +57 -0
- chia/consensus/coin_store_protocol.py +151 -0
- chia/consensus/coinbase.py +0 -6
- chia/consensus/condition_costs.py +4 -0
- chia/{util → consensus}/condition_tools.py +4 -5
- chia/consensus/cost_calculator.py +1 -1
- chia/consensus/default_constants.py +32 -9
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +1 -2
- chia/consensus/find_fork_point.py +1 -3
- chia/consensus/full_block_to_block_record.py +1 -6
- chia/{util → consensus}/generator_tools.py +1 -3
- chia/consensus/get_block_challenge.py +30 -7
- chia/consensus/make_sub_epoch_summary.py +1 -5
- chia/consensus/multiprocess_validation.py +21 -20
- chia/consensus/pot_iterations.py +74 -13
- chia/{util → consensus}/prev_transaction_block.py +1 -1
- chia/consensus/vdf_info_computation.py +1 -3
- chia/daemon/keychain_proxy.py +5 -5
- chia/daemon/server.py +22 -5
- chia/data_layer/data_layer.py +92 -51
- chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
- chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
- chia/data_layer/data_layer_util.py +4 -6
- chia/data_layer/data_layer_wallet.py +42 -69
- chia/data_layer/dl_wallet_store.py +12 -6
- chia/data_layer/download_data.py +3 -3
- chia/data_layer/s3_plugin_service.py +0 -1
- chia/farmer/farmer.py +3 -4
- chia/farmer/farmer_api.py +11 -7
- chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
- chia/full_node/block_height_map.py +7 -6
- chia/full_node/block_store.py +5 -7
- chia/full_node/bundle_tools.py +1 -2
- chia/full_node/coin_store.py +143 -124
- chia/{types → full_node}/eligible_coin_spends.py +39 -70
- chia/full_node/fee_estimator.py +1 -1
- chia/full_node/fee_estimator_interface.py +0 -8
- chia/full_node/fee_tracker.py +25 -25
- chia/full_node/full_node.py +70 -53
- chia/full_node/full_node_api.py +57 -40
- chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
- chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
- chia/full_node/full_node_store.py +23 -8
- chia/full_node/mempool.py +206 -53
- chia/full_node/mempool_check_conditions.py +20 -63
- chia/full_node/mempool_manager.py +26 -40
- chia/full_node/subscriptions.py +1 -3
- chia/full_node/tx_processing_queue.py +50 -3
- chia/full_node/weight_proof.py +46 -37
- chia/harvester/harvester.py +1 -1
- chia/harvester/harvester_api.py +22 -7
- chia/introducer/introducer.py +1 -1
- chia/introducer/introducer_api.py +1 -1
- chia/plot_sync/exceptions.py +1 -1
- chia/plot_sync/receiver.py +1 -1
- chia/plot_sync/sender.py +2 -2
- chia/pools/pool_puzzles.py +13 -18
- chia/pools/pool_wallet.py +23 -46
- chia/protocols/farmer_protocol.py +11 -3
- chia/protocols/full_node_protocol.py +1 -4
- chia/protocols/harvester_protocol.py +3 -3
- chia/protocols/pool_protocol.py +1 -2
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +1 -3
- chia/protocols/wallet_protocol.py +3 -3
- chia/rpc/rpc_client.py +7 -8
- chia/rpc/rpc_server.py +3 -3
- chia/rpc/util.py +3 -1
- chia/seeder/crawler.py +1 -1
- chia/seeder/crawler_api.py +1 -1
- chia/seeder/dns_server.py +2 -0
- chia/seeder/start_crawler.py +3 -3
- chia/server/address_manager.py +286 -38
- chia/server/address_manager_store.py +0 -215
- chia/{types → server}/aliases.py +7 -7
- chia/server/api_protocol.py +1 -1
- chia/server/chia_policy.py +1 -1
- chia/server/node_discovery.py +76 -113
- chia/server/rate_limits.py +1 -1
- chia/server/resolve_peer_info.py +43 -0
- chia/server/server.py +5 -5
- chia/server/start_data_layer.py +4 -4
- chia/server/start_farmer.py +5 -4
- chia/server/start_full_node.py +5 -4
- chia/server/start_harvester.py +7 -5
- chia/server/start_introducer.py +2 -2
- chia/server/start_service.py +1 -1
- chia/server/start_timelord.py +7 -5
- chia/server/start_wallet.py +7 -5
- chia/server/ws_connection.py +1 -1
- chia/simulator/add_blocks_in_batches.py +2 -2
- chia/simulator/block_tools.py +245 -201
- chia/simulator/full_node_simulator.py +38 -10
- chia/simulator/setup_services.py +12 -12
- chia/simulator/simulator_full_node_rpc_api.py +2 -2
- chia/simulator/simulator_full_node_rpc_client.py +2 -2
- chia/simulator/simulator_test_tools.py +2 -2
- chia/simulator/start_simulator.py +1 -1
- chia/simulator/wallet_tools.py +10 -18
- chia/ssl/create_ssl.py +1 -1
- chia/timelord/iters_from_block.py +14 -14
- chia/timelord/timelord.py +15 -11
- chia/timelord/timelord_api.py +14 -2
- chia/timelord/timelord_state.py +20 -14
- chia/types/blockchain_format/program.py +53 -10
- chia/types/blockchain_format/proof_of_space.py +73 -19
- chia/types/coin_spend.py +3 -56
- chia/types/generator_types.py +28 -0
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +12 -7
- chia/types/unfinished_header_block.py +1 -2
- chia/types/validation_state.py +1 -2
- chia/types/weight_proof.py +1 -3
- chia/util/action_scope.py +3 -3
- chia/util/block_cache.py +1 -2
- chia/util/byte_types.py +1 -1
- chia/util/casts.py +21 -0
- chia/util/config.py +0 -37
- chia/util/db_wrapper.py +8 -1
- chia/util/errors.py +3 -2
- chia/util/initial-config.yaml +21 -5
- chia/util/keychain.py +6 -7
- chia/util/keyring_wrapper.py +5 -5
- chia/util/limited_semaphore.py +1 -1
- chia/util/priority_mutex.py +1 -1
- chia/util/streamable.py +63 -5
- chia/util/task_timing.py +1 -1
- chia/util/virtual_project_analysis.py +1 -1
- chia/wallet/cat_wallet/cat_info.py +7 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
- chia/wallet/cat_wallet/cat_utils.py +1 -1
- chia/wallet/cat_wallet/cat_wallet.py +44 -36
- chia/wallet/cat_wallet/lineage_store.py +7 -0
- chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
- chia/wallet/conditions.py +5 -10
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
- chia/wallet/derivation_record.py +33 -0
- chia/wallet/derive_keys.py +3 -3
- chia/wallet/did_wallet/did_info.py +12 -3
- chia/wallet/did_wallet/did_wallet.py +132 -101
- chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
- chia/wallet/driver_protocol.py +3 -1
- chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
- chia/wallet/nft_wallet/nft_wallet.py +69 -112
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
- chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
- chia/wallet/nft_wallet/uncurry_nft.py +4 -6
- chia/wallet/notification_manager.py +2 -3
- chia/wallet/outer_puzzles.py +7 -2
- chia/wallet/puzzle_drivers.py +1 -1
- chia/wallet/puzzles/clawback/drivers.py +5 -4
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
- chia/wallet/puzzles/singleton_top_layer.py +2 -1
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
- chia/wallet/puzzles/tails.py +1 -3
- chia/wallet/signer_protocol.py +5 -6
- chia/wallet/singleton.py +5 -4
- chia/wallet/singleton_record.py +1 -1
- chia/wallet/trade_manager.py +18 -20
- chia/wallet/trade_record.py +3 -6
- chia/wallet/trading/offer.py +12 -13
- chia/wallet/uncurried_puzzle.py +2 -2
- chia/wallet/util/compute_additions.py +58 -0
- chia/wallet/util/compute_hints.py +3 -3
- chia/wallet/util/compute_memos.py +4 -4
- chia/wallet/util/curry_and_treehash.py +2 -1
- chia/wallet/util/debug_spend_bundle.py +1 -1
- chia/wallet/util/merkle_tree.py +1 -1
- chia/wallet/util/peer_request_cache.py +1 -2
- chia/wallet/util/tx_config.py +3 -8
- chia/wallet/util/wallet_sync_utils.py +10 -5
- chia/wallet/util/wallet_types.py +1 -0
- chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
- chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
- chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
- chia/wallet/vc_wallet/vc_drivers.py +50 -8
- chia/wallet/vc_wallet/vc_store.py +3 -5
- chia/wallet/vc_wallet/vc_wallet.py +15 -22
- chia/wallet/wallet.py +36 -46
- chia/wallet/wallet_action_scope.py +73 -4
- chia/wallet/wallet_blockchain.py +1 -3
- chia/wallet/wallet_interested_store.py +1 -1
- chia/wallet/wallet_nft_store.py +3 -3
- chia/wallet/wallet_node.py +17 -16
- chia/wallet/wallet_node_api.py +4 -5
- chia/wallet/wallet_pool_store.py +1 -1
- chia/wallet/wallet_protocol.py +2 -0
- chia/wallet/wallet_puzzle_store.py +1 -1
- chia/{rpc → wallet}/wallet_request_types.py +670 -81
- chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
- chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
- chia/wallet/wallet_singleton_store.py +8 -7
- chia/wallet/wallet_spend_bundle.py +4 -3
- chia/wallet/wallet_state_manager.py +320 -191
- chia/wallet/wallet_weight_proof_handler.py +1 -2
- chia/wallet/wsm_apis.py +98 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/RECORD +443 -436
- mozilla-ca/cacert.pem +3 -165
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
- chia/cmds/dev.py +0 -18
- chia/types/blockchain_format/slots.py +0 -9
- chia/types/blockchain_format/sub_epoch_summary.py +0 -5
- chia/types/end_of_slot_bundle.py +0 -5
- chia/types/full_block.py +0 -5
- chia/types/header_block.py +0 -5
- chia/types/spend_bundle_conditions.py +0 -7
- chia/types/transaction_queue_entry.py +0 -56
- chia/types/unfinished_block.py +0 -5
- /chia/cmds/{installers.py → dev/installers.py} +0 -0
- /chia/cmds/{sim.py → dev/sim.py} +0 -0
- /chia/{util → cmds}/dump_keyring.py +0 -0
- /chia/{full_node → consensus}/signage_point.py +0 -0
- /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
- /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
- /chia/{util → full_node}/full_block_utils.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
- /chia/{full_node → protocols}/fee_estimate.py +0 -0
- /chia/{server → protocols}/outbound_message.py +0 -0
- /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
- /chia/{util → simulator}/vdf_prover.py +0 -0
- /chia/{util → ssl}/ssl_check.py +0 -0
- /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/entry_points.txt +0 -0
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import copy
|
|
4
3
|
import dataclasses
|
|
5
|
-
from
|
|
6
|
-
from typing import Callable, Optional
|
|
4
|
+
from typing import Optional
|
|
7
5
|
|
|
8
|
-
from chia_rs import ConsensusConstants, fast_forward_singleton, get_conditions_from_spendbundle
|
|
6
|
+
from chia_rs import CoinSpend, ConsensusConstants, SpendBundle, fast_forward_singleton, get_conditions_from_spendbundle
|
|
9
7
|
from chia_rs.sized_bytes import bytes32
|
|
10
8
|
from chia_rs.sized_ints import uint32, uint64
|
|
11
9
|
|
|
12
10
|
from chia.consensus.condition_costs import ConditionCost
|
|
13
11
|
from chia.types.blockchain_format.coin import Coin
|
|
12
|
+
from chia.types.blockchain_format.program import run_mempool_with_cost
|
|
14
13
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
15
|
-
from chia.types.coin_spend import CoinSpend
|
|
16
14
|
from chia.types.internal_mempool_item import InternalMempoolItem
|
|
17
|
-
from chia.types.mempool_item import BundleCoinSpend
|
|
18
|
-
from chia.types.spend_bundle import SpendBundle
|
|
15
|
+
from chia.types.mempool_item import BundleCoinSpend, UnspentLineageInfo
|
|
19
16
|
from chia.util.errors import Err
|
|
20
17
|
|
|
21
18
|
|
|
@@ -33,7 +30,7 @@ def run_for_cost(
|
|
|
33
30
|
puzzle_reveal: SerializedProgram, solution: SerializedProgram, additions_count: int, max_cost: int
|
|
34
31
|
) -> uint64:
|
|
35
32
|
create_coins_cost = additions_count * ConditionCost.CREATE_COIN.value
|
|
36
|
-
clvm_cost, _ =
|
|
33
|
+
clvm_cost, _ = run_mempool_with_cost(puzzle_reveal, max_cost, solution)
|
|
37
34
|
saved_cost = uint64(clvm_cost + create_coins_cost)
|
|
38
35
|
return saved_cost
|
|
39
36
|
|
|
@@ -44,15 +41,6 @@ class DedupCoinSpend:
|
|
|
44
41
|
cost: Optional[uint64]
|
|
45
42
|
|
|
46
43
|
|
|
47
|
-
@dataclasses.dataclass(frozen=True)
|
|
48
|
-
class UnspentLineageInfo:
|
|
49
|
-
coin_id: bytes32
|
|
50
|
-
coin_amount: uint64
|
|
51
|
-
parent_id: bytes32
|
|
52
|
-
parent_amount: uint64
|
|
53
|
-
parent_parent_id: bytes32
|
|
54
|
-
|
|
55
|
-
|
|
56
44
|
def set_next_singleton_version(
|
|
57
45
|
current_singleton: Coin, singleton_additions: list[Coin], fast_forward_spends: dict[bytes32, UnspentLineageInfo]
|
|
58
46
|
) -> None:
|
|
@@ -70,16 +58,19 @@ def set_next_singleton_version(
|
|
|
70
58
|
next iteration
|
|
71
59
|
"""
|
|
72
60
|
singleton_child = next(
|
|
73
|
-
(
|
|
61
|
+
(
|
|
62
|
+
addition
|
|
63
|
+
for addition in singleton_additions
|
|
64
|
+
if addition.puzzle_hash == current_singleton.puzzle_hash and addition.amount == current_singleton.amount
|
|
65
|
+
),
|
|
66
|
+
None,
|
|
74
67
|
)
|
|
75
68
|
if singleton_child is None:
|
|
76
69
|
raise ValueError("Could not find fast forward child singleton.")
|
|
77
70
|
# Keep track of this in order to chain the next ff
|
|
78
71
|
fast_forward_spends[current_singleton.puzzle_hash] = UnspentLineageInfo(
|
|
79
72
|
coin_id=singleton_child.name(),
|
|
80
|
-
coin_amount=singleton_child.amount,
|
|
81
73
|
parent_id=singleton_child.parent_coin_info,
|
|
82
|
-
parent_amount=current_singleton.amount,
|
|
83
74
|
parent_parent_id=current_singleton.parent_coin_info,
|
|
84
75
|
)
|
|
85
76
|
|
|
@@ -107,14 +98,10 @@ def perform_the_fast_forward(
|
|
|
107
98
|
ValueError if none of the additions are considered to be the singleton's
|
|
108
99
|
next iteration
|
|
109
100
|
"""
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
)
|
|
113
|
-
new_parent = Coin(
|
|
114
|
-
unspent_lineage_info.parent_parent_id,
|
|
115
|
-
spend_data.coin_spend.coin.puzzle_hash,
|
|
116
|
-
unspent_lineage_info.parent_amount,
|
|
117
|
-
)
|
|
101
|
+
singleton_ph = spend_data.coin_spend.coin.puzzle_hash
|
|
102
|
+
singleton_amount = spend_data.coin_spend.coin.amount
|
|
103
|
+
new_coin = Coin(unspent_lineage_info.parent_id, singleton_ph, singleton_amount)
|
|
104
|
+
new_parent = Coin(unspent_lineage_info.parent_parent_id, singleton_ph, singleton_amount)
|
|
118
105
|
# These hold because puzzle hash is not expected to change
|
|
119
106
|
assert new_coin.name() == unspent_lineage_info.coin_id
|
|
120
107
|
assert new_parent.name() == unspent_lineage_info.parent_id
|
|
@@ -126,7 +113,7 @@ def perform_the_fast_forward(
|
|
|
126
113
|
for addition in spend_data.additions:
|
|
127
114
|
patched_addition = Coin(unspent_lineage_info.coin_id, addition.puzzle_hash, addition.amount)
|
|
128
115
|
patched_additions.append(patched_addition)
|
|
129
|
-
if addition.puzzle_hash ==
|
|
116
|
+
if addition.puzzle_hash == singleton_ph and addition.amount == singleton_amount:
|
|
130
117
|
# We found the next version of this singleton
|
|
131
118
|
singleton_child = patched_addition
|
|
132
119
|
if singleton_child is None:
|
|
@@ -135,9 +122,7 @@ def perform_the_fast_forward(
|
|
|
135
122
|
# Keep track of this in order to chain the next ff
|
|
136
123
|
fast_forward_spends[spend_data.coin_spend.coin.puzzle_hash] = UnspentLineageInfo(
|
|
137
124
|
coin_id=singleton_child.name(),
|
|
138
|
-
coin_amount=singleton_child.amount,
|
|
139
125
|
parent_id=singleton_child.parent_coin_info,
|
|
140
|
-
parent_amount=unspent_lineage_info.coin_amount,
|
|
141
126
|
parent_parent_id=unspent_lineage_info.parent_id,
|
|
142
127
|
)
|
|
143
128
|
return new_coin_spend, patched_additions
|
|
@@ -149,9 +134,8 @@ class SkipDedup(BaseException):
|
|
|
149
134
|
|
|
150
135
|
|
|
151
136
|
@dataclasses.dataclass(frozen=True)
|
|
152
|
-
class
|
|
137
|
+
class IdenticalSpendDedup:
|
|
153
138
|
deduplication_spends: dict[bytes32, DedupCoinSpend] = dataclasses.field(default_factory=dict)
|
|
154
|
-
fast_forward_spends: dict[bytes32, UnspentLineageInfo] = dataclasses.field(default_factory=dict)
|
|
155
139
|
|
|
156
140
|
def get_deduplication_info(
|
|
157
141
|
self, *, bundle_coin_spends: dict[bytes32, BundleCoinSpend], max_cost: int
|
|
@@ -234,13 +218,13 @@ class EligibleCoinSpends:
|
|
|
234
218
|
self.deduplication_spends.update(new_dedup_spends)
|
|
235
219
|
return unique_coin_spends, uint64(cost_saving), unique_additions
|
|
236
220
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
constants: ConsensusConstants
|
|
221
|
+
|
|
222
|
+
@dataclasses.dataclass(frozen=True)
|
|
223
|
+
class SingletonFastForward:
|
|
224
|
+
fast_forward_spends: dict[bytes32, UnspentLineageInfo] = dataclasses.field(default_factory=dict)
|
|
225
|
+
|
|
226
|
+
def process_fast_forward_spends(
|
|
227
|
+
self, *, mempool_item: InternalMempoolItem, height: uint32, constants: ConsensusConstants
|
|
244
228
|
) -> dict[bytes32, BundleCoinSpend]:
|
|
245
229
|
"""
|
|
246
230
|
Provides the caller with a `bundle_coin_spends` map that has a proper
|
|
@@ -249,8 +233,6 @@ class EligibleCoinSpends:
|
|
|
249
233
|
|
|
250
234
|
Args:
|
|
251
235
|
mempool_item: The internal mempool item to process
|
|
252
|
-
get_unspent_lineage_info_for_puzzle_hash: to lookup the most recent
|
|
253
|
-
version of the singleton from the coin store
|
|
254
236
|
constants: needed in order to refresh the mempool item if needed
|
|
255
237
|
height: needed in order to refresh the mempool item if needed
|
|
256
238
|
|
|
@@ -262,18 +244,14 @@ class EligibleCoinSpends:
|
|
|
262
244
|
If a fast forward cannot proceed, to prevent potential double spends
|
|
263
245
|
"""
|
|
264
246
|
|
|
265
|
-
# Let's first create a copy of the mempool item's `bundle_coin_spends`
|
|
266
|
-
# map to work on and return. This way we avoid the possibility of
|
|
267
|
-
# propagating a modified version of this item through the network.
|
|
268
|
-
bundle_coin_spends = copy.copy(mempool_item.bundle_coin_spends)
|
|
269
247
|
new_coin_spends = []
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
for coin_id, spend_data in bundle_coin_spends.items():
|
|
248
|
+
new_bundle_coin_spends = {}
|
|
249
|
+
fast_forwarded_spends = 0
|
|
250
|
+
for coin_id, spend_data in mempool_item.bundle_coin_spends.items():
|
|
274
251
|
if not spend_data.eligible_for_fast_forward:
|
|
275
252
|
# Nothing to do for this spend, moving on
|
|
276
253
|
new_coin_spends.append(spend_data.coin_spend)
|
|
254
|
+
new_bundle_coin_spends[coin_id] = spend_data
|
|
277
255
|
continue
|
|
278
256
|
|
|
279
257
|
# NOTE: We need to support finding the most recent version of a singleton
|
|
@@ -283,12 +261,10 @@ class EligibleCoinSpends:
|
|
|
283
261
|
# See if we added a fast forward spend with this puzzle hash before
|
|
284
262
|
unspent_lineage_info = self.fast_forward_spends.get(spend_data.coin_spend.coin.puzzle_hash)
|
|
285
263
|
if unspent_lineage_info is None:
|
|
286
|
-
# We didn't, so let's
|
|
287
|
-
|
|
288
|
-
spend_data.coin_spend.coin.puzzle_hash
|
|
289
|
-
)
|
|
290
|
-
if unspent_lineage_info is None:
|
|
264
|
+
# We didn't, so let's check the item's latest lineage info
|
|
265
|
+
if spend_data.latest_singleton_lineage is None:
|
|
291
266
|
raise ValueError("Cannot proceed with singleton spend fast forward.")
|
|
267
|
+
unspent_lineage_info = spend_data.latest_singleton_lineage
|
|
292
268
|
# See if we're the most recent version
|
|
293
269
|
if unspent_lineage_info.coin_id == coin_id:
|
|
294
270
|
# We are, so we don't need to fast forward, we just need to
|
|
@@ -300,6 +276,7 @@ class EligibleCoinSpends:
|
|
|
300
276
|
)
|
|
301
277
|
# Nothing more to do for this spend, moving on
|
|
302
278
|
new_coin_spends.append(spend_data.coin_spend)
|
|
279
|
+
new_bundle_coin_spends[coin_id] = spend_data
|
|
303
280
|
continue
|
|
304
281
|
# We're not the most recent version, so let's fast forward
|
|
305
282
|
new_coin_spend, patched_additions = perform_the_fast_forward(
|
|
@@ -307,9 +284,7 @@ class EligibleCoinSpends:
|
|
|
307
284
|
spend_data=spend_data,
|
|
308
285
|
fast_forward_spends=self.fast_forward_spends,
|
|
309
286
|
)
|
|
310
|
-
|
|
311
|
-
replaced_coin_ids.append(coin_id)
|
|
312
|
-
ff_bundle_coin_spends[new_coin_spend.coin.name()] = BundleCoinSpend(
|
|
287
|
+
new_bundle_coin_spends[new_coin_spend.coin.name()] = BundleCoinSpend(
|
|
313
288
|
coin_spend=new_coin_spend,
|
|
314
289
|
eligible_for_dedup=spend_data.eligible_for_dedup,
|
|
315
290
|
eligible_for_fast_forward=spend_data.eligible_for_fast_forward,
|
|
@@ -319,6 +294,7 @@ class EligibleCoinSpends:
|
|
|
319
294
|
# Update the list of coins spends that will make the new fast
|
|
320
295
|
# forward spend bundle
|
|
321
296
|
new_coin_spends.append(new_coin_spend)
|
|
297
|
+
fast_forwarded_spends += 1
|
|
322
298
|
# We're done here, moving on
|
|
323
299
|
continue
|
|
324
300
|
# We've added a ff spend with this puzzle hash before, so build on that
|
|
@@ -331,9 +307,7 @@ class EligibleCoinSpends:
|
|
|
331
307
|
spend_data=spend_data,
|
|
332
308
|
fast_forward_spends=self.fast_forward_spends,
|
|
333
309
|
)
|
|
334
|
-
|
|
335
|
-
replaced_coin_ids.append(coin_id)
|
|
336
|
-
ff_bundle_coin_spends[new_coin_spend.coin.name()] = BundleCoinSpend(
|
|
310
|
+
new_bundle_coin_spends[new_coin_spend.coin.name()] = BundleCoinSpend(
|
|
337
311
|
coin_spend=new_coin_spend,
|
|
338
312
|
eligible_for_dedup=spend_data.eligible_for_dedup,
|
|
339
313
|
eligible_for_fast_forward=spend_data.eligible_for_fast_forward,
|
|
@@ -342,9 +316,10 @@ class EligibleCoinSpends:
|
|
|
342
316
|
)
|
|
343
317
|
# Update the list of coins spends that make the new fast forward bundle
|
|
344
318
|
new_coin_spends.append(new_coin_spend)
|
|
345
|
-
|
|
319
|
+
fast_forwarded_spends += 1
|
|
320
|
+
if fast_forwarded_spends == 0:
|
|
346
321
|
# This item doesn't have any fast forward coins, nothing to do here
|
|
347
|
-
return
|
|
322
|
+
return new_bundle_coin_spends
|
|
348
323
|
# Update the mempool item after validating the new spend bundle
|
|
349
324
|
new_sb = SpendBundle(
|
|
350
325
|
coin_spends=new_coin_spends, aggregated_signature=mempool_item.spend_bundle.aggregated_signature
|
|
@@ -364,10 +339,4 @@ class EligibleCoinSpends:
|
|
|
364
339
|
raise ValueError(
|
|
365
340
|
"Mempool item became invalid after singleton fast forward with an unspecified error."
|
|
366
341
|
) # pragma: no cover
|
|
367
|
-
|
|
368
|
-
# Update bundle_coin_spends using the map of rebased singleton coin ID
|
|
369
|
-
# to coin spend and metadata.
|
|
370
|
-
for coin_id in replaced_coin_ids:
|
|
371
|
-
bundle_coin_spends.pop(coin_id, None)
|
|
372
|
-
bundle_coin_spends.update(ff_bundle_coin_spends)
|
|
373
|
-
return bundle_coin_spends
|
|
342
|
+
return new_bundle_coin_spends
|
chia/full_node/fee_estimator.py
CHANGED
|
@@ -5,7 +5,6 @@ from dataclasses import dataclass, field
|
|
|
5
5
|
|
|
6
6
|
from chia_rs.sized_ints import uint32, uint64
|
|
7
7
|
|
|
8
|
-
from chia.full_node.fee_estimate import FeeEstimate, FeeEstimateGroup, FeeEstimateV2, fee_estimate_v2_to_v1
|
|
9
8
|
from chia.full_node.fee_estimation import FeeMempoolInfo
|
|
10
9
|
from chia.full_node.fee_tracker import (
|
|
11
10
|
BucketResult,
|
|
@@ -14,6 +13,7 @@ from chia.full_node.fee_tracker import (
|
|
|
14
13
|
get_bucket_index,
|
|
15
14
|
get_estimate_time_intervals,
|
|
16
15
|
)
|
|
16
|
+
from chia.protocols.fee_estimate import FeeEstimate, FeeEstimateGroup, FeeEstimateV2, fee_estimate_v2_to_v1
|
|
17
17
|
from chia.types.fee_rate import FeeRate, FeeRateV2
|
|
18
18
|
|
|
19
19
|
|
|
@@ -11,32 +11,24 @@ from chia.types.fee_rate import FeeRateV2
|
|
|
11
11
|
class FeeEstimatorInterface(Protocol):
|
|
12
12
|
def new_block_height(self, block_height: uint32) -> None:
|
|
13
13
|
"""Called immediately when block height changes. Can be called multiple times before `new_block`"""
|
|
14
|
-
pass
|
|
15
14
|
|
|
16
15
|
def new_block(self, block_info: FeeBlockInfo) -> None:
|
|
17
16
|
"""A new transaction block has been added to the blockchain"""
|
|
18
|
-
pass
|
|
19
17
|
|
|
20
18
|
def add_mempool_item(self, mempool_item_info: FeeMempoolInfo, mempool_item: MempoolItemInfo) -> None:
|
|
21
19
|
"""A MempoolItem (transaction and associated info) has been added to the mempool"""
|
|
22
|
-
pass
|
|
23
20
|
|
|
24
21
|
def remove_mempool_item(self, mempool_info: FeeMempoolInfo, mempool_item: MempoolItemInfo) -> None:
|
|
25
22
|
"""A MempoolItem (transaction and associated info) has been removed from the mempool"""
|
|
26
|
-
pass
|
|
27
23
|
|
|
28
24
|
def estimate_fee_rate(self, *, time_offset_seconds: int) -> FeeRateV2:
|
|
29
25
|
"""time_offset_seconds: number of seconds into the future for which to estimate fee"""
|
|
30
|
-
pass
|
|
31
26
|
|
|
32
27
|
def mempool_size(self) -> CLVMCost:
|
|
33
28
|
"""Report last seen mempool size"""
|
|
34
|
-
pass
|
|
35
29
|
|
|
36
30
|
def mempool_max_size(self) -> CLVMCost:
|
|
37
31
|
"""Report current mempool max "size" (i.e. CLVM cost)"""
|
|
38
|
-
pass
|
|
39
32
|
|
|
40
33
|
def get_mempool_info(self) -> FeeMempoolInfo:
|
|
41
34
|
"""Report Mempool current configuration and state"""
|
|
42
|
-
pass
|
chia/full_node/fee_tracker.py
CHANGED
|
@@ -107,8 +107,8 @@ class FeeStat: # TxConfirmStats
|
|
|
107
107
|
my_type: str,
|
|
108
108
|
):
|
|
109
109
|
self.buckets = buckets
|
|
110
|
-
self.confirmed_average = [[] for _ in range(
|
|
111
|
-
self.failed_average = [[] for _ in range(
|
|
110
|
+
self.confirmed_average = [[] for _ in range(max_periods)]
|
|
111
|
+
self.failed_average = [[] for _ in range(max_periods)]
|
|
112
112
|
self.decay = decay
|
|
113
113
|
self.scale = scale
|
|
114
114
|
self.max_confirms = self.scale * len(self.confirmed_average)
|
|
@@ -117,18 +117,18 @@ class FeeStat: # TxConfirmStats
|
|
|
117
117
|
self.type = my_type
|
|
118
118
|
self.max_periods = max_periods
|
|
119
119
|
|
|
120
|
-
for i in range(
|
|
121
|
-
self.confirmed_average[i] = [0 for _ in range(
|
|
122
|
-
self.failed_average[i] = [0 for _ in range(
|
|
120
|
+
for i in range(max_periods):
|
|
121
|
+
self.confirmed_average[i] = [0 for _ in range(len(buckets))]
|
|
122
|
+
self.failed_average[i] = [0 for _ in range(len(buckets))]
|
|
123
123
|
|
|
124
|
-
self.tx_ct_avg = [0 for _ in range(
|
|
125
|
-
self.m_fee_rate_avg = [0 for _ in range(
|
|
124
|
+
self.tx_ct_avg = [0 for _ in range(len(buckets))]
|
|
125
|
+
self.m_fee_rate_avg = [0 for _ in range(len(buckets))]
|
|
126
126
|
|
|
127
|
-
self.unconfirmed_txs = [[] for _ in range(
|
|
128
|
-
for i in range(
|
|
129
|
-
self.unconfirmed_txs[i] = [0 for _ in range(
|
|
127
|
+
self.unconfirmed_txs = [[] for _ in range(self.max_confirms)]
|
|
128
|
+
for i in range(self.max_confirms):
|
|
129
|
+
self.unconfirmed_txs[i] = [0 for _ in range(len(buckets))]
|
|
130
130
|
|
|
131
|
-
self.old_unconfirmed_txs = [0 for _ in range(
|
|
131
|
+
self.old_unconfirmed_txs = [0 for _ in range(len(buckets))]
|
|
132
132
|
|
|
133
133
|
def tx_confirmed(self, blocks_to_confirm: int, item: MempoolItemInfo) -> None:
|
|
134
134
|
if blocks_to_confirm < 1:
|
|
@@ -147,8 +147,8 @@ class FeeStat: # TxConfirmStats
|
|
|
147
147
|
self.m_fee_rate_avg[bucket_index] += fee_rate
|
|
148
148
|
|
|
149
149
|
def update_moving_averages(self) -> None:
|
|
150
|
-
for j in range(
|
|
151
|
-
for i in range(
|
|
150
|
+
for j in range(len(self.buckets)):
|
|
151
|
+
for i in range(len(self.confirmed_average)):
|
|
152
152
|
self.confirmed_average[i][j] *= self.decay
|
|
153
153
|
self.failed_average[i][j] *= self.decay
|
|
154
154
|
|
|
@@ -156,7 +156,7 @@ class FeeStat: # TxConfirmStats
|
|
|
156
156
|
self.m_fee_rate_avg[j] *= self.decay
|
|
157
157
|
|
|
158
158
|
def clear_current(self, block_height: uint32) -> None:
|
|
159
|
-
for i in range(
|
|
159
|
+
for i in range(len(self.buckets)):
|
|
160
160
|
self.old_unconfirmed_txs[i] += self.unconfirmed_txs[block_height % len(self.unconfirmed_txs)][i]
|
|
161
161
|
self.unconfirmed_txs[block_height % len(self.unconfirmed_txs)][i] = 0
|
|
162
162
|
|
|
@@ -186,7 +186,7 @@ class FeeStat: # TxConfirmStats
|
|
|
186
186
|
|
|
187
187
|
if block_ago >= self.scale:
|
|
188
188
|
periods_ago = block_ago / self.scale
|
|
189
|
-
for i in range(
|
|
189
|
+
for i in range(len(self.failed_average)):
|
|
190
190
|
if i >= periods_ago:
|
|
191
191
|
break
|
|
192
192
|
self.failed_average[i][bucket_index] += 1
|
|
@@ -196,38 +196,38 @@ class FeeStat: # TxConfirmStats
|
|
|
196
196
|
str_confirmed_average: list[list[str]] = []
|
|
197
197
|
str_failed_average: list[list[str]] = []
|
|
198
198
|
str_m_fee_rate_avg: list[str] = []
|
|
199
|
-
for i in range(
|
|
199
|
+
for i in range(self.max_periods):
|
|
200
200
|
str_i_list_conf = []
|
|
201
|
-
for j in range(
|
|
201
|
+
for j in range(len(self.confirmed_average[i])):
|
|
202
202
|
str_i_list_conf.append(float.hex(float(self.confirmed_average[i][j])))
|
|
203
203
|
|
|
204
204
|
str_confirmed_average.append(str_i_list_conf)
|
|
205
205
|
|
|
206
206
|
str_i_list_fail = []
|
|
207
|
-
for j in range(
|
|
207
|
+
for j in range(len(self.failed_average[i])):
|
|
208
208
|
str_i_list_fail.append(float.hex(float(self.failed_average[i][j])))
|
|
209
209
|
|
|
210
210
|
str_failed_average.append(str_i_list_fail)
|
|
211
211
|
|
|
212
|
-
for i in range(
|
|
212
|
+
for i in range(len(self.tx_ct_avg)):
|
|
213
213
|
str_tx_ct_abg.append(float.hex(float(self.tx_ct_avg[i])))
|
|
214
214
|
|
|
215
|
-
for i in range(
|
|
215
|
+
for i in range(len(self.m_fee_rate_avg)):
|
|
216
216
|
str_m_fee_rate_avg.append(float.hex(float(self.m_fee_rate_avg[i])))
|
|
217
217
|
|
|
218
218
|
return FeeStatBackup(self.type, str_tx_ct_abg, str_confirmed_average, str_failed_average, str_m_fee_rate_avg)
|
|
219
219
|
|
|
220
220
|
def import_backup(self, backup: FeeStatBackup) -> None:
|
|
221
|
-
for i in range(
|
|
222
|
-
for j in range(
|
|
221
|
+
for i in range(self.max_periods):
|
|
222
|
+
for j in range(len(self.confirmed_average[i])):
|
|
223
223
|
self.confirmed_average[i][j] = float.fromhex(backup.confirmed_average[i][j])
|
|
224
|
-
for j in range(
|
|
224
|
+
for j in range(len(self.failed_average[i])):
|
|
225
225
|
self.failed_average[i][j] = float.fromhex(backup.failed_average[i][j])
|
|
226
226
|
|
|
227
|
-
for i in range(
|
|
227
|
+
for i in range(len(self.tx_ct_avg)):
|
|
228
228
|
self.tx_ct_avg[i] = float.fromhex(backup.tx_ct_avg[i])
|
|
229
229
|
|
|
230
|
-
for i in range(
|
|
230
|
+
for i in range(len(self.m_fee_rate_avg)):
|
|
231
231
|
self.m_fee_rate_avg[i] = float.fromhex(backup.m_fee_rate_avg[i])
|
|
232
232
|
|
|
233
233
|
# See TxConfirmStats::EstimateMedianVal in https://github.com/bitcoin/bitcoin/blob/master/src/policy/fees.cpp
|