chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5rc2__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 +421 -69
  63. chia/_tests/core/mempool/test_mempool_performance.py +3 -2
  64. chia/_tests/core/mempool/test_singleton_fast_forward.py +60 -131
  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 +143 -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 +26 -40
  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.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/METADATA +7 -7
  424. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.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.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/LICENSE +0 -0
  452. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/WHEEL +0 -0
  453. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/entry_points.txt +0 -0
@@ -1,21 +1,18 @@
1
1
  from __future__ import annotations
2
2
 
3
- import copy
4
3
  import dataclasses
5
- from collections.abc import Awaitable
6
- from typing import Callable, Optional
4
+ from typing import Optional
7
5
 
8
- from chia_rs import ConsensusConstants, fast_forward_singleton, get_conditions_from_spendbundle
6
+ from chia_rs import CoinSpend, ConsensusConstants, SpendBundle, fast_forward_singleton, get_conditions_from_spendbundle
9
7
  from chia_rs.sized_bytes import bytes32
10
8
  from chia_rs.sized_ints import uint32, uint64
11
9
 
12
10
  from chia.consensus.condition_costs import ConditionCost
13
11
  from chia.types.blockchain_format.coin import Coin
12
+ from chia.types.blockchain_format.program import run_mempool_with_cost
14
13
  from chia.types.blockchain_format.serialized_program import SerializedProgram
15
- from chia.types.coin_spend import CoinSpend
16
14
  from chia.types.internal_mempool_item import InternalMempoolItem
17
- from chia.types.mempool_item import BundleCoinSpend
18
- from chia.types.spend_bundle import SpendBundle
15
+ from chia.types.mempool_item import BundleCoinSpend, UnspentLineageInfo
19
16
  from chia.util.errors import Err
20
17
 
21
18
 
@@ -33,7 +30,7 @@ def run_for_cost(
33
30
  puzzle_reveal: SerializedProgram, solution: SerializedProgram, additions_count: int, max_cost: int
34
31
  ) -> uint64:
35
32
  create_coins_cost = additions_count * ConditionCost.CREATE_COIN.value
36
- clvm_cost, _ = puzzle_reveal.run_mempool_with_cost(max_cost, solution)
33
+ clvm_cost, _ = run_mempool_with_cost(puzzle_reveal, max_cost, solution)
37
34
  saved_cost = uint64(clvm_cost + create_coins_cost)
38
35
  return saved_cost
39
36
 
@@ -44,15 +41,6 @@ class DedupCoinSpend:
44
41
  cost: Optional[uint64]
45
42
 
46
43
 
47
- @dataclasses.dataclass(frozen=True)
48
- class UnspentLineageInfo:
49
- coin_id: bytes32
50
- coin_amount: uint64
51
- parent_id: bytes32
52
- parent_amount: uint64
53
- parent_parent_id: bytes32
54
-
55
-
56
44
  def set_next_singleton_version(
57
45
  current_singleton: Coin, singleton_additions: list[Coin], fast_forward_spends: dict[bytes32, UnspentLineageInfo]
58
46
  ) -> None:
@@ -70,16 +58,19 @@ def set_next_singleton_version(
70
58
  next iteration
71
59
  """
72
60
  singleton_child = next(
73
- (addition for addition in singleton_additions if addition.puzzle_hash == current_singleton.puzzle_hash), None
61
+ (
62
+ addition
63
+ for addition in singleton_additions
64
+ if addition.puzzle_hash == current_singleton.puzzle_hash and addition.amount == current_singleton.amount
65
+ ),
66
+ None,
74
67
  )
75
68
  if singleton_child is None:
76
69
  raise ValueError("Could not find fast forward child singleton.")
77
70
  # Keep track of this in order to chain the next ff
78
71
  fast_forward_spends[current_singleton.puzzle_hash] = UnspentLineageInfo(
79
72
  coin_id=singleton_child.name(),
80
- coin_amount=singleton_child.amount,
81
73
  parent_id=singleton_child.parent_coin_info,
82
- parent_amount=current_singleton.amount,
83
74
  parent_parent_id=current_singleton.parent_coin_info,
84
75
  )
85
76
 
@@ -107,14 +98,10 @@ def perform_the_fast_forward(
107
98
  ValueError if none of the additions are considered to be the singleton's
108
99
  next iteration
109
100
  """
110
- new_coin = Coin(
111
- unspent_lineage_info.parent_id, spend_data.coin_spend.coin.puzzle_hash, unspent_lineage_info.coin_amount
112
- )
113
- new_parent = Coin(
114
- unspent_lineage_info.parent_parent_id,
115
- spend_data.coin_spend.coin.puzzle_hash,
116
- unspent_lineage_info.parent_amount,
117
- )
101
+ singleton_ph = spend_data.coin_spend.coin.puzzle_hash
102
+ singleton_amount = spend_data.coin_spend.coin.amount
103
+ new_coin = Coin(unspent_lineage_info.parent_id, singleton_ph, singleton_amount)
104
+ new_parent = Coin(unspent_lineage_info.parent_parent_id, singleton_ph, singleton_amount)
118
105
  # These hold because puzzle hash is not expected to change
119
106
  assert new_coin.name() == unspent_lineage_info.coin_id
120
107
  assert new_parent.name() == unspent_lineage_info.parent_id
@@ -126,7 +113,7 @@ def perform_the_fast_forward(
126
113
  for addition in spend_data.additions:
127
114
  patched_addition = Coin(unspent_lineage_info.coin_id, addition.puzzle_hash, addition.amount)
128
115
  patched_additions.append(patched_addition)
129
- if addition.puzzle_hash == spend_data.coin_spend.coin.puzzle_hash:
116
+ if addition.puzzle_hash == singleton_ph and addition.amount == singleton_amount:
130
117
  # We found the next version of this singleton
131
118
  singleton_child = patched_addition
132
119
  if singleton_child is None:
@@ -135,9 +122,7 @@ def perform_the_fast_forward(
135
122
  # Keep track of this in order to chain the next ff
136
123
  fast_forward_spends[spend_data.coin_spend.coin.puzzle_hash] = UnspentLineageInfo(
137
124
  coin_id=singleton_child.name(),
138
- coin_amount=singleton_child.amount,
139
125
  parent_id=singleton_child.parent_coin_info,
140
- parent_amount=unspent_lineage_info.coin_amount,
141
126
  parent_parent_id=unspent_lineage_info.parent_id,
142
127
  )
143
128
  return new_coin_spend, patched_additions
@@ -149,9 +134,8 @@ class SkipDedup(BaseException):
149
134
 
150
135
 
151
136
  @dataclasses.dataclass(frozen=True)
152
- class EligibleCoinSpends:
137
+ class IdenticalSpendDedup:
153
138
  deduplication_spends: dict[bytes32, DedupCoinSpend] = dataclasses.field(default_factory=dict)
154
- fast_forward_spends: dict[bytes32, UnspentLineageInfo] = dataclasses.field(default_factory=dict)
155
139
 
156
140
  def get_deduplication_info(
157
141
  self, *, bundle_coin_spends: dict[bytes32, BundleCoinSpend], max_cost: int
@@ -234,13 +218,13 @@ class EligibleCoinSpends:
234
218
  self.deduplication_spends.update(new_dedup_spends)
235
219
  return unique_coin_spends, uint64(cost_saving), unique_additions
236
220
 
237
- async def process_fast_forward_spends(
238
- self,
239
- *,
240
- mempool_item: InternalMempoolItem,
241
- get_unspent_lineage_info_for_puzzle_hash: Callable[[bytes32], Awaitable[Optional[UnspentLineageInfo]]],
242
- height: uint32,
243
- constants: ConsensusConstants,
221
+
222
+ @dataclasses.dataclass(frozen=True)
223
+ class SingletonFastForward:
224
+ fast_forward_spends: dict[bytes32, UnspentLineageInfo] = dataclasses.field(default_factory=dict)
225
+
226
+ def process_fast_forward_spends(
227
+ self, *, mempool_item: InternalMempoolItem, height: uint32, constants: ConsensusConstants
244
228
  ) -> dict[bytes32, BundleCoinSpend]:
245
229
  """
246
230
  Provides the caller with a `bundle_coin_spends` map that has a proper
@@ -249,8 +233,6 @@ class EligibleCoinSpends:
249
233
 
250
234
  Args:
251
235
  mempool_item: The internal mempool item to process
252
- get_unspent_lineage_info_for_puzzle_hash: to lookup the most recent
253
- version of the singleton from the coin store
254
236
  constants: needed in order to refresh the mempool item if needed
255
237
  height: needed in order to refresh the mempool item if needed
256
238
 
@@ -262,18 +244,14 @@ class EligibleCoinSpends:
262
244
  If a fast forward cannot proceed, to prevent potential double spends
263
245
  """
264
246
 
265
- # Let's first create a copy of the mempool item's `bundle_coin_spends`
266
- # map to work on and return. This way we avoid the possibility of
267
- # propagating a modified version of this item through the network.
268
- bundle_coin_spends = copy.copy(mempool_item.bundle_coin_spends)
269
247
  new_coin_spends = []
270
- # Map of rebased singleton coin ID to coin spend and metadata
271
- ff_bundle_coin_spends = {}
272
- replaced_coin_ids = []
273
- for coin_id, spend_data in bundle_coin_spends.items():
248
+ new_bundle_coin_spends = {}
249
+ fast_forwarded_spends = 0
250
+ for coin_id, spend_data in mempool_item.bundle_coin_spends.items():
274
251
  if not spend_data.eligible_for_fast_forward:
275
252
  # Nothing to do for this spend, moving on
276
253
  new_coin_spends.append(spend_data.coin_spend)
254
+ new_bundle_coin_spends[coin_id] = spend_data
277
255
  continue
278
256
 
279
257
  # NOTE: We need to support finding the most recent version of a singleton
@@ -283,12 +261,10 @@ class EligibleCoinSpends:
283
261
  # See if we added a fast forward spend with this puzzle hash before
284
262
  unspent_lineage_info = self.fast_forward_spends.get(spend_data.coin_spend.coin.puzzle_hash)
285
263
  if unspent_lineage_info is None:
286
- # We didn't, so let's lookup the most recent version from the DB
287
- unspent_lineage_info = await get_unspent_lineage_info_for_puzzle_hash(
288
- spend_data.coin_spend.coin.puzzle_hash
289
- )
290
- if unspent_lineage_info is None:
264
+ # We didn't, so let's check the item's latest lineage info
265
+ if spend_data.latest_singleton_lineage is None:
291
266
  raise ValueError("Cannot proceed with singleton spend fast forward.")
267
+ unspent_lineage_info = spend_data.latest_singleton_lineage
292
268
  # See if we're the most recent version
293
269
  if unspent_lineage_info.coin_id == coin_id:
294
270
  # We are, so we don't need to fast forward, we just need to
@@ -300,6 +276,7 @@ class EligibleCoinSpends:
300
276
  )
301
277
  # Nothing more to do for this spend, moving on
302
278
  new_coin_spends.append(spend_data.coin_spend)
279
+ new_bundle_coin_spends[coin_id] = spend_data
303
280
  continue
304
281
  # We're not the most recent version, so let's fast forward
305
282
  new_coin_spend, patched_additions = perform_the_fast_forward(
@@ -307,9 +284,7 @@ class EligibleCoinSpends:
307
284
  spend_data=spend_data,
308
285
  fast_forward_spends=self.fast_forward_spends,
309
286
  )
310
- # Mark this coin for a coin spend data update
311
- replaced_coin_ids.append(coin_id)
312
- ff_bundle_coin_spends[new_coin_spend.coin.name()] = BundleCoinSpend(
287
+ new_bundle_coin_spends[new_coin_spend.coin.name()] = BundleCoinSpend(
313
288
  coin_spend=new_coin_spend,
314
289
  eligible_for_dedup=spend_data.eligible_for_dedup,
315
290
  eligible_for_fast_forward=spend_data.eligible_for_fast_forward,
@@ -319,6 +294,7 @@ class EligibleCoinSpends:
319
294
  # Update the list of coins spends that will make the new fast
320
295
  # forward spend bundle
321
296
  new_coin_spends.append(new_coin_spend)
297
+ fast_forwarded_spends += 1
322
298
  # We're done here, moving on
323
299
  continue
324
300
  # We've added a ff spend with this puzzle hash before, so build on that
@@ -331,9 +307,7 @@ class EligibleCoinSpends:
331
307
  spend_data=spend_data,
332
308
  fast_forward_spends=self.fast_forward_spends,
333
309
  )
334
- # Mark this coin for a coin spend data update
335
- replaced_coin_ids.append(coin_id)
336
- ff_bundle_coin_spends[new_coin_spend.coin.name()] = BundleCoinSpend(
310
+ new_bundle_coin_spends[new_coin_spend.coin.name()] = BundleCoinSpend(
337
311
  coin_spend=new_coin_spend,
338
312
  eligible_for_dedup=spend_data.eligible_for_dedup,
339
313
  eligible_for_fast_forward=spend_data.eligible_for_fast_forward,
@@ -342,9 +316,10 @@ class EligibleCoinSpends:
342
316
  )
343
317
  # Update the list of coins spends that make the new fast forward bundle
344
318
  new_coin_spends.append(new_coin_spend)
345
- if len(ff_bundle_coin_spends) == 0:
319
+ fast_forwarded_spends += 1
320
+ if fast_forwarded_spends == 0:
346
321
  # This item doesn't have any fast forward coins, nothing to do here
347
- return bundle_coin_spends
322
+ return new_bundle_coin_spends
348
323
  # Update the mempool item after validating the new spend bundle
349
324
  new_sb = SpendBundle(
350
325
  coin_spends=new_coin_spends, aggregated_signature=mempool_item.spend_bundle.aggregated_signature
@@ -364,10 +339,4 @@ class EligibleCoinSpends:
364
339
  raise ValueError(
365
340
  "Mempool item became invalid after singleton fast forward with an unspecified error."
366
341
  ) # pragma: no cover
367
-
368
- # Update bundle_coin_spends using the map of rebased singleton coin ID
369
- # to coin spend and metadata.
370
- for coin_id in replaced_coin_ids:
371
- bundle_coin_spends.pop(coin_id, None)
372
- bundle_coin_spends.update(ff_bundle_coin_spends)
373
- return bundle_coin_spends
342
+ return new_bundle_coin_spends
@@ -5,7 +5,6 @@ from dataclasses import dataclass, field
5
5
 
6
6
  from chia_rs.sized_ints import uint32, uint64
7
7
 
8
- from chia.full_node.fee_estimate import FeeEstimate, FeeEstimateGroup, FeeEstimateV2, fee_estimate_v2_to_v1
9
8
  from chia.full_node.fee_estimation import FeeMempoolInfo
10
9
  from chia.full_node.fee_tracker import (
11
10
  BucketResult,
@@ -14,6 +13,7 @@ from chia.full_node.fee_tracker import (
14
13
  get_bucket_index,
15
14
  get_estimate_time_intervals,
16
15
  )
16
+ from chia.protocols.fee_estimate import FeeEstimate, FeeEstimateGroup, FeeEstimateV2, fee_estimate_v2_to_v1
17
17
  from chia.types.fee_rate import FeeRate, FeeRateV2
18
18
 
19
19
 
@@ -11,32 +11,24 @@ from chia.types.fee_rate import FeeRateV2
11
11
  class FeeEstimatorInterface(Protocol):
12
12
  def new_block_height(self, block_height: uint32) -> None:
13
13
  """Called immediately when block height changes. Can be called multiple times before `new_block`"""
14
- pass
15
14
 
16
15
  def new_block(self, block_info: FeeBlockInfo) -> None:
17
16
  """A new transaction block has been added to the blockchain"""
18
- pass
19
17
 
20
18
  def add_mempool_item(self, mempool_item_info: FeeMempoolInfo, mempool_item: MempoolItemInfo) -> None:
21
19
  """A MempoolItem (transaction and associated info) has been added to the mempool"""
22
- pass
23
20
 
24
21
  def remove_mempool_item(self, mempool_info: FeeMempoolInfo, mempool_item: MempoolItemInfo) -> None:
25
22
  """A MempoolItem (transaction and associated info) has been removed from the mempool"""
26
- pass
27
23
 
28
24
  def estimate_fee_rate(self, *, time_offset_seconds: int) -> FeeRateV2:
29
25
  """time_offset_seconds: number of seconds into the future for which to estimate fee"""
30
- pass
31
26
 
32
27
  def mempool_size(self) -> CLVMCost:
33
28
  """Report last seen mempool size"""
34
- pass
35
29
 
36
30
  def mempool_max_size(self) -> CLVMCost:
37
31
  """Report current mempool max "size" (i.e. CLVM cost)"""
38
- pass
39
32
 
40
33
  def get_mempool_info(self) -> FeeMempoolInfo:
41
34
  """Report Mempool current configuration and state"""
42
- pass
@@ -107,8 +107,8 @@ class FeeStat: # TxConfirmStats
107
107
  my_type: str,
108
108
  ):
109
109
  self.buckets = buckets
110
- self.confirmed_average = [[] for _ in range(0, max_periods)]
111
- self.failed_average = [[] for _ in range(0, max_periods)]
110
+ self.confirmed_average = [[] for _ in range(max_periods)]
111
+ self.failed_average = [[] for _ in range(max_periods)]
112
112
  self.decay = decay
113
113
  self.scale = scale
114
114
  self.max_confirms = self.scale * len(self.confirmed_average)
@@ -117,18 +117,18 @@ class FeeStat: # TxConfirmStats
117
117
  self.type = my_type
118
118
  self.max_periods = max_periods
119
119
 
120
- for i in range(0, max_periods):
121
- self.confirmed_average[i] = [0 for _ in range(0, len(buckets))]
122
- self.failed_average[i] = [0 for _ in range(0, len(buckets))]
120
+ for i in range(max_periods):
121
+ self.confirmed_average[i] = [0 for _ in range(len(buckets))]
122
+ self.failed_average[i] = [0 for _ in range(len(buckets))]
123
123
 
124
- self.tx_ct_avg = [0 for _ in range(0, len(buckets))]
125
- self.m_fee_rate_avg = [0 for _ in range(0, len(buckets))]
124
+ self.tx_ct_avg = [0 for _ in range(len(buckets))]
125
+ self.m_fee_rate_avg = [0 for _ in range(len(buckets))]
126
126
 
127
- self.unconfirmed_txs = [[] for _ in range(0, self.max_confirms)]
128
- for i in range(0, self.max_confirms):
129
- self.unconfirmed_txs[i] = [0 for _ in range(0, len(buckets))]
127
+ self.unconfirmed_txs = [[] for _ in range(self.max_confirms)]
128
+ for i in range(self.max_confirms):
129
+ self.unconfirmed_txs[i] = [0 for _ in range(len(buckets))]
130
130
 
131
- self.old_unconfirmed_txs = [0 for _ in range(0, len(buckets))]
131
+ self.old_unconfirmed_txs = [0 for _ in range(len(buckets))]
132
132
 
133
133
  def tx_confirmed(self, blocks_to_confirm: int, item: MempoolItemInfo) -> None:
134
134
  if blocks_to_confirm < 1:
@@ -147,8 +147,8 @@ class FeeStat: # TxConfirmStats
147
147
  self.m_fee_rate_avg[bucket_index] += fee_rate
148
148
 
149
149
  def update_moving_averages(self) -> None:
150
- for j in range(0, len(self.buckets)):
151
- for i in range(0, len(self.confirmed_average)):
150
+ for j in range(len(self.buckets)):
151
+ for i in range(len(self.confirmed_average)):
152
152
  self.confirmed_average[i][j] *= self.decay
153
153
  self.failed_average[i][j] *= self.decay
154
154
 
@@ -156,7 +156,7 @@ class FeeStat: # TxConfirmStats
156
156
  self.m_fee_rate_avg[j] *= self.decay
157
157
 
158
158
  def clear_current(self, block_height: uint32) -> None:
159
- for i in range(0, len(self.buckets)):
159
+ for i in range(len(self.buckets)):
160
160
  self.old_unconfirmed_txs[i] += self.unconfirmed_txs[block_height % len(self.unconfirmed_txs)][i]
161
161
  self.unconfirmed_txs[block_height % len(self.unconfirmed_txs)][i] = 0
162
162
 
@@ -186,7 +186,7 @@ class FeeStat: # TxConfirmStats
186
186
 
187
187
  if block_ago >= self.scale:
188
188
  periods_ago = block_ago / self.scale
189
- for i in range(0, len(self.failed_average)):
189
+ for i in range(len(self.failed_average)):
190
190
  if i >= periods_ago:
191
191
  break
192
192
  self.failed_average[i][bucket_index] += 1
@@ -196,38 +196,38 @@ class FeeStat: # TxConfirmStats
196
196
  str_confirmed_average: list[list[str]] = []
197
197
  str_failed_average: list[list[str]] = []
198
198
  str_m_fee_rate_avg: list[str] = []
199
- for i in range(0, self.max_periods):
199
+ for i in range(self.max_periods):
200
200
  str_i_list_conf = []
201
- for j in range(0, len(self.confirmed_average[i])):
201
+ for j in range(len(self.confirmed_average[i])):
202
202
  str_i_list_conf.append(float.hex(float(self.confirmed_average[i][j])))
203
203
 
204
204
  str_confirmed_average.append(str_i_list_conf)
205
205
 
206
206
  str_i_list_fail = []
207
- for j in range(0, len(self.failed_average[i])):
207
+ for j in range(len(self.failed_average[i])):
208
208
  str_i_list_fail.append(float.hex(float(self.failed_average[i][j])))
209
209
 
210
210
  str_failed_average.append(str_i_list_fail)
211
211
 
212
- for i in range(0, len(self.tx_ct_avg)):
212
+ for i in range(len(self.tx_ct_avg)):
213
213
  str_tx_ct_abg.append(float.hex(float(self.tx_ct_avg[i])))
214
214
 
215
- for i in range(0, len(self.m_fee_rate_avg)):
215
+ for i in range(len(self.m_fee_rate_avg)):
216
216
  str_m_fee_rate_avg.append(float.hex(float(self.m_fee_rate_avg[i])))
217
217
 
218
218
  return FeeStatBackup(self.type, str_tx_ct_abg, str_confirmed_average, str_failed_average, str_m_fee_rate_avg)
219
219
 
220
220
  def import_backup(self, backup: FeeStatBackup) -> None:
221
- for i in range(0, self.max_periods):
222
- for j in range(0, len(self.confirmed_average[i])):
221
+ for i in range(self.max_periods):
222
+ for j in range(len(self.confirmed_average[i])):
223
223
  self.confirmed_average[i][j] = float.fromhex(backup.confirmed_average[i][j])
224
- for j in range(0, len(self.failed_average[i])):
224
+ for j in range(len(self.failed_average[i])):
225
225
  self.failed_average[i][j] = float.fromhex(backup.failed_average[i][j])
226
226
 
227
- for i in range(0, len(self.tx_ct_avg)):
227
+ for i in range(len(self.tx_ct_avg)):
228
228
  self.tx_ct_avg[i] = float.fromhex(backup.tx_ct_avg[i])
229
229
 
230
- for i in range(0, len(self.m_fee_rate_avg)):
230
+ for i in range(len(self.m_fee_rate_avg)):
231
231
  self.m_fee_rate_avg[i] = float.fromhex(backup.m_fee_rate_avg[i])
232
232
 
233
233
  # See TxConfirmStats::EstimateMedianVal in https://github.com/bitcoin/bitcoin/blob/master/src/policy/fees.cpp