chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/__init__.py +8 -4
- chia/_tests/blockchain/blockchain_test_utils.py +6 -8
- chia/_tests/blockchain/test_augmented_chain.py +4 -4
- chia/_tests/blockchain/test_blockchain.py +165 -190
- chia/_tests/blockchain/test_build_chains.py +2 -4
- chia/_tests/blockchain/test_get_block_generator.py +2 -3
- chia/_tests/clvm/coin_store.py +4 -7
- chia/_tests/clvm/test_clvm_step.py +4 -4
- chia/_tests/clvm/test_puzzle_compression.py +2 -1
- chia/_tests/clvm/test_puzzle_drivers.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -4
- chia/_tests/clvm/test_spend_sim.py +2 -2
- chia/_tests/cmds/cmd_test_utils.py +27 -45
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_show.py +4 -4
- chia/_tests/cmds/test_tx_config_args.py +1 -2
- chia/_tests/cmds/testing_classes.py +4 -5
- chia/_tests/cmds/wallet/test_did.py +24 -27
- chia/_tests/cmds/wallet/test_nft.py +12 -10
- chia/_tests/cmds/wallet/test_vcs.py +11 -12
- chia/_tests/cmds/wallet/test_wallet.py +134 -89
- chia/_tests/conftest.py +59 -30
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_beta.py +4 -4
- chia/_tests/core/cmds/test_keys.py +2 -3
- chia/_tests/core/cmds/test_wallet.py +15 -15
- chia/_tests/core/consensus/test_pot_iterations.py +19 -73
- chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
- chia/_tests/core/daemon/test_daemon.py +11 -11
- chia/_tests/core/data_layer/conftest.py +2 -2
- chia/_tests/core/data_layer/test_data_rpc.py +28 -14
- chia/_tests/core/data_layer/test_data_store.py +10 -10
- chia/_tests/core/data_layer/util.py +11 -11
- chia/_tests/core/farmer/test_farmer_api.py +2 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
- chia/_tests/core/full_node/stores/test_block_store.py +5 -4
- chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
- chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +3 -4
- chia/_tests/core/full_node/test_conditions.py +21 -23
- chia/_tests/core/full_node/test_full_node.py +225 -62
- chia/_tests/core/full_node/test_hint_management.py +2 -4
- chia/_tests/core/full_node/test_performance.py +0 -1
- chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
- chia/_tests/core/full_node/test_transactions.py +1 -2
- chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
- chia/_tests/core/mempool/test_mempool.py +29 -37
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
- chia/_tests/core/mempool/test_mempool_manager.py +963 -839
- chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
- chia/_tests/core/server/serve.py +7 -7
- chia/_tests/core/server/test_dos.py +1 -2
- chia/_tests/core/server/test_event_loop.py +12 -4
- chia/_tests/core/server/test_loop.py +7 -8
- chia/_tests/core/server/test_rate_limits.py +9 -8
- chia/_tests/core/server/test_server.py +61 -1
- chia/_tests/core/services/test_services.py +2 -2
- chia/_tests/core/ssl/test_ssl.py +2 -2
- chia/_tests/core/test_cost_calculation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
- chia/_tests/core/test_filter.py +0 -1
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +1 -2
- chia/_tests/core/test_seeder.py +4 -4
- chia/_tests/core/util/test_config.py +4 -4
- chia/_tests/core/util/test_jsonify.py +2 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_lockfile.py +2 -1
- chia/_tests/core/util/test_log_exceptions.py +1 -2
- chia/_tests/core/util/test_streamable.py +17 -17
- chia/_tests/db/test_db_wrapper.py +3 -2
- chia/_tests/environments/wallet.py +14 -14
- chia/_tests/ether.py +4 -3
- chia/_tests/farmer_harvester/test_farmer.py +41 -24
- chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
- chia/_tests/harvester/test_harvester_api.py +11 -4
- chia/_tests/plot_sync/test_plot_sync.py +13 -11
- chia/_tests/plot_sync/test_receiver.py +11 -10
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +1 -2
- chia/_tests/plotting/test_plot_manager.py +7 -6
- chia/_tests/plotting/test_prover.py +30 -38
- chia/_tests/pools/test_pool_cmdline.py +4 -6
- chia/_tests/pools/test_pool_rpc.py +203 -61
- chia/_tests/pools/test_pool_wallet.py +3 -3
- chia/_tests/pools/test_wallet_pool_store.py +1 -4
- chia/_tests/process_junit.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +4 -4
- chia/_tests/rpc/test_rpc_server.py +3 -3
- chia/_tests/simulation/test_simulation.py +12 -25
- chia/_tests/solver/test_solver_service.py +13 -4
- chia/_tests/testconfig.py +2 -2
- chia/_tests/timelord/test_new_peak.py +22 -11
- chia/_tests/tools/test_run_block.py +0 -2
- chia/_tests/tools/test_virtual_project.py +2 -1
- chia/_tests/util/benchmarks.py +1 -0
- chia/_tests/util/blockchain.py +38 -36
- chia/_tests/util/blockchain_mock.py +11 -11
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/coin_store.py +2 -1
- chia/_tests/util/config.py +1 -1
- chia/_tests/util/db_connection.py +2 -3
- chia/_tests/util/full_sync.py +9 -11
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/get_name_puzzle_conditions.py +2 -0
- chia/_tests/util/misc.py +24 -24
- chia/_tests/util/network_protocol_data.py +20 -3
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +292 -3
- chia/_tests/util/setup_nodes.py +62 -47
- chia/_tests/util/spend_sim.py +57 -57
- chia/_tests/util/test_async_pool.py +2 -3
- chia/_tests/util/test_chia_version.py +1 -3
- chia/_tests/util/test_config.py +3 -3
- chia/_tests/util/test_full_block_utils.py +6 -3
- chia/_tests/util/test_limited_semaphore.py +1 -2
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_network.py +1 -2
- chia/_tests/util/test_priority_mutex.py +3 -3
- chia/_tests/util/test_recursive_replace.py +5 -6
- chia/_tests/util/test_replace_str_to_bytes.py +8 -10
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/time_out_assert.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
- chia/_tests/wallet/conftest.py +6 -6
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
- chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
- chia/_tests/wallet/did_wallet/test_did.py +16 -6
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
- chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
- chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
- chia/_tests/wallet/test_clvm_streamable.py +2 -3
- chia/_tests/wallet/test_coin_management.py +2 -2
- chia/_tests/wallet/test_conditions.py +45 -51
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
- chia/_tests/wallet/test_notifications.py +14 -14
- chia/_tests/wallet/test_signer_protocol.py +5 -5
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
- chia/_tests/wallet/test_transaction_store.py +20 -20
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +380 -228
- chia/_tests/wallet/test_wallet_action_scope.py +4 -4
- chia/_tests/wallet/test_wallet_blockchain.py +12 -12
- chia/_tests/wallet/test_wallet_coin_store.py +3 -4
- chia/_tests/wallet/test_wallet_node.py +14 -14
- chia/_tests/wallet/test_wallet_test_framework.py +2 -1
- chia/_tests/wallet/test_wallet_utils.py +2 -3
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
- chia/_tests/wallet/wallet_block_tools.py +12 -11
- chia/_tests/weight_proof/config.py +1 -0
- chia/_tests/weight_proof/test_weight_proof.py +5 -4
- chia/apis/__init__.py +21 -0
- chia/apis/farmer_stub.py +102 -0
- chia/apis/full_node_stub.py +372 -0
- chia/apis/harvester_stub.py +57 -0
- chia/apis/introducer_stub.py +35 -0
- chia/apis/solver_stub.py +30 -0
- chia/apis/stub_protocol_registry.py +21 -0
- chia/apis/timelord_stub.py +39 -0
- chia/apis/wallet_stub.py +161 -0
- chia/cmds/beta.py +3 -4
- chia/cmds/beta_funcs.py +4 -3
- chia/cmds/check_wallet_db.py +4 -4
- chia/cmds/chia.py +1 -2
- chia/cmds/cmd_classes.py +11 -13
- chia/cmds/cmd_helpers.py +11 -11
- chia/cmds/cmds_util.py +15 -15
- chia/cmds/coin_funcs.py +6 -7
- chia/cmds/coins.py +2 -3
- chia/cmds/configure.py +1 -2
- chia/cmds/data.py +42 -42
- chia/cmds/data_funcs.py +81 -81
- chia/cmds/db.py +4 -5
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev/data.py +4 -4
- chia/cmds/dev/gh.py +5 -5
- chia/cmds/dev/installers.py +2 -3
- chia/cmds/dev/mempool.py +3 -4
- chia/cmds/dev/mempool_funcs.py +4 -4
- chia/cmds/dev/sim.py +8 -8
- chia/cmds/dump_keyring.py +3 -3
- chia/cmds/farm.py +6 -8
- chia/cmds/farm_funcs.py +25 -24
- chia/cmds/init_funcs.py +4 -4
- chia/cmds/keys.py +16 -18
- chia/cmds/keys_funcs.py +36 -36
- chia/cmds/netspace.py +1 -3
- chia/cmds/netspace_funcs.py +1 -2
- chia/cmds/options.py +3 -2
- chia/cmds/param_types.py +17 -16
- chia/cmds/passphrase.py +6 -7
- chia/cmds/passphrase_funcs.py +11 -13
- chia/cmds/peer.py +1 -3
- chia/cmds/peer_funcs.py +3 -3
- chia/cmds/plotnft.py +6 -7
- chia/cmds/plotnft_funcs.py +37 -26
- chia/cmds/rpc.py +3 -3
- chia/cmds/show.py +3 -5
- chia/cmds/show_funcs.py +9 -9
- chia/cmds/sim_funcs.py +25 -26
- chia/cmds/solver.py +1 -3
- chia/cmds/solver_funcs.py +1 -2
- chia/cmds/start_funcs.py +2 -2
- chia/cmds/wallet.py +76 -81
- chia/cmds/wallet_funcs.py +206 -177
- chia/consensus/augmented_chain.py +6 -6
- chia/consensus/block_body_validation.py +19 -15
- chia/consensus/block_creation.py +25 -21
- chia/consensus/block_header_validation.py +27 -13
- chia/consensus/block_height_map.py +3 -6
- chia/consensus/block_height_map_protocol.py +2 -2
- chia/consensus/block_record.py +2 -4
- chia/consensus/blockchain.py +58 -40
- chia/consensus/blockchain_interface.py +7 -7
- chia/consensus/coin_store_protocol.py +5 -6
- chia/consensus/condition_tools.py +4 -4
- chia/consensus/cost_calculator.py +2 -3
- chia/consensus/default_constants.py +16 -13
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +3 -5
- chia/consensus/find_fork_point.py +2 -4
- chia/consensus/full_block_to_block_record.py +11 -13
- chia/consensus/generator_tools.py +2 -3
- chia/consensus/get_block_challenge.py +42 -26
- chia/consensus/get_block_generator.py +2 -3
- chia/consensus/make_sub_epoch_summary.py +8 -7
- chia/consensus/multiprocess_validation.py +31 -20
- chia/consensus/pos_quality.py +6 -23
- chia/consensus/pot_iterations.py +17 -44
- chia/consensus/signage_point.py +4 -5
- chia/consensus/vdf_info_computation.py +2 -4
- chia/daemon/client.py +8 -8
- chia/daemon/keychain_proxy.py +31 -37
- chia/daemon/server.py +32 -33
- chia/daemon/windows_signal.py +4 -3
- chia/data_layer/data_layer.py +86 -77
- chia/data_layer/data_layer_rpc_api.py +9 -9
- chia/data_layer/data_layer_rpc_client.py +13 -15
- chia/data_layer/data_layer_server.py +3 -3
- chia/data_layer/data_layer_util.py +14 -14
- chia/data_layer/data_layer_wallet.py +94 -101
- chia/data_layer/data_store.py +50 -50
- chia/data_layer/dl_wallet_store.py +9 -12
- chia/data_layer/download_data.py +8 -9
- chia/data_layer/s3_plugin_service.py +5 -9
- chia/data_layer/start_data_layer.py +5 -5
- chia/farmer/farmer.py +31 -31
- chia/farmer/farmer_api.py +45 -33
- chia/farmer/farmer_rpc_api.py +5 -4
- chia/farmer/farmer_rpc_client.py +6 -6
- chia/farmer/start_farmer.py +6 -6
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +238 -224
- chia/full_node/full_node_api.py +193 -150
- chia/full_node/full_node_rpc_api.py +53 -31
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hint_management.py +2 -2
- chia/full_node/mempool.py +17 -19
- chia/full_node/mempool_manager.py +89 -42
- chia/full_node/pending_tx_cache.py +2 -3
- chia/full_node/start_full_node.py +5 -5
- chia/full_node/sync_store.py +3 -4
- chia/full_node/tx_processing_queue.py +34 -13
- chia/full_node/weight_proof.py +61 -48
- chia/harvester/harvester.py +25 -24
- chia/harvester/harvester_api.py +61 -38
- chia/harvester/harvester_rpc_api.py +10 -10
- chia/harvester/start_harvester.py +4 -4
- chia/introducer/introducer.py +3 -3
- chia/introducer/introducer_api.py +6 -4
- chia/introducer/start_introducer.py +4 -4
- chia/legacy/keyring.py +3 -3
- chia/plot_sync/delta.py +1 -2
- chia/plot_sync/receiver.py +20 -17
- chia/plot_sync/sender.py +15 -10
- chia/plotters/bladebit.py +7 -7
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +4 -4
- chia/plotters/plotters.py +4 -4
- chia/plotters/plotters_util.py +3 -3
- chia/plotting/cache.py +20 -14
- chia/plotting/check_plots.py +26 -35
- chia/plotting/create_plots.py +22 -23
- chia/plotting/manager.py +21 -14
- chia/plotting/prover.py +59 -42
- chia/plotting/util.py +16 -16
- chia/pools/pool_config.py +2 -1
- chia/pools/pool_puzzles.py +11 -12
- chia/pools/pool_wallet.py +34 -57
- chia/pools/pool_wallet_info.py +39 -10
- chia/protocols/farmer_protocol.py +8 -9
- chia/protocols/fee_estimate.py +3 -4
- chia/protocols/full_node_protocol.py +3 -4
- chia/protocols/harvester_protocol.py +27 -15
- chia/protocols/outbound_message.py +3 -3
- chia/protocols/pool_protocol.py +8 -9
- chia/protocols/shared_protocol.py +1 -2
- chia/protocols/solver_protocol.py +9 -2
- chia/protocols/timelord_protocol.py +4 -7
- chia/protocols/wallet_protocol.py +11 -12
- chia/rpc/rpc_client.py +9 -9
- chia/rpc/rpc_server.py +17 -17
- chia/rpc/util.py +2 -2
- chia/seeder/crawler.py +8 -8
- chia/seeder/crawler_api.py +21 -27
- chia/seeder/crawler_rpc_api.py +2 -2
- chia/seeder/dns_server.py +21 -21
- chia/seeder/start_crawler.py +4 -4
- chia/server/address_manager.py +15 -16
- chia/server/api_protocol.py +11 -11
- chia/server/chia_policy.py +46 -26
- chia/server/introducer_peers.py +2 -3
- chia/server/node_discovery.py +19 -19
- chia/server/rate_limit_numbers.py +4 -5
- chia/server/rate_limits.py +4 -4
- chia/server/resolve_peer_info.py +4 -4
- chia/server/server.py +49 -52
- chia/server/signal_handlers.py +6 -6
- chia/server/start_service.py +17 -17
- chia/server/upnp.py +4 -6
- chia/server/ws_connection.py +52 -37
- chia/simulator/add_blocks_in_batches.py +1 -3
- chia/simulator/block_tools.py +312 -200
- chia/simulator/full_node_simulator.py +56 -35
- chia/simulator/keyring.py +2 -3
- chia/simulator/setup_services.py +15 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +3 -5
- chia/util/inline_executor.py +2 -1
- chia/util/ip_address.py +1 -2
- chia/util/keychain.py +25 -27
- chia/util/keyring_wrapper.py +18 -19
- chia/util/lock.py +3 -4
- chia/util/log_exceptions.py +1 -2
- chia/util/lru_cache.py +2 -2
- chia/util/network.py +6 -6
- chia/util/path.py +2 -3
- chia/util/priority_mutex.py +2 -2
- chia/util/profiler.py +1 -2
- chia/util/safe_cancel_task.py +1 -2
- chia/util/streamable.py +22 -8
- chia/util/task_referencer.py +1 -1
- chia/util/timing.py +3 -3
- chia/util/virtual_project_analysis.py +6 -5
- chia/util/ws_message.py +2 -2
- chia/wallet/cat_wallet/cat_info.py +3 -4
- chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
- chia/wallet/cat_wallet/cat_utils.py +3 -4
- chia/wallet/cat_wallet/cat_wallet.py +61 -83
- chia/wallet/cat_wallet/lineage_store.py +3 -4
- chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
- chia/wallet/coin_selection.py +9 -10
- chia/wallet/conditions.py +120 -105
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
- chia/wallet/derivation_record.py +1 -2
- chia/wallet/derive_keys.py +2 -4
- chia/wallet/did_wallet/did_info.py +10 -11
- chia/wallet/did_wallet/did_wallet.py +36 -82
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
- chia/wallet/driver_protocol.py +5 -7
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
- chia/wallet/nft_wallet/nft_info.py +8 -9
- chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
- chia/wallet/nft_wallet/nft_wallet.py +79 -116
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
- chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
- chia/wallet/nft_wallet/uncurry_nft.py +10 -11
- chia/wallet/notification_manager.py +3 -3
- chia/wallet/notification_store.py +44 -61
- chia/wallet/outer_puzzles.py +6 -7
- chia/wallet/puzzle_drivers.py +34 -6
- chia/wallet/puzzles/clawback/drivers.py +6 -6
- chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
- chia/wallet/puzzles/load_clvm.py +1 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
- chia/wallet/puzzles/singleton_top_layer.py +2 -3
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
- chia/wallet/puzzles/tails.py +3 -3
- chia/wallet/singleton.py +5 -7
- chia/wallet/singleton_record.py +3 -3
- chia/wallet/start_wallet.py +5 -5
- chia/wallet/trade_manager.py +37 -58
- chia/wallet/trade_record.py +4 -4
- chia/wallet/trading/offer.py +59 -46
- chia/wallet/trading/trade_store.py +8 -9
- chia/wallet/transaction_record.py +8 -8
- chia/wallet/uncurried_puzzle.py +1 -2
- chia/wallet/util/clvm_streamable.py +12 -12
- chia/wallet/util/compute_hints.py +4 -5
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +2 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/wallet/util/signing.py +85 -0
- chia/wallet/util/tx_config.py +15 -6
- chia/wallet/util/wallet_sync_utils.py +14 -16
- chia/wallet/util/wallet_types.py +2 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
- chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
- chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
- chia/wallet/vc_wallet/vc_drivers.py +27 -27
- chia/wallet/vc_wallet/vc_store.py +5 -6
- chia/wallet/vc_wallet/vc_wallet.py +33 -61
- chia/wallet/wallet.py +50 -78
- chia/wallet/wallet_action_scope.py +11 -11
- chia/wallet/wallet_blockchain.py +12 -12
- chia/wallet/wallet_coin_record.py +12 -6
- chia/wallet/wallet_coin_store.py +24 -25
- chia/wallet/wallet_interested_store.py +3 -5
- chia/wallet/wallet_nft_store.py +10 -11
- chia/wallet/wallet_node.py +53 -61
- chia/wallet/wallet_node_api.py +5 -3
- chia/wallet/wallet_protocol.py +23 -23
- chia/wallet/wallet_puzzle_store.py +15 -18
- chia/wallet/wallet_request_types.py +778 -114
- chia/wallet/wallet_retry_store.py +1 -3
- chia/wallet/wallet_rpc_api.py +572 -909
- chia/wallet/wallet_rpc_client.py +87 -279
- chia/wallet/wallet_singleton_store.py +3 -4
- chia/wallet/wallet_state_manager.py +332 -106
- chia/wallet/wallet_transaction_store.py +11 -14
- chia/wallet/wallet_user_store.py +4 -6
- chia/wallet/wallet_weight_proof_handler.py +4 -4
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
- chia/apis.py +0 -21
- chia/consensus/check_time_locks.py +0 -57
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
- chia/types/coin_record.py +0 -44
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import Any
|
|
4
|
+
from typing import Any
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -17,7 +17,7 @@ from chia.wallet.did_wallet.did_wallet import DIDWallet
|
|
|
17
17
|
from chia.wallet.nft_wallet.nft_wallet import NFTWallet
|
|
18
18
|
from chia.wallet.outer_puzzles import create_asset_id, match_puzzle
|
|
19
19
|
from chia.wallet.puzzle_drivers import PuzzleInfo
|
|
20
|
-
from chia.wallet.trading.offer import Offer,
|
|
20
|
+
from chia.wallet.trading.offer import Offer, OfferSpecification
|
|
21
21
|
from chia.wallet.trading.trade_status import TradeStatus
|
|
22
22
|
from chia.wallet.uncurried_puzzle import uncurry_puzzle
|
|
23
23
|
|
|
@@ -158,12 +158,12 @@ async def test_nft_offer_sell_nft(wallet_environments: WalletTestFramework, zero
|
|
|
158
158
|
assert await nft_wallet_taker.get_nft_count() == 0
|
|
159
159
|
|
|
160
160
|
nft_to_offer = coins_maker[0]
|
|
161
|
-
nft_to_offer_info:
|
|
161
|
+
nft_to_offer_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
|
|
162
162
|
nft_to_offer_asset_id: bytes32 = create_asset_id(nft_to_offer_info) # type: ignore
|
|
163
163
|
xch_requested = 1000
|
|
164
164
|
maker_fee = uint64(433)
|
|
165
165
|
|
|
166
|
-
offer_did_nft_for_xch:
|
|
166
|
+
offer_did_nft_for_xch: OfferSpecification = {nft_to_offer_asset_id: -1, wallet_maker.id(): xch_requested}
|
|
167
167
|
|
|
168
168
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
169
169
|
wallet_environments.tx_config, push=False
|
|
@@ -386,7 +386,7 @@ async def test_nft_offer_request_nft(wallet_environments: WalletTestFramework, z
|
|
|
386
386
|
|
|
387
387
|
assert await nft_wallet_maker.get_nft_count() == 0
|
|
388
388
|
nft_to_request = coins_taker[0]
|
|
389
|
-
nft_to_request_info:
|
|
389
|
+
nft_to_request_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_request.full_puzzle))
|
|
390
390
|
|
|
391
391
|
assert isinstance(nft_to_request_info, PuzzleInfo)
|
|
392
392
|
nft_to_request_asset_id = create_asset_id(nft_to_request_info)
|
|
@@ -395,7 +395,7 @@ async def test_nft_offer_request_nft(wallet_environments: WalletTestFramework, z
|
|
|
395
395
|
maker_fee = uint64(10)
|
|
396
396
|
driver_dict = {nft_to_request_asset_id: nft_to_request_info}
|
|
397
397
|
|
|
398
|
-
offer_dict:
|
|
398
|
+
offer_dict: OfferSpecification = {nft_to_request_asset_id: 1, wallet_maker.id(): -xch_offered}
|
|
399
399
|
|
|
400
400
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
401
401
|
wallet_environments.tx_config, push=False
|
|
@@ -680,12 +680,12 @@ async def test_nft_offer_sell_did_to_did(wallet_environments: WalletTestFramewor
|
|
|
680
680
|
assert len(coins_maker) == 1
|
|
681
681
|
assert await nft_wallet_taker.get_nft_count() == 0
|
|
682
682
|
nft_to_offer = coins_maker[0]
|
|
683
|
-
nft_to_offer_info:
|
|
683
|
+
nft_to_offer_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
|
|
684
684
|
nft_to_offer_asset_id: bytes32 = create_asset_id(nft_to_offer_info) # type: ignore
|
|
685
685
|
xch_requested = 1000
|
|
686
686
|
maker_fee = uint64(433)
|
|
687
687
|
|
|
688
|
-
offer_did_nft_for_xch:
|
|
688
|
+
offer_did_nft_for_xch: OfferSpecification = {nft_to_offer_asset_id: -1, wallet_maker.id(): xch_requested}
|
|
689
689
|
|
|
690
690
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
691
691
|
wallet_environments.tx_config, push=False
|
|
@@ -985,12 +985,12 @@ async def test_nft_offer_sell_nft_for_cat(
|
|
|
985
985
|
await time_out_assert(20, cat_wallet_maker.get_confirmed_balance, maker_cat_balance)
|
|
986
986
|
await time_out_assert(20, cat_wallet_taker.get_confirmed_balance, taker_cat_balance)
|
|
987
987
|
nft_to_offer = coins_maker[0]
|
|
988
|
-
nft_to_offer_info:
|
|
988
|
+
nft_to_offer_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
|
|
989
989
|
nft_to_offer_asset_id: bytes32 = create_asset_id(nft_to_offer_info) # type: ignore
|
|
990
990
|
cats_requested = 1000
|
|
991
991
|
maker_fee = uint64(433)
|
|
992
992
|
|
|
993
|
-
offer_did_nft_for_xch:
|
|
993
|
+
offer_did_nft_for_xch: OfferSpecification = {nft_to_offer_asset_id: -1, cat_wallet_maker.id(): cats_requested}
|
|
994
994
|
|
|
995
995
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
996
996
|
wallet_environments.tx_config, push=False
|
|
@@ -1347,7 +1347,7 @@ async def test_nft_offer_request_nft_for_cat(
|
|
|
1347
1347
|
maker_fee = uint64(433)
|
|
1348
1348
|
driver_dict = {nft_to_request_asset_id: nft_to_request_info}
|
|
1349
1349
|
|
|
1350
|
-
offer_dict:
|
|
1350
|
+
offer_dict: OfferSpecification = {nft_to_request_asset_id: 1, cat_wallet_maker.id(): -cats_requested}
|
|
1351
1351
|
|
|
1352
1352
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
1353
1353
|
wallet_environments.tx_config, push=False
|
|
@@ -1583,7 +1583,7 @@ async def test_nft_offer_sell_cancel(wallet_environments: WalletTestFramework) -
|
|
|
1583
1583
|
xch_requested = 1000
|
|
1584
1584
|
maker_fee = uint64(433)
|
|
1585
1585
|
|
|
1586
|
-
offer_did_nft_for_xch:
|
|
1586
|
+
offer_did_nft_for_xch: OfferSpecification = {nft_to_offer_asset_id: -1, wallet_maker.id(): xch_requested}
|
|
1587
1587
|
|
|
1588
1588
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
1589
1589
|
wallet_environments.tx_config, push=False
|
|
@@ -1976,13 +1976,13 @@ async def test_complex_nft_offer(
|
|
|
1976
1976
|
CAT_REQUESTED = 100000
|
|
1977
1977
|
FEE = uint64(2000000000000)
|
|
1978
1978
|
|
|
1979
|
-
complex_nft_offer:
|
|
1979
|
+
complex_nft_offer: OfferSpecification = {
|
|
1980
1980
|
nft_to_offer_asset_id_maker: -1,
|
|
1981
1981
|
cat_wallet_maker.id(): CAT_REQUESTED * -1,
|
|
1982
1982
|
1: XCH_REQUESTED,
|
|
1983
1983
|
nft_to_offer_asset_id_taker_1: 1,
|
|
1984
1984
|
nft_to_offer_asset_id_taker_2: 1,
|
|
1985
|
-
|
|
1985
|
+
cat_wallet_taker.get_asset_id(): CAT_REQUESTED,
|
|
1986
1986
|
}
|
|
1987
1987
|
|
|
1988
1988
|
nft_taker_1_info = match_puzzle(uncurry_puzzle(taker_nfts[0].full_puzzle))
|
|
@@ -1992,10 +1992,10 @@ async def test_complex_nft_offer(
|
|
|
1992
1992
|
driver_dict = {
|
|
1993
1993
|
nft_to_offer_asset_id_taker_1: nft_taker_1_info,
|
|
1994
1994
|
nft_to_offer_asset_id_taker_2: nft_taker_2_info,
|
|
1995
|
-
|
|
1995
|
+
cat_wallet_taker.get_asset_id(): PuzzleInfo(
|
|
1996
1996
|
{
|
|
1997
1997
|
"type": "CAT",
|
|
1998
|
-
"tail": "0x" + cat_wallet_taker.get_asset_id(),
|
|
1998
|
+
"tail": "0x" + cat_wallet_taker.get_asset_id().hex(),
|
|
1999
1999
|
**(
|
|
2000
2000
|
{}
|
|
2001
2001
|
if wallet_type is CATWallet
|
|
@@ -2047,7 +2047,7 @@ async def test_complex_nft_offer(
|
|
|
2047
2047
|
},
|
|
2048
2048
|
{
|
|
2049
2049
|
None: uint64(XCH_REQUESTED),
|
|
2050
|
-
|
|
2050
|
+
cat_wallet_taker.get_asset_id(): uint64(CAT_REQUESTED),
|
|
2051
2051
|
},
|
|
2052
2052
|
)
|
|
2053
2053
|
taker_royalty_summary = NFTWallet.royalty_calculation(
|
|
@@ -2056,7 +2056,7 @@ async def test_complex_nft_offer(
|
|
|
2056
2056
|
nft_to_offer_asset_id_taker_2: (royalty_puzhash_taker, royalty_basis_pts_taker_2),
|
|
2057
2057
|
},
|
|
2058
2058
|
{
|
|
2059
|
-
|
|
2059
|
+
cat_wallet_maker.get_asset_id(): uint64(CAT_REQUESTED),
|
|
2060
2060
|
},
|
|
2061
2061
|
)
|
|
2062
2062
|
maker_xch_royalties_expected = maker_royalty_summary[nft_to_offer_asset_id_maker][0]["amount"]
|
|
@@ -2198,7 +2198,7 @@ async def test_complex_nft_offer(
|
|
|
2198
2198
|
complex_nft_offer = {
|
|
2199
2199
|
cat_wallet_maker.id(): CAT_REQUESTED * -1,
|
|
2200
2200
|
1: HALF_XCH_REQUESTED,
|
|
2201
|
-
|
|
2201
|
+
cat_wallet_taker.get_asset_id(): CAT_REQUESTED,
|
|
2202
2202
|
nft_to_offer_asset_id_maker: 1,
|
|
2203
2203
|
}
|
|
2204
2204
|
|
|
@@ -2206,10 +2206,10 @@ async def test_complex_nft_offer(
|
|
|
2206
2206
|
assert maker_nft_info is not None
|
|
2207
2207
|
driver_dict = {
|
|
2208
2208
|
nft_to_offer_asset_id_maker: maker_nft_info,
|
|
2209
|
-
|
|
2209
|
+
cat_wallet_taker.get_asset_id(): PuzzleInfo(
|
|
2210
2210
|
{
|
|
2211
2211
|
"type": "CAT",
|
|
2212
|
-
"tail": "0x" + cat_wallet_taker.get_asset_id(),
|
|
2212
|
+
"tail": "0x" + cat_wallet_taker.get_asset_id().hex(),
|
|
2213
2213
|
}
|
|
2214
2214
|
),
|
|
2215
2215
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import cast
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
6
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -15,7 +15,15 @@ from chia.wallet.nft_wallet.nft_wallet import NFTWallet
|
|
|
15
15
|
from chia.wallet.nft_wallet.uncurry_nft import UncurriedNFT
|
|
16
16
|
from chia.wallet.transaction_record import TransactionRecord
|
|
17
17
|
from chia.wallet.util.address_type import AddressType
|
|
18
|
-
from chia.wallet.wallet_request_types import
|
|
18
|
+
from chia.wallet.wallet_request_types import (
|
|
19
|
+
CreateNewWallet,
|
|
20
|
+
CreateNewWalletType,
|
|
21
|
+
NFTGetNFTs,
|
|
22
|
+
NFTMintBulk,
|
|
23
|
+
NFTMintMetadata,
|
|
24
|
+
PushTransactions,
|
|
25
|
+
SelectCoins,
|
|
26
|
+
)
|
|
19
27
|
|
|
20
28
|
|
|
21
29
|
async def nft_count(wallet: NFTWallet) -> int:
|
|
@@ -263,9 +271,15 @@ async def test_nft_mint_rpc(wallet_environments: WalletTestFramework, zero_royal
|
|
|
263
271
|
hex_did_id = did_wallet_maker.get_my_DID()
|
|
264
272
|
hmr_did_id = encode_puzzle_hash(bytes32.from_hexstr(hex_did_id), AddressType.DID.hrp(env_0.node.config))
|
|
265
273
|
|
|
266
|
-
|
|
274
|
+
create_wallet_res = await env_0.rpc_client.create_new_wallet(
|
|
275
|
+
CreateNewWallet(wallet_type=CreateNewWalletType.NFT_WALLET, name="NFT WALLET 1", did_id=hmr_did_id, push=True),
|
|
276
|
+
wallet_environments.tx_config,
|
|
277
|
+
)
|
|
267
278
|
|
|
268
|
-
await env_1.rpc_client.
|
|
279
|
+
await env_1.rpc_client.create_new_wallet(
|
|
280
|
+
CreateNewWallet(wallet_type=CreateNewWalletType.NFT_WALLET, name="NFT WALLET 2", did_id=None, push=True),
|
|
281
|
+
wallet_environments.tx_config,
|
|
282
|
+
)
|
|
269
283
|
|
|
270
284
|
await env_0.change_balances({"nft": {"init": True}})
|
|
271
285
|
await env_1.change_balances({"nft": {"init": True}})
|
|
@@ -310,13 +324,13 @@ async def test_nft_mint_rpc(wallet_environments: WalletTestFramework, zero_royal
|
|
|
310
324
|
)
|
|
311
325
|
)
|
|
312
326
|
).coins[0]
|
|
313
|
-
did_lineage_parent:
|
|
327
|
+
did_lineage_parent: bytes32 | None = None
|
|
314
328
|
txs: list[TransactionRecord] = []
|
|
315
329
|
nft_ids = set()
|
|
316
330
|
for i in range(0, n, chunk):
|
|
317
331
|
resp = await env_0.rpc_client.nft_mint_bulk(
|
|
318
332
|
NFTMintBulk(
|
|
319
|
-
wallet_id=
|
|
333
|
+
wallet_id=create_wallet_res.wallet_id,
|
|
320
334
|
metadata_list=[NFTMintMetadata.from_json_dict(metadata) for metadata in metadata_list[i : i + chunk]],
|
|
321
335
|
target_list=target_list[i : i + chunk],
|
|
322
336
|
royalty_percentage=uint16.construct_optional(royalty_percentage),
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Optional, Union
|
|
4
|
-
|
|
5
3
|
import pytest
|
|
6
4
|
from chia_rs.sized_bytes import bytes32
|
|
7
5
|
from chia_rs.sized_ints import uint64
|
|
@@ -116,7 +114,7 @@ async def test_nft_offer_with_fee(wallet_environments: WalletTestFramework) -> N
|
|
|
116
114
|
# MAKE FIRST TRADE: 1 NFT for 100 xch
|
|
117
115
|
|
|
118
116
|
nft_to_offer = coins_maker[0]
|
|
119
|
-
nft_info:
|
|
117
|
+
nft_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
|
|
120
118
|
assert nft_info is not None
|
|
121
119
|
nft_asset_id = create_asset_id(nft_info)
|
|
122
120
|
assert nft_asset_id is not None
|
|
@@ -124,7 +122,7 @@ async def test_nft_offer_with_fee(wallet_environments: WalletTestFramework) -> N
|
|
|
124
122
|
|
|
125
123
|
xch_request = 100
|
|
126
124
|
maker_fee = uint64(10)
|
|
127
|
-
offer_nft_for_xch: dict[
|
|
125
|
+
offer_nft_for_xch: dict[int | bytes32, int] = {wallet_maker.id(): xch_request, nft_asset_id: -1}
|
|
128
126
|
|
|
129
127
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
130
128
|
wallet_environments.tx_config, push=False
|
|
@@ -215,7 +213,7 @@ async def test_nft_offer_with_fee(wallet_environments: WalletTestFramework) -> N
|
|
|
215
213
|
# MAKE SECOND TRADE: 100 xch for 1 NFT
|
|
216
214
|
|
|
217
215
|
nft_to_buy = coins_taker[0]
|
|
218
|
-
nft_to_buy_info:
|
|
216
|
+
nft_to_buy_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_buy.full_puzzle))
|
|
219
217
|
assert nft_to_buy_info is not None
|
|
220
218
|
nft_to_buy_asset_id = create_asset_id(nft_to_buy_info)
|
|
221
219
|
assert nft_to_buy_asset_id is not None
|
|
@@ -223,7 +221,7 @@ async def test_nft_offer_with_fee(wallet_environments: WalletTestFramework) -> N
|
|
|
223
221
|
|
|
224
222
|
xch_offered = 1000
|
|
225
223
|
maker_fee = uint64(10)
|
|
226
|
-
offer_xch_for_nft: dict[
|
|
224
|
+
offer_xch_for_nft: dict[int | bytes32, int] = {wallet_maker.id(): -xch_offered, nft_to_buy_asset_id: 1}
|
|
227
225
|
|
|
228
226
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
229
227
|
wallet_environments.tx_config, push=False
|
|
@@ -385,7 +383,7 @@ async def test_nft_offer_cancellations(wallet_environments: WalletTestFramework)
|
|
|
385
383
|
|
|
386
384
|
# maker creates offer and cancels
|
|
387
385
|
nft_to_offer = coins_maker[0]
|
|
388
|
-
nft_info:
|
|
386
|
+
nft_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
|
|
389
387
|
assert nft_info is not None
|
|
390
388
|
nft_asset_id = create_asset_id(nft_info)
|
|
391
389
|
assert nft_asset_id is not None
|
|
@@ -393,7 +391,7 @@ async def test_nft_offer_cancellations(wallet_environments: WalletTestFramework)
|
|
|
393
391
|
|
|
394
392
|
xch_request = 100
|
|
395
393
|
maker_fee = uint64(10)
|
|
396
|
-
offer_nft_for_xch: dict[
|
|
394
|
+
offer_nft_for_xch: dict[bytes32 | int, int] = {wallet_maker.id(): xch_request, nft_asset_id: -1}
|
|
397
395
|
|
|
398
396
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
399
397
|
wallet_environments.tx_config, push=False
|
|
@@ -602,7 +600,7 @@ async def test_nft_offer_with_metadata_update(wallet_environments: WalletTestFra
|
|
|
602
600
|
|
|
603
601
|
# MAKE FIRST TRADE: 1 NFT for 100 xch
|
|
604
602
|
nft_to_offer = coins_maker[0]
|
|
605
|
-
nft_info:
|
|
603
|
+
nft_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
|
|
606
604
|
assert nft_info is not None
|
|
607
605
|
nft_asset_id = create_asset_id(nft_info)
|
|
608
606
|
assert nft_asset_id is not None
|
|
@@ -610,7 +608,7 @@ async def test_nft_offer_with_metadata_update(wallet_environments: WalletTestFra
|
|
|
610
608
|
|
|
611
609
|
xch_request = 100
|
|
612
610
|
maker_fee = uint64(10)
|
|
613
|
-
offer_nft_for_xch: dict[
|
|
611
|
+
offer_nft_for_xch: dict[bytes32 | int, int] = {wallet_maker.id(): xch_request, nft_asset_id: -1}
|
|
614
612
|
|
|
615
613
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
616
614
|
wallet_environments.tx_config, push=False
|
|
@@ -827,7 +825,7 @@ async def test_nft_offer_nft_for_cat(wallet_environments: WalletTestFramework, w
|
|
|
827
825
|
|
|
828
826
|
# MAKE FIRST TRADE: 1 NFT for 10 taker cats
|
|
829
827
|
nft_to_offer = coins_maker[0]
|
|
830
|
-
nft_info:
|
|
828
|
+
nft_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
|
|
831
829
|
assert nft_info is not None
|
|
832
830
|
nft_asset_id = create_asset_id(nft_info)
|
|
833
831
|
assert nft_asset_id is not None
|
|
@@ -835,7 +833,7 @@ async def test_nft_offer_nft_for_cat(wallet_environments: WalletTestFramework, w
|
|
|
835
833
|
|
|
836
834
|
maker_fee = uint64(10)
|
|
837
835
|
taker_cat_offered = 2500
|
|
838
|
-
offer_nft_for_cat: dict[
|
|
836
|
+
offer_nft_for_cat: dict[bytes32 | int, int] = {
|
|
839
837
|
nft_asset_id: -1,
|
|
840
838
|
wallet_maker_for_taker_cat.id(): taker_cat_offered,
|
|
841
839
|
}
|
|
@@ -955,7 +953,7 @@ async def test_nft_offer_nft_for_cat(wallet_environments: WalletTestFramework, w
|
|
|
955
953
|
taker_cat_amount = 500
|
|
956
954
|
|
|
957
955
|
nft_to_buy = coins_taker[0]
|
|
958
|
-
nft_to_buy_info:
|
|
956
|
+
nft_to_buy_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_buy.full_puzzle))
|
|
959
957
|
assert nft_to_buy_info is not None
|
|
960
958
|
nft_to_buy_asset_id = create_asset_id(nft_to_buy_info)
|
|
961
959
|
assert nft_to_buy_asset_id is not None
|
|
@@ -964,7 +962,7 @@ async def test_nft_offer_nft_for_cat(wallet_environments: WalletTestFramework, w
|
|
|
964
962
|
}
|
|
965
963
|
|
|
966
964
|
maker_fee = uint64(10)
|
|
967
|
-
offer_multi_cats_for_nft: dict[
|
|
965
|
+
offer_multi_cats_for_nft: dict[bytes32 | int, int] = {
|
|
968
966
|
nft_to_buy_asset_id: 1,
|
|
969
967
|
wallet_maker_for_taker_cat.id(): -taker_cat_amount,
|
|
970
968
|
cat_wallet_maker.id(): -maker_cat_amount,
|
|
@@ -1230,13 +1228,13 @@ async def test_nft_offer_nft_for_nft(wallet_environments: WalletTestFramework) -
|
|
|
1230
1228
|
assert len(coins_taker) == 1
|
|
1231
1229
|
|
|
1232
1230
|
nft_to_offer = coins_maker[0]
|
|
1233
|
-
nft_to_offer_info:
|
|
1231
|
+
nft_to_offer_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
|
|
1234
1232
|
assert nft_to_offer_info is not None
|
|
1235
1233
|
nft_to_offer_asset_id = create_asset_id(nft_to_offer_info)
|
|
1236
1234
|
assert nft_to_offer_asset_id is not None
|
|
1237
1235
|
|
|
1238
1236
|
nft_to_take = coins_taker[0]
|
|
1239
|
-
nft_to_take_info:
|
|
1237
|
+
nft_to_take_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_take.full_puzzle))
|
|
1240
1238
|
assert nft_to_take_info is not None
|
|
1241
1239
|
nft_to_take_asset_id = create_asset_id(nft_to_take_info)
|
|
1242
1240
|
assert nft_to_take_asset_id is not None
|
|
@@ -1247,7 +1245,7 @@ async def test_nft_offer_nft_for_nft(wallet_environments: WalletTestFramework) -
|
|
|
1247
1245
|
}
|
|
1248
1246
|
|
|
1249
1247
|
maker_fee = uint64(10)
|
|
1250
|
-
offer_nft_for_nft: dict[
|
|
1248
|
+
offer_nft_for_nft: dict[bytes32 | int, int] = {nft_to_take_asset_id: 1, nft_to_offer_asset_id: -1}
|
|
1251
1249
|
|
|
1252
1250
|
async with trade_manager_maker.wallet_state_manager.new_action_scope(
|
|
1253
1251
|
wallet_environments.tx_config, push=False
|
|
@@ -1466,7 +1464,7 @@ async def test_nft_offer_nft0_and_xch_for_cat(
|
|
|
1466
1464
|
|
|
1467
1465
|
# MAKE FIRST TRADE: 1 NFT for 10 taker cats
|
|
1468
1466
|
nft_to_offer = coins_maker[0]
|
|
1469
|
-
nft_info:
|
|
1467
|
+
nft_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
|
|
1470
1468
|
assert nft_info is not None
|
|
1471
1469
|
nft_asset_id = create_asset_id(nft_info)
|
|
1472
1470
|
assert nft_asset_id is not None
|
|
@@ -1476,7 +1474,7 @@ async def test_nft_offer_nft0_and_xch_for_cat(
|
|
|
1476
1474
|
maker_xch_offered = 1000
|
|
1477
1475
|
taker_cat_offered = 2500
|
|
1478
1476
|
wallet_maker_id = wallet_maker.id()
|
|
1479
|
-
offer_nft_for_cat: dict[
|
|
1477
|
+
offer_nft_for_cat: dict[bytes32 | int, int] = {
|
|
1480
1478
|
wallet_maker_id: -maker_xch_offered,
|
|
1481
1479
|
nft_asset_id: -1,
|
|
1482
1480
|
wallet_maker_for_taker_cat.id(): taker_cat_offered,
|
|
@@ -1595,7 +1593,7 @@ async def test_nft_offer_nft0_and_xch_for_cat(
|
|
|
1595
1593
|
taker_cat_amount = 500
|
|
1596
1594
|
|
|
1597
1595
|
nft_to_buy = coins_taker[0]
|
|
1598
|
-
nft_to_buy_info:
|
|
1596
|
+
nft_to_buy_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_buy.full_puzzle))
|
|
1599
1597
|
assert nft_to_buy_info is not None
|
|
1600
1598
|
nft_to_buy_asset_id = create_asset_id(nft_to_buy_info)
|
|
1601
1599
|
assert nft_to_buy_asset_id is not None
|
|
@@ -1605,7 +1603,7 @@ async def test_nft_offer_nft0_and_xch_for_cat(
|
|
|
1605
1603
|
}
|
|
1606
1604
|
|
|
1607
1605
|
maker_fee = uint64(10)
|
|
1608
|
-
offer_multi_cats_for_nft: dict[
|
|
1606
|
+
offer_multi_cats_for_nft: dict[bytes32 | int, int] = {
|
|
1609
1607
|
nft_to_buy_asset_id: 1,
|
|
1610
1608
|
wallet_maker_for_taker_cat.id(): -taker_cat_amount,
|
|
1611
1609
|
cat_wallet_maker.id(): -maker_cat_amount,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import random
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
from chia_rs.sized_bytes import bytes32
|
|
7
6
|
|
|
@@ -85,7 +84,7 @@ def test_nft_transfer_puzzle_hashes(seeded_random: random.Random) -> None:
|
|
|
85
84
|
|
|
86
85
|
conds = nft_puz.run(nft_sol)
|
|
87
86
|
|
|
88
|
-
expected_ph:
|
|
87
|
+
expected_ph: bytes32 | None = None
|
|
89
88
|
# get the new NFT puzhash
|
|
90
89
|
for cond in conds.as_iter():
|
|
91
90
|
if cond.first().as_int() == 51:
|
|
@@ -2,7 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import time
|
|
5
|
-
from
|
|
5
|
+
from collections.abc import Callable
|
|
6
|
+
from typing import Any
|
|
6
7
|
|
|
7
8
|
import pytest
|
|
8
9
|
from chia_rs import AugSchemeMPL
|
|
@@ -660,10 +661,128 @@ async def test_nft_wallet_rpc_creation_and_list(wallet_environments: WalletTestF
|
|
|
660
661
|
# test counts
|
|
661
662
|
assert (await env.rpc_client.count_nfts(NFTCountNFTs(uint32(env.wallet_aliases["nft"])))).count == 2
|
|
662
663
|
assert (await env.rpc_client.count_nfts(NFTCountNFTs())).count == 2
|
|
663
|
-
with pytest.raises(ResponseFailureError, match="Wallet 50 not
|
|
664
|
+
with pytest.raises(ResponseFailureError, match="Wallet with id 50 does not exist"):
|
|
664
665
|
await env.rpc_client.count_nfts(NFTCountNFTs(uint32(50)))
|
|
665
666
|
|
|
666
667
|
|
|
668
|
+
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
669
|
+
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
|
|
670
|
+
@pytest.mark.anyio
|
|
671
|
+
async def test_sign_message_by_nft_id(wallet_environments: WalletTestFramework) -> None:
|
|
672
|
+
env = wallet_environments.environments[0]
|
|
673
|
+
wallet_node = env.node
|
|
674
|
+
wallet = env.xch_wallet
|
|
675
|
+
|
|
676
|
+
env.wallet_aliases = {
|
|
677
|
+
"xch": 1,
|
|
678
|
+
"nft": 2,
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
nft_wallet_0 = await env.rpc_client.fetch("create_new_wallet", dict(wallet_type="nft_wallet", name="NFT WALLET 1"))
|
|
682
|
+
assert isinstance(nft_wallet_0, dict)
|
|
683
|
+
assert nft_wallet_0.get("success")
|
|
684
|
+
assert env.wallet_aliases["nft"] == nft_wallet_0["wallet_id"]
|
|
685
|
+
|
|
686
|
+
async with wallet.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
687
|
+
wallet_ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
688
|
+
await env.rpc_client.mint_nft(
|
|
689
|
+
request=NFTMintNFTRequest(
|
|
690
|
+
wallet_id=uint32(env.wallet_aliases["nft"]),
|
|
691
|
+
royalty_address=encode_puzzle_hash(wallet_ph, AddressType.NFT.hrp(wallet_node.config)),
|
|
692
|
+
target_address=None,
|
|
693
|
+
hash=bytes32.from_hexstr("0xD4584AD463139FA8C0D9F68F4B59F185D4584AD463139FA8C0D9F68F4B59F185"),
|
|
694
|
+
uris=["https://www.chia.net/img/branding/chia-logo.svg"],
|
|
695
|
+
push=True,
|
|
696
|
+
),
|
|
697
|
+
tx_config=wallet_environments.tx_config,
|
|
698
|
+
)
|
|
699
|
+
|
|
700
|
+
await wallet_environments.process_pending_states(
|
|
701
|
+
[
|
|
702
|
+
WalletStateTransition(
|
|
703
|
+
pre_block_balance_updates={
|
|
704
|
+
"xch": {"set_remainder": True}, # tested above
|
|
705
|
+
"nft": {"init": True, "pending_coin_removal_count": 1},
|
|
706
|
+
},
|
|
707
|
+
post_block_balance_updates={
|
|
708
|
+
"xch": {"set_remainder": True}, # tested above
|
|
709
|
+
"nft": {
|
|
710
|
+
"pending_coin_removal_count": -1,
|
|
711
|
+
"unspent_coin_count": 1,
|
|
712
|
+
},
|
|
713
|
+
},
|
|
714
|
+
)
|
|
715
|
+
]
|
|
716
|
+
)
|
|
717
|
+
|
|
718
|
+
nft_list = await env.rpc_client.list_nfts(NFTGetNFTs(uint32(env.wallet_aliases["nft"])))
|
|
719
|
+
nft_id = nft_list.nft_list[0].nft_id
|
|
720
|
+
|
|
721
|
+
# Test general string
|
|
722
|
+
message = "Hello World"
|
|
723
|
+
response = await env.rpc_client.sign_message_by_id(
|
|
724
|
+
SignMessageByID(
|
|
725
|
+
id=nft_id,
|
|
726
|
+
message=message,
|
|
727
|
+
)
|
|
728
|
+
)
|
|
729
|
+
puzzle: Program = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, message))
|
|
730
|
+
assert AugSchemeMPL.verify(
|
|
731
|
+
response.pubkey,
|
|
732
|
+
puzzle.get_tree_hash(),
|
|
733
|
+
response.signature,
|
|
734
|
+
)
|
|
735
|
+
# Test hex string
|
|
736
|
+
message = "0123456789ABCDEF"
|
|
737
|
+
response = await env.rpc_client.sign_message_by_id(
|
|
738
|
+
SignMessageByID(
|
|
739
|
+
id=nft_id,
|
|
740
|
+
message=message,
|
|
741
|
+
is_hex=True,
|
|
742
|
+
)
|
|
743
|
+
)
|
|
744
|
+
puzzle = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, bytes.fromhex(message)))
|
|
745
|
+
|
|
746
|
+
assert AugSchemeMPL.verify(
|
|
747
|
+
response.pubkey,
|
|
748
|
+
puzzle.get_tree_hash(),
|
|
749
|
+
response.signature,
|
|
750
|
+
)
|
|
751
|
+
|
|
752
|
+
# Test BLS sign string
|
|
753
|
+
message = "Hello World"
|
|
754
|
+
response = await env.rpc_client.sign_message_by_id(
|
|
755
|
+
SignMessageByID(
|
|
756
|
+
id=nft_id,
|
|
757
|
+
message=message,
|
|
758
|
+
is_hex=False,
|
|
759
|
+
safe_mode=False,
|
|
760
|
+
)
|
|
761
|
+
)
|
|
762
|
+
|
|
763
|
+
assert AugSchemeMPL.verify(
|
|
764
|
+
response.pubkey,
|
|
765
|
+
bytes(message, "utf-8"),
|
|
766
|
+
response.signature,
|
|
767
|
+
)
|
|
768
|
+
# Test BLS sign hex
|
|
769
|
+
message = "0123456789ABCDEF"
|
|
770
|
+
response = await env.rpc_client.sign_message_by_id(
|
|
771
|
+
SignMessageByID(
|
|
772
|
+
id=nft_id,
|
|
773
|
+
message=message,
|
|
774
|
+
is_hex=True,
|
|
775
|
+
safe_mode=False,
|
|
776
|
+
)
|
|
777
|
+
)
|
|
778
|
+
|
|
779
|
+
assert AugSchemeMPL.verify(
|
|
780
|
+
response.pubkey,
|
|
781
|
+
hexstr_to_bytes(message),
|
|
782
|
+
response.signature,
|
|
783
|
+
)
|
|
784
|
+
|
|
785
|
+
|
|
667
786
|
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
668
787
|
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
|
|
669
788
|
@pytest.mark.anyio
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Optional
|
|
4
|
-
|
|
5
3
|
from chia_rs.sized_bytes import bytes32
|
|
6
4
|
from chia_rs.sized_ints import uint16
|
|
7
5
|
from clvm_tools.binutils import assemble
|
|
@@ -16,7 +14,6 @@ from chia.wallet.uncurried_puzzle import uncurry_puzzle
|
|
|
16
14
|
|
|
17
15
|
def test_ownership_outer_puzzle() -> None:
|
|
18
16
|
ACS = Program.to(1)
|
|
19
|
-
NIL = Program.to([])
|
|
20
17
|
owner = bytes32.zeros
|
|
21
18
|
# (mod (current_owner conditions solution)
|
|
22
19
|
# (list current_owner () conditions)
|
|
@@ -28,12 +25,12 @@ def test_ownership_outer_puzzle() -> None:
|
|
|
28
25
|
)
|
|
29
26
|
transfer_program_default: Program = puzzle_for_transfer_program(bytes32([1] * 32), bytes32([2] * 32), uint16(5000))
|
|
30
27
|
ownership_puzzle: Program = puzzle_for_ownership_layer(owner, Program.to(transfer_program), ACS)
|
|
31
|
-
ownership_puzzle_empty: Program = puzzle_for_ownership_layer(NIL, Program.to(transfer_program), ACS)
|
|
28
|
+
ownership_puzzle_empty: Program = puzzle_for_ownership_layer(Program.NIL, Program.to(transfer_program), ACS)
|
|
32
29
|
ownership_puzzle_default: Program = puzzle_for_ownership_layer(owner, transfer_program_default, ACS)
|
|
33
|
-
ownership_driver:
|
|
34
|
-
ownership_driver_empty:
|
|
35
|
-
ownership_driver_default:
|
|
36
|
-
transfer_program_driver:
|
|
30
|
+
ownership_driver: PuzzleInfo | None = match_puzzle(uncurry_puzzle(ownership_puzzle))
|
|
31
|
+
ownership_driver_empty: PuzzleInfo | None = match_puzzle(uncurry_puzzle(ownership_puzzle_empty))
|
|
32
|
+
ownership_driver_default: PuzzleInfo | None = match_puzzle(uncurry_puzzle(ownership_puzzle_default))
|
|
33
|
+
transfer_program_driver: PuzzleInfo | None = match_puzzle(uncurry_puzzle(transfer_program_default))
|
|
37
34
|
|
|
38
35
|
assert ownership_driver is not None
|
|
39
36
|
assert ownership_driver_empty is not None
|
|
@@ -41,7 +38,7 @@ def test_ownership_outer_puzzle() -> None:
|
|
|
41
38
|
assert transfer_program_driver is not None
|
|
42
39
|
assert ownership_driver.type() == "ownership"
|
|
43
40
|
assert ownership_driver["owner"] == owner
|
|
44
|
-
assert ownership_driver_empty["owner"] == NIL
|
|
41
|
+
assert ownership_driver_empty["owner"] == Program.NIL
|
|
45
42
|
assert ownership_driver["transfer_program"] == transfer_program
|
|
46
43
|
assert ownership_driver_default["transfer_program"] == transfer_program_driver
|
|
47
44
|
assert transfer_program_driver.type() == "royalty transfer program"
|