iwa 0.1.2__tar.gz → 0.1.3__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 (237) hide show
  1. {iwa-0.1.2/src/iwa.egg-info → iwa-0.1.3}/PKG-INFO +1 -1
  2. {iwa-0.1.2 → iwa-0.1.3}/pyproject.toml +2 -2
  3. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/staking.py +135 -0
  4. iwa-0.1.3/src/iwa/plugins/olas/tests/test_staking_integration.py +773 -0
  5. {iwa-0.1.2 → iwa-0.1.3/src/iwa.egg-info}/PKG-INFO +1 -1
  6. iwa-0.1.2/src/iwa/plugins/olas/tests/test_staking_integration.py +0 -273
  7. {iwa-0.1.2 → iwa-0.1.3}/LICENSE +0 -0
  8. {iwa-0.1.2 → iwa-0.1.3}/README.md +0 -0
  9. {iwa-0.1.2 → iwa-0.1.3}/setup.cfg +0 -0
  10. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/__init__.py +0 -0
  11. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/__main__.py +0 -0
  12. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/__init__.py +0 -0
  13. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/chain/__init__.py +0 -0
  14. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/chain/errors.py +0 -0
  15. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/chain/interface.py +0 -0
  16. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/chain/manager.py +0 -0
  17. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/chain/models.py +0 -0
  18. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/chain/rate_limiter.py +0 -0
  19. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/chainlist.py +0 -0
  20. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/cli.py +0 -0
  21. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/constants.py +0 -0
  22. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/contracts/__init__.py +0 -0
  23. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/contracts/abis/erc20.json +0 -0
  24. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/contracts/abis/multisend.json +0 -0
  25. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/contracts/abis/multisend_call_only.json +0 -0
  26. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/contracts/cache.py +0 -0
  27. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/contracts/contract.py +0 -0
  28. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/contracts/decoder.py +0 -0
  29. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/contracts/erc20.py +0 -0
  30. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/contracts/multisend.py +0 -0
  31. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/db.py +0 -0
  32. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/http.py +0 -0
  33. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/ipfs.py +0 -0
  34. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/keys.py +0 -0
  35. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/mnemonic.py +0 -0
  36. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/models.py +0 -0
  37. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/monitor.py +0 -0
  38. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/plugins.py +0 -0
  39. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/pricing.py +0 -0
  40. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/rpc_monitor.py +0 -0
  41. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/secrets.py +0 -0
  42. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/__init__.py +0 -0
  43. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/account.py +0 -0
  44. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/balance.py +0 -0
  45. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/plugin.py +0 -0
  46. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/safe.py +0 -0
  47. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/safe_executor.py +0 -0
  48. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/transaction.py +0 -0
  49. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/transfer/__init__.py +0 -0
  50. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/transfer/base.py +0 -0
  51. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/transfer/erc20.py +0 -0
  52. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/transfer/multisend.py +0 -0
  53. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/transfer/native.py +0 -0
  54. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/services/transfer/swap.py +0 -0
  55. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/tables.py +0 -0
  56. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/test.py +0 -0
  57. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/tests/test_gnosis_fee.py +0 -0
  58. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/tests/test_ipfs.py +0 -0
  59. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/tests/test_pricing.py +0 -0
  60. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/tests/test_regression_fixes.py +0 -0
  61. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/tests/test_wallet.py +0 -0
  62. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/types.py +0 -0
  63. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/ui.py +0 -0
  64. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/utils.py +0 -0
  65. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/core/wallet.py +0 -0
  66. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/__init__.py +0 -0
  67. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/gnosis/__init__.py +0 -0
  68. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/gnosis/cow/__init__.py +0 -0
  69. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/gnosis/cow/quotes.py +0 -0
  70. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/gnosis/cow/swap.py +0 -0
  71. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/gnosis/cow/types.py +0 -0
  72. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/gnosis/cow_utils.py +0 -0
  73. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/gnosis/plugin.py +0 -0
  74. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/gnosis/safe.py +0 -0
  75. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/gnosis/tests/test_cow.py +0 -0
  76. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/gnosis/tests/test_safe.py +0 -0
  77. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/__init__.py +0 -0
  78. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/constants.py +0 -0
  79. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/abis/activity_checker.json +0 -0
  80. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/abis/mech.json +0 -0
  81. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/abis/mech_marketplace.json +0 -0
  82. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/abis/mech_marketplace_v1.json +0 -0
  83. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/abis/mech_new.json +0 -0
  84. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/abis/service_manager.json +0 -0
  85. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/abis/service_registry.json +0 -0
  86. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/abis/service_registry_token_utility.json +0 -0
  87. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/abis/staking.json +0 -0
  88. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/abis/staking_token.json +0 -0
  89. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/activity_checker.py +0 -0
  90. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/base.py +0 -0
  91. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/mech.py +0 -0
  92. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/mech_marketplace.py +0 -0
  93. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/mech_marketplace_v1.py +0 -0
  94. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/contracts/service.py +0 -0
  95. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/events.py +0 -0
  96. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/importer.py +0 -0
  97. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/mech_reference.py +0 -0
  98. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/models.py +0 -0
  99. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/plugin.py +0 -0
  100. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/scripts/test_full_mech_flow.py +0 -0
  101. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/scripts/test_simple_lifecycle.py +0 -0
  102. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/service_manager/__init__.py +0 -0
  103. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/service_manager/base.py +0 -0
  104. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/service_manager/drain.py +0 -0
  105. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/service_manager/lifecycle.py +0 -0
  106. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/service_manager/mech.py +0 -0
  107. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/service_manager/staking.py +0 -0
  108. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/conftest.py +0 -0
  109. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_importer.py +0 -0
  110. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_importer_error_handling.py +0 -0
  111. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_mech_contracts.py +0 -0
  112. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_olas_archiving.py +0 -0
  113. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_olas_contracts.py +0 -0
  114. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_olas_integration.py +0 -0
  115. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_olas_models.py +0 -0
  116. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_olas_view.py +0 -0
  117. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_olas_view_actions.py +0 -0
  118. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_olas_view_modals.py +0 -0
  119. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_plugin.py +0 -0
  120. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_plugin_full.py +0 -0
  121. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_service_lifecycle.py +0 -0
  122. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_service_manager.py +0 -0
  123. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_service_manager_errors.py +0 -0
  124. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_service_manager_flows.py +0 -0
  125. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_service_manager_mech.py +0 -0
  126. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_service_manager_rewards.py +0 -0
  127. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_service_manager_validation.py +0 -0
  128. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_service_staking.py +0 -0
  129. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tests/test_staking_validation.py +0 -0
  130. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tui/__init__.py +0 -0
  131. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/plugins/olas/tui/olas_view.py +0 -0
  132. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tools/__init__.py +0 -0
  133. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tools/check_profile.py +0 -0
  134. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tools/drain_accounts.py +0 -0
  135. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tools/list_contracts.py +0 -0
  136. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tools/release.py +0 -0
  137. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tools/reset_env.py +0 -0
  138. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tools/reset_tenderly.py +0 -0
  139. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tools/restore_backup.py +0 -0
  140. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tools/test_chainlist.py +0 -0
  141. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tools/wallet_check.py +0 -0
  142. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/__init__.py +0 -0
  143. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/app.py +0 -0
  144. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/modals/__init__.py +0 -0
  145. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/modals/base.py +0 -0
  146. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/rpc.py +0 -0
  147. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/screens/__init__.py +0 -0
  148. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/screens/wallets.py +0 -0
  149. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/tests/test_app.py +0 -0
  150. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/tests/test_rpc.py +0 -0
  151. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/tests/test_wallets_refactor.py +0 -0
  152. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/tests/test_widgets.py +0 -0
  153. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/widgets/__init__.py +0 -0
  154. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/widgets/base.py +0 -0
  155. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/tui/workers.py +0 -0
  156. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/dependencies.py +0 -0
  157. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/models.py +0 -0
  158. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/routers/accounts.py +0 -0
  159. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/routers/olas/__init__.py +0 -0
  160. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/routers/olas/admin.py +0 -0
  161. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/routers/olas/funding.py +0 -0
  162. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/routers/olas/general.py +0 -0
  163. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/routers/olas/services.py +0 -0
  164. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/routers/olas/staking.py +0 -0
  165. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/routers/state.py +0 -0
  166. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/routers/swap.py +0 -0
  167. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/routers/transactions.py +0 -0
  168. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/server.py +0 -0
  169. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/static/app.js +0 -0
  170. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/static/index.html +0 -0
  171. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/static/style.css +0 -0
  172. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/tests/test_web_endpoints.py +0 -0
  173. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/tests/test_web_olas.py +0 -0
  174. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/tests/test_web_swap.py +0 -0
  175. {iwa-0.1.2 → iwa-0.1.3}/src/iwa/web/tests/test_web_swap_coverage.py +0 -0
  176. {iwa-0.1.2 → iwa-0.1.3}/src/iwa.egg-info/SOURCES.txt +0 -0
  177. {iwa-0.1.2 → iwa-0.1.3}/src/iwa.egg-info/dependency_links.txt +0 -0
  178. {iwa-0.1.2 → iwa-0.1.3}/src/iwa.egg-info/entry_points.txt +0 -0
  179. {iwa-0.1.2 → iwa-0.1.3}/src/iwa.egg-info/requires.txt +0 -0
  180. {iwa-0.1.2 → iwa-0.1.3}/src/iwa.egg-info/top_level.txt +0 -0
  181. {iwa-0.1.2 → iwa-0.1.3}/src/tests/legacy_cow.py +0 -0
  182. {iwa-0.1.2 → iwa-0.1.3}/src/tests/legacy_safe.py +0 -0
  183. {iwa-0.1.2 → iwa-0.1.3}/src/tests/legacy_transaction_retry_logic.py +0 -0
  184. {iwa-0.1.2 → iwa-0.1.3}/src/tests/legacy_tui.py +0 -0
  185. {iwa-0.1.2 → iwa-0.1.3}/src/tests/legacy_wallets_screen.py +0 -0
  186. {iwa-0.1.2 → iwa-0.1.3}/src/tests/legacy_web.py +0 -0
  187. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_account_service.py +0 -0
  188. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_balance_service.py +0 -0
  189. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_chain.py +0 -0
  190. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_chain_interface.py +0 -0
  191. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_chain_interface_coverage.py +0 -0
  192. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_chainlist_enrichment.py +0 -0
  193. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_cli.py +0 -0
  194. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_contract.py +0 -0
  195. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_contract_cache.py +0 -0
  196. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_db.py +0 -0
  197. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_drain_coverage.py +0 -0
  198. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_erc20.py +0 -0
  199. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_gnosis_plugin.py +0 -0
  200. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_keys.py +0 -0
  201. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_legacy_wallet.py +0 -0
  202. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_main.py +0 -0
  203. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_migration.py +0 -0
  204. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_mnemonic.py +0 -0
  205. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_modals.py +0 -0
  206. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_models.py +0 -0
  207. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_monitor.py +0 -0
  208. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_multisend.py +0 -0
  209. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_plugin_service.py +0 -0
  210. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_rate_limiter.py +0 -0
  211. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_rate_limiter_retry.py +0 -0
  212. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_reset_tenderly.py +0 -0
  213. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_rpc_efficiency.py +0 -0
  214. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_rpc_rate_limit.py +0 -0
  215. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_rpc_rotation.py +0 -0
  216. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_rpc_view.py +0 -0
  217. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_safe_coverage.py +0 -0
  218. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_safe_executor.py +0 -0
  219. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_safe_integration.py +0 -0
  220. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_safe_service.py +0 -0
  221. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_service_manager_integration.py +0 -0
  222. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_service_manager_structure.py +0 -0
  223. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_service_transaction.py +0 -0
  224. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_staking_router.py +0 -0
  225. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_staking_simple.py +0 -0
  226. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_tables.py +0 -0
  227. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_transaction_service.py +0 -0
  228. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_transfer_multisend.py +0 -0
  229. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_transfer_native.py +0 -0
  230. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_transfer_security.py +0 -0
  231. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_transfer_structure.py +0 -0
  232. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_transfer_swap_unit.py +0 -0
  233. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_ui_coverage.py +0 -0
  234. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_utils.py +0 -0
  235. {iwa-0.1.2 → iwa-0.1.3}/src/tests/test_workers.py +0 -0
  236. {iwa-0.1.2 → iwa-0.1.3}/src/tools/create_and_stake_service.py +0 -0
  237. {iwa-0.1.2 → iwa-0.1.3}/src/tools/verify_drain.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iwa
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: A secure, modular, and plugin-based framework for crypto agents and ops
5
5
  Requires-Python: <4.0,>=3.12
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "iwa"
3
- version = "0.1.2"
3
+ version = "0.1.3"
4
4
  description = "A secure, modular, and plugin-based framework for crypto agents and ops"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12,<4.0"
@@ -72,7 +72,7 @@ where = ["src"]
72
72
 
73
73
  [tool.ruff]
74
74
  line-length = 100
75
- target-version = "0.1.2"
75
+ target-version = "0.1.3"
76
76
  fix = true
77
77
 
78
78
  [tool.ruff.lint]
@@ -495,3 +495,138 @@ class StakingContract(ContractInstance):
495
495
  tx_params={"from": from_address},
496
496
  )
497
497
  return tx
498
+
499
+ def _fetch_events_chunked(
500
+ self,
501
+ event_type: str,
502
+ from_block: int,
503
+ to_block: int,
504
+ chunk_size: int = 500,
505
+ ) -> List:
506
+ """Fetch events in chunks to handle RPC block range limits.
507
+
508
+ Args:
509
+ event_type: Name of the event (Checkpoint, ServiceInactivityWarning, etc.)
510
+ from_block: Starting block number.
511
+ to_block: Ending block number.
512
+ chunk_size: Max blocks per request (default 500).
513
+
514
+ Returns:
515
+ List of event log entries.
516
+
517
+ """
518
+ all_logs: List = []
519
+ current_from = from_block
520
+
521
+ event = getattr(self.contract.events, event_type, None)
522
+ if event is None:
523
+ logger.debug(f"Event {event_type} not found in contract ABI")
524
+ return []
525
+
526
+ while current_from <= to_block:
527
+ current_to = min(current_from + chunk_size - 1, to_block)
528
+
529
+ try:
530
+ event_filter = event.create_filter(
531
+ from_block=current_from, to_block=current_to
532
+ )
533
+ logs = event_filter.get_all_entries()
534
+ all_logs.extend(logs)
535
+ except Exception as e:
536
+ error_msg = str(e).lower()
537
+ # If range too large, try smaller chunks
538
+ if "range" in error_msg or "limit" in error_msg or "10000" in error_msg:
539
+ if chunk_size > 100:
540
+ logger.debug(
541
+ "Block range too large, retrying with smaller chunks"
542
+ )
543
+ smaller_logs = self._fetch_events_chunked(
544
+ event_type, current_from, current_to, chunk_size // 2
545
+ )
546
+ all_logs.extend(smaller_logs)
547
+ else:
548
+ logger.warning(
549
+ f"Cannot fetch {event_type} events for blocks "
550
+ f"{current_from}-{current_to}: {e}"
551
+ )
552
+ else:
553
+ logger.debug(f"Error fetching {event_type} events: {e}")
554
+
555
+ current_from = current_to + 1
556
+
557
+ return all_logs
558
+
559
+ def get_checkpoint_events(
560
+ self, from_block: int, to_block: Optional[int] = None
561
+ ) -> Dict:
562
+ """Get checkpoint-related events from a block range.
563
+
564
+ Retrieves Checkpoint, ServiceInactivityWarning, and ServicesEvicted events
565
+ to determine which services received rewards and which got warnings.
566
+
567
+ Uses chunked fetching to handle RPCs that limit block ranges.
568
+
569
+ Args:
570
+ from_block: Starting block number.
571
+ to_block: Ending block number (defaults to latest).
572
+
573
+ Returns:
574
+ Dict with:
575
+ - epoch: int, the new epoch number
576
+ - rewarded_services: Dict[int, int] mapping service_id -> reward (wei)
577
+ - inactivity_warnings: List[int] of service IDs with warnings
578
+ - evicted_services: List[int] of evicted service IDs
579
+ - checkpoint_block: int, block where checkpoint occurred
580
+
581
+ """
582
+ if to_block is None:
583
+ to_block = self.chain_interface.web3.eth.block_number
584
+
585
+ result: Dict = {
586
+ "epoch": None,
587
+ "rewarded_services": {},
588
+ "inactivity_warnings": [],
589
+ "evicted_services": [],
590
+ "checkpoint_block": None,
591
+ }
592
+
593
+ try:
594
+ # Get Checkpoint events
595
+ checkpoint_logs = self._fetch_events_chunked(
596
+ "Checkpoint", from_block, to_block
597
+ )
598
+
599
+ if checkpoint_logs:
600
+ # Take the most recent checkpoint
601
+ latest = checkpoint_logs[-1]
602
+ result["epoch"] = latest.args.get("epoch")
603
+ result["checkpoint_block"] = latest.blockNumber
604
+
605
+ # Parse serviceIds and rewards arrays
606
+ service_ids = latest.args.get("serviceIds", [])
607
+ rewards = latest.args.get("rewards", [])
608
+
609
+ for sid, reward in zip(service_ids, rewards, strict=True):
610
+ result["rewarded_services"][sid] = reward
611
+
612
+ # Get ServiceInactivityWarning events
613
+ warning_logs = self._fetch_events_chunked(
614
+ "ServiceInactivityWarning", from_block, to_block
615
+ )
616
+ for log in warning_logs:
617
+ service_id = log.args.get("serviceId")
618
+ if service_id is not None:
619
+ result["inactivity_warnings"].append(service_id)
620
+
621
+ # Get ServicesEvicted events
622
+ evicted_logs = self._fetch_events_chunked(
623
+ "ServicesEvicted", from_block, to_block
624
+ )
625
+ for log in evicted_logs:
626
+ evicted_ids = log.args.get("serviceIds", [])
627
+ result["evicted_services"].extend(evicted_ids)
628
+
629
+ except Exception as e:
630
+ logger.error(f"Error fetching checkpoint events: {e}")
631
+
632
+ return result