chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__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/README.md +1 -1
- chia/_tests/blockchain/blockchain_test_utils.py +24 -26
- chia/_tests/blockchain/test_augmented_chain.py +6 -8
- chia/_tests/blockchain/test_blockchain.py +409 -307
- chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
- chia/_tests/blockchain/test_build_chains.py +11 -13
- chia/_tests/blockchain/test_get_block_generator.py +8 -8
- chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
- chia/_tests/build-init-files.py +3 -4
- chia/_tests/build-job-matrix.py +9 -9
- chia/_tests/check_sql_statements.py +2 -3
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +7 -5
- chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
- chia/_tests/clvm/test_condition_codes.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +2 -4
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_puzzle_compression.py +1 -2
- chia/_tests/clvm/test_puzzle_drivers.py +3 -3
- chia/_tests/clvm/test_puzzles.py +13 -18
- chia/_tests/clvm/test_singletons.py +17 -17
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +42 -45
- chia/_tests/cmds/conftest.py +2 -2
- chia/_tests/cmds/test_click_types.py +21 -16
- chia/_tests/cmds/test_cmd_framework.py +255 -35
- chia/_tests/cmds/test_cmds_util.py +2 -2
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +1 -2
- chia/_tests/cmds/test_show.py +6 -6
- chia/_tests/cmds/test_tx_config_args.py +2 -1
- chia/_tests/cmds/wallet/test_dao.py +23 -23
- chia/_tests/cmds/wallet/test_did.py +29 -29
- chia/_tests/cmds/wallet/test_nft.py +24 -23
- chia/_tests/cmds/wallet/test_notifications.py +8 -8
- chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
- chia/_tests/cmds/wallet/test_vcs.py +97 -73
- chia/_tests/cmds/wallet/test_wallet.py +74 -75
- chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
- chia/_tests/conftest.py +153 -38
- chia/_tests/connection_utils.py +7 -6
- chia/_tests/core/cmds/test_beta.py +3 -3
- chia/_tests/core/cmds/test_keys.py +6 -6
- chia/_tests/core/cmds/test_wallet.py +3 -3
- chia/_tests/core/consensus/test_block_creation.py +3 -5
- chia/_tests/core/custom_types/test_coin.py +1 -3
- chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
- chia/_tests/core/daemon/test_daemon.py +58 -58
- chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
- chia/_tests/core/data_layer/conftest.py +4 -3
- chia/_tests/core/data_layer/test_data_cli.py +1 -2
- chia/_tests/core/data_layer/test_data_layer.py +5 -5
- chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
- chia/_tests/core/data_layer/test_data_rpc.py +75 -93
- chia/_tests/core/data_layer/test_data_store.py +38 -37
- chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
- chia/_tests/core/data_layer/util.py +11 -10
- chia/_tests/core/farmer/test_farmer_api.py +6 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
- chia/_tests/core/full_node/ram_db.py +2 -2
- chia/_tests/core/full_node/stores/test_block_store.py +113 -11
- chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
- chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
- chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
- chia/_tests/core/full_node/test_address_manager.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_conditions.py +10 -12
- chia/_tests/core/full_node/test_full_node.py +2077 -1822
- chia/_tests/core/full_node/test_generator_tools.py +4 -4
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -5
- chia/_tests/core/full_node/test_subscriptions.py +4 -4
- chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
- chia/_tests/core/make_block_generator.py +5 -7
- chia/_tests/core/mempool/test_mempool.py +205 -208
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
- chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
- chia/_tests/core/mempool/test_mempool_manager.py +109 -80
- chia/_tests/core/mempool/test_mempool_performance.py +3 -4
- chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
- chia/_tests/core/server/flood.py +6 -4
- chia/_tests/core/server/serve.py +10 -7
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +3 -5
- chia/_tests/core/server/test_dos.py +15 -16
- chia/_tests/core/server/test_loop.py +14 -10
- chia/_tests/core/server/test_node_discovery.py +1 -2
- chia/_tests/core/server/test_rate_limits.py +156 -44
- chia/_tests/core/server/test_server.py +8 -7
- chia/_tests/core/services/test_services.py +59 -37
- chia/_tests/core/ssl/test_ssl.py +5 -3
- chia/_tests/core/test_cost_calculation.py +5 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +5 -4
- chia/_tests/core/test_db_validation.py +6 -5
- chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
- chia/_tests/core/test_filter.py +3 -5
- chia/_tests/core/test_full_node_rpc.py +64 -90
- chia/_tests/core/test_merkle_set.py +10 -10
- chia/_tests/core/test_program.py +2 -4
- chia/_tests/core/test_rpc_util.py +1 -2
- chia/_tests/core/test_seeder.py +124 -12
- chia/_tests/core/util/test_block_cache.py +5 -5
- chia/_tests/core/util/test_cached_bls.py +3 -3
- chia/_tests/core/util/test_config.py +13 -13
- chia/_tests/core/util/test_files.py +2 -2
- chia/_tests/core/util/test_jsonify.py +9 -9
- chia/_tests/core/util/test_keychain.py +13 -5
- chia/_tests/core/util/test_keyring_wrapper.py +6 -5
- chia/_tests/core/util/test_log_exceptions.py +3 -3
- chia/_tests/core/util/test_streamable.py +38 -38
- chia/_tests/db/test_db_wrapper.py +13 -12
- chia/_tests/environments/common.py +2 -2
- chia/_tests/environments/full_node.py +2 -2
- chia/_tests/environments/wallet.py +109 -48
- chia/_tests/farmer_harvester/test_farmer.py +35 -35
- chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
- chia/_tests/generator/test_compression.py +13 -30
- chia/_tests/generator/test_generator_types.py +3 -3
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -3
- chia/_tests/plot_sync/test_plot_sync.py +25 -24
- chia/_tests/plot_sync/test_receiver.py +9 -9
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +27 -26
- chia/_tests/plot_sync/util.py +2 -1
- chia/_tests/plotting/test_plot_manager.py +54 -11
- chia/_tests/plotting/util.py +2 -3
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +993 -15
- chia/_tests/pools/test_pool_config.py +3 -5
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
- chia/_tests/pools/test_pool_rpc.py +203 -90
- chia/_tests/pools/test_pool_wallet.py +12 -8
- chia/_tests/pools/test_wallet_pool_store.py +3 -3
- chia/_tests/process_junit.py +16 -17
- chia/_tests/rpc/test_rpc_client.py +59 -2
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/test_simulation.py +5 -5
- chia/_tests/simulation/test_simulator.py +8 -10
- chia/_tests/simulation/test_start_simulator.py +5 -4
- chia/_tests/timelord/test_new_peak.py +19 -19
- chia/_tests/tools/test_run_block.py +1 -2
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/benchmark_cost.py +9 -9
- chia/_tests/util/benchmarks.py +1 -2
- chia/_tests/util/blockchain.py +12 -11
- chia/_tests/util/blockchain_mock.py +15 -15
- chia/_tests/util/build_network_protocol_files.py +12 -12
- chia/_tests/util/db_connection.py +3 -2
- chia/_tests/util/full_sync.py +14 -6
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/generator_tools_testing.py +5 -7
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +59 -106
- chia/_tests/util/network_protocol_data.py +7 -9
- chia/_tests/util/protocol_messages_json.py +112 -111
- chia/_tests/util/rpc.py +3 -0
- chia/_tests/util/run_block.py +16 -16
- chia/_tests/util/setup_nodes.py +25 -23
- chia/{clvm → _tests/util}/spend_sim.py +59 -55
- chia/_tests/util/split_managers.py +12 -9
- chia/_tests/util/temp_file.py +1 -1
- chia/_tests/util/test_action_scope.py +2 -1
- chia/_tests/util/test_async_pool.py +8 -8
- chia/_tests/util/test_build_job_matrix.py +2 -3
- chia/_tests/util/test_condition_tools.py +4 -6
- chia/_tests/util/test_config.py +5 -5
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +19 -11
- chia/_tests/util/test_limited_semaphore.py +4 -3
- chia/_tests/util/test_logging_filter.py +2 -3
- chia/_tests/util/test_misc.py +29 -28
- chia/_tests/util/test_network.py +32 -31
- chia/_tests/util/test_network_protocol_files.py +2 -3
- chia/_tests/util/test_network_protocol_json.py +1 -0
- chia/_tests/util/test_network_protocol_test.py +18 -19
- chia/_tests/util/test_paginator.py +3 -4
- chia/_tests/util/test_pprint.py +1 -1
- chia/_tests/util/test_priority_mutex.py +18 -17
- chia/_tests/util/test_recursive_replace.py +2 -2
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/test_timing.py +1 -1
- chia/_tests/util/test_trusted_peer.py +2 -2
- chia/_tests/util/time_out_assert.py +43 -6
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
- chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
- chia/_tests/wallet/conftest.py +135 -74
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
- chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
- chia/_tests/wallet/did_wallet/test_did.py +1277 -474
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
- chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
- chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
- chia/_tests/wallet/test_address_type.py +20 -20
- chia/_tests/wallet/test_clvm_streamable.py +5 -5
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +34 -35
- chia/_tests/wallet/test_conditions.py +28 -16
- chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
- chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
- chia/_tests/wallet/test_nft_store.py +1 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
- chia/_tests/wallet/test_puzzle_store.py +2 -3
- chia/_tests/wallet/test_sign_coin_spends.py +3 -3
- chia/_tests/wallet/test_signer_protocol.py +33 -34
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
- chia/_tests/wallet/test_taproot.py +1 -1
- chia/_tests/wallet/test_transaction_store.py +23 -19
- chia/_tests/wallet/test_util.py +36 -32
- chia/_tests/wallet/test_wallet.py +37 -37
- chia/_tests/wallet/test_wallet_action_scope.py +8 -8
- chia/_tests/wallet/test_wallet_blockchain.py +4 -6
- chia/_tests/wallet/test_wallet_coin_store.py +34 -34
- chia/_tests/wallet/test_wallet_node.py +69 -72
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +12 -5
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +5 -4
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
- chia/_tests/wallet/wallet_block_tools.py +27 -27
- chia/_tests/weight_proof/test_weight_proof.py +30 -30
- chia/apis.py +19 -0
- chia/cmds/beta.py +8 -7
- chia/cmds/beta_funcs.py +15 -11
- chia/cmds/check_wallet_db.py +29 -27
- chia/cmds/chia.py +17 -9
- chia/cmds/cmd_classes.py +87 -79
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +56 -66
- chia/cmds/coin_funcs.py +168 -153
- chia/cmds/coins.py +156 -194
- chia/cmds/configure.py +4 -3
- chia/cmds/dao.py +89 -33
- chia/cmds/dao_funcs.py +55 -33
- chia/cmds/data.py +7 -6
- chia/cmds/data_funcs.py +26 -21
- chia/cmds/db.py +4 -3
- 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.py +2 -0
- chia/cmds/farm.py +18 -5
- chia/cmds/farm_funcs.py +17 -24
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +4 -11
- chia/cmds/init_funcs.py +9 -9
- chia/cmds/installers.py +5 -3
- chia/cmds/keys.py +56 -39
- chia/cmds/keys_funcs.py +30 -31
- chia/cmds/netspace.py +6 -3
- chia/cmds/netspace_funcs.py +3 -2
- chia/cmds/param_types.py +16 -6
- chia/cmds/passphrase.py +8 -7
- chia/cmds/passphrase_funcs.py +7 -61
- chia/cmds/peer.py +2 -1
- chia/cmds/peer_funcs.py +5 -5
- chia/cmds/plotnft.py +207 -153
- chia/cmds/plotnft_funcs.py +205 -174
- chia/cmds/plots.py +14 -6
- chia/cmds/plotters.py +2 -1
- chia/cmds/rpc.py +48 -28
- chia/cmds/show.py +2 -1
- chia/cmds/show_funcs.py +7 -6
- chia/cmds/signer.py +50 -58
- chia/cmds/sim.py +22 -14
- chia/cmds/sim_funcs.py +11 -11
- chia/cmds/start.py +3 -3
- chia/cmds/start_funcs.py +9 -12
- chia/cmds/stop.py +4 -3
- chia/cmds/units.py +1 -3
- chia/cmds/wallet.py +252 -96
- chia/cmds/wallet_funcs.py +217 -143
- chia/consensus/block_body_validation.py +133 -86
- chia/consensus/block_creation.py +42 -21
- chia/consensus/block_header_validation.py +32 -37
- chia/consensus/block_record.py +1 -2
- chia/consensus/blockchain.py +167 -180
- chia/consensus/blockchain_interface.py +10 -10
- chia/consensus/constants.py +2 -2
- chia/consensus/default_constants.py +3 -4
- chia/consensus/difficulty_adjustment.py +5 -5
- chia/consensus/find_fork_point.py +5 -5
- chia/consensus/full_block_to_block_record.py +4 -4
- chia/consensus/get_block_challenge.py +2 -2
- chia/consensus/get_block_generator.py +4 -3
- chia/consensus/multiprocess_validation.py +207 -304
- chia/consensus/vdf_info_computation.py +3 -3
- chia/daemon/client.py +46 -27
- chia/daemon/keychain_proxy.py +10 -9
- chia/daemon/keychain_server.py +18 -18
- chia/daemon/server.py +103 -113
- chia/daemon/windows_signal.py +2 -2
- chia/data_layer/data_layer.py +64 -76
- chia/data_layer/data_layer_api.py +8 -0
- chia/data_layer/data_layer_errors.py +3 -3
- chia/data_layer/data_layer_server.py +2 -2
- chia/data_layer/data_layer_util.py +71 -71
- chia/data_layer/data_layer_wallet.py +63 -67
- chia/data_layer/data_store.py +72 -72
- chia/data_layer/dl_wallet_store.py +10 -10
- chia/data_layer/download_data.py +5 -5
- chia/data_layer/s3_plugin_service.py +9 -9
- chia/data_layer/util/benchmark.py +0 -1
- chia/data_layer/util/plugin.py +2 -3
- chia/farmer/farmer.py +46 -43
- chia/farmer/farmer_api.py +27 -21
- chia/full_node/block_height_map.py +6 -6
- chia/full_node/block_store.py +41 -35
- chia/full_node/coin_store.py +42 -41
- chia/full_node/fee_estimate.py +2 -2
- chia/full_node/fee_estimation.py +1 -2
- chia/full_node/fee_history.py +5 -6
- chia/full_node/fee_tracker.py +24 -24
- chia/full_node/full_node.py +574 -300
- chia/full_node/full_node_api.py +181 -130
- chia/full_node/full_node_store.py +43 -43
- chia/full_node/hint_management.py +4 -4
- chia/full_node/hint_store.py +9 -10
- chia/full_node/mempool.py +25 -19
- chia/full_node/mempool_check_conditions.py +11 -42
- chia/full_node/mempool_manager.py +48 -53
- chia/full_node/pending_tx_cache.py +9 -9
- chia/full_node/subscriptions.py +23 -24
- chia/full_node/sync_store.py +8 -7
- chia/full_node/tx_processing_queue.py +3 -3
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +79 -78
- chia/harvester/harvester.py +9 -8
- chia/harvester/harvester_api.py +19 -13
- chia/introducer/introducer.py +7 -5
- chia/introducer/introducer_api.py +9 -3
- chia/legacy/keyring.py +6 -5
- chia/plot_sync/delta.py +8 -8
- chia/plot_sync/receiver.py +12 -11
- chia/plot_sync/sender.py +15 -12
- chia/plotters/bladebit.py +12 -12
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +8 -8
- chia/plotters/plotters.py +6 -6
- chia/plotters/plotters_util.py +6 -4
- chia/plotting/cache.py +8 -7
- chia/plotting/check_plots.py +8 -8
- chia/plotting/create_plots.py +6 -6
- chia/plotting/manager.py +22 -22
- chia/plotting/util.py +31 -19
- chia/pools/pool_config.py +7 -7
- chia/pools/pool_puzzles.py +16 -16
- chia/pools/pool_wallet.py +64 -57
- chia/pools/pool_wallet_info.py +3 -3
- chia/protocols/full_node_protocol.py +3 -3
- chia/protocols/harvester_protocol.py +12 -12
- chia/protocols/introducer_protocol.py +1 -2
- chia/protocols/protocol_message_types.py +4 -4
- chia/protocols/protocol_state_machine.py +2 -2
- chia/protocols/protocol_timing.py +1 -0
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +2 -2
- chia/protocols/wallet_protocol.py +33 -33
- chia/rpc/crawler_rpc_api.py +12 -7
- chia/rpc/data_layer_rpc_api.py +49 -44
- chia/rpc/data_layer_rpc_client.py +41 -41
- chia/rpc/data_layer_rpc_util.py +7 -11
- chia/rpc/farmer_rpc_api.py +32 -27
- chia/rpc/farmer_rpc_client.py +14 -14
- chia/rpc/full_node_rpc_api.py +53 -48
- chia/rpc/full_node_rpc_client.py +30 -30
- chia/rpc/harvester_rpc_api.py +16 -11
- chia/rpc/harvester_rpc_client.py +6 -6
- chia/rpc/rpc_client.py +34 -14
- chia/rpc/rpc_server.py +117 -43
- chia/rpc/timelord_rpc_api.py +9 -4
- chia/rpc/util.py +11 -211
- chia/rpc/wallet_request_types.py +276 -60
- chia/rpc/wallet_rpc_api.py +563 -399
- chia/rpc/wallet_rpc_client.py +220 -250
- chia/seeder/crawl_store.py +6 -8
- chia/seeder/crawler.py +23 -36
- chia/seeder/crawler_api.py +28 -22
- chia/seeder/dns_server.py +99 -50
- chia/seeder/start_crawler.py +13 -9
- chia/server/address_manager.py +19 -19
- chia/server/address_manager_store.py +17 -17
- chia/server/api_protocol.py +106 -1
- chia/server/capabilities.py +3 -3
- chia/server/chia_policy.py +17 -16
- chia/server/introducer_peers.py +3 -3
- chia/server/node_discovery.py +34 -38
- chia/server/rate_limit_numbers.py +26 -16
- chia/server/rate_limits.py +67 -27
- chia/server/server.py +52 -31
- chia/server/signal_handlers.py +6 -3
- chia/server/ssl_context.py +5 -5
- chia/server/start_data_layer.py +37 -23
- chia/server/start_farmer.py +28 -16
- chia/server/start_full_node.py +29 -23
- chia/server/start_harvester.py +28 -15
- chia/server/start_introducer.py +27 -15
- chia/server/start_service.py +17 -29
- chia/server/start_timelord.py +25 -18
- chia/server/start_wallet.py +22 -18
- chia/server/upnp.py +4 -3
- chia/server/ws_connection.py +68 -54
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +65 -64
- chia/simulator/full_node_simulator.py +66 -74
- chia/simulator/setup_services.py +10 -9
- chia/simulator/simulator_full_node_rpc_api.py +12 -14
- chia/simulator/simulator_full_node_rpc_client.py +3 -5
- chia/simulator/simulator_test_tools.py +8 -7
- chia/simulator/socket.py +1 -4
- chia/simulator/ssl_certs.py +5 -5
- chia/simulator/ssl_certs_1.py +2 -4
- chia/simulator/ssl_certs_10.py +2 -4
- chia/simulator/ssl_certs_2.py +2 -4
- chia/simulator/ssl_certs_3.py +2 -4
- chia/simulator/ssl_certs_4.py +2 -4
- chia/simulator/ssl_certs_5.py +2 -4
- chia/simulator/ssl_certs_6.py +2 -4
- chia/simulator/ssl_certs_7.py +2 -4
- chia/simulator/ssl_certs_8.py +2 -4
- chia/simulator/ssl_certs_9.py +2 -4
- chia/simulator/start_simulator.py +14 -6
- chia/simulator/wallet_tools.py +21 -20
- chia/ssl/create_ssl.py +11 -11
- chia/timelord/iters_from_block.py +2 -2
- chia/timelord/timelord.py +57 -33
- chia/timelord/timelord_api.py +12 -6
- chia/timelord/timelord_launcher.py +10 -8
- chia/timelord/timelord_state.py +5 -5
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +3 -3
- chia/types/blockchain_format/program.py +17 -18
- chia/types/blockchain_format/tree_hash.py +9 -9
- chia/types/coin_spend.py +8 -8
- chia/types/condition_with_args.py +1 -2
- chia/types/eligible_coin_spends.py +16 -15
- chia/types/generator_types.py +1 -2
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +7 -7
- chia/types/mempool_submission_status.py +2 -2
- chia/types/peer_info.py +1 -1
- chia/types/spend_bundle.py +1 -2
- chia/types/transaction_queue_entry.py +2 -2
- chia/types/unfinished_header_block.py +2 -2
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +5 -6
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +6 -4
- chia/util/augmented_chain.py +13 -9
- chia/util/batches.py +5 -2
- chia/util/bech32m.py +14 -11
- chia/util/beta_metrics.py +5 -4
- chia/util/block_cache.py +5 -5
- chia/util/byte_types.py +2 -0
- chia/util/check_fork_next_block.py +3 -2
- chia/util/chia_logging.py +41 -21
- chia/util/collection.py +3 -3
- chia/util/condition_tools.py +18 -18
- chia/util/config.py +26 -25
- chia/util/cpu.py +2 -0
- chia/util/db_synchronous.py +2 -0
- chia/util/db_version.py +2 -0
- chia/util/db_wrapper.py +13 -10
- chia/util/default_root.py +17 -0
- chia/util/dump_keyring.py +6 -6
- chia/util/errors.py +5 -3
- chia/util/file_keyring.py +22 -33
- chia/util/files.py +2 -0
- chia/util/full_block_utils.py +31 -7
- chia/util/generator_tools.py +18 -8
- chia/util/hash.py +3 -1
- chia/util/initial-config.yaml +19 -0
- chia/util/inline_executor.py +2 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +0 -4
- chia/util/keychain.py +27 -24
- chia/util/keyring_wrapper.py +65 -4
- chia/util/limited_semaphore.py +3 -1
- chia/util/lock.py +4 -2
- chia/util/log_exceptions.py +5 -2
- chia/util/logging.py +3 -1
- chia/util/lru_cache.py +2 -0
- chia/util/math.py +4 -4
- chia/util/network.py +15 -73
- chia/util/paginator.py +3 -1
- chia/util/path.py +2 -0
- chia/util/permissions.py +3 -2
- chia/util/prev_transaction_block.py +1 -3
- chia/util/priority_mutex.py +6 -3
- chia/util/profiler.py +7 -4
- chia/util/recursive_replace.py +2 -0
- chia/util/safe_cancel_task.py +2 -0
- chia/util/service_groups.py +2 -2
- chia/util/setproctitle.py +2 -0
- chia/util/significant_bits.py +2 -0
- chia/util/ssl_check.py +11 -11
- chia/util/streamable.py +44 -56
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +22 -18
- chia/util/timing.py +4 -1
- chia/util/vdf_prover.py +2 -3
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +6 -6
- chia/wallet/cat_wallet/cat_info.py +3 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
- chia/wallet/cat_wallet/cat_utils.py +5 -4
- chia/wallet/cat_wallet/cat_wallet.py +56 -70
- chia/wallet/cat_wallet/dao_cat_info.py +3 -3
- chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -2
- chia/wallet/coin_selection.py +15 -15
- chia/wallet/conditions.py +257 -71
- chia/wallet/dao_wallet/dao_info.py +4 -4
- chia/wallet/dao_wallet/dao_utils.py +43 -42
- chia/wallet/dao_wallet/dao_wallet.py +66 -68
- chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
- chia/wallet/derive_keys.py +11 -11
- chia/wallet/did_wallet/did_info.py +3 -3
- chia/wallet/did_wallet/did_wallet.py +56 -47
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/nft_info.py +4 -4
- chia/wallet/nft_wallet/nft_puzzles.py +16 -16
- chia/wallet/nft_wallet/nft_wallet.py +90 -89
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
- chia/wallet/nft_wallet/uncurry_nft.py +2 -2
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +6 -6
- chia/wallet/outer_puzzles.py +2 -2
- chia/wallet/payment.py +4 -5
- chia/wallet/puzzle_drivers.py +4 -4
- chia/wallet/puzzles/clawback/drivers.py +5 -5
- chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
- chia/wallet/puzzles/load_clvm.py +2 -3
- chia/wallet/puzzles/p2_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
- chia/wallet/puzzles/puzzle_utils.py +7 -7
- chia/wallet/puzzles/singleton_top_layer.py +6 -5
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
- chia/wallet/puzzles/tails.py +34 -30
- chia/wallet/signer_protocol.py +7 -8
- chia/wallet/singleton.py +4 -4
- chia/wallet/trade_manager.py +155 -141
- chia/wallet/trade_record.py +5 -5
- chia/wallet/trading/offer.py +100 -101
- chia/wallet/trading/trade_store.py +14 -14
- chia/wallet/transaction_record.py +31 -16
- chia/wallet/util/address_type.py +4 -4
- chia/wallet/util/blind_signer_tl.py +8 -12
- chia/wallet/util/clvm_streamable.py +15 -15
- chia/wallet/util/compute_hints.py +5 -5
- chia/wallet/util/compute_memos.py +4 -6
- chia/wallet/util/curry_and_treehash.py +3 -2
- chia/wallet/util/debug_spend_bundle.py +6 -8
- chia/wallet/util/merkle_tree.py +10 -10
- chia/wallet/util/merkle_utils.py +10 -10
- chia/wallet/util/new_peak_queue.py +3 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/{util → wallet/util}/pprint.py +2 -3
- chia/wallet/util/puzzle_compression.py +3 -4
- chia/wallet/util/puzzle_decorator.py +10 -10
- chia/wallet/util/query_filter.py +9 -10
- chia/wallet/util/tx_config.py +12 -12
- chia/wallet/util/wallet_sync_utils.py +24 -21
- chia/wallet/util/wallet_types.py +9 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
- chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
- chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
- chia/wallet/vc_wallet/vc_drivers.py +16 -16
- chia/wallet/vc_wallet/vc_store.py +9 -9
- chia/wallet/vc_wallet/vc_wallet.py +35 -35
- chia/wallet/wallet.py +54 -54
- chia/wallet/wallet_action_scope.py +14 -13
- chia/wallet/wallet_blockchain.py +10 -10
- chia/wallet/wallet_coin_record.py +2 -2
- chia/wallet/wallet_coin_store.py +10 -10
- chia/wallet/wallet_info.py +1 -2
- chia/wallet/wallet_interested_store.py +5 -5
- chia/wallet/wallet_nft_store.py +6 -6
- chia/wallet/wallet_node.py +72 -76
- chia/wallet/wallet_node_api.py +33 -27
- chia/wallet/wallet_pool_store.py +1 -2
- chia/wallet/wallet_protocol.py +15 -15
- chia/wallet/wallet_puzzle_store.py +35 -4
- chia/wallet/wallet_retry_store.py +2 -2
- chia/wallet/wallet_singleton_store.py +10 -9
- chia/wallet/wallet_spend_bundle.py +4 -20
- chia/wallet/wallet_state_manager.py +223 -224
- chia/wallet/wallet_transaction_store.py +44 -18
- chia/wallet/wallet_user_store.py +2 -2
- chia/wallet/wallet_weight_proof_handler.py +2 -2
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
- chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
- mozilla-ca/cacert.pem +32 -87
- chia/_tests/cmds/wallet/test_coins.py +0 -195
- chia/consensus/block_root_validation.py +0 -46
- chia/util/api_decorators.py +0 -89
- chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
- {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
chia/cmds/wallet_funcs.py
CHANGED
|
@@ -6,9 +6,10 @@ import os
|
|
|
6
6
|
import pathlib
|
|
7
7
|
import sys
|
|
8
8
|
import time
|
|
9
|
+
from collections.abc import Awaitable, Sequence
|
|
9
10
|
from datetime import datetime, timezone
|
|
10
11
|
from decimal import Decimal
|
|
11
|
-
from typing import Any,
|
|
12
|
+
from typing import Any, Callable, Optional, Union
|
|
12
13
|
|
|
13
14
|
from chia.cmds.cmds_util import (
|
|
14
15
|
CMDTXConfigLoader,
|
|
@@ -20,7 +21,18 @@ from chia.cmds.cmds_util import (
|
|
|
20
21
|
from chia.cmds.param_types import CliAddress, CliAmount
|
|
21
22
|
from chia.cmds.peer_funcs import print_connections
|
|
22
23
|
from chia.cmds.units import units
|
|
23
|
-
from chia.rpc.wallet_request_types import
|
|
24
|
+
from chia.rpc.wallet_request_types import (
|
|
25
|
+
CATSpendResponse,
|
|
26
|
+
GetNotifications,
|
|
27
|
+
SendTransactionResponse,
|
|
28
|
+
VCAddProofs,
|
|
29
|
+
VCGet,
|
|
30
|
+
VCGetList,
|
|
31
|
+
VCGetProofsForRoot,
|
|
32
|
+
VCMint,
|
|
33
|
+
VCRevoke,
|
|
34
|
+
VCSpend,
|
|
35
|
+
)
|
|
24
36
|
from chia.rpc.wallet_rpc_client import WalletRpcClient
|
|
25
37
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
26
38
|
from chia.util.bech32m import bech32_decode, decode_puzzle_hash, encode_puzzle_hash
|
|
@@ -44,7 +56,7 @@ from chia.wallet.util.wallet_types import WalletType
|
|
|
44
56
|
from chia.wallet.vc_wallet.vc_store import VCProofs
|
|
45
57
|
from chia.wallet.wallet_coin_store import GetCoinRecords
|
|
46
58
|
|
|
47
|
-
CATNameResolver = Callable[[bytes32], Awaitable[Optional[
|
|
59
|
+
CATNameResolver = Callable[[bytes32], Awaitable[Optional[tuple[Optional[uint32], str]]]]
|
|
48
60
|
|
|
49
61
|
transaction_type_descriptions = {
|
|
50
62
|
TransactionType.INCOMING_TX: "received",
|
|
@@ -69,7 +81,7 @@ def print_transaction(
|
|
|
69
81
|
name: str,
|
|
70
82
|
address_prefix: str,
|
|
71
83
|
mojo_per_unit: int,
|
|
72
|
-
coin_record: Optional[
|
|
84
|
+
coin_record: Optional[dict[str, Any]] = None,
|
|
73
85
|
) -> None:
|
|
74
86
|
if verbose:
|
|
75
87
|
print(tx)
|
|
@@ -124,7 +136,7 @@ async def get_wallet_type(wallet_id: int, wallet_client: WalletRpcClient) -> Wal
|
|
|
124
136
|
|
|
125
137
|
|
|
126
138
|
async def get_unit_name_for_wallet_id(
|
|
127
|
-
config:
|
|
139
|
+
config: dict[str, Any],
|
|
128
140
|
wallet_type: WalletType,
|
|
129
141
|
wallet_id: int,
|
|
130
142
|
wallet_client: WalletRpcClient,
|
|
@@ -145,9 +157,9 @@ async def get_unit_name_for_wallet_id(
|
|
|
145
157
|
|
|
146
158
|
|
|
147
159
|
async def get_transaction(
|
|
148
|
-
*, wallet_rpc_port: Optional[int], fingerprint: Optional[int], tx_id: str, verbose: int
|
|
160
|
+
*, root_path: pathlib.Path, wallet_rpc_port: Optional[int], fingerprint: Optional[int], tx_id: str, verbose: int
|
|
149
161
|
) -> None:
|
|
150
|
-
async with get_wallet_client(wallet_rpc_port, fingerprint) as (wallet_client, fingerprint, config):
|
|
162
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fingerprint) as (wallet_client, fingerprint, config):
|
|
151
163
|
transaction_id = bytes32.from_hexstr(tx_id)
|
|
152
164
|
address_prefix = selected_network_address_prefix(config)
|
|
153
165
|
tx: TransactionRecord = await wallet_client.get_transaction(transaction_id=transaction_id)
|
|
@@ -176,6 +188,7 @@ async def get_transaction(
|
|
|
176
188
|
|
|
177
189
|
async def get_transactions(
|
|
178
190
|
*,
|
|
191
|
+
root_path: pathlib.Path,
|
|
179
192
|
wallet_rpc_port: Optional[int],
|
|
180
193
|
fp: Optional[int],
|
|
181
194
|
wallet_id: int,
|
|
@@ -187,7 +200,7 @@ async def get_transactions(
|
|
|
187
200
|
reverse: bool,
|
|
188
201
|
clawback: bool,
|
|
189
202
|
) -> None:
|
|
190
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client,
|
|
203
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, config):
|
|
191
204
|
if paginate is None:
|
|
192
205
|
paginate = sys.stdout.isatty()
|
|
193
206
|
type_filter = (
|
|
@@ -197,7 +210,7 @@ async def get_transactions(
|
|
|
197
210
|
[TransactionType.INCOMING_CLAWBACK_RECEIVE, TransactionType.INCOMING_CLAWBACK_SEND]
|
|
198
211
|
)
|
|
199
212
|
)
|
|
200
|
-
txs:
|
|
213
|
+
txs: list[TransactionRecord] = await wallet_client.get_transactions(
|
|
201
214
|
wallet_id, start=offset, end=(offset + limit), sort_key=sort_key, reverse=reverse, type_filter=type_filter
|
|
202
215
|
)
|
|
203
216
|
|
|
@@ -224,7 +237,7 @@ async def get_transactions(
|
|
|
224
237
|
for j in range(0, num_per_screen):
|
|
225
238
|
if i + j + skipped >= len(txs):
|
|
226
239
|
break
|
|
227
|
-
coin_record: Optional[
|
|
240
|
+
coin_record: Optional[dict[str, Any]] = None
|
|
228
241
|
if txs[i + j + skipped].type in CLAWBACK_INCOMING_TRANSACTION_TYPES:
|
|
229
242
|
coin_records = await wallet_client.get_coin_records(
|
|
230
243
|
GetCoinRecords(coin_id_filter=HashFilter.include([txs[i + j + skipped].additions[0].name()]))
|
|
@@ -260,6 +273,7 @@ def check_unusual_transaction(amount: uint64, fee: uint64) -> bool:
|
|
|
260
273
|
|
|
261
274
|
async def send(
|
|
262
275
|
*,
|
|
276
|
+
root_path: pathlib.Path,
|
|
263
277
|
wallet_rpc_port: Optional[int],
|
|
264
278
|
fp: Optional[int],
|
|
265
279
|
wallet_id: int,
|
|
@@ -275,8 +289,8 @@ async def send(
|
|
|
275
289
|
clawback_time_lock: int,
|
|
276
290
|
push: bool,
|
|
277
291
|
condition_valid_times: ConditionValidTimes,
|
|
278
|
-
) ->
|
|
279
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
292
|
+
) -> list[TransactionRecord]:
|
|
293
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
280
294
|
if memo is None:
|
|
281
295
|
memos = None
|
|
282
296
|
else:
|
|
@@ -365,35 +379,43 @@ async def send(
|
|
|
365
379
|
return res.transactions # pragma: no cover
|
|
366
380
|
|
|
367
381
|
|
|
368
|
-
async def get_address(
|
|
369
|
-
|
|
382
|
+
async def get_address(
|
|
383
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], wallet_id: int, new_address: bool
|
|
384
|
+
) -> None:
|
|
385
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
370
386
|
res = await wallet_client.get_next_address(wallet_id, new_address)
|
|
371
387
|
print(res)
|
|
372
388
|
|
|
373
389
|
|
|
374
|
-
async def delete_unconfirmed_transactions(
|
|
375
|
-
|
|
390
|
+
async def delete_unconfirmed_transactions(
|
|
391
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], wallet_id: int
|
|
392
|
+
) -> None:
|
|
393
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, _):
|
|
376
394
|
await wallet_client.delete_unconfirmed_transactions(wallet_id)
|
|
377
395
|
print(f"Successfully deleted all unconfirmed transactions for wallet id {wallet_id} on key {fingerprint}")
|
|
378
396
|
|
|
379
397
|
|
|
380
|
-
async def get_derivation_index(wallet_rpc_port: Optional[int], fp: Optional[int]) -> None:
|
|
381
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
398
|
+
async def get_derivation_index(root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int]) -> None:
|
|
399
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
382
400
|
res = await wallet_client.get_current_derivation_index()
|
|
383
401
|
print(f"Last derivation index: {res}")
|
|
384
402
|
|
|
385
403
|
|
|
386
|
-
async def update_derivation_index(
|
|
387
|
-
|
|
404
|
+
async def update_derivation_index(
|
|
405
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], index: int
|
|
406
|
+
) -> None:
|
|
407
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
388
408
|
print("Updating derivation index... This may take a while.")
|
|
389
409
|
res = await wallet_client.extend_derivation_index(index)
|
|
390
410
|
print(f"Updated derivation index: {res}")
|
|
391
411
|
print("Your balances may take a while to update.")
|
|
392
412
|
|
|
393
413
|
|
|
394
|
-
async def add_token(
|
|
395
|
-
|
|
396
|
-
|
|
414
|
+
async def add_token(
|
|
415
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], asset_id: bytes32, token_name: str
|
|
416
|
+
) -> None:
|
|
417
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, _):
|
|
418
|
+
existing_info: Optional[tuple[Optional[uint32], str]] = await wallet_client.cat_asset_id_to_name(asset_id)
|
|
397
419
|
if existing_info is None or existing_info[0] is None:
|
|
398
420
|
response = await wallet_client.create_wallet_for_existing_cat(asset_id)
|
|
399
421
|
wallet_id = response["wallet_id"]
|
|
@@ -407,6 +429,7 @@ async def add_token(wallet_rpc_port: Optional[int], fp: Optional[int], asset_id:
|
|
|
407
429
|
|
|
408
430
|
async def make_offer(
|
|
409
431
|
*,
|
|
432
|
+
root_path: pathlib.Path,
|
|
410
433
|
wallet_rpc_port: Optional[int],
|
|
411
434
|
fp: Optional[int],
|
|
412
435
|
fee: uint64,
|
|
@@ -416,15 +439,15 @@ async def make_offer(
|
|
|
416
439
|
reuse_puzhash: Optional[bool],
|
|
417
440
|
condition_valid_times: ConditionValidTimes,
|
|
418
441
|
) -> None:
|
|
419
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
442
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
420
443
|
if offers == [] or requests == []:
|
|
421
444
|
print("Not creating offer: Must be offering and requesting at least one asset")
|
|
422
445
|
else:
|
|
423
|
-
offer_dict:
|
|
424
|
-
driver_dict:
|
|
425
|
-
printable_dict:
|
|
426
|
-
royalty_asset_dict:
|
|
427
|
-
fungible_asset_dict:
|
|
446
|
+
offer_dict: dict[Union[uint32, str], int] = {}
|
|
447
|
+
driver_dict: dict[str, Any] = {}
|
|
448
|
+
printable_dict: dict[str, tuple[str, int, int]] = {} # dict[asset_name, tuple[amount, unit, multiplier]]
|
|
449
|
+
royalty_asset_dict: dict[Any, tuple[Any, uint16]] = {}
|
|
450
|
+
fungible_asset_dict: dict[Any, uint64] = {}
|
|
428
451
|
for item in [*offers, *requests]:
|
|
429
452
|
name, amount = tuple(item.split(":")[0:2])
|
|
430
453
|
try:
|
|
@@ -516,10 +539,10 @@ async def make_offer(
|
|
|
516
539
|
print(f"Including Fees: {Decimal(fee) / units['chia']} XCH, {fee} mojos")
|
|
517
540
|
|
|
518
541
|
if royalty_asset_dict != {}:
|
|
519
|
-
royalty_summary:
|
|
542
|
+
royalty_summary: dict[Any, list[dict[str, Any]]] = await wallet_client.nft_calculate_royalties(
|
|
520
543
|
royalty_asset_dict, fungible_asset_dict
|
|
521
544
|
)
|
|
522
|
-
total_amounts_requested:
|
|
545
|
+
total_amounts_requested: dict[Any, int] = {}
|
|
523
546
|
print()
|
|
524
547
|
print("Royalties Summary:")
|
|
525
548
|
for nft_id, summaries in royalty_summary.items():
|
|
@@ -574,7 +597,7 @@ def timestamp_to_time(timestamp: int) -> str:
|
|
|
574
597
|
|
|
575
598
|
|
|
576
599
|
async def print_offer_summary(
|
|
577
|
-
cat_name_resolver: CATNameResolver, sum_dict:
|
|
600
|
+
cat_name_resolver: CATNameResolver, sum_dict: dict[str, int], has_fee: bool = False, network_xch: str = "XCH"
|
|
578
601
|
) -> None:
|
|
579
602
|
for asset_id, amount in sum_dict.items():
|
|
580
603
|
description: str = ""
|
|
@@ -625,7 +648,7 @@ async def print_trade_record(record: TradeRecord, wallet_client: WalletRpcClient
|
|
|
625
648
|
print("Summary:")
|
|
626
649
|
offer = Offer.from_bytes(record.offer)
|
|
627
650
|
offered, requested, _, _ = offer.summary()
|
|
628
|
-
outbound_balances:
|
|
651
|
+
outbound_balances: dict[str, int] = offer.get_pending_amounts()
|
|
629
652
|
fees: Decimal = Decimal(offer.fees())
|
|
630
653
|
cat_name_resolver = wallet_client.cat_asset_id_to_name
|
|
631
654
|
print(" OFFERED:")
|
|
@@ -637,11 +660,11 @@ async def print_trade_record(record: TradeRecord, wallet_client: WalletRpcClient
|
|
|
637
660
|
print(f"Included Fees: {fees / units['chia']} XCH, {fees} mojos")
|
|
638
661
|
print("Timelock information:")
|
|
639
662
|
if record.valid_times.min_time is not None:
|
|
640
|
-
print(" - Not valid until
|
|
663
|
+
print(f" - Not valid until {format_timestamp_with_timezone(record.valid_times.min_time)}")
|
|
641
664
|
if record.valid_times.min_height is not None:
|
|
642
665
|
print(f" - Not valid until height {record.valid_times.min_height}")
|
|
643
666
|
if record.valid_times.max_time is not None:
|
|
644
|
-
print(" - Expires at
|
|
667
|
+
print(f" - Expires at {format_timestamp_with_timezone(record.valid_times.max_time)} (+/- 10 min)")
|
|
645
668
|
if record.valid_times.max_height is not None:
|
|
646
669
|
print(f" - Expires at height {record.valid_times.max_height} (wait ~10 blocks after to be reorg safe)")
|
|
647
670
|
print("---------------")
|
|
@@ -649,6 +672,7 @@ async def print_trade_record(record: TradeRecord, wallet_client: WalletRpcClient
|
|
|
649
672
|
|
|
650
673
|
async def get_offers(
|
|
651
674
|
*,
|
|
675
|
+
root_path: pathlib.Path,
|
|
652
676
|
wallet_rpc_port: Optional[int],
|
|
653
677
|
fp: Optional[int],
|
|
654
678
|
offer_id: Optional[bytes32],
|
|
@@ -658,10 +682,11 @@ async def get_offers(
|
|
|
658
682
|
include_completed: bool = False,
|
|
659
683
|
summaries: bool = False,
|
|
660
684
|
reverse: bool = False,
|
|
685
|
+
sort_by_relevance: bool = True,
|
|
661
686
|
) -> None:
|
|
662
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client,
|
|
687
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
663
688
|
file_contents: bool = (filepath is not None) or summaries
|
|
664
|
-
records:
|
|
689
|
+
records: list[TradeRecord] = []
|
|
665
690
|
if offer_id is None:
|
|
666
691
|
batch_size: int = 10
|
|
667
692
|
start: int = 0
|
|
@@ -669,9 +694,10 @@ async def get_offers(
|
|
|
669
694
|
|
|
670
695
|
# Traverse offers page by page
|
|
671
696
|
while True:
|
|
672
|
-
new_records:
|
|
697
|
+
new_records: list[TradeRecord] = await wallet_client.get_all_offers(
|
|
673
698
|
start,
|
|
674
699
|
end,
|
|
700
|
+
sort_key="RELEVANCE" if sort_by_relevance else "CONFIRMED_AT_HEIGHT",
|
|
675
701
|
reverse=reverse,
|
|
676
702
|
file_contents=file_contents,
|
|
677
703
|
exclude_my_offers=exclude_my_offers,
|
|
@@ -698,6 +724,7 @@ async def get_offers(
|
|
|
698
724
|
|
|
699
725
|
|
|
700
726
|
async def take_offer(
|
|
727
|
+
root_path: pathlib.Path,
|
|
701
728
|
wallet_rpc_port: Optional[int],
|
|
702
729
|
fp: Optional[int],
|
|
703
730
|
fee: uint64,
|
|
@@ -705,8 +732,8 @@ async def take_offer(
|
|
|
705
732
|
examine_only: bool,
|
|
706
733
|
push: bool,
|
|
707
734
|
condition_valid_times: ConditionValidTimes,
|
|
708
|
-
) ->
|
|
709
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
735
|
+
) -> list[TransactionRecord]:
|
|
736
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
710
737
|
if os.path.exists(file):
|
|
711
738
|
filepath = pathlib.Path(file)
|
|
712
739
|
with open(filepath) as ffile:
|
|
@@ -732,7 +759,7 @@ async def take_offer(
|
|
|
732
759
|
|
|
733
760
|
print()
|
|
734
761
|
|
|
735
|
-
royalty_asset_dict:
|
|
762
|
+
royalty_asset_dict: dict[Any, tuple[Any, uint16]] = {}
|
|
736
763
|
for royalty_asset_id in nft_coin_ids_supporting_royalties_from_offer(offer):
|
|
737
764
|
if royalty_asset_id.hex() in offered:
|
|
738
765
|
percentage, address = await get_nft_royalty_percentage_and_address(royalty_asset_id, wallet_client)
|
|
@@ -742,7 +769,7 @@ async def take_offer(
|
|
|
742
769
|
)
|
|
743
770
|
|
|
744
771
|
if royalty_asset_dict != {}:
|
|
745
|
-
fungible_asset_dict:
|
|
772
|
+
fungible_asset_dict: dict[Any, uint64] = {}
|
|
746
773
|
for fungible_asset_id in fungible_assets_from_offer(offer):
|
|
747
774
|
fungible_asset_id_str = fungible_asset_id.hex() if fungible_asset_id is not None else "xch"
|
|
748
775
|
if fungible_asset_id_str in requested:
|
|
@@ -756,10 +783,10 @@ async def take_offer(
|
|
|
756
783
|
fungible_asset_dict[nft_royalty_currency] = uint64(requested[fungible_asset_id_str])
|
|
757
784
|
|
|
758
785
|
if fungible_asset_dict != {}:
|
|
759
|
-
royalty_summary:
|
|
786
|
+
royalty_summary: dict[Any, list[dict[str, Any]]] = await wallet_client.nft_calculate_royalties(
|
|
760
787
|
royalty_asset_dict, fungible_asset_dict
|
|
761
788
|
)
|
|
762
|
-
total_amounts_requested:
|
|
789
|
+
total_amounts_requested: dict[Any, int] = {}
|
|
763
790
|
print("Royalties Summary:")
|
|
764
791
|
for nft_id, summaries in royalty_summary.items():
|
|
765
792
|
print(f" - For {nft_id}:")
|
|
@@ -803,6 +830,7 @@ async def take_offer(
|
|
|
803
830
|
|
|
804
831
|
|
|
805
832
|
async def cancel_offer(
|
|
833
|
+
root_path: pathlib.Path,
|
|
806
834
|
wallet_rpc_port: Optional[int],
|
|
807
835
|
fp: Optional[int],
|
|
808
836
|
fee: uint64,
|
|
@@ -810,8 +838,8 @@ async def cancel_offer(
|
|
|
810
838
|
secure: bool,
|
|
811
839
|
push: bool,
|
|
812
840
|
condition_valid_times: ConditionValidTimes,
|
|
813
|
-
) ->
|
|
814
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
841
|
+
) -> list[TransactionRecord]:
|
|
842
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
815
843
|
trade_record = await wallet_client.get_offer(offer_id, file_contents=True)
|
|
816
844
|
await print_trade_record(trade_record, wallet_client, summaries=True)
|
|
817
845
|
|
|
@@ -832,10 +860,10 @@ async def cancel_offer(
|
|
|
832
860
|
return res.transactions
|
|
833
861
|
|
|
834
862
|
|
|
835
|
-
def wallet_coin_unit(typ: WalletType, address_prefix: str) ->
|
|
863
|
+
def wallet_coin_unit(typ: WalletType, address_prefix: str) -> tuple[str, int]:
|
|
836
864
|
if typ in {WalletType.CAT, WalletType.CRCAT}:
|
|
837
865
|
return "", units["cat"]
|
|
838
|
-
if typ in
|
|
866
|
+
if typ in {WalletType.STANDARD_WALLET, WalletType.POOLING_WALLET, WalletType.MULTI_SIG}:
|
|
839
867
|
return address_prefix, units["chia"]
|
|
840
868
|
return "", units["mojo"]
|
|
841
869
|
|
|
@@ -852,24 +880,23 @@ def print_balance(amount: int, scale: int, address_prefix: str, *, decimal_only:
|
|
|
852
880
|
|
|
853
881
|
|
|
854
882
|
async def print_balances(
|
|
855
|
-
wallet_rpc_port: Optional[int], fp: Optional[int], wallet_type: Optional[WalletType] = None
|
|
883
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], wallet_type: Optional[WalletType] = None
|
|
856
884
|
) -> None:
|
|
857
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
885
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
858
886
|
summaries_response = await wallet_client.get_wallets(wallet_type)
|
|
859
887
|
address_prefix = selected_network_address_prefix(config)
|
|
860
888
|
|
|
861
|
-
|
|
862
|
-
is_syncing: bool = await wallet_client.get_sync_status()
|
|
889
|
+
sync_response = await wallet_client.get_sync_status()
|
|
863
890
|
|
|
864
|
-
print(f"Wallet height: {await wallet_client.get_height_info()}")
|
|
865
|
-
if
|
|
891
|
+
print(f"Wallet height: {(await wallet_client.get_height_info()).height}")
|
|
892
|
+
if sync_response.syncing:
|
|
866
893
|
print("Sync status: Syncing...")
|
|
867
|
-
elif
|
|
894
|
+
elif sync_response.synced:
|
|
868
895
|
print("Sync status: Synced")
|
|
869
896
|
else:
|
|
870
897
|
print("Sync status: Not synced")
|
|
871
898
|
|
|
872
|
-
if not
|
|
899
|
+
if not sync_response.syncing and sync_response.synced:
|
|
873
900
|
if len(summaries_response) == 0:
|
|
874
901
|
type_hint = " " if wallet_type is None else f" from type {wallet_type.name} "
|
|
875
902
|
print(f"\nNo wallets{type_hint}available for fingerprint: {fingerprint}")
|
|
@@ -926,11 +953,12 @@ async def print_balances(
|
|
|
926
953
|
|
|
927
954
|
print(" ")
|
|
928
955
|
trusted_peers: dict[str, str] = config["wallet"].get("trusted_peers", {})
|
|
929
|
-
trusted_cidrs:
|
|
956
|
+
trusted_cidrs: list[str] = config["wallet"].get("trusted_cidrs", [])
|
|
930
957
|
await print_connections(wallet_client, trusted_peers, trusted_cidrs)
|
|
931
958
|
|
|
932
959
|
|
|
933
960
|
async def create_did_wallet(
|
|
961
|
+
root_path: pathlib.Path,
|
|
934
962
|
wallet_rpc_port: Optional[int],
|
|
935
963
|
fp: Optional[int],
|
|
936
964
|
fee: uint64,
|
|
@@ -938,8 +966,8 @@ async def create_did_wallet(
|
|
|
938
966
|
amount: int,
|
|
939
967
|
push: bool,
|
|
940
968
|
condition_valid_times: ConditionValidTimes,
|
|
941
|
-
) ->
|
|
942
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
969
|
+
) -> list[TransactionRecord]:
|
|
970
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
943
971
|
try:
|
|
944
972
|
response = await wallet_client.create_new_did_wallet(
|
|
945
973
|
amount,
|
|
@@ -959,8 +987,10 @@ async def create_did_wallet(
|
|
|
959
987
|
return []
|
|
960
988
|
|
|
961
989
|
|
|
962
|
-
async def did_set_wallet_name(
|
|
963
|
-
|
|
990
|
+
async def did_set_wallet_name(
|
|
991
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], wallet_id: int, name: str
|
|
992
|
+
) -> None:
|
|
993
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
964
994
|
try:
|
|
965
995
|
await wallet_client.did_set_wallet_name(wallet_id, name)
|
|
966
996
|
print(f"Successfully set a new name for DID wallet with id {wallet_id}: {name}")
|
|
@@ -968,8 +998,10 @@ async def did_set_wallet_name(wallet_rpc_port: Optional[int], fp: Optional[int],
|
|
|
968
998
|
print(f"Failed to set DID wallet name: {e}")
|
|
969
999
|
|
|
970
1000
|
|
|
971
|
-
async def get_did(
|
|
972
|
-
|
|
1001
|
+
async def get_did(
|
|
1002
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], did_wallet_id: int
|
|
1003
|
+
) -> None:
|
|
1004
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
973
1005
|
try:
|
|
974
1006
|
response = await wallet_client.get_did_id(did_wallet_id)
|
|
975
1007
|
my_did = response["my_did"]
|
|
@@ -980,8 +1012,10 @@ async def get_did(wallet_rpc_port: Optional[int], fp: Optional[int], did_wallet_
|
|
|
980
1012
|
print(f"Failed to get DID: {e}")
|
|
981
1013
|
|
|
982
1014
|
|
|
983
|
-
async def get_did_info(
|
|
984
|
-
|
|
1015
|
+
async def get_did_info(
|
|
1016
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], coin_id: str, latest: bool
|
|
1017
|
+
) -> None:
|
|
1018
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
985
1019
|
did_padding_length = 23
|
|
986
1020
|
try:
|
|
987
1021
|
response = await wallet_client.get_did_info(coin_id, latest)
|
|
@@ -1002,6 +1036,7 @@ async def get_did_info(wallet_rpc_port: Optional[int], fp: Optional[int], coin_i
|
|
|
1002
1036
|
|
|
1003
1037
|
|
|
1004
1038
|
async def update_did_metadata(
|
|
1039
|
+
root_path: pathlib.Path,
|
|
1005
1040
|
wallet_rpc_port: Optional[int],
|
|
1006
1041
|
fp: Optional[int],
|
|
1007
1042
|
did_wallet_id: int,
|
|
@@ -1009,8 +1044,8 @@ async def update_did_metadata(
|
|
|
1009
1044
|
reuse_puzhash: bool,
|
|
1010
1045
|
push: bool,
|
|
1011
1046
|
condition_valid_times: ConditionValidTimes,
|
|
1012
|
-
) ->
|
|
1013
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1047
|
+
) -> list[TransactionRecord]:
|
|
1048
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1014
1049
|
try:
|
|
1015
1050
|
response = await wallet_client.update_did_metadata(
|
|
1016
1051
|
did_wallet_id,
|
|
@@ -1033,15 +1068,16 @@ async def update_did_metadata(
|
|
|
1033
1068
|
|
|
1034
1069
|
|
|
1035
1070
|
async def did_message_spend(
|
|
1071
|
+
root_path: pathlib.Path,
|
|
1036
1072
|
wallet_rpc_port: Optional[int],
|
|
1037
1073
|
fp: Optional[int],
|
|
1038
1074
|
did_wallet_id: int,
|
|
1039
|
-
puzzle_announcements:
|
|
1040
|
-
coin_announcements:
|
|
1075
|
+
puzzle_announcements: list[str],
|
|
1076
|
+
coin_announcements: list[str],
|
|
1041
1077
|
push: bool,
|
|
1042
1078
|
condition_valid_times: ConditionValidTimes,
|
|
1043
|
-
) ->
|
|
1044
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1079
|
+
) -> list[TransactionRecord]:
|
|
1080
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1045
1081
|
try:
|
|
1046
1082
|
response = await wallet_client.did_message_spend(
|
|
1047
1083
|
did_wallet_id,
|
|
@@ -1061,6 +1097,7 @@ async def did_message_spend(
|
|
|
1061
1097
|
|
|
1062
1098
|
|
|
1063
1099
|
async def transfer_did(
|
|
1100
|
+
root_path: pathlib.Path,
|
|
1064
1101
|
wallet_rpc_port: Optional[int],
|
|
1065
1102
|
fp: Optional[int],
|
|
1066
1103
|
did_wallet_id: int,
|
|
@@ -1070,9 +1107,8 @@ async def transfer_did(
|
|
|
1070
1107
|
reuse_puzhash: Optional[bool],
|
|
1071
1108
|
push: bool,
|
|
1072
1109
|
condition_valid_times: ConditionValidTimes,
|
|
1073
|
-
) ->
|
|
1074
|
-
|
|
1075
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1110
|
+
) -> list[TransactionRecord]:
|
|
1111
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1076
1112
|
try:
|
|
1077
1113
|
target_address = target_cli_address.original_address
|
|
1078
1114
|
response = await wallet_client.did_transfer_did(
|
|
@@ -1098,6 +1134,7 @@ async def transfer_did(
|
|
|
1098
1134
|
|
|
1099
1135
|
async def find_lost_did(
|
|
1100
1136
|
*,
|
|
1137
|
+
root_path: pathlib.Path,
|
|
1101
1138
|
wallet_rpc_port: Optional[int],
|
|
1102
1139
|
fp: Optional[int],
|
|
1103
1140
|
coin_id: str,
|
|
@@ -1105,7 +1142,7 @@ async def find_lost_did(
|
|
|
1105
1142
|
recovery_list_hash: Optional[str],
|
|
1106
1143
|
num_verification: Optional[int],
|
|
1107
1144
|
) -> None:
|
|
1108
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client,
|
|
1145
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
1109
1146
|
try:
|
|
1110
1147
|
response = await wallet_client.find_lost_did(
|
|
1111
1148
|
coin_id,
|
|
@@ -1122,9 +1159,13 @@ async def find_lost_did(
|
|
|
1122
1159
|
|
|
1123
1160
|
|
|
1124
1161
|
async def create_nft_wallet(
|
|
1125
|
-
|
|
1162
|
+
root_path: pathlib.Path,
|
|
1163
|
+
wallet_rpc_port: Optional[int],
|
|
1164
|
+
fp: Optional[int],
|
|
1165
|
+
did_id: Optional[CliAddress] = None,
|
|
1166
|
+
name: Optional[str] = None,
|
|
1126
1167
|
) -> None:
|
|
1127
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint,
|
|
1168
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, _):
|
|
1128
1169
|
try:
|
|
1129
1170
|
response = await wallet_client.create_new_nft_wallet(did_id.original_address if did_id else None, name)
|
|
1130
1171
|
wallet_id = response["wallet_id"]
|
|
@@ -1135,6 +1176,7 @@ async def create_nft_wallet(
|
|
|
1135
1176
|
|
|
1136
1177
|
async def mint_nft(
|
|
1137
1178
|
*,
|
|
1179
|
+
root_path: pathlib.Path,
|
|
1138
1180
|
wallet_rpc_port: Optional[int],
|
|
1139
1181
|
fp: Optional[int],
|
|
1140
1182
|
wallet_id: int,
|
|
@@ -1142,11 +1184,11 @@ async def mint_nft(
|
|
|
1142
1184
|
target_cli_address: Optional[CliAddress],
|
|
1143
1185
|
no_did_ownership: bool,
|
|
1144
1186
|
hash: str,
|
|
1145
|
-
uris:
|
|
1187
|
+
uris: list[str],
|
|
1146
1188
|
metadata_hash: Optional[str],
|
|
1147
|
-
metadata_uris:
|
|
1189
|
+
metadata_uris: list[str],
|
|
1148
1190
|
license_hash: Optional[str],
|
|
1149
|
-
license_uris:
|
|
1191
|
+
license_uris: list[str],
|
|
1150
1192
|
edition_total: Optional[int],
|
|
1151
1193
|
edition_number: Optional[int],
|
|
1152
1194
|
fee: uint64,
|
|
@@ -1154,8 +1196,8 @@ async def mint_nft(
|
|
|
1154
1196
|
reuse_puzhash: Optional[bool],
|
|
1155
1197
|
push: bool,
|
|
1156
1198
|
condition_valid_times: ConditionValidTimes,
|
|
1157
|
-
) ->
|
|
1158
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1199
|
+
) -> list[TransactionRecord]:
|
|
1200
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1159
1201
|
royalty_address = royalty_cli_address.validate_address_type(AddressType.XCH) if royalty_cli_address else None
|
|
1160
1202
|
target_address = target_cli_address.validate_address_type(AddressType.XCH) if target_cli_address else None
|
|
1161
1203
|
try:
|
|
@@ -1205,6 +1247,7 @@ async def mint_nft(
|
|
|
1205
1247
|
|
|
1206
1248
|
async def add_uri_to_nft(
|
|
1207
1249
|
*,
|
|
1250
|
+
root_path: pathlib.Path,
|
|
1208
1251
|
wallet_rpc_port: Optional[int],
|
|
1209
1252
|
fp: Optional[int],
|
|
1210
1253
|
wallet_id: int,
|
|
@@ -1216,8 +1259,8 @@ async def add_uri_to_nft(
|
|
|
1216
1259
|
reuse_puzhash: Optional[bool],
|
|
1217
1260
|
push: bool,
|
|
1218
1261
|
condition_valid_times: ConditionValidTimes,
|
|
1219
|
-
) ->
|
|
1220
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1262
|
+
) -> list[TransactionRecord]:
|
|
1263
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1221
1264
|
try:
|
|
1222
1265
|
if len([x for x in (uri, metadata_uri, license_uri) if x is not None]) > 1:
|
|
1223
1266
|
raise ValueError("You must provide only one of the URI flags")
|
|
@@ -1255,6 +1298,7 @@ async def add_uri_to_nft(
|
|
|
1255
1298
|
|
|
1256
1299
|
async def transfer_nft(
|
|
1257
1300
|
*,
|
|
1301
|
+
root_path: pathlib.Path,
|
|
1258
1302
|
wallet_rpc_port: Optional[int],
|
|
1259
1303
|
fp: Optional[int],
|
|
1260
1304
|
wallet_id: int,
|
|
@@ -1264,8 +1308,8 @@ async def transfer_nft(
|
|
|
1264
1308
|
reuse_puzhash: Optional[bool],
|
|
1265
1309
|
push: bool,
|
|
1266
1310
|
condition_valid_times: ConditionValidTimes,
|
|
1267
|
-
) ->
|
|
1268
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1311
|
+
) -> list[TransactionRecord]:
|
|
1312
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1269
1313
|
try:
|
|
1270
1314
|
target_address = target_cli_address.validate_address_type(AddressType.XCH)
|
|
1271
1315
|
response = await wallet_client.transfer_nft(
|
|
@@ -1289,7 +1333,7 @@ async def transfer_nft(
|
|
|
1289
1333
|
return []
|
|
1290
1334
|
|
|
1291
1335
|
|
|
1292
|
-
def print_nft_info(nft: NFTInfo, *, config:
|
|
1336
|
+
def print_nft_info(nft: NFTInfo, *, config: dict[str, Any]) -> None:
|
|
1293
1337
|
indent: str = " "
|
|
1294
1338
|
owner_did = None if nft.owner_did is None else encode_puzzle_hash(nft.owner_did, AddressType.DID.hrp(config))
|
|
1295
1339
|
minter_did = None if nft.minter_did is None else encode_puzzle_hash(nft.minter_did, AddressType.DID.hrp(config))
|
|
@@ -1327,9 +1371,14 @@ def print_nft_info(nft: NFTInfo, *, config: Dict[str, Any]) -> None:
|
|
|
1327
1371
|
|
|
1328
1372
|
|
|
1329
1373
|
async def list_nfts(
|
|
1330
|
-
|
|
1374
|
+
root_path: pathlib.Path,
|
|
1375
|
+
wallet_rpc_port: Optional[int],
|
|
1376
|
+
fp: Optional[int],
|
|
1377
|
+
wallet_id: int,
|
|
1378
|
+
num: int,
|
|
1379
|
+
start_index: int,
|
|
1331
1380
|
) -> None:
|
|
1332
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1381
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1333
1382
|
try:
|
|
1334
1383
|
response = await wallet_client.list_nfts(wallet_id, num, start_index)
|
|
1335
1384
|
nft_list = response["nft_list"]
|
|
@@ -1345,6 +1394,7 @@ async def list_nfts(
|
|
|
1345
1394
|
|
|
1346
1395
|
async def set_nft_did(
|
|
1347
1396
|
*,
|
|
1397
|
+
root_path: pathlib.Path,
|
|
1348
1398
|
wallet_rpc_port: Optional[int],
|
|
1349
1399
|
fp: Optional[int],
|
|
1350
1400
|
wallet_id: int,
|
|
@@ -1354,8 +1404,8 @@ async def set_nft_did(
|
|
|
1354
1404
|
reuse_puzhash: Optional[bool],
|
|
1355
1405
|
push: bool,
|
|
1356
1406
|
condition_valid_times: ConditionValidTimes,
|
|
1357
|
-
) ->
|
|
1358
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1407
|
+
) -> list[TransactionRecord]:
|
|
1408
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1359
1409
|
try:
|
|
1360
1410
|
response = await wallet_client.set_nft_did(
|
|
1361
1411
|
wallet_id,
|
|
@@ -1376,8 +1426,10 @@ async def set_nft_did(
|
|
|
1376
1426
|
return []
|
|
1377
1427
|
|
|
1378
1428
|
|
|
1379
|
-
async def get_nft_info(
|
|
1380
|
-
|
|
1429
|
+
async def get_nft_info(
|
|
1430
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], nft_coin_id: str
|
|
1431
|
+
) -> None:
|
|
1432
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, config):
|
|
1381
1433
|
try:
|
|
1382
1434
|
response = await wallet_client.get_nft_info(nft_coin_id)
|
|
1383
1435
|
nft_info = NFTInfo.from_json_dict(response["nft_info"])
|
|
@@ -1388,7 +1440,7 @@ async def get_nft_info(wallet_rpc_port: Optional[int], fp: Optional[int], nft_co
|
|
|
1388
1440
|
|
|
1389
1441
|
async def get_nft_royalty_percentage_and_address(
|
|
1390
1442
|
nft_coin_id: bytes32, wallet_client: WalletRpcClient
|
|
1391
|
-
) ->
|
|
1443
|
+
) -> tuple[uint16, bytes32]:
|
|
1392
1444
|
info = NFTInfo.from_json_dict((await wallet_client.get_nft_info(nft_coin_id.hex()))["nft_info"])
|
|
1393
1445
|
assert info.royalty_puzzle_hash is not None
|
|
1394
1446
|
percentage = uint16(info.royalty_percentage) if info.royalty_percentage is not None else 0
|
|
@@ -1396,11 +1448,11 @@ async def get_nft_royalty_percentage_and_address(
|
|
|
1396
1448
|
|
|
1397
1449
|
|
|
1398
1450
|
def calculate_nft_royalty_amount(
|
|
1399
|
-
offered:
|
|
1400
|
-
) ->
|
|
1451
|
+
offered: dict[str, Any], requested: dict[str, Any], nft_coin_id: bytes32, nft_royalty_percentage: int
|
|
1452
|
+
) -> tuple[str, int, int]:
|
|
1401
1453
|
nft_asset_id = nft_coin_id.hex()
|
|
1402
|
-
amount_dict:
|
|
1403
|
-
amounts:
|
|
1454
|
+
amount_dict: dict[str, Any] = requested if nft_asset_id in offered else offered
|
|
1455
|
+
amounts: list[tuple[str, int]] = list(amount_dict.items())
|
|
1404
1456
|
|
|
1405
1457
|
if len(amounts) != 1 or not isinstance(amounts[0][1], int):
|
|
1406
1458
|
raise ValueError("Royalty enabled NFTs only support offering/requesting one NFT for one currency")
|
|
@@ -1411,7 +1463,7 @@ def calculate_nft_royalty_amount(
|
|
|
1411
1463
|
return royalty_asset_id, royalty_amount, total_amount_requested
|
|
1412
1464
|
|
|
1413
1465
|
|
|
1414
|
-
def driver_dict_asset_is_nft_supporting_royalties(driver_dict:
|
|
1466
|
+
def driver_dict_asset_is_nft_supporting_royalties(driver_dict: dict[bytes32, PuzzleInfo], asset_id: bytes32) -> bool:
|
|
1415
1467
|
asset_dict: PuzzleInfo = driver_dict[asset_id]
|
|
1416
1468
|
return asset_dict.check_type(
|
|
1417
1469
|
[
|
|
@@ -1422,7 +1474,7 @@ def driver_dict_asset_is_nft_supporting_royalties(driver_dict: Dict[bytes32, Puz
|
|
|
1422
1474
|
)
|
|
1423
1475
|
|
|
1424
1476
|
|
|
1425
|
-
def driver_dict_asset_is_fungible(driver_dict:
|
|
1477
|
+
def driver_dict_asset_is_fungible(driver_dict: dict[bytes32, PuzzleInfo], asset_id: bytes32) -> bool:
|
|
1426
1478
|
asset_dict: PuzzleInfo = driver_dict[asset_id]
|
|
1427
1479
|
return not asset_dict.check_type(
|
|
1428
1480
|
[
|
|
@@ -1431,19 +1483,20 @@ def driver_dict_asset_is_fungible(driver_dict: Dict[bytes32, PuzzleInfo], asset_
|
|
|
1431
1483
|
)
|
|
1432
1484
|
|
|
1433
1485
|
|
|
1434
|
-
def nft_coin_ids_supporting_royalties_from_offer(offer: Offer) ->
|
|
1486
|
+
def nft_coin_ids_supporting_royalties_from_offer(offer: Offer) -> list[bytes32]:
|
|
1435
1487
|
return [
|
|
1436
1488
|
key for key in offer.driver_dict.keys() if driver_dict_asset_is_nft_supporting_royalties(offer.driver_dict, key)
|
|
1437
1489
|
]
|
|
1438
1490
|
|
|
1439
1491
|
|
|
1440
|
-
def fungible_assets_from_offer(offer: Offer) ->
|
|
1492
|
+
def fungible_assets_from_offer(offer: Offer) -> list[Optional[bytes32]]:
|
|
1441
1493
|
return [
|
|
1442
1494
|
asset for asset in offer.arbitrage() if asset is None or driver_dict_asset_is_fungible(offer.driver_dict, asset)
|
|
1443
1495
|
]
|
|
1444
1496
|
|
|
1445
1497
|
|
|
1446
1498
|
async def send_notification(
|
|
1499
|
+
root_path: pathlib.Path,
|
|
1447
1500
|
wallet_rpc_port: Optional[int],
|
|
1448
1501
|
fp: Optional[int],
|
|
1449
1502
|
fee: uint64,
|
|
@@ -1452,8 +1505,8 @@ async def send_notification(
|
|
|
1452
1505
|
cli_amount: CliAmount,
|
|
1453
1506
|
push: bool,
|
|
1454
1507
|
condition_valid_times: ConditionValidTimes,
|
|
1455
|
-
) ->
|
|
1456
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint,
|
|
1508
|
+
) -> list[TransactionRecord]:
|
|
1509
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, _):
|
|
1457
1510
|
amount: uint64 = cli_amount.convert_amount(units["chia"])
|
|
1458
1511
|
|
|
1459
1512
|
tx = await wallet_client.send_notification(
|
|
@@ -1472,13 +1525,14 @@ async def send_notification(
|
|
|
1472
1525
|
|
|
1473
1526
|
|
|
1474
1527
|
async def get_notifications(
|
|
1528
|
+
root_path: pathlib.Path,
|
|
1475
1529
|
wallet_rpc_port: Optional[int],
|
|
1476
1530
|
fp: Optional[int],
|
|
1477
1531
|
ids: Optional[Sequence[bytes32]],
|
|
1478
1532
|
start: Optional[int],
|
|
1479
1533
|
end: Optional[int],
|
|
1480
1534
|
) -> None:
|
|
1481
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client,
|
|
1535
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
1482
1536
|
if ids is not None:
|
|
1483
1537
|
ids = None if len(ids) == 0 else list(ids)
|
|
1484
1538
|
response = await wallet_client.get_notifications(
|
|
@@ -1492,9 +1546,9 @@ async def get_notifications(
|
|
|
1492
1546
|
|
|
1493
1547
|
|
|
1494
1548
|
async def delete_notifications(
|
|
1495
|
-
wallet_rpc_port: Optional[int], fp: Optional[int], ids: Sequence[bytes32], delete_all: bool
|
|
1549
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], ids: Sequence[bytes32], delete_all: bool
|
|
1496
1550
|
) -> None:
|
|
1497
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client,
|
|
1551
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
1498
1552
|
if delete_all:
|
|
1499
1553
|
print(f"Success: {await wallet_client.delete_notifications()}")
|
|
1500
1554
|
else:
|
|
@@ -1503,6 +1557,7 @@ async def delete_notifications(
|
|
|
1503
1557
|
|
|
1504
1558
|
async def sign_message(
|
|
1505
1559
|
*,
|
|
1560
|
+
root_path: pathlib.Path,
|
|
1506
1561
|
wallet_rpc_port: Optional[int],
|
|
1507
1562
|
fp: Optional[int],
|
|
1508
1563
|
addr_type: AddressType,
|
|
@@ -1511,7 +1566,7 @@ async def sign_message(
|
|
|
1511
1566
|
did_id: Optional[CliAddress] = None,
|
|
1512
1567
|
nft_id: Optional[CliAddress] = None,
|
|
1513
1568
|
) -> None:
|
|
1514
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client,
|
|
1569
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
1515
1570
|
if addr_type == AddressType.XCH:
|
|
1516
1571
|
if address is None:
|
|
1517
1572
|
print("Address is required for XCH address type.")
|
|
@@ -1541,6 +1596,7 @@ async def sign_message(
|
|
|
1541
1596
|
|
|
1542
1597
|
async def spend_clawback(
|
|
1543
1598
|
*,
|
|
1599
|
+
root_path: pathlib.Path,
|
|
1544
1600
|
wallet_rpc_port: Optional[int],
|
|
1545
1601
|
fp: Optional[int],
|
|
1546
1602
|
fee: uint64,
|
|
@@ -1548,8 +1604,8 @@ async def spend_clawback(
|
|
|
1548
1604
|
force: bool = False,
|
|
1549
1605
|
push: bool,
|
|
1550
1606
|
condition_valid_times: ConditionValidTimes,
|
|
1551
|
-
) ->
|
|
1552
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
1607
|
+
) -> list[TransactionRecord]:
|
|
1608
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
1553
1609
|
tx_ids = []
|
|
1554
1610
|
for tid in tx_ids_str.split(","):
|
|
1555
1611
|
tx_ids.append(bytes32.from_hexstr(tid))
|
|
@@ -1571,6 +1627,7 @@ async def spend_clawback(
|
|
|
1571
1627
|
|
|
1572
1628
|
|
|
1573
1629
|
async def mint_vc(
|
|
1630
|
+
root_path: pathlib.Path,
|
|
1574
1631
|
wallet_rpc_port: Optional[int],
|
|
1575
1632
|
fp: Optional[int],
|
|
1576
1633
|
did: CliAddress,
|
|
@@ -1578,14 +1635,16 @@ async def mint_vc(
|
|
|
1578
1635
|
target_address: Optional[CliAddress],
|
|
1579
1636
|
push: bool,
|
|
1580
1637
|
condition_valid_times: ConditionValidTimes,
|
|
1581
|
-
) ->
|
|
1582
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1638
|
+
) -> list[TransactionRecord]:
|
|
1639
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1583
1640
|
res = await wallet_client.vc_mint(
|
|
1584
|
-
|
|
1641
|
+
VCMint(
|
|
1642
|
+
did_id=did.validate_address_type(AddressType.DID),
|
|
1643
|
+
target_address=target_address.validate_address_type(AddressType.XCH) if target_address else None,
|
|
1644
|
+
fee=fee,
|
|
1645
|
+
push=push,
|
|
1646
|
+
),
|
|
1585
1647
|
CMDTXConfigLoader().to_tx_config(units["chia"], config, fingerprint),
|
|
1586
|
-
target_address.validate_address_type_get_ph(AddressType.XCH) if target_address else None,
|
|
1587
|
-
fee,
|
|
1588
|
-
push=push,
|
|
1589
1648
|
timelock_info=condition_valid_times,
|
|
1590
1649
|
)
|
|
1591
1650
|
|
|
@@ -1604,16 +1663,18 @@ async def mint_vc(
|
|
|
1604
1663
|
return res.transactions
|
|
1605
1664
|
|
|
1606
1665
|
|
|
1607
|
-
async def get_vcs(
|
|
1608
|
-
|
|
1609
|
-
|
|
1666
|
+
async def get_vcs(
|
|
1667
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], start: int, count: int
|
|
1668
|
+
) -> None:
|
|
1669
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, config):
|
|
1670
|
+
get_list_response = await wallet_client.vc_get_list(VCGetList(uint32(start), uint32(count)))
|
|
1610
1671
|
print("Proofs:")
|
|
1611
|
-
for hash, proof_dict in
|
|
1672
|
+
for hash, proof_dict in get_list_response.proof_dict.items():
|
|
1612
1673
|
if proof_dict is not None:
|
|
1613
1674
|
print(f"- {hash}")
|
|
1614
1675
|
for proof in proof_dict:
|
|
1615
1676
|
print(f" - {proof}")
|
|
1616
|
-
for record in vc_records:
|
|
1677
|
+
for record in get_list_response.vc_records:
|
|
1617
1678
|
print("")
|
|
1618
1679
|
print(f"Launcher ID: {record.vc.launcher_id.hex()}")
|
|
1619
1680
|
print(f"Coin ID: {record.vc.coin.name().hex()}")
|
|
@@ -1629,6 +1690,7 @@ async def get_vcs(wallet_rpc_port: Optional[int], fp: Optional[int], start: int,
|
|
|
1629
1690
|
|
|
1630
1691
|
async def spend_vc(
|
|
1631
1692
|
*,
|
|
1693
|
+
root_path: pathlib.Path,
|
|
1632
1694
|
wallet_rpc_port: Optional[int],
|
|
1633
1695
|
fp: Optional[int],
|
|
1634
1696
|
vc_id: bytes32,
|
|
@@ -1638,18 +1700,20 @@ async def spend_vc(
|
|
|
1638
1700
|
reuse_puzhash: bool,
|
|
1639
1701
|
push: bool,
|
|
1640
1702
|
condition_valid_times: ConditionValidTimes,
|
|
1641
|
-
) ->
|
|
1642
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1703
|
+
) -> list[TransactionRecord]:
|
|
1704
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1643
1705
|
txs = (
|
|
1644
1706
|
await wallet_client.vc_spend(
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1707
|
+
VCSpend(
|
|
1708
|
+
vc_id=vc_id,
|
|
1709
|
+
new_puzhash=new_puzhash,
|
|
1710
|
+
new_proof_hash=bytes32.from_hexstr(new_proof_hash),
|
|
1711
|
+
fee=fee,
|
|
1712
|
+
push=push,
|
|
1713
|
+
),
|
|
1649
1714
|
tx_config=CMDTXConfigLoader(
|
|
1650
1715
|
reuse_puzhash=reuse_puzhash,
|
|
1651
1716
|
).to_tx_config(units["chia"], config, fingerprint),
|
|
1652
|
-
push=push,
|
|
1653
1717
|
timelock_info=condition_valid_times,
|
|
1654
1718
|
)
|
|
1655
1719
|
).transactions
|
|
@@ -1670,32 +1734,39 @@ async def spend_vc(
|
|
|
1670
1734
|
|
|
1671
1735
|
|
|
1672
1736
|
async def add_proof_reveal(
|
|
1673
|
-
wallet_rpc_port: Optional[int], fp: Optional[int], proofs: Sequence[str], root_only: bool
|
|
1737
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], proofs: Sequence[str], root_only: bool
|
|
1674
1738
|
) -> None:
|
|
1675
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client,
|
|
1739
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
1676
1740
|
if len(proofs) == 0:
|
|
1677
1741
|
print("Must specify at least one proof")
|
|
1678
1742
|
return
|
|
1679
1743
|
|
|
1680
|
-
proof_dict:
|
|
1744
|
+
proof_dict: dict[str, str] = {proof: "1" for proof in proofs}
|
|
1681
1745
|
if root_only:
|
|
1682
1746
|
print(f"Proof Hash: {VCProofs(proof_dict).root()}")
|
|
1683
1747
|
return
|
|
1684
1748
|
else:
|
|
1685
|
-
await wallet_client.vc_add_proofs(proof_dict)
|
|
1749
|
+
await wallet_client.vc_add_proofs(VCAddProofs.from_json_dict({"proofs": proof_dict}))
|
|
1686
1750
|
print("Proofs added to DB successfully!")
|
|
1687
1751
|
return
|
|
1688
1752
|
|
|
1689
1753
|
|
|
1690
|
-
async def get_proofs_for_root(
|
|
1691
|
-
|
|
1692
|
-
|
|
1754
|
+
async def get_proofs_for_root(
|
|
1755
|
+
root_path: pathlib.Path, wallet_rpc_port: Optional[int], fp: Optional[int], proof_hash: str
|
|
1756
|
+
) -> None:
|
|
1757
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
|
|
1758
|
+
proof_dict: dict[str, str] = (
|
|
1759
|
+
(await wallet_client.vc_get_proofs_for_root(VCGetProofsForRoot(bytes32.from_hexstr(proof_hash))))
|
|
1760
|
+
.to_vc_proofs()
|
|
1761
|
+
.key_value_pairs
|
|
1762
|
+
)
|
|
1693
1763
|
print("Proofs:")
|
|
1694
1764
|
for proof in proof_dict:
|
|
1695
1765
|
print(f" - {proof}")
|
|
1696
1766
|
|
|
1697
1767
|
|
|
1698
1768
|
async def revoke_vc(
|
|
1769
|
+
root_path: pathlib.Path,
|
|
1699
1770
|
wallet_rpc_port: Optional[int],
|
|
1700
1771
|
fp: Optional[int],
|
|
1701
1772
|
parent_coin_id: Optional[bytes32],
|
|
@@ -1704,13 +1775,13 @@ async def revoke_vc(
|
|
|
1704
1775
|
reuse_puzhash: bool,
|
|
1705
1776
|
push: bool,
|
|
1706
1777
|
condition_valid_times: ConditionValidTimes,
|
|
1707
|
-
) ->
|
|
1708
|
-
async with get_wallet_client(wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1778
|
+
) -> list[TransactionRecord]:
|
|
1779
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
|
|
1709
1780
|
if parent_coin_id is None:
|
|
1710
1781
|
if vc_id is None:
|
|
1711
1782
|
print("Must specify either --parent-coin-id or --vc-id")
|
|
1712
1783
|
return []
|
|
1713
|
-
record = await wallet_client.vc_get(vc_id)
|
|
1784
|
+
record = (await wallet_client.vc_get(VCGet(vc_id))).vc_record
|
|
1714
1785
|
if record is None:
|
|
1715
1786
|
print(f"Cannot find a VC with ID {vc_id.hex()}")
|
|
1716
1787
|
return []
|
|
@@ -1719,12 +1790,14 @@ async def revoke_vc(
|
|
|
1719
1790
|
parent_id = parent_coin_id
|
|
1720
1791
|
txs = (
|
|
1721
1792
|
await wallet_client.vc_revoke(
|
|
1722
|
-
|
|
1723
|
-
|
|
1793
|
+
VCRevoke(
|
|
1794
|
+
vc_parent_id=parent_id,
|
|
1795
|
+
fee=fee,
|
|
1796
|
+
push=push,
|
|
1797
|
+
),
|
|
1724
1798
|
tx_config=CMDTXConfigLoader(
|
|
1725
1799
|
reuse_puzhash=reuse_puzhash,
|
|
1726
1800
|
).to_tx_config(units["chia"], config, fingerprint),
|
|
1727
|
-
push=push,
|
|
1728
1801
|
timelock_info=condition_valid_times,
|
|
1729
1802
|
)
|
|
1730
1803
|
).transactions
|
|
@@ -1745,6 +1818,7 @@ async def revoke_vc(
|
|
|
1745
1818
|
|
|
1746
1819
|
|
|
1747
1820
|
async def approve_r_cats(
|
|
1821
|
+
root_path: pathlib.Path,
|
|
1748
1822
|
wallet_rpc_port: Optional[int],
|
|
1749
1823
|
fingerprint: int,
|
|
1750
1824
|
wallet_id: uint32,
|
|
@@ -1755,8 +1829,8 @@ async def approve_r_cats(
|
|
|
1755
1829
|
reuse: bool,
|
|
1756
1830
|
push: bool,
|
|
1757
1831
|
condition_valid_times: ConditionValidTimes,
|
|
1758
|
-
) ->
|
|
1759
|
-
async with get_wallet_client(wallet_rpc_port, fingerprint) as (wallet_client, fingerprint, config):
|
|
1832
|
+
) -> list[TransactionRecord]:
|
|
1833
|
+
async with get_wallet_client(root_path, wallet_rpc_port, fingerprint) as (wallet_client, fingerprint, config):
|
|
1760
1834
|
if wallet_client is None:
|
|
1761
1835
|
return
|
|
1762
1836
|
txs = await wallet_client.crcat_approve_pending(
|