iwa 0.0.1a6__tar.gz → 0.0.2__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 (211) hide show
  1. {iwa-0.0.1a6/src/iwa.egg-info → iwa-0.0.2}/PKG-INFO +1 -1
  2. {iwa-0.0.1a6 → iwa-0.0.2}/pyproject.toml +2 -2
  3. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/chain/models.py +27 -0
  4. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/pricing.py +21 -14
  5. {iwa-0.0.1a6 → iwa-0.0.2/src/iwa.egg-info}/PKG-INFO +1 -1
  6. {iwa-0.0.1a6 → iwa-0.0.2}/LICENSE +0 -0
  7. {iwa-0.0.1a6 → iwa-0.0.2}/README.md +0 -0
  8. {iwa-0.0.1a6 → iwa-0.0.2}/setup.cfg +0 -0
  9. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/__init__.py +0 -0
  10. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/__main__.py +0 -0
  11. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/__init__.py +0 -0
  12. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/chain/__init__.py +0 -0
  13. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/chain/errors.py +0 -0
  14. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/chain/interface.py +0 -0
  15. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/chain/manager.py +0 -0
  16. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/chain/rate_limiter.py +0 -0
  17. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/cli.py +0 -0
  18. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/constants.py +0 -0
  19. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/contracts/__init__.py +0 -0
  20. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/contracts/abis/erc20.json +0 -0
  21. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/contracts/abis/multisend.json +0 -0
  22. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/contracts/abis/multisend_call_only.json +0 -0
  23. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/contracts/contract.py +0 -0
  24. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/contracts/erc20.py +0 -0
  25. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/contracts/multisend.py +0 -0
  26. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/db.py +0 -0
  27. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/ipfs.py +0 -0
  28. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/keys.py +0 -0
  29. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/mnemonic.py +0 -0
  30. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/models.py +0 -0
  31. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/monitor.py +0 -0
  32. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/plugins.py +0 -0
  33. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/secrets.py +0 -0
  34. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/__init__.py +0 -0
  35. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/account.py +0 -0
  36. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/balance.py +0 -0
  37. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/plugin.py +0 -0
  38. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/safe.py +0 -0
  39. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/transaction.py +0 -0
  40. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/transfer/__init__.py +0 -0
  41. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/transfer/base.py +0 -0
  42. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/transfer/erc20.py +0 -0
  43. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/transfer/multisend.py +0 -0
  44. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/transfer/native.py +0 -0
  45. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/services/transfer/swap.py +0 -0
  46. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/tables.py +0 -0
  47. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/test.py +0 -0
  48. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/tests/test_wallet.py +0 -0
  49. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/types.py +0 -0
  50. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/ui.py +0 -0
  51. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/utils.py +0 -0
  52. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/core/wallet.py +0 -0
  53. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/__init__.py +0 -0
  54. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/gnosis/__init__.py +0 -0
  55. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/gnosis/cow/__init__.py +0 -0
  56. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/gnosis/cow/quotes.py +0 -0
  57. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/gnosis/cow/swap.py +0 -0
  58. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/gnosis/cow/types.py +0 -0
  59. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/gnosis/cow_utils.py +0 -0
  60. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/gnosis/plugin.py +0 -0
  61. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/gnosis/safe.py +0 -0
  62. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/gnosis/tests/test_cow.py +0 -0
  63. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/gnosis/tests/test_safe.py +0 -0
  64. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/__init__.py +0 -0
  65. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/constants.py +0 -0
  66. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/abis/activity_checker.json +0 -0
  67. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/abis/mech.json +0 -0
  68. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/abis/mech_marketplace.json +0 -0
  69. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/abis/mech_new.json +0 -0
  70. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/abis/service_manager.json +0 -0
  71. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/abis/service_registry.json +0 -0
  72. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/abis/staking.json +0 -0
  73. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/abis/staking_token.json +0 -0
  74. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/activity_checker.py +0 -0
  75. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/base.py +0 -0
  76. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/mech.py +0 -0
  77. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/mech_marketplace.py +0 -0
  78. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/service.py +0 -0
  79. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/contracts/staking.py +0 -0
  80. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/importer.py +0 -0
  81. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/mech_reference.py +0 -0
  82. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/models.py +0 -0
  83. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/plugin.py +0 -0
  84. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/scripts/test_full_mech_flow.py +0 -0
  85. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/scripts/test_simple_lifecycle.py +0 -0
  86. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/service_manager/__init__.py +0 -0
  87. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/service_manager/base.py +0 -0
  88. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/service_manager/drain.py +0 -0
  89. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/service_manager/lifecycle.py +0 -0
  90. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/service_manager/mech.py +0 -0
  91. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/service_manager/staking.py +0 -0
  92. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/conftest.py +0 -0
  93. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_importer.py +0 -0
  94. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_importer_error_handling.py +0 -0
  95. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_mech_contracts.py +0 -0
  96. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_olas_contracts.py +0 -0
  97. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_olas_integration.py +0 -0
  98. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_olas_models.py +0 -0
  99. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_olas_view.py +0 -0
  100. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_olas_view_actions.py +0 -0
  101. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_olas_view_modals.py +0 -0
  102. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_plugin.py +0 -0
  103. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_plugin_full.py +0 -0
  104. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_service_lifecycle.py +0 -0
  105. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_service_manager.py +0 -0
  106. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_service_manager_errors.py +0 -0
  107. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_service_manager_flows.py +0 -0
  108. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_service_manager_mech.py +0 -0
  109. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_service_manager_rewards.py +0 -0
  110. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_service_manager_validation.py +0 -0
  111. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_service_staking.py +0 -0
  112. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_staking_integration.py +0 -0
  113. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tests/test_staking_validation.py +0 -0
  114. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tui/__init__.py +0 -0
  115. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/plugins/olas/tui/olas_view.py +0 -0
  116. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tools/__init__.py +0 -0
  117. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tools/check_profile.py +0 -0
  118. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tools/list_contracts.py +0 -0
  119. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tools/release.py +0 -0
  120. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tools/reset_env.py +0 -0
  121. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tools/reset_tenderly.py +0 -0
  122. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tools/restore_backup.py +0 -0
  123. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tools/wallet_check.py +0 -0
  124. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/__init__.py +0 -0
  125. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/app.py +0 -0
  126. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/modals/__init__.py +0 -0
  127. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/modals/base.py +0 -0
  128. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/rpc.py +0 -0
  129. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/screens/__init__.py +0 -0
  130. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/screens/wallets.py +0 -0
  131. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/tests/test_app.py +0 -0
  132. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/tests/test_rpc.py +0 -0
  133. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/tests/test_wallets_refactor.py +0 -0
  134. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/tests/test_widgets.py +0 -0
  135. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/widgets/__init__.py +0 -0
  136. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/widgets/base.py +0 -0
  137. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/tui/workers.py +0 -0
  138. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/dependencies.py +0 -0
  139. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/models.py +0 -0
  140. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/routers/accounts.py +0 -0
  141. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/routers/olas/__init__.py +0 -0
  142. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/routers/olas/admin.py +0 -0
  143. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/routers/olas/funding.py +0 -0
  144. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/routers/olas/general.py +0 -0
  145. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/routers/olas/services.py +0 -0
  146. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/routers/olas/staking.py +0 -0
  147. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/routers/state.py +0 -0
  148. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/routers/swap.py +0 -0
  149. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/routers/transactions.py +0 -0
  150. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/server.py +0 -0
  151. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/static/app.js +0 -0
  152. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/static/index.html +0 -0
  153. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/static/style.css +0 -0
  154. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/tests/test_web_endpoints.py +0 -0
  155. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/tests/test_web_olas.py +0 -0
  156. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/tests/test_web_swap.py +0 -0
  157. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa/web/tests/test_web_swap_coverage.py +0 -0
  158. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa.egg-info/SOURCES.txt +0 -0
  159. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa.egg-info/dependency_links.txt +0 -0
  160. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa.egg-info/entry_points.txt +0 -0
  161. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa.egg-info/requires.txt +0 -0
  162. {iwa-0.0.1a6 → iwa-0.0.2}/src/iwa.egg-info/top_level.txt +0 -0
  163. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/legacy_cow.py +0 -0
  164. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/legacy_safe.py +0 -0
  165. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/legacy_transaction_retry_logic.py +0 -0
  166. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/legacy_tui.py +0 -0
  167. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/legacy_wallets_screen.py +0 -0
  168. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/legacy_web.py +0 -0
  169. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_account_service.py +0 -0
  170. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_balance_service.py +0 -0
  171. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_chain.py +0 -0
  172. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_chain_interface.py +0 -0
  173. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_chain_interface_coverage.py +0 -0
  174. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_cli.py +0 -0
  175. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_contract.py +0 -0
  176. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_db.py +0 -0
  177. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_drain_coverage.py +0 -0
  178. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_erc20.py +0 -0
  179. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_gnosis_plugin.py +0 -0
  180. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_keys.py +0 -0
  181. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_legacy_wallet.py +0 -0
  182. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_main.py +0 -0
  183. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_migration.py +0 -0
  184. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_mnemonic.py +0 -0
  185. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_modals.py +0 -0
  186. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_models.py +0 -0
  187. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_monitor.py +0 -0
  188. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_multisend.py +0 -0
  189. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_plugin_service.py +0 -0
  190. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_pricing.py +0 -0
  191. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_rate_limiter.py +0 -0
  192. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_reset_tenderly.py +0 -0
  193. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_rpc_view.py +0 -0
  194. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_safe_coverage.py +0 -0
  195. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_safe_service.py +0 -0
  196. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_service_manager_integration.py +0 -0
  197. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_service_manager_structure.py +0 -0
  198. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_service_transaction.py +0 -0
  199. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_staking_router.py +0 -0
  200. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_staking_simple.py +0 -0
  201. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_tables.py +0 -0
  202. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_transaction_service.py +0 -0
  203. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_transfer_multisend.py +0 -0
  204. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_transfer_native.py +0 -0
  205. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_transfer_security.py +0 -0
  206. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_transfer_structure.py +0 -0
  207. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_transfer_swap_unit.py +0 -0
  208. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_ui_coverage.py +0 -0
  209. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_utils.py +0 -0
  210. {iwa-0.0.1a6 → iwa-0.0.2}/src/tests/test_workers.py +0 -0
  211. {iwa-0.0.1a6 → iwa-0.0.2}/src/tools/verify_drain.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iwa
3
- Version: 0.0.1a6
3
+ Version: 0.0.2
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.0.1a6"
3
+ version = "0.0.2"
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"
@@ -71,7 +71,7 @@ where = ["src"]
71
71
 
72
72
  [tool.ruff]
73
73
  line-length = 100
74
- target-version = "0.0.1a6"
74
+ target-version = "0.0.2"
75
75
  fix = true
76
76
 
77
77
  [tool.ruff.lint]
@@ -78,6 +78,15 @@ class Gnosis(SupportedChain):
78
78
  if not self.rpcs and secrets.gnosis_rpc:
79
79
  self.rpcs = secrets.gnosis_rpc.get_secret_value().split(",")
80
80
 
81
+ # Defensive: ensure no comma-separated strings in list
82
+ new_rpcs = []
83
+ for rpc in self.rpcs:
84
+ if "," in rpc:
85
+ new_rpcs.extend([r.strip() for r in rpc.split(",") if r.strip()])
86
+ else:
87
+ new_rpcs.append(rpc)
88
+ self.rpcs = new_rpcs
89
+
81
90
 
82
91
  @singleton
83
92
  class Ethereum(SupportedChain):
@@ -98,6 +107,15 @@ class Ethereum(SupportedChain):
98
107
  if not self.rpcs and secrets.ethereum_rpc:
99
108
  self.rpcs = secrets.ethereum_rpc.get_secret_value().split(",")
100
109
 
110
+ # Defensive: ensure no comma-separated strings in list
111
+ new_rpcs = []
112
+ for rpc in self.rpcs:
113
+ if "," in rpc:
114
+ new_rpcs.extend([r.strip() for r in rpc.split(",") if r.strip()])
115
+ else:
116
+ new_rpcs.append(rpc)
117
+ self.rpcs = new_rpcs
118
+
101
119
 
102
120
  @singleton
103
121
  class Base(SupportedChain):
@@ -118,6 +136,15 @@ class Base(SupportedChain):
118
136
  if not self.rpcs and secrets.base_rpc:
119
137
  self.rpcs = secrets.base_rpc.get_secret_value().split(",")
120
138
 
139
+ # Defensive: ensure no comma-separated strings in list
140
+ new_rpcs = []
141
+ for rpc in self.rpcs:
142
+ if "," in rpc:
143
+ new_rpcs.extend([r.strip() for r in rpc.split(",") if r.strip()])
144
+ else:
145
+ new_rpcs.append(rpc)
146
+ self.rpcs = new_rpcs
147
+
121
148
 
122
149
  @singleton
123
150
  class SupportedChains:
@@ -45,7 +45,13 @@ class PriceService:
45
45
  if datetime.now() - entry["timestamp"] < self.cache_ttl:
46
46
  return entry["price"]
47
47
 
48
- # Fetch from API with 2 retries
48
+ price = self._fetch_price_from_api(token_id, vs_currency)
49
+ if price is not None:
50
+ self.cache[cache_key] = {"price": price, "timestamp": datetime.now()}
51
+ return price
52
+
53
+ def _fetch_price_from_api(self, token_id: str, vs_currency: str) -> Optional[float]:
54
+ """Fetch price from API with retries and key fallback."""
49
55
  max_retries = 2
50
56
  for attempt in range(max_retries + 1):
51
57
  try:
@@ -57,9 +63,16 @@ class PriceService:
57
63
 
58
64
  response = requests.get(url, params=params, headers=headers, timeout=10)
59
65
 
66
+ if response.status_code == 401 and self.api_key:
67
+ logger.warning("CoinGecko API key invalid (401). Retrying without key...")
68
+ self.api_key = None
69
+ headers.pop("x-cg-demo-api-key", None)
70
+ response = requests.get(url, params=params, headers=headers, timeout=10)
71
+
60
72
  if response.status_code == 429:
61
73
  logger.warning(
62
- f"CoinGecko rate limit reached (429) for {token_id}. Attempt {attempt + 1}/{max_retries + 1}"
74
+ f"CoinGecko rate limit reached (429) for {token_id}. "
75
+ f"Attempt {attempt + 1}/{max_retries + 1}"
63
76
  )
64
77
  if attempt < max_retries:
65
78
  time.sleep(2 * (attempt + 1))
@@ -67,25 +80,19 @@ class PriceService:
67
80
  return None
68
81
 
69
82
  response.raise_for_status()
70
-
71
83
  data = response.json()
84
+
72
85
  if token_id in data and vs_currency in data[token_id]:
73
- price = float(data[token_id][vs_currency])
86
+ return float(data[token_id][vs_currency])
74
87
 
75
- # Update cache
76
- self.cache[cache_key] = {"price": price, "timestamp": datetime.now()}
77
- return price
78
- else:
79
- logger.warning(
80
- f"Price for {token_id} in {vs_currency} not found in response: {data}"
81
- )
82
- # Don't cache None, might be a temporary hiccup
83
- return None
88
+ logger.warning(
89
+ f"Price for {token_id} in {vs_currency} not found in response: {data}"
90
+ )
91
+ return None
84
92
 
85
93
  except Exception as e:
86
94
  logger.error(f"Failed to fetch price for {token_id} (Attempt {attempt + 1}): {e}")
87
95
  if attempt < max_retries:
88
96
  time.sleep(1)
89
97
  continue
90
- return None
91
98
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iwa
3
- Version: 0.0.1a6
3
+ Version: 0.0.2
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
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
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