chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__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/__init__.py +8 -4
- chia/_tests/blockchain/blockchain_test_utils.py +6 -8
- chia/_tests/blockchain/test_augmented_chain.py +4 -4
- chia/_tests/blockchain/test_blockchain.py +165 -190
- chia/_tests/blockchain/test_blockchain_transactions.py +5 -2
- chia/_tests/blockchain/test_build_chains.py +2 -4
- chia/_tests/blockchain/test_get_block_generator.py +2 -3
- chia/_tests/clvm/coin_store.py +4 -7
- chia/_tests/clvm/test_clvm_step.py +4 -4
- chia/_tests/clvm/test_puzzle_compression.py +2 -1
- chia/_tests/clvm/test_puzzle_drivers.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -4
- chia/_tests/clvm/test_spend_sim.py +2 -2
- chia/_tests/cmds/cmd_test_utils.py +27 -45
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_show.py +4 -4
- chia/_tests/cmds/test_tx_config_args.py +1 -2
- chia/_tests/cmds/testing_classes.py +4 -5
- chia/_tests/cmds/wallet/test_did.py +24 -27
- chia/_tests/cmds/wallet/test_nft.py +12 -10
- chia/_tests/cmds/wallet/test_vcs.py +11 -12
- chia/_tests/cmds/wallet/test_wallet.py +134 -89
- chia/_tests/conftest.py +66 -31
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_beta.py +4 -4
- chia/_tests/core/cmds/test_keys.py +2 -3
- chia/_tests/core/cmds/test_wallet.py +15 -15
- chia/_tests/core/consensus/test_pot_iterations.py +19 -73
- chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
- chia/_tests/core/daemon/test_daemon.py +11 -11
- chia/_tests/core/data_layer/conftest.py +2 -2
- chia/_tests/core/data_layer/test_data_rpc.py +28 -14
- chia/_tests/core/data_layer/test_data_store.py +10 -10
- chia/_tests/core/data_layer/util.py +11 -11
- chia/_tests/core/farmer/test_farmer_api.py +2 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
- chia/_tests/core/full_node/stores/test_block_store.py +5 -4
- chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
- chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +3 -4
- chia/_tests/core/full_node/test_conditions.py +21 -23
- chia/_tests/core/full_node/test_full_node.py +273 -70
- chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
- chia/_tests/core/full_node/test_hint_management.py +2 -4
- chia/_tests/core/full_node/test_performance.py +0 -1
- chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
- chia/_tests/core/full_node/test_transactions.py +1 -2
- chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
- chia/_tests/core/mempool/test_mempool.py +54 -50
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
- chia/_tests/core/mempool/test_mempool_manager.py +988 -854
- chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
- chia/_tests/core/server/serve.py +7 -7
- chia/_tests/core/server/test_dos.py +1 -2
- chia/_tests/core/server/test_event_loop.py +12 -4
- chia/_tests/core/server/test_loop.py +7 -8
- chia/_tests/core/server/test_rate_limits.py +9 -8
- chia/_tests/core/server/test_server.py +61 -1
- chia/_tests/core/services/test_services.py +2 -2
- chia/_tests/core/ssl/test_ssl.py +2 -2
- chia/_tests/core/test_cost_calculation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
- chia/_tests/core/test_filter.py +0 -1
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +1 -2
- chia/_tests/core/test_seeder.py +4 -4
- chia/_tests/core/util/test_config.py +4 -4
- chia/_tests/core/util/test_jsonify.py +2 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_lockfile.py +2 -1
- chia/_tests/core/util/test_log_exceptions.py +1 -2
- chia/_tests/core/util/test_streamable.py +17 -17
- chia/_tests/db/test_db_wrapper.py +3 -2
- chia/_tests/environments/wallet.py +14 -14
- chia/_tests/ether.py +4 -3
- chia/_tests/farmer_harvester/test_farmer.py +41 -24
- chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
- chia/_tests/harvester/test_harvester_api.py +11 -4
- chia/_tests/plot_sync/test_plot_sync.py +13 -11
- chia/_tests/plot_sync/test_receiver.py +11 -10
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +1 -2
- chia/_tests/plotting/test_plot_manager.py +7 -6
- chia/_tests/plotting/test_prover.py +30 -38
- chia/_tests/pools/test_pool_cmdline.py +4 -6
- chia/_tests/pools/test_pool_rpc.py +203 -61
- chia/_tests/pools/test_pool_wallet.py +3 -3
- chia/_tests/pools/test_wallet_pool_store.py +1 -4
- chia/_tests/process_junit.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +4 -4
- chia/_tests/rpc/test_rpc_server.py +3 -3
- chia/_tests/simulation/test_simulation.py +12 -25
- chia/_tests/solver/test_solver_service.py +13 -4
- chia/_tests/testconfig.py +2 -2
- chia/_tests/timelord/test_new_peak.py +22 -11
- chia/_tests/tools/test_run_block.py +0 -2
- chia/_tests/tools/test_virtual_project.py +2 -1
- chia/_tests/util/benchmarks.py +1 -0
- chia/_tests/util/blockchain.py +38 -36
- chia/_tests/util/blockchain_mock.py +11 -11
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/coin_store.py +2 -1
- chia/_tests/util/config.py +1 -1
- chia/_tests/util/db_connection.py +2 -3
- chia/_tests/util/full_sync.py +9 -11
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/get_name_puzzle_conditions.py +2 -0
- chia/_tests/util/misc.py +24 -24
- chia/_tests/util/network_protocol_data.py +20 -3
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +292 -3
- chia/_tests/util/setup_nodes.py +62 -47
- chia/_tests/util/spend_sim.py +57 -57
- chia/_tests/util/test_async_pool.py +2 -3
- chia/_tests/util/test_chia_version.py +1 -3
- chia/_tests/util/test_config.py +3 -3
- chia/_tests/util/test_full_block_utils.py +6 -3
- chia/_tests/util/test_limited_semaphore.py +1 -2
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_network.py +1 -2
- chia/_tests/util/test_priority_mutex.py +3 -3
- chia/_tests/util/test_recursive_replace.py +5 -6
- chia/_tests/util/test_replace_str_to_bytes.py +9 -10
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/time_out_assert.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
- chia/_tests/wallet/conftest.py +6 -6
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
- chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
- chia/_tests/wallet/did_wallet/test_did.py +16 -6
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
- chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
- chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
- chia/_tests/wallet/test_clvm_streamable.py +2 -3
- chia/_tests/wallet/test_coin_management.py +2 -2
- chia/_tests/wallet/test_conditions.py +45 -51
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
- chia/_tests/wallet/test_notifications.py +14 -14
- chia/_tests/wallet/test_signer_protocol.py +5 -5
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
- chia/_tests/wallet/test_transaction_store.py +20 -20
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +380 -228
- chia/_tests/wallet/test_wallet_action_scope.py +4 -4
- chia/_tests/wallet/test_wallet_blockchain.py +12 -12
- chia/_tests/wallet/test_wallet_coin_store.py +3 -4
- chia/_tests/wallet/test_wallet_node.py +16 -15
- chia/_tests/wallet/test_wallet_test_framework.py +2 -1
- chia/_tests/wallet/test_wallet_utils.py +2 -3
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
- chia/_tests/wallet/wallet_block_tools.py +12 -11
- chia/_tests/weight_proof/config.py +1 -0
- chia/_tests/weight_proof/test_weight_proof.py +5 -4
- chia/apis/__init__.py +21 -0
- chia/apis/farmer_stub.py +102 -0
- chia/apis/full_node_stub.py +374 -0
- chia/apis/harvester_stub.py +57 -0
- chia/apis/introducer_stub.py +35 -0
- chia/apis/solver_stub.py +30 -0
- chia/apis/stub_protocol_registry.py +21 -0
- chia/apis/timelord_stub.py +39 -0
- chia/apis/wallet_stub.py +161 -0
- chia/cmds/beta.py +3 -4
- chia/cmds/beta_funcs.py +4 -3
- chia/cmds/check_wallet_db.py +4 -4
- chia/cmds/chia.py +1 -2
- chia/cmds/cmd_classes.py +11 -13
- chia/cmds/cmd_helpers.py +11 -11
- chia/cmds/cmds_util.py +15 -15
- chia/cmds/coin_funcs.py +6 -7
- chia/cmds/coins.py +2 -3
- chia/cmds/configure.py +1 -2
- chia/cmds/data.py +42 -42
- chia/cmds/data_funcs.py +81 -81
- chia/cmds/db.py +4 -5
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev/data.py +4 -4
- chia/cmds/dev/gh.py +5 -5
- chia/cmds/dev/installers.py +2 -3
- chia/cmds/dev/mempool.py +3 -4
- chia/cmds/dev/mempool_funcs.py +4 -4
- chia/cmds/dev/sim.py +8 -8
- chia/cmds/dump_keyring.py +3 -3
- chia/cmds/farm.py +6 -8
- chia/cmds/farm_funcs.py +25 -24
- chia/cmds/init_funcs.py +4 -4
- chia/cmds/keys.py +16 -18
- chia/cmds/keys_funcs.py +36 -36
- chia/cmds/netspace.py +1 -3
- chia/cmds/netspace_funcs.py +1 -2
- chia/cmds/options.py +3 -2
- chia/cmds/param_types.py +17 -16
- chia/cmds/passphrase.py +6 -7
- chia/cmds/passphrase_funcs.py +11 -13
- chia/cmds/peer.py +1 -3
- chia/cmds/peer_funcs.py +3 -3
- chia/cmds/plotnft.py +6 -7
- chia/cmds/plotnft_funcs.py +37 -26
- chia/cmds/rpc.py +3 -3
- chia/cmds/show.py +3 -5
- chia/cmds/show_funcs.py +9 -9
- chia/cmds/sim_funcs.py +25 -26
- chia/cmds/solver.py +1 -3
- chia/cmds/solver_funcs.py +1 -2
- chia/cmds/start_funcs.py +2 -2
- chia/cmds/wallet.py +76 -81
- chia/cmds/wallet_funcs.py +206 -177
- chia/consensus/augmented_chain.py +6 -6
- chia/consensus/block_body_validation.py +19 -15
- chia/consensus/block_creation.py +25 -21
- chia/consensus/block_header_validation.py +27 -13
- chia/consensus/block_height_map.py +3 -6
- chia/consensus/block_height_map_protocol.py +2 -2
- chia/consensus/block_record.py +2 -4
- chia/consensus/blockchain.py +58 -40
- chia/consensus/blockchain_interface.py +7 -7
- chia/consensus/coin_store_protocol.py +5 -6
- chia/consensus/condition_tools.py +4 -4
- chia/consensus/cost_calculator.py +2 -3
- chia/consensus/default_constants.py +19 -13
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +3 -5
- chia/consensus/find_fork_point.py +2 -4
- chia/consensus/full_block_to_block_record.py +11 -13
- chia/consensus/generator_tools.py +2 -3
- chia/consensus/get_block_challenge.py +50 -26
- chia/consensus/get_block_generator.py +2 -3
- chia/consensus/make_sub_epoch_summary.py +8 -7
- chia/consensus/multiprocess_validation.py +31 -20
- chia/consensus/pos_quality.py +6 -23
- chia/consensus/pot_iterations.py +17 -44
- chia/consensus/signage_point.py +4 -5
- chia/consensus/vdf_info_computation.py +2 -4
- chia/daemon/client.py +8 -8
- chia/daemon/keychain_proxy.py +31 -37
- chia/daemon/server.py +32 -33
- chia/daemon/windows_signal.py +4 -3
- chia/data_layer/data_layer.py +86 -77
- chia/data_layer/data_layer_rpc_api.py +9 -9
- chia/data_layer/data_layer_rpc_client.py +13 -15
- chia/data_layer/data_layer_server.py +3 -3
- chia/data_layer/data_layer_util.py +14 -14
- chia/data_layer/data_layer_wallet.py +94 -101
- chia/data_layer/data_store.py +50 -50
- chia/data_layer/dl_wallet_store.py +9 -12
- chia/data_layer/download_data.py +8 -9
- chia/data_layer/s3_plugin_service.py +5 -9
- chia/data_layer/start_data_layer.py +5 -5
- chia/farmer/farmer.py +31 -31
- chia/farmer/farmer_api.py +45 -33
- chia/farmer/farmer_rpc_api.py +5 -4
- chia/farmer/farmer_rpc_client.py +6 -6
- chia/farmer/start_farmer.py +6 -6
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +239 -223
- chia/full_node/full_node_api.py +197 -152
- chia/full_node/full_node_rpc_api.py +34 -32
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hard_fork_utils.py +44 -0
- chia/full_node/hint_management.py +2 -2
- chia/full_node/mempool.py +17 -19
- chia/full_node/mempool_manager.py +89 -42
- chia/full_node/pending_tx_cache.py +2 -3
- chia/full_node/start_full_node.py +5 -5
- chia/full_node/sync_store.py +3 -4
- chia/full_node/tx_processing_queue.py +120 -36
- chia/full_node/weight_proof.py +61 -48
- chia/harvester/harvester.py +25 -24
- chia/harvester/harvester_api.py +61 -38
- chia/harvester/harvester_rpc_api.py +10 -10
- chia/harvester/start_harvester.py +4 -4
- chia/introducer/introducer.py +3 -3
- chia/introducer/introducer_api.py +6 -4
- chia/introducer/start_introducer.py +4 -4
- chia/legacy/keyring.py +3 -3
- chia/plot_sync/delta.py +1 -2
- chia/plot_sync/receiver.py +20 -17
- chia/plot_sync/sender.py +15 -10
- chia/plotters/bladebit.py +7 -7
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +4 -4
- chia/plotters/plotters.py +4 -4
- chia/plotters/plotters_util.py +3 -3
- chia/plotting/cache.py +20 -14
- chia/plotting/check_plots.py +26 -35
- chia/plotting/create_plots.py +22 -23
- chia/plotting/manager.py +21 -14
- chia/plotting/prover.py +59 -42
- chia/plotting/util.py +16 -16
- chia/pools/pool_config.py +2 -1
- chia/pools/pool_puzzles.py +11 -12
- chia/pools/pool_wallet.py +34 -57
- chia/pools/pool_wallet_info.py +39 -10
- chia/protocols/farmer_protocol.py +8 -9
- chia/protocols/fee_estimate.py +3 -4
- chia/protocols/full_node_protocol.py +3 -4
- chia/protocols/harvester_protocol.py +27 -15
- chia/protocols/outbound_message.py +3 -3
- chia/protocols/pool_protocol.py +8 -9
- chia/protocols/shared_protocol.py +1 -2
- chia/protocols/solver_protocol.py +9 -2
- chia/protocols/timelord_protocol.py +4 -7
- chia/protocols/wallet_protocol.py +11 -12
- chia/rpc/rpc_client.py +9 -9
- chia/rpc/rpc_server.py +17 -17
- chia/rpc/util.py +2 -2
- chia/seeder/crawler.py +8 -8
- chia/seeder/crawler_api.py +21 -27
- chia/seeder/crawler_rpc_api.py +2 -2
- chia/seeder/dns_server.py +21 -21
- chia/seeder/start_crawler.py +4 -4
- chia/server/address_manager.py +15 -16
- chia/server/api_protocol.py +11 -11
- chia/server/chia_policy.py +46 -26
- chia/server/introducer_peers.py +2 -3
- chia/server/node_discovery.py +19 -19
- chia/server/rate_limit_numbers.py +4 -5
- chia/server/rate_limits.py +4 -4
- chia/server/resolve_peer_info.py +4 -4
- chia/server/server.py +49 -52
- chia/server/signal_handlers.py +6 -6
- chia/server/start_service.py +17 -17
- chia/server/upnp.py +4 -6
- chia/server/ws_connection.py +52 -37
- chia/simulator/add_blocks_in_batches.py +1 -3
- chia/simulator/block_tools.py +312 -200
- chia/simulator/full_node_simulator.py +56 -35
- chia/simulator/keyring.py +2 -3
- chia/simulator/setup_services.py +15 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +4 -5
- chia/util/inline_executor.py +2 -1
- chia/util/ip_address.py +1 -2
- chia/util/keychain.py +25 -27
- chia/util/keyring_wrapper.py +18 -19
- chia/util/lock.py +3 -4
- chia/util/log_exceptions.py +1 -2
- chia/util/lru_cache.py +2 -2
- chia/util/network.py +6 -6
- chia/util/path.py +2 -3
- chia/util/priority_mutex.py +2 -2
- chia/util/profiler.py +1 -2
- chia/util/safe_cancel_task.py +1 -2
- chia/util/streamable.py +24 -10
- chia/util/task_referencer.py +1 -1
- chia/util/timing.py +3 -3
- chia/util/virtual_project_analysis.py +6 -5
- chia/util/ws_message.py +2 -2
- chia/wallet/cat_wallet/cat_info.py +3 -4
- chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
- chia/wallet/cat_wallet/cat_utils.py +3 -4
- chia/wallet/cat_wallet/cat_wallet.py +61 -83
- chia/wallet/cat_wallet/lineage_store.py +3 -4
- chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
- chia/wallet/coin_selection.py +9 -10
- chia/wallet/conditions.py +142 -106
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
- chia/wallet/derivation_record.py +1 -2
- chia/wallet/derive_keys.py +2 -4
- chia/wallet/did_wallet/did_info.py +10 -11
- chia/wallet/did_wallet/did_wallet.py +36 -82
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
- chia/wallet/driver_protocol.py +5 -7
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
- chia/wallet/nft_wallet/nft_info.py +8 -9
- chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
- chia/wallet/nft_wallet/nft_wallet.py +79 -116
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
- chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
- chia/wallet/nft_wallet/uncurry_nft.py +10 -11
- chia/wallet/notification_manager.py +3 -3
- chia/wallet/notification_store.py +44 -61
- chia/wallet/outer_puzzles.py +6 -7
- chia/wallet/puzzle_drivers.py +34 -6
- chia/wallet/puzzles/clawback/drivers.py +6 -6
- chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
- chia/wallet/puzzles/load_clvm.py +1 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
- chia/wallet/puzzles/singleton_top_layer.py +2 -3
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
- chia/wallet/puzzles/tails.py +3 -3
- chia/wallet/singleton.py +5 -7
- chia/wallet/singleton_record.py +3 -3
- chia/wallet/start_wallet.py +5 -5
- chia/wallet/trade_manager.py +37 -58
- chia/wallet/trade_record.py +4 -4
- chia/wallet/trading/offer.py +59 -46
- chia/wallet/trading/trade_store.py +8 -9
- chia/wallet/transaction_record.py +8 -8
- chia/wallet/uncurried_puzzle.py +1 -2
- chia/wallet/util/clvm_streamable.py +12 -12
- chia/wallet/util/compute_hints.py +4 -5
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +2 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/wallet/util/signing.py +85 -0
- chia/wallet/util/tx_config.py +15 -6
- chia/wallet/util/wallet_sync_utils.py +14 -16
- chia/wallet/util/wallet_types.py +2 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
- chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
- chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
- chia/wallet/vc_wallet/vc_drivers.py +27 -27
- chia/wallet/vc_wallet/vc_store.py +5 -6
- chia/wallet/vc_wallet/vc_wallet.py +33 -61
- chia/wallet/wallet.py +50 -78
- chia/wallet/wallet_action_scope.py +11 -11
- chia/wallet/wallet_blockchain.py +12 -12
- chia/wallet/wallet_coin_record.py +12 -6
- chia/wallet/wallet_coin_store.py +24 -25
- chia/wallet/wallet_interested_store.py +3 -5
- chia/wallet/wallet_nft_store.py +10 -11
- chia/wallet/wallet_node.py +53 -61
- chia/wallet/wallet_node_api.py +5 -3
- chia/wallet/wallet_protocol.py +23 -23
- chia/wallet/wallet_puzzle_store.py +15 -18
- chia/wallet/wallet_request_types.py +778 -114
- chia/wallet/wallet_retry_store.py +1 -3
- chia/wallet/wallet_rpc_api.py +572 -909
- chia/wallet/wallet_rpc_client.py +87 -279
- chia/wallet/wallet_singleton_store.py +3 -4
- chia/wallet/wallet_state_manager.py +332 -106
- chia/wallet/wallet_transaction_store.py +11 -14
- chia/wallet/wallet_user_store.py +4 -6
- chia/wallet/wallet_weight_proof_handler.py +4 -4
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
- chia/apis.py +0 -21
- chia/consensus/check_time_locks.py +0 -57
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
- chia/types/coin_record.py +0 -44
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
|
@@ -4,9 +4,8 @@ import asyncio
|
|
|
4
4
|
import contextlib
|
|
5
5
|
import functools
|
|
6
6
|
import logging
|
|
7
|
-
from collections.abc import Awaitable
|
|
7
|
+
from collections.abc import Awaitable, Callable
|
|
8
8
|
from dataclasses import dataclass
|
|
9
|
-
from typing import Callable, Optional
|
|
10
9
|
from unittest.mock import MagicMock
|
|
11
10
|
|
|
12
11
|
import pytest
|
|
@@ -26,7 +25,12 @@ from chiabip158 import PyBIP158
|
|
|
26
25
|
from colorlog import getLogger
|
|
27
26
|
|
|
28
27
|
from chia._tests.conftest import ConsensusMode
|
|
29
|
-
from chia._tests.connection_utils import
|
|
28
|
+
from chia._tests.connection_utils import (
|
|
29
|
+
add_dummy_connection,
|
|
30
|
+
connect_and_get_peer,
|
|
31
|
+
disconnect_all,
|
|
32
|
+
disconnect_all_and_reconnect,
|
|
33
|
+
)
|
|
30
34
|
from chia._tests.util.blockchain_mock import BlockchainMock
|
|
31
35
|
from chia._tests.util.misc import patch_request_handler, wallet_height_at_least
|
|
32
36
|
from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
|
|
@@ -111,7 +115,9 @@ async def test_request_block_headers(
|
|
|
111
115
|
assert [x.transactions_filter for x in bh] == [b"\x00"] * 6
|
|
112
116
|
|
|
113
117
|
num_blocks = 20
|
|
114
|
-
new_blocks = bt.get_consecutive_blocks(
|
|
118
|
+
new_blocks = bt.get_consecutive_blocks(
|
|
119
|
+
num_blocks, block_list_input=default_400_blocks, farmer_reward_puzzle_hash=ph
|
|
120
|
+
)
|
|
115
121
|
await add_blocks_in_batches(new_blocks, full_node_api.full_node)
|
|
116
122
|
msg = await full_node_api.request_block_headers(wallet_protocol.RequestBlockHeaders(uint32(110), uint32(115), True))
|
|
117
123
|
assert msg is not None
|
|
@@ -626,7 +632,7 @@ async def test_request_additions_errors(simulator_and_wallet: OldSimulatorsAndWa
|
|
|
626
632
|
|
|
627
633
|
await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
|
|
628
634
|
|
|
629
|
-
last_block:
|
|
635
|
+
last_block: BlockRecord | None = full_node_api.full_node.blockchain.get_peak()
|
|
630
636
|
assert last_block is not None
|
|
631
637
|
|
|
632
638
|
# Invalid height
|
|
@@ -675,7 +681,7 @@ async def test_request_additions_success(simulator_and_wallet: OldSimulatorsAndW
|
|
|
675
681
|
ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
676
682
|
|
|
677
683
|
full_node_api = full_nodes[0]
|
|
678
|
-
await
|
|
684
|
+
wallet_peer = await connect_and_get_peer(full_node_api.full_node.server, wallet_server, self_hostname)
|
|
679
685
|
|
|
680
686
|
for _ in range(2):
|
|
681
687
|
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
@@ -697,7 +703,7 @@ async def test_request_additions_success(simulator_and_wallet: OldSimulatorsAndW
|
|
|
697
703
|
)
|
|
698
704
|
[tx] = action_scope.side_effects.transactions
|
|
699
705
|
assert tx.spend_bundle is not None
|
|
700
|
-
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
|
|
706
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), wallet_peer)
|
|
701
707
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
702
708
|
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
703
709
|
|
|
@@ -917,7 +923,9 @@ async def test_dusted_wallet(
|
|
|
917
923
|
)
|
|
918
924
|
[tx] = action_scope.side_effects.transactions
|
|
919
925
|
assert tx.spend_bundle is not None
|
|
920
|
-
await full_node_api.
|
|
926
|
+
_, dummy_node_id = await add_dummy_connection(full_node_api.server, self_hostname, 12312)
|
|
927
|
+
dummy_peer = full_node_api.server.all_connections[dummy_node_id]
|
|
928
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
|
|
921
929
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
922
930
|
await full_node_api.wait_for_wallets_synced(wallet_nodes=[farm_wallet_node, dust_wallet_node], timeout=20)
|
|
923
931
|
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
@@ -984,7 +992,7 @@ async def test_dusted_wallet(
|
|
|
984
992
|
)
|
|
985
993
|
[tx] = action_scope.side_effects.transactions
|
|
986
994
|
assert tx.spend_bundle is not None
|
|
987
|
-
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
|
|
995
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
|
|
988
996
|
|
|
989
997
|
# advance the chain and sync both wallets
|
|
990
998
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
@@ -1007,7 +1015,7 @@ async def test_dusted_wallet(
|
|
|
1007
1015
|
)
|
|
1008
1016
|
[tx] = action_scope.side_effects.transactions
|
|
1009
1017
|
assert tx.spend_bundle is not None
|
|
1010
|
-
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
|
|
1018
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
|
|
1011
1019
|
|
|
1012
1020
|
# advance the chain and sync both wallets
|
|
1013
1021
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
@@ -1060,7 +1068,7 @@ async def test_dusted_wallet(
|
|
|
1060
1068
|
)
|
|
1061
1069
|
[tx] = action_scope.side_effects.transactions
|
|
1062
1070
|
assert tx.spend_bundle is not None
|
|
1063
|
-
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
|
|
1071
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
|
|
1064
1072
|
|
|
1065
1073
|
# advance the chain and sync both wallets
|
|
1066
1074
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
@@ -1104,7 +1112,7 @@ async def test_dusted_wallet(
|
|
|
1104
1112
|
)
|
|
1105
1113
|
[tx] = action_scope.side_effects.transactions
|
|
1106
1114
|
assert tx.spend_bundle is not None
|
|
1107
|
-
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
|
|
1115
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
|
|
1108
1116
|
|
|
1109
1117
|
# advance the chain and sync both wallets
|
|
1110
1118
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
@@ -1168,7 +1176,7 @@ async def test_dusted_wallet(
|
|
|
1168
1176
|
)
|
|
1169
1177
|
[tx] = action_scope.side_effects.transactions
|
|
1170
1178
|
assert tx.spend_bundle is not None
|
|
1171
|
-
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
|
|
1179
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
|
|
1172
1180
|
|
|
1173
1181
|
# advance the chain and sync both wallets
|
|
1174
1182
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
@@ -1209,7 +1217,7 @@ async def test_dusted_wallet(
|
|
|
1209
1217
|
)
|
|
1210
1218
|
[tx] = action_scope.side_effects.transactions
|
|
1211
1219
|
assert tx.spend_bundle is not None
|
|
1212
|
-
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
|
|
1220
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
|
|
1213
1221
|
|
|
1214
1222
|
# advance the chain and sync both wallets
|
|
1215
1223
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
@@ -1258,7 +1266,7 @@ async def test_dusted_wallet(
|
|
|
1258
1266
|
)
|
|
1259
1267
|
[tx] = action_scope.side_effects.transactions
|
|
1260
1268
|
assert tx.spend_bundle is not None
|
|
1261
|
-
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
|
|
1269
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
|
|
1262
1270
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
1263
1271
|
await full_node_api.wait_for_wallets_synced(wallet_nodes=[farm_wallet_node, dust_wallet_node], timeout=20)
|
|
1264
1272
|
await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
|
|
@@ -1277,7 +1285,7 @@ async def test_dusted_wallet(
|
|
|
1277
1285
|
)
|
|
1278
1286
|
[tx] = action_scope.side_effects.transactions
|
|
1279
1287
|
assert tx.spend_bundle is not None
|
|
1280
|
-
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
|
|
1288
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
|
|
1281
1289
|
|
|
1282
1290
|
# advance the chain and sync both wallets
|
|
1283
1291
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
@@ -1312,7 +1320,7 @@ async def test_dusted_wallet(
|
|
|
1312
1320
|
)
|
|
1313
1321
|
[tx] = action_scope.side_effects.transactions
|
|
1314
1322
|
assert tx.spend_bundle is not None
|
|
1315
|
-
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
|
|
1323
|
+
await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
|
|
1316
1324
|
|
|
1317
1325
|
# advance the chain and sync both wallets
|
|
1318
1326
|
await full_node_api.wait_transaction_records_entered_mempool([tx])
|
|
@@ -1431,10 +1439,10 @@ async def test_retry_store(
|
|
|
1431
1439
|
|
|
1432
1440
|
def flaky_get_coin_state(
|
|
1433
1441
|
flakiness_info: FlakinessInfo,
|
|
1434
|
-
func: Callable[[list[bytes32], WSChiaConnection,
|
|
1435
|
-
) -> Callable[[list[bytes32], WSChiaConnection,
|
|
1442
|
+
func: Callable[[list[bytes32], WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]],
|
|
1443
|
+
) -> Callable[[list[bytes32], WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]]:
|
|
1436
1444
|
async def new_func(
|
|
1437
|
-
coin_names: list[bytes32], peer: WSChiaConnection, fork_height:
|
|
1445
|
+
coin_names: list[bytes32], peer: WSChiaConnection, fork_height: uint32 | None = None
|
|
1438
1446
|
) -> list[CoinState]:
|
|
1439
1447
|
if flakiness_info.coin_state_flaky:
|
|
1440
1448
|
flakiness_info.coin_state_flaky = False
|
|
@@ -1447,10 +1455,10 @@ async def test_retry_store(
|
|
|
1447
1455
|
request_puzzle_solution_failure_tested = False
|
|
1448
1456
|
|
|
1449
1457
|
def flaky_request_puzzle_solution(
|
|
1450
|
-
func: Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[
|
|
1451
|
-
) -> Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[
|
|
1458
|
+
func: Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Message | None]],
|
|
1459
|
+
) -> Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Message | None]]:
|
|
1452
1460
|
@functools.wraps(func)
|
|
1453
|
-
async def new_func(self: FullNodeAPI, request: wallet_protocol.RequestPuzzleSolution) ->
|
|
1461
|
+
async def new_func(self: FullNodeAPI, request: wallet_protocol.RequestPuzzleSolution) -> Message | None:
|
|
1454
1462
|
nonlocal request_puzzle_solution_failure_tested
|
|
1455
1463
|
if not request_puzzle_solution_failure_tested:
|
|
1456
1464
|
request_puzzle_solution_failure_tested = True
|
|
@@ -1464,10 +1472,10 @@ async def test_retry_store(
|
|
|
1464
1472
|
|
|
1465
1473
|
def flaky_fetch_children(
|
|
1466
1474
|
flakiness_info: FlakinessInfo,
|
|
1467
|
-
func: Callable[[bytes32, WSChiaConnection,
|
|
1468
|
-
) -> Callable[[bytes32, WSChiaConnection,
|
|
1475
|
+
func: Callable[[bytes32, WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]],
|
|
1476
|
+
) -> Callable[[bytes32, WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]]:
|
|
1469
1477
|
async def new_func(
|
|
1470
|
-
coin_name: bytes32, peer: WSChiaConnection, fork_height:
|
|
1478
|
+
coin_name: bytes32, peer: WSChiaConnection, fork_height: uint32 | None = None
|
|
1471
1479
|
) -> list[CoinState]:
|
|
1472
1480
|
if flakiness_info.fetch_children_flaky:
|
|
1473
1481
|
flakiness_info.fetch_children_flaky = False
|
|
@@ -1490,9 +1498,9 @@ async def test_retry_store(
|
|
|
1490
1498
|
return new_func
|
|
1491
1499
|
|
|
1492
1500
|
def flaky_info_for_puzhash(
|
|
1493
|
-
flakiness_info: FlakinessInfo, func: Callable[[bytes32], Awaitable[
|
|
1494
|
-
) -> Callable[[bytes32], Awaitable[
|
|
1495
|
-
async def new_func(puzzle_hash: bytes32) ->
|
|
1501
|
+
flakiness_info: FlakinessInfo, func: Callable[[bytes32], Awaitable[WalletIdentifier | None]]
|
|
1502
|
+
) -> Callable[[bytes32], Awaitable[WalletIdentifier | None]]:
|
|
1503
|
+
async def new_func(puzzle_hash: bytes32) -> WalletIdentifier | None:
|
|
1496
1504
|
if flakiness_info.db_flaky:
|
|
1497
1505
|
flakiness_info.db_flaky = False
|
|
1498
1506
|
raise AIOSqliteError
|
|
@@ -1605,7 +1613,7 @@ async def test_bad_peak_mismatch(
|
|
|
1605
1613
|
full_node_protocol.RespondProofOfWeight(wp, wp.recent_chain_data[-1].header_hash),
|
|
1606
1614
|
)
|
|
1607
1615
|
with monkeypatch.context() as m:
|
|
1608
|
-
f: asyncio.Future[
|
|
1616
|
+
f: asyncio.Future[Message | None] = asyncio.Future()
|
|
1609
1617
|
f.set_result(wp_msg)
|
|
1610
1618
|
m.setattr(full_node_api, "request_proof_of_weight", MagicMock(return_value=f))
|
|
1611
1619
|
|
|
@@ -1614,7 +1622,7 @@ async def test_bad_peak_mismatch(
|
|
|
1614
1622
|
ProtocolMessageTypes.respond_block_header,
|
|
1615
1623
|
wallet_protocol.RespondBlockHeader(wp.recent_chain_data[-1]),
|
|
1616
1624
|
)
|
|
1617
|
-
f2: asyncio.Future[
|
|
1625
|
+
f2: asyncio.Future[Message | None] = asyncio.Future()
|
|
1618
1626
|
f2.set_result(header_block_msg)
|
|
1619
1627
|
m.setattr(full_node_api, "request_block_header", MagicMock(return_value=f2))
|
|
1620
1628
|
|
|
@@ -1638,7 +1646,7 @@ async def test_bad_peak_mismatch(
|
|
|
1638
1646
|
async def test_long_sync_untrusted_break(
|
|
1639
1647
|
setup_two_nodes_and_wallet: OldSimulatorsAndWallets,
|
|
1640
1648
|
default_1000_blocks: list[FullBlock],
|
|
1641
|
-
|
|
1649
|
+
default_1500_blocks: list[FullBlock],
|
|
1642
1650
|
self_hostname: str,
|
|
1643
1651
|
caplog: pytest.LogCaptureFixture,
|
|
1644
1652
|
use_delta_sync: bool,
|
|
@@ -1649,27 +1657,16 @@ async def test_long_sync_untrusted_break(
|
|
|
1649
1657
|
wallet_node.config["trusted_peers"] = {trusted_full_node_server.node_id.hex(): None}
|
|
1650
1658
|
wallet_node.config["use_delta_sync"] = use_delta_sync
|
|
1651
1659
|
|
|
1652
|
-
sync_canceled = False
|
|
1653
|
-
|
|
1654
1660
|
async def register_for_ph_updates(
|
|
1655
1661
|
self: object,
|
|
1656
1662
|
request: wallet_protocol.RegisterForPhUpdates,
|
|
1657
1663
|
peer: WSChiaConnection,
|
|
1658
1664
|
) -> None:
|
|
1659
|
-
|
|
1660
|
-
# Just sleep a long time here to simulate a long-running untrusted sync
|
|
1661
|
-
try:
|
|
1662
|
-
await asyncio.sleep(120)
|
|
1663
|
-
except Exception:
|
|
1664
|
-
sync_canceled = True
|
|
1665
|
-
raise
|
|
1665
|
+
await peer.wait_until_closed()
|
|
1666
1666
|
|
|
1667
1667
|
def wallet_syncing() -> bool:
|
|
1668
1668
|
return wallet_node.wallet_state_manager.sync_mode
|
|
1669
1669
|
|
|
1670
|
-
def check_sync_canceled() -> bool:
|
|
1671
|
-
return sync_canceled
|
|
1672
|
-
|
|
1673
1670
|
def synced_to_trusted() -> bool:
|
|
1674
1671
|
return trusted_full_node_server.node_id in wallet_node.synced_peers
|
|
1675
1672
|
|
|
@@ -1678,26 +1675,32 @@ async def test_long_sync_untrusted_break(
|
|
|
1678
1675
|
untrusted_peers = sum(not wallet_node.is_trusted(peer) for peer in wallet_server.all_connections.values())
|
|
1679
1676
|
return trusted_peers == 1 and untrusted_peers == 0
|
|
1680
1677
|
|
|
1681
|
-
await add_blocks_in_batches(
|
|
1682
|
-
|
|
1683
|
-
await add_blocks_in_batches(default_1000_blocks[:400], untrusted_full_node_api.full_node)
|
|
1678
|
+
await add_blocks_in_batches(default_1500_blocks[:600], trusted_full_node_api.full_node)
|
|
1679
|
+
await add_blocks_in_batches(default_1000_blocks[:600], untrusted_full_node_api.full_node)
|
|
1684
1680
|
|
|
1685
|
-
with
|
|
1681
|
+
with (
|
|
1682
|
+
patch_request_handler(api=untrusted_full_node_api, handler=register_for_ph_updates),
|
|
1683
|
+
caplog.at_level(logging.INFO),
|
|
1684
|
+
):
|
|
1686
1685
|
# Connect to the untrusted peer and wait until the long sync started
|
|
1687
|
-
await wallet_server.start_client(PeerInfo(self_hostname, untrusted_full_node_server.get_port()), None)
|
|
1686
|
+
assert await wallet_server.start_client(PeerInfo(self_hostname, untrusted_full_node_server.get_port()), None)
|
|
1687
|
+
untrusted_conn = wallet_server.all_connections.get(untrusted_full_node_server.node_id)
|
|
1688
|
+
assert untrusted_conn is not None
|
|
1688
1689
|
await time_out_assert(30, wallet_syncing)
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1690
|
+
|
|
1691
|
+
# Connect to the trusted peer and make sure the running untrusted long sync gets interrupted via disconnect
|
|
1692
|
+
assert await wallet_server.start_client(PeerInfo(self_hostname, trusted_full_node_server.get_port()), None)
|
|
1693
|
+
await time_out_assert(600, wallet_height_at_least, True, wallet_node, 599)
|
|
1694
|
+
await time_out_assert(10, synced_to_trusted)
|
|
1695
|
+
assert untrusted_full_node_server.node_id not in wallet_node.synced_peers
|
|
1696
|
+
|
|
1697
|
+
assert "Connected to a synced trusted peer, disconnecting from all untrusted nodes." in caplog.text
|
|
1698
|
+
assert (
|
|
1699
|
+
f"Connection closed: {untrusted_conn.peer_info.host}, node id: {untrusted_full_node_server.node_id}"
|
|
1700
|
+
in caplog.text
|
|
1701
|
+
)
|
|
1699
1702
|
# And that we only have a trusted peer left
|
|
1700
|
-
|
|
1703
|
+
await time_out_assert(30, only_trusted_peer)
|
|
1701
1704
|
|
|
1702
1705
|
|
|
1703
1706
|
@pytest.mark.anyio
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
import pytest
|
|
7
6
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -77,14 +76,14 @@ def test_nested_serialization() -> None:
|
|
|
77
76
|
@streamable
|
|
78
77
|
@dataclasses.dataclass(frozen=True)
|
|
79
78
|
class Compound(Streamable):
|
|
80
|
-
optional:
|
|
79
|
+
optional: BasicCLVMStreamable | None
|
|
81
80
|
list: list[BasicCLVMStreamable]
|
|
82
81
|
|
|
83
82
|
|
|
84
83
|
@clvm_streamable
|
|
85
84
|
@dataclasses.dataclass(frozen=True)
|
|
86
85
|
class CompoundCLVM(Streamable):
|
|
87
|
-
optional:
|
|
86
|
+
optional: BasicCLVMStreamable | None
|
|
88
87
|
list: list[BasicCLVMStreamable]
|
|
89
88
|
|
|
90
89
|
|
|
@@ -66,8 +66,8 @@ def test_list_parsing(id: ValueAndArgs, show_unconfirmed: ValueAndArgs, paginate
|
|
|
66
66
|
{
|
|
67
67
|
"num_environments": 1,
|
|
68
68
|
"blocks_needed": [3], # 6 coins to test pagination
|
|
69
|
-
"reuse_puzhash": True, #
|
|
70
|
-
"trusted": True, #
|
|
69
|
+
"reuse_puzhash": True, # irrelevant
|
|
70
|
+
"trusted": True, # irrelevant
|
|
71
71
|
}
|
|
72
72
|
],
|
|
73
73
|
indirect=True,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Any
|
|
4
|
+
from typing import Any
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -214,11 +214,9 @@ def test_unknown_condition() -> None:
|
|
|
214
214
|
],
|
|
215
215
|
)
|
|
216
216
|
def test_announcement_inversions(
|
|
217
|
-
drivers:
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
tuple[type[CreateAnnouncement], type[AssertAnnouncement]],
|
|
221
|
-
],
|
|
217
|
+
drivers: tuple[type[CreateCoinAnnouncement], type[AssertCoinAnnouncement]]
|
|
218
|
+
| tuple[type[CreatePuzzleAnnouncement], type[AssertPuzzleAnnouncement]]
|
|
219
|
+
| tuple[type[CreateAnnouncement], type[AssertAnnouncement]],
|
|
222
220
|
) -> None:
|
|
223
221
|
create_driver, assert_driver = drivers
|
|
224
222
|
# mypy is not smart enough to understand that this `if` narrows down the potential types it could be
|
|
@@ -250,7 +248,7 @@ def test_announcement_inversions(
|
|
|
250
248
|
class TimelockInfo:
|
|
251
249
|
drivers: list[Condition]
|
|
252
250
|
parsed_info: ConditionValidTimes
|
|
253
|
-
conditions_after:
|
|
251
|
+
conditions_after: list[Condition] | None = None
|
|
254
252
|
|
|
255
253
|
|
|
256
254
|
@pytest.mark.parametrize(
|
|
@@ -285,9 +283,7 @@ class TimelockInfo:
|
|
|
285
283
|
],
|
|
286
284
|
)
|
|
287
285
|
def test_timelock_parsing(timelock_info: TimelockInfo) -> None:
|
|
288
|
-
assert timelock_info.parsed_info == parse_timelock_info(
|
|
289
|
-
[UnknownCondition(Program.to(None), []), *timelock_info.drivers]
|
|
290
|
-
)
|
|
286
|
+
assert timelock_info.parsed_info == parse_timelock_info([UnknownCondition(Program.NIL, []), *timelock_info.drivers])
|
|
291
287
|
assert timelock_info.parsed_info.to_conditions() == (
|
|
292
288
|
timelock_info.conditions_after if timelock_info.conditions_after is not None else timelock_info.drivers
|
|
293
289
|
)
|
|
@@ -349,47 +345,45 @@ def test_timelock_parsing(timelock_info: TimelockInfo) -> None:
|
|
|
349
345
|
)
|
|
350
346
|
def test_invalid_condition(
|
|
351
347
|
cond: type[
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
ReceiveMessage,
|
|
392
|
-
]
|
|
348
|
+
AggSigParent
|
|
349
|
+
| AggSigPuzzle
|
|
350
|
+
| AggSigAmount
|
|
351
|
+
| AggSigPuzzleAmount
|
|
352
|
+
| AggSigParentAmount
|
|
353
|
+
| AggSigParentPuzzle
|
|
354
|
+
| AggSigUnsafe
|
|
355
|
+
| AggSigMe
|
|
356
|
+
| CreateCoin
|
|
357
|
+
| ReserveFee
|
|
358
|
+
| AssertCoinAnnouncement
|
|
359
|
+
| CreateCoinAnnouncement
|
|
360
|
+
| AssertPuzzleAnnouncement
|
|
361
|
+
| CreatePuzzleAnnouncement
|
|
362
|
+
| AssertConcurrentSpend
|
|
363
|
+
| AssertConcurrentPuzzle
|
|
364
|
+
| AssertMyCoinID
|
|
365
|
+
| AssertMyParentID
|
|
366
|
+
| AssertMyPuzzleHash
|
|
367
|
+
| AssertMyAmount
|
|
368
|
+
| AssertMyBirthSeconds
|
|
369
|
+
| AssertMyBirthHeight
|
|
370
|
+
| AssertSecondsRelative
|
|
371
|
+
| AssertSecondsAbsolute
|
|
372
|
+
| AssertHeightRelative
|
|
373
|
+
| AssertHeightAbsolute
|
|
374
|
+
| AssertBeforeSecondsRelative
|
|
375
|
+
| AssertBeforeSecondsAbsolute
|
|
376
|
+
| AssertBeforeHeightRelative
|
|
377
|
+
| AssertBeforeHeightAbsolute
|
|
378
|
+
| Softfork
|
|
379
|
+
| Remark
|
|
380
|
+
| UnknownCondition
|
|
381
|
+
| AggSig
|
|
382
|
+
| CreateAnnouncement
|
|
383
|
+
| AssertAnnouncement
|
|
384
|
+
| Timelock
|
|
385
|
+
| SendMessage
|
|
386
|
+
| ReceiveMessage
|
|
393
387
|
],
|
|
394
388
|
prg: bytes,
|
|
395
389
|
) -> None:
|
|
@@ -50,7 +50,7 @@ def test_debug_spend_bundle(capsys: pytest.CaptureFixture[str]) -> None:
|
|
|
50
50
|
make_spend(
|
|
51
51
|
coin_bad_reveal,
|
|
52
52
|
ACS,
|
|
53
|
-
Program.
|
|
53
|
+
Program.NIL,
|
|
54
54
|
),
|
|
55
55
|
make_spend(
|
|
56
56
|
coin,
|
|
@@ -60,7 +60,7 @@ def test_debug_spend_bundle(capsys: pytest.CaptureFixture[str]) -> None:
|
|
|
60
60
|
make_spend(
|
|
61
61
|
child_coin,
|
|
62
62
|
ACS,
|
|
63
|
-
Program.
|
|
63
|
+
Program.NIL,
|
|
64
64
|
),
|
|
65
65
|
],
|
|
66
66
|
sig,
|
|
@@ -5,10 +5,9 @@ from collections import OrderedDict
|
|
|
5
5
|
from collections.abc import AsyncGenerator
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
from random import Random
|
|
8
|
-
from typing import Optional
|
|
9
8
|
|
|
10
9
|
import pytest
|
|
11
|
-
from chia_rs import AugSchemeMPL, Coin, CoinSpend, CoinState, Program, SpendBundle
|
|
10
|
+
from chia_rs import AugSchemeMPL, Coin, CoinRecord, CoinSpend, CoinState, Program, SpendBundle
|
|
12
11
|
from chia_rs.sized_bytes import bytes32
|
|
13
12
|
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
|
|
14
13
|
|
|
@@ -26,7 +25,6 @@ from chia.simulator import simulator_protocol
|
|
|
26
25
|
from chia.simulator.block_tools import BlockTools
|
|
27
26
|
from chia.simulator.full_node_simulator import FullNodeSimulator
|
|
28
27
|
from chia.simulator.start_simulator import SimulatorFullNodeService
|
|
29
|
-
from chia.types.coin_record import CoinRecord
|
|
30
28
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
31
29
|
from chia.util.hash import std_hash
|
|
32
30
|
from chia.wallet.wallet_service import WalletService
|
|
@@ -621,14 +619,14 @@ async def test_request_puzzle_state_limit(one_node: OneNode, self_hostname: str)
|
|
|
621
619
|
class PuzzleStateData:
|
|
622
620
|
coin_states: list[CoinState]
|
|
623
621
|
end_of_batch: bool
|
|
624
|
-
previous_height:
|
|
622
|
+
previous_height: uint32 | None
|
|
625
623
|
header_hash: bytes32
|
|
626
624
|
|
|
627
625
|
|
|
628
626
|
async def sync_puzzle_hashes(
|
|
629
627
|
puzzle_hashes: list[bytes32],
|
|
630
628
|
*,
|
|
631
|
-
initial_previous_height:
|
|
629
|
+
initial_previous_height: uint32 | None,
|
|
632
630
|
initial_header_hash: bytes32,
|
|
633
631
|
filters: wallet_protocol.CoinStateFilters,
|
|
634
632
|
subscribe_when_finished: bool = False,
|
|
@@ -835,7 +833,7 @@ async def raw_mpu_setup(one_node: OneNode, self_hostname: str, no_capability: bo
|
|
|
835
833
|
for coin, hint in new_coins:
|
|
836
834
|
solution = Program.to([[]])
|
|
837
835
|
bundle = SpendBundle([CoinSpend(coin, puzzle, solution)], AugSchemeMPL.aggregate([]))
|
|
838
|
-
tx_resp = await simulator.send_transaction(wallet_protocol.SendTransaction(bundle))
|
|
836
|
+
tx_resp = await simulator.send_transaction(wallet_protocol.SendTransaction(bundle), peer)
|
|
839
837
|
assert tx_resp is not None
|
|
840
838
|
|
|
841
839
|
ack = wallet_protocol.TransactionAck.from_bytes(tx_resp.data)
|
|
@@ -893,11 +891,13 @@ async def subscribe_puzzle(
|
|
|
893
891
|
assert len(response.coin_states) == existing_coin_states
|
|
894
892
|
|
|
895
893
|
|
|
896
|
-
async def spend_coin(
|
|
894
|
+
async def spend_coin(
|
|
895
|
+
simulator: FullNodeSimulator, peer: WSChiaConnection, coin: Coin, solution: Program | None = None
|
|
896
|
+
) -> bytes32:
|
|
897
897
|
bundle = SpendBundle(
|
|
898
898
|
[CoinSpend(coin, IDENTITY_PUZZLE, Program.to([]) if solution is None else solution)], AugSchemeMPL.aggregate([])
|
|
899
899
|
)
|
|
900
|
-
tx_resp = await simulator.send_transaction(wallet_protocol.SendTransaction(bundle))
|
|
900
|
+
tx_resp = await simulator.send_transaction(wallet_protocol.SendTransaction(bundle), peer)
|
|
901
901
|
assert tx_resp is not None
|
|
902
902
|
|
|
903
903
|
ack = wallet_protocol.TransactionAck.from_bytes(tx_resp.data)
|
|
@@ -917,7 +917,7 @@ async def test_spent_coin_id_mempool_update(mpu_setup: Mpu) -> None:
|
|
|
917
917
|
# Make a coin and spend it
|
|
918
918
|
coin, _ = await make_coin(simulator.full_node)
|
|
919
919
|
await subscribe_coin(simulator, coin.name(), peer)
|
|
920
|
-
transaction_id = await spend_coin(simulator, coin)
|
|
920
|
+
transaction_id = await spend_coin(simulator, peer, coin)
|
|
921
921
|
|
|
922
922
|
# We should have gotten a mempool update for this transaction
|
|
923
923
|
await assert_mempool_added(queue, {transaction_id})
|
|
@@ -944,7 +944,7 @@ async def test_spent_puzzle_hash_mempool_update(mpu_setup: Mpu) -> None:
|
|
|
944
944
|
# Make a coin and spend it
|
|
945
945
|
coin, _ = await make_coin(simulator.full_node)
|
|
946
946
|
await subscribe_puzzle(simulator, coin.puzzle_hash, peer)
|
|
947
|
-
transaction_id = await spend_coin(simulator, coin)
|
|
947
|
+
transaction_id = await spend_coin(simulator, peer, coin)
|
|
948
948
|
|
|
949
949
|
# We should have gotten a mempool update for this transaction
|
|
950
950
|
await assert_mempool_added(queue, {transaction_id})
|
|
@@ -971,7 +971,7 @@ async def test_spent_hint_mempool_update(mpu_setup: Mpu) -> None:
|
|
|
971
971
|
# Make a coin and spend it
|
|
972
972
|
coin, hint = await make_coin(simulator.full_node)
|
|
973
973
|
await subscribe_puzzle(simulator, hint, peer)
|
|
974
|
-
transaction_id = await spend_coin(simulator, coin)
|
|
974
|
+
transaction_id = await spend_coin(simulator, peer, coin)
|
|
975
975
|
|
|
976
976
|
# We should have gotten a mempool update for this transaction
|
|
977
977
|
await assert_mempool_added(queue, {transaction_id})
|
|
@@ -1000,7 +1000,7 @@ async def test_created_coin_id_mempool_update(mpu_setup: Mpu) -> None:
|
|
|
1000
1000
|
child_coin = Coin(coin.name(), std_hash(b"new puzzle hash"), coin.amount)
|
|
1001
1001
|
await subscribe_coin(simulator, child_coin.name(), peer, existing_coin_states=0)
|
|
1002
1002
|
transaction_id = await spend_coin(
|
|
1003
|
-
simulator, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount]])
|
|
1003
|
+
simulator, peer, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount]])
|
|
1004
1004
|
)
|
|
1005
1005
|
|
|
1006
1006
|
# We should have gotten a mempool update for this transaction
|
|
@@ -1030,7 +1030,7 @@ async def test_created_puzzle_hash_mempool_update(mpu_setup: Mpu) -> None:
|
|
|
1030
1030
|
child_coin = Coin(coin.name(), std_hash(b"new puzzle hash"), coin.amount)
|
|
1031
1031
|
await subscribe_puzzle(simulator, child_coin.puzzle_hash, peer, existing_coin_states=0)
|
|
1032
1032
|
transaction_id = await spend_coin(
|
|
1033
|
-
simulator, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount]])
|
|
1033
|
+
simulator, peer, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount]])
|
|
1034
1034
|
)
|
|
1035
1035
|
|
|
1036
1036
|
# We should have gotten a mempool update for this transaction
|
|
@@ -1061,7 +1061,7 @@ async def test_created_hint_mempool_update(mpu_setup: Mpu) -> None:
|
|
|
1061
1061
|
hint = std_hash(b"new hint")
|
|
1062
1062
|
await subscribe_puzzle(simulator, hint, peer, existing_coin_states=0)
|
|
1063
1063
|
transaction_id = await spend_coin(
|
|
1064
|
-
simulator, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount, [hint]]])
|
|
1064
|
+
simulator, peer, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount, [hint]]])
|
|
1065
1065
|
)
|
|
1066
1066
|
|
|
1067
1067
|
# We should have gotten a mempool update for this transaction
|
|
@@ -1089,7 +1089,7 @@ async def test_missing_capability_coin_id(mpu_setup_no_capability: Mpu) -> None:
|
|
|
1089
1089
|
# Make a coin and spend it
|
|
1090
1090
|
coin, _ = await make_coin(simulator.full_node)
|
|
1091
1091
|
await subscribe_coin(simulator, coin.name(), peer)
|
|
1092
|
-
transaction_id = await spend_coin(simulator, coin)
|
|
1092
|
+
transaction_id = await spend_coin(simulator, peer, coin)
|
|
1093
1093
|
|
|
1094
1094
|
# There is no mempool update for this transaction since the peer doesn't have the capability
|
|
1095
1095
|
assert queue.empty()
|
|
@@ -1114,7 +1114,7 @@ async def test_missing_capability_puzzle_hash(mpu_setup_no_capability: Mpu) -> N
|
|
|
1114
1114
|
# Make a coin and spend it
|
|
1115
1115
|
coin, _ = await make_coin(simulator.full_node)
|
|
1116
1116
|
await subscribe_puzzle(simulator, coin.puzzle_hash, peer)
|
|
1117
|
-
transaction_id = await spend_coin(simulator, coin)
|
|
1117
|
+
transaction_id = await spend_coin(simulator, peer, coin)
|
|
1118
1118
|
|
|
1119
1119
|
# There is no mempool update for this transaction since the peer doesn't have the capability
|
|
1120
1120
|
assert queue.empty()
|
|
@@ -1139,7 +1139,7 @@ async def test_missing_capability_hint(mpu_setup_no_capability: Mpu) -> None:
|
|
|
1139
1139
|
# Make a coin and spend it
|
|
1140
1140
|
coin, hint = await make_coin(simulator.full_node)
|
|
1141
1141
|
await subscribe_puzzle(simulator, hint, peer)
|
|
1142
|
-
transaction_id = await spend_coin(simulator, coin)
|
|
1142
|
+
transaction_id = await spend_coin(simulator, peer, coin)
|
|
1143
1143
|
|
|
1144
1144
|
# There is no mempool update for this transaction since the peer doesn't have the capability
|
|
1145
1145
|
assert queue.empty()
|