chia-blockchain 2.5.4rc1__py3-none-any.whl → 2.5.5__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 (453) hide show
  1. chia/_tests/blockchain/blockchain_test_utils.py +2 -3
  2. chia/_tests/blockchain/test_augmented_chain.py +2 -3
  3. chia/_tests/blockchain/test_blockchain.py +261 -44
  4. chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
  5. chia/_tests/blockchain/test_build_chains.py +197 -1
  6. chia/_tests/blockchain/test_get_block_generator.py +1 -1
  7. chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
  8. chia/_tests/clvm/benchmark_costs.py +1 -1
  9. chia/_tests/clvm/coin_store.py +3 -4
  10. chia/_tests/clvm/test_message_conditions.py +2 -2
  11. chia/_tests/clvm/test_puzzle_compression.py +2 -3
  12. chia/_tests/clvm/test_puzzles.py +1 -2
  13. chia/_tests/clvm/test_singletons.py +2 -3
  14. chia/_tests/clvm/test_spend_sim.py +7 -7
  15. chia/_tests/cmds/cmd_test_utils.py +30 -25
  16. chia/_tests/cmds/test_dev_gh.py +1 -1
  17. chia/_tests/cmds/test_farm_cmd.py +1 -1
  18. chia/_tests/cmds/test_show.py +1 -2
  19. chia/_tests/cmds/wallet/test_did.py +101 -56
  20. chia/_tests/cmds/wallet/test_nft.py +109 -84
  21. chia/_tests/cmds/wallet/test_notifications.py +1 -1
  22. chia/_tests/cmds/wallet/test_offer.toffer +1 -1
  23. chia/_tests/cmds/wallet/test_vcs.py +8 -8
  24. chia/_tests/cmds/wallet/test_wallet.py +100 -46
  25. chia/_tests/conftest.py +31 -20
  26. chia/_tests/connection_utils.py +1 -1
  27. chia/_tests/core/consensus/stores/__init__.py +0 -0
  28. chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
  29. chia/_tests/core/consensus/test_block_creation.py +2 -31
  30. chia/_tests/core/consensus/test_pot_iterations.py +38 -3
  31. chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
  32. chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
  33. chia/_tests/core/daemon/test_daemon.py +80 -0
  34. chia/_tests/core/data_layer/test_data_layer.py +1 -1
  35. chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
  36. chia/_tests/core/data_layer/test_data_rpc.py +14 -10
  37. chia/_tests/core/data_layer/test_data_store.py +5 -5
  38. chia/_tests/core/farmer/test_farmer_api.py +2 -2
  39. chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
  40. chia/_tests/core/full_node/ram_db.py +3 -1
  41. chia/_tests/core/full_node/stores/test_block_store.py +28 -16
  42. chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
  43. chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
  44. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  45. chia/_tests/core/full_node/test_address_manager.py +200 -27
  46. chia/_tests/core/full_node/test_block_height_map.py +2 -2
  47. chia/_tests/core/full_node/test_conditions.py +7 -6
  48. chia/_tests/core/full_node/test_full_node.py +456 -40
  49. chia/_tests/core/full_node/test_generator_tools.py +32 -2
  50. chia/_tests/core/full_node/test_hint_management.py +1 -1
  51. chia/_tests/core/full_node/test_node_load.py +20 -21
  52. chia/_tests/core/full_node/test_performance.py +3 -4
  53. chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
  54. chia/_tests/core/full_node/test_subscriptions.py +1 -2
  55. chia/_tests/core/full_node/test_transactions.py +9 -5
  56. chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
  57. chia/_tests/core/large_block.py +1 -2
  58. chia/_tests/core/make_block_generator.py +3 -4
  59. chia/_tests/core/mempool/test_mempool.py +36 -86
  60. chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
  61. chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
  62. chia/_tests/core/mempool/test_mempool_manager.py +529 -69
  63. chia/_tests/core/mempool/test_mempool_performance.py +3 -2
  64. chia/_tests/core/mempool/test_singleton_fast_forward.py +61 -132
  65. chia/_tests/core/server/flood.py +1 -1
  66. chia/_tests/core/server/test_dos.py +1 -1
  67. chia/_tests/core/server/test_node_discovery.py +41 -27
  68. chia/_tests/core/server/test_rate_limits.py +1 -1
  69. chia/_tests/core/server/test_server.py +1 -1
  70. chia/_tests/core/services/test_services.py +5 -5
  71. chia/_tests/core/ssl/test_ssl.py +1 -1
  72. chia/_tests/core/test_cost_calculation.py +6 -6
  73. chia/_tests/core/test_crawler.py +2 -2
  74. chia/_tests/core/test_crawler_rpc.py +1 -1
  75. chia/_tests/core/test_db_conversion.py +3 -1
  76. chia/_tests/core/test_db_validation.py +5 -3
  77. chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
  78. chia/_tests/core/test_filter.py +4 -1
  79. chia/_tests/core/test_full_node_rpc.py +99 -82
  80. chia/_tests/core/test_program.py +2 -2
  81. chia/_tests/core/util/test_block_cache.py +1 -1
  82. chia/_tests/core/util/test_keychain.py +2 -2
  83. chia/_tests/core/util/test_lockfile.py +1 -1
  84. chia/_tests/core/util/test_log_exceptions.py +5 -5
  85. chia/_tests/core/util/test_streamable.py +81 -22
  86. chia/_tests/db/test_db_wrapper.py +1 -3
  87. chia/_tests/environments/wallet.py +5 -5
  88. chia/_tests/farmer_harvester/test_farmer.py +9 -7
  89. chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
  90. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  91. chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
  92. chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
  93. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
  94. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
  95. chia/_tests/generator/test_compression.py +1 -2
  96. chia/_tests/generator/test_rom.py +8 -4
  97. chia/_tests/plot_sync/test_plot_sync.py +3 -3
  98. chia/_tests/plot_sync/test_receiver.py +3 -3
  99. chia/_tests/plot_sync/test_sender.py +1 -1
  100. chia/_tests/plot_sync/test_sync_simulated.py +3 -3
  101. chia/_tests/plot_sync/util.py +2 -2
  102. chia/_tests/pools/test_pool_cmdline.py +48 -21
  103. chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
  104. chia/_tests/pools/test_pool_rpc.py +237 -105
  105. chia/_tests/pools/test_pool_wallet.py +11 -2
  106. chia/_tests/pools/test_wallet_pool_store.py +5 -4
  107. chia/_tests/rpc/test_rpc_client.py +1 -1
  108. chia/_tests/simulation/test_simulation.py +13 -8
  109. chia/_tests/simulation/test_simulator.py +2 -2
  110. chia/_tests/timelord/test_new_peak.py +191 -47
  111. chia/_tests/timelord/test_timelord.py +1 -1
  112. chia/_tests/tools/test_full_sync.py +0 -2
  113. chia/_tests/tools/test_run_block.py +3 -1
  114. chia/_tests/util/benchmark_cost.py +3 -3
  115. chia/_tests/util/benchmarks.py +2 -2
  116. chia/_tests/util/blockchain.py +11 -5
  117. chia/_tests/util/blockchain_mock.py +1 -4
  118. chia/_tests/util/coin_store.py +29 -0
  119. chia/_tests/util/constants.py +2 -18
  120. chia/_tests/util/full_sync.py +3 -3
  121. chia/_tests/util/generator_tools_testing.py +2 -3
  122. chia/_tests/util/key_tool.py +2 -3
  123. chia/_tests/util/misc.py +33 -31
  124. chia/_tests/util/network_protocol_data.py +19 -17
  125. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  126. chia/_tests/util/protocol_messages_json.py +3 -1
  127. chia/_tests/util/run_block.py +2 -2
  128. chia/_tests/util/setup_nodes.py +7 -7
  129. chia/_tests/util/spend_sim.py +47 -55
  130. chia/_tests/util/test_condition_tools.py +5 -4
  131. chia/_tests/util/test_config.py +2 -2
  132. chia/_tests/util/test_dump_keyring.py +1 -1
  133. chia/_tests/util/test_full_block_utils.py +12 -14
  134. chia/_tests/util/test_misc.py +2 -2
  135. chia/_tests/util/test_paginator.py +4 -4
  136. chia/_tests/util/test_priority_mutex.py +2 -2
  137. chia/_tests/util/test_replace_str_to_bytes.py +15 -5
  138. chia/_tests/util/test_ssl_check.py +1 -1
  139. chia/_tests/util/test_testnet_overrides.py +13 -3
  140. chia/_tests/util/time_out_assert.py +4 -2
  141. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
  142. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
  143. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
  144. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
  145. chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
  146. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
  147. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
  148. chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
  149. chia/_tests/wallet/conftest.py +11 -12
  150. chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
  151. chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
  152. chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
  153. chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
  154. chia/_tests/wallet/nft_wallet/config.py +1 -1
  155. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
  156. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
  157. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
  158. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
  159. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
  160. chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
  161. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
  162. chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
  163. chia/_tests/wallet/test_clvm_casts.py +88 -0
  164. chia/_tests/wallet/test_coin_management.py +1 -1
  165. chia/_tests/wallet/test_coin_selection.py +1 -1
  166. chia/_tests/wallet/test_conditions.py +1 -1
  167. chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
  168. chia/_tests/wallet/test_notifications.py +5 -3
  169. chia/_tests/wallet/test_sign_coin_spends.py +6 -6
  170. chia/_tests/wallet/test_signer_protocol.py +13 -12
  171. chia/_tests/wallet/test_singleton.py +1 -1
  172. chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
  173. chia/_tests/wallet/test_util.py +2 -2
  174. chia/_tests/wallet/test_wallet.py +108 -29
  175. chia/_tests/wallet/test_wallet_action_scope.py +9 -2
  176. chia/_tests/wallet/test_wallet_blockchain.py +2 -3
  177. chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
  178. chia/_tests/wallet/test_wallet_node.py +2 -4
  179. chia/_tests/wallet/test_wallet_retry.py +4 -2
  180. chia/_tests/wallet/test_wallet_state_manager.py +191 -5
  181. chia/_tests/wallet/test_wallet_test_framework.py +1 -1
  182. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
  183. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
  184. chia/_tests/wallet/wallet_block_tools.py +6 -6
  185. chia/_tests/weight_proof/test_weight_proof.py +10 -48
  186. chia/apis.py +1 -1
  187. chia/cmds/beta.py +1 -1
  188. chia/cmds/chia.py +9 -9
  189. chia/cmds/cmd_classes.py +12 -11
  190. chia/cmds/cmd_helpers.py +1 -1
  191. chia/cmds/cmds_util.py +12 -9
  192. chia/cmds/coin_funcs.py +2 -2
  193. chia/cmds/configure.py +2 -2
  194. chia/cmds/data.py +0 -2
  195. chia/cmds/data_funcs.py +1 -1
  196. chia/cmds/db_validate_func.py +1 -2
  197. chia/cmds/dev/__init__.py +0 -0
  198. chia/cmds/dev/data.py +273 -0
  199. chia/cmds/{gh.py → dev/gh.py} +5 -5
  200. chia/cmds/dev/main.py +22 -0
  201. chia/cmds/dev/mempool.py +78 -0
  202. chia/cmds/dev/mempool_funcs.py +63 -0
  203. chia/cmds/farm_funcs.py +5 -4
  204. chia/cmds/init_funcs.py +11 -11
  205. chia/cmds/keys.py +2 -2
  206. chia/cmds/keys_funcs.py +4 -4
  207. chia/cmds/netspace_funcs.py +1 -1
  208. chia/cmds/peer_funcs.py +2 -2
  209. chia/cmds/plotnft_funcs.py +72 -26
  210. chia/cmds/rpc.py +1 -1
  211. chia/cmds/show_funcs.py +5 -5
  212. chia/cmds/signer.py +8 -7
  213. chia/cmds/sim_funcs.py +8 -9
  214. chia/cmds/wallet.py +2 -2
  215. chia/cmds/wallet_funcs.py +165 -131
  216. chia/{util → consensus}/augmented_chain.py +1 -2
  217. chia/consensus/block_body_validation.py +54 -40
  218. chia/consensus/block_creation.py +42 -76
  219. chia/consensus/block_header_validation.py +32 -26
  220. chia/consensus/block_record.py +0 -3
  221. chia/consensus/blockchain.py +23 -32
  222. chia/consensus/blockchain_interface.py +1 -5
  223. chia/consensus/check_time_locks.py +57 -0
  224. chia/consensus/coin_store_protocol.py +151 -0
  225. chia/consensus/coinbase.py +0 -6
  226. chia/consensus/condition_costs.py +4 -0
  227. chia/{util → consensus}/condition_tools.py +4 -5
  228. chia/consensus/cost_calculator.py +1 -1
  229. chia/consensus/default_constants.py +32 -9
  230. chia/consensus/deficit.py +1 -3
  231. chia/consensus/difficulty_adjustment.py +1 -2
  232. chia/consensus/find_fork_point.py +1 -3
  233. chia/consensus/full_block_to_block_record.py +1 -6
  234. chia/{util → consensus}/generator_tools.py +1 -3
  235. chia/consensus/get_block_challenge.py +30 -7
  236. chia/consensus/make_sub_epoch_summary.py +1 -5
  237. chia/consensus/multiprocess_validation.py +21 -20
  238. chia/consensus/pot_iterations.py +74 -13
  239. chia/{util → consensus}/prev_transaction_block.py +1 -1
  240. chia/consensus/vdf_info_computation.py +1 -3
  241. chia/daemon/keychain_proxy.py +5 -5
  242. chia/daemon/server.py +22 -5
  243. chia/data_layer/data_layer.py +92 -51
  244. chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
  245. chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
  246. chia/data_layer/data_layer_util.py +4 -6
  247. chia/data_layer/data_layer_wallet.py +42 -69
  248. chia/data_layer/dl_wallet_store.py +12 -6
  249. chia/data_layer/download_data.py +3 -3
  250. chia/data_layer/s3_plugin_service.py +0 -1
  251. chia/farmer/farmer.py +3 -4
  252. chia/farmer/farmer_api.py +11 -7
  253. chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
  254. chia/full_node/block_height_map.py +7 -6
  255. chia/full_node/block_store.py +5 -7
  256. chia/full_node/bundle_tools.py +1 -2
  257. chia/full_node/coin_store.py +153 -124
  258. chia/{types → full_node}/eligible_coin_spends.py +39 -70
  259. chia/full_node/fee_estimator.py +1 -1
  260. chia/full_node/fee_estimator_interface.py +0 -8
  261. chia/full_node/fee_tracker.py +25 -25
  262. chia/full_node/full_node.py +70 -53
  263. chia/full_node/full_node_api.py +57 -40
  264. chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
  265. chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
  266. chia/full_node/full_node_store.py +23 -8
  267. chia/full_node/mempool.py +206 -53
  268. chia/full_node/mempool_check_conditions.py +20 -63
  269. chia/full_node/mempool_manager.py +53 -47
  270. chia/full_node/subscriptions.py +1 -3
  271. chia/full_node/tx_processing_queue.py +50 -3
  272. chia/full_node/weight_proof.py +46 -37
  273. chia/harvester/harvester.py +1 -1
  274. chia/harvester/harvester_api.py +22 -7
  275. chia/introducer/introducer.py +1 -1
  276. chia/introducer/introducer_api.py +1 -1
  277. chia/plot_sync/exceptions.py +1 -1
  278. chia/plot_sync/receiver.py +1 -1
  279. chia/plot_sync/sender.py +2 -2
  280. chia/pools/pool_puzzles.py +13 -18
  281. chia/pools/pool_wallet.py +23 -46
  282. chia/protocols/farmer_protocol.py +11 -3
  283. chia/protocols/full_node_protocol.py +1 -4
  284. chia/protocols/harvester_protocol.py +3 -3
  285. chia/protocols/pool_protocol.py +1 -2
  286. chia/protocols/shared_protocol.py +3 -3
  287. chia/protocols/timelord_protocol.py +1 -3
  288. chia/protocols/wallet_protocol.py +3 -3
  289. chia/rpc/rpc_client.py +7 -8
  290. chia/rpc/rpc_server.py +3 -3
  291. chia/rpc/util.py +3 -1
  292. chia/seeder/crawler.py +1 -1
  293. chia/seeder/crawler_api.py +1 -1
  294. chia/seeder/dns_server.py +2 -0
  295. chia/seeder/start_crawler.py +3 -3
  296. chia/server/address_manager.py +286 -38
  297. chia/server/address_manager_store.py +0 -215
  298. chia/{types → server}/aliases.py +7 -7
  299. chia/server/api_protocol.py +1 -1
  300. chia/server/chia_policy.py +1 -1
  301. chia/server/node_discovery.py +76 -113
  302. chia/server/rate_limits.py +1 -1
  303. chia/server/resolve_peer_info.py +43 -0
  304. chia/server/server.py +5 -5
  305. chia/server/start_data_layer.py +4 -4
  306. chia/server/start_farmer.py +5 -4
  307. chia/server/start_full_node.py +5 -4
  308. chia/server/start_harvester.py +7 -5
  309. chia/server/start_introducer.py +2 -2
  310. chia/server/start_service.py +1 -1
  311. chia/server/start_timelord.py +7 -5
  312. chia/server/start_wallet.py +7 -5
  313. chia/server/ws_connection.py +1 -1
  314. chia/simulator/add_blocks_in_batches.py +2 -2
  315. chia/simulator/block_tools.py +245 -201
  316. chia/simulator/full_node_simulator.py +38 -10
  317. chia/simulator/setup_services.py +12 -12
  318. chia/simulator/simulator_full_node_rpc_api.py +2 -2
  319. chia/simulator/simulator_full_node_rpc_client.py +2 -2
  320. chia/simulator/simulator_test_tools.py +2 -2
  321. chia/simulator/start_simulator.py +1 -1
  322. chia/simulator/wallet_tools.py +10 -18
  323. chia/ssl/create_ssl.py +1 -1
  324. chia/timelord/iters_from_block.py +14 -14
  325. chia/timelord/timelord.py +15 -11
  326. chia/timelord/timelord_api.py +14 -2
  327. chia/timelord/timelord_state.py +20 -14
  328. chia/types/blockchain_format/program.py +53 -10
  329. chia/types/blockchain_format/proof_of_space.py +73 -19
  330. chia/types/coin_spend.py +3 -56
  331. chia/types/generator_types.py +28 -0
  332. chia/types/internal_mempool_item.py +1 -2
  333. chia/types/mempool_item.py +12 -7
  334. chia/types/unfinished_header_block.py +1 -2
  335. chia/types/validation_state.py +1 -2
  336. chia/types/weight_proof.py +1 -3
  337. chia/util/action_scope.py +3 -3
  338. chia/util/block_cache.py +1 -2
  339. chia/util/byte_types.py +1 -1
  340. chia/util/casts.py +21 -0
  341. chia/util/config.py +0 -37
  342. chia/util/db_wrapper.py +8 -1
  343. chia/util/errors.py +3 -2
  344. chia/util/initial-config.yaml +21 -5
  345. chia/util/keychain.py +6 -7
  346. chia/util/keyring_wrapper.py +5 -5
  347. chia/util/limited_semaphore.py +1 -1
  348. chia/util/priority_mutex.py +1 -1
  349. chia/util/streamable.py +63 -5
  350. chia/util/task_timing.py +1 -1
  351. chia/util/virtual_project_analysis.py +1 -1
  352. chia/wallet/cat_wallet/cat_info.py +7 -3
  353. chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
  354. chia/wallet/cat_wallet/cat_utils.py +1 -1
  355. chia/wallet/cat_wallet/cat_wallet.py +44 -36
  356. chia/wallet/cat_wallet/lineage_store.py +7 -0
  357. chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
  358. chia/wallet/conditions.py +5 -10
  359. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
  360. chia/wallet/derivation_record.py +33 -0
  361. chia/wallet/derive_keys.py +3 -3
  362. chia/wallet/did_wallet/did_info.py +12 -3
  363. chia/wallet/did_wallet/did_wallet.py +132 -101
  364. chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
  365. chia/wallet/driver_protocol.py +3 -1
  366. chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
  367. chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
  368. chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
  369. chia/wallet/nft_wallet/nft_wallet.py +69 -112
  370. chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
  371. chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
  372. chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
  373. chia/wallet/nft_wallet/uncurry_nft.py +4 -6
  374. chia/wallet/notification_manager.py +2 -3
  375. chia/wallet/outer_puzzles.py +7 -2
  376. chia/wallet/puzzle_drivers.py +1 -1
  377. chia/wallet/puzzles/clawback/drivers.py +5 -4
  378. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
  379. chia/wallet/puzzles/singleton_top_layer.py +2 -1
  380. chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
  381. chia/wallet/puzzles/tails.py +1 -3
  382. chia/wallet/signer_protocol.py +5 -6
  383. chia/wallet/singleton.py +5 -4
  384. chia/wallet/singleton_record.py +1 -1
  385. chia/wallet/trade_manager.py +18 -20
  386. chia/wallet/trade_record.py +3 -6
  387. chia/wallet/trading/offer.py +12 -13
  388. chia/wallet/uncurried_puzzle.py +2 -2
  389. chia/wallet/util/compute_additions.py +58 -0
  390. chia/wallet/util/compute_hints.py +3 -3
  391. chia/wallet/util/compute_memos.py +4 -4
  392. chia/wallet/util/curry_and_treehash.py +2 -1
  393. chia/wallet/util/debug_spend_bundle.py +1 -1
  394. chia/wallet/util/merkle_tree.py +1 -1
  395. chia/wallet/util/peer_request_cache.py +1 -2
  396. chia/wallet/util/tx_config.py +3 -8
  397. chia/wallet/util/wallet_sync_utils.py +10 -5
  398. chia/wallet/util/wallet_types.py +1 -0
  399. chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
  400. chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
  401. chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
  402. chia/wallet/vc_wallet/vc_drivers.py +50 -8
  403. chia/wallet/vc_wallet/vc_store.py +3 -5
  404. chia/wallet/vc_wallet/vc_wallet.py +15 -22
  405. chia/wallet/wallet.py +36 -46
  406. chia/wallet/wallet_action_scope.py +73 -4
  407. chia/wallet/wallet_blockchain.py +1 -3
  408. chia/wallet/wallet_interested_store.py +1 -1
  409. chia/wallet/wallet_nft_store.py +3 -3
  410. chia/wallet/wallet_node.py +17 -16
  411. chia/wallet/wallet_node_api.py +4 -5
  412. chia/wallet/wallet_pool_store.py +1 -1
  413. chia/wallet/wallet_protocol.py +2 -0
  414. chia/wallet/wallet_puzzle_store.py +1 -1
  415. chia/{rpc → wallet}/wallet_request_types.py +670 -81
  416. chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
  417. chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
  418. chia/wallet/wallet_singleton_store.py +8 -7
  419. chia/wallet/wallet_spend_bundle.py +4 -3
  420. chia/wallet/wallet_state_manager.py +320 -191
  421. chia/wallet/wallet_weight_proof_handler.py +1 -2
  422. chia/wallet/wsm_apis.py +98 -0
  423. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/METADATA +7 -7
  424. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/RECORD +443 -436
  425. mozilla-ca/cacert.pem +3 -165
  426. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
  427. chia/cmds/dev.py +0 -18
  428. chia/types/blockchain_format/slots.py +0 -9
  429. chia/types/blockchain_format/sub_epoch_summary.py +0 -5
  430. chia/types/end_of_slot_bundle.py +0 -5
  431. chia/types/full_block.py +0 -5
  432. chia/types/header_block.py +0 -5
  433. chia/types/spend_bundle_conditions.py +0 -7
  434. chia/types/transaction_queue_entry.py +0 -56
  435. chia/types/unfinished_block.py +0 -5
  436. /chia/cmds/{installers.py → dev/installers.py} +0 -0
  437. /chia/cmds/{sim.py → dev/sim.py} +0 -0
  438. /chia/{util → cmds}/dump_keyring.py +0 -0
  439. /chia/{full_node → consensus}/signage_point.py +0 -0
  440. /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
  441. /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
  442. /chia/{util → full_node}/full_block_utils.py +0 -0
  443. /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
  444. /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
  445. /chia/{full_node → protocols}/fee_estimate.py +0 -0
  446. /chia/{server → protocols}/outbound_message.py +0 -0
  447. /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
  448. /chia/{util → simulator}/vdf_prover.py +0 -0
  449. /chia/{util → ssl}/ssl_check.py +0 -0
  450. /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
  451. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/LICENSE +0 -0
  452. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/WHEEL +0 -0
  453. {chia_blockchain-2.5.4rc1.dist-info → chia_blockchain-2.5.5.dist-info}/entry_points.txt +0 -0
@@ -7,12 +7,17 @@ import logging
7
7
  import traceback
8
8
  from concurrent.futures import Executor, ThreadPoolExecutor
9
9
  from enum import Enum
10
- from pathlib import Path
11
10
  from typing import TYPE_CHECKING, ClassVar, Optional, cast
12
11
 
13
12
  from chia_rs import (
13
+ BlockRecord,
14
14
  ConsensusConstants,
15
+ EndOfSubSlotBundle,
16
+ FullBlock,
17
+ HeaderBlock,
15
18
  SubEpochChallengeSegment,
19
+ SubEpochSummary,
20
+ UnfinishedBlock,
16
21
  additions_and_removals,
17
22
  get_flags_for_height_and_constants,
18
23
  )
@@ -21,30 +26,24 @@ from chia_rs.sized_ints import uint16, uint32, uint64, uint128
21
26
 
22
27
  from chia.consensus.block_body_validation import ForkInfo, validate_block_body
23
28
  from chia.consensus.block_header_validation import validate_unfinished_header_block
24
- from chia.consensus.block_record import BlockRecord
29
+ from chia.consensus.coin_store_protocol import CoinStoreProtocol
25
30
  from chia.consensus.cost_calculator import NPCResult
26
31
  from chia.consensus.difficulty_adjustment import get_next_sub_slot_iters_and_difficulty
27
32
  from chia.consensus.find_fork_point import lookup_fork_chain
28
33
  from chia.consensus.full_block_to_block_record import block_to_block_record
34
+ from chia.consensus.generator_tools import get_block_header
29
35
  from chia.consensus.get_block_generator import get_block_generator
30
36
  from chia.consensus.multiprocess_validation import PreValidationResult
31
37
  from chia.full_node.block_height_map import BlockHeightMap
32
38
  from chia.full_node.block_store import BlockStore
33
- from chia.full_node.coin_store import CoinStore
34
39
  from chia.types.blockchain_format.coin import Coin
35
- from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
36
40
  from chia.types.blockchain_format.vdf import VDFInfo
37
41
  from chia.types.coin_record import CoinRecord
38
- from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
39
- from chia.types.full_block import FullBlock
40
42
  from chia.types.generator_types import BlockGenerator
41
- from chia.types.header_block import HeaderBlock
42
- from chia.types.unfinished_block import UnfinishedBlock
43
43
  from chia.types.unfinished_header_block import UnfinishedHeaderBlock
44
44
  from chia.types.validation_state import ValidationState
45
45
  from chia.util.cpu import available_logical_cores
46
46
  from chia.util.errors import Err
47
- from chia.util.generator_tools import get_block_header
48
47
  from chia.util.hash import std_hash
49
48
  from chia.util.inline_executor import InlineExecutor
50
49
  from chia.util.priority_mutex import PriorityMutex
@@ -103,7 +102,7 @@ class Blockchain:
103
102
  # epoch summaries
104
103
  __height_map: BlockHeightMap
105
104
  # Unspent Store
106
- coin_store: CoinStore
105
+ coin_store: CoinStoreProtocol
107
106
  # Store
108
107
  block_store: BlockStore
109
108
  # Used to verify blocks in parallel
@@ -122,10 +121,10 @@ class Blockchain:
122
121
 
123
122
  @staticmethod
124
123
  async def create(
125
- coin_store: CoinStore,
124
+ coin_store: CoinStoreProtocol,
126
125
  block_store: BlockStore,
126
+ height_map: BlockHeightMap,
127
127
  consensus_constants: ConsensusConstants,
128
- blockchain_dir: Path,
129
128
  reserved_cores: int,
130
129
  *,
131
130
  single_threaded: bool = False,
@@ -157,7 +156,7 @@ class Blockchain:
157
156
  self.coin_store = coin_store
158
157
  self.block_store = block_store
159
158
  self._shut_down = False
160
- await self._load_chain_from_store(blockchain_dir)
159
+ await self._load_chain_from_store(height_map)
161
160
  self._seen_compact_proofs = set()
162
161
  return self
163
162
 
@@ -165,11 +164,11 @@ class Blockchain:
165
164
  self._shut_down = True
166
165
  self.pool.shutdown(wait=True)
167
166
 
168
- async def _load_chain_from_store(self, blockchain_dir: Path) -> None:
167
+ async def _load_chain_from_store(self, height_map: BlockHeightMap) -> None:
169
168
  """
170
169
  Initializes the state of the Blockchain class from the database.
171
170
  """
172
- self.__height_map = await BlockHeightMap.create(blockchain_dir, self.block_store.db_wrapper)
171
+ self.__height_map = height_map
173
172
  self.__block_records = {}
174
173
  self.__heights_in_cache = {}
175
174
  block_records, peak = await self.block_store.get_block_records_close_to_peak(self.constants.BLOCKS_CACHE_SIZE)
@@ -268,7 +267,7 @@ class Blockchain:
268
267
  assert block.height == 0 or fork_info.peak_hash == block.prev_header_hash
269
268
 
270
269
  additions: list[tuple[Coin, Optional[bytes]]] = []
271
- removals: list[Coin] = []
270
+ removals: list[tuple[bytes32, Coin]] = []
272
271
  if block.transactions_generator is not None:
273
272
  block_generator: Optional[BlockGenerator] = await get_block_generator(self.lookup_block_generators, block)
274
273
  assert block_generator is not None
@@ -361,7 +360,7 @@ class Blockchain:
361
360
  fork_info.reset(block.height - 1, block.prev_header_hash)
362
361
 
363
362
  # we dont consider block_record passed in here since it might be from
364
- # a current sync process and not yet fully validated and commited to the DB
363
+ # a current sync process and not yet fully validated and committed to the DB
365
364
  block_rec_from_db = await self.get_block_record_from_db(header_hash)
366
365
  if block_rec_from_db is not None:
367
366
  # We have already validated the block, but if it's not part of the
@@ -511,8 +510,7 @@ class Blockchain:
511
510
  )
512
511
 
513
512
  if block_record.prev_hash != peak.header_hash:
514
- for coin_record in await self.coin_store.rollback_to_block(fork_info.fork_height):
515
- rolled_back_state[coin_record.name] = coin_record
513
+ rolled_back_state = await self.coin_store.rollback_to_block(fork_info.fork_height)
516
514
  if self._log_coins and len(rolled_back_state) > 0:
517
515
  log.info(f"rolled back {len(rolled_back_state)} coins, to fork height {fork_info.fork_height}")
518
516
  log.info(
@@ -566,8 +564,8 @@ class Blockchain:
566
564
  if fork_add.confirmed_height == height and fork_add.is_coinbase
567
565
  ]
568
566
  tx_additions = [
569
- fork_add.coin
570
- for fork_add in fork_info.additions_since_fork.values()
567
+ (coin_id, fork_add.coin, fork_add.same_as_parent)
568
+ for coin_id, fork_add in fork_info.additions_since_fork.items()
571
569
  if fork_add.confirmed_height == height and not fork_add.is_coinbase
572
570
  ]
573
571
  tx_removals = [
@@ -588,7 +586,7 @@ class Blockchain:
588
586
  f"height: {fetched_block_record.height}), {len(tx_removals)} spends"
589
587
  )
590
588
  log.info("rewards: %s", ",".join([add.name().hex()[0:6] for add in included_reward_coins]))
591
- log.info("additions: %s", ",".join([add.name().hex()[0:6] for add in tx_additions]))
589
+ log.info("additions: %s", ",".join([add[0].hex()[0:6] for add in tx_additions]))
592
590
  log.info("removals: %s", ",".join([f"{rem}"[0:6] for rem in tx_removals]))
593
591
 
594
592
  # we made it to the end successfully
@@ -612,20 +610,13 @@ class Blockchain:
612
610
  [fork_add.coin for fork_add in fork_info.additions_since_fork.values() if fork_add.is_coinbase],
613
611
  )
614
612
 
615
- def get_next_difficulty(self, header_hash: bytes32, new_slot: bool) -> uint64:
613
+ def get_next_sub_slot_iters_and_difficulty(self, header_hash: bytes32, new_slot: bool) -> tuple[uint64, uint64]:
616
614
  curr = self.try_block_record(header_hash)
617
615
  assert curr is not None
618
616
  if curr.height <= 2:
619
- return self.constants.DIFFICULTY_STARTING
620
-
621
- return get_next_sub_slot_iters_and_difficulty(self.constants, new_slot, curr, self)[1]
617
+ return self.constants.SUB_SLOT_ITERS_STARTING, self.constants.DIFFICULTY_STARTING
622
618
 
623
- def get_next_slot_iters(self, header_hash: bytes32, new_slot: bool) -> uint64:
624
- curr = self.try_block_record(header_hash)
625
- assert curr is not None
626
- if curr.height <= 2:
627
- return self.constants.SUB_SLOT_ITERS_STARTING
628
- return get_next_sub_slot_iters_and_difficulty(self.constants, new_slot, curr, self)[0]
619
+ return get_next_sub_slot_iters_and_difficulty(self.constants, new_slot, curr, self)
629
620
 
630
621
  async def get_sp_and_ip_sub_slots(
631
622
  self, header_hash: bytes32
@@ -2,14 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Optional, Protocol
4
4
 
5
- from chia_rs import SubEpochChallengeSegment
5
+ from chia_rs import BlockRecord, HeaderBlock, SubEpochChallengeSegment, SubEpochSummary
6
6
  from chia_rs.sized_bytes import bytes32
7
7
  from chia_rs.sized_ints import uint32
8
8
 
9
- from chia.consensus.block_record import BlockRecord
10
- from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
11
- from chia.types.header_block import HeaderBlock
12
-
13
9
 
14
10
  class BlockRecordsProtocol(Protocol):
15
11
  def try_block_record(self, header_hash: bytes32) -> Optional[BlockRecord]: ...
@@ -0,0 +1,57 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Optional
4
+
5
+ from chia_rs import (
6
+ SpendBundleConditions,
7
+ )
8
+ from chia_rs.sized_bytes import bytes32
9
+ from chia_rs.sized_ints import uint32, uint64
10
+
11
+ from chia.types.coin_record import CoinRecord
12
+ from chia.util.errors import Err
13
+
14
+
15
+ def check_time_locks(
16
+ removal_coin_records: dict[bytes32, CoinRecord],
17
+ bundle_conds: SpendBundleConditions,
18
+ prev_transaction_block_height: uint32,
19
+ timestamp: uint64,
20
+ ) -> Optional[Err]:
21
+ """
22
+ Check all time and height conditions against current state.
23
+ """
24
+
25
+ if prev_transaction_block_height < bundle_conds.height_absolute:
26
+ return Err.ASSERT_HEIGHT_ABSOLUTE_FAILED
27
+ if timestamp < bundle_conds.seconds_absolute:
28
+ return Err.ASSERT_SECONDS_ABSOLUTE_FAILED
29
+ if bundle_conds.before_height_absolute is not None:
30
+ if prev_transaction_block_height >= bundle_conds.before_height_absolute:
31
+ return Err.ASSERT_BEFORE_HEIGHT_ABSOLUTE_FAILED
32
+ if bundle_conds.before_seconds_absolute is not None:
33
+ if timestamp >= bundle_conds.before_seconds_absolute:
34
+ return Err.ASSERT_BEFORE_SECONDS_ABSOLUTE_FAILED
35
+
36
+ for spend in bundle_conds.spends:
37
+ unspent = removal_coin_records[bytes32(spend.coin_id)]
38
+ if spend.birth_height is not None:
39
+ if spend.birth_height != unspent.confirmed_block_index:
40
+ return Err.ASSERT_MY_BIRTH_HEIGHT_FAILED
41
+ if spend.birth_seconds is not None:
42
+ if spend.birth_seconds != unspent.timestamp:
43
+ return Err.ASSERT_MY_BIRTH_SECONDS_FAILED
44
+ if spend.height_relative is not None:
45
+ if prev_transaction_block_height < unspent.confirmed_block_index + spend.height_relative:
46
+ return Err.ASSERT_HEIGHT_RELATIVE_FAILED
47
+ if spend.seconds_relative is not None:
48
+ if timestamp < unspent.timestamp + spend.seconds_relative:
49
+ return Err.ASSERT_SECONDS_RELATIVE_FAILED
50
+ if spend.before_height_relative is not None:
51
+ if prev_transaction_block_height >= unspent.confirmed_block_index + spend.before_height_relative:
52
+ return Err.ASSERT_BEFORE_HEIGHT_RELATIVE_FAILED
53
+ if spend.before_seconds_relative is not None:
54
+ if timestamp >= unspent.timestamp + spend.before_seconds_relative:
55
+ return Err.ASSERT_BEFORE_SECONDS_RELATIVE_FAILED
56
+
57
+ return None
@@ -0,0 +1,151 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Collection
4
+ from typing import Optional, Protocol
5
+
6
+ from chia_rs import CoinState
7
+ from chia_rs.sized_bytes import bytes32
8
+ from chia_rs.sized_ints import uint32, uint64
9
+
10
+ from chia.types.blockchain_format.coin import Coin
11
+ from chia.types.coin_record import CoinRecord
12
+ from chia.types.mempool_item import UnspentLineageInfo
13
+
14
+
15
+ class CoinStoreProtocol(Protocol):
16
+ """
17
+ Protocol defining the interface for CoinStore.
18
+ This is a substitute for importing from chia.full_node.coin_store directly.
19
+ """
20
+
21
+ async def new_block(
22
+ self,
23
+ height: uint32,
24
+ timestamp: uint64,
25
+ included_reward_coins: Collection[Coin],
26
+ tx_additions: Collection[tuple[bytes32, Coin, bool]],
27
+ tx_removals: list[bytes32],
28
+ ) -> None:
29
+ """
30
+ Add a new block to the coin store
31
+ """
32
+
33
+ async def get_coin_record(self, coin_id: bytes32) -> Optional[CoinRecord]:
34
+ """
35
+ Returns the coin record for the specified coin id
36
+ """
37
+
38
+ async def get_coin_records(self, coin_ids: Collection[bytes32]) -> list[CoinRecord]:
39
+ """
40
+ Returns the coin records for the specified coin ids
41
+ """
42
+
43
+ async def get_coins_added_at_height(self, height: uint32) -> list[CoinRecord]:
44
+ """
45
+ Returns the coins added at a specific height
46
+ """
47
+
48
+ async def get_coins_removed_at_height(self, height: uint32) -> list[CoinRecord]:
49
+ """
50
+ Returns the coins removed at a specific height
51
+ """
52
+
53
+ async def get_coin_records_by_puzzle_hash(
54
+ self,
55
+ include_spent_coins: bool,
56
+ puzzle_hash: bytes32,
57
+ start_height: uint32 = ...,
58
+ end_height: uint32 = ...,
59
+ ) -> list[CoinRecord]:
60
+ """
61
+ Returns the coin records for a specific puzzle hash
62
+ """
63
+
64
+ async def get_coin_records_by_puzzle_hashes(
65
+ self,
66
+ coins: bool,
67
+ puzzle_hashes: list[bytes32],
68
+ start_height: uint32 = ...,
69
+ end_height: uint32 = ...,
70
+ ) -> list[CoinRecord]:
71
+ """
72
+ Returns the coin records for a list of puzzle hashes
73
+ """
74
+
75
+ async def get_coin_records_by_names(
76
+ self,
77
+ include_spent_coins: bool,
78
+ names: list[bytes32],
79
+ start_height: uint32 = ...,
80
+ end_height: uint32 = ...,
81
+ ) -> list[CoinRecord]:
82
+ """
83
+ Returns the coin records for a list of coin names
84
+ """
85
+
86
+ async def get_coin_states_by_puzzle_hashes(
87
+ self,
88
+ include_spent_coins: bool,
89
+ puzzle_hashes: set[bytes32],
90
+ min_height: uint32 = uint32(0),
91
+ *,
92
+ max_items: int = ...,
93
+ ) -> set[CoinState]:
94
+ """
95
+ Returns the coin states for a set of puzzle hashes
96
+ """
97
+
98
+ async def get_coin_records_by_parent_ids(
99
+ self,
100
+ include_spent_coins: bool,
101
+ parent_ids: list[bytes32],
102
+ start_height: uint32 = ...,
103
+ end_height: uint32 = ...,
104
+ ) -> list[CoinRecord]:
105
+ """
106
+ Returns the coin records for a list of parent ids
107
+ """
108
+
109
+ async def get_coin_states_by_ids(
110
+ self,
111
+ include_spent_coins: bool,
112
+ coin_ids: Collection[bytes32],
113
+ min_height: uint32 = uint32(0),
114
+ *,
115
+ max_height: uint32 = ...,
116
+ max_items: int = ...,
117
+ ) -> list[CoinState]:
118
+ """
119
+ Returns the coin states for a collection of coin ids
120
+ """
121
+
122
+ async def batch_coin_states_by_puzzle_hashes(
123
+ self,
124
+ puzzle_hashes: list[bytes32],
125
+ *,
126
+ min_height: uint32 = ...,
127
+ include_spent: bool = ...,
128
+ include_unspent: bool = ...,
129
+ include_hinted: bool = ...,
130
+ min_amount: uint64 = ...,
131
+ max_items: int = ...,
132
+ ) -> tuple[list[CoinState], Optional[uint32]]:
133
+ """
134
+ Returns the coin states, as well as the next block height (or `None` if finished).
135
+ """
136
+
137
+ async def get_unspent_lineage_info_for_puzzle_hash(self, puzzle_hash: bytes32) -> Optional[UnspentLineageInfo]:
138
+ """
139
+ Lookup the most recent unspent lineage that matches a puzzle hash
140
+ """
141
+
142
+ async def rollback_to_block(self, block_index: int) -> dict[bytes32, CoinRecord]:
143
+ """
144
+ Rolls back the blockchain to the specified block index
145
+ """
146
+
147
+ # DEPRECATED: do not use in new code
148
+ async def is_empty(self) -> bool:
149
+ """
150
+ Returns True if the coin store is empty
151
+ """
@@ -1,15 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
- from chia_rs import G1Element
4
3
  from chia_rs.sized_bytes import bytes32
5
4
  from chia_rs.sized_ints import uint32, uint64
6
5
 
7
6
  from chia.types.blockchain_format.coin import Coin
8
- from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
9
-
10
-
11
- def create_puzzlehash_for_pk(pub_key: G1Element) -> bytes32:
12
- return puzzle_hash_for_pk(pub_key)
13
7
 
14
8
 
15
9
  def pool_parent_id(block_height: uint32, genesis_challenge: bytes32) -> bytes32:
@@ -7,3 +7,7 @@ class ConditionCost(Enum):
7
7
  # Condition Costs
8
8
  AGG_SIG = 1200000 # the cost of one G1 subgroup check + aggregated signature validation
9
9
  CREATE_COIN = 1800000
10
+
11
+ # with hard fork 2 (Chia 3.0) all conditions past the first 100 (per spend)
12
+ # has an additional cost of 500
13
+ GENERIC_CONDITION_COST = 500
@@ -3,17 +3,16 @@ from __future__ import annotations
3
3
  from functools import lru_cache
4
4
  from typing import Callable, Union
5
5
 
6
- from chia_rs import G1Element
6
+ from chia_rs import G1Element, SpendBundleConditions, SpendConditions
7
7
  from chia_rs.sized_bytes import bytes32
8
8
  from chia_rs.sized_ints import uint64
9
- from clvm.casts import int_from_bytes, int_to_bytes
10
9
 
11
10
  from chia.types.blockchain_format.coin import Coin
12
- from chia.types.blockchain_format.program import Program
11
+ from chia.types.blockchain_format.program import Program, run_with_cost
13
12
  from chia.types.blockchain_format.serialized_program import SerializedProgram
14
13
  from chia.types.condition_opcodes import ConditionOpcode
15
14
  from chia.types.condition_with_args import ConditionWithArgs
16
- from chia.types.spend_bundle_conditions import SpendBundleConditions, SpendConditions
15
+ from chia.util.casts import int_from_bytes, int_to_bytes
17
16
  from chia.util.errors import ConsensusError, Err
18
17
  from chia.util.hash import std_hash
19
18
 
@@ -195,7 +194,7 @@ def conditions_for_solution(
195
194
  ) -> list[ConditionWithArgs]:
196
195
  # get the standard script for a puzzle hash and feed in the solution
197
196
  try:
198
- _cost, r = puzzle_reveal.run_with_cost(max_cost, solution)
197
+ _cost, r = run_with_cost(puzzle_reveal, max_cost, solution)
199
198
  return parse_sexp_to_conditions(r)
200
199
  except Program.EvalError as e:
201
200
  raise ConsensusError(Err.SEXP_ERROR, [str(e)]) from e
@@ -3,9 +3,9 @@ from __future__ import annotations
3
3
  from dataclasses import dataclass
4
4
  from typing import Optional
5
5
 
6
+ from chia_rs import SpendBundleConditions
6
7
  from chia_rs.sized_ints import uint16
7
8
 
8
- from chia.types.spend_bundle_conditions import SpendBundleConditions
9
9
  from chia.util.streamable import Streamable, streamable
10
10
 
11
11
 
@@ -14,7 +14,7 @@ DEFAULT_CONSTANTS = ConsensusConstants(
14
14
  SLOT_BLOCKS_TARGET=uint32(32),
15
15
  MIN_BLOCKS_PER_CHALLENGE_BLOCK=uint8(16), # Must be less than half of SLOT_BLOCKS_TARGET
16
16
  MAX_SUB_SLOT_BLOCKS=uint32(128), # Must be less than half of SUB_EPOCH_BLOCKS
17
- NUM_SPS_SUB_SLOT=uint32(64), # Must be a power of 2
17
+ NUM_SPS_SUB_SLOT=uint8(64), # Must be a power of 2
18
18
  SUB_SLOT_ITERS_STARTING=uint64(2**27),
19
19
  # DIFFICULTY_STARTING is the starting difficulty for the first epoch, which is then further
20
20
  # multiplied by another factor of DIFFICULTY_CONSTANT_FACTOR, to be used in the VDF iter calculation formula.
@@ -26,9 +26,16 @@ DEFAULT_CONSTANTS = ConsensusConstants(
26
26
  EPOCH_BLOCKS=uint32(4608), # The number of blocks per epoch, mainnet 4608. Must be multiple of SUB_EPOCH_SB
27
27
  SIGNIFICANT_BITS=uint8(8), # The number of bits to look at in difficulty and min iters. The rest are zeroed
28
28
  DISCRIMINANT_SIZE_BITS=uint16(1024), # Max is 1024 (based on ClassGroupElement int size)
29
- NUMBER_ZERO_BITS_PLOT_FILTER=uint8(9), # H(plot signature of the challenge) must start with these many zeroes
30
- MIN_PLOT_SIZE=uint8(32), # 32 for mainnet
31
- MAX_PLOT_SIZE=uint8(50),
29
+ NUMBER_ZERO_BITS_PLOT_FILTER_V1=uint8(
30
+ 9
31
+ ), # H(plot signature of the challenge) must start with these many zeroes, for v1 plots
32
+ NUMBER_ZERO_BITS_PLOT_FILTER_V2=uint8(
33
+ 5
34
+ ), # H(plot signature of the challenge) must start with these many zeroes. for v2 plots
35
+ MIN_PLOT_SIZE_V1=uint8(32), # 32 for mainnet
36
+ MAX_PLOT_SIZE_V1=uint8(50),
37
+ MIN_PLOT_SIZE_V2=uint8(28),
38
+ MAX_PLOT_SIZE_V2=uint8(32),
32
39
  SUB_SLOT_TIME_TARGET=uint16(600), # The target number of seconds per slot, mainnet 600
33
40
  NUM_SP_INTERVALS_EXTRA=uint8(3), # The number of sp intervals to add to the signage point
34
41
  MAX_FUTURE_TIME2=uint32(2 * 60), # The next block can have a timestamp of at most these many seconds in the future
@@ -38,7 +45,7 @@ DEFAULT_CONSTANTS = ConsensusConstants(
38
45
  # Default used for tests is std_hash(b'')
39
46
  GENESIS_CHALLENGE=bytes32.fromhex("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"),
40
47
  # Forks of chia should change the AGG_SIG_*_ADDITIONAL_DATA values to provide
41
- # replay attack protection. This is set to mainnet genesis challange
48
+ # replay attack protection. This is set to mainnet genesis challenge
42
49
  AGG_SIG_ME_ADDITIONAL_DATA=AGG_SIG_DATA,
43
50
  AGG_SIG_PARENT_ADDITIONAL_DATA=std_hash(AGG_SIG_DATA + bytes([43])),
44
51
  AGG_SIG_PUZZLE_ADDITIONAL_DATA=std_hash(AGG_SIG_DATA + bytes([44])),
@@ -72,19 +79,35 @@ DEFAULT_CONSTANTS = ConsensusConstants(
72
79
  MAX_GENERATOR_SIZE=uint32(1000000),
73
80
  MAX_GENERATOR_REF_LIST_SIZE=uint32(512), # Number of references allowed in the block generator ref list
74
81
  POOL_SUB_SLOT_ITERS=uint64(37600000000), # iters limit * NUM_SPS
75
- SOFT_FORK6_HEIGHT=uint32(6800000),
76
82
  # June 2024
77
83
  HARD_FORK_HEIGHT=uint32(5496000),
84
+ HARD_FORK2_HEIGHT=uint32(0xFFFFFFFA),
85
+ # starting at the hard fork 2 height, v1 plots will gradually be phased out,
86
+ # and stop working entirely after this many blocks
87
+ PLOT_V1_PHASE_OUT=uint32(1179648),
78
88
  # June 2027
79
89
  PLOT_FILTER_128_HEIGHT=uint32(10542000),
80
90
  # June 2030
81
91
  PLOT_FILTER_64_HEIGHT=uint32(15592000),
82
92
  # June 2033
83
93
  PLOT_FILTER_32_HEIGHT=uint32(20643000),
94
+ PLOT_DIFFICULTY_INITIAL=uint8(2),
95
+ PLOT_DIFFICULTY_4_HEIGHT=uint32(0xFFFFFFFB),
96
+ PLOT_DIFFICULTY_5_HEIGHT=uint32(0xFFFFFFFC),
97
+ PLOT_DIFFICULTY_6_HEIGHT=uint32(0xFFFFFFFD),
98
+ PLOT_DIFFICULTY_7_HEIGHT=uint32(0xFFFFFFFE),
99
+ PLOT_DIFFICULTY_8_HEIGHT=uint32(0xFFFFFFFF),
84
100
  )
85
101
 
86
102
 
87
103
  def update_testnet_overrides(network_id: str, overrides: dict[str, Any]) -> None:
88
- if network_id == "testnet11":
89
- if "SOFT_FORK6_HEIGHT" not in overrides:
90
- overrides["SOFT_FORK6_HEIGHT"] = 2000000
104
+ # These constants changed names to support v2 plots
105
+ if "MIN_PLOT_SIZE_V1" not in overrides and "MIN_PLOT_SIZE" in overrides:
106
+ overrides["MIN_PLOT_SIZE_V1"] = overrides["MIN_PLOT_SIZE"]
107
+ overrides.pop("MIN_PLOT_SIZE")
108
+ if "MAX_PLOT_SIZE_V1" not in overrides and "MAX_PLOT_SIZE" in overrides:
109
+ overrides["MAX_PLOT_SIZE_V1"] = overrides["MAX_PLOT_SIZE"]
110
+ overrides.pop("MAX_PLOT_SIZE")
111
+ if network_id in {"testnet11", "testneta"}:
112
+ if "MIN_PLOT_SIZE_V2" not in overrides:
113
+ overrides["MIN_PLOT_SIZE_V2"] = 18
chia/consensus/deficit.py CHANGED
@@ -2,11 +2,9 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Optional
4
4
 
5
- from chia_rs import ConsensusConstants
5
+ from chia_rs import BlockRecord, ConsensusConstants
6
6
  from chia_rs.sized_ints import uint8, uint32
7
7
 
8
- from chia.consensus.block_record import BlockRecord
9
-
10
8
 
11
9
  def calculate_deficit(
12
10
  constants: ConsensusConstants,
@@ -2,11 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Optional
4
4
 
5
- from chia_rs import ConsensusConstants
5
+ from chia_rs import BlockRecord, ConsensusConstants
6
6
  from chia_rs.sized_bytes import bytes32
7
7
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
8
8
 
9
- from chia.consensus.block_record import BlockRecord
10
9
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
11
10
  from chia.util.significant_bits import count_significant_bits, truncate_to_significant_bits
12
11
 
@@ -2,13 +2,11 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Union
4
4
 
5
- from chia_rs import ConsensusConstants
5
+ from chia_rs import BlockRecord, ConsensusConstants, HeaderBlock
6
6
  from chia_rs.sized_bytes import bytes32
7
7
  from chia_rs.sized_ints import uint32
8
8
 
9
- from chia.consensus.block_record import BlockRecord
10
9
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
11
- from chia.types.header_block import HeaderBlock
12
10
 
13
11
 
14
12
  async def find_fork_point_in_chain(
@@ -2,21 +2,16 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Optional, Union
4
4
 
5
- from chia_rs import ConsensusConstants
5
+ from chia_rs import BlockRecord, ChallengeBlockInfo, ConsensusConstants, FullBlock, HeaderBlock, SubEpochSummary
6
6
  from chia_rs.sized_bytes import bytes32
7
7
  from chia_rs.sized_ints import uint8, uint32, uint64
8
8
 
9
- from chia.consensus.block_record import BlockRecord
10
9
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
11
10
  from chia.consensus.deficit import calculate_deficit
12
11
  from chia.consensus.difficulty_adjustment import get_next_sub_slot_iters_and_difficulty
13
12
  from chia.consensus.make_sub_epoch_summary import make_sub_epoch_summary
14
13
  from chia.consensus.pot_iterations import is_overflow_block
15
14
  from chia.types.blockchain_format.classgroup import ClassgroupElement
16
- from chia.types.blockchain_format.slots import ChallengeBlockInfo
17
- from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
18
- from chia.types.full_block import FullBlock
19
- from chia.types.header_block import HeaderBlock
20
15
  from chia.util.errors import Err
21
16
 
22
17
 
@@ -3,14 +3,12 @@ from __future__ import annotations
3
3
  from collections.abc import Collection
4
4
  from typing import Optional
5
5
 
6
+ from chia_rs import FullBlock, HeaderBlock, SpendBundleConditions
6
7
  from chia_rs.sized_bytes import bytes32
7
8
  from chia_rs.sized_ints import uint64
8
9
  from chiabip158 import PyBIP158
9
10
 
10
11
  from chia.types.blockchain_format.coin import Coin
11
- from chia.types.full_block import FullBlock
12
- from chia.types.header_block import HeaderBlock
13
- from chia.types.spend_bundle_conditions import SpendBundleConditions
14
12
 
15
13
 
16
14
  def get_block_header(
@@ -1,17 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import Union
4
+ from typing import Optional, Union
5
5
 
6
- from chia_rs import ConsensusConstants
6
+ from chia_rs import BlockRecord, ConsensusConstants, FullBlock, HeaderBlock, UnfinishedBlock
7
7
  from chia_rs.sized_bytes import bytes32
8
- from chia_rs.sized_ints import uint64
8
+ from chia_rs.sized_ints import uint32, uint64
9
9
 
10
- from chia.consensus.block_record import BlockRecord
11
10
  from chia.consensus.blockchain_interface import BlockRecordsProtocol
12
- from chia.types.full_block import FullBlock
13
- from chia.types.header_block import HeaderBlock
14
- from chia.types.unfinished_block import UnfinishedBlock
15
11
  from chia.types.unfinished_header_block import UnfinishedHeaderBlock
16
12
 
17
13
  log = logging.getLogger(__name__)
@@ -105,3 +101,30 @@ def get_block_challenge(
105
101
  curr = blocks.block_record(curr.prev_hash)
106
102
  challenge = reversed_challenge_hashes[challenges_to_look_for - 1]
107
103
  return challenge
104
+
105
+
106
+ def prev_tx_block(
107
+ blocks: BlockRecordsProtocol,
108
+ prev_b: Optional[Union[BlockRecord, FullBlock, HeaderBlock]],
109
+ ) -> uint32:
110
+ # todo add check to make sure we dont return tx block from same sp as block we are validating
111
+ if prev_b is None:
112
+ return uint32(0)
113
+ if isinstance(prev_b, BlockRecord):
114
+ if prev_b.prev_transaction_block_hash is not None:
115
+ return prev_b.height
116
+ else:
117
+ curr = prev_b
118
+ elif isinstance(prev_b, FullBlock):
119
+ if prev_b.foliage_transaction_block is not None:
120
+ return prev_b.height
121
+ else:
122
+ curr = blocks.block_record(prev_b.header_hash)
123
+ elif isinstance(prev_b, HeaderBlock):
124
+ if prev_b.foliage_transaction_block is not None:
125
+ return prev_b.height
126
+ else:
127
+ curr = blocks.block_record(prev_b.header_hash)
128
+ while curr.is_transaction_block is False and curr.height > 0:
129
+ curr = blocks.block_record(curr.prev_hash)
130
+ return curr.height