chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__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_blockchain_transactions.py +5 -2
- 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 +66 -31
- 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 +273 -70
- chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
- 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 +198 -30
- chia/_tests/core/mempool/test_mempool.py +54 -50
- 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 +988 -854
- 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 +9 -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 +63 -60
- 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 +17 -17
- 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 +16 -15
- 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 +374 -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 +19 -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 +50 -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 +239 -223
- chia/full_node/full_node_api.py +197 -152
- chia/full_node/full_node_rpc_api.py +34 -32
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hard_fork_utils.py +44 -0
- 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 +120 -36
- 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 +4 -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 +24 -10
- 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 +142 -106
- 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.6.0rc2.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
- 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.6.0rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
|
@@ -5,7 +5,7 @@ from dataclasses import dataclass, field
|
|
|
5
5
|
from enum import Enum, IntEnum
|
|
6
6
|
from hashlib import sha256
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import TYPE_CHECKING, Any,
|
|
8
|
+
from typing import TYPE_CHECKING, Any, Union
|
|
9
9
|
|
|
10
10
|
import aiosqlite
|
|
11
11
|
from chia_rs.datalayer import ProofOfInclusion, ProofOfInclusionLayer
|
|
@@ -250,8 +250,8 @@ class InternalNode:
|
|
|
250
250
|
left_hash: bytes32
|
|
251
251
|
right_hash: bytes32
|
|
252
252
|
|
|
253
|
-
left:
|
|
254
|
-
right:
|
|
253
|
+
left: Node | None = None
|
|
254
|
+
right: Node | None = None
|
|
255
255
|
|
|
256
256
|
@classmethod
|
|
257
257
|
def from_child_nodes(cls, left: Node, right: Node) -> InternalNode:
|
|
@@ -307,7 +307,7 @@ unspecified = Unspecified.instance
|
|
|
307
307
|
@dataclass(frozen=True)
|
|
308
308
|
class Root:
|
|
309
309
|
store_id: bytes32
|
|
310
|
-
node_hash:
|
|
310
|
+
node_hash: bytes32 | None
|
|
311
311
|
generation: int
|
|
312
312
|
status: Status
|
|
313
313
|
|
|
@@ -352,7 +352,7 @@ class Root:
|
|
|
352
352
|
}
|
|
353
353
|
|
|
354
354
|
|
|
355
|
-
node_type_to_class: dict[NodeType, type[
|
|
355
|
+
node_type_to_class: dict[NodeType, type[InternalNode | TerminalNode]] = {
|
|
356
356
|
NodeType.INTERNAL: InternalNode,
|
|
357
357
|
NodeType.TERMINAL: TerminalNode,
|
|
358
358
|
}
|
|
@@ -454,7 +454,7 @@ class Layer:
|
|
|
454
454
|
class MakeOfferRequest:
|
|
455
455
|
maker: tuple[OfferStore, ...]
|
|
456
456
|
taker: tuple[OfferStore, ...]
|
|
457
|
-
fee:
|
|
457
|
+
fee: uint64 | None
|
|
458
458
|
|
|
459
459
|
@classmethod
|
|
460
460
|
def unmarshal(cls, marshalled: dict[str, Any]) -> MakeOfferRequest:
|
|
@@ -569,7 +569,7 @@ class MakeOfferResponse:
|
|
|
569
569
|
@dataclasses.dataclass(frozen=True)
|
|
570
570
|
class TakeOfferRequest:
|
|
571
571
|
offer: Offer
|
|
572
|
-
fee:
|
|
572
|
+
fee: uint64 | None
|
|
573
573
|
|
|
574
574
|
@classmethod
|
|
575
575
|
def unmarshal(cls, marshalled: dict[str, Any]) -> TakeOfferRequest:
|
|
@@ -609,8 +609,8 @@ class TakeOfferResponse:
|
|
|
609
609
|
class VerifyOfferResponse:
|
|
610
610
|
success: bool
|
|
611
611
|
valid: bool
|
|
612
|
-
error:
|
|
613
|
-
fee:
|
|
612
|
+
error: str | None = None
|
|
613
|
+
fee: uint64 | None = None
|
|
614
614
|
|
|
615
615
|
@classmethod
|
|
616
616
|
def unmarshal(cls, marshalled: dict[str, Any]) -> VerifyOfferResponse:
|
|
@@ -635,7 +635,7 @@ class CancelOfferRequest:
|
|
|
635
635
|
trade_id: bytes32
|
|
636
636
|
# cancel on chain (secure) vs. just locally
|
|
637
637
|
secure: bool
|
|
638
|
-
fee:
|
|
638
|
+
fee: uint64 | None
|
|
639
639
|
|
|
640
640
|
@classmethod
|
|
641
641
|
def unmarshal(cls, marshalled: dict[str, Any]) -> CancelOfferRequest:
|
|
@@ -691,7 +691,7 @@ class ClearPendingRootsRequest:
|
|
|
691
691
|
class ClearPendingRootsResponse:
|
|
692
692
|
success: bool
|
|
693
693
|
|
|
694
|
-
root:
|
|
694
|
+
root: Root | None
|
|
695
695
|
# store_id: bytes32
|
|
696
696
|
# node_hash: Optional[bytes32]
|
|
697
697
|
# generation: int
|
|
@@ -765,7 +765,7 @@ class KeysValuesCompressed:
|
|
|
765
765
|
keys_values_hashed: dict[bytes32, bytes32]
|
|
766
766
|
key_hash_to_length: dict[bytes32, int]
|
|
767
767
|
leaf_hash_to_length: dict[bytes32, int]
|
|
768
|
-
root_hash:
|
|
768
|
+
root_hash: bytes32 | None
|
|
769
769
|
|
|
770
770
|
|
|
771
771
|
@dataclasses.dataclass(frozen=True)
|
|
@@ -773,7 +773,7 @@ class KeysPaginationData:
|
|
|
773
773
|
total_pages: int
|
|
774
774
|
total_bytes: int
|
|
775
775
|
keys: list[bytes]
|
|
776
|
-
root_hash:
|
|
776
|
+
root_hash: bytes32 | None
|
|
777
777
|
|
|
778
778
|
|
|
779
779
|
@dataclasses.dataclass(frozen=True)
|
|
@@ -781,7 +781,7 @@ class KeysValuesPaginationData:
|
|
|
781
781
|
total_pages: int
|
|
782
782
|
total_bytes: int
|
|
783
783
|
keys_values: list[TerminalNode]
|
|
784
|
-
root_hash:
|
|
784
|
+
root_hash: bytes32 | None
|
|
785
785
|
|
|
786
786
|
|
|
787
787
|
@dataclasses.dataclass(frozen=True)
|
|
@@ -2,8 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
import logging
|
|
5
|
-
import
|
|
6
|
-
from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
|
|
5
|
+
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
|
7
6
|
|
|
8
7
|
from chia_rs import BlockRecord, CoinSpend, CoinState, G1Element, G2Element
|
|
9
8
|
from chia_rs.datalayer import ProofOfInclusion, ProofOfInclusionLayer
|
|
@@ -29,7 +28,6 @@ from chia.wallet.conditions import (
|
|
|
29
28
|
CreateCoin,
|
|
30
29
|
CreateCoinAnnouncement,
|
|
31
30
|
UnknownCondition,
|
|
32
|
-
parse_timelock_info,
|
|
33
31
|
)
|
|
34
32
|
from chia.wallet.db_wallet.db_wallet_puzzles import (
|
|
35
33
|
ACS_MU,
|
|
@@ -52,9 +50,7 @@ from chia.wallet.singleton import SINGLETON_LAUNCHER_PUZZLE, SINGLETON_LAUNCHER_
|
|
|
52
50
|
from chia.wallet.trading.offer import NotarizedPayment, Offer
|
|
53
51
|
from chia.wallet.transaction_record import TransactionRecord
|
|
54
52
|
from chia.wallet.util.compute_additions import compute_additions
|
|
55
|
-
from chia.wallet.util.compute_memos import compute_memos
|
|
56
53
|
from chia.wallet.util.merkle_utils import _simplify_merkle_proof
|
|
57
|
-
from chia.wallet.util.transaction_type import TransactionType
|
|
58
54
|
from chia.wallet.util.wallet_sync_utils import fetch_coin_spend, fetch_coin_spend_for_coin_state
|
|
59
55
|
from chia.wallet.util.wallet_types import WalletType
|
|
60
56
|
from chia.wallet.wallet import Wallet
|
|
@@ -76,7 +72,7 @@ class Mirror(Streamable):
|
|
|
76
72
|
amount: uint64
|
|
77
73
|
urls: list[str]
|
|
78
74
|
ours: bool
|
|
79
|
-
confirmed_at_height:
|
|
75
|
+
confirmed_at_height: uint32 | None
|
|
80
76
|
|
|
81
77
|
@staticmethod
|
|
82
78
|
def encode_urls(urls: list[str]) -> list[bytes]:
|
|
@@ -87,6 +83,27 @@ class Mirror(Streamable):
|
|
|
87
83
|
return [url.decode("utf8") for url in urls]
|
|
88
84
|
|
|
89
85
|
|
|
86
|
+
@streamable
|
|
87
|
+
@dataclasses.dataclass(frozen=True)
|
|
88
|
+
class SingletonDependencies(Streamable):
|
|
89
|
+
launcher_id: bytes32
|
|
90
|
+
values_to_prove: list[bytes]
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@streamable
|
|
94
|
+
@dataclasses.dataclass(frozen=True)
|
|
95
|
+
class SingletonSummary(Streamable):
|
|
96
|
+
launcher_id: bytes32
|
|
97
|
+
new_root: bytes32
|
|
98
|
+
dependencies: list[SingletonDependencies]
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
@streamable
|
|
102
|
+
@dataclasses.dataclass(frozen=True)
|
|
103
|
+
class DataLayerSummary(Streamable):
|
|
104
|
+
offered: list[SingletonSummary]
|
|
105
|
+
|
|
106
|
+
|
|
90
107
|
@final
|
|
91
108
|
class DataLayerWallet:
|
|
92
109
|
if TYPE_CHECKING:
|
|
@@ -153,7 +170,7 @@ class DataLayerWallet:
|
|
|
153
170
|
#############
|
|
154
171
|
|
|
155
172
|
@staticmethod
|
|
156
|
-
async def match_dl_launcher(launcher_spend: CoinSpend) -> tuple[bool,
|
|
173
|
+
async def match_dl_launcher(launcher_spend: CoinSpend) -> tuple[bool, bytes32 | None]:
|
|
157
174
|
# Sanity check it's a launcher
|
|
158
175
|
if launcher_spend.puzzle_reveal != SINGLETON_LAUNCHER_PUZZLE.to_serialized():
|
|
159
176
|
return False, None
|
|
@@ -197,8 +214,8 @@ class DataLayerWallet:
|
|
|
197
214
|
self,
|
|
198
215
|
launcher_id: bytes32,
|
|
199
216
|
peer: WSChiaConnection,
|
|
200
|
-
spend:
|
|
201
|
-
height:
|
|
217
|
+
spend: CoinSpend | None = None,
|
|
218
|
+
height: uint32 | None = None,
|
|
202
219
|
) -> None:
|
|
203
220
|
if await self.wallet_state_manager.dl_store.get_launcher(launcher_id) is not None:
|
|
204
221
|
self.log.info(f"Spend of launcher {launcher_id} has already been processed")
|
|
@@ -216,7 +233,7 @@ class DataLayerWallet:
|
|
|
216
233
|
)
|
|
217
234
|
new_singleton = Coin(launcher_id, full_puzhash, amount)
|
|
218
235
|
|
|
219
|
-
singleton_record:
|
|
236
|
+
singleton_record: SingletonRecord | None = await self.wallet_state_manager.dl_store.get_latest_singleton(
|
|
220
237
|
launcher_id
|
|
221
238
|
)
|
|
222
239
|
if singleton_record is not None:
|
|
@@ -252,9 +269,9 @@ class DataLayerWallet:
|
|
|
252
269
|
await self.wallet_state_manager.add_interested_puzzle_hashes([launcher_id], [self.id()])
|
|
253
270
|
await self.wallet_state_manager.add_interested_coin_ids([new_singleton.name()])
|
|
254
271
|
|
|
255
|
-
new_singleton_coin_record:
|
|
256
|
-
|
|
257
|
-
|
|
272
|
+
new_singleton_coin_record: WalletCoinRecord | None = await self.wallet_state_manager.coin_store.get_coin_record(
|
|
273
|
+
new_singleton.name()
|
|
274
|
+
)
|
|
258
275
|
while new_singleton_coin_record is not None and new_singleton_coin_record.spent_block_height > 0:
|
|
259
276
|
# We've already synced this before, so we need to sort of force a resync
|
|
260
277
|
parent_spend = await fetch_coin_spend(new_singleton_coin_record.spent_block_height, new_singleton, peer)
|
|
@@ -359,10 +376,10 @@ class DataLayerWallet:
|
|
|
359
376
|
async def create_update_state_spend(
|
|
360
377
|
self,
|
|
361
378
|
launcher_id: bytes32,
|
|
362
|
-
root_hash:
|
|
379
|
+
root_hash: bytes32 | None,
|
|
363
380
|
action_scope: WalletActionScope,
|
|
364
|
-
new_puz_hash:
|
|
365
|
-
new_amount:
|
|
381
|
+
new_puz_hash: bytes32 | None = None,
|
|
382
|
+
new_amount: uint64 | None = None,
|
|
366
383
|
fee: uint64 = uint64(0),
|
|
367
384
|
announce_new_state: bool = False,
|
|
368
385
|
extra_conditions: tuple[Condition, ...] = tuple(),
|
|
@@ -372,9 +389,9 @@ class DataLayerWallet:
|
|
|
372
389
|
if root_hash is None:
|
|
373
390
|
root_hash = singleton_record.root
|
|
374
391
|
|
|
375
|
-
inner_puzzle_derivation:
|
|
376
|
-
DerivationRecord
|
|
377
|
-
|
|
392
|
+
inner_puzzle_derivation: (
|
|
393
|
+
DerivationRecord | None
|
|
394
|
+
) = await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(
|
|
378
395
|
singleton_record.inner_puzzle_hash
|
|
379
396
|
)
|
|
380
397
|
if inner_puzzle_derivation is None:
|
|
@@ -535,25 +552,16 @@ class DataLayerWallet:
|
|
|
535
552
|
if announce_new_state:
|
|
536
553
|
spend_bundle = WalletSpendBundle([coin_spend, second_coin_spend], spend_bundle.aggregated_signature)
|
|
537
554
|
|
|
538
|
-
dl_tx =
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
to_puzzle_hash=new_puz_hash,
|
|
542
|
-
to_address=self.wallet_state_manager.encode_puzzle_hash(new_puz_hash),
|
|
555
|
+
dl_tx = self.wallet_state_manager.new_outgoing_transaction(
|
|
556
|
+
wallet_id=self.id(),
|
|
557
|
+
puzzle_hash=new_puz_hash,
|
|
543
558
|
amount=uint64(singleton_record.lineage_proof.amount),
|
|
544
|
-
|
|
545
|
-
confirmed=False,
|
|
546
|
-
sent=uint32(10),
|
|
559
|
+
fee=fee,
|
|
547
560
|
spend_bundle=spend_bundle,
|
|
548
561
|
additions=spend_bundle.additions(),
|
|
549
562
|
removals=spend_bundle.removals(),
|
|
550
|
-
memos=compute_memos(spend_bundle),
|
|
551
|
-
wallet_id=self.id(),
|
|
552
|
-
sent_to=[],
|
|
553
|
-
trade_id=None,
|
|
554
|
-
type=uint32(TransactionType.OUTGOING_TX.value),
|
|
555
563
|
name=singleton_record.coin_id,
|
|
556
|
-
|
|
564
|
+
extra_conditions=extra_conditions,
|
|
557
565
|
)
|
|
558
566
|
assert dl_tx.spend_bundle is not None
|
|
559
567
|
if fee > 0:
|
|
@@ -579,13 +587,13 @@ class DataLayerWallet:
|
|
|
579
587
|
puzzle_hashes: list[bytes32],
|
|
580
588
|
action_scope: WalletActionScope,
|
|
581
589
|
fee: uint64 = uint64(0),
|
|
582
|
-
coins:
|
|
583
|
-
memos:
|
|
590
|
+
coins: set[Coin] | None = None,
|
|
591
|
+
memos: list[list[bytes]] | None = None, # ignored
|
|
584
592
|
extra_conditions: tuple[Condition, ...] = tuple(),
|
|
585
593
|
**kwargs: Unpack[GSTOptionalArgs],
|
|
586
594
|
) -> None:
|
|
587
|
-
launcher_id:
|
|
588
|
-
new_root_hash:
|
|
595
|
+
launcher_id: bytes32 | None = kwargs.get("launcher_id", None)
|
|
596
|
+
new_root_hash: bytes32 | None = kwargs.get("new_root_hash", None)
|
|
589
597
|
announce_new_state: bool = kwargs.get("announce_new_state", False)
|
|
590
598
|
# Figure out the launcher ID
|
|
591
599
|
if coins is None or len(coins) == 0:
|
|
@@ -616,7 +624,7 @@ class DataLayerWallet:
|
|
|
616
624
|
|
|
617
625
|
async def get_spendable_singleton_info(self, launcher_id: bytes32) -> tuple[SingletonRecord, LineageProof]:
|
|
618
626
|
# First, let's make sure this is a singleton that we track and that we can spend
|
|
619
|
-
singleton_record:
|
|
627
|
+
singleton_record: SingletonRecord | None = await self.get_latest_singleton(launcher_id)
|
|
620
628
|
if singleton_record is None:
|
|
621
629
|
raise ValueError(f"Singleton with launcher ID {launcher_id} is not tracked by DL Wallet")
|
|
622
630
|
|
|
@@ -629,7 +637,7 @@ class DataLayerWallet:
|
|
|
629
637
|
raise ValueError(f"Singleton with launcher ID {launcher_id} has insufficient information to spend")
|
|
630
638
|
|
|
631
639
|
# Finally, let's get the parent record for its lineage proof
|
|
632
|
-
parent_singleton:
|
|
640
|
+
parent_singleton: SingletonRecord | None = await self.wallet_state_manager.dl_store.get_singleton_record(
|
|
633
641
|
singleton_record.lineage_proof.parent_name
|
|
634
642
|
)
|
|
635
643
|
parent_lineage: LineageProof
|
|
@@ -637,7 +645,7 @@ class DataLayerWallet:
|
|
|
637
645
|
if singleton_record.lineage_proof.parent_name != launcher_id:
|
|
638
646
|
raise ValueError(f"Have not found the parent of singleton with launcher ID {launcher_id}")
|
|
639
647
|
else:
|
|
640
|
-
launcher_coin:
|
|
648
|
+
launcher_coin: Coin | None = await self.wallet_state_manager.dl_store.get_launcher(launcher_id)
|
|
641
649
|
if launcher_coin is None:
|
|
642
650
|
raise ValueError(f"DL Wallet does not have launcher info for id {launcher_id}")
|
|
643
651
|
else:
|
|
@@ -658,9 +666,9 @@ class DataLayerWallet:
|
|
|
658
666
|
# this is likely due to a race between getting the list and acquiring the extra data
|
|
659
667
|
continue
|
|
660
668
|
|
|
661
|
-
inner_puzzle_derivation:
|
|
662
|
-
DerivationRecord
|
|
663
|
-
|
|
669
|
+
inner_puzzle_derivation: (
|
|
670
|
+
DerivationRecord | None
|
|
671
|
+
) = await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(
|
|
664
672
|
singleton_record.inner_puzzle_hash
|
|
665
673
|
)
|
|
666
674
|
if inner_puzzle_derivation is not None:
|
|
@@ -701,9 +709,9 @@ class DataLayerWallet:
|
|
|
701
709
|
parent_coin: Coin = (
|
|
702
710
|
await self.wallet_state_manager.wallet_node.get_coin_state([mirror_coin.parent_coin_info], peer=peer)
|
|
703
711
|
)[0].coin
|
|
704
|
-
inner_puzzle_derivation:
|
|
705
|
-
DerivationRecord
|
|
706
|
-
|
|
712
|
+
inner_puzzle_derivation: (
|
|
713
|
+
DerivationRecord | None
|
|
714
|
+
) = await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(parent_coin.puzzle_hash)
|
|
707
715
|
if inner_puzzle_derivation is None:
|
|
708
716
|
raise ValueError(f"DL Wallet does not have permission to delete mirror with ID {mirror_id}")
|
|
709
717
|
|
|
@@ -730,25 +738,16 @@ class DataLayerWallet:
|
|
|
730
738
|
|
|
731
739
|
async with action_scope.use() as interface:
|
|
732
740
|
interface.side_effects.transactions.append(
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
to_puzzle_hash=new_puzhash,
|
|
737
|
-
to_address=self.wallet_state_manager.encode_puzzle_hash(new_puzhash),
|
|
741
|
+
self.wallet_state_manager.new_outgoing_transaction(
|
|
742
|
+
wallet_id=self.id(),
|
|
743
|
+
puzzle_hash=new_puzhash,
|
|
738
744
|
amount=uint64(mirror_coin.amount),
|
|
739
|
-
|
|
740
|
-
confirmed=False,
|
|
741
|
-
sent=uint32(10),
|
|
745
|
+
fee=fee,
|
|
742
746
|
spend_bundle=mirror_bundle,
|
|
743
747
|
additions=mirror_bundle.additions(),
|
|
744
748
|
removals=mirror_bundle.removals(),
|
|
745
|
-
memos=compute_memos(mirror_bundle),
|
|
746
|
-
wallet_id=self.id(), # This is being called before the wallet is created so we're using a ID of 0
|
|
747
|
-
sent_to=[],
|
|
748
|
-
trade_id=None,
|
|
749
|
-
type=uint32(TransactionType.OUTGOING_TX.value),
|
|
750
749
|
name=mirror_bundle.name(),
|
|
751
|
-
|
|
750
|
+
extra_conditions=extra_conditions,
|
|
752
751
|
)
|
|
753
752
|
)
|
|
754
753
|
|
|
@@ -765,7 +764,7 @@ class DataLayerWallet:
|
|
|
765
764
|
# SYNCING #
|
|
766
765
|
###########
|
|
767
766
|
|
|
768
|
-
async def coin_added(self, coin: Coin, height: uint32, peer: WSChiaConnection, coin_data:
|
|
767
|
+
async def coin_added(self, coin: Coin, height: uint32, peer: WSChiaConnection, coin_data: object | None) -> None:
|
|
769
768
|
if coin.puzzle_hash == create_mirror_puzzle().get_tree_hash():
|
|
770
769
|
parent_state: CoinState = (
|
|
771
770
|
await self.wallet_state_manager.wallet_node.get_coin_state([coin.parent_coin_info], peer=peer)
|
|
@@ -798,7 +797,7 @@ class DataLayerWallet:
|
|
|
798
797
|
matched, _ = match_dl_singleton(puzzle)
|
|
799
798
|
if matched:
|
|
800
799
|
self.log.info(f"DL singleton removed: {parent_spend.coin}")
|
|
801
|
-
singleton_record:
|
|
800
|
+
singleton_record: SingletonRecord | None = await self.wallet_state_manager.dl_store.get_singleton_record(
|
|
802
801
|
parent_name
|
|
803
802
|
)
|
|
804
803
|
if singleton_record is None:
|
|
@@ -868,10 +867,8 @@ class DataLayerWallet:
|
|
|
868
867
|
# UTILITY #
|
|
869
868
|
###########
|
|
870
869
|
|
|
871
|
-
async def get_latest_singleton(
|
|
872
|
-
|
|
873
|
-
) -> Optional[SingletonRecord]:
|
|
874
|
-
singleton: Optional[SingletonRecord] = await self.wallet_state_manager.dl_store.get_latest_singleton(
|
|
870
|
+
async def get_latest_singleton(self, launcher_id: bytes32, only_confirmed: bool = False) -> SingletonRecord | None:
|
|
871
|
+
singleton: SingletonRecord | None = await self.wallet_state_manager.dl_store.get_latest_singleton(
|
|
875
872
|
launcher_id, only_confirmed
|
|
876
873
|
)
|
|
877
874
|
return singleton
|
|
@@ -879,9 +876,9 @@ class DataLayerWallet:
|
|
|
879
876
|
async def get_history(
|
|
880
877
|
self,
|
|
881
878
|
launcher_id: bytes32,
|
|
882
|
-
min_generation:
|
|
883
|
-
max_generation:
|
|
884
|
-
num_results:
|
|
879
|
+
min_generation: uint32 | None = None,
|
|
880
|
+
max_generation: uint32 | None = None,
|
|
881
|
+
num_results: uint32 | None = None,
|
|
885
882
|
) -> list[SingletonRecord]:
|
|
886
883
|
history: list[SingletonRecord] = await self.wallet_state_manager.dl_store.get_all_singletons_for_launcher(
|
|
887
884
|
launcher_id,
|
|
@@ -891,8 +888,8 @@ class DataLayerWallet:
|
|
|
891
888
|
)
|
|
892
889
|
return history
|
|
893
890
|
|
|
894
|
-
async def get_singleton_record(self, coin_id: bytes32) ->
|
|
895
|
-
singleton:
|
|
891
|
+
async def get_singleton_record(self, coin_id: bytes32) -> SingletonRecord | None:
|
|
892
|
+
singleton: SingletonRecord | None = await self.wallet_state_manager.dl_store.get_singleton_record(coin_id)
|
|
896
893
|
return singleton
|
|
897
894
|
|
|
898
895
|
async def get_singletons_by_root(self, launcher_id: bytes32, root: bytes32) -> list[SingletonRecord]:
|
|
@@ -924,19 +921,19 @@ class DataLayerWallet:
|
|
|
924
921
|
async def new_peak(self, peak: BlockRecord) -> None:
|
|
925
922
|
pass
|
|
926
923
|
|
|
927
|
-
async def get_confirmed_balance(self, record_list:
|
|
924
|
+
async def get_confirmed_balance(self, record_list: set[WalletCoinRecord] | None = None) -> uint128:
|
|
928
925
|
return uint128(0)
|
|
929
926
|
|
|
930
|
-
async def get_unconfirmed_balance(self, record_list:
|
|
927
|
+
async def get_unconfirmed_balance(self, record_list: set[WalletCoinRecord] | None = None) -> uint128:
|
|
931
928
|
return uint128(0)
|
|
932
929
|
|
|
933
|
-
async def get_spendable_balance(self, unspent_records:
|
|
930
|
+
async def get_spendable_balance(self, unspent_records: set[WalletCoinRecord] | None = None) -> uint128:
|
|
934
931
|
return uint128(0)
|
|
935
932
|
|
|
936
933
|
async def get_pending_change_balance(self) -> uint64:
|
|
937
934
|
return uint64(0)
|
|
938
935
|
|
|
939
|
-
async def get_max_send_amount(self, unspent_records:
|
|
936
|
+
async def get_max_send_amount(self, unspent_records: set[WalletCoinRecord] | None = None) -> uint128:
|
|
940
937
|
return uint128(0)
|
|
941
938
|
|
|
942
939
|
def get_name(self) -> str:
|
|
@@ -977,7 +974,7 @@ class DataLayerWallet:
|
|
|
977
974
|
@staticmethod
|
|
978
975
|
async def make_update_offer(
|
|
979
976
|
wallet_state_manager: Any,
|
|
980
|
-
offer_dict: dict[
|
|
977
|
+
offer_dict: dict[bytes32 | None, int],
|
|
981
978
|
driver_dict: dict[bytes32, PuzzleInfo],
|
|
982
979
|
solver: Solver,
|
|
983
980
|
action_scope: WalletActionScope,
|
|
@@ -1104,7 +1101,7 @@ class DataLayerWallet:
|
|
|
1104
1101
|
all_proofs = []
|
|
1105
1102
|
roots = []
|
|
1106
1103
|
for singleton, values in zip(singleton_structs.as_iter(), values_to_prove.as_python()):
|
|
1107
|
-
asserted_root:
|
|
1104
|
+
asserted_root: str | None = None
|
|
1108
1105
|
proofs_of_inclusion = []
|
|
1109
1106
|
for value in values:
|
|
1110
1107
|
for proof_of_inclusion in solver["proofs_of_inclusion"]:
|
|
@@ -1146,8 +1143,8 @@ class DataLayerWallet:
|
|
|
1146
1143
|
return Offer({}, WalletSpendBundle(new_spends, offer.aggregated_signature()), offer.driver_dict)
|
|
1147
1144
|
|
|
1148
1145
|
@staticmethod
|
|
1149
|
-
async def get_offer_summary(offer: Offer) ->
|
|
1150
|
-
|
|
1146
|
+
async def get_offer_summary(offer: Offer) -> DataLayerSummary:
|
|
1147
|
+
singleton_summaries = []
|
|
1151
1148
|
for spend in offer.coin_spends():
|
|
1152
1149
|
solution = Program.from_serialized(spend.solution)
|
|
1153
1150
|
matched, curried_args = match_dl_singleton(spend.puzzle_reveal)
|
|
@@ -1162,21 +1159,22 @@ class DataLayerWallet:
|
|
|
1162
1159
|
cs for cs in offer.coin_spends() if cs.coin.parent_coin_info == spend.coin.name()
|
|
1163
1160
|
)
|
|
1164
1161
|
_, child_curried_args = match_dl_singleton(child_spend.puzzle_reveal)
|
|
1165
|
-
singleton_summary = {
|
|
1166
|
-
"launcher_id": list(curried_args)[2].as_python().hex(),
|
|
1167
|
-
"new_root": list(child_curried_args)[1].as_python().hex(),
|
|
1168
|
-
"dependencies": [],
|
|
1169
|
-
}
|
|
1170
1162
|
_, singleton_structs, _, values_to_prove = graftroot_curried_args.as_iter()
|
|
1163
|
+
dependencies = []
|
|
1171
1164
|
for struct, values in zip(singleton_structs.as_iter(), values_to_prove.as_iter()):
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1165
|
+
dependencies.append(
|
|
1166
|
+
SingletonDependencies(
|
|
1167
|
+
launcher_id=bytes32(struct.at("rf").as_atom()),
|
|
1168
|
+
values_to_prove=[value.as_atom() for value in values.as_iter()],
|
|
1169
|
+
)
|
|
1177
1170
|
)
|
|
1178
|
-
|
|
1179
|
-
|
|
1171
|
+
singleton_summary = SingletonSummary(
|
|
1172
|
+
launcher_id=bytes32(list(curried_args)[2].as_atom()),
|
|
1173
|
+
new_root=bytes32(list(child_curried_args)[1].as_atom()),
|
|
1174
|
+
dependencies=dependencies,
|
|
1175
|
+
)
|
|
1176
|
+
singleton_summaries.append(singleton_summary)
|
|
1177
|
+
return DataLayerSummary(offered=singleton_summaries)
|
|
1180
1178
|
|
|
1181
1179
|
async def select_coins(
|
|
1182
1180
|
self,
|
|
@@ -1192,7 +1190,7 @@ class DataLayerWallet:
|
|
|
1192
1190
|
def verify_offer(
|
|
1193
1191
|
maker: tuple[StoreProofs, ...],
|
|
1194
1192
|
taker: tuple[OfferStore, ...],
|
|
1195
|
-
summary:
|
|
1193
|
+
summary: DataLayerSummary,
|
|
1196
1194
|
) -> None:
|
|
1197
1195
|
# TODO: consistency in error messages
|
|
1198
1196
|
# TODO: custom exceptions
|
|
@@ -1234,10 +1232,7 @@ def verify_offer(
|
|
|
1234
1232
|
raise OfferIntegrityError("maker: no roots referenced for store id")
|
|
1235
1233
|
|
|
1236
1234
|
# TODO: what about validating duplicate entries are consistent?
|
|
1237
|
-
maker_from_offer = {
|
|
1238
|
-
bytes32.from_hexstr(offered["launcher_id"]): bytes32.from_hexstr(offered["new_root"])
|
|
1239
|
-
for offered in summary["offered"]
|
|
1240
|
-
}
|
|
1235
|
+
maker_from_offer = {offered.launcher_id: offered.new_root for offered in summary.offered}
|
|
1241
1236
|
|
|
1242
1237
|
maker_from_reference = {
|
|
1243
1238
|
# verified above that there is at least one proof and all combined hashes match
|
|
@@ -1249,11 +1244,9 @@ def verify_offer(
|
|
|
1249
1244
|
raise OfferIntegrityError("maker: offered stores and their roots do not match the reference data")
|
|
1250
1245
|
|
|
1251
1246
|
taker_from_offer = {
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
for offered in summary["offered"]
|
|
1256
|
-
for dependency in offered["dependencies"]
|
|
1247
|
+
dependency.launcher_id: [bytes32(value) for value in dependency.values_to_prove]
|
|
1248
|
+
for offered in summary.offered
|
|
1249
|
+
for dependency in offered.dependencies
|
|
1257
1250
|
}
|
|
1258
1251
|
|
|
1259
1252
|
taker_from_reference = {
|