chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/__init__.py +8 -4
- chia/_tests/blockchain/blockchain_test_utils.py +6 -8
- chia/_tests/blockchain/test_augmented_chain.py +4 -4
- chia/_tests/blockchain/test_blockchain.py +165 -190
- chia/_tests/blockchain/test_build_chains.py +2 -4
- chia/_tests/blockchain/test_get_block_generator.py +2 -3
- chia/_tests/clvm/coin_store.py +4 -7
- chia/_tests/clvm/test_clvm_step.py +4 -4
- chia/_tests/clvm/test_puzzle_compression.py +2 -1
- chia/_tests/clvm/test_puzzle_drivers.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -4
- chia/_tests/clvm/test_spend_sim.py +2 -2
- chia/_tests/cmds/cmd_test_utils.py +27 -45
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_show.py +4 -4
- chia/_tests/cmds/test_tx_config_args.py +1 -2
- chia/_tests/cmds/testing_classes.py +4 -5
- chia/_tests/cmds/wallet/test_did.py +24 -27
- chia/_tests/cmds/wallet/test_nft.py +12 -10
- chia/_tests/cmds/wallet/test_vcs.py +11 -12
- chia/_tests/cmds/wallet/test_wallet.py +134 -89
- chia/_tests/conftest.py +59 -30
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_beta.py +4 -4
- chia/_tests/core/cmds/test_keys.py +2 -3
- chia/_tests/core/cmds/test_wallet.py +15 -15
- chia/_tests/core/consensus/test_pot_iterations.py +19 -73
- chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
- chia/_tests/core/daemon/test_daemon.py +11 -11
- chia/_tests/core/data_layer/conftest.py +2 -2
- chia/_tests/core/data_layer/test_data_rpc.py +28 -14
- chia/_tests/core/data_layer/test_data_store.py +10 -10
- chia/_tests/core/data_layer/util.py +11 -11
- chia/_tests/core/farmer/test_farmer_api.py +2 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
- chia/_tests/core/full_node/stores/test_block_store.py +5 -4
- chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
- chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +3 -4
- chia/_tests/core/full_node/test_conditions.py +21 -23
- chia/_tests/core/full_node/test_full_node.py +225 -62
- chia/_tests/core/full_node/test_hint_management.py +2 -4
- chia/_tests/core/full_node/test_performance.py +0 -1
- chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
- chia/_tests/core/full_node/test_transactions.py +1 -2
- chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
- chia/_tests/core/mempool/test_mempool.py +29 -37
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
- chia/_tests/core/mempool/test_mempool_manager.py +963 -839
- chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
- chia/_tests/core/server/serve.py +7 -7
- chia/_tests/core/server/test_dos.py +1 -2
- chia/_tests/core/server/test_event_loop.py +12 -4
- chia/_tests/core/server/test_loop.py +7 -8
- chia/_tests/core/server/test_rate_limits.py +9 -8
- chia/_tests/core/server/test_server.py +61 -1
- chia/_tests/core/services/test_services.py +2 -2
- chia/_tests/core/ssl/test_ssl.py +2 -2
- chia/_tests/core/test_cost_calculation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
- chia/_tests/core/test_filter.py +0 -1
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +1 -2
- chia/_tests/core/test_seeder.py +4 -4
- chia/_tests/core/util/test_config.py +4 -4
- chia/_tests/core/util/test_jsonify.py +2 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_lockfile.py +2 -1
- chia/_tests/core/util/test_log_exceptions.py +1 -2
- chia/_tests/core/util/test_streamable.py +17 -17
- chia/_tests/db/test_db_wrapper.py +3 -2
- chia/_tests/environments/wallet.py +14 -14
- chia/_tests/ether.py +4 -3
- chia/_tests/farmer_harvester/test_farmer.py +41 -24
- chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
- chia/_tests/harvester/test_harvester_api.py +11 -4
- chia/_tests/plot_sync/test_plot_sync.py +13 -11
- chia/_tests/plot_sync/test_receiver.py +11 -10
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +1 -2
- chia/_tests/plotting/test_plot_manager.py +7 -6
- chia/_tests/plotting/test_prover.py +30 -38
- chia/_tests/pools/test_pool_cmdline.py +4 -6
- chia/_tests/pools/test_pool_rpc.py +203 -61
- chia/_tests/pools/test_pool_wallet.py +3 -3
- chia/_tests/pools/test_wallet_pool_store.py +1 -4
- chia/_tests/process_junit.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +4 -4
- chia/_tests/rpc/test_rpc_server.py +3 -3
- chia/_tests/simulation/test_simulation.py +12 -25
- chia/_tests/solver/test_solver_service.py +13 -4
- chia/_tests/testconfig.py +2 -2
- chia/_tests/timelord/test_new_peak.py +22 -11
- chia/_tests/tools/test_run_block.py +0 -2
- chia/_tests/tools/test_virtual_project.py +2 -1
- chia/_tests/util/benchmarks.py +1 -0
- chia/_tests/util/blockchain.py +38 -36
- chia/_tests/util/blockchain_mock.py +11 -11
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/coin_store.py +2 -1
- chia/_tests/util/config.py +1 -1
- chia/_tests/util/db_connection.py +2 -3
- chia/_tests/util/full_sync.py +9 -11
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/get_name_puzzle_conditions.py +2 -0
- chia/_tests/util/misc.py +24 -24
- chia/_tests/util/network_protocol_data.py +20 -3
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +292 -3
- chia/_tests/util/setup_nodes.py +62 -47
- chia/_tests/util/spend_sim.py +57 -57
- chia/_tests/util/test_async_pool.py +2 -3
- chia/_tests/util/test_chia_version.py +1 -3
- chia/_tests/util/test_config.py +3 -3
- chia/_tests/util/test_full_block_utils.py +6 -3
- chia/_tests/util/test_limited_semaphore.py +1 -2
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_network.py +1 -2
- chia/_tests/util/test_priority_mutex.py +3 -3
- chia/_tests/util/test_recursive_replace.py +5 -6
- chia/_tests/util/test_replace_str_to_bytes.py +8 -10
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/time_out_assert.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
- chia/_tests/wallet/conftest.py +6 -6
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
- chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
- chia/_tests/wallet/did_wallet/test_did.py +16 -6
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
- chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
- chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
- chia/_tests/wallet/test_clvm_streamable.py +2 -3
- chia/_tests/wallet/test_coin_management.py +2 -2
- chia/_tests/wallet/test_conditions.py +45 -51
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
- chia/_tests/wallet/test_notifications.py +14 -14
- chia/_tests/wallet/test_signer_protocol.py +5 -5
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
- chia/_tests/wallet/test_transaction_store.py +20 -20
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +380 -228
- chia/_tests/wallet/test_wallet_action_scope.py +4 -4
- chia/_tests/wallet/test_wallet_blockchain.py +12 -12
- chia/_tests/wallet/test_wallet_coin_store.py +3 -4
- chia/_tests/wallet/test_wallet_node.py +14 -14
- chia/_tests/wallet/test_wallet_test_framework.py +2 -1
- chia/_tests/wallet/test_wallet_utils.py +2 -3
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
- chia/_tests/wallet/wallet_block_tools.py +12 -11
- chia/_tests/weight_proof/config.py +1 -0
- chia/_tests/weight_proof/test_weight_proof.py +5 -4
- chia/apis/__init__.py +21 -0
- chia/apis/farmer_stub.py +102 -0
- chia/apis/full_node_stub.py +372 -0
- chia/apis/harvester_stub.py +57 -0
- chia/apis/introducer_stub.py +35 -0
- chia/apis/solver_stub.py +30 -0
- chia/apis/stub_protocol_registry.py +21 -0
- chia/apis/timelord_stub.py +39 -0
- chia/apis/wallet_stub.py +161 -0
- chia/cmds/beta.py +3 -4
- chia/cmds/beta_funcs.py +4 -3
- chia/cmds/check_wallet_db.py +4 -4
- chia/cmds/chia.py +1 -2
- chia/cmds/cmd_classes.py +11 -13
- chia/cmds/cmd_helpers.py +11 -11
- chia/cmds/cmds_util.py +15 -15
- chia/cmds/coin_funcs.py +6 -7
- chia/cmds/coins.py +2 -3
- chia/cmds/configure.py +1 -2
- chia/cmds/data.py +42 -42
- chia/cmds/data_funcs.py +81 -81
- chia/cmds/db.py +4 -5
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev/data.py +4 -4
- chia/cmds/dev/gh.py +5 -5
- chia/cmds/dev/installers.py +2 -3
- chia/cmds/dev/mempool.py +3 -4
- chia/cmds/dev/mempool_funcs.py +4 -4
- chia/cmds/dev/sim.py +8 -8
- chia/cmds/dump_keyring.py +3 -3
- chia/cmds/farm.py +6 -8
- chia/cmds/farm_funcs.py +25 -24
- chia/cmds/init_funcs.py +4 -4
- chia/cmds/keys.py +16 -18
- chia/cmds/keys_funcs.py +36 -36
- chia/cmds/netspace.py +1 -3
- chia/cmds/netspace_funcs.py +1 -2
- chia/cmds/options.py +3 -2
- chia/cmds/param_types.py +17 -16
- chia/cmds/passphrase.py +6 -7
- chia/cmds/passphrase_funcs.py +11 -13
- chia/cmds/peer.py +1 -3
- chia/cmds/peer_funcs.py +3 -3
- chia/cmds/plotnft.py +6 -7
- chia/cmds/plotnft_funcs.py +37 -26
- chia/cmds/rpc.py +3 -3
- chia/cmds/show.py +3 -5
- chia/cmds/show_funcs.py +9 -9
- chia/cmds/sim_funcs.py +25 -26
- chia/cmds/solver.py +1 -3
- chia/cmds/solver_funcs.py +1 -2
- chia/cmds/start_funcs.py +2 -2
- chia/cmds/wallet.py +76 -81
- chia/cmds/wallet_funcs.py +206 -177
- chia/consensus/augmented_chain.py +6 -6
- chia/consensus/block_body_validation.py +19 -15
- chia/consensus/block_creation.py +25 -21
- chia/consensus/block_header_validation.py +27 -13
- chia/consensus/block_height_map.py +3 -6
- chia/consensus/block_height_map_protocol.py +2 -2
- chia/consensus/block_record.py +2 -4
- chia/consensus/blockchain.py +58 -40
- chia/consensus/blockchain_interface.py +7 -7
- chia/consensus/coin_store_protocol.py +5 -6
- chia/consensus/condition_tools.py +4 -4
- chia/consensus/cost_calculator.py +2 -3
- chia/consensus/default_constants.py +16 -13
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +3 -5
- chia/consensus/find_fork_point.py +2 -4
- chia/consensus/full_block_to_block_record.py +11 -13
- chia/consensus/generator_tools.py +2 -3
- chia/consensus/get_block_challenge.py +42 -26
- chia/consensus/get_block_generator.py +2 -3
- chia/consensus/make_sub_epoch_summary.py +8 -7
- chia/consensus/multiprocess_validation.py +31 -20
- chia/consensus/pos_quality.py +6 -23
- chia/consensus/pot_iterations.py +17 -44
- chia/consensus/signage_point.py +4 -5
- chia/consensus/vdf_info_computation.py +2 -4
- chia/daemon/client.py +8 -8
- chia/daemon/keychain_proxy.py +31 -37
- chia/daemon/server.py +32 -33
- chia/daemon/windows_signal.py +4 -3
- chia/data_layer/data_layer.py +86 -77
- chia/data_layer/data_layer_rpc_api.py +9 -9
- chia/data_layer/data_layer_rpc_client.py +13 -15
- chia/data_layer/data_layer_server.py +3 -3
- chia/data_layer/data_layer_util.py +14 -14
- chia/data_layer/data_layer_wallet.py +94 -101
- chia/data_layer/data_store.py +50 -50
- chia/data_layer/dl_wallet_store.py +9 -12
- chia/data_layer/download_data.py +8 -9
- chia/data_layer/s3_plugin_service.py +5 -9
- chia/data_layer/start_data_layer.py +5 -5
- chia/farmer/farmer.py +31 -31
- chia/farmer/farmer_api.py +45 -33
- chia/farmer/farmer_rpc_api.py +5 -4
- chia/farmer/farmer_rpc_client.py +6 -6
- chia/farmer/start_farmer.py +6 -6
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +238 -224
- chia/full_node/full_node_api.py +193 -150
- chia/full_node/full_node_rpc_api.py +53 -31
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hint_management.py +2 -2
- chia/full_node/mempool.py +17 -19
- chia/full_node/mempool_manager.py +89 -42
- chia/full_node/pending_tx_cache.py +2 -3
- chia/full_node/start_full_node.py +5 -5
- chia/full_node/sync_store.py +3 -4
- chia/full_node/tx_processing_queue.py +34 -13
- chia/full_node/weight_proof.py +61 -48
- chia/harvester/harvester.py +25 -24
- chia/harvester/harvester_api.py +61 -38
- chia/harvester/harvester_rpc_api.py +10 -10
- chia/harvester/start_harvester.py +4 -4
- chia/introducer/introducer.py +3 -3
- chia/introducer/introducer_api.py +6 -4
- chia/introducer/start_introducer.py +4 -4
- chia/legacy/keyring.py +3 -3
- chia/plot_sync/delta.py +1 -2
- chia/plot_sync/receiver.py +20 -17
- chia/plot_sync/sender.py +15 -10
- chia/plotters/bladebit.py +7 -7
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +4 -4
- chia/plotters/plotters.py +4 -4
- chia/plotters/plotters_util.py +3 -3
- chia/plotting/cache.py +20 -14
- chia/plotting/check_plots.py +26 -35
- chia/plotting/create_plots.py +22 -23
- chia/plotting/manager.py +21 -14
- chia/plotting/prover.py +59 -42
- chia/plotting/util.py +16 -16
- chia/pools/pool_config.py +2 -1
- chia/pools/pool_puzzles.py +11 -12
- chia/pools/pool_wallet.py +34 -57
- chia/pools/pool_wallet_info.py +39 -10
- chia/protocols/farmer_protocol.py +8 -9
- chia/protocols/fee_estimate.py +3 -4
- chia/protocols/full_node_protocol.py +3 -4
- chia/protocols/harvester_protocol.py +27 -15
- chia/protocols/outbound_message.py +3 -3
- chia/protocols/pool_protocol.py +8 -9
- chia/protocols/shared_protocol.py +1 -2
- chia/protocols/solver_protocol.py +9 -2
- chia/protocols/timelord_protocol.py +4 -7
- chia/protocols/wallet_protocol.py +11 -12
- chia/rpc/rpc_client.py +9 -9
- chia/rpc/rpc_server.py +17 -17
- chia/rpc/util.py +2 -2
- chia/seeder/crawler.py +8 -8
- chia/seeder/crawler_api.py +21 -27
- chia/seeder/crawler_rpc_api.py +2 -2
- chia/seeder/dns_server.py +21 -21
- chia/seeder/start_crawler.py +4 -4
- chia/server/address_manager.py +15 -16
- chia/server/api_protocol.py +11 -11
- chia/server/chia_policy.py +46 -26
- chia/server/introducer_peers.py +2 -3
- chia/server/node_discovery.py +19 -19
- chia/server/rate_limit_numbers.py +4 -5
- chia/server/rate_limits.py +4 -4
- chia/server/resolve_peer_info.py +4 -4
- chia/server/server.py +49 -52
- chia/server/signal_handlers.py +6 -6
- chia/server/start_service.py +17 -17
- chia/server/upnp.py +4 -6
- chia/server/ws_connection.py +52 -37
- chia/simulator/add_blocks_in_batches.py +1 -3
- chia/simulator/block_tools.py +312 -200
- chia/simulator/full_node_simulator.py +56 -35
- chia/simulator/keyring.py +2 -3
- chia/simulator/setup_services.py +15 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +3 -5
- chia/util/inline_executor.py +2 -1
- chia/util/ip_address.py +1 -2
- chia/util/keychain.py +25 -27
- chia/util/keyring_wrapper.py +18 -19
- chia/util/lock.py +3 -4
- chia/util/log_exceptions.py +1 -2
- chia/util/lru_cache.py +2 -2
- chia/util/network.py +6 -6
- chia/util/path.py +2 -3
- chia/util/priority_mutex.py +2 -2
- chia/util/profiler.py +1 -2
- chia/util/safe_cancel_task.py +1 -2
- chia/util/streamable.py +22 -8
- chia/util/task_referencer.py +1 -1
- chia/util/timing.py +3 -3
- chia/util/virtual_project_analysis.py +6 -5
- chia/util/ws_message.py +2 -2
- chia/wallet/cat_wallet/cat_info.py +3 -4
- chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
- chia/wallet/cat_wallet/cat_utils.py +3 -4
- chia/wallet/cat_wallet/cat_wallet.py +61 -83
- chia/wallet/cat_wallet/lineage_store.py +3 -4
- chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
- chia/wallet/coin_selection.py +9 -10
- chia/wallet/conditions.py +120 -105
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
- chia/wallet/derivation_record.py +1 -2
- chia/wallet/derive_keys.py +2 -4
- chia/wallet/did_wallet/did_info.py +10 -11
- chia/wallet/did_wallet/did_wallet.py +36 -82
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
- chia/wallet/driver_protocol.py +5 -7
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
- chia/wallet/nft_wallet/nft_info.py +8 -9
- chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
- chia/wallet/nft_wallet/nft_wallet.py +79 -116
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
- chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
- chia/wallet/nft_wallet/uncurry_nft.py +10 -11
- chia/wallet/notification_manager.py +3 -3
- chia/wallet/notification_store.py +44 -61
- chia/wallet/outer_puzzles.py +6 -7
- chia/wallet/puzzle_drivers.py +34 -6
- chia/wallet/puzzles/clawback/drivers.py +6 -6
- chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
- chia/wallet/puzzles/load_clvm.py +1 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
- chia/wallet/puzzles/singleton_top_layer.py +2 -3
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
- chia/wallet/puzzles/tails.py +3 -3
- chia/wallet/singleton.py +5 -7
- chia/wallet/singleton_record.py +3 -3
- chia/wallet/start_wallet.py +5 -5
- chia/wallet/trade_manager.py +37 -58
- chia/wallet/trade_record.py +4 -4
- chia/wallet/trading/offer.py +59 -46
- chia/wallet/trading/trade_store.py +8 -9
- chia/wallet/transaction_record.py +8 -8
- chia/wallet/uncurried_puzzle.py +1 -2
- chia/wallet/util/clvm_streamable.py +12 -12
- chia/wallet/util/compute_hints.py +4 -5
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +2 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/wallet/util/signing.py +85 -0
- chia/wallet/util/tx_config.py +15 -6
- chia/wallet/util/wallet_sync_utils.py +14 -16
- chia/wallet/util/wallet_types.py +2 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
- chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
- chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
- chia/wallet/vc_wallet/vc_drivers.py +27 -27
- chia/wallet/vc_wallet/vc_store.py +5 -6
- chia/wallet/vc_wallet/vc_wallet.py +33 -61
- chia/wallet/wallet.py +50 -78
- chia/wallet/wallet_action_scope.py +11 -11
- chia/wallet/wallet_blockchain.py +12 -12
- chia/wallet/wallet_coin_record.py +12 -6
- chia/wallet/wallet_coin_store.py +24 -25
- chia/wallet/wallet_interested_store.py +3 -5
- chia/wallet/wallet_nft_store.py +10 -11
- chia/wallet/wallet_node.py +53 -61
- chia/wallet/wallet_node_api.py +5 -3
- chia/wallet/wallet_protocol.py +23 -23
- chia/wallet/wallet_puzzle_store.py +15 -18
- chia/wallet/wallet_request_types.py +778 -114
- chia/wallet/wallet_retry_store.py +1 -3
- chia/wallet/wallet_rpc_api.py +572 -909
- chia/wallet/wallet_rpc_client.py +87 -279
- chia/wallet/wallet_singleton_store.py +3 -4
- chia/wallet/wallet_state_manager.py +332 -106
- chia/wallet/wallet_transaction_store.py +11 -14
- chia/wallet/wallet_user_store.py +4 -6
- chia/wallet/wallet_weight_proof_handler.py +4 -4
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
- chia/apis.py +0 -21
- chia/consensus/check_time_locks.py +0 -57
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
- chia/types/coin_record.py +0 -44
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
chia/wallet/derivation_record.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Union
|
|
5
4
|
|
|
6
5
|
from chia_rs import G1Element
|
|
7
6
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -20,7 +19,7 @@ class DerivationRecord:
|
|
|
20
19
|
|
|
21
20
|
index: uint32
|
|
22
21
|
puzzle_hash: bytes32
|
|
23
|
-
_pubkey:
|
|
22
|
+
_pubkey: G1Element | bytes
|
|
24
23
|
wallet_type: WalletType
|
|
25
24
|
wallet_id: uint32
|
|
26
25
|
hardened: bool
|
chia/wallet/derive_keys.py
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Optional
|
|
4
|
-
|
|
5
3
|
from chia_rs import AugSchemeMPL, G1Element, PrivateKey
|
|
6
4
|
from chia_rs.sized_bytes import bytes32
|
|
7
5
|
from chia_rs.sized_ints import uint32
|
|
@@ -95,7 +93,7 @@ def master_sk_to_pooling_authentication_sk(master: PrivateKey, pool_wallet_index
|
|
|
95
93
|
return _derive_path(master, [12381, 8444, 6, pool_wallet_index * 10000 + index])
|
|
96
94
|
|
|
97
95
|
|
|
98
|
-
def find_owner_sk(all_sks: list[PrivateKey], owner_pk: G1Element) ->
|
|
96
|
+
def find_owner_sk(all_sks: list[PrivateKey], owner_pk: G1Element) -> tuple[PrivateKey, uint32] | None:
|
|
99
97
|
for pool_wallet_index in range(MAX_POOL_WALLETS):
|
|
100
98
|
for sk in all_sks:
|
|
101
99
|
try_owner_sk = master_sk_to_singleton_owner_sk(sk, uint32(pool_wallet_index))
|
|
@@ -104,7 +102,7 @@ def find_owner_sk(all_sks: list[PrivateKey], owner_pk: G1Element) -> Optional[tu
|
|
|
104
102
|
return None
|
|
105
103
|
|
|
106
104
|
|
|
107
|
-
def find_authentication_sk(all_sks: list[PrivateKey], owner_pk: G1Element) ->
|
|
105
|
+
def find_authentication_sk(all_sks: list[PrivateKey], owner_pk: G1Element) -> PrivateKey | None:
|
|
108
106
|
# NOTE: might need to increase this if using a large number of wallets, or have switched authentication keys
|
|
109
107
|
# many times.
|
|
110
108
|
for pool_wallet_index in range(MAX_POOL_WALLETS):
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
from chia_rs import CoinState
|
|
7
6
|
from chia_rs.sized_bytes import bytes32
|
|
8
7
|
from chia_rs.sized_ints import uint16, uint64
|
|
9
8
|
|
|
10
9
|
from chia.types.blockchain_format.coin import Coin
|
|
11
|
-
from chia.types.blockchain_format.program import
|
|
10
|
+
from chia.types.blockchain_format.program import Program
|
|
12
11
|
from chia.util.streamable import Streamable, streamable
|
|
13
12
|
from chia.wallet.lineage_proof import LineageProof
|
|
14
13
|
from chia.wallet.util.curry_and_treehash import NIL_TREEHASH
|
|
@@ -16,7 +15,7 @@ from chia.wallet.util.curry_and_treehash import NIL_TREEHASH
|
|
|
16
15
|
|
|
17
16
|
def did_recovery_is_nil(recovery_program: Program) -> bool:
|
|
18
17
|
# cannot use set as not hashable
|
|
19
|
-
if recovery_program in (NIL, NIL_TREEHASH): # noqa: PLR6201
|
|
18
|
+
if recovery_program in (Program.NIL, NIL_TREEHASH): # noqa: PLR6201
|
|
20
19
|
return True
|
|
21
20
|
else:
|
|
22
21
|
return False
|
|
@@ -25,14 +24,14 @@ def did_recovery_is_nil(recovery_program: Program) -> bool:
|
|
|
25
24
|
@streamable
|
|
26
25
|
@dataclass(frozen=True)
|
|
27
26
|
class DIDInfo(Streamable):
|
|
28
|
-
origin_coin:
|
|
27
|
+
origin_coin: Coin | None # Coin ID of this coin is our DID
|
|
29
28
|
backup_ids: list[bytes32]
|
|
30
29
|
num_of_backup_ids_needed: uint64
|
|
31
|
-
parent_info: list[tuple[bytes32,
|
|
32
|
-
current_inner:
|
|
33
|
-
temp_coin:
|
|
34
|
-
temp_puzhash:
|
|
35
|
-
temp_pubkey:
|
|
30
|
+
parent_info: list[tuple[bytes32, LineageProof | None]] # {coin.name(): LineageProof}
|
|
31
|
+
current_inner: Program | None # represents a Program as bytes
|
|
32
|
+
temp_coin: Coin | None # partially recovered wallet uses these to hold info
|
|
33
|
+
temp_puzhash: bytes32 | None
|
|
34
|
+
temp_pubkey: bytes | None
|
|
36
35
|
sent_recovery_transaction: bool
|
|
37
36
|
metadata: str # JSON of the user defined metadata
|
|
38
37
|
|
|
@@ -41,9 +40,9 @@ class DIDInfo(Streamable):
|
|
|
41
40
|
@dataclass(frozen=True)
|
|
42
41
|
class DIDCoinData(Streamable):
|
|
43
42
|
p2_puzzle: Program
|
|
44
|
-
recovery_list_hash:
|
|
43
|
+
recovery_list_hash: bytes32 | None
|
|
45
44
|
num_verification: uint16
|
|
46
45
|
singleton_struct: Program
|
|
47
46
|
metadata: Program
|
|
48
|
-
inner_puzzle:
|
|
47
|
+
inner_puzzle: Program | None
|
|
49
48
|
coin_state: CoinState
|
|
@@ -5,7 +5,7 @@ import json
|
|
|
5
5
|
import logging
|
|
6
6
|
import re
|
|
7
7
|
import time
|
|
8
|
-
from typing import TYPE_CHECKING, Any, ClassVar,
|
|
8
|
+
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
|
9
9
|
|
|
10
10
|
from chia_rs import AugSchemeMPL, CoinSpend, CoinState, G1Element, G2Element
|
|
11
11
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -16,14 +16,12 @@ from chia.server.ws_connection import WSChiaConnection
|
|
|
16
16
|
from chia.types.blockchain_format.coin import Coin
|
|
17
17
|
from chia.types.blockchain_format.program import Program
|
|
18
18
|
from chia.types.coin_spend import make_spend
|
|
19
|
-
from chia.types.signing_mode import CHIP_0002_SIGN_MESSAGE_PREFIX, SigningMode
|
|
20
19
|
from chia.wallet.conditions import (
|
|
21
20
|
AssertCoinAnnouncement,
|
|
22
21
|
Condition,
|
|
23
22
|
ConditionValidTimes,
|
|
24
23
|
CreateCoin,
|
|
25
24
|
CreateCoinAnnouncement,
|
|
26
|
-
parse_timelock_info,
|
|
27
25
|
)
|
|
28
26
|
from chia.wallet.derivation_record import DerivationRecord
|
|
29
27
|
from chia.wallet.did_wallet import did_wallet_puzzles
|
|
@@ -31,8 +29,6 @@ from chia.wallet.did_wallet.did_info import DIDCoinData, DIDInfo, did_recovery_i
|
|
|
31
29
|
from chia.wallet.did_wallet.did_wallet_puzzles import match_did_puzzle, uncurry_innerpuz
|
|
32
30
|
from chia.wallet.lineage_proof import LineageProof
|
|
33
31
|
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import (
|
|
34
|
-
DEFAULT_HIDDEN_PUZZLE_HASH,
|
|
35
|
-
calculate_synthetic_secret_key,
|
|
36
32
|
puzzle_for_pk,
|
|
37
33
|
puzzle_hash_for_pk,
|
|
38
34
|
)
|
|
@@ -44,7 +40,6 @@ from chia.wallet.singleton import (
|
|
|
44
40
|
)
|
|
45
41
|
from chia.wallet.transaction_record import TransactionRecord
|
|
46
42
|
from chia.wallet.uncurried_puzzle import uncurry_puzzle
|
|
47
|
-
from chia.wallet.util.compute_memos import compute_memos
|
|
48
43
|
from chia.wallet.util.curry_and_treehash import NIL_TREEHASH, shatree_int, shatree_pair
|
|
49
44
|
from chia.wallet.util.transaction_type import TransactionType
|
|
50
45
|
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
@@ -68,8 +63,8 @@ class DIDWallet:
|
|
|
68
63
|
wallet_info: WalletInfo
|
|
69
64
|
did_info: DIDInfo
|
|
70
65
|
standard_wallet: Wallet
|
|
71
|
-
base_puzzle_program:
|
|
72
|
-
base_inner_puzzle_hash:
|
|
66
|
+
base_puzzle_program: bytes | None
|
|
67
|
+
base_inner_puzzle_hash: bytes32 | None
|
|
73
68
|
wallet_id: int
|
|
74
69
|
|
|
75
70
|
@staticmethod
|
|
@@ -79,7 +74,7 @@ class DIDWallet:
|
|
|
79
74
|
amount: uint64,
|
|
80
75
|
action_scope: WalletActionScope,
|
|
81
76
|
metadata: dict[str, str] = {},
|
|
82
|
-
name:
|
|
77
|
+
name: str | None = None,
|
|
83
78
|
fee: uint64 = uint64(0),
|
|
84
79
|
extra_conditions: tuple[Condition, ...] = tuple(),
|
|
85
80
|
):
|
|
@@ -149,7 +144,7 @@ class DIDWallet:
|
|
|
149
144
|
wallet_state_manager: Any,
|
|
150
145
|
wallet: Wallet,
|
|
151
146
|
backup_data: str,
|
|
152
|
-
name:
|
|
147
|
+
name: str | None = None,
|
|
153
148
|
):
|
|
154
149
|
"""
|
|
155
150
|
Create a DID wallet from a backup file
|
|
@@ -191,7 +186,7 @@ class DIDWallet:
|
|
|
191
186
|
launch_coin: Coin,
|
|
192
187
|
inner_puzzle: Program,
|
|
193
188
|
coin_spend: CoinSpend,
|
|
194
|
-
name:
|
|
189
|
+
name: str | None = None,
|
|
195
190
|
):
|
|
196
191
|
"""
|
|
197
192
|
Create a DID wallet from a transfer
|
|
@@ -264,7 +259,7 @@ class DIDWallet:
|
|
|
264
259
|
wallet_state_manager: Any,
|
|
265
260
|
wallet: Wallet,
|
|
266
261
|
wallet_info: WalletInfo,
|
|
267
|
-
name:
|
|
262
|
+
name: str | None = None,
|
|
268
263
|
):
|
|
269
264
|
"""
|
|
270
265
|
Create a DID wallet based on the local database
|
|
@@ -362,7 +357,7 @@ class DIDWallet:
|
|
|
362
357
|
# We can improve this interface by passing in the CoinSpend, as well
|
|
363
358
|
# We need to change DID Wallet coin_added to expect p2 spends as well as recovery spends,
|
|
364
359
|
# or only call it in the recovery spend case
|
|
365
|
-
async def coin_added(self, coin: Coin, _: uint32, peer: WSChiaConnection, parent_coin_data:
|
|
360
|
+
async def coin_added(self, coin: Coin, _: uint32, peer: WSChiaConnection, parent_coin_data: DIDCoinData | None):
|
|
366
361
|
"""Notification from wallet state manager that wallet has been received."""
|
|
367
362
|
parent = self.get_parent_for_coin(coin)
|
|
368
363
|
if parent_coin_data is not None:
|
|
@@ -381,9 +376,7 @@ class DIDWallet:
|
|
|
381
376
|
p2_puzzle, recovery_list_hash, num_verification, singleton_struct, metadata = did_curried_args
|
|
382
377
|
did_data = DIDCoinData(
|
|
383
378
|
p2_puzzle=p2_puzzle,
|
|
384
|
-
recovery_list_hash=bytes32(recovery_list_hash.as_atom())
|
|
385
|
-
if recovery_list_hash != Program.to(None)
|
|
386
|
-
else None,
|
|
379
|
+
recovery_list_hash=bytes32(recovery_list_hash.as_atom()) if recovery_list_hash != Program.NIL else None,
|
|
387
380
|
num_verification=uint16(num_verification.as_int()),
|
|
388
381
|
singleton_struct=singleton_struct,
|
|
389
382
|
metadata=metadata,
|
|
@@ -649,25 +642,16 @@ class DIDWallet:
|
|
|
649
642
|
extra_conditions=(AssertCoinAnnouncement(asserted_id=coin_name, asserted_msg=coin_name),),
|
|
650
643
|
)
|
|
651
644
|
to_ph = await action_scope.get_puzzle_hash(self.wallet_state_manager, override_reuse_puzhash_with=True)
|
|
652
|
-
did_record =
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
to_puzzle_hash=to_ph,
|
|
656
|
-
to_address=self.wallet_state_manager.encode_puzzle_hash(to_ph),
|
|
645
|
+
did_record = self.wallet_state_manager.new_outgoing_transaction(
|
|
646
|
+
wallet_id=self.id(),
|
|
647
|
+
puzzle_hash=to_ph,
|
|
657
648
|
amount=uint64(coin.amount),
|
|
658
|
-
|
|
659
|
-
confirmed=False,
|
|
660
|
-
sent=uint32(0),
|
|
649
|
+
fee=uint64(0),
|
|
661
650
|
spend_bundle=spend_bundle,
|
|
662
651
|
additions=spend_bundle.additions(),
|
|
663
652
|
removals=spend_bundle.removals(),
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
trade_id=None,
|
|
667
|
-
type=uint32(TransactionType.OUTGOING_TX.value),
|
|
668
|
-
name=bytes32.secret(),
|
|
669
|
-
memos=compute_memos(spend_bundle),
|
|
670
|
-
valid_times=parse_timelock_info(extra_conditions),
|
|
653
|
+
name=spend_bundle.name(),
|
|
654
|
+
extra_conditions=extra_conditions,
|
|
671
655
|
)
|
|
672
656
|
|
|
673
657
|
async with action_scope.use() as interface:
|
|
@@ -735,25 +719,16 @@ class DIDWallet:
|
|
|
735
719
|
extra_conditions=(AssertCoinAnnouncement(asserted_id=coin_name, asserted_msg=coin_name),),
|
|
736
720
|
)
|
|
737
721
|
to_ph = await action_scope.get_puzzle_hash(self.wallet_state_manager, override_reuse_puzhash_with=True)
|
|
738
|
-
did_record =
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
to_puzzle_hash=to_ph,
|
|
742
|
-
to_address=self.wallet_state_manager.encode_puzzle_hash(to_ph),
|
|
722
|
+
did_record = self.wallet_state_manager.new_outgoing_transaction(
|
|
723
|
+
wallet_id=self.id(),
|
|
724
|
+
puzzle_hash=to_ph,
|
|
743
725
|
amount=uint64(coin.amount),
|
|
744
|
-
|
|
745
|
-
confirmed=False,
|
|
746
|
-
sent=uint32(0),
|
|
726
|
+
fee=fee,
|
|
747
727
|
spend_bundle=spend_bundle,
|
|
748
728
|
additions=spend_bundle.additions(),
|
|
749
729
|
removals=spend_bundle.removals(),
|
|
750
|
-
wallet_id=self.wallet_info.id,
|
|
751
|
-
sent_to=[],
|
|
752
|
-
trade_id=None,
|
|
753
|
-
type=uint32(TransactionType.OUTGOING_TX.value),
|
|
754
730
|
name=spend_bundle.name(),
|
|
755
|
-
|
|
756
|
-
valid_times=parse_timelock_info(extra_conditions),
|
|
731
|
+
extra_conditions=extra_conditions,
|
|
757
732
|
)
|
|
758
733
|
|
|
759
734
|
async with action_scope.use() as interface:
|
|
@@ -815,25 +790,16 @@ class DIDWallet:
|
|
|
815
790
|
)
|
|
816
791
|
list_of_coinspends = [make_spend(coin, full_puzzle, fullsol)]
|
|
817
792
|
unsigned_spend_bundle = WalletSpendBundle(list_of_coinspends, G2Element())
|
|
818
|
-
tx =
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
to_puzzle_hash=p2_ph,
|
|
822
|
-
to_address=self.wallet_state_manager.encode_puzzle_hash(p2_ph),
|
|
793
|
+
tx = self.wallet_state_manager.new_outgoing_transaction(
|
|
794
|
+
wallet_id=self.id(),
|
|
795
|
+
puzzle_hash=p2_ph,
|
|
823
796
|
amount=uint64(coin.amount),
|
|
824
|
-
|
|
825
|
-
confirmed=False,
|
|
826
|
-
sent=uint32(0),
|
|
797
|
+
fee=uint64(0),
|
|
827
798
|
spend_bundle=unsigned_spend_bundle,
|
|
828
799
|
additions=unsigned_spend_bundle.additions(),
|
|
829
800
|
removals=[coin],
|
|
830
|
-
wallet_id=self.id(),
|
|
831
|
-
sent_to=[],
|
|
832
|
-
trade_id=None,
|
|
833
|
-
type=uint32(TransactionType.OUTGOING_TX.value),
|
|
834
801
|
name=unsigned_spend_bundle.name(),
|
|
835
|
-
|
|
836
|
-
valid_times=parse_timelock_info(extra_conditions),
|
|
802
|
+
extra_conditions=extra_conditions,
|
|
837
803
|
)
|
|
838
804
|
async with action_scope.use() as interface:
|
|
839
805
|
interface.side_effects.transactions.append(tx)
|
|
@@ -841,8 +807,8 @@ class DIDWallet:
|
|
|
841
807
|
async def get_did_innerpuz(
|
|
842
808
|
self,
|
|
843
809
|
action_scope: WalletActionScope,
|
|
844
|
-
origin_id:
|
|
845
|
-
override_reuse_puzhash_with:
|
|
810
|
+
origin_id: bytes32 | None = None,
|
|
811
|
+
override_reuse_puzhash_with: bool | None = None,
|
|
846
812
|
) -> Program:
|
|
847
813
|
if self.did_info.origin_coin is not None:
|
|
848
814
|
launcher_id = self.did_info.origin_coin.name()
|
|
@@ -904,7 +870,7 @@ class DIDWallet:
|
|
|
904
870
|
)
|
|
905
871
|
return inner_puzzle
|
|
906
872
|
|
|
907
|
-
def reset_recovery_list(self) ->
|
|
873
|
+
def reset_recovery_list(self) -> Program | None:
|
|
908
874
|
if self.did_info.current_inner is None:
|
|
909
875
|
return None
|
|
910
876
|
|
|
@@ -921,7 +887,7 @@ class DIDWallet:
|
|
|
921
887
|
|
|
922
888
|
return og_recovery_list_hash
|
|
923
889
|
|
|
924
|
-
def get_parent_for_coin(self, coin) ->
|
|
890
|
+
def get_parent_for_coin(self, coin) -> LineageProof | None:
|
|
925
891
|
parent_info = None
|
|
926
892
|
for name, ccparent in self.did_info.parent_info:
|
|
927
893
|
if name == coin.parent_coin_info:
|
|
@@ -929,27 +895,15 @@ class DIDWallet:
|
|
|
929
895
|
|
|
930
896
|
return parent_info
|
|
931
897
|
|
|
932
|
-
async def
|
|
898
|
+
async def current_p2_puzzle_hash(self) -> bytes32:
|
|
933
899
|
if self.did_info.current_inner is None:
|
|
934
900
|
raise ValueError("Missing DID inner puzzle.")
|
|
935
901
|
puzzle_args = did_wallet_puzzles.uncurry_innerpuz(self.did_info.current_inner)
|
|
936
902
|
if puzzle_args is not None:
|
|
937
903
|
p2_puzzle, _, _, _, _ = puzzle_args
|
|
938
|
-
|
|
939
|
-
private = await self.wallet_state_manager.get_private_key(puzzle_hash)
|
|
940
|
-
synthetic_secret_key = calculate_synthetic_secret_key(private, DEFAULT_HIDDEN_PUZZLE_HASH)
|
|
941
|
-
synthetic_pk = synthetic_secret_key.get_g1()
|
|
942
|
-
if mode == SigningMode.CHIP_0002_HEX_INPUT:
|
|
943
|
-
hex_message: bytes = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, bytes.fromhex(message))).get_tree_hash()
|
|
944
|
-
elif mode == SigningMode.BLS_MESSAGE_AUGMENTATION_UTF8_INPUT:
|
|
945
|
-
hex_message = bytes(message, "utf-8")
|
|
946
|
-
elif mode == SigningMode.BLS_MESSAGE_AUGMENTATION_HEX_INPUT:
|
|
947
|
-
hex_message = bytes.fromhex(message)
|
|
948
|
-
else:
|
|
949
|
-
hex_message = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, message)).get_tree_hash()
|
|
950
|
-
return synthetic_pk, AugSchemeMPL.sign(synthetic_secret_key, hex_message)
|
|
904
|
+
return p2_puzzle.get_tree_hash()
|
|
951
905
|
else:
|
|
952
|
-
raise ValueError("Invalid inner
|
|
906
|
+
raise ValueError("Invalid DID inner puzzle.")
|
|
953
907
|
|
|
954
908
|
async def generate_new_decentralised_id(
|
|
955
909
|
self,
|
|
@@ -1084,14 +1038,14 @@ class DIDWallet:
|
|
|
1084
1038
|
)
|
|
1085
1039
|
return spendable_am
|
|
1086
1040
|
|
|
1087
|
-
async def get_max_send_amount(self, records:
|
|
1041
|
+
async def get_max_send_amount(self, records: set[WalletCoinRecord] | None = None):
|
|
1088
1042
|
spendable: list[WalletCoinRecord] = list(
|
|
1089
1043
|
await self.wallet_state_manager.get_spendable_coins_for_wallet(self.id(), records)
|
|
1090
1044
|
)
|
|
1091
1045
|
max_send_amount = sum(cr.coin.amount for cr in spendable)
|
|
1092
1046
|
return max_send_amount
|
|
1093
1047
|
|
|
1094
|
-
async def add_parent(self, name: bytes32, parent:
|
|
1048
|
+
async def add_parent(self, name: bytes32, parent: LineageProof | None):
|
|
1095
1049
|
self.log.info(f"Adding parent {name}: {parent}")
|
|
1096
1050
|
current_list = self.did_info.parent_info.copy()
|
|
1097
1051
|
current_list.append((name, parent))
|
|
@@ -1234,8 +1188,8 @@ class DIDWallet:
|
|
|
1234
1188
|
puzzle_hashes: list[bytes32],
|
|
1235
1189
|
action_scope: WalletActionScope,
|
|
1236
1190
|
fee: uint64 = uint64(0),
|
|
1237
|
-
coins:
|
|
1238
|
-
memos:
|
|
1191
|
+
coins: set[Coin] | None = None,
|
|
1192
|
+
memos: list[list[bytes]] | None = None,
|
|
1239
1193
|
extra_conditions: tuple[Condition, ...] = tuple(),
|
|
1240
1194
|
**kwargs: Unpack[GSTOptionalArgs],
|
|
1241
1195
|
) -> None:
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from collections.abc import Iterator
|
|
4
|
-
from typing import Optional, Union
|
|
5
4
|
|
|
6
5
|
from chia_puzzles_py.programs import DID_INNERPUZ, DID_INNERPUZ_HASH, NFT_INTERMEDIATE_LAUNCHER
|
|
7
6
|
from chia_rs import CoinSpend, G1Element
|
|
@@ -36,12 +35,12 @@ INTERMEDIATE_LAUNCHER_MOD = Program.from_bytes(NFT_INTERMEDIATE_LAUNCHER)
|
|
|
36
35
|
|
|
37
36
|
|
|
38
37
|
def create_innerpuz(
|
|
39
|
-
p2_puzzle_or_hash:
|
|
38
|
+
p2_puzzle_or_hash: Program | bytes32,
|
|
40
39
|
recovery_list: list[bytes32],
|
|
41
40
|
num_of_backup_ids_needed: uint64,
|
|
42
41
|
launcher_id: bytes32,
|
|
43
42
|
metadata: Program = Program.to([]),
|
|
44
|
-
recovery_list_hash:
|
|
43
|
+
recovery_list_hash: Program | None = None,
|
|
45
44
|
) -> Program:
|
|
46
45
|
"""
|
|
47
46
|
Create DID inner puzzle
|
|
@@ -55,7 +54,7 @@ def create_innerpuz(
|
|
|
55
54
|
Note: Receiving a standard P2 puzzle hash wouldn't calculate a valid puzzle, but
|
|
56
55
|
that can be useful if calling `.get_tree_hash_precalc()` on it.
|
|
57
56
|
"""
|
|
58
|
-
backup_ids_hash:
|
|
57
|
+
backup_ids_hash: Program | bytes32 = Program.to(recovery_list).get_tree_hash()
|
|
59
58
|
if recovery_list_hash is not None:
|
|
60
59
|
backup_ids_hash = recovery_list_hash
|
|
61
60
|
singleton_struct = Program.to((SINGLETON_TOP_LAYER_MOD_HASH, (launcher_id, SINGLETON_LAUNCHER_PUZZLE_HASH)))
|
|
@@ -69,8 +68,8 @@ def get_inner_puzhash_by_p2(
|
|
|
69
68
|
num_of_backup_ids_needed: uint64,
|
|
70
69
|
launcher_id: bytes32,
|
|
71
70
|
metadata: Program = Program.to([]),
|
|
72
|
-
recovery_list:
|
|
73
|
-
recovery_list_hash:
|
|
71
|
+
recovery_list: list[bytes32] | None = None,
|
|
72
|
+
recovery_list_hash: Program | None = None,
|
|
74
73
|
) -> bytes32:
|
|
75
74
|
"""
|
|
76
75
|
Calculate DID inner puzzle hash based on a P2 puzzle hash
|
|
@@ -118,7 +117,7 @@ def is_did_innerpuz(inner_f: Program) -> bool:
|
|
|
118
117
|
return inner_f == DID_INNERPUZ_MOD
|
|
119
118
|
|
|
120
119
|
|
|
121
|
-
def uncurry_innerpuz(puzzle: Program) ->
|
|
120
|
+
def uncurry_innerpuz(puzzle: Program) -> tuple[Program, Program, Program, Program, Program] | None:
|
|
122
121
|
"""
|
|
123
122
|
Uncurry a DID inner puzzle
|
|
124
123
|
:param puzzle: DID puzzle
|
|
@@ -172,7 +171,7 @@ def create_spend_for_message(
|
|
|
172
171
|
return make_spend(coin, puzzle, solution)
|
|
173
172
|
|
|
174
173
|
|
|
175
|
-
def match_did_puzzle(mod: Program, curried_args: Program) ->
|
|
174
|
+
def match_did_puzzle(mod: Program, curried_args: Program) -> Iterator[Program] | None:
|
|
176
175
|
"""
|
|
177
176
|
Given a puzzle test if it's a DID, if it is, return the curried arguments
|
|
178
177
|
:param puzzle: Puzzle
|
chia/wallet/driver_protocol.py
CHANGED
|
@@ -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 typing_extensions import Protocol
|
|
7
5
|
|
|
@@ -11,15 +9,15 @@ from chia.wallet.uncurried_puzzle import UncurriedPuzzle
|
|
|
11
9
|
|
|
12
10
|
|
|
13
11
|
class DriverProtocol(Protocol):
|
|
14
|
-
def match(self, puzzle: UncurriedPuzzle) ->
|
|
12
|
+
def match(self, puzzle: UncurriedPuzzle) -> PuzzleInfo | None: ...
|
|
15
13
|
|
|
16
14
|
def get_inner_puzzle(
|
|
17
|
-
self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution:
|
|
18
|
-
) ->
|
|
15
|
+
self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution: Program | None = ...
|
|
16
|
+
) -> Program | None: ...
|
|
19
17
|
|
|
20
|
-
def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) ->
|
|
18
|
+
def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) -> Program | None: ...
|
|
21
19
|
|
|
22
|
-
def asset_id(self, constructor: PuzzleInfo) ->
|
|
20
|
+
def asset_id(self, constructor: PuzzleInfo) -> bytes32 | None: ...
|
|
23
21
|
|
|
24
22
|
def construct(self, constructor: PuzzleInfo, inner_puzzle: Program) -> Program: ...
|
|
25
23
|
|
chia/wallet/lineage_proof.py
CHANGED
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from enum import Enum
|
|
5
|
-
from typing import Any
|
|
5
|
+
from typing import Any
|
|
6
6
|
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
8
8
|
from chia_rs.sized_ints import uint64
|
|
@@ -20,9 +20,9 @@ class LineageProofField(Enum):
|
|
|
20
20
|
@streamable
|
|
21
21
|
@dataclass(frozen=True)
|
|
22
22
|
class LineageProof(Streamable):
|
|
23
|
-
parent_name:
|
|
24
|
-
inner_puzzle_hash:
|
|
25
|
-
amount:
|
|
23
|
+
parent_name: bytes32 | None = None
|
|
24
|
+
inner_puzzle_hash: bytes32 | None = None
|
|
25
|
+
amount: uint64 | None = None
|
|
26
26
|
|
|
27
27
|
@classmethod
|
|
28
28
|
def from_program(cls, program: Program, fields: list[LineageProofField]) -> LineageProof:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from collections.abc import Callable
|
|
3
4
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Callable, Optional
|
|
5
5
|
|
|
6
6
|
from chia_rs.sized_bytes import bytes32
|
|
7
7
|
|
|
@@ -30,13 +30,13 @@ def solution_for_metadata_layer(inner_solution: Program) -> Program:
|
|
|
30
30
|
|
|
31
31
|
@dataclass(frozen=True)
|
|
32
32
|
class MetadataOuterPuzzle:
|
|
33
|
-
_match: Callable[[UncurriedPuzzle],
|
|
33
|
+
_match: Callable[[UncurriedPuzzle], PuzzleInfo | None]
|
|
34
34
|
_construct: Callable[[PuzzleInfo, Program], Program]
|
|
35
35
|
_solve: Callable[[PuzzleInfo, Solver, Program, Program], Program]
|
|
36
|
-
_get_inner_puzzle: Callable[[PuzzleInfo, UncurriedPuzzle,
|
|
37
|
-
_get_inner_solution: Callable[[PuzzleInfo, Program],
|
|
36
|
+
_get_inner_puzzle: Callable[[PuzzleInfo, UncurriedPuzzle, Program | None], Program | None]
|
|
37
|
+
_get_inner_solution: Callable[[PuzzleInfo, Program], Program | None]
|
|
38
38
|
|
|
39
|
-
def match(self, puzzle: UncurriedPuzzle) ->
|
|
39
|
+
def match(self, puzzle: UncurriedPuzzle) -> PuzzleInfo | None:
|
|
40
40
|
matched, curried_args = match_metadata_layer_puzzle(puzzle)
|
|
41
41
|
if matched:
|
|
42
42
|
_, metadata, updater_hash, inner_puzzle = curried_args
|
|
@@ -53,7 +53,7 @@ class MetadataOuterPuzzle:
|
|
|
53
53
|
return None
|
|
54
54
|
return None # Uncomment above when match_metadata_layer_puzzle works
|
|
55
55
|
|
|
56
|
-
def asset_id(self, constructor: PuzzleInfo) ->
|
|
56
|
+
def asset_id(self, constructor: PuzzleInfo) -> bytes32 | None:
|
|
57
57
|
return bytes32(constructor["updater_hash"])
|
|
58
58
|
|
|
59
59
|
def construct(self, constructor: PuzzleInfo, inner_puzzle: Program) -> Program:
|
|
@@ -63,25 +63,25 @@ class MetadataOuterPuzzle:
|
|
|
63
63
|
return puzzle_for_metadata_layer(constructor["metadata"], constructor["updater_hash"], inner_puzzle)
|
|
64
64
|
|
|
65
65
|
def get_inner_puzzle(
|
|
66
|
-
self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution:
|
|
67
|
-
) ->
|
|
66
|
+
self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution: Program | None = None
|
|
67
|
+
) -> Program | None:
|
|
68
68
|
matched, curried_args = match_metadata_layer_puzzle(puzzle_reveal)
|
|
69
69
|
if matched:
|
|
70
70
|
_, _, _, inner_puzzle = curried_args
|
|
71
71
|
also = constructor.also()
|
|
72
72
|
if also is not None:
|
|
73
|
-
deep_inner_puzzle:
|
|
73
|
+
deep_inner_puzzle: Program | None = self._get_inner_puzzle(also, uncurry_puzzle(inner_puzzle), None)
|
|
74
74
|
return deep_inner_puzzle
|
|
75
75
|
else:
|
|
76
76
|
return inner_puzzle
|
|
77
77
|
else:
|
|
78
78
|
raise ValueError("This driver is not for the specified puzzle reveal")
|
|
79
79
|
|
|
80
|
-
def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) ->
|
|
80
|
+
def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) -> Program | None:
|
|
81
81
|
my_inner_solution: Program = solution.first()
|
|
82
82
|
also = constructor.also()
|
|
83
83
|
if also:
|
|
84
|
-
deep_inner_solution:
|
|
84
|
+
deep_inner_solution: Program | None = self._get_inner_solution(also, my_inner_solution)
|
|
85
85
|
return deep_inner_solution
|
|
86
86
|
else:
|
|
87
87
|
return my_inner_solution
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
from chia_rs.sized_bytes import bytes32
|
|
7
6
|
from chia_rs.sized_ints import uint16, uint32, uint64
|
|
@@ -32,13 +31,13 @@ class NFTInfo(Streamable):
|
|
|
32
31
|
nft_coin_confirmation_height: uint32
|
|
33
32
|
"""Current NFT coin confirmation height"""
|
|
34
33
|
|
|
35
|
-
owner_did:
|
|
34
|
+
owner_did: bytes32 | None
|
|
36
35
|
"""Owner DID"""
|
|
37
36
|
|
|
38
|
-
royalty_percentage:
|
|
37
|
+
royalty_percentage: uint16 | None
|
|
39
38
|
"""Percentage of the transaction fee paid to the author, e.g. 1000 = 1%"""
|
|
40
39
|
|
|
41
|
-
royalty_puzzle_hash:
|
|
40
|
+
royalty_puzzle_hash: bytes32 | None
|
|
42
41
|
"""Puzzle hash where royalty will be sent to"""
|
|
43
42
|
data_uris: list[str]
|
|
44
43
|
""" A list of content URIs"""
|
|
@@ -82,13 +81,13 @@ class NFTInfo(Streamable):
|
|
|
82
81
|
pending_transaction: bool = False
|
|
83
82
|
"""Indicate if the NFT is pending for a transaction"""
|
|
84
83
|
|
|
85
|
-
minter_did:
|
|
84
|
+
minter_did: bytes32 | None = None
|
|
86
85
|
"""DID of the NFT minter"""
|
|
87
86
|
|
|
88
87
|
launcher_puzhash: bytes32 = SINGLETON_LAUNCHER_PUZZLE_HASH
|
|
89
88
|
"""Puzzle hash of the singleton launcher in hex"""
|
|
90
89
|
|
|
91
|
-
off_chain_metadata:
|
|
90
|
+
off_chain_metadata: str | None = None
|
|
92
91
|
"""Serialized off-chain metadata"""
|
|
93
92
|
|
|
94
93
|
|
|
@@ -101,13 +100,13 @@ class NFTCoinInfo(Streamable):
|
|
|
101
100
|
"""The latest coin of the NFT"""
|
|
102
101
|
coin: Coin
|
|
103
102
|
"""NFT lineage proof"""
|
|
104
|
-
lineage_proof:
|
|
103
|
+
lineage_proof: LineageProof | None
|
|
105
104
|
"""NFT full puzzle"""
|
|
106
105
|
full_puzzle: Program
|
|
107
106
|
"""NFT minting block height"""
|
|
108
107
|
mint_height: uint32
|
|
109
108
|
"""The DID of the NFT minter"""
|
|
110
|
-
minter_did:
|
|
109
|
+
minter_did: bytes32 | None = None
|
|
111
110
|
"""The block height of the latest coin"""
|
|
112
111
|
latest_height: uint32 = uint32(0)
|
|
113
112
|
"""If the NFT is in the transaction"""
|
|
@@ -117,4 +116,4 @@ class NFTCoinInfo(Streamable):
|
|
|
117
116
|
@streamable
|
|
118
117
|
@dataclass(frozen=True)
|
|
119
118
|
class NFTWalletInfo(Streamable):
|
|
120
|
-
did_id:
|
|
119
|
+
did_id: bytes32 | None = None
|