ratio1 3.4.104__tar.gz → 3.4.106__tar.gz

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 (227) hide show
  1. {ratio1-3.4.104 → ratio1-3.4.106}/PKG-INFO +1 -1
  2. {ratio1-3.4.104 → ratio1-3.4.106}/pyproject.toml +1 -1
  3. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/_ver.py +1 -1
  4. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/cli/cli_commands.py +1 -0
  5. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/cli/oracles.py +89 -35
  6. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex21_telegram_community_bot.py +61 -12
  7. {ratio1-3.4.104 → ratio1-3.4.106}/.devcontainer/Dockerfile +0 -0
  8. {ratio1-3.4.104 → ratio1-3.4.106}/.devcontainer/devcontainer.json +0 -0
  9. {ratio1-3.4.104 → ratio1-3.4.106}/.gitattributes +0 -0
  10. {ratio1-3.4.104 → ratio1-3.4.106}/.github/workflows/python-publish.yml +0 -0
  11. {ratio1-3.4.104 → ratio1-3.4.106}/.gitignore +0 -0
  12. {ratio1-3.4.104 → ratio1-3.4.106}/.vscode/launch.json +0 -0
  13. {ratio1-3.4.104 → ratio1-3.4.106}/LICENSE +0 -0
  14. {ratio1-3.4.104 → ratio1-3.4.106}/README.md +0 -0
  15. {ratio1-3.4.104 → ratio1-3.4.106}/TODOs.md +0 -0
  16. {ratio1-3.4.104 → ratio1-3.4.106}/__init__.py +0 -0
  17. {ratio1-3.4.104 → ratio1-3.4.106}/r1ctl.MD +0 -0
  18. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/__init__.py +0 -0
  19. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/__init__.py +0 -0
  20. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/distributed_custom_code_presets.py +0 -0
  21. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/generic_session.py +0 -0
  22. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/instance.py +0 -0
  23. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/payload/__init__.py +0 -0
  24. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/payload/payload.py +0 -0
  25. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/pipeline.py +0 -0
  26. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/plugin_template.py +0 -0
  27. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/responses.py +0 -0
  28. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/transaction.py +0 -0
  29. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base/webapp_pipeline.py +0 -0
  30. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/base_decentra_object.py +0 -0
  31. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/bc/__init__.py +0 -0
  32. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/bc/base.py +0 -0
  33. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/bc/chain.py +0 -0
  34. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/bc/ec.py +0 -0
  35. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/bc/evm.py +0 -0
  36. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/141.136.35.100.crt +0 -0
  37. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/195.35.29.4.crt +0 -0
  38. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/31.97.72.187.crt +0 -0
  39. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/51.15.142.167.crt +0 -0
  40. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/72.60.187.24.crt +0 -0
  41. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/72.60.81.67.crt +0 -0
  42. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/72.60.83.78.crt +0 -0
  43. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/__init__.py +0 -0
  44. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/a0d9818f.ala.eu-central-1.emqxsl.com.crt +0 -0
  45. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/r9092118.ala.eu-central-1.emqxsl.com.crt +0 -0
  46. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/certs/s624dbd4.ala.us-east-1.emqxsl.com.crt +0 -0
  47. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/cli/README.md +0 -0
  48. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/cli/cli.py +0 -0
  49. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/cli/nodes.py +0 -0
  50. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/cli/package_update.py +0 -0
  51. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/code_cheker/__init__.py +0 -0
  52. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/code_cheker/base.py +0 -0
  53. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/code_cheker/checker.py +0 -0
  54. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/comm/__init__.py +0 -0
  55. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/comm/amqp_wrapper.py +0 -0
  56. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/comm/base_comm_wrapper.py +0 -0
  57. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/comm/mqtt_wrapper.py +0 -0
  58. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/README.md +0 -0
  59. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/__init__.py +0 -0
  60. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/apps.py +0 -0
  61. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/base.py +0 -0
  62. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/comms.py +0 -0
  63. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/environment.py +0 -0
  64. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/evm_net.py +0 -0
  65. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/formatter.py +0 -0
  66. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/heartbeat.py +0 -0
  67. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/misc.py +0 -0
  68. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/payload.py +0 -0
  69. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/const/plugins/deeploy_const.py +0 -0
  70. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/default/__init__.py +0 -0
  71. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/default/instance/__init__.py +0 -0
  72. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/default/instance/chain_dist_custom_job_01_plugin.py +0 -0
  73. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/default/instance/custom_webapi_01_plugin.py +0 -0
  74. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/default/instance/generic_http_01_plugin.py +0 -0
  75. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/default/instance/net_mon_01_plugin.py +0 -0
  76. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/default/instance/telegram_basic_bot_01_plugin.py +0 -0
  77. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/default/instance/telegram_conversational_bot_01_plugin.py +0 -0
  78. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/default/instance/view_scene_01_plugin.py +0 -0
  79. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/default/session/mqtt_session.py +0 -0
  80. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/io_formatter/__init__.py +0 -0
  81. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/io_formatter/base/__init__.py +0 -0
  82. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/io_formatter/base/base_formatter.py +0 -0
  83. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/io_formatter/default/__init__.py +0 -0
  84. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/io_formatter/default/a_dummy.py +0 -0
  85. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/io_formatter/default/aixp1.py +0 -0
  86. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/io_formatter/default/default.py +0 -0
  87. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/io_formatter/io_formatter_manager.py +0 -0
  88. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/ipfs/__init__.py +0 -0
  89. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/ipfs/ifps_keygen +0 -0
  90. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/ipfs/ipfs_setup/ipfs.service +0 -0
  91. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/ipfs/ipfs_setup/launch_service.sh +0 -0
  92. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/ipfs/ipfs_setup/restart.sh +0 -0
  93. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/ipfs/ipfs_setup/run.sh +0 -0
  94. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/ipfs/ipfs_setup/setup.sh +0 -0
  95. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/ipfs/ipfs_setup/show.sh +0 -0
  96. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/ipfs/ipfs_setup/write_key.sh +0 -0
  97. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/ipfs/r1fs.py +0 -0
  98. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/__init__.py +0 -0
  99. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/base_logger.py +0 -0
  100. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/__init__.py +0 -0
  101. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/class_instance_mixin.py +0 -0
  102. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/computer_vision_mixin.py +0 -0
  103. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/datetime_mixin.py +0 -0
  104. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/download_mixin.py +0 -0
  105. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/general_serialization_mixin.py +0 -0
  106. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/json_serialization_mixin.py +0 -0
  107. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/machine_mixin.py +0 -0
  108. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/pickle_serialization_mixin.py +0 -0
  109. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/process_mixin.py +0 -0
  110. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/resource_size_mixin.py +0 -0
  111. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/timers_mixin.py +0 -0
  112. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/upload_mixin.py +0 -0
  113. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/logger_mixins/utils_mixin.py +0 -0
  114. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/small_logger.py +0 -0
  115. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/tzlocal/__init__.py +0 -0
  116. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/tzlocal/unix.py +0 -0
  117. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/tzlocal/utils.py +0 -0
  118. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/tzlocal/win32.py +0 -0
  119. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/logging/tzlocal/windows_tz.py +0 -0
  120. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/plugins_manager_mixin.py +0 -0
  121. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/utils/__init__.py +0 -0
  122. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/utils/comm_utils.py +0 -0
  123. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/utils/config.py +0 -0
  124. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/utils/dotenv.py +0 -0
  125. {ratio1-3.4.104 → ratio1-3.4.106}/ratio1/utils/oracle_sync/oracle_tester.py +0 -0
  126. {ratio1-3.4.104 → ratio1-3.4.106}/requirements.txt +0 -0
  127. {ratio1-3.4.104 → ratio1-3.4.106}/template.env +0 -0
  128. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/.example_env +0 -0
  129. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/8. custom_code_fastapi_assets/index.html +0 -0
  130. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/9. code_sandbox_from_scratch_assets/index.html +0 -0
  131. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/_example_pk_sdk.pem +0 -0
  132. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/eth2025/deploy_home_safety.py +0 -0
  133. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/eth2025/deploy_maintenance_monitoring.py +0 -0
  134. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex01_part1_connect.py +0 -0
  135. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex01_part2_filter.py +0 -0
  136. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex01_part3_adv_filter.py +0 -0
  137. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex02_part1_deploy_webapi.py +0 -0
  138. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex02_part2_deploy_plugin.py +0 -0
  139. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex02_part3_deploy_r1fs_test.py +0 -0
  140. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex03_custom_code_on_one_remote__example_1.py +0 -0
  141. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex04_custom_code_on_one_remote__example_2.py +0 -0
  142. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex05_custom_code_on_one_remote__example_3.py +0 -0
  143. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex06_custom_code_on_multiple_remotes__example_1.py +0 -0
  144. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex07_custom_code_on_multiple_remotes__example_2.py +0 -0
  145. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex08_custom_webapi.py +0 -0
  146. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex09_code_sandbox_from_scratch.py +0 -0
  147. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex10_telegram_echo_bot.py +0 -0
  148. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex11_telegram_blackjack_bot.py +0 -0
  149. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex12_telegram_smart_bot.py +0 -0
  150. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex13_launch_repo_based_webapp.py +0 -0
  151. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex14_wallets.py +0 -0
  152. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex15_telegram_rogue_style_game.py +0 -0
  153. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex16_launch_repo_based_http_server.py +0 -0
  154. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex17_launch_repo_based_balanced_webapp.py +0 -0
  155. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex18_deploy_container_webapi.py +0 -0
  156. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex19_deeploy_container_example.py +0 -0
  157. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex20_deeploy_telegram_bot.py +0 -0
  158. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex22_deeploy_custom_code.py +0 -0
  159. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/ex23_deploy_worker_app.py +0 -0
  160. {ratio1-3.4.104 → ratio1-3.4.106}/tutorials/video_presentation/1. hello_world.ipynb +0 -0
  161. {ratio1-3.4.104 → ratio1-3.4.106}/winrun.bat +0 -0
  162. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/README.md +0 -0
  163. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/_show_config_check.py +0 -0
  164. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/cstore_check.py +0 -0
  165. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/dauth_check.py +0 -0
  166. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/keys_check.py +0 -0
  167. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/node_info_check.py +0 -0
  168. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/ora_check.py +0 -0
  169. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/ora_intervals.py +0 -0
  170. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/ora_sign_check.py +0 -0
  171. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/owner_check.py +0 -0
  172. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/payload_check.py +0 -0
  173. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/session_check.py +0 -0
  174. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/w3_all_active_jobs_check.py +0 -0
  175. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/w3_auth_check.py +0 -0
  176. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/w3_first_closable_job_check.py +0 -0
  177. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/w3_nodes_licenses.py +0 -0
  178. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/w3_oracles_check.py +0 -0
  179. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/w3_poai_check.py +0 -0
  180. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/whitelist_check.py +0 -0
  181. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/_checks/workload_check.py +0 -0
  182. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/ai4e/delete.py +0 -0
  183. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/ai4e/launcher.py +0 -0
  184. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/dates/check_date.py +0 -0
  185. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/debug/close_pipeline.py +0 -0
  186. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/decentralized/chain_dist_example.py +0 -0
  187. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/decentralized/chain_dist_example_initiator.py +0 -0
  188. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/decentralized/chain_dist_example_worker.py +0 -0
  189. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/deeploy/checker.py +0 -0
  190. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/deeploy/checker2.py +0 -0
  191. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/deeploy/create_request.py +0 -0
  192. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/enc_dec/enc_dec_test.py +0 -0
  193. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/eth/allocate_rewards.py +0 -0
  194. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/eth/balance.py +0 -0
  195. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/eth/eth_sign.py +0 -0
  196. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/eth/info.md +0 -0
  197. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/eth/send.py +0 -0
  198. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/eth/send_many.py +0 -0
  199. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/eth/sign.py +0 -0
  200. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/log.py +0 -0
  201. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/logger/run.py +0 -0
  202. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/lp/lp_checker.py +0 -0
  203. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/multi-enc-dec/multi_test1.py +0 -0
  204. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/multi-enc-dec/multi_test2.py +0 -0
  205. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/netmon/check_netmon.py +0 -0
  206. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/netmon/netmon_data.json +0 -0
  207. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/pipelines/start.py +0 -0
  208. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/pipelines/stop.py +0 -0
  209. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/scripts/monitoring/collect_messages.py +0 -0
  210. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/scripts/monitoring/get_hb_distribution.py +0 -0
  211. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/scripts/monitoring/multithreaded_network_sniffer.py +0 -0
  212. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/sign/simple_payload_checker.py +0 -0
  213. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/sign/test_sign1.py +0 -0
  214. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/sign/test_sign2.py +0 -0
  215. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/test.py +0 -0
  216. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/tokens/get_check.py +0 -0
  217. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/utils/get_documentation.py +0 -0
  218. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/various/attach_example.py +0 -0
  219. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/various/ex1.py +0 -0
  220. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/various/hello.py +0 -0
  221. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/various/remote_exec.py +0 -0
  222. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/various/save_images.py +0 -0
  223. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/wl/wl_add.py +0 -0
  224. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/xarchive/_tutorials/3. simple_real_time_custom_code.py +0 -0
  225. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/xarchive/_tutorials/4. real_time_custom_code_2.py +0 -0
  226. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/xarchive/_tutorials/8. chatbot.py +0 -0
  227. {ratio1-3.4.104 → ratio1-3.4.106}/xperimental/xarchive/test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ratio1
3
- Version: 3.4.104
3
+ Version: 3.4.106
4
4
  Summary: `ratio1` or Ration1 SDK is the Python SDK required for client app development for the Ratio1 ecosystem
5
5
  Project-URL: Homepage, https://github.com/Ratio1/ratio1_sdk
6
6
  Project-URL: Bug Tracker, https://github.com/Ratio1/ratio1_sdk/issues
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ratio1"
7
- version = "3.4.104"
7
+ version = "3.4.106"
8
8
  authors = [
9
9
  { name="Andrei Ionut Damian", email="andrei.damian@ratio1.ai" },
10
10
  { name="Cristan Bleotiu", email="cristian.bleotiu@ratio1.ai" },
@@ -1,4 +1,4 @@
1
- __VER__ = "3.4.104"
1
+ __VER__ = "3.4.106"
2
2
 
3
3
  if __name__ == "__main__":
4
4
  with open("pyproject.toml", "rt") as fd:
@@ -148,6 +148,7 @@ CLI_COMMANDS = {
148
148
  "params": {
149
149
  "--skip-seeds": "Skip the seed nodes in the rollout (flag)",
150
150
  "--skip-oracles": "Skip the oracle nodes in the rollout (flag)",
151
+ "--skip-workers": "Skip the remaining edge worker nodes in the rollout (flag)",
151
152
  "--no-timeout": "Do not wait between nodes restarts (flag)",
152
153
  }
153
154
  },
@@ -221,7 +221,36 @@ if True:
221
221
  silent = not args.verbose
222
222
  skip_seeds = args.skip_seeds
223
223
  skip_oracles = args.skip_oracles
224
+ skip_workers = getattr(args, "skip_workers", False)
224
225
  no_timeout = args.no_timeout
226
+ run_seed_nodes = not skip_seeds
227
+ run_oracle_nodes = not skip_oracles
228
+ run_edge_nodes = not skip_workers
229
+
230
+ # Adjust these values to tweak pauses and restart pacing across node groups.
231
+ pause_after_seed_seconds = 60
232
+ pause_after_oracle_seconds = 60
233
+ worker_timeout_min_seconds = 5
234
+ worker_timeout_max_seconds = 25
235
+
236
+ restart_groups = []
237
+ if run_seed_nodes:
238
+ restart_groups.append("Seed Nodes")
239
+ if run_oracle_nodes:
240
+ restart_groups.append("Oracle Nodes")
241
+ if run_edge_nodes:
242
+ restart_groups.append("Worker Edge Nodes")
243
+ skipped_groups = []
244
+ if not run_seed_nodes:
245
+ skipped_groups.append("Seed Nodes")
246
+ if not run_oracle_nodes:
247
+ skipped_groups.append("Oracle Nodes")
248
+ if not run_edge_nodes:
249
+ skipped_groups.append("Worker Edge Nodes")
250
+
251
+ if not restart_groups:
252
+ log_with_color("All node groups were skipped; nothing to restart.", color='y')
253
+ return
225
254
 
226
255
  log_with_color("======================================================", color='b')
227
256
  log_with_color("Starting Oracle Rollout...", color='g')
@@ -232,15 +261,24 @@ if True:
232
261
  current_network = session.bc_engine.current_evm_network
233
262
  session.close()
234
263
 
264
+ restart_plan_display = " -> ".join(restart_groups)
265
+ confirmation_keyword = "RESTART ALL" if len(restart_groups) == 3 else f"RESTART {', '.join(restart_groups)}"
266
+ confirmation_phrase = f"{confirmation_keyword} on {current_network}"
267
+
235
268
  log_with_color(f"ATTENTION! Current network: {current_network}", color='y')
236
- log_with_color(f"Are you sure you want to restart ALL nodes on the network {current_network}?", color='b')
237
- if skip_seeds:
238
- log_with_color("During this run seed nodes will be skipped...", color='b')
239
- if skip_oracles:
240
- log_with_color("During this run oracle nodes will be skipped...", color='b')
241
- user_confirmation = input(f"Write down 'RESTART ALL on {current_network}' in order to proceed...\n >")
242
-
243
- if user_confirmation != f"RESTART ALL on {current_network}":
269
+ if len(restart_groups) == 3:
270
+ log_with_color(f"Are you sure you want to restart ALL node groups on the network {current_network}?", color='b')
271
+ else:
272
+ log_with_color(
273
+ f"Are you sure you want to restart the following node groups on {current_network}: {restart_plan_display}?",
274
+ color='b'
275
+ )
276
+ log_with_color(f"Planned restart sequence: {restart_plan_display}", color='b')
277
+ if skipped_groups:
278
+ log_with_color(f"Explicitly skipped groups: {', '.join(skipped_groups)}", color='y')
279
+ user_confirmation = input(f"Write down '{confirmation_phrase}' in order to proceed...\n >")
280
+
281
+ if user_confirmation != confirmation_phrase:
244
282
  log_with_color("Aborted by user...", color='y')
245
283
  return
246
284
 
@@ -257,17 +295,28 @@ if True:
257
295
  if node['address'] not in seed_nodes_addresses
258
296
  ]
259
297
 
260
- if not (skip_seeds or skip_oracles):
298
+ restarted_seed_nodes_count = 0
299
+ restarted_oracle_nodes_count = 0
300
+ restarted_edge_nodes_count = 0
301
+
302
+ if run_seed_nodes:
261
303
  # 1. Send restart command to Seed Nodes.
262
304
  log_with_color(f"Sending restart commands to {len(seed_nodes_addresses)} seed nodes: {seed_nodes_addresses}",
263
305
  color='b')
264
306
  _send_restart_command(session=session, nodes=seed_nodes_addresses)
307
+ restarted_seed_nodes_count = len(seed_nodes_addresses)
265
308
 
266
309
  # Remove seed node addresses from all_nodes_addresses
267
- log_with_color(
268
- f"Seed nodes restarted. Waiting 30 seconds before sending restart commands to all Oracle nodes, except seed nodes.",
269
- color='g')
270
- sleep(30)
310
+ if run_oracle_nodes or run_edge_nodes:
311
+ if pause_after_seed_seconds > 0:
312
+ log_with_color(
313
+ f"Seed nodes restarted. Waiting {pause_after_seed_seconds} seconds before sending restart commands to the next group of nodes.",
314
+ color='g')
315
+ sleep(pause_after_seed_seconds)
316
+ else:
317
+ log_with_color(
318
+ "Seed nodes restarted. Continuing without wait before the next group of nodes.",
319
+ color='g')
271
320
  else:
272
321
  log_with_color("Skipping Seed Nodes restart as per user request.", color='y')
273
322
 
@@ -278,12 +327,23 @@ if True:
278
327
  if node['oracle'] == True
279
328
  ]
280
329
 
281
- if not skip_oracles:
330
+ if run_oracle_nodes:
282
331
  log_with_color(
283
332
  f"Sending restart commands to {len(oracle_nodes_addresses)} Non-Seed Oracle nodes, except seed nodes: {remaining_nodes}",
284
333
  color='b')
285
334
 
286
335
  _send_restart_command(session=session, nodes=oracle_nodes_addresses)
336
+ restarted_oracle_nodes_count = len(oracle_nodes_addresses)
337
+ if run_edge_nodes:
338
+ if pause_after_oracle_seconds > 0:
339
+ log_with_color(
340
+ f"Oracle nodes restarted. Waiting {pause_after_oracle_seconds} seconds before sending restart commands to remaining edge nodes.",
341
+ color='g')
342
+ sleep(pause_after_oracle_seconds)
343
+ else:
344
+ log_with_color(
345
+ "Oracle nodes restarted. Continuing without wait before remaining edge nodes.",
346
+ color='g')
287
347
  else:
288
348
  log_with_color("Skipping Oracle Nodes restart as per user request.", color='y')
289
349
 
@@ -294,29 +354,23 @@ if True:
294
354
  if node['address'] not in oracle_nodes_addresses
295
355
  ]
296
356
 
297
- log_with_color(
298
- f"Oracles restarted. Waiting 30 seconds before sending restart commands to all Oracle nodes, except seed nodes.",
299
- color='g')
300
- sleep(30)
301
-
302
- # 3. Send restart command to all remaining edge nodes.
303
- log_with_color(f"Sending restart commands to {len(remaining_nodes_addresses)} remaining edge nodes: {remaining_nodes_addresses}", color='b')
357
+ if run_edge_nodes:
358
+ # 3. Send restart command to all remaining edge nodes.
359
+ log_with_color(f"Sending restart commands to {len(remaining_nodes_addresses)} remaining edge nodes: {remaining_nodes_addresses}", color='b')
360
+
361
+ timeout_min = 0
362
+ timeout_max = 0
363
+ if not no_timeout:
364
+ timeout_min = worker_timeout_min_seconds
365
+ timeout_max = worker_timeout_max_seconds
366
+ _send_restart_command(session=session, nodes=remaining_nodes_addresses, timeout_min=timeout_min, timeout_max=timeout_max)
367
+ restarted_edge_nodes_count = len(remaining_nodes_addresses)
368
+ else:
369
+ log_with_color("Skipping Edge Nodes restart as per user request.", color='y')
304
370
 
305
- timeout_min = 0
306
- timeout_max = 0
307
- if not no_timeout:
308
- timeout_min = 5
309
- timeout_max = 25
310
- _send_restart_command(session=session, nodes=remaining_nodes_addresses, timeout_min=timeout_min, timeout_max=timeout_max)
311
- restarted_seed_nodes_count = 0
312
- restarted_oracle_nodes_count = 0
313
- if not (skip_seeds or skip_oracles):
314
- restarted_seed_nodes_count = len(seed_nodes_addresses)
315
- if not skip_oracles:
316
- restarted_oracle_nodes_count = len(oracle_nodes_addresses)
317
- restarted_edge_nodes_count = len(remaining_nodes_addresses)
318
371
  total_restarted_nodes_count = restarted_seed_nodes_count + restarted_oracle_nodes_count + restarted_edge_nodes_count
319
- log_with_color(f"All nodes restarted successfully.", color='g')
372
+ completion_msg = "All node groups restarted successfully." if len(restart_groups) == 3 else "Selected node groups restarted successfully."
373
+ log_with_color(completion_msg, color='g')
320
374
  log_with_color("======================================================", color='b')
321
375
  log_with_color(f"Total restarted {total_restarted_nodes_count} Nodes", color='b')
322
376
  log_with_color(f"Restarted {restarted_seed_nodes_count} Seed Oracle Nodes", color='b')
@@ -34,6 +34,7 @@ def loop_processing(plugin: CustomPluginTemplate):
34
34
  cache_already_read_key = f"ratio1_epoch_review_already_read"
35
35
  diskapi_epoch_review_file_name = "ratio1_epoch_review_data.pkl"
36
36
  diskapi_watched_wallets_file_name = "ratio1_watched_wallets_data.pkl"
37
+ diskapi_alerts_file_name = "ratio1_offline_node_alerts_data.pkl"
37
38
 
38
39
  need_last_epoch_info = "need_last_epoch_info"
39
40
 
@@ -78,16 +79,20 @@ def loop_processing(plugin: CustomPluginTemplate):
78
79
  if plugin.obj_cache.get(cache_already_read_key) is None:
79
80
  plugin.obj_cache[epoch_review_cache_key] = plugin.diskapi_load_pickle_from_data(diskapi_epoch_review_file_name) or {}
80
81
  plugin.obj_cache[watched_wallets_cache_key] = plugin.diskapi_load_pickle_from_data(diskapi_watched_wallets_file_name) or {}
81
- plugin.obj_cache[alert_cache_key] = {}
82
- plugin.obj_cache[watched_wallets_loops_delay_cache_key] = 30
82
+ plugin.obj_cache[alert_cache_key] = plugin.diskapi_load_pickle_from_data(diskapi_alerts_file_name) or {}
83
+ plugin.obj_cache[watched_wallets_loops_delay_cache_key] = 10
83
84
  plugin.obj_cache[cache_already_read_key] = True # We use this flag to read the cache only once at the first run
84
85
 
85
86
 
86
87
  # Check users' watched wallets and notify if any node is offline
87
- if plugin.obj_cache.get(watched_wallets_loops_delay_cache_key) == 30:
88
+ if plugin.obj_cache.get(watched_wallets_loops_delay_cache_key) == 10:
89
+ alert_changes = False
88
90
  watched_wallets = plugin.obj_cache.get(watched_wallets_cache_key)
91
+ offline_node_min_seens = plugin.cfg_offline_node_min_seens
89
92
  if watched_wallets is not None:
90
93
  for user, wallets in watched_wallets.items():
94
+ new_online_nodes = []
95
+ new_offline_nodes = []
91
96
  for wallet in wallets:
92
97
  wallet_nodes = plugin.bc.get_wallet_nodes(wallet)
93
98
  for node in wallet_nodes:
@@ -97,17 +102,56 @@ def loop_processing(plugin: CustomPluginTemplate):
97
102
  node_alert_cache_key = f"{user}-{node}"
98
103
  node_internal_addr = plugin.bc.eth_addr_to_internal_addr(node)
99
104
  node_is_online = plugin.netmon.network_node_is_online(node_internal_addr)
105
+ node_cache_value = plugin.obj_cache[alert_cache_key].get(node_alert_cache_key)
100
106
  if node_is_online:
101
- if plugin.obj_cache[alert_cache_key].get(node_alert_cache_key) is not None:
102
- # Node was previously offline, now it is back online, we notify the user
103
- message = f"✅ Node {plugin.netmon.network_node_eeid(node_internal_addr)} ({node}) is back online."
104
- plugin.send_message_to_user(user_id=user, text=message)
107
+ if node_cache_value is not None:
108
+ # Node was previously offline
109
+ if node_cache_value >= offline_node_min_seens:
110
+ # If we had notified the user, we notify them that the node is back online
111
+ new_online_nodes.append(node)
105
112
  plugin.obj_cache[alert_cache_key][node_alert_cache_key] = None
106
- elif plugin.obj_cache[alert_cache_key].get(node_alert_cache_key) is None:
107
- # Node is offline and we haven't notified the user yet
108
- plugin.obj_cache[alert_cache_key][node_alert_cache_key] = True
109
- message = f"⚠️ Node {plugin.netmon.network_node_eeid(node_internal_addr)} ({node}) is offline. Please check your node status."
110
- plugin.send_message_to_user(user_id=user, text=message)
113
+ alert_changes = True
114
+ else:
115
+ # Node is offline
116
+ if node_cache_value is None:
117
+ plugin.obj_cache[alert_cache_key][node_alert_cache_key] = 1
118
+ alert_changes = True
119
+ if offline_node_min_seens == 1:
120
+ # We need to notify the user
121
+ new_offline_nodes.append(node)
122
+ elif node_cache_value < offline_node_min_seens:
123
+ # The node was already offline but we have not notified the user yet
124
+ new_value = node_cache_value + 1
125
+ plugin.obj_cache[alert_cache_key][node_alert_cache_key] = new_value
126
+ alert_changes = True
127
+ if new_value >= offline_node_min_seens:
128
+ # We need to notify the user
129
+ new_offline_nodes.append(node)
130
+ # endfor wallet_nodes
131
+ # endfor wallets
132
+ if len(new_online_nodes) > 0:
133
+ if len(new_online_nodes) == 1:
134
+ message = f"✅ Node {plugin.netmon.network_node_eeid(node_internal_addr)} ({new_online_nodes[0]}) is back online."
135
+ else:
136
+ message = f"✅ The following nodes are back online:\n"
137
+ for node in new_online_nodes:
138
+ message += f"- {plugin.netmon.network_node_eeid(plugin.bc.eth_addr_to_internal_addr(node))} ({node})\n"
139
+ plugin.send_message_to_user(user_id=user, text=message)
140
+ # endif new_online_nodes
141
+ if len(new_offline_nodes) > 0:
142
+ if len(new_offline_nodes) == 1:
143
+ message = f"⚠️ Node {plugin.netmon.network_node_eeid(node_internal_addr)} ({new_offline_nodes[0]}) is offline. Please check your node status."
144
+ else:
145
+ message = f"⚠️ The following nodes are offline:\n"
146
+ for node in new_offline_nodes:
147
+ message += f"- {plugin.netmon.network_node_eeid(plugin.bc.eth_addr_to_internal_addr(node))} ({node})\n"
148
+ message += "Please check your nodes status."
149
+ plugin.send_message_to_user(user_id=user, text=message)
150
+ # endif new_offline_nodes
151
+ # endfor user, wallets
152
+ if alert_changes:
153
+ plugin.diskapi_save_pickle_to_data(plugin.obj_cache.get(alert_cache_key), diskapi_alerts_file_name)
154
+ # endif watched_wallets is not None
111
155
  plugin.obj_cache[watched_wallets_loops_delay_cache_key] = 0
112
156
  else:
113
157
  plugin.obj_cache[watched_wallets_loops_delay_cache_key] += 1
@@ -144,6 +188,8 @@ def loop_processing(plugin: CustomPluginTemplate):
144
188
  burned_nd_last_epoch = float(apiResponse["epochNdBurnR1"])
145
189
  burned_poai_last_epoch = float(apiResponse["epochPoaiBurnR1"])
146
190
  poai_usdc_last_epoch = float(apiResponse["epochPoaiRewardsUsdc"])
191
+ token_burn_last_epoch = float(apiResponse["dailyTokenBurn"])
192
+ ecosystem_token_burn_last_epoch = token_burn_last_epoch - burned_nd_last_epoch - burned_poai_last_epoch
147
193
  total_burn = float(apiResponse["totalBurn"])
148
194
 
149
195
  nd_supply = get_erc721_total_supply("0xE658DF6dA3FB5d4FBa562F1D5934bd0F9c6bd423")
@@ -163,6 +209,8 @@ def loop_processing(plugin: CustomPluginTemplate):
163
209
  if burned_poai_last_epoch > 0:
164
210
  message += f"🎁 Last Epoch PoAI Rewards: {(poai_usdc_last_epoch):,.2f} USDC\n"
165
211
  message += f"🔥 Last Epoch PoAI Burn: {(burned_poai_last_epoch):,.2f} R1\n"
212
+ if ecosystem_token_burn_last_epoch > 0:
213
+ message += f"🔥 Last Epoch Ecosystem Burn: {(ecosystem_token_burn_last_epoch):,.2f} R1\n"
166
214
  message += f"🔥 Total Burn: {(total_burn):,.2f} R1\n"
167
215
  plugin.send_message_to_user(user_id=plugin.cfg_chat_id, text=message)
168
216
 
@@ -327,6 +375,7 @@ if __name__ == "__main__":
327
375
  message_handler=reply,
328
376
  processing_handler=loop_processing,
329
377
  admins=['401110073', '683223680'],
378
+ offline_node_min_seens=2,
330
379
  process_delay=10,
331
380
  )
332
381
  pipeline.deploy()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes