chia-blockchain 2.5.1rc1__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 +10 -0
- chia/__main__.py +5 -0
- chia/_tests/README.md +53 -0
- chia/_tests/__init__.py +0 -0
- chia/_tests/blockchain/__init__.py +0 -0
- chia/_tests/blockchain/blockchain_test_utils.py +195 -0
- chia/_tests/blockchain/config.py +4 -0
- chia/_tests/blockchain/test_augmented_chain.py +145 -0
- chia/_tests/blockchain/test_blockchain.py +4202 -0
- chia/_tests/blockchain/test_blockchain_transactions.py +1031 -0
- chia/_tests/blockchain/test_build_chains.py +59 -0
- chia/_tests/blockchain/test_get_block_generator.py +72 -0
- chia/_tests/blockchain/test_lookup_fork_chain.py +194 -0
- chia/_tests/build-init-files.py +92 -0
- chia/_tests/build-job-matrix.py +204 -0
- chia/_tests/check_pytest_monitor_output.py +34 -0
- chia/_tests/check_sql_statements.py +72 -0
- chia/_tests/chia-start-sim +42 -0
- chia/_tests/clvm/__init__.py +0 -0
- chia/_tests/clvm/benchmark_costs.py +23 -0
- chia/_tests/clvm/coin_store.py +149 -0
- chia/_tests/clvm/test_chialisp_deserialization.py +101 -0
- chia/_tests/clvm/test_clvm_step.py +37 -0
- chia/_tests/clvm/test_condition_codes.py +13 -0
- chia/_tests/clvm/test_curry_and_treehash.py +55 -0
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_program.py +150 -0
- chia/_tests/clvm/test_puzzle_compression.py +143 -0
- chia/_tests/clvm/test_puzzle_drivers.py +45 -0
- chia/_tests/clvm/test_puzzles.py +242 -0
- chia/_tests/clvm/test_singletons.py +540 -0
- chia/_tests/clvm/test_spend_sim.py +181 -0
- chia/_tests/cmds/__init__.py +0 -0
- chia/_tests/cmds/cmd_test_utils.py +469 -0
- chia/_tests/cmds/config.py +3 -0
- chia/_tests/cmds/conftest.py +23 -0
- chia/_tests/cmds/test_click_types.py +200 -0
- chia/_tests/cmds/test_cmd_framework.py +620 -0
- chia/_tests/cmds/test_cmds_util.py +97 -0
- chia/_tests/cmds/test_daemon.py +92 -0
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +66 -0
- chia/_tests/cmds/test_show.py +116 -0
- chia/_tests/cmds/test_sim.py +207 -0
- chia/_tests/cmds/test_timelock_args.py +75 -0
- chia/_tests/cmds/test_tx_config_args.py +154 -0
- chia/_tests/cmds/testing_classes.py +59 -0
- chia/_tests/cmds/wallet/__init__.py +0 -0
- chia/_tests/cmds/wallet/test_consts.py +47 -0
- chia/_tests/cmds/wallet/test_dao.py +565 -0
- chia/_tests/cmds/wallet/test_did.py +403 -0
- chia/_tests/cmds/wallet/test_nft.py +471 -0
- chia/_tests/cmds/wallet/test_notifications.py +124 -0
- chia/_tests/cmds/wallet/test_offer.toffer +1 -0
- chia/_tests/cmds/wallet/test_tx_decorators.py +27 -0
- chia/_tests/cmds/wallet/test_vcs.py +400 -0
- chia/_tests/cmds/wallet/test_wallet.py +1125 -0
- chia/_tests/cmds/wallet/test_wallet_check.py +109 -0
- chia/_tests/conftest.py +1419 -0
- chia/_tests/connection_utils.py +125 -0
- chia/_tests/core/__init__.py +0 -0
- chia/_tests/core/cmds/__init__.py +0 -0
- chia/_tests/core/cmds/test_beta.py +382 -0
- chia/_tests/core/cmds/test_keys.py +1734 -0
- chia/_tests/core/cmds/test_wallet.py +126 -0
- chia/_tests/core/config.py +3 -0
- chia/_tests/core/consensus/__init__.py +0 -0
- chia/_tests/core/consensus/test_block_creation.py +54 -0
- chia/_tests/core/consensus/test_pot_iterations.py +117 -0
- chia/_tests/core/custom_types/__init__.py +0 -0
- chia/_tests/core/custom_types/test_coin.py +107 -0
- chia/_tests/core/custom_types/test_proof_of_space.py +144 -0
- chia/_tests/core/custom_types/test_spend_bundle.py +70 -0
- chia/_tests/core/daemon/__init__.py +0 -0
- chia/_tests/core/daemon/config.py +4 -0
- chia/_tests/core/daemon/test_daemon.py +2128 -0
- chia/_tests/core/daemon/test_daemon_register.py +109 -0
- chia/_tests/core/daemon/test_keychain_proxy.py +101 -0
- chia/_tests/core/data_layer/__init__.py +0 -0
- chia/_tests/core/data_layer/config.py +5 -0
- chia/_tests/core/data_layer/conftest.py +106 -0
- chia/_tests/core/data_layer/test_data_cli.py +56 -0
- chia/_tests/core/data_layer/test_data_layer.py +83 -0
- chia/_tests/core/data_layer/test_data_layer_util.py +218 -0
- chia/_tests/core/data_layer/test_data_rpc.py +3847 -0
- chia/_tests/core/data_layer/test_data_store.py +2424 -0
- chia/_tests/core/data_layer/test_data_store_schema.py +381 -0
- chia/_tests/core/data_layer/test_plugin.py +91 -0
- chia/_tests/core/data_layer/util.py +233 -0
- chia/_tests/core/farmer/__init__.py +0 -0
- chia/_tests/core/farmer/config.py +3 -0
- chia/_tests/core/farmer/test_farmer_api.py +103 -0
- chia/_tests/core/full_node/__init__.py +0 -0
- chia/_tests/core/full_node/config.py +4 -0
- chia/_tests/core/full_node/dos/__init__.py +0 -0
- chia/_tests/core/full_node/dos/config.py +3 -0
- chia/_tests/core/full_node/full_sync/__init__.py +0 -0
- chia/_tests/core/full_node/full_sync/config.py +4 -0
- chia/_tests/core/full_node/full_sync/test_full_sync.py +443 -0
- chia/_tests/core/full_node/ram_db.py +27 -0
- chia/_tests/core/full_node/stores/__init__.py +0 -0
- chia/_tests/core/full_node/stores/config.py +4 -0
- chia/_tests/core/full_node/stores/test_block_store.py +590 -0
- chia/_tests/core/full_node/stores/test_coin_store.py +897 -0
- chia/_tests/core/full_node/stores/test_full_node_store.py +1219 -0
- chia/_tests/core/full_node/stores/test_hint_store.py +229 -0
- chia/_tests/core/full_node/stores/test_sync_store.py +135 -0
- chia/_tests/core/full_node/test_address_manager.py +588 -0
- chia/_tests/core/full_node/test_block_height_map.py +556 -0
- chia/_tests/core/full_node/test_conditions.py +556 -0
- chia/_tests/core/full_node/test_full_node.py +2700 -0
- chia/_tests/core/full_node/test_generator_tools.py +82 -0
- chia/_tests/core/full_node/test_hint_management.py +104 -0
- chia/_tests/core/full_node/test_node_load.py +34 -0
- chia/_tests/core/full_node/test_performance.py +179 -0
- chia/_tests/core/full_node/test_subscriptions.py +492 -0
- chia/_tests/core/full_node/test_transactions.py +203 -0
- chia/_tests/core/full_node/test_tx_processing_queue.py +155 -0
- chia/_tests/core/large_block.py +2388 -0
- chia/_tests/core/make_block_generator.py +70 -0
- chia/_tests/core/mempool/__init__.py +0 -0
- chia/_tests/core/mempool/config.py +4 -0
- chia/_tests/core/mempool/test_mempool.py +3255 -0
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +104 -0
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +55 -0
- chia/_tests/core/mempool/test_mempool_item_queries.py +190 -0
- chia/_tests/core/mempool/test_mempool_manager.py +2084 -0
- chia/_tests/core/mempool/test_mempool_performance.py +64 -0
- chia/_tests/core/mempool/test_singleton_fast_forward.py +567 -0
- chia/_tests/core/node_height.py +28 -0
- chia/_tests/core/server/__init__.py +0 -0
- chia/_tests/core/server/config.py +3 -0
- chia/_tests/core/server/flood.py +84 -0
- chia/_tests/core/server/serve.py +135 -0
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +66 -0
- chia/_tests/core/server/test_dos.py +319 -0
- chia/_tests/core/server/test_event_loop.py +109 -0
- chia/_tests/core/server/test_loop.py +294 -0
- chia/_tests/core/server/test_node_discovery.py +73 -0
- chia/_tests/core/server/test_rate_limits.py +482 -0
- chia/_tests/core/server/test_server.py +226 -0
- chia/_tests/core/server/test_upnp.py +8 -0
- chia/_tests/core/services/__init__.py +0 -0
- chia/_tests/core/services/config.py +3 -0
- chia/_tests/core/services/test_services.py +188 -0
- chia/_tests/core/ssl/__init__.py +0 -0
- chia/_tests/core/ssl/config.py +3 -0
- chia/_tests/core/ssl/test_ssl.py +202 -0
- chia/_tests/core/test_coins.py +33 -0
- chia/_tests/core/test_cost_calculation.py +313 -0
- chia/_tests/core/test_crawler.py +175 -0
- chia/_tests/core/test_crawler_rpc.py +53 -0
- chia/_tests/core/test_daemon_rpc.py +24 -0
- chia/_tests/core/test_db_conversion.py +130 -0
- chia/_tests/core/test_db_validation.py +162 -0
- chia/_tests/core/test_farmer_harvester_rpc.py +505 -0
- chia/_tests/core/test_filter.py +35 -0
- chia/_tests/core/test_full_node_rpc.py +768 -0
- chia/_tests/core/test_merkle_set.py +343 -0
- chia/_tests/core/test_program.py +47 -0
- chia/_tests/core/test_rpc_util.py +86 -0
- chia/_tests/core/test_seeder.py +420 -0
- chia/_tests/core/test_setproctitle.py +13 -0
- chia/_tests/core/util/__init__.py +0 -0
- chia/_tests/core/util/config.py +4 -0
- chia/_tests/core/util/test_block_cache.py +44 -0
- chia/_tests/core/util/test_cached_bls.py +57 -0
- chia/_tests/core/util/test_config.py +337 -0
- chia/_tests/core/util/test_file_keyring_synchronization.py +105 -0
- chia/_tests/core/util/test_files.py +391 -0
- chia/_tests/core/util/test_jsonify.py +146 -0
- chia/_tests/core/util/test_keychain.py +522 -0
- chia/_tests/core/util/test_keyring_wrapper.py +491 -0
- chia/_tests/core/util/test_lockfile.py +380 -0
- chia/_tests/core/util/test_log_exceptions.py +187 -0
- chia/_tests/core/util/test_lru_cache.py +56 -0
- chia/_tests/core/util/test_significant_bits.py +40 -0
- chia/_tests/core/util/test_streamable.py +883 -0
- chia/_tests/db/__init__.py +0 -0
- chia/_tests/db/test_db_wrapper.py +566 -0
- chia/_tests/environments/__init__.py +0 -0
- chia/_tests/environments/common.py +35 -0
- chia/_tests/environments/full_node.py +47 -0
- chia/_tests/environments/wallet.py +429 -0
- chia/_tests/ether.py +19 -0
- chia/_tests/farmer_harvester/__init__.py +0 -0
- chia/_tests/farmer_harvester/config.py +3 -0
- chia/_tests/farmer_harvester/test_farmer.py +1264 -0
- chia/_tests/farmer_harvester/test_farmer_harvester.py +292 -0
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +131 -0
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +528 -0
- chia/_tests/farmer_harvester/test_third_party_harvesters_data.json +29 -0
- chia/_tests/fee_estimation/__init__.py +0 -0
- chia/_tests/fee_estimation/config.py +3 -0
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +262 -0
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +287 -0
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +144 -0
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +146 -0
- chia/_tests/generator/__init__.py +0 -0
- chia/_tests/generator/puzzles/__init__.py +0 -0
- chia/_tests/generator/puzzles/test_generator_deserialize.clsp +3 -0
- chia/_tests/generator/puzzles/test_generator_deserialize.clsp.hex +1 -0
- chia/_tests/generator/puzzles/test_multiple_generator_input_arguments.clsp +19 -0
- chia/_tests/generator/puzzles/test_multiple_generator_input_arguments.clsp.hex +1 -0
- chia/_tests/generator/test_compression.py +201 -0
- chia/_tests/generator/test_generator_types.py +44 -0
- chia/_tests/generator/test_rom.py +180 -0
- chia/_tests/plot_sync/__init__.py +0 -0
- chia/_tests/plot_sync/config.py +3 -0
- chia/_tests/plot_sync/test_delta.py +101 -0
- chia/_tests/plot_sync/test_plot_sync.py +618 -0
- chia/_tests/plot_sync/test_receiver.py +451 -0
- chia/_tests/plot_sync/test_sender.py +116 -0
- chia/_tests/plot_sync/test_sync_simulated.py +451 -0
- chia/_tests/plot_sync/util.py +68 -0
- chia/_tests/plotting/__init__.py +0 -0
- chia/_tests/plotting/config.py +3 -0
- chia/_tests/plotting/test_plot_manager.py +781 -0
- chia/_tests/plotting/util.py +12 -0
- chia/_tests/pools/__init__.py +0 -0
- chia/_tests/pools/config.py +5 -0
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +1001 -0
- chia/_tests/pools/test_pool_config.py +42 -0
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +397 -0
- chia/_tests/pools/test_pool_rpc.py +1123 -0
- chia/_tests/pools/test_pool_wallet.py +205 -0
- chia/_tests/pools/test_wallet_pool_store.py +161 -0
- chia/_tests/process_junit.py +348 -0
- chia/_tests/rpc/__init__.py +0 -0
- chia/_tests/rpc/test_rpc_client.py +138 -0
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/__init__.py +0 -0
- chia/_tests/simulation/config.py +6 -0
- chia/_tests/simulation/test_simulation.py +501 -0
- chia/_tests/simulation/test_simulator.py +232 -0
- chia/_tests/simulation/test_start_simulator.py +107 -0
- chia/_tests/testconfig.py +13 -0
- chia/_tests/timelord/__init__.py +0 -0
- chia/_tests/timelord/config.py +3 -0
- chia/_tests/timelord/test_new_peak.py +437 -0
- chia/_tests/timelord/test_timelord.py +11 -0
- chia/_tests/tools/1315537.json +170 -0
- chia/_tests/tools/1315544.json +160 -0
- chia/_tests/tools/1315630.json +150 -0
- chia/_tests/tools/300000.json +105 -0
- chia/_tests/tools/442734.json +140 -0
- chia/_tests/tools/466212.json +130 -0
- chia/_tests/tools/__init__.py +0 -0
- chia/_tests/tools/config.py +5 -0
- chia/_tests/tools/test-blockchain-db.sqlite +0 -0
- chia/_tests/tools/test_full_sync.py +30 -0
- chia/_tests/tools/test_legacy_keyring.py +82 -0
- chia/_tests/tools/test_run_block.py +128 -0
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/__init__.py +0 -0
- chia/_tests/util/benchmark_cost.py +170 -0
- chia/_tests/util/benchmarks.py +153 -0
- chia/_tests/util/bip39_test_vectors.json +148 -0
- chia/_tests/util/blockchain.py +134 -0
- chia/_tests/util/blockchain_mock.py +132 -0
- chia/_tests/util/build_network_protocol_files.py +302 -0
- chia/_tests/util/clvm_generator.bin +0 -0
- chia/_tests/util/config.py +3 -0
- chia/_tests/util/constants.py +20 -0
- chia/_tests/util/db_connection.py +37 -0
- chia/_tests/util/full_sync.py +253 -0
- chia/_tests/util/gen_ssl_certs.py +114 -0
- chia/_tests/util/generator_tools_testing.py +45 -0
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +36 -0
- chia/_tests/util/misc.py +675 -0
- chia/_tests/util/network_protocol_data.py +1072 -0
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +2701 -0
- chia/_tests/util/rpc.py +26 -0
- chia/_tests/util/run_block.py +163 -0
- chia/_tests/util/setup_nodes.py +481 -0
- chia/_tests/util/spend_sim.py +492 -0
- chia/_tests/util/split_managers.py +102 -0
- chia/_tests/util/temp_file.py +14 -0
- chia/_tests/util/test_action_scope.py +144 -0
- chia/_tests/util/test_async_pool.py +366 -0
- chia/_tests/util/test_build_job_matrix.py +42 -0
- chia/_tests/util/test_build_network_protocol_files.py +7 -0
- chia/_tests/util/test_chia_version.py +50 -0
- chia/_tests/util/test_collection.py +11 -0
- chia/_tests/util/test_condition_tools.py +229 -0
- chia/_tests/util/test_config.py +426 -0
- chia/_tests/util/test_dump_keyring.py +60 -0
- chia/_tests/util/test_errors.py +10 -0
- chia/_tests/util/test_full_block_utils.py +279 -0
- chia/_tests/util/test_installed.py +20 -0
- chia/_tests/util/test_limited_semaphore.py +53 -0
- chia/_tests/util/test_logging_filter.py +42 -0
- chia/_tests/util/test_misc.py +445 -0
- chia/_tests/util/test_network.py +73 -0
- chia/_tests/util/test_network_protocol_files.py +578 -0
- chia/_tests/util/test_network_protocol_json.py +267 -0
- chia/_tests/util/test_network_protocol_test.py +256 -0
- chia/_tests/util/test_paginator.py +71 -0
- chia/_tests/util/test_pprint.py +17 -0
- chia/_tests/util/test_priority_mutex.py +488 -0
- chia/_tests/util/test_recursive_replace.py +116 -0
- chia/_tests/util/test_replace_str_to_bytes.py +137 -0
- chia/_tests/util/test_service_groups.py +15 -0
- chia/_tests/util/test_ssl_check.py +31 -0
- chia/_tests/util/test_testnet_overrides.py +19 -0
- chia/_tests/util/test_tests_misc.py +38 -0
- chia/_tests/util/test_timing.py +37 -0
- chia/_tests/util/test_trusted_peer.py +51 -0
- chia/_tests/util/time_out_assert.py +191 -0
- chia/_tests/wallet/__init__.py +0 -0
- chia/_tests/wallet/cat_wallet/__init__.py +0 -0
- chia/_tests/wallet/cat_wallet/config.py +4 -0
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +468 -0
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +69 -0
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +1826 -0
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +291 -0
- chia/_tests/wallet/cat_wallet/test_trades.py +2600 -0
- chia/_tests/wallet/clawback/__init__.py +0 -0
- chia/_tests/wallet/clawback/config.py +3 -0
- chia/_tests/wallet/clawback/test_clawback_decorator.py +78 -0
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +292 -0
- chia/_tests/wallet/clawback/test_clawback_metadata.py +50 -0
- chia/_tests/wallet/config.py +4 -0
- chia/_tests/wallet/conftest.py +278 -0
- chia/_tests/wallet/dao_wallet/__init__.py +0 -0
- chia/_tests/wallet/dao_wallet/config.py +3 -0
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +1330 -0
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +3488 -0
- chia/_tests/wallet/db_wallet/__init__.py +0 -0
- chia/_tests/wallet/db_wallet/config.py +3 -0
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +141 -0
- chia/_tests/wallet/db_wallet/test_dl_offers.py +491 -0
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +823 -0
- chia/_tests/wallet/did_wallet/__init__.py +0 -0
- chia/_tests/wallet/did_wallet/config.py +4 -0
- chia/_tests/wallet/did_wallet/test_did.py +2284 -0
- chia/_tests/wallet/nft_wallet/__init__.py +0 -0
- chia/_tests/wallet/nft_wallet/config.py +4 -0
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1493 -0
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +1024 -0
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +375 -0
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +1209 -0
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +172 -0
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +2584 -0
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +70 -0
- chia/_tests/wallet/rpc/__init__.py +0 -0
- chia/_tests/wallet/rpc/config.py +4 -0
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +285 -0
- chia/_tests/wallet/rpc/test_wallet_rpc.py +3153 -0
- chia/_tests/wallet/simple_sync/__init__.py +0 -0
- chia/_tests/wallet/simple_sync/config.py +3 -0
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +718 -0
- chia/_tests/wallet/sync/__init__.py +0 -0
- chia/_tests/wallet/sync/config.py +4 -0
- chia/_tests/wallet/sync/test_wallet_sync.py +1692 -0
- chia/_tests/wallet/test_address_type.py +189 -0
- chia/_tests/wallet/test_bech32m.py +45 -0
- chia/_tests/wallet/test_clvm_streamable.py +244 -0
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +588 -0
- chia/_tests/wallet/test_conditions.py +400 -0
- chia/_tests/wallet/test_debug_spend_bundle.py +218 -0
- chia/_tests/wallet/test_new_wallet_protocol.py +1174 -0
- chia/_tests/wallet/test_nft_store.py +192 -0
- chia/_tests/wallet/test_notifications.py +196 -0
- chia/_tests/wallet/test_offer_parsing_performance.py +48 -0
- chia/_tests/wallet/test_puzzle_store.py +132 -0
- chia/_tests/wallet/test_sign_coin_spends.py +159 -0
- chia/_tests/wallet/test_signer_protocol.py +947 -0
- chia/_tests/wallet/test_singleton.py +122 -0
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +772 -0
- chia/_tests/wallet/test_singleton_store.py +152 -0
- chia/_tests/wallet/test_taproot.py +19 -0
- chia/_tests/wallet/test_transaction_store.py +945 -0
- chia/_tests/wallet/test_util.py +185 -0
- chia/_tests/wallet/test_wallet.py +2139 -0
- chia/_tests/wallet/test_wallet_action_scope.py +85 -0
- chia/_tests/wallet/test_wallet_blockchain.py +111 -0
- chia/_tests/wallet/test_wallet_coin_store.py +1002 -0
- chia/_tests/wallet/test_wallet_interested_store.py +43 -0
- chia/_tests/wallet/test_wallet_key_val_store.py +40 -0
- chia/_tests/wallet/test_wallet_node.py +780 -0
- chia/_tests/wallet/test_wallet_retry.py +95 -0
- chia/_tests/wallet/test_wallet_state_manager.py +259 -0
- chia/_tests/wallet/test_wallet_test_framework.py +275 -0
- chia/_tests/wallet/test_wallet_trade_store.py +218 -0
- chia/_tests/wallet/test_wallet_user_store.py +34 -0
- chia/_tests/wallet/test_wallet_utils.py +156 -0
- chia/_tests/wallet/vc_wallet/__init__.py +0 -0
- chia/_tests/wallet/vc_wallet/config.py +3 -0
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +70 -0
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +883 -0
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +830 -0
- chia/_tests/wallet/wallet_block_tools.py +327 -0
- chia/_tests/weight_proof/__init__.py +0 -0
- chia/_tests/weight_proof/config.py +3 -0
- chia/_tests/weight_proof/test_weight_proof.py +528 -0
- chia/apis.py +19 -0
- chia/clvm/__init__.py +0 -0
- chia/cmds/__init__.py +0 -0
- chia/cmds/beta.py +184 -0
- chia/cmds/beta_funcs.py +137 -0
- chia/cmds/check_wallet_db.py +420 -0
- chia/cmds/chia.py +151 -0
- chia/cmds/cmd_classes.py +323 -0
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +488 -0
- chia/cmds/coin_funcs.py +275 -0
- chia/cmds/coins.py +182 -0
- chia/cmds/completion.py +49 -0
- chia/cmds/configure.py +332 -0
- chia/cmds/dao.py +1064 -0
- chia/cmds/dao_funcs.py +598 -0
- chia/cmds/data.py +708 -0
- chia/cmds/data_funcs.py +385 -0
- chia/cmds/db.py +87 -0
- chia/cmds/db_backup_func.py +77 -0
- chia/cmds/db_upgrade_func.py +452 -0
- chia/cmds/db_validate_func.py +184 -0
- chia/cmds/dev.py +18 -0
- chia/cmds/farm.py +100 -0
- chia/cmds/farm_funcs.py +200 -0
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +63 -0
- chia/cmds/init_funcs.py +367 -0
- chia/cmds/installers.py +131 -0
- chia/cmds/keys.py +527 -0
- chia/cmds/keys_funcs.py +863 -0
- chia/cmds/netspace.py +50 -0
- chia/cmds/netspace_funcs.py +54 -0
- chia/cmds/options.py +32 -0
- chia/cmds/param_types.py +238 -0
- chia/cmds/passphrase.py +131 -0
- chia/cmds/passphrase_funcs.py +292 -0
- chia/cmds/peer.py +51 -0
- chia/cmds/peer_funcs.py +129 -0
- chia/cmds/plotnft.py +260 -0
- chia/cmds/plotnft_funcs.py +405 -0
- chia/cmds/plots.py +230 -0
- chia/cmds/plotters.py +18 -0
- chia/cmds/rpc.py +208 -0
- chia/cmds/show.py +72 -0
- chia/cmds/show_funcs.py +215 -0
- chia/cmds/signer.py +296 -0
- chia/cmds/sim.py +225 -0
- chia/cmds/sim_funcs.py +509 -0
- chia/cmds/start.py +24 -0
- chia/cmds/start_funcs.py +109 -0
- chia/cmds/stop.py +62 -0
- chia/cmds/units.py +9 -0
- chia/cmds/wallet.py +1901 -0
- chia/cmds/wallet_funcs.py +1874 -0
- chia/consensus/__init__.py +0 -0
- chia/consensus/block_body_validation.py +562 -0
- chia/consensus/block_creation.py +546 -0
- chia/consensus/block_header_validation.py +1059 -0
- chia/consensus/block_record.py +31 -0
- chia/consensus/block_rewards.py +53 -0
- chia/consensus/blockchain.py +1087 -0
- chia/consensus/blockchain_interface.py +56 -0
- chia/consensus/coinbase.py +30 -0
- chia/consensus/condition_costs.py +9 -0
- chia/consensus/constants.py +49 -0
- chia/consensus/cost_calculator.py +15 -0
- chia/consensus/default_constants.py +89 -0
- chia/consensus/deficit.py +55 -0
- chia/consensus/difficulty_adjustment.py +412 -0
- chia/consensus/find_fork_point.py +111 -0
- chia/consensus/full_block_to_block_record.py +167 -0
- chia/consensus/get_block_challenge.py +106 -0
- chia/consensus/get_block_generator.py +27 -0
- chia/consensus/make_sub_epoch_summary.py +210 -0
- chia/consensus/multiprocess_validation.py +268 -0
- chia/consensus/pos_quality.py +19 -0
- chia/consensus/pot_iterations.py +67 -0
- chia/consensus/puzzles/__init__.py +0 -0
- chia/consensus/puzzles/chialisp_deserialisation.clsp +69 -0
- chia/consensus/puzzles/chialisp_deserialisation.clsp.hex +1 -0
- chia/consensus/puzzles/rom_bootstrap_generator.clsp +37 -0
- chia/consensus/puzzles/rom_bootstrap_generator.clsp.hex +1 -0
- chia/consensus/vdf_info_computation.py +156 -0
- chia/daemon/__init__.py +0 -0
- chia/daemon/client.py +252 -0
- chia/daemon/keychain_proxy.py +502 -0
- chia/daemon/keychain_server.py +365 -0
- chia/daemon/server.py +1606 -0
- chia/daemon/windows_signal.py +56 -0
- chia/data_layer/__init__.py +0 -0
- chia/data_layer/data_layer.py +1291 -0
- chia/data_layer/data_layer_api.py +33 -0
- chia/data_layer/data_layer_errors.py +50 -0
- chia/data_layer/data_layer_server.py +170 -0
- chia/data_layer/data_layer_util.py +985 -0
- chia/data_layer/data_layer_wallet.py +1311 -0
- chia/data_layer/data_store.py +2267 -0
- chia/data_layer/dl_wallet_store.py +407 -0
- chia/data_layer/download_data.py +389 -0
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +100 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +1 -0
- chia/data_layer/s3_plugin_config.yml +33 -0
- chia/data_layer/s3_plugin_service.py +468 -0
- chia/data_layer/util/__init__.py +0 -0
- chia/data_layer/util/benchmark.py +107 -0
- chia/data_layer/util/plugin.py +40 -0
- chia/farmer/__init__.py +0 -0
- chia/farmer/farmer.py +923 -0
- chia/farmer/farmer_api.py +820 -0
- chia/full_node/__init__.py +0 -0
- chia/full_node/bitcoin_fee_estimator.py +85 -0
- chia/full_node/block_height_map.py +271 -0
- chia/full_node/block_store.py +576 -0
- chia/full_node/bundle_tools.py +19 -0
- chia/full_node/coin_store.py +647 -0
- chia/full_node/fee_estimate.py +54 -0
- chia/full_node/fee_estimate_store.py +24 -0
- chia/full_node/fee_estimation.py +92 -0
- chia/full_node/fee_estimator.py +90 -0
- chia/full_node/fee_estimator_constants.py +38 -0
- chia/full_node/fee_estimator_interface.py +42 -0
- chia/full_node/fee_history.py +25 -0
- chia/full_node/fee_tracker.py +564 -0
- chia/full_node/full_node.py +3327 -0
- chia/full_node/full_node_api.py +2025 -0
- chia/full_node/full_node_store.py +1033 -0
- chia/full_node/hint_management.py +56 -0
- chia/full_node/hint_store.py +93 -0
- chia/full_node/mempool.py +589 -0
- chia/full_node/mempool_check_conditions.py +146 -0
- chia/full_node/mempool_manager.py +853 -0
- chia/full_node/pending_tx_cache.py +112 -0
- chia/full_node/puzzles/__init__.py +0 -0
- chia/full_node/puzzles/block_program_zero.clsp +14 -0
- chia/full_node/puzzles/block_program_zero.clsp.hex +1 -0
- chia/full_node/puzzles/decompress_coin_spend_entry.clsp +5 -0
- chia/full_node/puzzles/decompress_coin_spend_entry.clsp.hex +1 -0
- chia/full_node/puzzles/decompress_coin_spend_entry_with_prefix.clsp +7 -0
- chia/full_node/puzzles/decompress_coin_spend_entry_with_prefix.clsp.hex +1 -0
- chia/full_node/puzzles/decompress_puzzle.clsp +6 -0
- chia/full_node/puzzles/decompress_puzzle.clsp.hex +1 -0
- chia/full_node/signage_point.py +16 -0
- chia/full_node/subscriptions.py +247 -0
- chia/full_node/sync_store.py +146 -0
- chia/full_node/tx_processing_queue.py +78 -0
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +1720 -0
- chia/harvester/__init__.py +0 -0
- chia/harvester/harvester.py +272 -0
- chia/harvester/harvester_api.py +380 -0
- chia/introducer/__init__.py +0 -0
- chia/introducer/introducer.py +122 -0
- chia/introducer/introducer_api.py +70 -0
- chia/legacy/__init__.py +0 -0
- chia/legacy/keyring.py +155 -0
- chia/plot_sync/__init__.py +0 -0
- chia/plot_sync/delta.py +61 -0
- chia/plot_sync/exceptions.py +56 -0
- chia/plot_sync/receiver.py +386 -0
- chia/plot_sync/sender.py +340 -0
- chia/plot_sync/util.py +43 -0
- chia/plotters/__init__.py +0 -0
- chia/plotters/bladebit.py +388 -0
- chia/plotters/chiapos.py +63 -0
- chia/plotters/madmax.py +224 -0
- chia/plotters/plotters.py +577 -0
- chia/plotters/plotters_util.py +133 -0
- chia/plotting/__init__.py +0 -0
- chia/plotting/cache.py +213 -0
- chia/plotting/check_plots.py +283 -0
- chia/plotting/create_plots.py +278 -0
- chia/plotting/manager.py +436 -0
- chia/plotting/util.py +336 -0
- chia/pools/__init__.py +0 -0
- chia/pools/pool_config.py +110 -0
- chia/pools/pool_puzzles.py +459 -0
- chia/pools/pool_wallet.py +933 -0
- chia/pools/pool_wallet_info.py +118 -0
- chia/pools/puzzles/__init__.py +0 -0
- chia/pools/puzzles/pool_member_innerpuz.clsp +70 -0
- chia/pools/puzzles/pool_member_innerpuz.clsp.hex +1 -0
- chia/pools/puzzles/pool_waitingroom_innerpuz.clsp +69 -0
- chia/pools/puzzles/pool_waitingroom_innerpuz.clsp.hex +1 -0
- chia/protocols/__init__.py +0 -0
- chia/protocols/farmer_protocol.py +102 -0
- chia/protocols/full_node_protocol.py +219 -0
- chia/protocols/harvester_protocol.py +216 -0
- chia/protocols/introducer_protocol.py +25 -0
- chia/protocols/pool_protocol.py +177 -0
- chia/protocols/protocol_message_types.py +139 -0
- chia/protocols/protocol_state_machine.py +87 -0
- chia/protocols/protocol_timing.py +8 -0
- chia/protocols/shared_protocol.py +86 -0
- chia/protocols/timelord_protocol.py +93 -0
- chia/protocols/wallet_protocol.py +401 -0
- chia/py.typed +0 -0
- chia/rpc/__init__.py +0 -0
- chia/rpc/crawler_rpc_api.py +80 -0
- chia/rpc/data_layer_rpc_api.py +644 -0
- chia/rpc/data_layer_rpc_client.py +188 -0
- chia/rpc/data_layer_rpc_util.py +58 -0
- chia/rpc/farmer_rpc_api.py +365 -0
- chia/rpc/farmer_rpc_client.py +86 -0
- chia/rpc/full_node_rpc_api.py +959 -0
- chia/rpc/full_node_rpc_client.py +292 -0
- chia/rpc/harvester_rpc_api.py +141 -0
- chia/rpc/harvester_rpc_client.py +54 -0
- chia/rpc/rpc_client.py +164 -0
- chia/rpc/rpc_server.py +521 -0
- chia/rpc/timelord_rpc_api.py +32 -0
- chia/rpc/util.py +93 -0
- chia/rpc/wallet_request_types.py +904 -0
- chia/rpc/wallet_rpc_api.py +4943 -0
- chia/rpc/wallet_rpc_client.py +1814 -0
- chia/seeder/__init__.py +0 -0
- chia/seeder/crawl_store.py +425 -0
- chia/seeder/crawler.py +410 -0
- chia/seeder/crawler_api.py +135 -0
- chia/seeder/dns_server.py +593 -0
- chia/seeder/peer_record.py +146 -0
- chia/seeder/start_crawler.py +92 -0
- chia/server/__init__.py +0 -0
- chia/server/address_manager.py +658 -0
- chia/server/address_manager_store.py +237 -0
- chia/server/api_protocol.py +116 -0
- chia/server/capabilities.py +24 -0
- chia/server/chia_policy.py +346 -0
- chia/server/introducer_peers.py +76 -0
- chia/server/node_discovery.py +714 -0
- chia/server/outbound_message.py +33 -0
- chia/server/rate_limit_numbers.py +214 -0
- chia/server/rate_limits.py +153 -0
- chia/server/server.py +741 -0
- chia/server/signal_handlers.py +120 -0
- chia/server/ssl_context.py +32 -0
- chia/server/start_data_layer.py +151 -0
- chia/server/start_farmer.py +98 -0
- chia/server/start_full_node.py +112 -0
- chia/server/start_harvester.py +93 -0
- chia/server/start_introducer.py +81 -0
- chia/server/start_service.py +316 -0
- chia/server/start_timelord.py +89 -0
- chia/server/start_wallet.py +113 -0
- chia/server/upnp.py +118 -0
- chia/server/ws_connection.py +766 -0
- chia/simulator/__init__.py +0 -0
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +2054 -0
- chia/simulator/full_node_simulator.py +794 -0
- chia/simulator/keyring.py +128 -0
- chia/simulator/setup_services.py +506 -0
- chia/simulator/simulator_constants.py +13 -0
- chia/simulator/simulator_full_node_rpc_api.py +99 -0
- chia/simulator/simulator_full_node_rpc_client.py +60 -0
- chia/simulator/simulator_protocol.py +29 -0
- chia/simulator/simulator_test_tools.py +164 -0
- chia/simulator/socket.py +24 -0
- chia/simulator/ssl_certs.py +114 -0
- chia/simulator/ssl_certs_1.py +697 -0
- chia/simulator/ssl_certs_10.py +697 -0
- chia/simulator/ssl_certs_2.py +697 -0
- chia/simulator/ssl_certs_3.py +697 -0
- chia/simulator/ssl_certs_4.py +697 -0
- chia/simulator/ssl_certs_5.py +697 -0
- chia/simulator/ssl_certs_6.py +697 -0
- chia/simulator/ssl_certs_7.py +697 -0
- chia/simulator/ssl_certs_8.py +697 -0
- chia/simulator/ssl_certs_9.py +697 -0
- chia/simulator/start_simulator.py +143 -0
- chia/simulator/wallet_tools.py +246 -0
- chia/ssl/__init__.py +0 -0
- chia/ssl/chia_ca.crt +19 -0
- chia/ssl/chia_ca.key +28 -0
- chia/ssl/create_ssl.py +249 -0
- chia/ssl/dst_root_ca.pem +20 -0
- chia/timelord/__init__.py +0 -0
- chia/timelord/iters_from_block.py +50 -0
- chia/timelord/timelord.py +1226 -0
- chia/timelord/timelord_api.py +138 -0
- chia/timelord/timelord_launcher.py +190 -0
- chia/timelord/timelord_state.py +244 -0
- chia/timelord/types.py +22 -0
- chia/types/__init__.py +0 -0
- chia/types/aliases.py +35 -0
- chia/types/block_protocol.py +20 -0
- chia/types/blockchain_format/__init__.py +0 -0
- chia/types/blockchain_format/classgroup.py +5 -0
- chia/types/blockchain_format/coin.py +28 -0
- chia/types/blockchain_format/foliage.py +8 -0
- chia/types/blockchain_format/pool_target.py +5 -0
- chia/types/blockchain_format/program.py +269 -0
- chia/types/blockchain_format/proof_of_space.py +135 -0
- chia/types/blockchain_format/reward_chain_block.py +6 -0
- chia/types/blockchain_format/serialized_program.py +5 -0
- chia/types/blockchain_format/sized_bytes.py +11 -0
- chia/types/blockchain_format/slots.py +9 -0
- chia/types/blockchain_format/sub_epoch_summary.py +5 -0
- chia/types/blockchain_format/tree_hash.py +72 -0
- chia/types/blockchain_format/vdf.py +86 -0
- chia/types/clvm_cost.py +13 -0
- chia/types/coin_record.py +43 -0
- chia/types/coin_spend.py +115 -0
- chia/types/condition_opcodes.py +73 -0
- chia/types/condition_with_args.py +16 -0
- chia/types/eligible_coin_spends.py +365 -0
- chia/types/end_of_slot_bundle.py +5 -0
- chia/types/fee_rate.py +38 -0
- chia/types/full_block.py +5 -0
- chia/types/generator_types.py +13 -0
- chia/types/header_block.py +5 -0
- chia/types/internal_mempool_item.py +18 -0
- chia/types/mempool_inclusion_status.py +9 -0
- chia/types/mempool_item.py +85 -0
- chia/types/mempool_submission_status.py +30 -0
- chia/types/mojos.py +7 -0
- chia/types/peer_info.py +64 -0
- chia/types/signing_mode.py +29 -0
- chia/types/spend_bundle.py +30 -0
- chia/types/spend_bundle_conditions.py +7 -0
- chia/types/transaction_queue_entry.py +55 -0
- chia/types/unfinished_block.py +5 -0
- chia/types/unfinished_header_block.py +37 -0
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +49 -0
- chia/util/__init__.py +0 -0
- chia/util/action_scope.py +168 -0
- chia/util/async_pool.py +226 -0
- chia/util/augmented_chain.py +134 -0
- chia/util/batches.py +42 -0
- chia/util/bech32m.py +126 -0
- chia/util/beta_metrics.py +119 -0
- chia/util/block_cache.py +56 -0
- chia/util/byte_types.py +12 -0
- chia/util/check_fork_next_block.py +33 -0
- chia/util/chia_logging.py +144 -0
- chia/util/chia_version.py +33 -0
- chia/util/collection.py +17 -0
- chia/util/condition_tools.py +201 -0
- chia/util/config.py +367 -0
- chia/util/cpu.py +22 -0
- chia/util/db_synchronous.py +23 -0
- chia/util/db_version.py +32 -0
- chia/util/db_wrapper.py +430 -0
- chia/util/default_root.py +27 -0
- chia/util/dump_keyring.py +93 -0
- chia/util/english.txt +2048 -0
- chia/util/errors.py +353 -0
- chia/util/file_keyring.py +469 -0
- chia/util/files.py +97 -0
- chia/util/full_block_utils.py +345 -0
- chia/util/generator_tools.py +72 -0
- chia/util/hash.py +31 -0
- chia/util/initial-config.yaml +694 -0
- chia/util/inline_executor.py +26 -0
- chia/util/ints.py +19 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +37 -0
- chia/util/keychain.py +676 -0
- chia/util/keyring_wrapper.py +327 -0
- chia/util/limited_semaphore.py +41 -0
- chia/util/lock.py +49 -0
- chia/util/log_exceptions.py +32 -0
- chia/util/logging.py +36 -0
- chia/util/lru_cache.py +31 -0
- chia/util/math.py +20 -0
- chia/util/network.py +182 -0
- chia/util/paginator.py +48 -0
- chia/util/path.py +31 -0
- chia/util/permissions.py +20 -0
- chia/util/prev_transaction_block.py +21 -0
- chia/util/priority_mutex.py +95 -0
- chia/util/profiler.py +197 -0
- chia/util/recursive_replace.py +24 -0
- chia/util/safe_cancel_task.py +16 -0
- chia/util/service_groups.py +47 -0
- chia/util/setproctitle.py +22 -0
- chia/util/significant_bits.py +32 -0
- chia/util/ssl_check.py +213 -0
- chia/util/streamable.py +642 -0
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +382 -0
- chia/util/timing.py +67 -0
- chia/util/vdf_prover.py +30 -0
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +66 -0
- chia/wallet/__init__.py +0 -0
- chia/wallet/cat_wallet/__init__.py +0 -0
- chia/wallet/cat_wallet/cat_constants.py +75 -0
- chia/wallet/cat_wallet/cat_info.py +47 -0
- chia/wallet/cat_wallet/cat_outer_puzzle.py +120 -0
- chia/wallet/cat_wallet/cat_utils.py +164 -0
- chia/wallet/cat_wallet/cat_wallet.py +855 -0
- chia/wallet/cat_wallet/dao_cat_info.py +28 -0
- chia/wallet/cat_wallet/dao_cat_wallet.py +669 -0
- chia/wallet/cat_wallet/lineage_store.py +74 -0
- chia/wallet/cat_wallet/puzzles/__init__.py +0 -0
- chia/wallet/cat_wallet/puzzles/cat_truths.clib +31 -0
- chia/wallet/cat_wallet/puzzles/cat_v2.clsp +397 -0
- chia/wallet/cat_wallet/puzzles/cat_v2.clsp.hex +1 -0
- chia/wallet/cat_wallet/puzzles/delegated_tail.clsp +25 -0
- chia/wallet/cat_wallet/puzzles/delegated_tail.clsp.hex +1 -0
- chia/wallet/cat_wallet/puzzles/everything_with_signature.clsp +15 -0
- chia/wallet/cat_wallet/puzzles/everything_with_signature.clsp.hex +1 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id.clsp +26 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id.clsp.hex +1 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id_or_singleton.clsp +42 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id_or_singleton.clsp.hex +1 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_puzzle_hash.clsp +24 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_puzzle_hash.clsp.hex +1 -0
- chia/wallet/coin_selection.py +188 -0
- chia/wallet/conditions.py +1512 -0
- chia/wallet/dao_wallet/__init__.py +0 -0
- chia/wallet/dao_wallet/dao_info.py +61 -0
- chia/wallet/dao_wallet/dao_utils.py +811 -0
- chia/wallet/dao_wallet/dao_wallet.py +2119 -0
- chia/wallet/db_wallet/__init__.py +0 -0
- chia/wallet/db_wallet/db_wallet_puzzles.py +111 -0
- chia/wallet/derivation_record.py +30 -0
- chia/wallet/derive_keys.py +146 -0
- chia/wallet/did_wallet/__init__.py +0 -0
- chia/wallet/did_wallet/did_info.py +39 -0
- chia/wallet/did_wallet/did_wallet.py +1494 -0
- chia/wallet/did_wallet/did_wallet_puzzles.py +221 -0
- chia/wallet/did_wallet/puzzles/__init__.py +0 -0
- chia/wallet/did_wallet/puzzles/did_innerpuz.clsp +135 -0
- chia/wallet/did_wallet/puzzles/did_innerpuz.clsp.hex +1 -0
- chia/wallet/driver_protocol.py +26 -0
- chia/wallet/key_val_store.py +55 -0
- chia/wallet/lineage_proof.py +58 -0
- chia/wallet/nft_wallet/__init__.py +0 -0
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +92 -0
- chia/wallet/nft_wallet/nft_info.py +120 -0
- chia/wallet/nft_wallet/nft_puzzles.py +305 -0
- chia/wallet/nft_wallet/nft_wallet.py +1687 -0
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +101 -0
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +6 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +6 -0
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +30 -0
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +28 -0
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +100 -0
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +78 -0
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +74 -0
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +1 -0
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +101 -0
- chia/wallet/nft_wallet/transfer_program_puzzle.py +82 -0
- chia/wallet/nft_wallet/uncurry_nft.py +217 -0
- chia/wallet/notification_manager.py +117 -0
- chia/wallet/notification_store.py +178 -0
- chia/wallet/outer_puzzles.py +84 -0
- chia/wallet/payment.py +33 -0
- chia/wallet/puzzle_drivers.py +118 -0
- chia/wallet/puzzles/__init__.py +0 -0
- chia/wallet/puzzles/augmented_condition.clsp +13 -0
- chia/wallet/puzzles/augmented_condition.clsp.hex +1 -0
- chia/wallet/puzzles/clawback/__init__.py +0 -0
- chia/wallet/puzzles/clawback/drivers.py +188 -0
- chia/wallet/puzzles/clawback/metadata.py +38 -0
- chia/wallet/puzzles/clawback/puzzle_decorator.py +67 -0
- chia/wallet/puzzles/condition_codes.clib +77 -0
- chia/wallet/puzzles/curry-and-treehash.clib +102 -0
- chia/wallet/puzzles/curry.clib +135 -0
- chia/wallet/puzzles/curry_by_index.clib +16 -0
- chia/wallet/puzzles/dao_cat_eve.clsp +17 -0
- chia/wallet/puzzles/dao_cat_eve.clsp.hex +1 -0
- chia/wallet/puzzles/dao_cat_launcher.clsp +36 -0
- chia/wallet/puzzles/dao_cat_launcher.clsp.hex +1 -0
- chia/wallet/puzzles/dao_finished_state.clsp +35 -0
- chia/wallet/puzzles/dao_finished_state.clsp.hex +1 -0
- chia/wallet/puzzles/dao_finished_state.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_lockup.clsp +288 -0
- chia/wallet/puzzles/dao_lockup.clsp.hex +1 -0
- chia/wallet/puzzles/dao_lockup.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_proposal.clsp +377 -0
- chia/wallet/puzzles/dao_proposal.clsp.hex +1 -0
- chia/wallet/puzzles/dao_proposal.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_proposal_timer.clsp +78 -0
- chia/wallet/puzzles/dao_proposal_timer.clsp.hex +1 -0
- chia/wallet/puzzles/dao_proposal_timer.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_proposal_validator.clsp +87 -0
- chia/wallet/puzzles/dao_proposal_validator.clsp.hex +1 -0
- chia/wallet/puzzles/dao_proposal_validator.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_spend_p2_singleton_v2.clsp +240 -0
- chia/wallet/puzzles/dao_spend_p2_singleton_v2.clsp.hex +1 -0
- chia/wallet/puzzles/dao_spend_p2_singleton_v2.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_treasury.clsp +115 -0
- chia/wallet/puzzles/dao_treasury.clsp.hex +1 -0
- chia/wallet/puzzles/dao_update_proposal.clsp +44 -0
- chia/wallet/puzzles/dao_update_proposal.clsp.hex +1 -0
- chia/wallet/puzzles/deployed_puzzle_hashes.json +67 -0
- chia/wallet/puzzles/json.clib +25 -0
- chia/wallet/puzzles/load_clvm.py +161 -0
- chia/wallet/puzzles/merkle_utils.clib +18 -0
- chia/wallet/puzzles/notification.clsp +7 -0
- chia/wallet/puzzles/notification.clsp.hex +1 -0
- chia/wallet/puzzles/p2_1_of_n.clsp +22 -0
- chia/wallet/puzzles/p2_1_of_n.clsp.hex +1 -0
- chia/wallet/puzzles/p2_conditions.clsp +3 -0
- chia/wallet/puzzles/p2_conditions.clsp.hex +1 -0
- chia/wallet/puzzles/p2_conditions.py +26 -0
- chia/wallet/puzzles/p2_delegated_conditions.clsp +18 -0
- chia/wallet/puzzles/p2_delegated_conditions.clsp.hex +1 -0
- chia/wallet/puzzles/p2_delegated_conditions.py +21 -0
- chia/wallet/puzzles/p2_delegated_puzzle.clsp +19 -0
- chia/wallet/puzzles/p2_delegated_puzzle.clsp.hex +1 -0
- chia/wallet/puzzles/p2_delegated_puzzle.py +34 -0
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.clsp +91 -0
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.clsp.hex +1 -0
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +160 -0
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.clsp +108 -0
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.clsp.hex +1 -0
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +21 -0
- chia/wallet/puzzles/p2_parent.clsp +19 -0
- chia/wallet/puzzles/p2_parent.clsp.hex +1 -0
- chia/wallet/puzzles/p2_puzzle_hash.clsp +18 -0
- chia/wallet/puzzles/p2_puzzle_hash.clsp.hex +1 -0
- chia/wallet/puzzles/p2_puzzle_hash.py +27 -0
- chia/wallet/puzzles/p2_singleton.clsp +30 -0
- chia/wallet/puzzles/p2_singleton.clsp.hex +1 -0
- chia/wallet/puzzles/p2_singleton_aggregator.clsp +81 -0
- chia/wallet/puzzles/p2_singleton_aggregator.clsp.hex +1 -0
- chia/wallet/puzzles/p2_singleton_or_delayed_puzhash.clsp +50 -0
- chia/wallet/puzzles/p2_singleton_or_delayed_puzhash.clsp.hex +1 -0
- chia/wallet/puzzles/p2_singleton_via_delegated_puzzle.clsp +47 -0
- chia/wallet/puzzles/p2_singleton_via_delegated_puzzle.clsp.hex +1 -0
- chia/wallet/puzzles/puzzle_utils.py +34 -0
- chia/wallet/puzzles/settlement_payments.clsp +49 -0
- chia/wallet/puzzles/settlement_payments.clsp.hex +1 -0
- chia/wallet/puzzles/sha256tree.clib +11 -0
- chia/wallet/puzzles/singleton_launcher.clsp +16 -0
- chia/wallet/puzzles/singleton_launcher.clsp.hex +1 -0
- chia/wallet/puzzles/singleton_top_layer.clsp +177 -0
- chia/wallet/puzzles/singleton_top_layer.clsp.hex +1 -0
- chia/wallet/puzzles/singleton_top_layer.py +296 -0
- chia/wallet/puzzles/singleton_top_layer_v1_1.clsp +107 -0
- chia/wallet/puzzles/singleton_top_layer_v1_1.clsp.hex +1 -0
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +345 -0
- chia/wallet/puzzles/singleton_truths.clib +21 -0
- chia/wallet/puzzles/tails.py +348 -0
- chia/wallet/puzzles/utility_macros.clib +48 -0
- chia/wallet/signer_protocol.py +125 -0
- chia/wallet/singleton.py +106 -0
- chia/wallet/singleton_record.py +30 -0
- chia/wallet/trade_manager.py +1102 -0
- chia/wallet/trade_record.py +67 -0
- chia/wallet/trading/__init__.py +0 -0
- chia/wallet/trading/offer.py +702 -0
- chia/wallet/trading/trade_status.py +13 -0
- chia/wallet/trading/trade_store.py +526 -0
- chia/wallet/transaction_record.py +158 -0
- chia/wallet/transaction_sorting.py +14 -0
- chia/wallet/uncurried_puzzle.py +17 -0
- chia/wallet/util/__init__.py +0 -0
- chia/wallet/util/address_type.py +55 -0
- chia/wallet/util/blind_signer_tl.py +164 -0
- chia/wallet/util/clvm_streamable.py +203 -0
- chia/wallet/util/compute_hints.py +66 -0
- chia/wallet/util/compute_memos.py +43 -0
- chia/wallet/util/curry_and_treehash.py +91 -0
- chia/wallet/util/debug_spend_bundle.py +232 -0
- chia/wallet/util/merkle_tree.py +100 -0
- chia/wallet/util/merkle_utils.py +102 -0
- chia/wallet/util/new_peak_queue.py +82 -0
- chia/wallet/util/notifications.py +12 -0
- chia/wallet/util/peer_request_cache.py +174 -0
- chia/wallet/util/pprint.py +39 -0
- chia/wallet/util/puzzle_compression.py +95 -0
- chia/wallet/util/puzzle_decorator.py +100 -0
- chia/wallet/util/puzzle_decorator_type.py +7 -0
- chia/wallet/util/query_filter.py +59 -0
- chia/wallet/util/transaction_type.py +23 -0
- chia/wallet/util/tx_config.py +158 -0
- chia/wallet/util/wallet_sync_utils.py +351 -0
- chia/wallet/util/wallet_types.py +72 -0
- chia/wallet/vc_wallet/__init__.py +0 -0
- chia/wallet/vc_wallet/cr_cat_drivers.py +664 -0
- chia/wallet/vc_wallet/cr_cat_wallet.py +877 -0
- chia/wallet/vc_wallet/cr_outer_puzzle.py +102 -0
- chia/wallet/vc_wallet/cr_puzzles/__init__.py +0 -0
- chia/wallet/vc_wallet/cr_puzzles/conditions_w_fee_announce.clsp +3 -0
- chia/wallet/vc_wallet/cr_puzzles/conditions_w_fee_announce.clsp.hex +1 -0
- chia/wallet/vc_wallet/cr_puzzles/credential_restriction.clsp +304 -0
- chia/wallet/vc_wallet/cr_puzzles/credential_restriction.clsp.hex +1 -0
- chia/wallet/vc_wallet/cr_puzzles/flag_proofs_checker.clsp +45 -0
- chia/wallet/vc_wallet/cr_puzzles/flag_proofs_checker.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_drivers.py +838 -0
- chia/wallet/vc_wallet/vc_puzzles/__init__.py +0 -0
- chia/wallet/vc_wallet/vc_puzzles/covenant_layer.clsp +30 -0
- chia/wallet/vc_wallet/vc_puzzles/covenant_layer.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_covenant_morpher.clsp +75 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_covenant_morpher.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_transfer_program_covenant_adapter.clsp +32 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_transfer_program_covenant_adapter.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_update_metadata_with_DID.clsp +80 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_update_metadata_with_DID.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/exigent_metadata_layer.clsp +163 -0
- chia/wallet/vc_wallet/vc_puzzles/exigent_metadata_layer.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/p2_announced_delegated_puzzle.clsp +16 -0
- chia/wallet/vc_wallet/vc_puzzles/p2_announced_delegated_puzzle.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/standard_vc_backdoor_puzzle.clsp +74 -0
- chia/wallet/vc_wallet/vc_puzzles/standard_vc_backdoor_puzzle.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/std_parent_morpher.clsp +23 -0
- chia/wallet/vc_wallet/vc_puzzles/std_parent_morpher.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/viral_backdoor.clsp +64 -0
- chia/wallet/vc_wallet/vc_puzzles/viral_backdoor.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_store.py +263 -0
- chia/wallet/vc_wallet/vc_wallet.py +638 -0
- chia/wallet/wallet.py +698 -0
- chia/wallet/wallet_action_scope.py +96 -0
- chia/wallet/wallet_blockchain.py +244 -0
- chia/wallet/wallet_coin_record.py +72 -0
- chia/wallet/wallet_coin_store.py +351 -0
- chia/wallet/wallet_info.py +35 -0
- chia/wallet/wallet_interested_store.py +188 -0
- chia/wallet/wallet_nft_store.py +279 -0
- chia/wallet/wallet_node.py +1765 -0
- chia/wallet/wallet_node_api.py +207 -0
- chia/wallet/wallet_pool_store.py +119 -0
- chia/wallet/wallet_protocol.py +90 -0
- chia/wallet/wallet_puzzle_store.py +396 -0
- chia/wallet/wallet_retry_store.py +70 -0
- chia/wallet/wallet_singleton_store.py +259 -0
- chia/wallet/wallet_spend_bundle.py +25 -0
- chia/wallet/wallet_state_manager.py +2819 -0
- chia/wallet/wallet_transaction_store.py +496 -0
- chia/wallet/wallet_user_store.py +110 -0
- chia/wallet/wallet_weight_proof_handler.py +126 -0
- chia_blockchain-2.5.1rc1.dist-info/LICENSE +201 -0
- chia_blockchain-2.5.1rc1.dist-info/METADATA +156 -0
- chia_blockchain-2.5.1rc1.dist-info/RECORD +1042 -0
- chia_blockchain-2.5.1rc1.dist-info/WHEEL +4 -0
- chia_blockchain-2.5.1rc1.dist-info/entry_points.txt +17 -0
- mozilla-ca/cacert.pem +3611 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Union
|
|
4
|
+
|
|
5
|
+
from chia_rs import Coin
|
|
6
|
+
|
|
7
|
+
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
8
|
+
from chia.util.hash import std_hash
|
|
9
|
+
from chia.util.ints import uint64
|
|
10
|
+
|
|
11
|
+
__all__ = ["Coin", "coin_as_list", "hash_coin_ids"]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def coin_as_list(c: Coin) -> list[Union[bytes32, uint64]]:
|
|
15
|
+
return [c.parent_coin_info, c.puzzle_hash, uint64(c.amount)]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def hash_coin_ids(coin_ids: list[bytes32]) -> bytes32:
|
|
19
|
+
if len(coin_ids) == 1:
|
|
20
|
+
return std_hash(coin_ids[0])
|
|
21
|
+
|
|
22
|
+
coin_ids.sort(reverse=True)
|
|
23
|
+
buffer = bytearray()
|
|
24
|
+
|
|
25
|
+
for name in coin_ids:
|
|
26
|
+
buffer.extend(name)
|
|
27
|
+
|
|
28
|
+
return std_hash(buffer, skip_bytes_conversion=True)
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import io
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Callable, Optional, TypeVar
|
|
5
|
+
|
|
6
|
+
from chia_rs import MEMPOOL_MODE, run_chia_program, tree_hash
|
|
7
|
+
from clvm.casts import int_from_bytes
|
|
8
|
+
from clvm.CLVMObject import CLVMStorage
|
|
9
|
+
from clvm.EvalError import EvalError
|
|
10
|
+
from clvm.serialize import sexp_from_stream, sexp_to_stream
|
|
11
|
+
from clvm.SExp import SExp
|
|
12
|
+
|
|
13
|
+
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
14
|
+
from chia.types.blockchain_format.tree_hash import sha256_treehash
|
|
15
|
+
from chia.util.byte_types import hexstr_to_bytes
|
|
16
|
+
from chia.util.hash import std_hash
|
|
17
|
+
|
|
18
|
+
INFINITE_COST = 11000000000
|
|
19
|
+
|
|
20
|
+
DEFAULT_FLAGS = MEMPOOL_MODE
|
|
21
|
+
|
|
22
|
+
T_CLVMStorage = TypeVar("T_CLVMStorage", bound=CLVMStorage)
|
|
23
|
+
T_Program = TypeVar("T_Program", bound="Program")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class Program(SExp):
|
|
27
|
+
"""
|
|
28
|
+
A thin wrapper around s-expression data intended to be invoked with "eval".
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
@classmethod
|
|
32
|
+
def parse(cls: type[T_Program], f) -> T_Program:
|
|
33
|
+
return sexp_from_stream(f, cls.to)
|
|
34
|
+
|
|
35
|
+
def stream(self, f):
|
|
36
|
+
sexp_to_stream(self, f)
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def from_bytes(cls: type[T_Program], blob: bytes) -> T_Program:
|
|
40
|
+
# this runs the program "1", which just returns the first argument.
|
|
41
|
+
# the first argument is the buffer we want to parse. This effectively
|
|
42
|
+
# leverages the rust parser and LazyNode, making it a lot faster to
|
|
43
|
+
# parse serialized programs into a python compatible structure
|
|
44
|
+
_cost, ret = run_chia_program(
|
|
45
|
+
b"\x01",
|
|
46
|
+
blob,
|
|
47
|
+
50,
|
|
48
|
+
0,
|
|
49
|
+
)
|
|
50
|
+
return cls.to(ret)
|
|
51
|
+
|
|
52
|
+
@classmethod
|
|
53
|
+
def fromhex(cls: type[T_Program], hexstr: str) -> T_Program:
|
|
54
|
+
return cls.from_bytes(hexstr_to_bytes(hexstr))
|
|
55
|
+
|
|
56
|
+
@classmethod
|
|
57
|
+
def from_json_dict(cls: type[Program], json_dict: Any) -> Program:
|
|
58
|
+
if isinstance(json_dict, cls):
|
|
59
|
+
return json_dict
|
|
60
|
+
item = hexstr_to_bytes(json_dict)
|
|
61
|
+
return cls.from_bytes(item)
|
|
62
|
+
|
|
63
|
+
def to_json_dict(self) -> str:
|
|
64
|
+
return f"0x{self}"
|
|
65
|
+
|
|
66
|
+
def __bytes__(self) -> bytes:
|
|
67
|
+
f = io.BytesIO()
|
|
68
|
+
self.stream(f)
|
|
69
|
+
return f.getvalue()
|
|
70
|
+
|
|
71
|
+
def __str__(self) -> str:
|
|
72
|
+
return bytes(self).hex()
|
|
73
|
+
|
|
74
|
+
def at(self, position: str) -> Program:
|
|
75
|
+
"""
|
|
76
|
+
Take a string of only `f` and `r` characters and follow the corresponding path.
|
|
77
|
+
|
|
78
|
+
Example:
|
|
79
|
+
|
|
80
|
+
`assert Program.to(17) == Program.to([10, 20, 30, [15, 17], 40, 50]).at("rrrfrf")`
|
|
81
|
+
|
|
82
|
+
"""
|
|
83
|
+
v = self
|
|
84
|
+
for c in position.lower():
|
|
85
|
+
if c == "f":
|
|
86
|
+
v = v.first()
|
|
87
|
+
elif c == "r":
|
|
88
|
+
v = v.rest()
|
|
89
|
+
else:
|
|
90
|
+
raise ValueError(f"`at` got illegal character `{c}`. Only `f` & `r` allowed")
|
|
91
|
+
return v
|
|
92
|
+
|
|
93
|
+
def replace(self: T_Program, **kwargs: Any) -> T_Program:
|
|
94
|
+
"""
|
|
95
|
+
Create a new program replacing the given paths (using `at` syntax).
|
|
96
|
+
Example:
|
|
97
|
+
```
|
|
98
|
+
>>> p1 = Program.to([100, 200, 300])
|
|
99
|
+
>>> print(p1.replace(f=105) == Program.to([105, 200, 300]))
|
|
100
|
+
True
|
|
101
|
+
>>> print(p1.replace(rrf=[301, 302]) == Program.to([100, 200, [301, 302]]))
|
|
102
|
+
True
|
|
103
|
+
>>> print(p1.replace(f=105, rrf=[301, 302]) == Program.to([105, 200, [301, 302]]))
|
|
104
|
+
True
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
This is a convenience method intended for use in the wallet or command-line hacks where
|
|
108
|
+
it would be easier to morph elements of an existing clvm object tree than to rebuild
|
|
109
|
+
one from scratch.
|
|
110
|
+
|
|
111
|
+
Note that `Program` objects are immutable. This function returns a new object; the
|
|
112
|
+
original is left as-is.
|
|
113
|
+
"""
|
|
114
|
+
return _sexp_replace(self, self.to, **kwargs)
|
|
115
|
+
|
|
116
|
+
def get_tree_hash_precalc(self, *args: bytes32) -> bytes32:
|
|
117
|
+
"""
|
|
118
|
+
Any values in `args` that appear in the tree
|
|
119
|
+
are presumed to have been hashed already.
|
|
120
|
+
"""
|
|
121
|
+
return sha256_treehash(self, set(args))
|
|
122
|
+
|
|
123
|
+
def get_tree_hash(self) -> bytes32:
|
|
124
|
+
return bytes32(tree_hash(bytes(self)))
|
|
125
|
+
|
|
126
|
+
def _run(self, max_cost: int, flags: int, args: Any) -> tuple[int, Program]:
|
|
127
|
+
prog_args = Program.to(args)
|
|
128
|
+
cost, r = run_chia_program(self.as_bin(), prog_args.as_bin(), max_cost, flags)
|
|
129
|
+
return cost, Program.to(r)
|
|
130
|
+
|
|
131
|
+
def run_with_cost(self, max_cost: int, args: Any, flags=DEFAULT_FLAGS) -> tuple[int, Program]:
|
|
132
|
+
# when running puzzles in the wallet, default to enabling all soft-forks
|
|
133
|
+
# as well as enabling mempool-mode (i.e. strict mode)
|
|
134
|
+
return self._run(max_cost, flags, args)
|
|
135
|
+
|
|
136
|
+
def run(self, args: Any, max_cost=INFINITE_COST, flags=DEFAULT_FLAGS) -> Program:
|
|
137
|
+
_cost, r = self._run(max_cost, flags, args)
|
|
138
|
+
return r
|
|
139
|
+
|
|
140
|
+
def run_with_flags(self, max_cost: int, flags: int, args: Any) -> tuple[int, Program]:
|
|
141
|
+
return self._run(max_cost, flags, args)
|
|
142
|
+
|
|
143
|
+
# Replicates the curry function from clvm_tools, taking advantage of *args
|
|
144
|
+
# being a list. We iterate through args in reverse building the code to
|
|
145
|
+
# create a clvm list.
|
|
146
|
+
#
|
|
147
|
+
# Given arguments to a function addressable by the '1' reference in clvm
|
|
148
|
+
#
|
|
149
|
+
# fixed_args = 1
|
|
150
|
+
#
|
|
151
|
+
# Each arg is prepended as fixed_args = (c (q . arg) fixed_args)
|
|
152
|
+
#
|
|
153
|
+
# The resulting argument list is interpreted with apply (2)
|
|
154
|
+
#
|
|
155
|
+
# (2 (1 . self) rest)
|
|
156
|
+
#
|
|
157
|
+
# Resulting in a function which places its own arguments after those
|
|
158
|
+
# curried in in the form of a proper list.
|
|
159
|
+
def curry(self, *args) -> Program:
|
|
160
|
+
fixed_args: Any = 1
|
|
161
|
+
for arg in reversed(args):
|
|
162
|
+
fixed_args = [4, (1, arg), fixed_args]
|
|
163
|
+
return Program.to([2, (1, self), fixed_args])
|
|
164
|
+
|
|
165
|
+
def uncurry(self) -> tuple[Program, Program]:
|
|
166
|
+
def match(o: CLVMStorage, expected: bytes) -> None:
|
|
167
|
+
if o.atom != expected:
|
|
168
|
+
raise ValueError(f"expected: {expected.hex()}")
|
|
169
|
+
|
|
170
|
+
try:
|
|
171
|
+
# (2 (1 . <mod>) <args>)
|
|
172
|
+
ev, quoted_inner, args_list = self.as_iter()
|
|
173
|
+
match(ev, b"\x02")
|
|
174
|
+
if TYPE_CHECKING:
|
|
175
|
+
# this being False is presently handled in the TypeError exception handler below
|
|
176
|
+
assert quoted_inner.pair is not None
|
|
177
|
+
match(quoted_inner.pair[0], b"\x01")
|
|
178
|
+
mod = quoted_inner.pair[1]
|
|
179
|
+
args = []
|
|
180
|
+
while args_list.pair is not None:
|
|
181
|
+
# (4 (1 . <arg>) <rest>)
|
|
182
|
+
cons, quoted_arg, rest = args_list.as_iter()
|
|
183
|
+
match(cons, b"\x04")
|
|
184
|
+
if TYPE_CHECKING:
|
|
185
|
+
# this being False is presently handled in the TypeError exception handler below
|
|
186
|
+
assert quoted_arg.pair is not None
|
|
187
|
+
match(quoted_arg.pair[0], b"\x01")
|
|
188
|
+
args.append(quoted_arg.pair[1])
|
|
189
|
+
args_list = rest
|
|
190
|
+
match(args_list, b"\x01")
|
|
191
|
+
return Program.to(mod), Program.to(args)
|
|
192
|
+
except ValueError: # too many values to unpack
|
|
193
|
+
# when unpacking as_iter()
|
|
194
|
+
# or when a match() fails
|
|
195
|
+
return self, self.to(0)
|
|
196
|
+
except TypeError: # NoneType not subscriptable
|
|
197
|
+
# when an object is not a pair or atom as expected
|
|
198
|
+
return self, self.to(0)
|
|
199
|
+
except EvalError: # first of non-cons
|
|
200
|
+
# when as_iter() fails
|
|
201
|
+
return self, self.to(0)
|
|
202
|
+
|
|
203
|
+
def as_int(self) -> int:
|
|
204
|
+
return int_from_bytes(self.as_atom())
|
|
205
|
+
|
|
206
|
+
def as_atom(self) -> bytes:
|
|
207
|
+
ret: Optional[bytes] = self.atom
|
|
208
|
+
if ret is None:
|
|
209
|
+
raise ValueError("expected atom")
|
|
210
|
+
return ret
|
|
211
|
+
|
|
212
|
+
def __deepcopy__(self, memo):
|
|
213
|
+
return type(self).from_bytes(bytes(self))
|
|
214
|
+
|
|
215
|
+
EvalError = EvalError
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def _tree_hash(node: SExp, precalculated: set[bytes32]) -> bytes32:
|
|
219
|
+
"""
|
|
220
|
+
Hash values in `precalculated` are presumed to have been hashed already.
|
|
221
|
+
"""
|
|
222
|
+
if node.listp():
|
|
223
|
+
left = _tree_hash(node.first(), precalculated)
|
|
224
|
+
right = _tree_hash(node.rest(), precalculated)
|
|
225
|
+
s = b"\2" + left + right
|
|
226
|
+
else:
|
|
227
|
+
# node.listp() is False so must be an atom
|
|
228
|
+
atom: bytes = node.as_atom() # type: ignore[assignment]
|
|
229
|
+
if atom in precalculated:
|
|
230
|
+
return bytes32(atom)
|
|
231
|
+
s = b"\1" + atom
|
|
232
|
+
return bytes32(std_hash(s))
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
NIL = Program.from_bytes(b"\x80")
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
# real return type is more like Union[T_Program, CastableType] when considering corner and terminal cases
|
|
239
|
+
def _sexp_replace(sexp: T_CLVMStorage, to_sexp: Callable[[Any], T_Program], **kwargs: Any) -> T_Program:
|
|
240
|
+
# if `kwargs == {}` then `return sexp` unchanged
|
|
241
|
+
if len(kwargs) == 0:
|
|
242
|
+
# yes, the terminal case is hinted incorrectly for now
|
|
243
|
+
return sexp # type: ignore[return-value]
|
|
244
|
+
|
|
245
|
+
if "" in kwargs:
|
|
246
|
+
if len(kwargs) > 1:
|
|
247
|
+
raise ValueError("conflicting paths")
|
|
248
|
+
return kwargs[""]
|
|
249
|
+
|
|
250
|
+
# we've confirmed that no `kwargs` is the empty string.
|
|
251
|
+
# Now split `kwargs` into two groups: those
|
|
252
|
+
# that start with `f` and those that start with `r`
|
|
253
|
+
|
|
254
|
+
args_by_prefix: dict[str, dict[str, Any]] = {}
|
|
255
|
+
for k, v in kwargs.items():
|
|
256
|
+
c = k[0]
|
|
257
|
+
if c not in "fr":
|
|
258
|
+
raise ValueError("bad path containing %s: must only contain `f` and `r`")
|
|
259
|
+
args_by_prefix.setdefault(c, dict())[k[1:]] = v
|
|
260
|
+
|
|
261
|
+
pair = sexp.pair
|
|
262
|
+
if pair is None:
|
|
263
|
+
raise ValueError("path into atom")
|
|
264
|
+
|
|
265
|
+
# recurse down the tree
|
|
266
|
+
new_f = _sexp_replace(pair[0], to_sexp, **args_by_prefix.get("f", {}))
|
|
267
|
+
new_r = _sexp_replace(pair[1], to_sexp, **args_by_prefix.get("r", {}))
|
|
268
|
+
|
|
269
|
+
return to_sexp((new_f, new_r))
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import Optional, cast
|
|
5
|
+
|
|
6
|
+
import chia_rs
|
|
7
|
+
from bitstring import BitArray
|
|
8
|
+
from chia_rs import AugSchemeMPL, G1Element, PrivateKey
|
|
9
|
+
from chiapos import Verifier
|
|
10
|
+
|
|
11
|
+
from chia.consensus.constants import ConsensusConstants
|
|
12
|
+
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
13
|
+
from chia.util.hash import std_hash
|
|
14
|
+
from chia.util.ints import uint32
|
|
15
|
+
|
|
16
|
+
ProofOfSpace = chia_rs.ProofOfSpace
|
|
17
|
+
|
|
18
|
+
log = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_plot_id(pos: ProofOfSpace) -> bytes32:
|
|
22
|
+
assert pos.pool_public_key is None or pos.pool_contract_puzzle_hash is None
|
|
23
|
+
if pos.pool_public_key is None:
|
|
24
|
+
assert pos.pool_contract_puzzle_hash is not None
|
|
25
|
+
return calculate_plot_id_ph(pos.pool_contract_puzzle_hash, pos.plot_public_key)
|
|
26
|
+
return calculate_plot_id_pk(pos.pool_public_key, pos.plot_public_key)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def verify_and_get_quality_string(
|
|
30
|
+
pos: ProofOfSpace,
|
|
31
|
+
constants: ConsensusConstants,
|
|
32
|
+
original_challenge_hash: bytes32,
|
|
33
|
+
signage_point: bytes32,
|
|
34
|
+
*,
|
|
35
|
+
height: uint32,
|
|
36
|
+
) -> Optional[bytes32]:
|
|
37
|
+
# Exactly one of (pool_public_key, pool_contract_puzzle_hash) must not be None
|
|
38
|
+
if (pos.pool_public_key is None) and (pos.pool_contract_puzzle_hash is None):
|
|
39
|
+
log.error("Expected pool public key or pool contract puzzle hash but got neither")
|
|
40
|
+
return None
|
|
41
|
+
if (pos.pool_public_key is not None) and (pos.pool_contract_puzzle_hash is not None):
|
|
42
|
+
log.error("Expected pool public key or pool contract puzzle hash but got both")
|
|
43
|
+
return None
|
|
44
|
+
if pos.size < constants.MIN_PLOT_SIZE:
|
|
45
|
+
log.error("Plot size is lower than the minimum")
|
|
46
|
+
return None
|
|
47
|
+
if pos.size > constants.MAX_PLOT_SIZE:
|
|
48
|
+
log.error("Plot size is higher than the maximum")
|
|
49
|
+
return None
|
|
50
|
+
plot_id: bytes32 = get_plot_id(pos)
|
|
51
|
+
new_challenge: bytes32 = calculate_pos_challenge(plot_id, original_challenge_hash, signage_point)
|
|
52
|
+
|
|
53
|
+
if new_challenge != pos.challenge:
|
|
54
|
+
log.error("Calculated pos challenge doesn't match the provided one")
|
|
55
|
+
return None
|
|
56
|
+
prefix_bits = calculate_prefix_bits(constants, height)
|
|
57
|
+
if not passes_plot_filter(prefix_bits, plot_id, original_challenge_hash, signage_point):
|
|
58
|
+
log.error("Did not pass the plot filter")
|
|
59
|
+
return None
|
|
60
|
+
|
|
61
|
+
return get_quality_string(pos, plot_id)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def get_quality_string(pos: ProofOfSpace, plot_id: bytes32) -> Optional[bytes32]:
|
|
65
|
+
quality_str = Verifier().validate_proof(plot_id, pos.size, pos.challenge, bytes(pos.proof))
|
|
66
|
+
if not quality_str:
|
|
67
|
+
return None
|
|
68
|
+
return bytes32(quality_str)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def passes_plot_filter(
|
|
72
|
+
prefix_bits: int,
|
|
73
|
+
plot_id: bytes32,
|
|
74
|
+
challenge_hash: bytes32,
|
|
75
|
+
signage_point: bytes32,
|
|
76
|
+
) -> bool:
|
|
77
|
+
# this is possible when using non-mainnet constants with a low
|
|
78
|
+
# NUMBER_ZERO_BITS_PLOT_FILTER constant and activating sufficient plot
|
|
79
|
+
# filter reductions
|
|
80
|
+
if prefix_bits == 0:
|
|
81
|
+
return True
|
|
82
|
+
|
|
83
|
+
plot_filter = BitArray(calculate_plot_filter_input(plot_id, challenge_hash, signage_point))
|
|
84
|
+
# TODO: compensating for https://github.com/scott-griffiths/bitstring/issues/248
|
|
85
|
+
return cast(bool, plot_filter[:prefix_bits].uint == 0)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def calculate_prefix_bits(constants: ConsensusConstants, height: uint32) -> int:
|
|
89
|
+
prefix_bits = int(constants.NUMBER_ZERO_BITS_PLOT_FILTER)
|
|
90
|
+
if height >= constants.PLOT_FILTER_32_HEIGHT:
|
|
91
|
+
prefix_bits -= 4
|
|
92
|
+
elif height >= constants.PLOT_FILTER_64_HEIGHT:
|
|
93
|
+
prefix_bits -= 3
|
|
94
|
+
elif height >= constants.PLOT_FILTER_128_HEIGHT:
|
|
95
|
+
prefix_bits -= 2
|
|
96
|
+
elif height >= constants.HARD_FORK_HEIGHT:
|
|
97
|
+
prefix_bits -= 1
|
|
98
|
+
|
|
99
|
+
return max(0, prefix_bits)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def calculate_plot_filter_input(plot_id: bytes32, challenge_hash: bytes32, signage_point: bytes32) -> bytes32:
|
|
103
|
+
return std_hash(plot_id + challenge_hash + signage_point)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def calculate_pos_challenge(plot_id: bytes32, challenge_hash: bytes32, signage_point: bytes32) -> bytes32:
|
|
107
|
+
return std_hash(calculate_plot_filter_input(plot_id, challenge_hash, signage_point))
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def calculate_plot_id_pk(
|
|
111
|
+
pool_public_key: G1Element,
|
|
112
|
+
plot_public_key: G1Element,
|
|
113
|
+
) -> bytes32:
|
|
114
|
+
return std_hash(bytes(pool_public_key) + bytes(plot_public_key))
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def calculate_plot_id_ph(
|
|
118
|
+
pool_contract_puzzle_hash: bytes32,
|
|
119
|
+
plot_public_key: G1Element,
|
|
120
|
+
) -> bytes32:
|
|
121
|
+
return std_hash(bytes(pool_contract_puzzle_hash) + bytes(plot_public_key))
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def generate_taproot_sk(local_pk: G1Element, farmer_pk: G1Element) -> PrivateKey:
|
|
125
|
+
taproot_message: bytes = bytes(local_pk + farmer_pk) + bytes(local_pk) + bytes(farmer_pk)
|
|
126
|
+
taproot_hash: bytes32 = std_hash(taproot_message)
|
|
127
|
+
return AugSchemeMPL.key_gen(taproot_hash)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def generate_plot_public_key(local_pk: G1Element, farmer_pk: G1Element, include_taproot: bool = False) -> G1Element:
|
|
131
|
+
if include_taproot:
|
|
132
|
+
taproot_sk: PrivateKey = generate_taproot_sk(local_pk, farmer_pk)
|
|
133
|
+
return local_pk + farmer_pk + taproot_sk.get_g1()
|
|
134
|
+
else:
|
|
135
|
+
return local_pk + farmer_pk
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import chia_rs.sized_bytes
|
|
4
|
+
|
|
5
|
+
bytes4 = chia_rs.sized_bytes.bytes4
|
|
6
|
+
bytes8 = chia_rs.sized_bytes.bytes8
|
|
7
|
+
bytes32 = chia_rs.sized_bytes.bytes32
|
|
8
|
+
bytes48 = chia_rs.sized_bytes.bytes48
|
|
9
|
+
bytes96 = chia_rs.sized_bytes.bytes96
|
|
10
|
+
bytes100 = chia_rs.sized_bytes.bytes100
|
|
11
|
+
bytes480 = chia_rs.sized_bytes.bytes480
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import chia_rs
|
|
4
|
+
|
|
5
|
+
ChallengeBlockInfo = chia_rs.ChallengeBlockInfo
|
|
6
|
+
ChallengeChainSubSlot = chia_rs.ChallengeChainSubSlot
|
|
7
|
+
InfusedChallengeChainSubSlot = chia_rs.InfusedChallengeChainSubSlot
|
|
8
|
+
RewardChainSubSlot = chia_rs.RewardChainSubSlot
|
|
9
|
+
SubSlotProofs = chia_rs.SubSlotProofs
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This is an implementation of `sha256_treehash`, used to calculate
|
|
3
|
+
puzzle hashes in clvm.
|
|
4
|
+
|
|
5
|
+
This implementation goes to great pains to be non-recursive so we don't
|
|
6
|
+
have to worry about blowing out the python stack.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import Callable, Optional, Union
|
|
12
|
+
|
|
13
|
+
from clvm.CLVMObject import CLVMStorage
|
|
14
|
+
from clvm.SExp import SExp
|
|
15
|
+
|
|
16
|
+
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
17
|
+
from chia.util.hash import std_hash
|
|
18
|
+
|
|
19
|
+
ValueType = Union[bytes, CLVMStorage]
|
|
20
|
+
ValueStackType = list[ValueType]
|
|
21
|
+
Op = Callable[[ValueStackType, "OpStackType", set[bytes32]], None]
|
|
22
|
+
OpStackType = list[Op]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def sha256_treehash(sexp: CLVMStorage, precalculated: Optional[set[bytes32]] = None) -> bytes32:
|
|
26
|
+
"""
|
|
27
|
+
Hash values in `precalculated` are presumed to have been hashed already.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
if precalculated is None:
|
|
31
|
+
precalculated = set()
|
|
32
|
+
|
|
33
|
+
def handle_sexp(sexp_stack: ValueStackType, op_stack: OpStackType, precalculated: set[bytes32]) -> None:
|
|
34
|
+
# just trusting it is right, otherwise we get an attribute error
|
|
35
|
+
sexp: SExp = sexp_stack.pop() # type: ignore[assignment]
|
|
36
|
+
if sexp.pair:
|
|
37
|
+
p0, p1 = sexp.pair
|
|
38
|
+
sexp_stack.append(p0)
|
|
39
|
+
sexp_stack.append(p1)
|
|
40
|
+
op_stack.append(handle_pair)
|
|
41
|
+
op_stack.append(handle_sexp)
|
|
42
|
+
op_stack.append(roll)
|
|
43
|
+
op_stack.append(handle_sexp)
|
|
44
|
+
else:
|
|
45
|
+
# not a pair, so an atom
|
|
46
|
+
atom: bytes = sexp.atom # type: ignore[assignment]
|
|
47
|
+
if atom in precalculated:
|
|
48
|
+
r = atom
|
|
49
|
+
else:
|
|
50
|
+
r = std_hash(b"\1" + atom)
|
|
51
|
+
sexp_stack.append(r)
|
|
52
|
+
|
|
53
|
+
def handle_pair(sexp_stack: ValueStackType, op_stack: OpStackType, precalculated: set[bytes32]) -> None:
|
|
54
|
+
# just trusting it is right, otherwise we get a type error
|
|
55
|
+
p0: bytes = sexp_stack.pop() # type: ignore[assignment]
|
|
56
|
+
p1: bytes = sexp_stack.pop() # type: ignore[assignment]
|
|
57
|
+
sexp_stack.append(std_hash(b"\2" + p0 + p1))
|
|
58
|
+
|
|
59
|
+
def roll(sexp_stack: ValueStackType, op_stack: OpStackType, precalculated: set[bytes32]) -> None:
|
|
60
|
+
p0 = sexp_stack.pop()
|
|
61
|
+
p1 = sexp_stack.pop()
|
|
62
|
+
sexp_stack.append(p0)
|
|
63
|
+
sexp_stack.append(p1)
|
|
64
|
+
|
|
65
|
+
sexp_stack: ValueStackType = [sexp]
|
|
66
|
+
op_stack: list[Op] = [handle_sexp]
|
|
67
|
+
while len(op_stack) > 0:
|
|
68
|
+
op = op_stack.pop()
|
|
69
|
+
op(sexp_stack, op_stack, precalculated)
|
|
70
|
+
# just trusting it is right, otherwise we get some error, probably
|
|
71
|
+
result: bytes = sexp_stack[0] # type: ignore[assignment]
|
|
72
|
+
return bytes32(result)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import traceback
|
|
5
|
+
from enum import IntEnum
|
|
6
|
+
from functools import lru_cache
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
9
|
+
from chia_rs import VDFInfo, VDFProof
|
|
10
|
+
from chiavdf import create_discriminant, verify_n_wesolowski
|
|
11
|
+
|
|
12
|
+
from chia.consensus.constants import ConsensusConstants
|
|
13
|
+
from chia.types.blockchain_format.classgroup import ClassgroupElement
|
|
14
|
+
from chia.types.blockchain_format.sized_bytes import bytes32, bytes100
|
|
15
|
+
from chia.util.ints import uint8, uint64
|
|
16
|
+
|
|
17
|
+
log = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
__all__ = ["VDFInfo", "VDFProof"]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@lru_cache(maxsize=200)
|
|
23
|
+
def get_discriminant(challenge: bytes32, size_bites: int) -> int:
|
|
24
|
+
return int(
|
|
25
|
+
create_discriminant(challenge, size_bites),
|
|
26
|
+
16,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@lru_cache(maxsize=1000)
|
|
31
|
+
def verify_vdf(
|
|
32
|
+
disc: int,
|
|
33
|
+
input_el: bytes100,
|
|
34
|
+
output: bytes,
|
|
35
|
+
number_of_iterations: uint64,
|
|
36
|
+
discriminant_size: int,
|
|
37
|
+
witness_type: uint8,
|
|
38
|
+
) -> bool:
|
|
39
|
+
# TODO: chiavdf needs hinted
|
|
40
|
+
return verify_n_wesolowski( # type:ignore[no-any-return]
|
|
41
|
+
str(disc),
|
|
42
|
+
input_el,
|
|
43
|
+
output,
|
|
44
|
+
number_of_iterations,
|
|
45
|
+
discriminant_size,
|
|
46
|
+
witness_type,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def validate_vdf(
|
|
51
|
+
proof: VDFProof,
|
|
52
|
+
constants: ConsensusConstants,
|
|
53
|
+
input_el: ClassgroupElement,
|
|
54
|
+
info: VDFInfo,
|
|
55
|
+
target_vdf_info: Optional[VDFInfo] = None,
|
|
56
|
+
) -> bool:
|
|
57
|
+
"""
|
|
58
|
+
If target_vdf_info is passed in, it is compared with info.
|
|
59
|
+
"""
|
|
60
|
+
if target_vdf_info is not None and info != target_vdf_info:
|
|
61
|
+
tb = traceback.format_stack()
|
|
62
|
+
log.error(f"{tb} INVALID VDF INFO. Have: {info} Expected: {target_vdf_info}")
|
|
63
|
+
return False
|
|
64
|
+
if proof.witness_type + 1 > constants.MAX_VDF_WITNESS_SIZE:
|
|
65
|
+
return False
|
|
66
|
+
try:
|
|
67
|
+
disc: int = get_discriminant(info.challenge, constants.DISCRIMINANT_SIZE_BITS)
|
|
68
|
+
# TODO: parallelize somehow, this might included multiple mini proofs (n weso)
|
|
69
|
+
return verify_vdf(
|
|
70
|
+
disc,
|
|
71
|
+
input_el.data,
|
|
72
|
+
info.output.data + bytes(proof.witness),
|
|
73
|
+
info.number_of_iterations,
|
|
74
|
+
constants.DISCRIMINANT_SIZE_BITS,
|
|
75
|
+
proof.witness_type,
|
|
76
|
+
)
|
|
77
|
+
except Exception:
|
|
78
|
+
return False
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
# Stores, for a given VDF, the field that uses it.
|
|
82
|
+
class CompressibleVDFField(IntEnum):
|
|
83
|
+
CC_EOS_VDF = 1
|
|
84
|
+
ICC_EOS_VDF = 2
|
|
85
|
+
CC_SP_VDF = 3
|
|
86
|
+
CC_IP_VDF = 4
|
chia/types/clvm_cost.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import NewType
|
|
4
|
+
|
|
5
|
+
from chia.util.ints import uint64
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
CLVM Cost is the cost to run a CLVM program on the CLVM.
|
|
9
|
+
It is similar to transaction bytes in the Bitcoin, but some operations
|
|
10
|
+
are charged a higher rate, depending on their arguments.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
CLVMCost = NewType("CLVMCost", uint64)
|