chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import logging
4
4
  import time
5
5
  from random import randrange
6
- from typing import List, Set
7
6
 
8
7
  import pytest
9
8
 
@@ -47,7 +46,7 @@ class TestCoinSelection:
47
46
  coins_to_append = 1000
48
47
  amounts = list(range(1, coins_to_append))
49
48
  amounts.sort(reverse=True)
50
- coin_list: List[Coin] = [Coin(a_hash, a_hash, uint64(100000000 * a)) for a in amounts]
49
+ coin_list: list[Coin] = [Coin(a_hash, a_hash, uint64(100000000 * a)) for a in amounts]
51
50
  for i in range(tries):
52
51
  knapsack = knapsack_coin_algorithm(
53
52
  coin_list, uint128(30000000000000), DEFAULT_CONSTANTS.MAX_COIN_AMOUNT, 999999, seed=bytes([i])
@@ -58,7 +57,7 @@ class TestCoinSelection:
58
57
  def test_knapsack_coin_selection_2(self, a_hash: bytes32) -> None:
59
58
  coin_amounts = [6, 20, 40, 80, 150, 160, 203, 202, 201, 320]
60
59
  coin_amounts.sort(reverse=True)
61
- coin_list: List[Coin] = [Coin(a_hash, a_hash, uint64(a)) for a in coin_amounts]
60
+ coin_list: list[Coin] = [Coin(a_hash, a_hash, uint64(a)) for a in coin_amounts]
62
61
  # coin_list = set([coin for a in coin_amounts])
63
62
  for i in range(100):
64
63
  knapsack = knapsack_coin_algorithm(
@@ -81,12 +80,12 @@ class TestCoinSelection:
81
80
  spendable_amount += c_amount
82
81
  spendable_amount = uint128(spendable_amount)
83
82
 
84
- coin_list: List[WalletCoinRecord] = [
83
+ coin_list: list[WalletCoinRecord] = [
85
84
  WalletCoinRecord(Coin(a_hash, a_hash, uint64(a)), uint32(1), uint32(1), False, True, WalletType(0), 1)
86
85
  for a in coin_amounts
87
86
  ]
88
87
  for target_amount in coin_amounts[:100]: # select the first 100 values
89
- result: Set[Coin] = await select_coins(
88
+ result: set[Coin] = await select_coins(
90
89
  spendable_amount,
91
90
  DEFAULT_COIN_SELECTION_CONFIG,
92
91
  coin_list,
@@ -101,7 +100,7 @@ class TestCoinSelection:
101
100
  @pytest.mark.anyio
102
101
  async def test_coin_selection_with_dust(self, a_hash: bytes32) -> None:
103
102
  spendable_amount = uint128(5000000000000 + 10000)
104
- coin_list: List[WalletCoinRecord] = [
103
+ coin_list: list[WalletCoinRecord] = [
105
104
  WalletCoinRecord(
106
105
  Coin(a_hash, a_hash, uint64(5000000000000)), uint32(1), uint32(1), False, True, WalletType(0), 1
107
106
  )
@@ -121,7 +120,7 @@ class TestCoinSelection:
121
120
  # make sure coins are not identical.
122
121
  for target_amount in [10000, 9999]:
123
122
  print("Target amount: ", target_amount)
124
- result: Set[Coin] = await select_coins(
123
+ result: set[Coin] = await select_coins(
125
124
  spendable_amount,
126
125
  DEFAULT_COIN_SELECTION_CONFIG,
127
126
  coin_list,
@@ -147,7 +146,7 @@ class TestCoinSelection:
147
146
  )
148
147
  spendable_amount = uint128(spendable_amount + 2000 * 100)
149
148
  for target_amount in [50000, 25000, 15000, 10000, 9000, 3000]: # select the first 100 values
150
- dusty_result: Set[Coin] = await select_coins(
149
+ dusty_result: set[Coin] = await select_coins(
151
150
  spendable_amount,
152
151
  DEFAULT_COIN_SELECTION_CONFIG,
153
152
  coin_list,
@@ -163,7 +162,7 @@ class TestCoinSelection:
163
162
 
164
163
  # test when we have multiple coins under target, and a lot of dust coins.
165
164
  spendable_amount = uint128(25000 + 10000)
166
- new_coin_list: List[WalletCoinRecord] = []
165
+ new_coin_list: list[WalletCoinRecord] = []
167
166
  for i in range(5):
168
167
  new_coin_list.append(
169
168
  WalletCoinRecord(
@@ -190,7 +189,7 @@ class TestCoinSelection:
190
189
  )
191
190
  )
192
191
  for target_amount in [20000, 15000, 10000, 5000]: # select the first 100 values
193
- dusty_below_target: Set[Coin] = await select_coins(
192
+ dusty_below_target: set[Coin] = await select_coins(
194
193
  spendable_amount,
195
194
  DEFAULT_COIN_SELECTION_CONFIG,
196
195
  new_coin_list,
@@ -208,7 +207,7 @@ class TestCoinSelection:
208
207
  async def test_dust_and_one_large_coin(self, a_hash: bytes32) -> None:
209
208
  # test when we have a lot of dust and 1 large coin
210
209
  spendable_amount = uint128(50000 + 10000)
211
- new_coin_list: List[WalletCoinRecord] = [
210
+ new_coin_list: list[WalletCoinRecord] = [
212
211
  WalletCoinRecord(
213
212
  Coin(a_hash, std_hash(b"123"), uint64(50000)), uint32(1), uint32(1), False, True, WalletType(0), 1
214
213
  )
@@ -227,7 +226,7 @@ class TestCoinSelection:
227
226
  )
228
227
  )
229
228
  for target_amount in [50000, 10001, 10000, 9999]:
230
- dusty_below_target: Set[Coin] = await select_coins(
229
+ dusty_below_target: set[Coin] = await select_coins(
231
230
  spendable_amount,
232
231
  DEFAULT_COIN_SELECTION_CONFIG,
233
232
  new_coin_list,
@@ -242,7 +241,7 @@ class TestCoinSelection:
242
241
  @pytest.mark.anyio
243
242
  async def test_coin_selection_failure(self, a_hash: bytes32) -> None:
244
243
  spendable_amount = uint128(10000)
245
- coin_list: List[WalletCoinRecord] = []
244
+ coin_list: list[WalletCoinRecord] = []
246
245
  for i in range(10000):
247
246
  coin_list.append(
248
247
  WalletCoinRecord(
@@ -282,7 +281,7 @@ class TestCoinSelection:
282
281
  @pytest.mark.anyio
283
282
  async def test_coin_selection(self, a_hash: bytes32) -> None:
284
283
  coin_amounts = [3, 6, 20, 40, 80, 150, 160, 203, 202, 201, 320]
285
- coin_list: List[WalletCoinRecord] = [
284
+ coin_list: list[WalletCoinRecord] = [
286
285
  WalletCoinRecord(Coin(a_hash, a_hash, uint64(a)), uint32(1), uint32(1), False, True, WalletType(0), 1)
287
286
  for a in coin_amounts
288
287
  ]
@@ -290,7 +289,7 @@ class TestCoinSelection:
290
289
 
291
290
  # check for exact match
292
291
  target_amount = uint128(40)
293
- exact_match_result: Set[Coin] = await select_coins(
292
+ exact_match_result: set[Coin] = await select_coins(
294
293
  spendable_amount,
295
294
  DEFAULT_COIN_SELECTION_CONFIG,
296
295
  coin_list,
@@ -304,7 +303,7 @@ class TestCoinSelection:
304
303
 
305
304
  # check for match of 2
306
305
  target_amount = uint128(153)
307
- match_2: Set[Coin] = await select_coins(
306
+ match_2: set[Coin] = await select_coins(
308
307
  spendable_amount,
309
308
  DEFAULT_COIN_SELECTION_CONFIG,
310
309
  coin_list,
@@ -317,7 +316,7 @@ class TestCoinSelection:
317
316
  assert len(match_2) == 2
318
317
  # check for match of at least 3. it is random after all.
319
318
  target_amount = uint128(541)
320
- match_3: Set[Coin] = await select_coins(
319
+ match_3: set[Coin] = await select_coins(
321
320
  spendable_amount,
322
321
  DEFAULT_COIN_SELECTION_CONFIG,
323
322
  coin_list,
@@ -331,7 +330,7 @@ class TestCoinSelection:
331
330
 
332
331
  # check for match of all
333
332
  target_amount = spendable_amount
334
- match_all: Set[Coin] = await select_coins(
333
+ match_all: set[Coin] = await select_coins(
335
334
  spendable_amount,
336
335
  DEFAULT_COIN_SELECTION_CONFIG,
337
336
  coin_list,
@@ -345,13 +344,13 @@ class TestCoinSelection:
345
344
 
346
345
  # test smallest greater than target
347
346
  greater_coin_amounts = [1, 2, 5, 20, 400, 700]
348
- greater_coin_list: List[WalletCoinRecord] = [
347
+ greater_coin_list: list[WalletCoinRecord] = [
349
348
  WalletCoinRecord(Coin(a_hash, a_hash, uint64(a)), uint32(1), uint32(1), False, True, WalletType(0), 1)
350
349
  for a in greater_coin_amounts
351
350
  ]
352
351
  greater_spendable_amount = uint128(sum(greater_coin_amounts))
353
352
  target_amount = uint128(625)
354
- smallest_result: Set[Coin] = await select_coins(
353
+ smallest_result: set[Coin] = await select_coins(
355
354
  greater_spendable_amount,
356
355
  DEFAULT_COIN_SELECTION_CONFIG,
357
356
  greater_coin_list,
@@ -364,12 +363,12 @@ class TestCoinSelection:
364
363
  assert len(smallest_result) == 1
365
364
 
366
365
  # test smallest greater than target with only 1 large coin.
367
- single_greater_coin_list: List[WalletCoinRecord] = [
366
+ single_greater_coin_list: list[WalletCoinRecord] = [
368
367
  WalletCoinRecord(Coin(a_hash, a_hash, uint64(70000)), uint32(1), uint32(1), False, True, WalletType(0), 1)
369
368
  ]
370
369
  single_greater_spendable_amount = uint128(70000)
371
370
  target_amount = uint128(50000)
372
- single_greater_result: Set[Coin] = await select_coins(
371
+ single_greater_result: set[Coin] = await select_coins(
373
372
  single_greater_spendable_amount,
374
373
  DEFAULT_COIN_SELECTION_CONFIG,
375
374
  single_greater_coin_list,
@@ -383,13 +382,13 @@ class TestCoinSelection:
383
382
 
384
383
  # test smallest greater than target with only multiple larger then target coins.
385
384
  multiple_greater_coin_amounts = [90000, 100000, 120000, 200000, 100000]
386
- multiple_greater_coin_list: List[WalletCoinRecord] = [
385
+ multiple_greater_coin_list: list[WalletCoinRecord] = [
387
386
  WalletCoinRecord(Coin(a_hash, a_hash, uint64(a)), uint32(1), uint32(1), False, True, WalletType(0), 1)
388
387
  for a in multiple_greater_coin_amounts
389
388
  ]
390
389
  multiple_greater_spendable_amount = uint128(sum(multiple_greater_coin_amounts))
391
390
  target_amount = uint128(70000)
392
- multiple_greater_result: Set[Coin] = await select_coins(
391
+ multiple_greater_result: set[Coin] = await select_coins(
393
392
  multiple_greater_spendable_amount,
394
393
  DEFAULT_COIN_SELECTION_CONFIG,
395
394
  multiple_greater_coin_list,
@@ -406,7 +405,7 @@ class TestCoinSelection:
406
405
  async def test_coin_selection_difficult(self, a_hash: bytes32) -> None:
407
406
  num_coins = 40
408
407
  spendable_amount = uint128(num_coins * 1000)
409
- coin_list: List[WalletCoinRecord] = [
408
+ coin_list: list[WalletCoinRecord] = [
410
409
  WalletCoinRecord(
411
410
  Coin(a_hash, std_hash(i.to_bytes(4, "big")), uint64(1000)),
412
411
  uint32(1),
@@ -419,7 +418,7 @@ class TestCoinSelection:
419
418
  for i in range(num_coins)
420
419
  ]
421
420
  target_amount = spendable_amount - 1
422
- result: Set[Coin] = await select_coins(
421
+ result: set[Coin] = await select_coins(
423
422
  spendable_amount,
424
423
  DEFAULT_COIN_SELECTION_CONFIG,
425
424
  coin_list,
@@ -434,7 +433,7 @@ class TestCoinSelection:
434
433
 
435
434
  @pytest.mark.anyio
436
435
  async def test_smallest_coin_over_amount(self, a_hash: bytes32) -> None:
437
- coin_list: List[Coin] = [
436
+ coin_list: list[Coin] = [
438
437
  Coin(a_hash, std_hash(i.to_bytes(4, "big")), uint64((39 - i) * 1000)) for i in range(40)
439
438
  ]
440
439
  assert select_smallest_coin_over_target(uint128(100), coin_list) == coin_list[39 - 1]
@@ -446,7 +445,7 @@ class TestCoinSelection:
446
445
 
447
446
  @pytest.mark.anyio
448
447
  async def test_sum_largest_coins(self, a_hash: bytes32) -> None:
449
- coin_list: List[Coin] = list(
448
+ coin_list: list[Coin] = list(
450
449
  reversed([Coin(a_hash, std_hash(i.to_bytes(4, "big")), uint64(i)) for i in range(41)])
451
450
  )
452
451
  assert sum_largest_coins(uint128(40), coin_list) == {coin_list[0]}
@@ -456,7 +455,7 @@ class TestCoinSelection:
456
455
  @pytest.mark.anyio
457
456
  async def test_knapsack_perf(self, a_hash: bytes32) -> None:
458
457
  start = time.time()
459
- coin_list: List[Coin] = [
458
+ coin_list: list[Coin] = [
460
459
  Coin(a_hash, std_hash(i.to_bytes(4, "big")), uint64((200000 - i) * 1000)) for i in range(200000)
461
460
  ]
462
461
  knapsack_coin_algorithm(coin_list, uint128(2000000), 9999999999999999, 500)
@@ -467,7 +466,7 @@ class TestCoinSelection:
467
466
  @pytest.mark.anyio
468
467
  async def test_coin_selection_min_coin(self, a_hash: bytes32) -> None:
469
468
  spendable_amount = uint128(5000000 + 500 + 40050)
470
- coin_list: List[WalletCoinRecord] = [
469
+ coin_list: list[WalletCoinRecord] = [
471
470
  WalletCoinRecord(Coin(a_hash, a_hash, uint64(5000000)), uint32(1), uint32(1), False, True, WalletType(0), 1)
472
471
  ]
473
472
  for i in range(500):
@@ -497,7 +496,7 @@ class TestCoinSelection:
497
496
  # make sure coins are not identical.
498
497
  for target_amount in [500, 1000, 50000, 500000]:
499
498
  for min_coin_amount in [10, 100, 200, 300, 1000]:
500
- result: Set[Coin] = await select_coins(
499
+ result: set[Coin] = await select_coins(
501
500
  spendable_amount,
502
501
  DEFAULT_COIN_SELECTION_CONFIG.override(min_coin_amount=uint64(min_coin_amount)),
503
502
  coin_list,
@@ -529,7 +528,7 @@ class TestCoinSelection:
529
528
  ]
530
529
  excluded_coins = [Coin(a_hash, a_hash, uint64(3)), Coin(c_hash, c_hash, uint64(9))]
531
530
  # test that excluded coins are not included in the result
532
- selected_coins: Set[Coin] = await select_coins(
531
+ selected_coins: set[Coin] = await select_coins(
533
532
  spendable_amount,
534
533
  DEFAULT_COIN_SELECTION_CONFIG.override(excluded_coin_ids=[c.name() for c in excluded_coins]),
535
534
  spendable_wallet_coin_records,
@@ -541,7 +540,7 @@ class TestCoinSelection:
541
540
  assert selected_coins is not None
542
541
  assert sum(coin.amount for coin in selected_coins) >= target_amount
543
542
  assert len(selected_coins) == 1
544
- assert list(selected_coins)[0] == Coin(b_hash, b_hash, uint64(6))
543
+ assert next(iter(selected_coins)) == Coin(b_hash, b_hash, uint64(6))
545
544
 
546
545
  excluded_all_coins = spendable_coins
547
546
  # make sure that a failure is raised if all coins are excluded.
@@ -558,7 +557,7 @@ class TestCoinSelection:
558
557
  @pytest.mark.anyio
559
558
  async def test_coin_selection_with_zero_amount(self, a_hash: bytes32) -> None:
560
559
  coin_amounts = [3, 6, 20, 40, 80, 150, 160, 203, 202, 201, 320]
561
- coin_list: List[WalletCoinRecord] = [
560
+ coin_list: list[WalletCoinRecord] = [
562
561
  WalletCoinRecord(Coin(a_hash, a_hash, uint64(a)), uint32(1), uint32(1), False, True, WalletType(0), 1)
563
562
  for a in coin_amounts
564
563
  ]
@@ -566,7 +565,7 @@ class TestCoinSelection:
566
565
 
567
566
  # validate that a zero amount is handled correctly
568
567
  target_amount = uint128(0)
569
- zero_amount_result: Set[Coin] = await select_coins(
568
+ zero_amount_result: set[Coin] = await select_coins(
570
569
  spendable_amount,
571
570
  DEFAULT_COIN_SELECTION_CONFIG,
572
571
  coin_list,
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Any, List, Optional, Tuple, Type, Union
4
+ from typing import Any, Optional, Union
5
5
 
6
6
  import pytest
7
7
  from clvm.casts import int_from_bytes
@@ -66,8 +66,8 @@ from chia.wallet.conditions import (
66
66
  class ConditionSerializations:
67
67
  opcode: bytes
68
68
  program_args: Program
69
- json_keys: List[str]
70
- json_args: List[Any]
69
+ json_keys: list[str]
70
+ json_args: list[Any]
71
71
 
72
72
  @property
73
73
  def program(self) -> Program:
@@ -75,7 +75,7 @@ class ConditionSerializations:
75
75
  return prog
76
76
 
77
77
 
78
- HASH: bytes32 = bytes32([0] * 32)
78
+ HASH: bytes32 = bytes32.zeros
79
79
  HASH_HEX: str = HASH.hex()
80
80
  PK: bytes = b"\xc0" + bytes(47)
81
81
  PK_HEX: str = PK.hex()
@@ -156,14 +156,26 @@ def test_completeness() -> None:
156
156
  ConditionSerializations(
157
157
  ConditionOpcode.SEND_MESSAGE,
158
158
  Program.to([0x3F, b"foobar", Program.to(HASH)]),
159
- ["mode", "msg", "args"],
160
- ["63", "0x" + b"foobar".hex(), "a0" + HASH_HEX],
159
+ ["mode_integer", "msg", "var_args", "sender", "receiver"],
160
+ [
161
+ "63",
162
+ "0x" + b"foobar".hex(),
163
+ ["a0" + HASH_HEX],
164
+ {"mode_integer": 0b111},
165
+ {"mode_integer": 0b111, "coin_id_committed": "0x" + HASH_HEX},
166
+ ],
161
167
  ),
162
168
  ConditionSerializations(
163
169
  ConditionOpcode.RECEIVE_MESSAGE,
164
170
  Program.to([0x3F, b"foobar", Program.to(HASH)]),
165
- ["mode", "msg", "args"],
166
- ["63", "0x" + b"foobar".hex(), "a0" + HASH_HEX],
171
+ ["mode_integer", "msg", "var_args", "sender", "receiver"],
172
+ [
173
+ "63",
174
+ "0x" + b"foobar".hex(),
175
+ ["a0" + HASH_HEX],
176
+ {"mode_integer": 0b111, "coin_id_committed": "0x" + HASH_HEX},
177
+ {"mode_integer": 0b111},
178
+ ],
167
179
  ),
168
180
  ],
169
181
  )
@@ -203,10 +215,10 @@ def test_unknown_condition() -> None:
203
215
  )
204
216
  def test_announcement_inversions(
205
217
  drivers: Union[
206
- Tuple[Type[CreateCoinAnnouncement], Type[AssertCoinAnnouncement]],
207
- Tuple[Type[CreatePuzzleAnnouncement], Type[AssertPuzzleAnnouncement]],
208
- Tuple[Type[CreateAnnouncement], Type[AssertAnnouncement]],
209
- ]
218
+ tuple[type[CreateCoinAnnouncement], type[AssertCoinAnnouncement]],
219
+ tuple[type[CreatePuzzleAnnouncement], type[AssertPuzzleAnnouncement]],
220
+ tuple[type[CreateAnnouncement], type[AssertAnnouncement]],
221
+ ],
210
222
  ) -> None:
211
223
  create_driver, assert_driver = drivers
212
224
  # mypy is not smart enough to understand that this `if` narrows down the potential types it could be
@@ -236,9 +248,9 @@ def test_announcement_inversions(
236
248
 
237
249
  @dataclass(frozen=True)
238
250
  class TimelockInfo:
239
- drivers: List[Condition]
251
+ drivers: list[Condition]
240
252
  parsed_info: ConditionValidTimes
241
- conditions_after: Optional[List[Condition]] = None
253
+ conditions_after: Optional[list[Condition]] = None
242
254
 
243
255
 
244
256
  @pytest.mark.parametrize(
@@ -336,7 +348,7 @@ def test_timelock_parsing(timelock_info: TimelockInfo) -> None:
336
348
  ],
337
349
  )
338
350
  def test_invalid_condition(
339
- cond: Type[
351
+ cond: type[
340
352
  Union[
341
353
  AggSigParent,
342
354
  AggSigPuzzle,
@@ -381,7 +393,7 @@ def test_invalid_condition(
381
393
  ],
382
394
  prg: bytes,
383
395
  ) -> None:
384
- if (cond == Remark or cond == UnknownCondition) and prg != b"\x80":
396
+ if (cond in {Remark, UnknownCondition}) and prg != b"\x80":
385
397
  pytest.skip("condition takes arbitrary arguments")
386
398
 
387
399
  with pytest.raises((ValueError, EvalError, KeyError)):
@@ -1,8 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- import sys
4
- from io import StringIO
5
-
3
+ import pytest
6
4
  from chia_rs import AugSchemeMPL, PrivateKey
7
5
 
8
6
  from chia.types.blockchain_format.coin import Coin
@@ -16,36 +14,35 @@ from chia.wallet.util.debug_spend_bundle import debug_spend_bundle
16
14
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
17
15
 
18
16
 
19
- def test_debug_spend_bundle() -> None:
17
+ def test_debug_spend_bundle(capsys: pytest.CaptureFixture[str]) -> None:
20
18
  sk = PrivateKey.from_bytes(bytes([1] * 32))
21
19
  pk = sk.get_g1()
22
20
  msg = bytes(32)
23
21
  sig = AugSchemeMPL.sign(sk, msg)
24
22
  ACS = Program.to(15).curry(Program.to("hey").curry("now")).curry("brown", "cow")
25
23
  ACS_PH = ACS.get_tree_hash()
26
- coin: Coin = Coin(bytes32([0] * 32), ACS_PH, uint64(3))
24
+ coin: Coin = Coin(bytes32.zeros, ACS_PH, uint64(3))
27
25
  child_coin: Coin = Coin(coin.name(), ACS_PH, uint64(0))
28
- coin_bad_reveal: Coin = Coin(bytes32([0] * 32), bytes32([0] * 32), uint64(0))
26
+ coin_bad_reveal: Coin = Coin(bytes32.zeros, bytes32.zeros, uint64(0))
29
27
  solution = Program.to(
30
28
  [
31
29
  [ConditionOpcode.AGG_SIG_UNSAFE, pk, msg],
32
30
  [ConditionOpcode.REMARK],
33
31
  [ConditionOpcode.CREATE_COIN, ACS_PH, 0],
34
- [ConditionOpcode.CREATE_COIN, bytes32([0] * 32), 1],
35
- [ConditionOpcode.CREATE_COIN, bytes32([0] * 32), 2, [b"memo", b"memo", b"memo"]],
32
+ [ConditionOpcode.CREATE_COIN, bytes32.zeros, 1],
33
+ [ConditionOpcode.CREATE_COIN, bytes32.zeros, 2, [b"memo", b"memo", b"memo"]],
36
34
  [ConditionOpcode.CREATE_COIN_ANNOUNCEMENT, None],
37
- [ConditionOpcode.ASSERT_COIN_ANNOUNCEMENT, bytes32([0] * 32)],
35
+ [ConditionOpcode.ASSERT_COIN_ANNOUNCEMENT, bytes32.zeros],
38
36
  [ConditionOpcode.ASSERT_COIN_ANNOUNCEMENT, std_hash(coin.name())],
39
37
  [ConditionOpcode.CREATE_COIN_ANNOUNCEMENT, b"hey"],
40
38
  [ConditionOpcode.CREATE_PUZZLE_ANNOUNCEMENT, None],
41
- [ConditionOpcode.ASSERT_PUZZLE_ANNOUNCEMENT, bytes32([0] * 32)],
39
+ [ConditionOpcode.ASSERT_PUZZLE_ANNOUNCEMENT, bytes32.zeros],
42
40
  [ConditionOpcode.ASSERT_PUZZLE_ANNOUNCEMENT, std_hash(coin.puzzle_hash)],
43
41
  [ConditionOpcode.CREATE_PUZZLE_ANNOUNCEMENT, b"hey"],
44
42
  ]
45
43
  )
46
44
 
47
- result = StringIO()
48
- sys.stdout = result
45
+ capsys.readouterr()
49
46
 
50
47
  debug_spend_bundle(
51
48
  WalletSpendBundle(
@@ -70,7 +67,152 @@ def test_debug_spend_bundle() -> None:
70
67
  )
71
68
  )
72
69
 
70
+ stdout, _ = capsys.readouterr()
71
+
73
72
  assert (
74
- result.getvalue()
75
- == '================================================================================\nconsuming coin (0x0000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000 ())\n with id f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b\n\n\nbrun -y main.sym \'(a (q 2 (q . 15) (c (q 2 (q . "hey") (c (q . "now") 1)) 1)) (c (q . "brown") (c (q . "cow") 1)))\' \'()\'\n\n--- Uncurried Args ---\n- <curried puzzle>\n - Layer 1:\n - Mod hash: 507414e217dc45d6dbb923077c48641c9d2ba8430c92df9c49660480f398b133\n - "brown"\n - "cow"\n - Layer 2:\n - Mod hash: 24255ef5d941493b9978f3aabb0ed07d084ade196d23f463ff058954cbf6e9b6\n - <curried puzzle>\n - Layer 1:\n - Mod hash: 7ee93c7e6fde43b6ac75100244fd294b8247362f22724b2ef0099bf7ab083def\n - "now"\n\n*** BAD PUZZLE REVEAL\n3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 vs 0000000000000000000000000000000000000000000000000000000000000000\n********************************************************************************\n\nconsuming coin (0x0000000000000000000000000000000000000000000000000000000000000000 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 3)\n with id f61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f\n\n\nbrun -y main.sym \'(a (q 2 (q . 15) (c (q 2 (q . "hey") (c (q . "now") 1)) 1)) (c (q . "brown") (c (q . "cow") 1)))\' \'((49 0xaa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1 0x0000000000000000000000000000000000000000000000000000000000000000) (q) (51 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ()) (51 0x0000000000000000000000000000000000000000000000000000000000000000 1) (51 0x0000000000000000000000000000000000000000000000000000000000000000 2 ("memo" "memo" "memo")) (60 ()) (61 0x0000000000000000000000000000000000000000000000000000000000000000) (61 0x98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4) (60 "hey") (62 ()) (63 0x0000000000000000000000000000000000000000000000000000000000000000) (63 0xfb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5) (62 "hey"))\'\n\n--- Uncurried Args ---\n- <curried puzzle>\n - Layer 1:\n - Mod hash: 507414e217dc45d6dbb923077c48641c9d2ba8430c92df9c49660480f398b133\n - "brown"\n - "cow"\n - Layer 2:\n - Mod hash: 24255ef5d941493b9978f3aabb0ed07d084ade196d23f463ff058954cbf6e9b6\n - <curried puzzle>\n - Layer 1:\n - Mod hash: 7ee93c7e6fde43b6ac75100244fd294b8247362f22724b2ef0099bf7ab083def\n - "now"\n\n((AGG_SIG_UNSAFE 0xaa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1 0x0000000000000000000000000000000000000000000000000000000000000000) (REMARK) (CREATE_COIN 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ()) (CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 1) (CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 2 ("memo" "memo" "memo")) (CREATE_COIN_ANNOUNCEMENT ()) (ASSERT_COIN_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000) (ASSERT_COIN_ANNOUNCEMENT 0x98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4) (CREATE_COIN_ANNOUNCEMENT "hey") (CREATE_PUZZLE_ANNOUNCEMENT ()) (ASSERT_PUZZLE_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000) (ASSERT_PUZZLE_ANNOUNCEMENT 0xfb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5) (CREATE_PUZZLE_ANNOUNCEMENT "hey"))\n\ngrouped conditions:\n\n (AGG_SIG_UNSAFE 0xaa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1 0x0000000000000000000000000000000000000000000000000000000000000000)\n\n (REMARK)\n\n (CREATE_COIN 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ())\n (CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 1)\n (CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 2 ("memo" "memo" "memo"))\n\n (CREATE_COIN_ANNOUNCEMENT ())\n (CREATE_COIN_ANNOUNCEMENT "hey")\n\n (ASSERT_COIN_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000)\n (ASSERT_COIN_ANNOUNCEMENT 0x98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4)\n\n (CREATE_PUZZLE_ANNOUNCEMENT ())\n (CREATE_PUZZLE_ANNOUNCEMENT "hey")\n\n (ASSERT_PUZZLE_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000)\n (ASSERT_PUZZLE_ANNOUNCEMENT 0xfb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5)\n\n\n-------\nconsuming coin (0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ())\n with id a6f9255571f8a910057476920a960ae7be70034677303a944b28a47550b9a5e4\n\n\nbrun -y main.sym \'(a (q 2 (q . 15) (c (q 2 (q . "hey") (c (q . "now") 1)) 1)) (c (q . "brown") (c (q . "cow") 1)))\' \'()\'\n\n--- Uncurried Args ---\n- <curried puzzle>\n - Layer 1:\n - Mod hash: 507414e217dc45d6dbb923077c48641c9d2ba8430c92df9c49660480f398b133\n - "brown"\n - "cow"\n - Layer 2:\n - Mod hash: 24255ef5d941493b9978f3aabb0ed07d084ade196d23f463ff058954cbf6e9b6\n - <curried puzzle>\n - Layer 1:\n - Mod hash: 7ee93c7e6fde43b6ac75100244fd294b8247362f22724b2ef0099bf7ab083def\n - "now"\n\n()\n\n(no output conditions generated)\n\n-------\n\nspent coins\n (0x0000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000 ())\n => spent coin id f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b\n (0x0000000000000000000000000000000000000000000000000000000000000000 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 3)\n => spent coin id f61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f\n\ncreated coins\n (0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x0000000000000000000000000000000000000000000000000000000000000000 1)\n => created coin id 041ca97661e2ab59c4d85848092229b00bae000573927b6ab9af4e2becd765c5\n (0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x0000000000000000000000000000000000000000000000000000000000000000 2)\n => created coin id d3f6dc7e6c0a81d22ebebd5559962bab95fa7798ad4b0bcbb42da214215e5e98\n\nephemeral coins\n (0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ())\n => created coin id a6f9255571f8a910057476920a960ae7be70034677303a944b28a47550b9a5e4\ncreated coin announcements\n [\'0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f\', \'0x686579\'] =>\n 17577cbab71385b4ee009c792f5ed2d954fbd3a31fede834150184519e0ac3fe\n [\'0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f\', \'0x\'] =>\n 98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4\ncreated puzzle announcements\n [\'0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307\', \'0x686579\'] =>\n 73f660046d0c542a49db3410b64f12770fc23707bbf1f082d35d9af71f89edd2\n [\'0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307\', \'0x\'] =>\n fb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5\n\n\nzero_coin_set = [b\'\\xa6\\xf9%Uq\\xf8\\xa9\\x10\\x05tv\\x92\\n\\x96\\n\\xe7\\xbep\\x03Fw0:\\x94K(\\xa4uP\\xb9\\xa5\\xe4\']\n\ncreated coin announcements = [\'17577cbab71385b4ee009c792f5ed2d954fbd3a31fede834150184519e0ac3fe\', \'98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4\']\n\nasserted coin announcements = [\'0000000000000000000000000000000000000000000000000000000000000000\', \'98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4\']\n\nsymdiff of coin announcements = [\'0000000000000000000000000000000000000000000000000000000000000000\', \'17577cbab71385b4ee009c792f5ed2d954fbd3a31fede834150184519e0ac3fe\']\n\ncreated puzzle announcements = [\'73f660046d0c542a49db3410b64f12770fc23707bbf1f082d35d9af71f89edd2\', \'fb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5\']\n\nasserted puzzle announcements = [\'0000000000000000000000000000000000000000000000000000000000000000\', \'fb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5\']\n\nsymdiff of puzzle announcements = [\'0000000000000000000000000000000000000000000000000000000000000000\', \'73f660046d0c542a49db3410b64f12770fc23707bbf1f082d35d9af71f89edd2\']\n\n\n================================================================================\n\naggregated signature check pass: True\npks: [<G1Element aa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1>]\nmsgs: [\'0000000000000000000000000000000000000000000000000000000000000000\']\nadd_data: ccd5bb71183532bff220ba46c268991a3ff07eb358e8255a65c30a2dce0e5fbb\nsignature: a458f8f379a4bec00f36cd38e36790210f0b7c4ee772417c0cd20513d75c7505a0532d220ab03a471e9e255e2c54472a03abd31a9feb56d551bf482e31e48747b04fe90f4e3c2af98a2de0d11f869cde360f93b8efa37ec1c28950aa52bfbacd\n' # noqa
73
+ stdout
74
+ == """================================================================================
75
+ consuming coin (0x0000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000 ())
76
+ with id f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b
77
+
78
+
79
+ brun -y main.sym '(a (q 2 (q . 15) (c (q 2 (q . "hey") (c (q . "now") 1)) 1)) (c (q . "brown") (c (q . "cow") 1)))' '()'
80
+
81
+ --- Uncurried Args ---
82
+ - <curried puzzle>
83
+ - Layer 1:
84
+ - Mod hash: 507414e217dc45d6dbb923077c48641c9d2ba8430c92df9c49660480f398b133
85
+ - "brown"
86
+ - "cow"
87
+ - Layer 2:
88
+ - Mod hash: 24255ef5d941493b9978f3aabb0ed07d084ade196d23f463ff058954cbf6e9b6
89
+ - <curried puzzle>
90
+ - Layer 1:
91
+ - Mod hash: 7ee93c7e6fde43b6ac75100244fd294b8247362f22724b2ef0099bf7ab083def
92
+ - "now"
93
+
94
+ *** BAD PUZZLE REVEAL
95
+ 3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 vs 0000000000000000000000000000000000000000000000000000000000000000
96
+ ********************************************************************************
97
+
98
+ consuming coin (0x0000000000000000000000000000000000000000000000000000000000000000 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 3)
99
+ with id f61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f
100
+
101
+
102
+ brun -y main.sym '(a (q 2 (q . 15) (c (q 2 (q . "hey") (c (q . "now") 1)) 1)) (c (q . "brown") (c (q . "cow") 1)))' '((49 0xaa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1 0x0000000000000000000000000000000000000000000000000000000000000000) (q) (51 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ()) (51 0x0000000000000000000000000000000000000000000000000000000000000000 1) (51 0x0000000000000000000000000000000000000000000000000000000000000000 2 ("memo" "memo" "memo")) (60 ()) (61 0x0000000000000000000000000000000000000000000000000000000000000000) (61 0x98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4) (60 "hey") (62 ()) (63 0x0000000000000000000000000000000000000000000000000000000000000000) (63 0xfb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5) (62 "hey"))'
103
+
104
+ --- Uncurried Args ---
105
+ - <curried puzzle>
106
+ - Layer 1:
107
+ - Mod hash: 507414e217dc45d6dbb923077c48641c9d2ba8430c92df9c49660480f398b133
108
+ - "brown"
109
+ - "cow"
110
+ - Layer 2:
111
+ - Mod hash: 24255ef5d941493b9978f3aabb0ed07d084ade196d23f463ff058954cbf6e9b6
112
+ - <curried puzzle>
113
+ - Layer 1:
114
+ - Mod hash: 7ee93c7e6fde43b6ac75100244fd294b8247362f22724b2ef0099bf7ab083def
115
+ - "now"
116
+
117
+ ((AGG_SIG_UNSAFE 0xaa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1 0x0000000000000000000000000000000000000000000000000000000000000000) (REMARK) (CREATE_COIN 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ()) (CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 1) (CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 2 ("memo" "memo" "memo")) (CREATE_COIN_ANNOUNCEMENT ()) (ASSERT_COIN_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000) (ASSERT_COIN_ANNOUNCEMENT 0x98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4) (CREATE_COIN_ANNOUNCEMENT "hey") (CREATE_PUZZLE_ANNOUNCEMENT ()) (ASSERT_PUZZLE_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000) (ASSERT_PUZZLE_ANNOUNCEMENT 0xfb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5) (CREATE_PUZZLE_ANNOUNCEMENT "hey"))
118
+
119
+ grouped conditions:
120
+
121
+ (AGG_SIG_UNSAFE 0xaa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1 0x0000000000000000000000000000000000000000000000000000000000000000)
122
+
123
+ (REMARK)
124
+
125
+ (CREATE_COIN 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ())
126
+ (CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 1)
127
+ (CREATE_COIN 0x0000000000000000000000000000000000000000000000000000000000000000 2 ("memo" "memo" "memo"))
128
+
129
+ (CREATE_COIN_ANNOUNCEMENT ())
130
+ (CREATE_COIN_ANNOUNCEMENT "hey")
131
+
132
+ (ASSERT_COIN_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000)
133
+ (ASSERT_COIN_ANNOUNCEMENT 0x98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4)
134
+
135
+ (CREATE_PUZZLE_ANNOUNCEMENT ())
136
+ (CREATE_PUZZLE_ANNOUNCEMENT "hey")
137
+
138
+ (ASSERT_PUZZLE_ANNOUNCEMENT 0x0000000000000000000000000000000000000000000000000000000000000000)
139
+ (ASSERT_PUZZLE_ANNOUNCEMENT 0xfb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5)
140
+
141
+
142
+ -------
143
+ consuming coin (0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ())
144
+ with id a6f9255571f8a910057476920a960ae7be70034677303a944b28a47550b9a5e4
145
+
146
+
147
+ brun -y main.sym '(a (q 2 (q . 15) (c (q 2 (q . "hey") (c (q . "now") 1)) 1)) (c (q . "brown") (c (q . "cow") 1)))' '()'
148
+
149
+ --- Uncurried Args ---
150
+ - <curried puzzle>
151
+ - Layer 1:
152
+ - Mod hash: 507414e217dc45d6dbb923077c48641c9d2ba8430c92df9c49660480f398b133
153
+ - "brown"
154
+ - "cow"
155
+ - Layer 2:
156
+ - Mod hash: 24255ef5d941493b9978f3aabb0ed07d084ade196d23f463ff058954cbf6e9b6
157
+ - <curried puzzle>
158
+ - Layer 1:
159
+ - Mod hash: 7ee93c7e6fde43b6ac75100244fd294b8247362f22724b2ef0099bf7ab083def
160
+ - "now"
161
+
162
+ ()
163
+
164
+ (no output conditions generated)
165
+
166
+ -------
167
+
168
+ spent coins
169
+ (0x0000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000000000000000000000000000000000000000000 ())
170
+ => spent coin id f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b
171
+ (0x0000000000000000000000000000000000000000000000000000000000000000 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 3)
172
+ => spent coin id f61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f
173
+
174
+ created coins
175
+ (0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x0000000000000000000000000000000000000000000000000000000000000000 1)
176
+ => created coin id 041ca97661e2ab59c4d85848092229b00bae000573927b6ab9af4e2becd765c5
177
+ (0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x0000000000000000000000000000000000000000000000000000000000000000 2)
178
+ => created coin id d3f6dc7e6c0a81d22ebebd5559962bab95fa7798ad4b0bcbb42da214215e5e98
179
+
180
+ ephemeral coins
181
+ (0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f 0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307 ())
182
+ => created coin id a6f9255571f8a910057476920a960ae7be70034677303a944b28a47550b9a5e4
183
+ created coin announcements
184
+ ['0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f', '0x686579'] =>
185
+ 17577cbab71385b4ee009c792f5ed2d954fbd3a31fede834150184519e0ac3fe
186
+ ['0xf61c4154a3541d84bf6ed0f05ac8a062ab08022b48e53daf7f5603fc8eb7ed1f', '0x'] =>
187
+ 98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4
188
+ created puzzle announcements
189
+ ['0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307', '0x686579'] =>
190
+ 73f660046d0c542a49db3410b64f12770fc23707bbf1f082d35d9af71f89edd2
191
+ ['0x3c4f5a82fc6548a256f5959430704623fa7ac291f45e1da47e2f91f0e6c30307', '0x'] =>
192
+ fb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5
193
+
194
+
195
+ zero_coin_set = [<bytes32: a6f9255571f8a910057476920a960ae7be70034677303a944b28a47550b9a5e4>]
196
+
197
+ created coin announcements = ['17577cbab71385b4ee009c792f5ed2d954fbd3a31fede834150184519e0ac3fe', '98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4']
198
+
199
+ asserted coin announcements = ['0000000000000000000000000000000000000000000000000000000000000000', '98442bcc931fc4c94a2a1b17dafb8959a867097bd3aa73871ca9cfc8327346b4']
200
+
201
+ symdiff of coin announcements = ['0000000000000000000000000000000000000000000000000000000000000000', '17577cbab71385b4ee009c792f5ed2d954fbd3a31fede834150184519e0ac3fe']
202
+
203
+ created puzzle announcements = ['73f660046d0c542a49db3410b64f12770fc23707bbf1f082d35d9af71f89edd2', 'fb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5']
204
+
205
+ asserted puzzle announcements = ['0000000000000000000000000000000000000000000000000000000000000000', 'fb4c79668bee67977af996dc2f42071735a819b4221d3f5c9e8e9f43c30c2bc5']
206
+
207
+ symdiff of puzzle announcements = ['0000000000000000000000000000000000000000000000000000000000000000', '73f660046d0c542a49db3410b64f12770fc23707bbf1f082d35d9af71f89edd2']
208
+
209
+
210
+ ================================================================================
211
+
212
+ aggregated signature check pass: True
213
+ pks: [<G1Element aa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1>]
214
+ msgs: ['0000000000000000000000000000000000000000000000000000000000000000']
215
+ add_data: ccd5bb71183532bff220ba46c268991a3ff07eb358e8255a65c30a2dce0e5fbb
216
+ signature: a458f8f379a4bec00f36cd38e36790210f0b7c4ee772417c0cd20513d75c7505a0532d220ab03a471e9e255e2c54472a03abd31a9feb56d551bf482e31e48747b04fe90f4e3c2af98a2de0d11f869cde360f93b8efa37ec1c28950aa52bfbacd
217
+ """ # noqa: E501
76
218
  )