chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__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_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 +59 -30
- 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 +225 -62
- 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 +109 -25
- chia/_tests/core/mempool/test_mempool.py +29 -37
- 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 +963 -839
- 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 +8 -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 +43 -47
- 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 +4 -6
- 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 +14 -14
- 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 +372 -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 +16 -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 +42 -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 +238 -224
- chia/full_node/full_node_api.py +193 -150
- chia/full_node/full_node_rpc_api.py +53 -31
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- 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 +34 -13
- 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 +3 -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 +22 -8
- 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 +120 -105
- 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.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
- 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.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
chia/data_layer/data_layer.py
CHANGED
|
@@ -12,7 +12,7 @@ import time
|
|
|
12
12
|
import traceback
|
|
13
13
|
from collections.abc import AsyncIterator, Awaitable
|
|
14
14
|
from pathlib import Path
|
|
15
|
-
from typing import TYPE_CHECKING, Any, ClassVar,
|
|
15
|
+
from typing import TYPE_CHECKING, Any, ClassVar, cast, final
|
|
16
16
|
|
|
17
17
|
import aiohttp
|
|
18
18
|
from chia_rs.datalayer import ProofOfInclusion, ProofOfInclusionLayer
|
|
@@ -61,12 +61,15 @@ from chia.server.ws_connection import WSChiaConnection
|
|
|
61
61
|
from chia.util.async_pool import Job, QueuedAsyncPool
|
|
62
62
|
from chia.util.path import path_from_root
|
|
63
63
|
from chia.util.task_referencer import create_referenced_task
|
|
64
|
+
from chia.wallet.puzzle_drivers import Solver
|
|
64
65
|
from chia.wallet.trade_record import TradeRecord
|
|
65
66
|
from chia.wallet.trading.offer import Offer as TradingOffer
|
|
66
67
|
from chia.wallet.transaction_record import TransactionRecord
|
|
67
68
|
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
68
69
|
from chia.wallet.wallet_request_types import (
|
|
70
|
+
CancelOffer,
|
|
69
71
|
CreateNewDL,
|
|
72
|
+
CreateOfferForIDs,
|
|
70
73
|
DLDeleteMirror,
|
|
71
74
|
DLGetMirrors,
|
|
72
75
|
DLHistory,
|
|
@@ -77,8 +80,10 @@ from chia.wallet.wallet_request_types import (
|
|
|
77
80
|
DLUpdateMultiple,
|
|
78
81
|
DLUpdateMultipleUpdates,
|
|
79
82
|
DLUpdateRoot,
|
|
83
|
+
GetOffer,
|
|
80
84
|
LauncherRootPair,
|
|
81
85
|
LogIn,
|
|
86
|
+
TakeOffer,
|
|
82
87
|
)
|
|
83
88
|
from chia.wallet.wallet_rpc_client import WalletRpcClient
|
|
84
89
|
|
|
@@ -129,14 +134,14 @@ class DataLayer:
|
|
|
129
134
|
maximum_full_file_count: int
|
|
130
135
|
server_files_location: Path
|
|
131
136
|
unsubscribe_data_queue: list[UnsubscribeData]
|
|
132
|
-
_server:
|
|
137
|
+
_server: ChiaServer | None = None
|
|
133
138
|
none_bytes: bytes32 = bytes32.zeros
|
|
134
139
|
initialized: bool = False
|
|
135
|
-
_data_store:
|
|
136
|
-
state_changed_callback:
|
|
140
|
+
_data_store: DataStore | None = None
|
|
141
|
+
state_changed_callback: StateChangedProtocol | None = None
|
|
137
142
|
_shut_down: bool = False
|
|
138
|
-
periodically_manage_data_task:
|
|
139
|
-
_wallet_rpc:
|
|
143
|
+
periodically_manage_data_task: asyncio.Task[None] | None = None
|
|
144
|
+
_wallet_rpc: WalletRpcClient | None = None
|
|
140
145
|
subscription_lock: asyncio.Lock = dataclasses.field(default_factory=asyncio.Lock)
|
|
141
146
|
subscription_update_concurrency: int = 5
|
|
142
147
|
client_timeout: aiohttp.ClientTimeout = dataclasses.field(
|
|
@@ -179,7 +184,7 @@ class DataLayer:
|
|
|
179
184
|
wallet_rpc_init: Awaitable[WalletRpcClient],
|
|
180
185
|
downloaders: list[PluginRemote],
|
|
181
186
|
uploaders: list[PluginRemote], # dont add FilesystemUploader to this, it is the default uploader
|
|
182
|
-
name:
|
|
187
|
+
name: str | None = None,
|
|
183
188
|
) -> DataLayer:
|
|
184
189
|
if name == "":
|
|
185
190
|
# TODO: If no code depends on "" counting as 'unspecified' then we do not
|
|
@@ -225,7 +230,7 @@ class DataLayer:
|
|
|
225
230
|
|
|
226
231
|
@contextlib.asynccontextmanager
|
|
227
232
|
async def manage(self) -> AsyncIterator[None]:
|
|
228
|
-
sql_log_path:
|
|
233
|
+
sql_log_path: Path | None = None
|
|
229
234
|
if self.config.get("log_sqlite_cmds", False):
|
|
230
235
|
sql_log_path = path_from_root(self.root_path, "log/data_sql.log")
|
|
231
236
|
self.log.info(f"logging SQL commands to {sql_log_path}")
|
|
@@ -264,7 +269,7 @@ class DataLayer:
|
|
|
264
269
|
async def on_connect(self, connection: WSChiaConnection) -> None:
|
|
265
270
|
pass
|
|
266
271
|
|
|
267
|
-
def get_connections(self, request_node_type:
|
|
272
|
+
def get_connections(self, request_node_type: NodeType | None) -> list[dict[str, Any]]:
|
|
268
273
|
return default_get_connections(server=self.server, request_node_type=request_node_type)
|
|
269
274
|
|
|
270
275
|
def set_server(self, server: ChiaServer) -> None:
|
|
@@ -292,7 +297,7 @@ class DataLayer:
|
|
|
292
297
|
changelist: list[dict[str, Any]],
|
|
293
298
|
fee: uint64,
|
|
294
299
|
submit_on_chain: bool = True,
|
|
295
|
-
) ->
|
|
300
|
+
) -> TransactionRecord | None:
|
|
296
301
|
status = Status.PENDING if submit_on_chain else Status.PENDING_BATCH
|
|
297
302
|
await self.batch_insert(store_id=store_id, changelist=changelist, status=status)
|
|
298
303
|
|
|
@@ -302,7 +307,7 @@ class DataLayer:
|
|
|
302
307
|
return None
|
|
303
308
|
|
|
304
309
|
async def _get_publishable_root_hash(self, store_id: bytes32) -> bytes32:
|
|
305
|
-
pending_root:
|
|
310
|
+
pending_root: Root | None = await self.data_store.get_pending_root(store_id=store_id)
|
|
306
311
|
if pending_root is None:
|
|
307
312
|
raise Exception("Latest root is already confirmed.")
|
|
308
313
|
if pending_root.status == Status.PENDING_BATCH:
|
|
@@ -348,7 +353,7 @@ class DataLayer:
|
|
|
348
353
|
) -> TransactionRecord:
|
|
349
354
|
await self._update_confirmation_status(store_id=store_id)
|
|
350
355
|
|
|
351
|
-
pending_root:
|
|
356
|
+
pending_root: Root | None = await self.data_store.get_pending_root(store_id=store_id)
|
|
352
357
|
if pending_root is None:
|
|
353
358
|
raise Exception("Latest root is already confirmed.")
|
|
354
359
|
if pending_root.status == Status.PENDING:
|
|
@@ -376,12 +381,12 @@ class DataLayer:
|
|
|
376
381
|
store_id: bytes32,
|
|
377
382
|
changelist: list[dict[str, Any]],
|
|
378
383
|
status: Status = Status.PENDING,
|
|
379
|
-
enable_batch_autoinsert:
|
|
384
|
+
enable_batch_autoinsert: bool | None = None,
|
|
380
385
|
) -> bytes32:
|
|
381
386
|
await self._update_confirmation_status(store_id=store_id)
|
|
382
387
|
|
|
383
388
|
async with self.data_store.transaction():
|
|
384
|
-
pending_root:
|
|
389
|
+
pending_root: Root | None = await self.data_store.get_pending_root(store_id=store_id)
|
|
385
390
|
if pending_root is not None and pending_root.status == Status.PENDING:
|
|
386
391
|
raise Exception("Already have a pending root waiting for confirmation.")
|
|
387
392
|
|
|
@@ -428,7 +433,7 @@ class DataLayer:
|
|
|
428
433
|
self,
|
|
429
434
|
store_id: bytes32,
|
|
430
435
|
key: bytes,
|
|
431
|
-
root_hash:
|
|
436
|
+
root_hash: bytes32 | Unspecified = unspecified,
|
|
432
437
|
) -> bytes32:
|
|
433
438
|
await self._update_confirmation_status(store_id=store_id)
|
|
434
439
|
|
|
@@ -436,9 +441,7 @@ class DataLayer:
|
|
|
436
441
|
node = await self.data_store.get_node_by_key(store_id=store_id, key=key, root_hash=root_hash)
|
|
437
442
|
return node.hash
|
|
438
443
|
|
|
439
|
-
async def get_value(
|
|
440
|
-
self, store_id: bytes32, key: bytes, root_hash: Union[bytes32, Unspecified] = unspecified
|
|
441
|
-
) -> bytes:
|
|
444
|
+
async def get_value(self, store_id: bytes32, key: bytes, root_hash: bytes32 | Unspecified = unspecified) -> bytes:
|
|
442
445
|
await self._update_confirmation_status(store_id=store_id)
|
|
443
446
|
|
|
444
447
|
async with self.data_store.transaction():
|
|
@@ -449,7 +452,7 @@ class DataLayer:
|
|
|
449
452
|
async def get_keys_values(
|
|
450
453
|
self,
|
|
451
454
|
store_id: bytes32,
|
|
452
|
-
root_hash:
|
|
455
|
+
root_hash: bytes32 | Unspecified,
|
|
453
456
|
) -> list[TerminalNode]:
|
|
454
457
|
await self._update_confirmation_status(store_id=store_id)
|
|
455
458
|
|
|
@@ -461,9 +464,9 @@ class DataLayer:
|
|
|
461
464
|
async def get_keys_values_paginated(
|
|
462
465
|
self,
|
|
463
466
|
store_id: bytes32,
|
|
464
|
-
root_hash:
|
|
467
|
+
root_hash: bytes32 | Unspecified,
|
|
465
468
|
page: int,
|
|
466
|
-
max_page_size:
|
|
469
|
+
max_page_size: int | None = None,
|
|
467
470
|
) -> KeysValuesPaginationData:
|
|
468
471
|
await self._update_confirmation_status(store_id=store_id)
|
|
469
472
|
|
|
@@ -472,7 +475,7 @@ class DataLayer:
|
|
|
472
475
|
res = await self.data_store.get_keys_values_paginated(store_id, page, max_page_size, root_hash)
|
|
473
476
|
return res
|
|
474
477
|
|
|
475
|
-
async def get_keys(self, store_id: bytes32, root_hash:
|
|
478
|
+
async def get_keys(self, store_id: bytes32, root_hash: bytes32 | Unspecified) -> list[bytes]:
|
|
476
479
|
await self._update_confirmation_status(store_id=store_id)
|
|
477
480
|
|
|
478
481
|
res = await self.data_store.get_keys(store_id, root_hash)
|
|
@@ -481,9 +484,9 @@ class DataLayer:
|
|
|
481
484
|
async def get_keys_paginated(
|
|
482
485
|
self,
|
|
483
486
|
store_id: bytes32,
|
|
484
|
-
root_hash:
|
|
487
|
+
root_hash: bytes32 | Unspecified,
|
|
485
488
|
page: int,
|
|
486
|
-
max_page_size:
|
|
489
|
+
max_page_size: int | None = None,
|
|
487
490
|
) -> KeysPaginationData:
|
|
488
491
|
await self._update_confirmation_status(store_id=store_id)
|
|
489
492
|
|
|
@@ -500,13 +503,13 @@ class DataLayer:
|
|
|
500
503
|
self.log.error("Failed to get ancestors")
|
|
501
504
|
return res
|
|
502
505
|
|
|
503
|
-
async def get_root(self, store_id: bytes32) ->
|
|
506
|
+
async def get_root(self, store_id: bytes32) -> SingletonRecord | None:
|
|
504
507
|
latest = (await self.wallet_rpc.dl_latest_singleton(DLLatestSingleton(store_id, True))).singleton
|
|
505
508
|
if latest is None:
|
|
506
509
|
self.log.error(f"Failed to get root for {store_id.hex()}")
|
|
507
510
|
return latest
|
|
508
511
|
|
|
509
|
-
async def get_local_root(self, store_id: bytes32) ->
|
|
512
|
+
async def get_local_root(self, store_id: bytes32) -> bytes32 | None:
|
|
510
513
|
await self._update_confirmation_status(store_id=store_id)
|
|
511
514
|
|
|
512
515
|
res = await self.data_store.get_tree_root(store_id=store_id)
|
|
@@ -520,7 +523,7 @@ class DataLayer:
|
|
|
520
523
|
if records is None:
|
|
521
524
|
self.log.error(f"Failed to get root history for {store_id.hex()}")
|
|
522
525
|
root_history = []
|
|
523
|
-
prev:
|
|
526
|
+
prev: SingletonRecord | None = None
|
|
524
527
|
for record in records:
|
|
525
528
|
if prev is None or record.root != prev.root:
|
|
526
529
|
root_history.append(record)
|
|
@@ -688,7 +691,7 @@ class DataLayer:
|
|
|
688
691
|
)
|
|
689
692
|
self.log.info(f"Successfully written full tree filename {filename_full_tree}.")
|
|
690
693
|
|
|
691
|
-
async def get_downloader(self, store_id: bytes32, url: str) ->
|
|
694
|
+
async def get_downloader(self, store_id: bytes32, url: str) -> PluginRemote | None:
|
|
692
695
|
request_json = {"store_id": store_id.hex(), "url": url}
|
|
693
696
|
for d in self.downloaders:
|
|
694
697
|
async with aiohttp.ClientSession() as session:
|
|
@@ -787,7 +790,7 @@ class DataLayer:
|
|
|
787
790
|
publish_generation -= 1
|
|
788
791
|
root = await self.data_store.get_tree_root(store_id=store_id, generation=publish_generation)
|
|
789
792
|
|
|
790
|
-
async def add_missing_files(self, store_id: bytes32, overwrite: bool, foldername:
|
|
793
|
+
async def add_missing_files(self, store_id: bytes32, overwrite: bool, foldername: Path | None) -> None:
|
|
791
794
|
root = await self.data_store.get_tree_root(store_id=store_id)
|
|
792
795
|
latest_generation = root.generation
|
|
793
796
|
full_tree_first_publish_generation = max(0, latest_generation - self.maximum_full_file_count + 1)
|
|
@@ -937,7 +940,7 @@ class DataLayer:
|
|
|
937
940
|
hash_1: bytes32,
|
|
938
941
|
hash_2: bytes32,
|
|
939
942
|
page: int,
|
|
940
|
-
max_page_size:
|
|
943
|
+
max_page_size: int | None = None,
|
|
941
944
|
) -> KVDiffPaginationData:
|
|
942
945
|
if max_page_size is None:
|
|
943
946
|
max_page_size = 40 * 1024 * 1024
|
|
@@ -1148,34 +1151,38 @@ class DataLayer:
|
|
|
1148
1151
|
async with self.data_store.transaction():
|
|
1149
1152
|
our_store_proofs = await self.process_offered_stores(offer_stores=maker)
|
|
1150
1153
|
|
|
1151
|
-
offer_dict: dict[
|
|
1152
|
-
**{offer_store.store_id.hex(): -1 for offer_store in maker},
|
|
1153
|
-
**{offer_store.store_id.hex(): 1 for offer_store in taker},
|
|
1154
|
+
offer_dict: dict[str, str] = {
|
|
1155
|
+
**{offer_store.store_id.hex(): "-1" for offer_store in maker},
|
|
1156
|
+
**{offer_store.store_id.hex(): "1" for offer_store in taker},
|
|
1154
1157
|
}
|
|
1155
1158
|
|
|
1156
|
-
solver
|
|
1157
|
-
|
|
1158
|
-
"
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
"
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1159
|
+
solver = Solver(
|
|
1160
|
+
{
|
|
1161
|
+
"0x" + our_offer_store.store_id.hex(): {
|
|
1162
|
+
"new_root": "0x" + our_store_proofs[our_offer_store.store_id].proofs[0].root().hex(),
|
|
1163
|
+
"dependencies": [
|
|
1164
|
+
{
|
|
1165
|
+
"launcher_id": "0x" + their_offer_store.store_id.hex(),
|
|
1166
|
+
"values_to_prove": [
|
|
1167
|
+
"0x" + leaf_hash(key=entry.key, value=entry.value).hex()
|
|
1168
|
+
for entry in their_offer_store.inclusions
|
|
1169
|
+
],
|
|
1170
|
+
}
|
|
1171
|
+
for their_offer_store in taker
|
|
1172
|
+
],
|
|
1173
|
+
}
|
|
1174
|
+
for our_offer_store in maker
|
|
1169
1175
|
}
|
|
1170
|
-
|
|
1171
|
-
}
|
|
1176
|
+
)
|
|
1172
1177
|
|
|
1173
1178
|
res = await self.wallet_rpc.create_offer_for_ids(
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
+
CreateOfferForIDs(
|
|
1180
|
+
offer=offer_dict,
|
|
1181
|
+
solver=solver,
|
|
1182
|
+
driver_dict={},
|
|
1183
|
+
fee=fee,
|
|
1184
|
+
validate_only=False,
|
|
1185
|
+
),
|
|
1179
1186
|
# TODO: probably shouldn't be default but due to peculiarities in the RPC, we're using a stop gap.
|
|
1180
1187
|
# This is not a change in behavior, the default was already implicit.
|
|
1181
1188
|
tx_config=DEFAULT_TX_CONFIG,
|
|
@@ -1235,22 +1242,26 @@ class DataLayer:
|
|
|
1235
1242
|
)
|
|
1236
1243
|
)
|
|
1237
1244
|
|
|
1238
|
-
solver
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
"
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1245
|
+
solver = Solver(
|
|
1246
|
+
{
|
|
1247
|
+
"proofs_of_inclusion": proofs_of_inclusion,
|
|
1248
|
+
**{
|
|
1249
|
+
"0x" + our_offer_store.store_id.hex(): {
|
|
1250
|
+
"new_root": "0x" + root.hex(),
|
|
1251
|
+
"dependencies": [
|
|
1252
|
+
{
|
|
1253
|
+
"launcher_id": "0x" + their_offer_store.store_id.hex(),
|
|
1254
|
+
"values_to_prove": [
|
|
1255
|
+
"0x" + entry.node_hash.hex() for entry in their_offer_store.proofs
|
|
1256
|
+
],
|
|
1257
|
+
}
|
|
1258
|
+
for their_offer_store in maker
|
|
1259
|
+
],
|
|
1260
|
+
}
|
|
1261
|
+
for our_offer_store in taker
|
|
1262
|
+
},
|
|
1263
|
+
}
|
|
1264
|
+
)
|
|
1254
1265
|
|
|
1255
1266
|
# Excluding wallet from transaction since failures in the wallet may occur
|
|
1256
1267
|
# after the transaction is submitted to the chain. If we roll back data we
|
|
@@ -1258,9 +1269,7 @@ class DataLayer:
|
|
|
1258
1269
|
|
|
1259
1270
|
trade_record = (
|
|
1260
1271
|
await self.wallet_rpc.take_offer(
|
|
1261
|
-
offer=offer,
|
|
1262
|
-
solver=solver,
|
|
1263
|
-
fee=fee,
|
|
1272
|
+
TakeOffer(offer=offer.to_bech32(), solver=solver, fee=fee, push=True),
|
|
1264
1273
|
# TODO: probably shouldn't be default but due to peculiarities in the RPC, we're using a stop gap.
|
|
1265
1274
|
# This is not a change in behavior, the default was already implicit.
|
|
1266
1275
|
tx_config=DEFAULT_TX_CONFIG,
|
|
@@ -1273,15 +1282,15 @@ class DataLayer:
|
|
|
1273
1282
|
store_ids: list[bytes32] = []
|
|
1274
1283
|
|
|
1275
1284
|
if not secure:
|
|
1276
|
-
trade_record =
|
|
1285
|
+
trade_record = (
|
|
1286
|
+
await self.wallet_rpc.get_offer(GetOffer(trade_id=trade_id, file_contents=True))
|
|
1287
|
+
).trade_record
|
|
1277
1288
|
trading_offer = TradingOffer.from_bytes(trade_record.offer)
|
|
1278
1289
|
summary = await DataLayerWallet.get_offer_summary(offer=trading_offer)
|
|
1279
|
-
store_ids = [
|
|
1290
|
+
store_ids = [offered.launcher_id for offered in summary.offered]
|
|
1280
1291
|
|
|
1281
1292
|
await self.wallet_rpc.cancel_offer(
|
|
1282
|
-
trade_id=trade_id,
|
|
1283
|
-
secure=secure,
|
|
1284
|
-
fee=fee,
|
|
1293
|
+
CancelOffer(trade_id=trade_id, secure=secure, fee=fee, push=True),
|
|
1285
1294
|
# TODO: probably shouldn't be default but due to peculiarities in the RPC, we're using a stop gap.
|
|
1286
1295
|
# This is not a change in behavior, the default was already implicit.
|
|
1287
1296
|
tx_config=DEFAULT_TX_CONFIG,
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import TYPE_CHECKING, Any, ClassVar,
|
|
5
|
+
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
|
6
6
|
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
8
8
|
from chia_rs.sized_ints import uint8, uint64
|
|
@@ -137,7 +137,7 @@ class DataLayerRpcApi:
|
|
|
137
137
|
"/verify_proof": self.verify_proof,
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
async def _state_changed(self, change: str, change_data:
|
|
140
|
+
async def _state_changed(self, change: str, change_data: dict[str, Any] | None) -> list[WsRpcMessage]:
|
|
141
141
|
return []
|
|
142
142
|
|
|
143
143
|
async def wallet_log_in(self, request: dict[str, Any]) -> EndpointResult:
|
|
@@ -168,8 +168,8 @@ class DataLayerRpcApi:
|
|
|
168
168
|
store_id = bytes32.from_hexstr(request["id"])
|
|
169
169
|
key = hexstr_to_bytes(request["key"])
|
|
170
170
|
# NOTE: being outside the rpc, this retains the none-means-unspecified semantics
|
|
171
|
-
root_hash:
|
|
172
|
-
resolved_root_hash:
|
|
171
|
+
root_hash: str | None = request.get("root_hash")
|
|
172
|
+
resolved_root_hash: bytes32 | Unspecified
|
|
173
173
|
if root_hash is not None:
|
|
174
174
|
resolved_root_hash = bytes32.from_hexstr(root_hash)
|
|
175
175
|
else:
|
|
@@ -185,10 +185,10 @@ class DataLayerRpcApi:
|
|
|
185
185
|
async def get_keys(self, request: dict[str, Any]) -> EndpointResult:
|
|
186
186
|
store_id = bytes32.from_hexstr(request["id"])
|
|
187
187
|
# NOTE: being outside the rpc, this retains the none-means-unspecified semantics
|
|
188
|
-
root_hash:
|
|
188
|
+
root_hash: str | None = request.get("root_hash")
|
|
189
189
|
page = request.get("page", None)
|
|
190
190
|
max_page_size = request.get("max_page_size", None)
|
|
191
|
-
resolved_root_hash:
|
|
191
|
+
resolved_root_hash: bytes32 | Unspecified
|
|
192
192
|
if root_hash is not None:
|
|
193
193
|
resolved_root_hash = bytes32.from_hexstr(root_hash)
|
|
194
194
|
else:
|
|
@@ -222,10 +222,10 @@ class DataLayerRpcApi:
|
|
|
222
222
|
async def get_keys_values(self, request: dict[str, Any]) -> EndpointResult:
|
|
223
223
|
store_id = bytes32.from_hexstr(request["id"])
|
|
224
224
|
# NOTE: being outside the rpc, this retains the none-means-unspecified semantics
|
|
225
|
-
root_hash:
|
|
225
|
+
root_hash: str | None = request.get("root_hash")
|
|
226
226
|
page = request.get("page", None)
|
|
227
227
|
max_page_size = request.get("max_page_size", None)
|
|
228
|
-
resolved_root_hash:
|
|
228
|
+
resolved_root_hash: bytes32 | Unspecified
|
|
229
229
|
if root_hash is not None:
|
|
230
230
|
resolved_root_hash = bytes32.from_hexstr(root_hash)
|
|
231
231
|
else:
|
|
@@ -445,7 +445,7 @@ class DataLayerRpcApi:
|
|
|
445
445
|
subscriptions: list[Subscription] = await self.service.get_subscriptions()
|
|
446
446
|
ids_bytes = [subscription.store_id for subscription in subscriptions]
|
|
447
447
|
overwrite = request.get("overwrite", False)
|
|
448
|
-
foldername:
|
|
448
|
+
foldername: Path | None = None
|
|
449
449
|
if "foldername" in request:
|
|
450
450
|
foldername = Path(request["foldername"])
|
|
451
451
|
for store_id in ids_bytes:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import Any
|
|
4
|
+
from typing import Any
|
|
5
5
|
|
|
6
6
|
from chia_rs.sized_bytes import bytes32
|
|
7
7
|
from chia_rs.sized_ints import uint64
|
|
@@ -11,7 +11,7 @@ from chia.rpc.rpc_client import RpcClient
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class DataLayerRpcClient(RpcClient):
|
|
14
|
-
async def create_data_store(self, fee:
|
|
14
|
+
async def create_data_store(self, fee: uint64 | None, verbose: bool) -> dict[str, Any]:
|
|
15
15
|
response = await self.fetch("create_data_store", {"fee": fee, "verbose": verbose})
|
|
16
16
|
return response
|
|
17
17
|
|
|
@@ -20,7 +20,7 @@ class DataLayerRpcClient(RpcClient):
|
|
|
20
20
|
response = await self.fetch("wallet_log_in", request)
|
|
21
21
|
return response
|
|
22
22
|
|
|
23
|
-
async def get_value(self, store_id: bytes32, key: bytes, root_hash:
|
|
23
|
+
async def get_value(self, store_id: bytes32, key: bytes, root_hash: bytes32 | None) -> dict[str, Any]:
|
|
24
24
|
request: dict[str, Any] = {"id": store_id.hex(), "key": key.hex()}
|
|
25
25
|
if root_hash is not None:
|
|
26
26
|
request["root_hash"] = root_hash.hex()
|
|
@@ -28,7 +28,7 @@ class DataLayerRpcClient(RpcClient):
|
|
|
28
28
|
return response
|
|
29
29
|
|
|
30
30
|
async def update_data_store(
|
|
31
|
-
self, store_id: bytes32, changelist: list[dict[str, str]], fee:
|
|
31
|
+
self, store_id: bytes32, changelist: list[dict[str, str]], fee: uint64 | None, submit_on_chain: bool = True
|
|
32
32
|
) -> dict[str, Any]:
|
|
33
33
|
response = await self.fetch(
|
|
34
34
|
"batch_update",
|
|
@@ -42,7 +42,7 @@ class DataLayerRpcClient(RpcClient):
|
|
|
42
42
|
return response
|
|
43
43
|
|
|
44
44
|
async def update_multiple_stores(
|
|
45
|
-
self, store_updates: list[dict[str, Any]], fee:
|
|
45
|
+
self, store_updates: list[dict[str, Any]], fee: uint64 | None, submit_on_chain: bool = True
|
|
46
46
|
) -> dict[str, Any]:
|
|
47
47
|
response = await self.fetch(
|
|
48
48
|
"multistore_batch_update",
|
|
@@ -54,16 +54,16 @@ class DataLayerRpcClient(RpcClient):
|
|
|
54
54
|
)
|
|
55
55
|
return response
|
|
56
56
|
|
|
57
|
-
async def submit_pending_root(self, store_id: bytes32, fee:
|
|
57
|
+
async def submit_pending_root(self, store_id: bytes32, fee: uint64 | None) -> dict[str, Any]:
|
|
58
58
|
response = await self.fetch("submit_pending_root", {"id": store_id.hex(), "fee": fee})
|
|
59
59
|
return response
|
|
60
60
|
|
|
61
|
-
async def submit_all_pending_roots(self, fee:
|
|
61
|
+
async def submit_all_pending_roots(self, fee: uint64 | None) -> dict[str, Any]:
|
|
62
62
|
response = await self.fetch("submit_all_pending_roots", {"fee": fee})
|
|
63
63
|
return response
|
|
64
64
|
|
|
65
65
|
async def get_keys_values(
|
|
66
|
-
self, store_id: bytes32, root_hash:
|
|
66
|
+
self, store_id: bytes32, root_hash: bytes32 | None, page: int | None, max_page_size: int | None
|
|
67
67
|
) -> dict[str, Any]:
|
|
68
68
|
request: dict[str, Any] = {"id": store_id.hex()}
|
|
69
69
|
if root_hash is not None:
|
|
@@ -76,7 +76,7 @@ class DataLayerRpcClient(RpcClient):
|
|
|
76
76
|
return response
|
|
77
77
|
|
|
78
78
|
async def get_keys(
|
|
79
|
-
self, store_id: bytes32, root_hash:
|
|
79
|
+
self, store_id: bytes32, root_hash: bytes32 | None, page: int | None, max_page_size: int | None
|
|
80
80
|
) -> dict[str, Any]:
|
|
81
81
|
request: dict[str, Any] = {"id": store_id.hex()}
|
|
82
82
|
if root_hash is not None:
|
|
@@ -117,7 +117,7 @@ class DataLayerRpcClient(RpcClient):
|
|
|
117
117
|
return response
|
|
118
118
|
|
|
119
119
|
async def add_missing_files(
|
|
120
|
-
self, store_ids:
|
|
120
|
+
self, store_ids: list[bytes32] | None, overwrite: bool | None, foldername: Path | None
|
|
121
121
|
) -> dict[str, Any]:
|
|
122
122
|
request: dict[str, Any] = {}
|
|
123
123
|
if store_ids is not None:
|
|
@@ -130,7 +130,7 @@ class DataLayerRpcClient(RpcClient):
|
|
|
130
130
|
return response
|
|
131
131
|
|
|
132
132
|
async def get_kv_diff(
|
|
133
|
-
self, store_id: bytes32, hash_1: bytes32, hash_2: bytes32, page:
|
|
133
|
+
self, store_id: bytes32, hash_1: bytes32, hash_2: bytes32, page: int | None, max_page_size: int | None
|
|
134
134
|
) -> dict[str, Any]:
|
|
135
135
|
request: dict[str, Any] = {"id": store_id.hex(), "hash_1": hash_1.hex(), "hash_2": hash_2.hex()}
|
|
136
136
|
if page is not None:
|
|
@@ -144,13 +144,11 @@ class DataLayerRpcClient(RpcClient):
|
|
|
144
144
|
response = await self.fetch("get_root_history", {"id": store_id.hex()})
|
|
145
145
|
return response
|
|
146
146
|
|
|
147
|
-
async def add_mirror(
|
|
148
|
-
self, store_id: bytes32, urls: list[str], amount: int, fee: Optional[uint64]
|
|
149
|
-
) -> dict[str, Any]:
|
|
147
|
+
async def add_mirror(self, store_id: bytes32, urls: list[str], amount: int, fee: uint64 | None) -> dict[str, Any]:
|
|
150
148
|
response = await self.fetch("add_mirror", {"id": store_id.hex(), "urls": urls, "amount": amount, "fee": fee})
|
|
151
149
|
return response
|
|
152
150
|
|
|
153
|
-
async def delete_mirror(self, coin_id: bytes32, fee:
|
|
151
|
+
async def delete_mirror(self, coin_id: bytes32, fee: uint64 | None) -> dict[str, Any]:
|
|
154
152
|
response = await self.fetch("delete_mirror", {"coin_id": coin_id.hex(), "fee": fee})
|
|
155
153
|
return response
|
|
156
154
|
|
|
@@ -7,7 +7,7 @@ import sys
|
|
|
7
7
|
from dataclasses import dataclass, field
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from types import FrameType
|
|
10
|
-
from typing import Any
|
|
10
|
+
from typing import Any
|
|
11
11
|
|
|
12
12
|
import click
|
|
13
13
|
from aiohttp import web
|
|
@@ -38,7 +38,7 @@ class DataLayerServer:
|
|
|
38
38
|
config: dict[str, Any]
|
|
39
39
|
log: logging.Logger
|
|
40
40
|
shutdown_event: asyncio.Event
|
|
41
|
-
webserver:
|
|
41
|
+
webserver: WebServer | None = None
|
|
42
42
|
upnp: UPnP = field(default_factory=UPnP)
|
|
43
43
|
|
|
44
44
|
async def start(self, signal_handlers: SignalHandlers) -> None:
|
|
@@ -120,7 +120,7 @@ class DataLayerServer:
|
|
|
120
120
|
def _accept_signal(
|
|
121
121
|
self,
|
|
122
122
|
signal_: signal.Signals,
|
|
123
|
-
stack_frame:
|
|
123
|
+
stack_frame: FrameType | None,
|
|
124
124
|
loop: asyncio.AbstractEventLoop,
|
|
125
125
|
) -> None:
|
|
126
126
|
self.log.info("Received signal %s (%s), shutting down.", signal_.name, signal_.value)
|