chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/blockchain/blockchain_test_utils.py +2 -3
- chia/_tests/blockchain/test_augmented_chain.py +2 -3
- chia/_tests/blockchain/test_blockchain.py +261 -44
- chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
- chia/_tests/blockchain/test_build_chains.py +197 -1
- chia/_tests/blockchain/test_get_block_generator.py +1 -1
- chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +3 -4
- chia/_tests/clvm/test_message_conditions.py +2 -2
- chia/_tests/clvm/test_puzzle_compression.py +2 -3
- chia/_tests/clvm/test_puzzles.py +1 -2
- chia/_tests/clvm/test_singletons.py +2 -3
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +30 -25
- chia/_tests/cmds/test_dev_gh.py +1 -1
- chia/_tests/cmds/test_farm_cmd.py +1 -1
- chia/_tests/cmds/test_show.py +1 -2
- chia/_tests/cmds/wallet/test_did.py +101 -56
- chia/_tests/cmds/wallet/test_nft.py +109 -84
- chia/_tests/cmds/wallet/test_notifications.py +1 -1
- chia/_tests/cmds/wallet/test_offer.toffer +1 -1
- chia/_tests/cmds/wallet/test_vcs.py +8 -8
- chia/_tests/cmds/wallet/test_wallet.py +100 -46
- chia/_tests/conftest.py +31 -20
- chia/_tests/connection_utils.py +1 -1
- chia/_tests/core/consensus/stores/__init__.py +0 -0
- chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
- chia/_tests/core/consensus/test_block_creation.py +2 -31
- chia/_tests/core/consensus/test_pot_iterations.py +38 -3
- chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
- chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
- chia/_tests/core/daemon/test_daemon.py +80 -0
- chia/_tests/core/data_layer/test_data_layer.py +1 -1
- chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
- chia/_tests/core/data_layer/test_data_rpc.py +14 -10
- chia/_tests/core/data_layer/test_data_store.py +5 -5
- chia/_tests/core/farmer/test_farmer_api.py +2 -2
- chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
- chia/_tests/core/full_node/ram_db.py +3 -1
- chia/_tests/core/full_node/stores/test_block_store.py +28 -16
- chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
- chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_address_manager.py +200 -27
- chia/_tests/core/full_node/test_block_height_map.py +2 -2
- chia/_tests/core/full_node/test_conditions.py +7 -6
- chia/_tests/core/full_node/test_full_node.py +456 -40
- chia/_tests/core/full_node/test_generator_tools.py +32 -2
- chia/_tests/core/full_node/test_hint_management.py +1 -1
- chia/_tests/core/full_node/test_node_load.py +20 -21
- chia/_tests/core/full_node/test_performance.py +3 -4
- chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
- chia/_tests/core/full_node/test_subscriptions.py +1 -2
- chia/_tests/core/full_node/test_transactions.py +9 -5
- chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
- chia/_tests/core/large_block.py +1 -2
- chia/_tests/core/make_block_generator.py +3 -4
- chia/_tests/core/mempool/test_mempool.py +36 -86
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
- chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
- chia/_tests/core/mempool/test_mempool_manager.py +529 -69
- chia/_tests/core/mempool/test_mempool_performance.py +3 -2
- chia/_tests/core/mempool/test_singleton_fast_forward.py +61 -132
- chia/_tests/core/server/flood.py +1 -1
- chia/_tests/core/server/test_dos.py +1 -1
- chia/_tests/core/server/test_node_discovery.py +41 -27
- chia/_tests/core/server/test_rate_limits.py +1 -1
- chia/_tests/core/server/test_server.py +1 -1
- chia/_tests/core/services/test_services.py +5 -5
- chia/_tests/core/ssl/test_ssl.py +1 -1
- chia/_tests/core/test_cost_calculation.py +6 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_crawler_rpc.py +1 -1
- chia/_tests/core/test_db_conversion.py +3 -1
- chia/_tests/core/test_db_validation.py +5 -3
- chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
- chia/_tests/core/test_filter.py +4 -1
- chia/_tests/core/test_full_node_rpc.py +99 -82
- chia/_tests/core/test_program.py +2 -2
- chia/_tests/core/util/test_block_cache.py +1 -1
- chia/_tests/core/util/test_keychain.py +2 -2
- chia/_tests/core/util/test_lockfile.py +1 -1
- chia/_tests/core/util/test_log_exceptions.py +5 -5
- chia/_tests/core/util/test_streamable.py +81 -22
- chia/_tests/db/test_db_wrapper.py +1 -3
- chia/_tests/environments/wallet.py +5 -5
- chia/_tests/farmer_harvester/test_farmer.py +9 -7
- chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
- chia/_tests/generator/test_compression.py +1 -2
- chia/_tests/generator/test_rom.py +8 -4
- chia/_tests/plot_sync/test_plot_sync.py +3 -3
- chia/_tests/plot_sync/test_receiver.py +3 -3
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +3 -3
- chia/_tests/plot_sync/util.py +2 -2
- chia/_tests/pools/test_pool_cmdline.py +48 -21
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
- chia/_tests/pools/test_pool_rpc.py +237 -105
- chia/_tests/pools/test_pool_wallet.py +11 -2
- chia/_tests/pools/test_wallet_pool_store.py +5 -4
- chia/_tests/rpc/test_rpc_client.py +1 -1
- chia/_tests/simulation/test_simulation.py +13 -8
- chia/_tests/simulation/test_simulator.py +2 -2
- chia/_tests/timelord/test_new_peak.py +191 -47
- chia/_tests/timelord/test_timelord.py +1 -1
- chia/_tests/tools/test_full_sync.py +0 -2
- chia/_tests/tools/test_run_block.py +3 -1
- chia/_tests/util/benchmark_cost.py +3 -3
- chia/_tests/util/benchmarks.py +2 -2
- chia/_tests/util/blockchain.py +11 -5
- chia/_tests/util/blockchain_mock.py +1 -4
- chia/_tests/util/coin_store.py +29 -0
- chia/_tests/util/constants.py +2 -18
- chia/_tests/util/full_sync.py +3 -3
- chia/_tests/util/generator_tools_testing.py +2 -3
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +33 -31
- chia/_tests/util/network_protocol_data.py +19 -17
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +3 -1
- chia/_tests/util/run_block.py +2 -2
- chia/_tests/util/setup_nodes.py +7 -7
- chia/_tests/util/spend_sim.py +47 -55
- chia/_tests/util/test_condition_tools.py +5 -4
- chia/_tests/util/test_config.py +2 -2
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +12 -14
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_paginator.py +4 -4
- chia/_tests/util/test_priority_mutex.py +2 -2
- chia/_tests/util/test_replace_str_to_bytes.py +15 -5
- chia/_tests/util/test_ssl_check.py +1 -1
- chia/_tests/util/test_testnet_overrides.py +13 -3
- chia/_tests/util/time_out_assert.py +4 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
- chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
- chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
- chia/_tests/wallet/conftest.py +11 -12
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
- chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
- chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
- chia/_tests/wallet/nft_wallet/config.py +1 -1
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
- chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
- chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
- chia/_tests/wallet/test_clvm_casts.py +88 -0
- chia/_tests/wallet/test_coin_management.py +1 -1
- chia/_tests/wallet/test_coin_selection.py +1 -1
- chia/_tests/wallet/test_conditions.py +1 -1
- chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
- chia/_tests/wallet/test_notifications.py +5 -3
- chia/_tests/wallet/test_sign_coin_spends.py +6 -6
- chia/_tests/wallet/test_signer_protocol.py +13 -12
- chia/_tests/wallet/test_singleton.py +1 -1
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +108 -29
- chia/_tests/wallet/test_wallet_action_scope.py +9 -2
- chia/_tests/wallet/test_wallet_blockchain.py +2 -3
- chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
- chia/_tests/wallet/test_wallet_node.py +2 -4
- chia/_tests/wallet/test_wallet_retry.py +4 -2
- chia/_tests/wallet/test_wallet_state_manager.py +191 -5
- chia/_tests/wallet/test_wallet_test_framework.py +1 -1
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
- chia/_tests/wallet/wallet_block_tools.py +6 -6
- chia/_tests/weight_proof/test_weight_proof.py +10 -48
- chia/apis.py +1 -1
- chia/cmds/beta.py +1 -1
- chia/cmds/chia.py +9 -9
- chia/cmds/cmd_classes.py +12 -11
- chia/cmds/cmd_helpers.py +1 -1
- chia/cmds/cmds_util.py +12 -9
- chia/cmds/coin_funcs.py +2 -2
- chia/cmds/configure.py +2 -2
- chia/cmds/data.py +0 -2
- chia/cmds/data_funcs.py +1 -1
- chia/cmds/db_validate_func.py +1 -2
- chia/cmds/dev/__init__.py +0 -0
- chia/cmds/dev/data.py +273 -0
- chia/cmds/{gh.py → dev/gh.py} +5 -5
- chia/cmds/dev/main.py +22 -0
- chia/cmds/dev/mempool.py +78 -0
- chia/cmds/dev/mempool_funcs.py +63 -0
- chia/cmds/farm_funcs.py +5 -4
- chia/cmds/init_funcs.py +11 -11
- chia/cmds/keys.py +2 -2
- chia/cmds/keys_funcs.py +4 -4
- chia/cmds/netspace_funcs.py +1 -1
- chia/cmds/peer_funcs.py +2 -2
- chia/cmds/plotnft_funcs.py +72 -26
- chia/cmds/rpc.py +1 -1
- chia/cmds/show_funcs.py +5 -5
- chia/cmds/signer.py +8 -7
- chia/cmds/sim_funcs.py +8 -9
- chia/cmds/wallet.py +2 -2
- chia/cmds/wallet_funcs.py +165 -131
- chia/{util → consensus}/augmented_chain.py +1 -2
- chia/consensus/block_body_validation.py +54 -40
- chia/consensus/block_creation.py +42 -76
- chia/consensus/block_header_validation.py +32 -26
- chia/consensus/block_record.py +0 -3
- chia/consensus/blockchain.py +23 -32
- chia/consensus/blockchain_interface.py +1 -5
- chia/consensus/check_time_locks.py +57 -0
- chia/consensus/coin_store_protocol.py +151 -0
- chia/consensus/coinbase.py +0 -6
- chia/consensus/condition_costs.py +4 -0
- chia/{util → consensus}/condition_tools.py +4 -5
- chia/consensus/cost_calculator.py +1 -1
- chia/consensus/default_constants.py +32 -9
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +1 -2
- chia/consensus/find_fork_point.py +1 -3
- chia/consensus/full_block_to_block_record.py +1 -6
- chia/{util → consensus}/generator_tools.py +1 -3
- chia/consensus/get_block_challenge.py +30 -7
- chia/consensus/make_sub_epoch_summary.py +1 -5
- chia/consensus/multiprocess_validation.py +21 -20
- chia/consensus/pot_iterations.py +74 -13
- chia/{util → consensus}/prev_transaction_block.py +1 -1
- chia/consensus/vdf_info_computation.py +1 -3
- chia/daemon/keychain_proxy.py +5 -5
- chia/daemon/server.py +22 -5
- chia/data_layer/data_layer.py +92 -51
- chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
- chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
- chia/data_layer/data_layer_util.py +4 -6
- chia/data_layer/data_layer_wallet.py +42 -69
- chia/data_layer/dl_wallet_store.py +12 -6
- chia/data_layer/download_data.py +3 -3
- chia/data_layer/s3_plugin_service.py +0 -1
- chia/farmer/farmer.py +3 -4
- chia/farmer/farmer_api.py +11 -7
- chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
- chia/full_node/block_height_map.py +7 -6
- chia/full_node/block_store.py +5 -7
- chia/full_node/bundle_tools.py +1 -2
- chia/full_node/coin_store.py +153 -124
- chia/{types → full_node}/eligible_coin_spends.py +39 -70
- chia/full_node/fee_estimator.py +1 -1
- chia/full_node/fee_estimator_interface.py +0 -8
- chia/full_node/fee_tracker.py +25 -25
- chia/full_node/full_node.py +70 -53
- chia/full_node/full_node_api.py +57 -40
- chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
- chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
- chia/full_node/full_node_store.py +23 -8
- chia/full_node/mempool.py +206 -53
- chia/full_node/mempool_check_conditions.py +20 -63
- chia/full_node/mempool_manager.py +47 -45
- chia/full_node/subscriptions.py +1 -3
- chia/full_node/tx_processing_queue.py +50 -3
- chia/full_node/weight_proof.py +46 -37
- chia/harvester/harvester.py +1 -1
- chia/harvester/harvester_api.py +22 -7
- chia/introducer/introducer.py +1 -1
- chia/introducer/introducer_api.py +1 -1
- chia/plot_sync/exceptions.py +1 -1
- chia/plot_sync/receiver.py +1 -1
- chia/plot_sync/sender.py +2 -2
- chia/pools/pool_puzzles.py +13 -18
- chia/pools/pool_wallet.py +23 -46
- chia/protocols/farmer_protocol.py +11 -3
- chia/protocols/full_node_protocol.py +1 -4
- chia/protocols/harvester_protocol.py +3 -3
- chia/protocols/pool_protocol.py +1 -2
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +1 -3
- chia/protocols/wallet_protocol.py +3 -3
- chia/rpc/rpc_client.py +7 -8
- chia/rpc/rpc_server.py +3 -3
- chia/rpc/util.py +3 -1
- chia/seeder/crawler.py +1 -1
- chia/seeder/crawler_api.py +1 -1
- chia/seeder/dns_server.py +2 -0
- chia/seeder/start_crawler.py +3 -3
- chia/server/address_manager.py +286 -38
- chia/server/address_manager_store.py +0 -215
- chia/{types → server}/aliases.py +7 -7
- chia/server/api_protocol.py +1 -1
- chia/server/chia_policy.py +1 -1
- chia/server/node_discovery.py +76 -113
- chia/server/rate_limits.py +1 -1
- chia/server/resolve_peer_info.py +43 -0
- chia/server/server.py +5 -5
- chia/server/start_data_layer.py +4 -4
- chia/server/start_farmer.py +5 -4
- chia/server/start_full_node.py +5 -4
- chia/server/start_harvester.py +7 -5
- chia/server/start_introducer.py +2 -2
- chia/server/start_service.py +1 -1
- chia/server/start_timelord.py +7 -5
- chia/server/start_wallet.py +7 -5
- chia/server/ws_connection.py +1 -1
- chia/simulator/add_blocks_in_batches.py +2 -2
- chia/simulator/block_tools.py +245 -201
- chia/simulator/full_node_simulator.py +38 -10
- chia/simulator/setup_services.py +12 -12
- chia/simulator/simulator_full_node_rpc_api.py +2 -2
- chia/simulator/simulator_full_node_rpc_client.py +2 -2
- chia/simulator/simulator_test_tools.py +2 -2
- chia/simulator/start_simulator.py +1 -1
- chia/simulator/wallet_tools.py +10 -18
- chia/ssl/create_ssl.py +1 -1
- chia/timelord/iters_from_block.py +14 -14
- chia/timelord/timelord.py +15 -11
- chia/timelord/timelord_api.py +14 -2
- chia/timelord/timelord_state.py +20 -14
- chia/types/blockchain_format/program.py +53 -10
- chia/types/blockchain_format/proof_of_space.py +73 -19
- chia/types/coin_spend.py +3 -56
- chia/types/generator_types.py +28 -0
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +12 -7
- chia/types/unfinished_header_block.py +1 -2
- chia/types/validation_state.py +1 -2
- chia/types/weight_proof.py +1 -3
- chia/util/action_scope.py +3 -3
- chia/util/block_cache.py +1 -2
- chia/util/byte_types.py +1 -1
- chia/util/casts.py +21 -0
- chia/util/config.py +0 -37
- chia/util/db_wrapper.py +8 -1
- chia/util/errors.py +3 -2
- chia/util/initial-config.yaml +21 -5
- chia/util/keychain.py +6 -7
- chia/util/keyring_wrapper.py +5 -5
- chia/util/limited_semaphore.py +1 -1
- chia/util/priority_mutex.py +1 -1
- chia/util/streamable.py +63 -5
- chia/util/task_timing.py +1 -1
- chia/util/virtual_project_analysis.py +1 -1
- chia/wallet/cat_wallet/cat_info.py +7 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
- chia/wallet/cat_wallet/cat_utils.py +1 -1
- chia/wallet/cat_wallet/cat_wallet.py +44 -36
- chia/wallet/cat_wallet/lineage_store.py +7 -0
- chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
- chia/wallet/conditions.py +5 -10
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
- chia/wallet/derivation_record.py +33 -0
- chia/wallet/derive_keys.py +3 -3
- chia/wallet/did_wallet/did_info.py +12 -3
- chia/wallet/did_wallet/did_wallet.py +132 -101
- chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
- chia/wallet/driver_protocol.py +3 -1
- chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
- chia/wallet/nft_wallet/nft_wallet.py +69 -112
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
- chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
- chia/wallet/nft_wallet/uncurry_nft.py +4 -6
- chia/wallet/notification_manager.py +2 -3
- chia/wallet/outer_puzzles.py +7 -2
- chia/wallet/puzzle_drivers.py +1 -1
- chia/wallet/puzzles/clawback/drivers.py +5 -4
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
- chia/wallet/puzzles/singleton_top_layer.py +2 -1
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
- chia/wallet/puzzles/tails.py +1 -3
- chia/wallet/signer_protocol.py +5 -6
- chia/wallet/singleton.py +5 -4
- chia/wallet/singleton_record.py +1 -1
- chia/wallet/trade_manager.py +18 -20
- chia/wallet/trade_record.py +3 -6
- chia/wallet/trading/offer.py +12 -13
- chia/wallet/uncurried_puzzle.py +2 -2
- chia/wallet/util/compute_additions.py +58 -0
- chia/wallet/util/compute_hints.py +3 -3
- chia/wallet/util/compute_memos.py +4 -4
- chia/wallet/util/curry_and_treehash.py +2 -1
- chia/wallet/util/debug_spend_bundle.py +1 -1
- chia/wallet/util/merkle_tree.py +1 -1
- chia/wallet/util/peer_request_cache.py +1 -2
- chia/wallet/util/tx_config.py +3 -8
- chia/wallet/util/wallet_sync_utils.py +10 -5
- chia/wallet/util/wallet_types.py +1 -0
- chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
- chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
- chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
- chia/wallet/vc_wallet/vc_drivers.py +50 -8
- chia/wallet/vc_wallet/vc_store.py +3 -5
- chia/wallet/vc_wallet/vc_wallet.py +15 -22
- chia/wallet/wallet.py +36 -46
- chia/wallet/wallet_action_scope.py +73 -4
- chia/wallet/wallet_blockchain.py +1 -3
- chia/wallet/wallet_interested_store.py +1 -1
- chia/wallet/wallet_nft_store.py +3 -3
- chia/wallet/wallet_node.py +17 -16
- chia/wallet/wallet_node_api.py +4 -5
- chia/wallet/wallet_pool_store.py +1 -1
- chia/wallet/wallet_protocol.py +2 -0
- chia/wallet/wallet_puzzle_store.py +1 -1
- chia/{rpc → wallet}/wallet_request_types.py +670 -81
- chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
- chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
- chia/wallet/wallet_singleton_store.py +8 -7
- chia/wallet/wallet_spend_bundle.py +4 -3
- chia/wallet/wallet_state_manager.py +320 -191
- chia/wallet/wallet_weight_proof_handler.py +1 -2
- chia/wallet/wsm_apis.py +98 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/RECORD +443 -436
- mozilla-ca/cacert.pem +3 -165
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
- chia/cmds/dev.py +0 -18
- chia/types/blockchain_format/slots.py +0 -9
- chia/types/blockchain_format/sub_epoch_summary.py +0 -5
- chia/types/end_of_slot_bundle.py +0 -5
- chia/types/full_block.py +0 -5
- chia/types/header_block.py +0 -5
- chia/types/spend_bundle_conditions.py +0 -7
- chia/types/transaction_queue_entry.py +0 -56
- chia/types/unfinished_block.py +0 -5
- /chia/cmds/{installers.py → dev/installers.py} +0 -0
- /chia/cmds/{sim.py → dev/sim.py} +0 -0
- /chia/{util → cmds}/dump_keyring.py +0 -0
- /chia/{full_node → consensus}/signage_point.py +0 -0
- /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
- /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
- /chia/{util → full_node}/full_block_utils.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
- /chia/{full_node → protocols}/fee_estimate.py +0 -0
- /chia/{server → protocols}/outbound_message.py +0 -0
- /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
- /chia/{util → simulator}/vdf_prover.py +0 -0
- /chia/{util → ssl}/ssl_check.py +0 -0
- /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/entry_points.txt +0 -0
chia/cmds/wallet_funcs.py
CHANGED
|
@@ -24,19 +24,6 @@ from chia.cmds.cmds_util import (
|
|
|
24
24
|
from chia.cmds.param_types import CliAddress, CliAmount
|
|
25
25
|
from chia.cmds.peer_funcs import print_connections
|
|
26
26
|
from chia.cmds.units import units
|
|
27
|
-
from chia.rpc.wallet_request_types import (
|
|
28
|
-
CATSpendResponse,
|
|
29
|
-
GetNotifications,
|
|
30
|
-
SendTransactionResponse,
|
|
31
|
-
VCAddProofs,
|
|
32
|
-
VCGet,
|
|
33
|
-
VCGetList,
|
|
34
|
-
VCGetProofsForRoot,
|
|
35
|
-
VCMint,
|
|
36
|
-
VCRevoke,
|
|
37
|
-
VCSpend,
|
|
38
|
-
)
|
|
39
|
-
from chia.rpc.wallet_rpc_client import WalletRpcClient
|
|
40
27
|
from chia.util.bech32m import bech32_decode, decode_puzzle_hash, encode_puzzle_hash
|
|
41
28
|
from chia.util.byte_types import hexstr_to_bytes
|
|
42
29
|
from chia.util.config import selected_network_address_prefix
|
|
@@ -56,6 +43,37 @@ from chia.wallet.util.transaction_type import CLAWBACK_INCOMING_TRANSACTION_TYPE
|
|
|
56
43
|
from chia.wallet.util.wallet_types import WalletType
|
|
57
44
|
from chia.wallet.vc_wallet.vc_store import VCProofs
|
|
58
45
|
from chia.wallet.wallet_coin_store import GetCoinRecords
|
|
46
|
+
from chia.wallet.wallet_request_types import (
|
|
47
|
+
CATSpendResponse,
|
|
48
|
+
DIDFindLostDID,
|
|
49
|
+
DIDGetDID,
|
|
50
|
+
DIDGetInfo,
|
|
51
|
+
DIDMessageSpend,
|
|
52
|
+
DIDSetWalletName,
|
|
53
|
+
DIDTransferDID,
|
|
54
|
+
DIDUpdateMetadata,
|
|
55
|
+
FungibleAsset,
|
|
56
|
+
GetNotifications,
|
|
57
|
+
NFTAddURI,
|
|
58
|
+
NFTCalculateRoyalties,
|
|
59
|
+
NFTCalculateRoyaltiesResponse,
|
|
60
|
+
NFTGetInfo,
|
|
61
|
+
NFTGetNFTs,
|
|
62
|
+
NFTGetWalletDID,
|
|
63
|
+
NFTMintNFTRequest,
|
|
64
|
+
NFTSetNFTDID,
|
|
65
|
+
NFTTransferNFT,
|
|
66
|
+
RoyaltyAsset,
|
|
67
|
+
SendTransactionResponse,
|
|
68
|
+
VCAddProofs,
|
|
69
|
+
VCGet,
|
|
70
|
+
VCGetList,
|
|
71
|
+
VCGetProofsForRoot,
|
|
72
|
+
VCMint,
|
|
73
|
+
VCRevoke,
|
|
74
|
+
VCSpend,
|
|
75
|
+
)
|
|
76
|
+
from chia.wallet.wallet_rpc_client import WalletRpcClient
|
|
59
77
|
|
|
60
78
|
CATNameResolver = Callable[[bytes32], Awaitable[Optional[tuple[Optional[uint32], str]]]]
|
|
61
79
|
|
|
@@ -114,7 +132,7 @@ def get_mojo_per_unit(wallet_type: WalletType) -> int:
|
|
|
114
132
|
WalletType.VC,
|
|
115
133
|
}:
|
|
116
134
|
mojo_per_unit = units["chia"]
|
|
117
|
-
elif wallet_type in {WalletType.CAT, WalletType.CRCAT}:
|
|
135
|
+
elif wallet_type in {WalletType.CAT, WalletType.CRCAT, WalletType.RCAT}:
|
|
118
136
|
mojo_per_unit = units["cat"]
|
|
119
137
|
elif wallet_type in {WalletType.NFT, WalletType.DECENTRALIZED_ID}:
|
|
120
138
|
mojo_per_unit = units["mojo"]
|
|
@@ -148,7 +166,7 @@ async def get_unit_name_for_wallet_id(
|
|
|
148
166
|
WalletType.VC,
|
|
149
167
|
}:
|
|
150
168
|
name: str = config["network_overrides"]["config"][config["selected_network"]]["address_prefix"].upper()
|
|
151
|
-
elif wallet_type in {WalletType.CAT, WalletType.CRCAT}:
|
|
169
|
+
elif wallet_type in {WalletType.CAT, WalletType.CRCAT, WalletType.RCAT}:
|
|
152
170
|
name = await wallet_client.get_cat_name(wallet_id=wallet_id)
|
|
153
171
|
else:
|
|
154
172
|
raise LookupError(f"Operation is not supported for Wallet type {wallet_type.name}")
|
|
@@ -234,7 +252,7 @@ async def get_transactions(
|
|
|
234
252
|
skipped = 0
|
|
235
253
|
num_per_screen = 5 if paginate else len(txs)
|
|
236
254
|
for i in range(0, len(txs), num_per_screen):
|
|
237
|
-
for j in range(
|
|
255
|
+
for j in range(num_per_screen):
|
|
238
256
|
if i + j + skipped >= len(txs):
|
|
239
257
|
break
|
|
240
258
|
coin_record: Optional[dict[str, Any]] = None
|
|
@@ -340,7 +358,7 @@ async def send(
|
|
|
340
358
|
push=push,
|
|
341
359
|
timelock_info=condition_valid_times,
|
|
342
360
|
)
|
|
343
|
-
elif typ in {WalletType.CAT, WalletType.CRCAT}:
|
|
361
|
+
elif typ in {WalletType.CAT, WalletType.CRCAT, WalletType.RCAT}:
|
|
344
362
|
print("Submitting transaction...")
|
|
345
363
|
res = await wallet_client.cat_spend(
|
|
346
364
|
wallet_id,
|
|
@@ -446,8 +464,8 @@ async def make_offer(
|
|
|
446
464
|
offer_dict: dict[Union[uint32, str], int] = {}
|
|
447
465
|
driver_dict: dict[str, Any] = {}
|
|
448
466
|
printable_dict: dict[str, tuple[str, int, int]] = {} # dict[asset_name, tuple[amount, unit, multiplier]]
|
|
449
|
-
|
|
450
|
-
|
|
467
|
+
royalty_assets: list[RoyaltyAsset] = []
|
|
468
|
+
fungible_assets: list[FungibleAsset] = []
|
|
451
469
|
for item in [*offers, *requests]:
|
|
452
470
|
name, amount = tuple(item.split(":")[0:2])
|
|
453
471
|
try:
|
|
@@ -460,14 +478,14 @@ async def make_offer(
|
|
|
460
478
|
name = "Unknown CAT"
|
|
461
479
|
unit = units["cat"]
|
|
462
480
|
if item in offers:
|
|
463
|
-
|
|
481
|
+
fungible_assets.append(FungibleAsset(name, uint64(abs(int(Decimal(amount) * unit)))))
|
|
464
482
|
except ValueError:
|
|
465
483
|
try:
|
|
466
484
|
hrp, _ = bech32_decode(name)
|
|
467
485
|
if hrp == "nft":
|
|
468
486
|
coin_id = decode_puzzle_hash(name)
|
|
469
487
|
unit = 1
|
|
470
|
-
info =
|
|
488
|
+
info = (await wallet_client.get_nft_info(NFTGetInfo(coin_id.hex()))).nft_info
|
|
471
489
|
id = info.launcher_id.hex()
|
|
472
490
|
assert isinstance(id, str)
|
|
473
491
|
if item in requests:
|
|
@@ -494,9 +512,12 @@ async def make_offer(
|
|
|
494
512
|
"royalty_percentage": str(info.royalty_percentage),
|
|
495
513
|
},
|
|
496
514
|
}
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
515
|
+
royalty_assets.append(
|
|
516
|
+
RoyaltyAsset(
|
|
517
|
+
name,
|
|
518
|
+
encode_puzzle_hash(info.royalty_puzzle_hash, AddressType.XCH.hrp(config)),
|
|
519
|
+
info.royalty_percentage,
|
|
520
|
+
)
|
|
500
521
|
)
|
|
501
522
|
else:
|
|
502
523
|
id = decode_puzzle_hash(name).hex()
|
|
@@ -511,7 +532,7 @@ async def make_offer(
|
|
|
511
532
|
name = await wallet_client.get_cat_name(id)
|
|
512
533
|
unit = units["cat"]
|
|
513
534
|
if item in offers:
|
|
514
|
-
|
|
535
|
+
fungible_assets.append(FungibleAsset(name, uint64(abs(int(Decimal(amount) * unit)))))
|
|
515
536
|
multiplier: int = -1 if item in offers else 1
|
|
516
537
|
printable_dict[name] = (amount, unit, multiplier)
|
|
517
538
|
if id in offer_dict:
|
|
@@ -538,19 +559,21 @@ async def make_offer(
|
|
|
538
559
|
print()
|
|
539
560
|
print(f"Including Fees: {Decimal(fee) / units['chia']} XCH, {fee} mojos")
|
|
540
561
|
|
|
541
|
-
if
|
|
542
|
-
royalty_summary:
|
|
543
|
-
|
|
562
|
+
if len(royalty_assets) > 0:
|
|
563
|
+
royalty_summary: NFTCalculateRoyaltiesResponse = await wallet_client.nft_calculate_royalties(
|
|
564
|
+
NFTCalculateRoyalties(royalty_assets, fungible_assets)
|
|
544
565
|
)
|
|
545
566
|
total_amounts_requested: dict[Any, int] = {}
|
|
546
567
|
print()
|
|
547
568
|
print("Royalties Summary:")
|
|
548
|
-
for nft_id, summaries in royalty_summary.items():
|
|
569
|
+
for nft_id, summaries in royalty_summary.to_json_dict().items():
|
|
549
570
|
print(f" - For {nft_id}:")
|
|
550
571
|
for summary in summaries:
|
|
551
572
|
divisor = units["chia"] if summary["asset"] == "XCH" else units["cat"]
|
|
552
573
|
converted_amount = Decimal(summary["amount"]) / divisor
|
|
553
|
-
total_amounts_requested.setdefault(
|
|
574
|
+
total_amounts_requested.setdefault(
|
|
575
|
+
summary["asset"], next(a.amount for a in fungible_assets if a.asset == summary["asset"])
|
|
576
|
+
)
|
|
554
577
|
total_amounts_requested[summary["asset"]] += summary["amount"]
|
|
555
578
|
print(
|
|
556
579
|
f" - {converted_amount} {summary['asset']} ({summary['amount']} mojos) to {summary['address']}" # noqa
|
|
@@ -759,17 +782,20 @@ async def take_offer(
|
|
|
759
782
|
|
|
760
783
|
print()
|
|
761
784
|
|
|
762
|
-
|
|
785
|
+
royalty_assets = []
|
|
763
786
|
for royalty_asset_id in nft_coin_ids_supporting_royalties_from_offer(offer):
|
|
764
787
|
if royalty_asset_id.hex() in offered:
|
|
765
788
|
percentage, address = await get_nft_royalty_percentage_and_address(royalty_asset_id, wallet_client)
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
789
|
+
royalty_assets.append(
|
|
790
|
+
RoyaltyAsset(
|
|
791
|
+
encode_puzzle_hash(royalty_asset_id, AddressType.NFT.hrp(config)),
|
|
792
|
+
encode_puzzle_hash(address, AddressType.XCH.hrp(config)),
|
|
793
|
+
percentage,
|
|
794
|
+
)
|
|
769
795
|
)
|
|
770
796
|
|
|
771
|
-
if
|
|
772
|
-
|
|
797
|
+
if len(royalty_assets) > 0:
|
|
798
|
+
fungible_assets = []
|
|
773
799
|
for fungible_asset_id in fungible_assets_from_offer(offer):
|
|
774
800
|
fungible_asset_id_str = fungible_asset_id.hex() if fungible_asset_id is not None else "xch"
|
|
775
801
|
if fungible_asset_id_str in requested:
|
|
@@ -780,20 +806,24 @@ async def take_offer(
|
|
|
780
806
|
result = await wallet_client.cat_asset_id_to_name(fungible_asset_id)
|
|
781
807
|
if result is not None:
|
|
782
808
|
nft_royalty_currency = result[1]
|
|
783
|
-
|
|
809
|
+
fungible_assets.append(
|
|
810
|
+
FungibleAsset(nft_royalty_currency, uint64(requested[fungible_asset_id_str]))
|
|
811
|
+
)
|
|
784
812
|
|
|
785
|
-
if
|
|
786
|
-
royalty_summary
|
|
787
|
-
|
|
813
|
+
if len(fungible_assets) > 0:
|
|
814
|
+
royalty_summary = await wallet_client.nft_calculate_royalties(
|
|
815
|
+
NFTCalculateRoyalties(royalty_assets, fungible_assets)
|
|
788
816
|
)
|
|
789
817
|
total_amounts_requested: dict[Any, int] = {}
|
|
790
818
|
print("Royalties Summary:")
|
|
791
|
-
for nft_id, summaries in royalty_summary.items():
|
|
819
|
+
for nft_id, summaries in royalty_summary.to_json_dict().items():
|
|
792
820
|
print(f" - For {nft_id}:")
|
|
793
821
|
for summary in summaries:
|
|
794
822
|
divisor = units["chia"] if summary["asset"] == network_xch else units["cat"]
|
|
795
823
|
converted_amount = Decimal(summary["amount"]) / divisor
|
|
796
|
-
total_amounts_requested.setdefault(
|
|
824
|
+
total_amounts_requested.setdefault(
|
|
825
|
+
summary["asset"], next(a.amount for a in fungible_assets if a.asset == summary["asset"])
|
|
826
|
+
)
|
|
797
827
|
total_amounts_requested[summary["asset"]] += summary["amount"]
|
|
798
828
|
print(
|
|
799
829
|
f" - {converted_amount} {summary['asset']} ({summary['amount']} mojos) to {summary['address']}" # noqa
|
|
@@ -861,7 +891,7 @@ async def cancel_offer(
|
|
|
861
891
|
|
|
862
892
|
|
|
863
893
|
def wallet_coin_unit(typ: WalletType, address_prefix: str) -> tuple[str, int]:
|
|
864
|
-
if typ in {WalletType.CAT, WalletType.CRCAT}:
|
|
894
|
+
if typ in {WalletType.CAT, WalletType.CRCAT, WalletType.RCAT}:
|
|
865
895
|
return "", units["cat"]
|
|
866
896
|
if typ in {WalletType.STANDARD_WALLET, WalletType.POOLING_WALLET, WalletType.MULTI_SIG}:
|
|
867
897
|
return address_prefix, units["chia"]
|
|
@@ -932,12 +962,11 @@ async def print_balances(
|
|
|
932
962
|
print(f"{indent}{'-Spendable:'.ljust(ljust)} {spendable_balance}")
|
|
933
963
|
print(f"{indent}{'-Type:'.ljust(ljust)} {typ.name}")
|
|
934
964
|
if typ == WalletType.DECENTRALIZED_ID:
|
|
935
|
-
get_did_response = await wallet_client.get_did_id(wallet_id)
|
|
936
|
-
my_did = get_did_response
|
|
965
|
+
get_did_response = await wallet_client.get_did_id(DIDGetDID(wallet_id))
|
|
966
|
+
my_did = get_did_response.my_did
|
|
937
967
|
print(f"{indent}{'-DID ID:'.ljust(ljust)} {my_did}")
|
|
938
968
|
elif typ == WalletType.NFT:
|
|
939
|
-
|
|
940
|
-
my_did = get_did_response["did_id"]
|
|
969
|
+
my_did = (await wallet_client.get_nft_wallet_did(NFTGetWalletDID(wallet_id))).did_id
|
|
941
970
|
if my_did is not None and len(my_did) > 0:
|
|
942
971
|
print(f"{indent}{'-DID ID:'.ljust(ljust)} {my_did}")
|
|
943
972
|
elif len(asset_id) > 0:
|
|
@@ -985,7 +1014,7 @@ async def did_set_wallet_name(
|
|
|
985
1014
|
) -> None:
|
|
986
1015
|
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
987
1016
|
try:
|
|
988
|
-
await wallet_client.did_set_wallet_name(wallet_id, name)
|
|
1017
|
+
await wallet_client.did_set_wallet_name(DIDSetWalletName(uint32(wallet_id), name))
|
|
989
1018
|
print(f"Successfully set a new name for DID wallet with id {wallet_id}: {name}")
|
|
990
1019
|
except Exception as e:
|
|
991
1020
|
print(f"Failed to set DID wallet name: {e}")
|
|
@@ -996,11 +1025,9 @@ async def get_did(
|
|
|
996
1025
|
) -> None:
|
|
997
1026
|
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
998
1027
|
try:
|
|
999
|
-
response = await wallet_client.get_did_id(did_wallet_id)
|
|
1000
|
-
|
|
1001
|
-
coin_id
|
|
1002
|
-
print(f"{'DID:'.ljust(23)} {my_did}")
|
|
1003
|
-
print(f"{'Coin ID:'.ljust(23)} {coin_id}")
|
|
1028
|
+
response = await wallet_client.get_did_id(DIDGetDID(uint32(did_wallet_id)))
|
|
1029
|
+
print(f"{'DID:'.ljust(23)} {response.my_did}")
|
|
1030
|
+
print(f"{'Coin ID:'.ljust(23)} {response.coin_id.hex() if response.coin_id is not None else 'Unknown'}")
|
|
1004
1031
|
except Exception as e:
|
|
1005
1032
|
print(f"Failed to get DID: {e}")
|
|
1006
1033
|
|
|
@@ -1011,18 +1038,21 @@ async def get_did_info(
|
|
|
1011
1038
|
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
1012
1039
|
did_padding_length = 23
|
|
1013
1040
|
try:
|
|
1014
|
-
response = await wallet_client.get_did_info(coin_id, latest)
|
|
1015
|
-
print(f"{'DID:'.ljust(did_padding_length)} {response
|
|
1016
|
-
print(f"{'Coin ID:'.ljust(did_padding_length)} {response
|
|
1017
|
-
print(f"{'Inner P2 Address:'.ljust(did_padding_length)} {response
|
|
1018
|
-
print(f"{'Public Key:'.ljust(did_padding_length)} {response
|
|
1019
|
-
print(f"{'Launcher ID:'.ljust(did_padding_length)} {response
|
|
1020
|
-
print(f"{'DID Metadata:'.ljust(did_padding_length)} {response
|
|
1021
|
-
print(
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
print(f"{'
|
|
1041
|
+
response = await wallet_client.get_did_info(DIDGetInfo(coin_id, latest))
|
|
1042
|
+
print(f"{'DID:'.ljust(did_padding_length)} {response.did_id}")
|
|
1043
|
+
print(f"{'Coin ID:'.ljust(did_padding_length)} {response.latest_coin.hex()}")
|
|
1044
|
+
print(f"{'Inner P2 Address:'.ljust(did_padding_length)} {response.p2_address}")
|
|
1045
|
+
print(f"{'Public Key:'.ljust(did_padding_length)} {response.public_key.hex()}")
|
|
1046
|
+
print(f"{'Launcher ID:'.ljust(did_padding_length)} {response.launcher_id.hex()}")
|
|
1047
|
+
print(f"{'DID Metadata:'.ljust(did_padding_length)} {response.metadata}")
|
|
1048
|
+
print(
|
|
1049
|
+
f"{'Recovery List Hash:'.ljust(did_padding_length)} "
|
|
1050
|
+
+ (response.recovery_list_hash.hex() if response.recovery_list_hash is not None else "")
|
|
1051
|
+
)
|
|
1052
|
+
print(f"{'Recovery Required Verifications:'.ljust(did_padding_length)} {response.num_verification}")
|
|
1053
|
+
print(f"{'Last Spend Puzzle:'.ljust(did_padding_length)} {bytes(response.full_puzzle).hex()}")
|
|
1054
|
+
print(f"{'Last Spend Solution:'.ljust(did_padding_length)} {bytes(response.solution).hex()}")
|
|
1055
|
+
print(f"{'Last Spend Hints:'.ljust(did_padding_length)} {[hint.hex() for hint in response.hints]}")
|
|
1026
1056
|
|
|
1027
1057
|
except Exception as e:
|
|
1028
1058
|
print(f"Failed to get DID details: {e}")
|
|
@@ -1041,12 +1071,14 @@ async def update_did_metadata(
|
|
|
1041
1071
|
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1042
1072
|
try:
|
|
1043
1073
|
response = await wallet_client.update_did_metadata(
|
|
1044
|
-
|
|
1045
|
-
|
|
1074
|
+
DIDUpdateMetadata(
|
|
1075
|
+
wallet_id=uint32(did_wallet_id),
|
|
1076
|
+
metadata=json.loads(metadata),
|
|
1077
|
+
push=push,
|
|
1078
|
+
),
|
|
1046
1079
|
tx_config=CMDTXConfigLoader(
|
|
1047
1080
|
reuse_puzhash=reuse_puzhash,
|
|
1048
1081
|
).to_tx_config(units["chia"], config, fingerprint),
|
|
1049
|
-
push=push,
|
|
1050
1082
|
timelock_info=condition_valid_times,
|
|
1051
1083
|
)
|
|
1052
1084
|
if push:
|
|
@@ -1073,13 +1105,12 @@ async def did_message_spend(
|
|
|
1073
1105
|
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1074
1106
|
try:
|
|
1075
1107
|
response = await wallet_client.did_message_spend(
|
|
1076
|
-
did_wallet_id,
|
|
1108
|
+
DIDMessageSpend(wallet_id=uint32(did_wallet_id), push=push),
|
|
1077
1109
|
CMDTXConfigLoader().to_tx_config(units["chia"], config, fingerprint),
|
|
1078
1110
|
extra_conditions=(
|
|
1079
1111
|
*(CreateCoinAnnouncement(hexstr_to_bytes(ca)) for ca in coin_announcements),
|
|
1080
1112
|
*(CreatePuzzleAnnouncement(hexstr_to_bytes(pa)) for pa in puzzle_announcements),
|
|
1081
1113
|
),
|
|
1082
|
-
push=push,
|
|
1083
1114
|
timelock_info=condition_valid_times,
|
|
1084
1115
|
)
|
|
1085
1116
|
print(f"Message Spend Bundle: {response.spend_bundle.to_json_dict()}")
|
|
@@ -1105,14 +1136,16 @@ async def transfer_did(
|
|
|
1105
1136
|
try:
|
|
1106
1137
|
target_address = target_cli_address.original_address
|
|
1107
1138
|
response = await wallet_client.did_transfer_did(
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1139
|
+
DIDTransferDID(
|
|
1140
|
+
wallet_id=uint32(did_wallet_id),
|
|
1141
|
+
inner_address=target_address,
|
|
1142
|
+
fee=fee,
|
|
1143
|
+
with_recovery_info=with_recovery,
|
|
1144
|
+
push=push,
|
|
1145
|
+
),
|
|
1112
1146
|
tx_config=CMDTXConfigLoader(
|
|
1113
1147
|
reuse_puzhash=reuse_puzhash,
|
|
1114
1148
|
).to_tx_config(units["chia"], config, fingerprint),
|
|
1115
|
-
push=push,
|
|
1116
1149
|
timelock_info=condition_valid_times,
|
|
1117
1150
|
)
|
|
1118
1151
|
if push:
|
|
@@ -1131,22 +1164,21 @@ async def find_lost_did(
|
|
|
1131
1164
|
wallet_rpc_port: Optional[int],
|
|
1132
1165
|
fp: Optional[int],
|
|
1133
1166
|
coin_id: str,
|
|
1134
|
-
metadata: Optional[
|
|
1167
|
+
metadata: Optional[str],
|
|
1135
1168
|
recovery_list_hash: Optional[str],
|
|
1136
1169
|
num_verification: Optional[int],
|
|
1137
1170
|
) -> None:
|
|
1138
1171
|
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
1139
1172
|
try:
|
|
1140
1173
|
response = await wallet_client.find_lost_did(
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1174
|
+
DIDFindLostDID(
|
|
1175
|
+
coin_id,
|
|
1176
|
+
bytes32.from_hexstr(recovery_list_hash) if recovery_list_hash is not None else None,
|
|
1177
|
+
uint16.construct_optional(num_verification),
|
|
1178
|
+
json.loads(metadata) if metadata is not None else None,
|
|
1179
|
+
)
|
|
1145
1180
|
)
|
|
1146
|
-
|
|
1147
|
-
print(f"Successfully found lost DID {coin_id}, latest coin ID: {response['latest_coin_id']}")
|
|
1148
|
-
else:
|
|
1149
|
-
print(f"Cannot find lost DID {coin_id}: {response['error']}")
|
|
1181
|
+
print(f"Successfully found lost DID {coin_id}, latest coin ID: {response.latest_coin_id.hex()}")
|
|
1150
1182
|
except Exception as e:
|
|
1151
1183
|
print(f"Failed to find lost DID: {e}")
|
|
1152
1184
|
|
|
@@ -1194,8 +1226,8 @@ async def mint_nft(
|
|
|
1194
1226
|
royalty_address = royalty_cli_address.validate_address_type(AddressType.XCH) if royalty_cli_address else None
|
|
1195
1227
|
target_address = target_cli_address.validate_address_type(AddressType.XCH) if target_cli_address else None
|
|
1196
1228
|
try:
|
|
1197
|
-
response = await wallet_client.get_nft_wallet_did(wallet_id)
|
|
1198
|
-
wallet_did = response
|
|
1229
|
+
response = await wallet_client.get_nft_wallet_did(NFTGetWalletDID(uint32(wallet_id)))
|
|
1230
|
+
wallet_did = response.did_id
|
|
1199
1231
|
wallet_has_did = wallet_did is not None
|
|
1200
1232
|
did_id: Optional[str] = wallet_did
|
|
1201
1233
|
# Handle the case when the user wants to disable DID ownership
|
|
@@ -1209,24 +1241,26 @@ async def mint_nft(
|
|
|
1209
1241
|
did_id = ""
|
|
1210
1242
|
|
|
1211
1243
|
mint_response = await wallet_client.mint_nft(
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1244
|
+
request=NFTMintNFTRequest(
|
|
1245
|
+
wallet_id=uint32(wallet_id),
|
|
1246
|
+
royalty_address=royalty_address,
|
|
1247
|
+
target_address=target_address,
|
|
1248
|
+
hash=bytes32.from_hexstr(hash),
|
|
1249
|
+
uris=uris,
|
|
1250
|
+
meta_hash=bytes32.from_hexstr(metadata_hash) if metadata_hash is not None else None,
|
|
1251
|
+
meta_uris=metadata_uris,
|
|
1252
|
+
license_hash=bytes32.from_hexstr(license_hash) if license_hash is not None else None,
|
|
1253
|
+
license_uris=license_uris,
|
|
1254
|
+
edition_total=uint64(edition_total) if edition_total is not None else uint64(1),
|
|
1255
|
+
edition_number=uint64(edition_number) if edition_number is not None else uint64(1),
|
|
1256
|
+
fee=fee,
|
|
1257
|
+
royalty_amount=uint16(royalty_percentage),
|
|
1258
|
+
did_id=did_id,
|
|
1259
|
+
push=push,
|
|
1260
|
+
),
|
|
1261
|
+
tx_config=CMDTXConfigLoader(
|
|
1218
1262
|
reuse_puzhash=reuse_puzhash,
|
|
1219
1263
|
).to_tx_config(units["chia"], config, fingerprint),
|
|
1220
|
-
metadata_hash,
|
|
1221
|
-
metadata_uris,
|
|
1222
|
-
license_hash,
|
|
1223
|
-
license_uris,
|
|
1224
|
-
edition_total,
|
|
1225
|
-
edition_number,
|
|
1226
|
-
fee,
|
|
1227
|
-
royalty_percentage,
|
|
1228
|
-
did_id,
|
|
1229
|
-
push=push,
|
|
1230
1264
|
timelock_info=condition_valid_times,
|
|
1231
1265
|
)
|
|
1232
1266
|
spend_bundle = mint_response.spend_bundle
|
|
@@ -1269,15 +1303,17 @@ async def add_uri_to_nft(
|
|
|
1269
1303
|
else:
|
|
1270
1304
|
raise ValueError("You must provide at least one of the URI flags")
|
|
1271
1305
|
response = await wallet_client.add_uri_to_nft(
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1306
|
+
NFTAddURI(
|
|
1307
|
+
wallet_id=uint32(wallet_id),
|
|
1308
|
+
nft_coin_id=nft_coin_id,
|
|
1309
|
+
key=key,
|
|
1310
|
+
uri=uri_value,
|
|
1311
|
+
fee=fee,
|
|
1312
|
+
push=push,
|
|
1313
|
+
),
|
|
1277
1314
|
tx_config=CMDTXConfigLoader(
|
|
1278
1315
|
reuse_puzhash=reuse_puzhash,
|
|
1279
1316
|
).to_tx_config(units["chia"], config, fingerprint),
|
|
1280
|
-
push=push,
|
|
1281
1317
|
timelock_info=condition_valid_times,
|
|
1282
1318
|
)
|
|
1283
1319
|
spend_bundle = response.spend_bundle.to_json_dict()
|
|
@@ -1306,14 +1342,16 @@ async def transfer_nft(
|
|
|
1306
1342
|
try:
|
|
1307
1343
|
target_address = target_cli_address.validate_address_type(AddressType.XCH)
|
|
1308
1344
|
response = await wallet_client.transfer_nft(
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1345
|
+
NFTTransferNFT(
|
|
1346
|
+
wallet_id=uint32(wallet_id),
|
|
1347
|
+
nft_coin_id=nft_coin_id,
|
|
1348
|
+
target_address=target_address,
|
|
1349
|
+
fee=fee,
|
|
1350
|
+
push=push,
|
|
1351
|
+
),
|
|
1313
1352
|
tx_config=CMDTXConfigLoader(
|
|
1314
1353
|
reuse_puzhash=reuse_puzhash,
|
|
1315
1354
|
).to_tx_config(units["chia"], config, fingerprint),
|
|
1316
|
-
push=push,
|
|
1317
1355
|
timelock_info=condition_valid_times,
|
|
1318
1356
|
)
|
|
1319
1357
|
spend_bundle = response.spend_bundle.to_json_dict()
|
|
@@ -1373,11 +1411,10 @@ async def list_nfts(
|
|
|
1373
1411
|
) -> None:
|
|
1374
1412
|
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1375
1413
|
try:
|
|
1376
|
-
response = await wallet_client.list_nfts(wallet_id,
|
|
1377
|
-
nft_list = response
|
|
1414
|
+
response = await wallet_client.list_nfts(NFTGetNFTs(uint32(wallet_id), uint32(start_index), uint32(num)))
|
|
1415
|
+
nft_list = response.nft_list
|
|
1378
1416
|
if len(nft_list) > 0:
|
|
1379
|
-
for
|
|
1380
|
-
nft = NFTInfo.from_json_dict(n)
|
|
1417
|
+
for nft in nft_list:
|
|
1381
1418
|
print_nft_info(nft, config=config)
|
|
1382
1419
|
else:
|
|
1383
1420
|
print(f"No NFTs found for wallet with id {wallet_id} on key {fingerprint}")
|
|
@@ -1401,14 +1438,16 @@ async def set_nft_did(
|
|
|
1401
1438
|
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1402
1439
|
try:
|
|
1403
1440
|
response = await wallet_client.set_nft_did(
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1441
|
+
NFTSetNFTDID(
|
|
1442
|
+
wallet_id=uint32(wallet_id),
|
|
1443
|
+
did_id=did_id,
|
|
1444
|
+
nft_coin_id=bytes32.from_hexstr(nft_coin_id),
|
|
1445
|
+
fee=fee,
|
|
1446
|
+
push=push,
|
|
1447
|
+
),
|
|
1408
1448
|
tx_config=CMDTXConfigLoader(
|
|
1409
1449
|
reuse_puzhash=reuse_puzhash,
|
|
1410
1450
|
).to_tx_config(units["chia"], config, fingerprint),
|
|
1411
|
-
push=push,
|
|
1412
1451
|
timelock_info=condition_valid_times,
|
|
1413
1452
|
)
|
|
1414
1453
|
spend_bundle = response.spend_bundle.to_json_dict()
|
|
@@ -1424,9 +1463,8 @@ async def get_nft_info(
|
|
|
1424
1463
|
) -> None:
|
|
1425
1464
|
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, config):
|
|
1426
1465
|
try:
|
|
1427
|
-
response = await wallet_client.get_nft_info(nft_coin_id)
|
|
1428
|
-
nft_info =
|
|
1429
|
-
print_nft_info(nft_info, config=config)
|
|
1466
|
+
response = await wallet_client.get_nft_info(NFTGetInfo(nft_coin_id))
|
|
1467
|
+
print_nft_info(response.nft_info, config=config)
|
|
1430
1468
|
except Exception as e:
|
|
1431
1469
|
print(f"Failed to get NFT info: {e}")
|
|
1432
1470
|
|
|
@@ -1434,7 +1472,7 @@ async def get_nft_info(
|
|
|
1434
1472
|
async def get_nft_royalty_percentage_and_address(
|
|
1435
1473
|
nft_coin_id: bytes32, wallet_client: WalletRpcClient
|
|
1436
1474
|
) -> tuple[uint16, bytes32]:
|
|
1437
|
-
info =
|
|
1475
|
+
info = (await wallet_client.get_nft_info(NFTGetInfo(nft_coin_id.hex()))).nft_info
|
|
1438
1476
|
assert info.royalty_puzzle_hash is not None
|
|
1439
1477
|
percentage = uint16(info.royalty_percentage) if info.royalty_percentage is not None else 0
|
|
1440
1478
|
return uint16(percentage), info.royalty_puzzle_hash
|
|
@@ -1469,11 +1507,7 @@ def driver_dict_asset_is_nft_supporting_royalties(driver_dict: dict[bytes32, Puz
|
|
|
1469
1507
|
|
|
1470
1508
|
def driver_dict_asset_is_fungible(driver_dict: dict[bytes32, PuzzleInfo], asset_id: bytes32) -> bool:
|
|
1471
1509
|
asset_dict: PuzzleInfo = driver_dict[asset_id]
|
|
1472
|
-
return
|
|
1473
|
-
[
|
|
1474
|
-
AssetType.SINGLETON.value,
|
|
1475
|
-
]
|
|
1476
|
-
)
|
|
1510
|
+
return asset_dict.type() != AssetType.SINGLETON.value
|
|
1477
1511
|
|
|
1478
1512
|
|
|
1479
1513
|
def nft_coin_ids_supporting_royalties_from_offer(offer: Offer) -> list[bytes32]:
|
|
@@ -2,12 +2,11 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING, ClassVar, Optional, cast
|
|
4
4
|
|
|
5
|
+
from chia_rs import BlockRecord, FullBlock
|
|
5
6
|
from chia_rs.sized_bytes import bytes32
|
|
6
7
|
from chia_rs.sized_ints import uint32
|
|
7
8
|
|
|
8
|
-
from chia.consensus.block_record import BlockRecord
|
|
9
9
|
from chia.consensus.blockchain_interface import BlocksProtocol
|
|
10
|
-
from chia.types.full_block import FullBlock
|
|
11
10
|
from chia.util.errors import Err
|
|
12
11
|
|
|
13
12
|
|