ratio1 3.4.46__tar.gz → 3.4.48__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 (213) hide show
  1. {ratio1-3.4.46 → ratio1-3.4.48}/PKG-INFO +1 -1
  2. {ratio1-3.4.46 → ratio1-3.4.48}/pyproject.toml +1 -1
  3. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/_ver.py +1 -1
  4. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/bc/evm.py +59 -0
  5. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/evm_net.py +84 -0
  6. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/ipfs/r1fs.py +37 -20
  7. ratio1-3.4.48/xperimental/_checks/w3_poai_check.py +25 -0
  8. {ratio1-3.4.46 → ratio1-3.4.48}/.devcontainer/Dockerfile +0 -0
  9. {ratio1-3.4.46 → ratio1-3.4.48}/.devcontainer/devcontainer.json +0 -0
  10. {ratio1-3.4.46 → ratio1-3.4.48}/.gitattributes +0 -0
  11. {ratio1-3.4.46 → ratio1-3.4.48}/.github/workflows/python-publish.yml +0 -0
  12. {ratio1-3.4.46 → ratio1-3.4.48}/.gitignore +0 -0
  13. {ratio1-3.4.46 → ratio1-3.4.48}/.vscode/launch.json +0 -0
  14. {ratio1-3.4.46 → ratio1-3.4.48}/LICENSE +0 -0
  15. {ratio1-3.4.46 → ratio1-3.4.48}/README.md +0 -0
  16. {ratio1-3.4.46 → ratio1-3.4.48}/TODOs.md +0 -0
  17. {ratio1-3.4.46 → ratio1-3.4.48}/__init__.py +0 -0
  18. {ratio1-3.4.46 → ratio1-3.4.48}/r1ctl.MD +0 -0
  19. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/__init__.py +0 -0
  20. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/__init__.py +0 -0
  21. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/distributed_custom_code_presets.py +0 -0
  22. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/generic_session.py +0 -0
  23. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/instance.py +0 -0
  24. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/payload/__init__.py +0 -0
  25. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/payload/payload.py +0 -0
  26. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/pipeline.py +0 -0
  27. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/plugin_template.py +0 -0
  28. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/responses.py +0 -0
  29. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/transaction.py +0 -0
  30. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base/webapp_pipeline.py +0 -0
  31. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/base_decentra_object.py +0 -0
  32. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/bc/__init__.py +0 -0
  33. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/bc/base.py +0 -0
  34. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/bc/chain.py +0 -0
  35. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/bc/ec.py +0 -0
  36. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/certs/51.15.142.167.crt +0 -0
  37. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/certs/__init__.py +0 -0
  38. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/certs/a0d9818f.ala.eu-central-1.emqxsl.com.crt +0 -0
  39. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/certs/r9092118.ala.eu-central-1.emqxsl.com.crt +0 -0
  40. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/certs/s624dbd4.ala.us-east-1.emqxsl.com.crt +0 -0
  41. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/cli/README.md +0 -0
  42. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/cli/cli.py +0 -0
  43. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/cli/cli_commands.py +0 -0
  44. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/cli/nodes.py +0 -0
  45. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/cli/oracles.py +0 -0
  46. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/cli/package_update.py +0 -0
  47. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/code_cheker/__init__.py +0 -0
  48. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/code_cheker/base.py +0 -0
  49. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/code_cheker/checker.py +0 -0
  50. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/comm/__init__.py +0 -0
  51. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/comm/amqp_wrapper.py +0 -0
  52. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/comm/base_comm_wrapper.py +0 -0
  53. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/comm/mqtt_wrapper.py +0 -0
  54. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/README.md +0 -0
  55. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/__init__.py +0 -0
  56. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/apps.py +0 -0
  57. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/base.py +0 -0
  58. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/comms.py +0 -0
  59. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/environment.py +0 -0
  60. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/formatter.py +0 -0
  61. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/heartbeat.py +0 -0
  62. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/misc.py +0 -0
  63. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/payload.py +0 -0
  64. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/const/plugins/deeploy_const.py +0 -0
  65. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/default/__init__.py +0 -0
  66. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/default/instance/__init__.py +0 -0
  67. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/default/instance/chain_dist_custom_job_01_plugin.py +0 -0
  68. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/default/instance/custom_webapi_01_plugin.py +0 -0
  69. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/default/instance/generic_http_01_plugin.py +0 -0
  70. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/default/instance/net_mon_01_plugin.py +0 -0
  71. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/default/instance/telegram_basic_bot_01_plugin.py +0 -0
  72. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/default/instance/telegram_conversational_bot_01_plugin.py +0 -0
  73. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/default/instance/view_scene_01_plugin.py +0 -0
  74. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/default/session/mqtt_session.py +0 -0
  75. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/io_formatter/__init__.py +0 -0
  76. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/io_formatter/base/__init__.py +0 -0
  77. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/io_formatter/base/base_formatter.py +0 -0
  78. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/io_formatter/default/__init__.py +0 -0
  79. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/io_formatter/default/a_dummy.py +0 -0
  80. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/io_formatter/default/aixp1.py +0 -0
  81. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/io_formatter/default/default.py +0 -0
  82. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/io_formatter/io_formatter_manager.py +0 -0
  83. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/ipfs/__init__.py +0 -0
  84. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/ipfs/ifps_keygen +0 -0
  85. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/ipfs/ipfs_setup/ipfs.service +0 -0
  86. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/ipfs/ipfs_setup/launch_service.sh +0 -0
  87. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/ipfs/ipfs_setup/restart.sh +0 -0
  88. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/ipfs/ipfs_setup/run.sh +0 -0
  89. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/ipfs/ipfs_setup/setup.sh +0 -0
  90. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/ipfs/ipfs_setup/show.sh +0 -0
  91. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/ipfs/ipfs_setup/write_key.sh +0 -0
  92. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/__init__.py +0 -0
  93. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/base_logger.py +0 -0
  94. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/__init__.py +0 -0
  95. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/class_instance_mixin.py +0 -0
  96. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/computer_vision_mixin.py +0 -0
  97. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/datetime_mixin.py +0 -0
  98. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/download_mixin.py +0 -0
  99. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/general_serialization_mixin.py +0 -0
  100. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/json_serialization_mixin.py +0 -0
  101. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/machine_mixin.py +0 -0
  102. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/pickle_serialization_mixin.py +0 -0
  103. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/process_mixin.py +0 -0
  104. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/resource_size_mixin.py +0 -0
  105. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/timers_mixin.py +0 -0
  106. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/upload_mixin.py +0 -0
  107. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/logger_mixins/utils_mixin.py +0 -0
  108. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/small_logger.py +0 -0
  109. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/tzlocal/__init__.py +0 -0
  110. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/tzlocal/unix.py +0 -0
  111. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/tzlocal/utils.py +0 -0
  112. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/tzlocal/win32.py +0 -0
  113. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/logging/tzlocal/windows_tz.py +0 -0
  114. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/plugins_manager_mixin.py +0 -0
  115. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/utils/__init__.py +0 -0
  116. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/utils/comm_utils.py +0 -0
  117. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/utils/config.py +0 -0
  118. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/utils/dotenv.py +0 -0
  119. {ratio1-3.4.46 → ratio1-3.4.48}/ratio1/utils/oracle_sync/oracle_tester.py +0 -0
  120. {ratio1-3.4.46 → ratio1-3.4.48}/requirements.txt +0 -0
  121. {ratio1-3.4.46 → ratio1-3.4.48}/template.env +0 -0
  122. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/.example_env +0 -0
  123. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/8. custom_code_fastapi_assets/index.html +0 -0
  124. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/9. code_sandbox_from_scratch_assets/index.html +0 -0
  125. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/_example_pk_sdk.pem +0 -0
  126. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/eth2025/deploy_home_safety.py +0 -0
  127. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/eth2025/deploy_maintenance_monitoring.py +0 -0
  128. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex01_part1_connect.py +0 -0
  129. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex01_part2_filter.py +0 -0
  130. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex01_part3_adv_filter.py +0 -0
  131. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex02_part1_deploy_webapi.py +0 -0
  132. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex02_part2_deploy_plugin.py +0 -0
  133. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex02_part3_deploy_r1fs_test.py +0 -0
  134. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex03_custom_code_on_one_remote__example_1.py +0 -0
  135. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex04_custom_code_on_one_remote__example_2.py +0 -0
  136. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex05_custom_code_on_one_remote__example_3.py +0 -0
  137. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex06_custom_code_on_multiple_remotes__example_1.py +0 -0
  138. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex07_custom_code_on_multiple_remotes__example_2.py +0 -0
  139. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex08_custom_webapi.py +0 -0
  140. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex09_code_sandbox_from_scratch.py +0 -0
  141. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex10_telegram_echo_bot.py +0 -0
  142. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex11_telegram_blackjack_bot.py +0 -0
  143. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex12_telegram_smart_bot.py +0 -0
  144. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex13_launch_repo_based_webapp.py +0 -0
  145. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex14_wallets.py +0 -0
  146. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex15_telegram_rogue_style_game.py +0 -0
  147. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex16_launch_repo_based_http_server.py +0 -0
  148. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex17_launch_repo_based_balanced_webapp.py +0 -0
  149. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex18_deploy_container_webapi.py +0 -0
  150. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex19_deeploy_container_example.py +0 -0
  151. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex20_deeploy_telegram_bot.py +0 -0
  152. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex21_telegram_community_bot.py +0 -0
  153. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/ex22_deeploy_custom_code.py +0 -0
  154. {ratio1-3.4.46 → ratio1-3.4.48}/tutorials/video_presentation/1. hello_world.ipynb +0 -0
  155. {ratio1-3.4.46 → ratio1-3.4.48}/winrun.bat +0 -0
  156. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/README.md +0 -0
  157. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/_show_config_check.py +0 -0
  158. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/cstore_check.py +0 -0
  159. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/dauth_check.py +0 -0
  160. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/keys_check.py +0 -0
  161. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/node_info_check.py +0 -0
  162. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/ora_check.py +0 -0
  163. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/ora_intervals.py +0 -0
  164. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/ora_sign_check.py +0 -0
  165. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/owner_check.py +0 -0
  166. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/payload_check.py +0 -0
  167. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/session_check.py +0 -0
  168. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/w3_auth_check.py +0 -0
  169. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/w3_nodes_licenses.py +0 -0
  170. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/w3_oracles_check.py +0 -0
  171. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/whitelist_check.py +0 -0
  172. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/_checks/workload_check.py +0 -0
  173. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/dates/check_date.py +0 -0
  174. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/debug/close_pipeline.py +0 -0
  175. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/decentralized/chain_dist_example.py +0 -0
  176. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/decentralized/chain_dist_example_initiator.py +0 -0
  177. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/decentralized/chain_dist_example_worker.py +0 -0
  178. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/deeploy/checker.py +0 -0
  179. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/deeploy/checker2.py +0 -0
  180. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/deeploy/create_request.py +0 -0
  181. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/enc_dec/enc_dec_test.py +0 -0
  182. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/eth/balance.py +0 -0
  183. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/eth/eth_sign.py +0 -0
  184. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/eth/info.md +0 -0
  185. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/eth/send.py +0 -0
  186. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/eth/send_many.py +0 -0
  187. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/eth/sign.py +0 -0
  188. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/log.py +0 -0
  189. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/logger/run.py +0 -0
  190. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/lp/lp_checker.py +0 -0
  191. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/multi-enc-dec/multi_test1.py +0 -0
  192. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/multi-enc-dec/multi_test2.py +0 -0
  193. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/pipelines/start.py +0 -0
  194. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/pipelines/stop.py +0 -0
  195. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/scripts/monitoring/collect_messages.py +0 -0
  196. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/scripts/monitoring/get_hb_distribution.py +0 -0
  197. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/scripts/monitoring/multithreaded_network_sniffer.py +0 -0
  198. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/sign/simple_payload_checker.py +0 -0
  199. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/sign/test_sign1.py +0 -0
  200. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/sign/test_sign2.py +0 -0
  201. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/test.py +0 -0
  202. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/tokens/get_check.py +0 -0
  203. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/utils/get_documentation.py +0 -0
  204. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/various/attach_example.py +0 -0
  205. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/various/ex1.py +0 -0
  206. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/various/hello.py +0 -0
  207. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/various/remote_exec.py +0 -0
  208. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/various/save_images.py +0 -0
  209. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/wl/wl_add.py +0 -0
  210. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/xarchive/_tutorials/3. simple_real_time_custom_code.py +0 -0
  211. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/xarchive/_tutorials/4. real_time_custom_code_2.py +0 -0
  212. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/xarchive/_tutorials/8. chatbot.py +0 -0
  213. {ratio1-3.4.46 → ratio1-3.4.48}/xperimental/xarchive/test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ratio1
3
- Version: 3.4.46
3
+ Version: 3.4.48
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.46"
7
+ version = "3.4.48"
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.46"
1
+ __VER__ = "3.4.48"
2
2
 
3
3
  if __name__ == "__main__":
4
4
  with open("pyproject.toml", "rt") as fd:
@@ -28,6 +28,7 @@ Web3Vars = namedtuple(
28
28
  "r1_contract_address",
29
29
  "proxy_contract_address",
30
30
  "controller_contract_address",
31
+ "poai_manager_address",
31
32
  "get_oracles_abi",
32
33
  ]
33
34
  )
@@ -236,6 +237,7 @@ class _EVMMixin:
236
237
  proxy_contract_address = network_data[dAuth.EvmNetData.DAUTH_PROXYAPI_ADDR_KEY]
237
238
  str_genesis_date = network_data[dAuth.EvmNetData.EE_GENESIS_EPOCH_DATE_KEY]
238
239
  controller_contract_address = network_data[dAuth.EvmNetData.DAUTH_CONTROLLER_ADDR_KEY]
240
+ poai_manager_address = network_data[dAuth.EvmNetData.DAUTH_POAI_MANAGER_KEY]
239
241
  get_oracles_abi = network_data[dAuth.EvmNetData.DAUTH_GET_ORACLES_ABI]
240
242
  genesis_date = self.log.str_to_date(str_genesis_date).replace(tzinfo=timezone.utc)
241
243
  ep_sec = (
@@ -258,6 +260,7 @@ class _EVMMixin:
258
260
  r1_contract_address=r1_contract_address,
259
261
  proxy_contract_address=proxy_contract_address,
260
262
  controller_contract_address=controller_contract_address,
263
+ poai_manager_address=poai_manager_address,
261
264
  get_oracles_abi=get_oracles_abi,
262
265
  )
263
266
  return result
@@ -1294,6 +1297,62 @@ class _EVMMixin:
1294
1297
 
1295
1298
  return balances
1296
1299
 
1300
+ def web3_get_job_details(
1301
+ self,
1302
+ job_id: int,
1303
+ network: str = None
1304
+ ):
1305
+ """
1306
+ Retrieve license details for the specified node using getNodeLicenseDetails().
1307
+
1308
+ Parameters
1309
+ ----------
1310
+ job_id : int
1311
+ The job ID to retrieve details for.
1312
+
1313
+ network : str, optional
1314
+ The network to use. If None, defaults to self.evm_network.
1315
+
1316
+
1317
+ Returns
1318
+ -------
1319
+ dict
1320
+ A dictionary containing all job details returned by getJobDetails.
1321
+ """
1322
+ # Validate the job ID.
1323
+ assert isinstance(job_id, int), "Invalid job ID"
1324
+
1325
+ # Retrieve the necessary Web3 variables (pattern consistent with web3_send_r1).
1326
+ w3vars = self._get_web3_vars(network)
1327
+ network = w3vars.network
1328
+ contract = w3vars.w3.eth.contract(
1329
+ address=w3vars.poai_manager_address,
1330
+ abi=EVM_ABI_DATA.GET_JOB_DETAILS
1331
+ )
1332
+
1333
+ self.P(f"`getJobDetails` on {network} via {w3vars.rpc_url}", verbosity=2)
1334
+
1335
+ # Call the contract function to get details.
1336
+ result_tuple = contract.functions.getJobDetails(job_id).call()
1337
+
1338
+ # Unpack the tuple into a dictionary for readability.
1339
+ details = {
1340
+ "network": network,
1341
+ "jobId": result_tuple[0],
1342
+ "requestTimestamp": result_tuple[1],
1343
+ "startTimestamp": result_tuple[2],
1344
+ "lastNodesChangeTimestamp": result_tuple[3],
1345
+ "jobType": result_tuple[4],
1346
+ "pricePerEpoch": result_tuple[5],
1347
+ "lastExecutionEpoch": result_tuple[6],
1348
+ "numberOfNodesRequested": result_tuple[7],
1349
+ "balance": result_tuple[8],
1350
+ "lastAllocatedEpoch": result_tuple[9],
1351
+ "activeNodes": result_tuple[10],
1352
+ }
1353
+ self.P(f"Job Details:\n{json.dumps(details, indent=2)}", verbosity=2)
1354
+
1355
+ return details
1297
1356
 
1298
1357
  def get_deeploy_url(self):
1299
1358
  """
@@ -9,6 +9,7 @@ class EvmNetData:
9
9
  DAUTH_R1_ADDR_KEY = 'EE_DAUTH_R1_ADDR'
10
10
  DAUTH_MND_ADDR_KEY = 'EE_DAUTH_MND_ADDR'
11
11
  DAUTH_PROXYAPI_ADDR_KEY = 'EE_DAUTH_PROXYAPI_ADDR'
12
+ DAUTH_POAI_MANAGER_KEY = 'EE_DAUTH_POAI_MANAGER'
12
13
 
13
14
  DAUTH_CONTROLLER_ADDR_KEY = 'EE_DAUTH_CONTROLLER_ADDR'
14
15
  DAUTH_GET_ORACLES_ABI = 'EE_DAUTH_GET_ORACLES_ABI'
@@ -219,6 +220,85 @@ _GET_ADDRESSES_BALANCES = [
219
220
  }
220
221
  ]
221
222
 
223
+ _GET_JOB_DETAILS_ABI = [
224
+ {
225
+ "inputs": [
226
+ {
227
+ "internalType": "uint256",
228
+ "name": "jobId",
229
+ "type": "uint256"
230
+ }
231
+ ],
232
+ "name": "getJobDetails",
233
+ "outputs": [
234
+ {
235
+ "components": [
236
+ {
237
+ "internalType": "uint256",
238
+ "name": "id",
239
+ "type": "uint256"
240
+ },
241
+ {
242
+ "internalType": "uint256",
243
+ "name": "requestTimestamp",
244
+ "type": "uint256"
245
+ },
246
+ {
247
+ "internalType": "uint256",
248
+ "name": "startTimestamp",
249
+ "type": "uint256"
250
+ },
251
+ {
252
+ "internalType": "uint256",
253
+ "name": "lastNodesChangeTimestamp",
254
+ "type": "uint256"
255
+ },
256
+ {
257
+ "internalType": "uint256",
258
+ "name": "jobType",
259
+ "type": "uint256"
260
+ },
261
+ {
262
+ "internalType": "uint256",
263
+ "name": "pricePerEpoch",
264
+ "type": "uint256"
265
+ },
266
+ {
267
+ "internalType": "uint256",
268
+ "name": "lastExecutionEpoch",
269
+ "type": "uint256"
270
+ },
271
+ {
272
+ "internalType": "uint256",
273
+ "name": "numberOfNodesRequested",
274
+ "type": "uint256"
275
+ },
276
+ {
277
+ "internalType": "int256",
278
+ "name": "balance",
279
+ "type": "int256"
280
+ },
281
+ {
282
+ "internalType": "uint256",
283
+ "name": "lastAllocatedEpoch",
284
+ "type": "uint256"
285
+ },
286
+ {
287
+ "internalType": "address[]",
288
+ "name": "activeNodes",
289
+ "type": "address[]"
290
+ }
291
+ ],
292
+ "internalType": "struct JobDetails",
293
+ "name": "",
294
+ "type": "tuple"
295
+ }
296
+ ],
297
+ "stateMutability": "view",
298
+ "type": "function"
299
+ }
300
+ ]
301
+
222
302
  # A minimal ERC20 ABI for balanceOf, transfer, and decimals functions.
223
303
  _ERC20_ABI = [
224
304
  {
@@ -263,6 +343,7 @@ EVM_NET_DATA = {
263
343
  EvmNetData.DAUTH_R1_ADDR_KEY : "0x6444C6c2D527D85EA97032da9A7504d6d1448ecF",
264
344
  EvmNetData.DAUTH_MND_ADDR_KEY : "0x0C431e546371C87354714Fcc1a13365391A549E2",
265
345
  EvmNetData.DAUTH_PROXYAPI_ADDR_KEY : "0xa2fDD4c7E93790Ff68a01f01AA789D619F12c6AC",
346
+ EvmNetData.DAUTH_POAI_MANAGER_KEY : "0xTODO",
266
347
  EvmNetData.DAUTH_RPC_KEY : "https://base-mainnet.public.blastapi.io",
267
348
  EvmNetData.EE_GENESIS_EPOCH_DATE_KEY : "2025-05-23 16:00:00",
268
349
  EvmNetData.EE_EPOCH_INTERVALS_KEY : 24,
@@ -280,6 +361,7 @@ EVM_NET_DATA = {
280
361
  EvmNetData.DAUTH_R1_ADDR_KEY : "0xCC96f389F45Fc08b4fa8e2bC4C7DA9920292ec64",
281
362
  EvmNetData.DAUTH_MND_ADDR_KEY : "0xa8d7FFCE91a888872A9f5431B4Dd6c0c135055c1",
282
363
  EvmNetData.DAUTH_PROXYAPI_ADDR_KEY : "0xd1c7Dca934B37FAA402EB2EC64F6644d6957bE3b",
364
+ EvmNetData.DAUTH_POAI_MANAGER_KEY : "0xTODO",
283
365
  EvmNetData.DAUTH_RPC_KEY : "https://base-sepolia.public.blastapi.io",
284
366
  EvmNetData.EE_GENESIS_EPOCH_DATE_KEY : "2025-05-23 16:00:00",
285
367
  EvmNetData.EE_EPOCH_INTERVALS_KEY : 24,
@@ -298,6 +380,7 @@ EVM_NET_DATA = {
298
380
  EvmNetData.DAUTH_R1_ADDR_KEY : "0x277CbD0Cf25F4789Bc04035eCd03d811FAf73691",
299
381
  EvmNetData.DAUTH_MND_ADDR_KEY : "0x17B8934dc5833CdBa1eF42D13D65D677C4727748",
300
382
  EvmNetData.DAUTH_PROXYAPI_ADDR_KEY : "0xFcF04c9A67330431Af75a546615E4881BD8bdC78",
383
+ EvmNetData.DAUTH_POAI_MANAGER_KEY : "0x9A41f43494fCD592577228fE8E4014f2D75d2aa3",
301
384
  EvmNetData.DAUTH_RPC_KEY : "https://base-sepolia.public.blastapi.io",
302
385
  EvmNetData.EE_GENESIS_EPOCH_DATE_KEY : "2025-06-30 07:00:00",
303
386
  EvmNetData.EE_EPOCH_INTERVALS_KEY : 1,
@@ -346,5 +429,6 @@ class EVM_ABI_DATA:
346
429
  GET_WALLET_NODES = _GET_WALLET_NODES
347
430
  GET_ADDRESSES_BALANCES = _GET_ADDRESSES_BALANCES
348
431
  IS_NODE_ACTIVE = _DAUTH_ABI_IS_NODE_ACTIVE
432
+ GET_JOB_DETAILS = _GET_JOB_DETAILS_ABI
349
433
  ERC20_ABI = _ERC20_ABI
350
434
 
@@ -300,6 +300,7 @@ class R1FSEngine:
300
300
  return
301
301
 
302
302
  def _hash_secret(self, secret: str) -> bytes:
303
+ secret = str(secret) # to be sure that the passed secret is of string type.
303
304
  # Convert text to bytes, then hash with SHA-256 => 32-byte key
304
305
  return hashlib.sha256(secret.encode("utf-8")).digest()
305
306
 
@@ -510,6 +511,25 @@ class R1FSEngine:
510
511
  )
511
512
  return result
512
513
 
514
+ # PUBLIC COMMAND
515
+ def get_ipfs_id_data(self) -> dict:
516
+ """
517
+ Get the IPFS peer ID via 'ipfs id' (JSON output).
518
+ Returns the ipfs ID object.
519
+ """
520
+ data = {}
521
+ output = self.__run_command(["ipfs", "id"]) # this will raise an exception if the command fails
522
+ try:
523
+ data = json.loads(output)
524
+ except json.JSONDecodeError:
525
+ raise Exception("Failed to parse JSON from 'ipfs id' output.")
526
+ except Exception as e:
527
+ msg = f"Error getting IPFS ID: {e}. `ipfs id`:\n{data}"
528
+ self.P(msg, color='r')
529
+ raise Exception(f"Error getting IPFS ID: {e}") from e
530
+ return data
531
+
532
+ # END PUBLIC COMMANS
513
533
 
514
534
  def __run_command(
515
535
  self,
@@ -575,24 +595,15 @@ class R1FSEngine:
575
595
  Get the IPFS peer ID via 'ipfs id' (JSON output).
576
596
  Returns the 'ID' field as a string.
577
597
  """
578
- self.__ipfs_address = None
579
- output = self.__run_command(["ipfs", "id"]) # this will raise an exception if the command fails
580
- try:
581
- data = json.loads(output)
582
- self.__ipfs_id_result = data
583
- self.__ipfs_id = data.get("ID", ERROR_TAG)
584
- self.__ipfs_agent = data.get("AgentVersion", ERROR_TAG)
585
- addrs = data.get("Addresses", [])
586
- if not addrs:
587
- self.__ipfs_address = None
588
- else:
589
- self.__ipfs_address = addrs[1] if len(addrs) > 1 else addrs[0] if len(addrs) else ERROR_TAG
590
- except json.JSONDecodeError:
591
- raise Exception("Failed to parse JSON from 'ipfs id' output.")
592
- except Exception as e:
593
- msg = f"Error getting IPFS ID: {e}. `ipfs id`:\n{data}"
594
- self.P(msg, color='r')
595
- raise Exception(f"Error getting IPFS ID: {e}") from e
598
+ data = self.get_ipfs_id_data()
599
+ self.__ipfs_id_result = data
600
+ self.__ipfs_id = data.get("ID", ERROR_TAG)
601
+ self.__ipfs_agent = data.get("AgentVersion", ERROR_TAG)
602
+ addrs = data.get("Addresses", [])
603
+ if not addrs:
604
+ self.__ipfs_address = None
605
+ else:
606
+ self.__ipfs_address = addrs[1] if len(addrs) > 1 else addrs[0] if len(addrs) else ERROR_TAG
596
607
  return self.__ipfs_id
597
608
 
598
609
 
@@ -657,7 +668,7 @@ class R1FSEngine:
657
668
  tempfile=False,
658
669
  show_logs=True,
659
670
  raise_on_error=False,
660
- ) -> bool:
671
+ ) -> str:
661
672
  """
662
673
  Add a YAML object to IPFS.
663
674
  """
@@ -884,7 +895,8 @@ class R1FSEngine:
884
895
  timeout: int = None,
885
896
  pin: bool = True,
886
897
  raise_on_error: bool = False,
887
- show_logs: bool = True
898
+ show_logs: bool = True,
899
+ return_absolute_path: bool = True,
888
900
  ) -> str:
889
901
  """
890
902
  Retrieve an encrypted file from R1FS by CID, decrypt with AES-GCM in streaming mode.
@@ -916,6 +928,9 @@ class R1FSEngine:
916
928
  show_logs : bool, optional
917
929
  If True, logs steps via self.P / self.Pd. Default True.
918
930
 
931
+ return_absolute_path : bool, optional
932
+ If True, return the absolute path to the restored plaintext file.
933
+
919
934
  Returns
920
935
  -------
921
936
  str
@@ -1041,6 +1056,8 @@ class R1FSEngine:
1041
1056
  fin.seek(data_start, os.SEEK_SET)
1042
1057
 
1043
1058
  out_path = os.path.join(local_folder, original_filename)
1059
+ if return_absolute_path:
1060
+ out_path = os.path.abspath(out_path)
1044
1061
  chunk_size = 1024 * 1024
1045
1062
 
1046
1063
  with open(out_path, "wb") as fout:
@@ -0,0 +1,25 @@
1
+ import os
2
+ import json
3
+
4
+
5
+ from ratio1 import Logger, const
6
+ from ratio1.bc import DefaultBlockEngine
7
+
8
+
9
+
10
+ if __name__ == '__main__' :
11
+
12
+ l = Logger("ENC")
13
+ eng = DefaultBlockEngine(
14
+ log=l, name="default",
15
+ user_config=True
16
+ )
17
+
18
+ eng.reset_network("devnet")
19
+
20
+ l.P(f"Checking web3 API on {eng.evm_network}", color='b')
21
+
22
+ job_id = 1
23
+ job_details = eng.web3_get_job_details(job_id)
24
+
25
+ l.P(f"Job Details for job id {job_id}:\n{json.dumps(job_details, indent=2)}", color='b')
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
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