iwa 0.0.58__py3-none-any.whl → 0.0.60__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. iwa/core/chain/interface.py +118 -53
  2. iwa/core/chain/rate_limiter.py +35 -12
  3. iwa/core/chainlist.py +15 -10
  4. iwa/core/cli.py +3 -0
  5. iwa/core/contracts/cache.py +1 -1
  6. iwa/core/contracts/contract.py +1 -0
  7. iwa/core/contracts/decoder.py +10 -4
  8. iwa/core/http.py +31 -0
  9. iwa/core/ipfs.py +11 -19
  10. iwa/core/keys.py +10 -4
  11. iwa/core/models.py +1 -3
  12. iwa/core/pricing.py +3 -21
  13. iwa/core/rpc_monitor.py +1 -0
  14. iwa/core/services/balance.py +0 -1
  15. iwa/core/services/safe.py +8 -2
  16. iwa/core/services/safe_executor.py +52 -18
  17. iwa/core/services/transaction.py +32 -12
  18. iwa/core/services/transfer/erc20.py +0 -1
  19. iwa/core/services/transfer/native.py +1 -1
  20. iwa/core/tests/test_gnosis_fee.py +6 -2
  21. iwa/core/tests/test_ipfs.py +1 -1
  22. iwa/core/tests/test_regression_fixes.py +3 -6
  23. iwa/core/utils.py +2 -0
  24. iwa/core/wallet.py +3 -1
  25. iwa/plugins/olas/constants.py +15 -5
  26. iwa/plugins/olas/contracts/activity_checker.py +3 -3
  27. iwa/plugins/olas/contracts/staking.py +0 -1
  28. iwa/plugins/olas/events.py +15 -13
  29. iwa/plugins/olas/importer.py +26 -20
  30. iwa/plugins/olas/plugin.py +16 -14
  31. iwa/plugins/olas/service_manager/drain.py +1 -3
  32. iwa/plugins/olas/service_manager/lifecycle.py +9 -9
  33. iwa/plugins/olas/service_manager/staking.py +11 -6
  34. iwa/plugins/olas/tests/test_olas_archiving.py +25 -15
  35. iwa/plugins/olas/tests/test_olas_integration.py +49 -29
  36. iwa/plugins/olas/tests/test_service_manager.py +8 -10
  37. iwa/plugins/olas/tests/test_service_manager_errors.py +5 -4
  38. iwa/plugins/olas/tests/test_service_manager_flows.py +6 -5
  39. iwa/plugins/olas/tests/test_service_staking.py +64 -38
  40. iwa/tools/drain_accounts.py +2 -1
  41. iwa/tools/reset_env.py +2 -1
  42. iwa/tools/test_chainlist.py +5 -1
  43. iwa/tui/screens/wallets.py +1 -3
  44. iwa/web/routers/olas/services.py +10 -5
  45. {iwa-0.0.58.dist-info → iwa-0.0.60.dist-info}/METADATA +1 -1
  46. {iwa-0.0.58.dist-info → iwa-0.0.60.dist-info}/RECORD +60 -59
  47. tests/test_balance_service.py +0 -2
  48. tests/test_chain.py +1 -2
  49. tests/test_chain_interface.py +3 -3
  50. tests/test_rate_limiter.py +7 -5
  51. tests/test_rate_limiter_retry.py +34 -33
  52. tests/test_rpc_efficiency.py +4 -1
  53. tests/test_rpc_rate_limit.py +4 -3
  54. tests/test_rpc_rotation.py +4 -4
  55. tests/test_safe_executor.py +76 -50
  56. tests/test_safe_integration.py +11 -6
  57. {iwa-0.0.58.dist-info → iwa-0.0.60.dist-info}/WHEEL +0 -0
  58. {iwa-0.0.58.dist-info → iwa-0.0.60.dist-info}/entry_points.txt +0 -0
  59. {iwa-0.0.58.dist-info → iwa-0.0.60.dist-info}/licenses/LICENSE +0 -0
  60. {iwa-0.0.58.dist-info → iwa-0.0.60.dist-info}/top_level.txt +0 -0
@@ -33,9 +33,11 @@ def mock_wallet():
33
33
 
34
34
  def test_sm_unstake_not_staked(mock_wallet):
35
35
  """Cover unstake when not staked (lines 736-738)."""
36
- with patch("iwa.core.models.Config"), \
37
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
38
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
36
+ with (
37
+ patch("iwa.core.models.Config"),
38
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
39
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
40
+ ):
39
41
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
40
42
  sm = ServiceManager(mock_wallet)
41
43
  sm.service = Service(
@@ -51,9 +53,11 @@ def test_sm_unstake_not_staked(mock_wallet):
51
53
 
52
54
  def test_sm_unstake_tx_fails(mock_wallet):
53
55
  """Cover unstake transaction failure (lines 766-768)."""
54
- with patch("iwa.core.models.Config"), \
55
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
56
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
56
+ with (
57
+ patch("iwa.core.models.Config"),
58
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
59
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
60
+ ):
57
61
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
58
62
  sm = ServiceManager(mock_wallet)
59
63
  sm.service = Service(
@@ -77,9 +81,11 @@ def test_sm_unstake_tx_fails(mock_wallet):
77
81
 
78
82
  def test_sm_get_staking_status_no_staking_address(mock_wallet):
79
83
  """Cover get_staking_status with no staking address (lines 831)."""
80
- with patch("iwa.core.models.Config"), \
81
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
82
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
84
+ with (
85
+ patch("iwa.core.models.Config"),
86
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
87
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
88
+ ):
83
89
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
84
90
  sm = ServiceManager(mock_wallet)
85
91
  sm.service = Service(
@@ -97,9 +103,11 @@ def test_sm_get_staking_status_no_staking_address(mock_wallet):
97
103
 
98
104
  def test_sm_get_staking_status_with_full_info(mock_wallet):
99
105
  """Cover get_staking_status with complete info (lines 866-891)."""
100
- with patch("iwa.core.models.Config"), \
101
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
102
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
106
+ with (
107
+ patch("iwa.core.models.Config"),
108
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
109
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
110
+ ):
103
111
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
104
112
  sm = ServiceManager(mock_wallet)
105
113
  sm.service = Service(
@@ -142,9 +150,11 @@ def test_sm_get_staking_status_with_full_info(mock_wallet):
142
150
 
143
151
  def test_sm_claim_rewards_no_service(mock_wallet):
144
152
  """Cover claim_rewards with no service (lines 936-938)."""
145
- with patch("iwa.core.models.Config"), \
146
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
147
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
153
+ with (
154
+ patch("iwa.core.models.Config"),
155
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
156
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
157
+ ):
148
158
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
149
159
  sm = ServiceManager(mock_wallet)
150
160
  sm.service = None
@@ -156,9 +166,11 @@ def test_sm_claim_rewards_no_service(mock_wallet):
156
166
 
157
167
  def test_sm_claim_rewards_no_staking_address(mock_wallet):
158
168
  """Cover claim_rewards with no staking address (lines 939-943)."""
159
- with patch("iwa.core.models.Config"), \
160
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
161
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
169
+ with (
170
+ patch("iwa.core.models.Config"),
171
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
172
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
173
+ ):
162
174
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
163
175
  sm = ServiceManager(mock_wallet)
164
176
  sm.service = Service(
@@ -171,9 +183,11 @@ def test_sm_claim_rewards_no_staking_address(mock_wallet):
171
183
 
172
184
  def test_sm_claim_rewards_tx_fails(mock_wallet):
173
185
  """Cover claim_rewards transaction failure (lines 967-968)."""
174
- with patch("iwa.core.models.Config"), \
175
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
176
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
186
+ with (
187
+ patch("iwa.core.models.Config"),
188
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
189
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
190
+ ):
177
191
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
178
192
  sm = ServiceManager(mock_wallet)
179
193
  sm.service = Service(
@@ -199,9 +213,11 @@ def test_sm_claim_rewards_tx_fails(mock_wallet):
199
213
 
200
214
  mock_wallet.sign_and_send_transaction.return_value = (False, None)
201
215
 
202
- with patch("iwa.plugins.olas.service_manager.drain.StakingContract", return_value=mock_staking):
203
- success, amount = sm.claim_rewards()
204
- assert success is False
216
+ with patch(
217
+ "iwa.plugins.olas.service_manager.drain.StakingContract", return_value=mock_staking
218
+ ):
219
+ success, amount = sm.claim_rewards()
220
+ assert success is False
205
221
 
206
222
 
207
223
  # === SERVICE MANAGER SPIN_UP STATE TRANSITIONS (lines 1188-1241) ===
@@ -209,9 +225,11 @@ def test_sm_claim_rewards_tx_fails(mock_wallet):
209
225
 
210
226
  def test_sm_spin_up_state_mismatch_after_activation(mock_wallet):
211
227
  """Cover spin_up state mismatch after activation (lines 1188-1191)."""
212
- with patch("iwa.core.models.Config"), \
213
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
214
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
228
+ with (
229
+ patch("iwa.core.models.Config"),
230
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
231
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
232
+ ):
215
233
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
216
234
  sm = ServiceManager(mock_wallet)
217
235
  sm.service = Service(service_name="t", chain_name="gnosis", service_id=1)
@@ -233,9 +251,11 @@ def test_sm_spin_up_state_mismatch_after_activation(mock_wallet):
233
251
 
234
252
  def test_sm_spin_up_registration_fails(mock_wallet):
235
253
  """Cover spin_up registration failure (lines 1199-1201)."""
236
- with patch("iwa.core.models.Config"), \
237
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
238
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
254
+ with (
255
+ patch("iwa.core.models.Config"),
256
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
257
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
258
+ ):
239
259
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
240
260
  sm = ServiceManager(mock_wallet)
241
261
  sm.service = Service(service_name="t", chain_name="gnosis", service_id=1)
@@ -253,9 +273,11 @@ def test_sm_spin_up_registration_fails(mock_wallet):
253
273
 
254
274
  def test_sm_spin_up_deploy_fails(mock_wallet):
255
275
  """Cover spin_up deploy failure (lines 1216-1218)."""
256
- with patch("iwa.core.models.Config"), \
257
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
258
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
276
+ with (
277
+ patch("iwa.core.models.Config"),
278
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
279
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
280
+ ):
259
281
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
260
282
  sm = ServiceManager(mock_wallet)
261
283
  sm.service = Service(service_name="t", chain_name="gnosis", service_id=1)
@@ -273,9 +295,11 @@ def test_sm_spin_up_deploy_fails(mock_wallet):
273
295
 
274
296
  def test_sm_wind_down_terminate_fails(mock_wallet):
275
297
  """Cover wind_down terminate failure (lines 1299-1301)."""
276
- with patch("iwa.core.models.Config"), \
277
- patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache, \
278
- patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache):
298
+ with (
299
+ patch("iwa.core.models.Config"),
300
+ patch("iwa.plugins.olas.service_manager.base.ContractCache") as mock_cache,
301
+ patch("iwa.plugins.olas.service_manager.staking.ContractCache", mock_cache),
302
+ ):
279
303
  mock_cache.return_value.get_contract.side_effect = lambda cls, *a, **k: cls(*a, **k)
280
304
  sm = ServiceManager(mock_wallet)
281
305
  sm.service = Service(service_name="t", chain_name="gnosis", service_id=1)
@@ -293,8 +317,10 @@ def test_sm_wind_down_terminate_fails(mock_wallet):
293
317
 
294
318
  def test_sm_wind_down_unbond_fails(mock_wallet):
295
319
  """Cover wind_down unbond failure (lines 1315-1317)."""
296
- with patch("iwa.core.models.Config"), \
297
- patch("iwa.plugins.olas.service_manager.base.ContractCache"):
320
+ with (
321
+ patch("iwa.core.models.Config"),
322
+ patch("iwa.plugins.olas.service_manager.base.ContractCache"),
323
+ ):
298
324
  sm = ServiceManager(mock_wallet)
299
325
  sm.service = Service(service_name="t", chain_name="gnosis", service_id=1)
300
326
 
@@ -1,5 +1,5 @@
1
-
2
1
  """Tool to drain specific accounts to a master address."""
2
+
3
3
  import argparse
4
4
  import sys
5
5
  from pathlib import Path
@@ -56,5 +56,6 @@ def main() -> None:
56
56
  except Exception:
57
57
  logger.exception(f"Error draining {tag}")
58
58
 
59
+
59
60
  if __name__ == "__main__":
60
61
  main()
iwa/tools/reset_env.py CHANGED
@@ -25,6 +25,7 @@ def _reset_tenderly(profile: int) -> None:
25
25
  env = {"PYTHONPATH": "src"}
26
26
  # Merge with current env to keep PATH etc.
27
27
  import os
28
+
28
29
  full_env = os.environ.copy()
29
30
  full_env.update(env)
30
31
 
@@ -110,7 +111,7 @@ def main():
110
111
  parser.add_argument(
111
112
  "--keep-data",
112
113
  action="store_true",
113
- help="Reset only Tenderly, keeping config.yaml and wallet.json intact."
114
+ help="Reset only Tenderly, keeping config.yaml and wallet.json intact.",
114
115
  )
115
116
  args = parser.parse_args()
116
117
 
@@ -1,4 +1,5 @@
1
1
  """Script to verify ChainlistRPC functionality."""
2
+
2
3
  from iwa.core.chainlist import ChainlistRPC
3
4
 
4
5
 
@@ -32,7 +33,10 @@ def main() -> None:
32
33
 
33
34
  print("\nTracking info for first 5 RPCs:")
34
35
  for node in all_rpcs[:5]:
35
- print(f" - {node.url}: Tracking={node.is_tracking} (Privacy={node.privacy}, Tracking={node.tracking})")
36
+ print(
37
+ f" - {node.url}: Tracking={node.is_tracking} (Privacy={node.privacy}, Tracking={node.tracking})"
38
+ )
39
+
36
40
 
37
41
  if __name__ == "__main__":
38
42
  main()
@@ -330,9 +330,7 @@ class WalletsScreen(VerticalScroll):
330
330
 
331
331
  def _fetch_single_token_balance(self, address: str, token: str, chain_name: str) -> str:
332
332
  """Fetch a single token balance using BalanceService."""
333
- val_token = self.wallet.balance_service.get_erc20_balance_eth(
334
- address, token, chain_name
335
- )
333
+ val_token = self.wallet.balance_service.get_erc20_balance_eth(address, token, chain_name)
336
334
  val_token_str = f"{val_token:.4f}" if val_token is not None else "-"
337
335
 
338
336
  if val_token is not None:
@@ -41,7 +41,9 @@ def _determine_bond_amount(req: CreateServiceRequest) -> int:
41
41
 
42
42
  if req.token_address and req.staking_contract:
43
43
  # If a contract is specified, we MUST use its requirements
44
- staking_name = wallet.account_service.get_tag_by_address(req.staking_contract) or req.staking_contract
44
+ staking_name = (
45
+ wallet.account_service.get_tag_by_address(req.staking_contract) or req.staking_contract
46
+ )
45
47
  logger.info(f"Fetching requirements from {staking_name}...")
46
48
  staking_contract = StakingContract(req.staking_contract, req.chain)
47
49
  reqs = staking_contract.get_requirements()
@@ -73,6 +75,7 @@ def _determine_bond_amount(req: CreateServiceRequest) -> int:
73
75
  )
74
76
  return bond_amount
75
77
 
78
+
76
79
  @router.post(
77
80
  "/create",
78
81
  summary="Create Service",
@@ -81,7 +84,6 @@ def _determine_bond_amount(req: CreateServiceRequest) -> int:
81
84
  def create_service(req: CreateServiceRequest, auth: bool = Depends(verify_auth)):
82
85
  """Create a new Olas service using spin_up for seamless deployment."""
83
86
  try:
84
-
85
87
  from iwa.plugins.olas.contracts.staking import StakingContract
86
88
  from iwa.plugins.olas.service_manager import ServiceManager
87
89
 
@@ -196,7 +198,9 @@ def deploy_service(
196
198
  if staking_contract:
197
199
  try:
198
200
  staking_obj = StakingContract(staking_contract, service.chain_name)
199
- staking_name = wallet.account_service.get_tag_by_address(staking_contract) or staking_contract
201
+ staking_name = (
202
+ wallet.account_service.get_tag_by_address(staking_contract) or staking_contract
203
+ )
200
204
  logger.info(f"Will stake in {staking_name} after deployment")
201
205
  except Exception as e:
202
206
  logger.warning(f"Could not set up staking contract: {e}")
@@ -230,7 +234,6 @@ def deploy_service(
230
234
  raise HTTPException(status_code=400, detail=str(e)) from None
231
235
 
232
236
 
233
-
234
237
  def _resolve_service_accounts(service) -> dict:
235
238
  """Resolve basic accounts info including owner_signer if applicable."""
236
239
  accounts = {}
@@ -279,7 +282,9 @@ def _resolve_service_balances(service, chain: str) -> dict:
279
282
  if role == "owner" and stored and hasattr(stored, "signers") and stored.signers:
280
283
  signer_addr = stored.signers[0]
281
284
  s_native = wallet.get_native_balance_eth(signer_addr, chain)
282
- s_olas_wei = wallet.balance_service.get_erc20_balance_wei(signer_addr, "OLAS", chain)
285
+ s_olas_wei = wallet.balance_service.get_erc20_balance_wei(
286
+ signer_addr, "OLAS", chain
287
+ )
283
288
  s_olas = float(s_olas_wei) / 1e18 if s_olas_wei else 0
284
289
  s_stored = wallet.key_storage.find_stored_account(signer_addr)
285
290
  balances["owner_signer"] = {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iwa
3
- Version: 0.0.58
3
+ Version: 0.0.60
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,35 +1,36 @@
1
1
  iwa/__init__.py,sha256=vu12UytYNREtMRvIWp6AfV1GgUe53XWwCMhYyqKAPgo,19
2
2
  iwa/__main__.py,sha256=eJU5Uxeu9Y7shWg5dt5Mcq0pMC4wFVNWjeYGKSf4Apw,88
3
3
  iwa/core/__init__.py,sha256=GJv4LJOXeZ3hgGvbt5I6omkoFkP2A9qhHjpDlOep9ik,24
4
- iwa/core/chainlist.py,sha256=IOnlfRFaPlzdg91HbILynzvRfEJ9afikjFUS06K4rfU,4021
5
- iwa/core/cli.py,sha256=HMp1QapGTFi221MASrDZlcenCD-VgEtO5rdzjH_QzXY,8312
4
+ iwa/core/chainlist.py,sha256=bcbv1P9R-RiCghullse0qVmqkTs1l4_ZOkOHZ0MzjtI,4097
5
+ iwa/core/cli.py,sha256=Qo0SXvgKFOd3Ru-LnX5zEXIaR7r3uwYoqwPhVShEqiQ,8315
6
6
  iwa/core/constants.py,sha256=_CYUVQpR--dRPuxotsmbzQE-22y61tlnjUD7IhlvVVA,997
7
7
  iwa/core/db.py,sha256=WI-mP0tQAmwFPeEi9w7RCa_Mcf_zBfd_7JcbHJwU1aU,10377
8
- iwa/core/ipfs.py,sha256=6tVd15J6VoewRCbI9xr1rN9OfL3vOjI_SGNK4qa_ACk,5618
9
- iwa/core/keys.py,sha256=r1C05wdJPv7Z05COkHTk431Uo0-s4jb66bpE7mIy96w,24713
8
+ iwa/core/http.py,sha256=3OB6j2E2TzhNbKJgpoRPvt20yu5NX_agCssDbxEUm8w,953
9
+ iwa/core/ipfs.py,sha256=xYpcg3Y8k_4FpDiZUQO_wmc8ldybET1ReM6CwrKrbz0,5423
10
+ iwa/core/keys.py,sha256=THDq1W1AALSTY1HULNYDYoPj1V0DbFZzGjhtZtXcrjU,24803
10
11
  iwa/core/mnemonic.py,sha256=LiG1VmpydQoHQ0pHUJ1OIlrWJry47VSMnOqPM_Yk-O8,12930
11
- iwa/core/models.py,sha256=J5oNzKhWew4KA9ofH9sYWkmkonOaU9iYWJRcuoisweg,14544
12
+ iwa/core/models.py,sha256=hSIjwWs7speLDlv4jxAT0Itr02jL_kMb2-yTFnuY6qs,14530
12
13
  iwa/core/monitor.py,sha256=6hQHAdJIsyoOwnZ9KdYDk_k0mclgr94iFk8V6BtatFQ,7957
13
14
  iwa/core/plugins.py,sha256=FLvOG4S397fKi0aTH1fWBEtexn4yvGv_QzGWqFrhSKE,1102
14
- iwa/core/pricing.py,sha256=NsRE_xwo7teBzGrJY5EgsgR9fe3sMPzrhOMq-DUccqE,4752
15
- iwa/core/rpc_monitor.py,sha256=-NHR1Mn2IJKJ9x975NGfsze_shI12yL0OyTPtmjUMKg,1661
15
+ iwa/core/pricing.py,sha256=xMihEHi0Mupu1nO5YwujafWLOZnd50Lj9fYQS_JDWTQ,4236
16
+ iwa/core/rpc_monitor.py,sha256=C6AX5pSs5TEE43u3nVlE9oZ-ISKn5pq1jMQb5xatZ-g,1662
16
17
  iwa/core/secrets.py,sha256=5cPUtNVsAUKakNHFCaPOQ3aygAOs_FemSTNZpljqiRs,3920
17
18
  iwa/core/tables.py,sha256=y7Cg67PAGHYVMVyAjbo_CQ9t2iz7UXE-OTuUHRyFRTo,2021
18
19
  iwa/core/test.py,sha256=gey0dql5eajo1itOhgkSrgfyGWue2eSfpr0xzX3vc38,643
19
20
  iwa/core/types.py,sha256=EfDfIwLajTNK-BP9K17QLOIsGCs8legplKI_bUD_NjM,1992
20
21
  iwa/core/ui.py,sha256=DglmrI7XhUmOpLn9Nog9Cej4r-VT0JGFkuSNBx-XorQ,3131
21
- iwa/core/utils.py,sha256=shJuANkXSWVO3NF49syPA9hCG7H5AzaMJOG8V4fo6IM,4279
22
- iwa/core/wallet.py,sha256=MjjSMfrNAipDGjzyNXa7RCIHljR7XtL1yRL6XcKIf00,13107
22
+ iwa/core/utils.py,sha256=FTYpIdQ1wnugD4lYU4TQ7d7_TlDs4CTUIhEpHGEJph4,4281
23
+ iwa/core/wallet.py,sha256=xSGFOK5Wzh-ctLGhBMK1BySlXN0Ircpztyk1an21QiQ,13129
23
24
  iwa/core/chain/__init__.py,sha256=XJMmn0ed-_aVkY2iEMKpuTxPgIKBd41dexSVmEZTa-o,1604
24
25
  iwa/core/chain/errors.py,sha256=9SEbhxZ-qASPkzt-DoI51qq0GRJVqRgqgL720gO7a64,1275
25
- iwa/core/chain/interface.py,sha256=wrcqRwXtuj_a9MxT9zkatwYEyS1ccmvSumFqbfir9Rw,23593
26
+ iwa/core/chain/interface.py,sha256=ww779Wek8qeIxu5t0v3hcmwXq7dMaxp0TjpW4Eikg8Y,25924
26
27
  iwa/core/chain/manager.py,sha256=cFEzh6pK5OyVhjhpeMAqhc9RnRDQR1DjIGiGKp-FXBI,1159
27
28
  iwa/core/chain/models.py,sha256=WUhAighMKcFdbAUkPU_3dkGbWyAUpRJqXMHLcWFC1xg,5261
28
- iwa/core/chain/rate_limiter.py,sha256=wcVErIpAI4pG9YMsGzAeQEE4mbfh9OhPC3suGkWl6JE,8099
29
+ iwa/core/chain/rate_limiter.py,sha256=Ps1MrR4HHtylxgUAawe6DoC9tuqKagjQdKulqcJD2gs,9093
29
30
  iwa/core/contracts/__init__.py,sha256=P5GFY_pnuI02teqVY2U0t98bn1_SSPAbcAzRMpCdTi4,34
30
- iwa/core/contracts/cache.py,sha256=7wGQgyXAmofvx-irbxSnGgIDzQik6Pcpm7up6wMQcoo,4454
31
- iwa/core/contracts/contract.py,sha256=RJaKh05p1MdgsCd8v799LwW1apkDboRDCu8Kah02760,13254
32
- iwa/core/contracts/decoder.py,sha256=HaPw43ZAGswaiLPasMNU2rXKSvozb5t-O46VzJ-YH-U,5488
31
+ iwa/core/contracts/cache.py,sha256=vN7ArNhNsSDr1rYHDMWsMm6VbSszBt4Xej9MeI-rkgc,4452
32
+ iwa/core/contracts/contract.py,sha256=TLZGF7BtMl2fr92B80Gp3ttnP4hJsdAG-raaFZiNLO8,13255
33
+ iwa/core/contracts/decoder.py,sha256=fe84N4wdVCADIz6ytT6IvC5NS_7uiosaXsMk5vRE414,5630
33
34
  iwa/core/contracts/erc20.py,sha256=VqriOdUXej0ilTgpukpm1FUF_9sSrVMAPuEpIvyZ2SQ,2646
34
35
  iwa/core/contracts/multisend.py,sha256=tSdBCWe7LSdBoKZ7z2QebmRFK4M2ln7H3kmJBeEb4Ho,2431
35
36
  iwa/core/contracts/abis/erc20.json,sha256=vrdExMWcIogg_nO59j1Pmipmpa2Ulj3oCCdcdrrFVCE,16995
@@ -37,21 +38,21 @@ iwa/core/contracts/abis/multisend.json,sha256=BE8JbNQU_m1VsIppNK0GKP1E9R7Aor9YTr
37
38
  iwa/core/contracts/abis/multisend_call_only.json,sha256=lamMZflFtsoBKcG4QgmLWKyTK1-TcIaTM-j3r23EqJU,287
38
39
  iwa/core/services/__init__.py,sha256=ab5pYzmu3LrZLTO5N-plx6Rp4R0hBEnbbzsgz84zWGM,498
39
40
  iwa/core/services/account.py,sha256=0l14qD8_-ZbN_hQUNa7bRZt0tkceHPPc4GHmB8UKqy4,2009
40
- iwa/core/services/balance.py,sha256=m0GqJaBjIdR-aOzpGbh1nF9Xgz0aQWugEzH82DjtLqU,3325
41
+ iwa/core/services/balance.py,sha256=MSCEzPRDPlHIjaWD1A2X2oIuiMz5MFJjD7sSHUxQ8OM,3324
41
42
  iwa/core/services/plugin.py,sha256=GNNlbtELyHl7MNVChrypF76GYphxXduxDog4kx1MLi8,3277
42
- iwa/core/services/safe.py,sha256=pe_gpu-7PgnQUgzIcCrx07d4h6Pmr_txJnqWMH6iubs,15535
43
- iwa/core/services/safe_executor.py,sha256=t2rlq3WwNOtvgu66FnOnoCezsB6xCOhyB7dZWQXpjqc,12885
44
- iwa/core/services/transaction.py,sha256=lvKPkOrN-689iAgDeT3qAocDUfi20KhXS3kEHaZ6pRw,19626
43
+ iwa/core/services/safe.py,sha256=vqvpk7aIqHljaG1zYYpmKdW4mi5OVuoyXcpReISPYM0,15744
44
+ iwa/core/services/safe_executor.py,sha256=e7M4Z0w00W5H88I1Yf2qQGP_orI5FDDVSzgilhJaeQo,13509
45
+ iwa/core/services/transaction.py,sha256=FrGRWn1xo5rbGIr2ToZ2kPzapr3zmWW38oycyB87TK8,19971
45
46
  iwa/core/services/transfer/__init__.py,sha256=ZJfshFxJRsp8rkOqfVvd1cqEzIJ9tqBJh8pc0l90GLk,5576
46
47
  iwa/core/services/transfer/base.py,sha256=sohz-Ss2i-pGYGl4x9bD93cnYKcSvsXaXyvyRawvgQs,9043
47
- iwa/core/services/transfer/erc20.py,sha256=EirjmzZNklJWZs96ZjiuDaRyZG_jh_gb7rxhp3wG9KY,10105
48
+ iwa/core/services/transfer/erc20.py,sha256=e6RD1_QcI_-iJvP85kj7aw4p6NnCPjZcm-QSKi14RRA,10104
48
49
  iwa/core/services/transfer/multisend.py,sha256=MuOTjzUQoYg1eSixXKhJGBmB1c0ymLelvk4puHm_VGE,15194
49
- iwa/core/services/transfer/native.py,sha256=cG1PfLi8WM_kHvyx4XkLDVm-ynMQNfZ-Ghi2m5kIZmE,9899
50
+ iwa/core/services/transfer/native.py,sha256=fZZJURW5kcNPEA_R9c5eG813F-7_odLcvdHLZqlUavQ,9900
50
51
  iwa/core/services/transfer/swap.py,sha256=jsLCj_wc8Q4iWIXplcOIEtAvQnTpgTQF_5wrhQ6GjEk,12306
51
- iwa/core/tests/test_gnosis_fee.py,sha256=4k73GpjVoJGMvmPF-dIhmUsWpPwQ0VaNI-iOCOuAc84,3658
52
- iwa/core/tests/test_ipfs.py,sha256=PKB05dxdnLlMDgQM2JPARRogRJ47KEUH1XgFEOXnQQ4,2773
52
+ iwa/core/tests/test_gnosis_fee.py,sha256=-Qs4yQy8qMrsqWMA5DHYWiF0UEW7PpT3sekJbnKn-uM,3702
53
+ iwa/core/tests/test_ipfs.py,sha256=nhS1ZRAuc9_rtnBd9aJhG7RD5yzA1vWKqcek2Q16pj8,2774
53
54
  iwa/core/tests/test_pricing.py,sha256=B2f8vx_JSdilIMu6cb8TxfVyr6kDLt5wN8ZCPvEAuOY,1876
54
- iwa/core/tests/test_regression_fixes.py,sha256=9q7Tov-L1U3VSQ-xkUlVaLWSVlwgnAukPin0KlkUl4c,4032
55
+ iwa/core/tests/test_regression_fixes.py,sha256=W53R5Gj-gj8lZJwO_PBVNE3h7pWybj0G99oDwJcCl3g,3972
55
56
  iwa/core/tests/test_wallet.py,sha256=N8_gO7KkV5nqk_KcHqW_xOwNNKpDuXHeFgnala3bB84,9361
56
57
  iwa/plugins/__init__.py,sha256=zy-DjOZn8GSgIETN2X_GAb9O6yk71t6ZRzeUgoZ52KA,23
57
58
  iwa/plugins/gnosis/__init__.py,sha256=dpx0mE84eV-g5iZaH5nKivZJnoKWyRFX5rhdjowBwuU,114
@@ -65,19 +66,19 @@ iwa/plugins/gnosis/cow/types.py,sha256=-9VRiFhAkmN1iIJ95Pg7zLFSeXtkkW00sl13usxi3
65
66
  iwa/plugins/gnosis/tests/test_cow.py,sha256=50bj9kZ-PwrZXIdTTTNlien5WdDWHhxI44dcB89jOc8,8809
66
67
  iwa/plugins/gnosis/tests/test_safe.py,sha256=hQHVHBWQhGnuvzvx4U9fOWEwASJWwql42q6cfRcuAls,3218
67
68
  iwa/plugins/olas/__init__.py,sha256=_NhBczzM61fhGYwGhnWfEeL8Jywyy_730GASe2BxzeQ,106
68
- iwa/plugins/olas/constants.py,sha256=iTFoO2QW3KbhL5k5sKsJxxyDytl9wVIb_9hAih55KrE,7728
69
- iwa/plugins/olas/events.py,sha256=SWD3wYdQ-l6dLUJSkfh_WsLmedH4Vsw_EvYXg7QC3yc,5970
70
- iwa/plugins/olas/importer.py,sha256=BQU3ykigPSuYlt61VarjBpP5NEAQSM9NoPqwjyjJgec,41972
69
+ iwa/plugins/olas/constants.py,sha256=BbEDho_TAh10cCGsrlk2vP1OVrS_ZWBE_cAEITd_658,7838
70
+ iwa/plugins/olas/events.py,sha256=HHjYu4pN3tuZATIh8vGWWzDb7z9wuqhsaTqI3_4H0-I,6086
71
+ iwa/plugins/olas/importer.py,sha256=5xTtlQe5hO5bUCOg1sRuFkN2UcohYdJEQwfMm2JckyI,42088
71
72
  iwa/plugins/olas/mech_reference.py,sha256=CaSCpQnQL4F7wOG6Ox6Zdoy-uNEQ78YBwVLILQZKL8Q,5782
72
73
  iwa/plugins/olas/models.py,sha256=uXih8UcmBYj6PlxqP-cnyAiazJezjShjkCaN1Kqlb2I,4921
73
- iwa/plugins/olas/plugin.py,sha256=zOPWyoVkSVh6guJ3TZj5enJFuiIbP3fRM8FkziPB-c0,15606
74
- iwa/plugins/olas/contracts/activity_checker.py,sha256=WXxuzbpXGVqIfEiMPiiqN3Z_UxIY-Lvx0raa1ErBfPA,5323
74
+ iwa/plugins/olas/plugin.py,sha256=kz21CxIGQw3Is6HC2dvKvFRIm9m1FRKHO0YgUuDEplQ,15650
75
+ iwa/plugins/olas/contracts/activity_checker.py,sha256=OXh0SFPGfcpeD665ay-I19LqcIx38qEz8o62dw0A9zE,5361
75
76
  iwa/plugins/olas/contracts/base.py,sha256=y73aQbDq6l4zUpz_eQAg4MsLkTAEqjjupXlcvxjfgCI,240
76
77
  iwa/plugins/olas/contracts/mech.py,sha256=dXYtyORc-oiu9ga5PtTquOFkoakb6BLGKvlUsteygIg,2767
77
78
  iwa/plugins/olas/contracts/mech_marketplace.py,sha256=hMADl5MQGvT2wLRKu4vHGe4RrAZVq8Y2M_EvXWWz528,1554
78
79
  iwa/plugins/olas/contracts/mech_marketplace_v1.py,sha256=ooF5uw1wxwYsoriGUGGxXxmaD8DtWZtK4TJBCUNTGtI,2501
79
80
  iwa/plugins/olas/contracts/service.py,sha256=BDQKeCTCnBNrwKD1a8rrlLytpKG3CAdjr-s0ec-dsFY,8243
80
- iwa/plugins/olas/contracts/staking.py,sha256=TimiHSJy5wAlx35uplyeG7TG6NpxPigkmKcrz_ZBCjY,18487
81
+ iwa/plugins/olas/contracts/staking.py,sha256=kKF4Uc2cFr9_drKG5OzFgzKTdgGyHIM_PUa-L0LX9gU,18486
81
82
  iwa/plugins/olas/contracts/abis/activity_checker.json,sha256=HT0IMbyTLMO71ITBKwoS950rHe772suPP4b8eDAodJ0,2230
82
83
  iwa/plugins/olas/contracts/abis/mech.json,sha256=bMMCXInjE_2PTPnc_sIyS_H8pod5Sm_e-xTbKgZppKc,16369
83
84
  iwa/plugins/olas/contracts/abis/mech_marketplace.json,sha256=KPnF-H_UATb3wdb_7o6ky_hSp5xwgvckD-QqylsWJLg,32468
@@ -92,17 +93,17 @@ iwa/plugins/olas/scripts/test_full_mech_flow.py,sha256=Fqoq5bn7Z_3YyRrnuqNAZy9cw
92
93
  iwa/plugins/olas/scripts/test_simple_lifecycle.py,sha256=8T50tOZx3afeECSfCNAb0rAHNtYOsBaeXlMwKXElCk8,2099
93
94
  iwa/plugins/olas/service_manager/__init__.py,sha256=GXiThMEY3nPgHUl1i-DLrF4h96z9jPxxI8Jepo2E1PM,1926
94
95
  iwa/plugins/olas/service_manager/base.py,sha256=EBPg0ymqgtAb7ZvVSfTt31QYgv_6gp4UAc6je00NLAg,5009
95
- iwa/plugins/olas/service_manager/drain.py,sha256=LCs1emIXxfb8a4w3I8LdFfmwYA61T1EUQ5bTAt3Wc04,12942
96
- iwa/plugins/olas/service_manager/lifecycle.py,sha256=eN0TgS77Qg5fvOSNEztgQ3jazLzR2iHYm3BeNr5B_8U,50593
96
+ iwa/plugins/olas/service_manager/drain.py,sha256=Hoa8rTIDwp9xGf_0O-7Nvn58LMZ_8PTOTr2ETUY5TjY,12920
97
+ iwa/plugins/olas/service_manager/lifecycle.py,sha256=JCLGN7RjJbbPXXHOqvD64OKj2wH2NVh7o3mCBqJQEAQ,50570
97
98
  iwa/plugins/olas/service_manager/mech.py,sha256=NVzVbEmyOe3wK92VEzCCOSuy3HDkEP1MSoVt7Av8Psk,27949
98
- iwa/plugins/olas/service_manager/staking.py,sha256=e6yIsxOq0E-lfStTYp-IkbHChBpbDtQv4mSnniZ_ybQ,29555
99
+ iwa/plugins/olas/service_manager/staking.py,sha256=kT9OOQ4fi3FrIJB2T2gsvmv7DBRD6pDxqcXXh2o6iwc,29600
99
100
  iwa/plugins/olas/tests/conftest.py,sha256=4vM7EI00SrTGyeP0hNzsGSQHEj2-iznVgzlNh2_OGfo,739
100
101
  iwa/plugins/olas/tests/test_importer.py,sha256=i9LKov7kNRECB3hmRnhKBwcfx3uxtjWe4BB77bOOpeo,4282
101
102
  iwa/plugins/olas/tests/test_importer_error_handling.py,sha256=GeXu4Par3_FAUL9hT6Sn5PdRg2_EU2gf3iaL73atoYo,12256
102
103
  iwa/plugins/olas/tests/test_mech_contracts.py,sha256=wvxuigPafF-ySIHVBdWVei3AO418iPh7cSVdAlUGm_s,3566
103
- iwa/plugins/olas/tests/test_olas_archiving.py,sha256=NTeYp07P3uoGDoxK1QA0eluISv2qd5cW_TNzCU_2E30,3305
104
+ iwa/plugins/olas/tests/test_olas_archiving.py,sha256=rwyP-9eZ1cNvvV4h4bBOrs_8qV-du9yt-VNMuH_13nY,3443
104
105
  iwa/plugins/olas/tests/test_olas_contracts.py,sha256=B8X-5l1KfYMoZOiM94_rcNzbILLl78rqt_jhyxzAOqE,10835
105
- iwa/plugins/olas/tests/test_olas_integration.py,sha256=vjL8-RNdxXu6RFR5F1Bn7xqnxnUVWTzl2--Pp7-0r5A,22973
106
+ iwa/plugins/olas/tests/test_olas_integration.py,sha256=LGkdeso5lvi7_0GjlS9EFlSs6PEEn_b5aD2USmperDA,23086
106
107
  iwa/plugins/olas/tests/test_olas_models.py,sha256=5scX-wvRLGH3G44S2okq_tyQ9Rk7Pd0Ak1zNCZ2HtI4,4957
107
108
  iwa/plugins/olas/tests/test_olas_view.py,sha256=2SsQYayeV3rf_mAPVvt4vINcMysAXmICkkQe3MRn4K8,10662
108
109
  iwa/plugins/olas/tests/test_olas_view_actions.py,sha256=jAxr9bjFNAaxGf1btIrxdMaHgJ0PWX9aDwVU-oPGMpk,5109
@@ -110,26 +111,26 @@ iwa/plugins/olas/tests/test_olas_view_modals.py,sha256=8j0PNFjKqFC5V1kBdVFWNLMvq
110
111
  iwa/plugins/olas/tests/test_plugin.py,sha256=RVgU-Cq6t_3mOh90xFAGwlJOV7ZIgp0VNaK5ZAxisAQ,2565
111
112
  iwa/plugins/olas/tests/test_plugin_full.py,sha256=55EBa07JhJLVG3IMi6QKlR_ivWLYCdLQTySP66qbEXo,8584
112
113
  iwa/plugins/olas/tests/test_service_lifecycle.py,sha256=sOCtpz8T9s55AZe9AoqP1h3XrXw5NDSjDqwLgYThvU4,5559
113
- iwa/plugins/olas/tests/test_service_manager.py,sha256=b3PwS1tUnQJgF5DzYBDsZiYruh2QB8jLkXBmruc5czg,40893
114
- iwa/plugins/olas/tests/test_service_manager_errors.py,sha256=XxUXdEqsu7th5BwkAqzuNkdoFeQG-C75zrzxxQm1lZo,8544
115
- iwa/plugins/olas/tests/test_service_manager_flows.py,sha256=M1oDM42m-0JPBrjcp0WsmXgCN7JxBenN_fZqFu1rdR8,20728
114
+ iwa/plugins/olas/tests/test_service_manager.py,sha256=_mFRptssimITHhjvZA5jUPU2bInUIPCKll5wlj9elcA,40905
115
+ iwa/plugins/olas/tests/test_service_manager_errors.py,sha256=-qpLmU4Uiqqtre59L2wXpO4WPMs4ej_K_gAL3naEvRg,8554
116
+ iwa/plugins/olas/tests/test_service_manager_flows.py,sha256=ZSmBJNa18d_MyAaLQRoPpfFYRwzmk9k-5AhSAGd7WeI,20737
116
117
  iwa/plugins/olas/tests/test_service_manager_mech.py,sha256=qG6qu5IPRNypXUsblU2OEkuiuwDJ0TH8RXZbibmTFcQ,4937
117
118
  iwa/plugins/olas/tests/test_service_manager_rewards.py,sha256=jVAe4HSAxDfnq8Ec-JMsvE2E0HYsydO78ITFHnSSka4,11993
118
119
  iwa/plugins/olas/tests/test_service_manager_validation.py,sha256=ajlfH5uc4mAHf8A7GLE5cW7X8utM2vUilM0JdGDdlVg,5382
119
- iwa/plugins/olas/tests/test_service_staking.py,sha256=miNGZZoIrZf0Am-pJ8gTyvVAruL4P7jMvrtFEhG5wxQ,15694
120
+ iwa/plugins/olas/tests/test_service_staking.py,sha256=ETNnWzV52FDhK0mrPb9xl9gSiYRH2EeDVxcaQIV0d5Q,15849
120
121
  iwa/plugins/olas/tests/test_staking_integration.py,sha256=QCBQf6P2ZmmsEGt2k8W2r53lG2aVRuoMJE-aFxVDLss,9701
121
122
  iwa/plugins/olas/tests/test_staking_validation.py,sha256=uug64jFcXYJ3Nw_lNa3O4fnhNr5wAWHHIrchSbR2MVE,4020
122
123
  iwa/plugins/olas/tui/__init__.py,sha256=5ZRsbC7J3z1xfkZRiwr4bLEklf78rNVjdswe2p7SlS8,28
123
124
  iwa/plugins/olas/tui/olas_view.py,sha256=OlhciDK1Ni4BdzggqTzQeYnP2azB-We02hH6jQhbZuU,37388
124
125
  iwa/tools/__init__.py,sha256=jQyuwDQGRigSe7S9JMb4yK3CXPgZFJNffzt6N2v9PU0,21
125
126
  iwa/tools/check_profile.py,sha256=0LAv9wx4wMM610mX88-6tIoDi2I5LDzh0W9nkprt42s,2177
126
- iwa/tools/drain_accounts.py,sha256=8ED4tw2J72BzYysiqF34THGi_F1tAufasjG8fUADdJU,1759
127
+ iwa/tools/drain_accounts.py,sha256=Xd0ephHENms2f5G7IotpFBazPpKrvXoRurctS7fYrc4,1760
127
128
  iwa/tools/list_contracts.py,sha256=c7ugXfblJ47cC2n5ruGzBwN5DYWiZVJqKYqIttc_PMk,5013
128
129
  iwa/tools/release.py,sha256=-Z9GG6Y-K6KG32K0VUf_MruiUdJxG6W7ToOMzhyCH7Y,3963
129
- iwa/tools/reset_env.py,sha256=lHWMUatl4n6KNCluX-egA9uSt0xSH9m48gt4Lz8GW28,3831
130
+ iwa/tools/reset_env.py,sha256=UbstfM9zIVNyH_8Oa3T4rSixQLmueR903pRx_aEu_Pk,3833
130
131
  iwa/tools/reset_tenderly.py,sha256=usKfOLrQvdCzEncueg-Sz3spqX80vHPQmbh2tIygo8o,11295
131
132
  iwa/tools/restore_backup.py,sha256=_LJbmKv9SlekLUQFdjI3aHCvAc6uePobJe3bQEFyatk,2455
132
- iwa/tools/test_chainlist.py,sha256=9J06sTsKgnEcN7WSn-YgJkCHhfbGDdVS-KNMDBhYllA,1143
133
+ iwa/tools/test_chainlist.py,sha256=CtSA1p-lUxhaJFqYL8LN20gyDiFwVgHmdyEbSJSxD0M,1167
133
134
  iwa/tools/wallet_check.py,sha256=IQLgb8oCt4oG6FMEAqzUxM57DLv_UE24dFUSVxtBo_Y,4774
134
135
  iwa/tui/__init__.py,sha256=XYIZNQNy-fZC1NHHM0sd9qUO0vE1slml-cm0CpQ4NLY,27
135
136
  iwa/tui/app.py,sha256=XDQ4nAPGBwhrEmdL_e3V8oYSOho8pY7jsd3C_wk92UU,4163
@@ -138,7 +139,7 @@ iwa/tui/workers.py,sha256=lvzbIS375_H1rj7-9d-w0PKnkDJ4lW_13aWzZRaX9fY,1192
138
139
  iwa/tui/modals/__init__.py,sha256=OyrjWjaPqQAllZcUJ-Ac_e1PtTouJy8m1eGo132p-EA,130
139
140
  iwa/tui/modals/base.py,sha256=q9dEV6We_SPxbMRh711amFDwAOBywD00Qg0jcqvh5LE,12060
140
141
  iwa/tui/screens/__init__.py,sha256=j0brLsuVd9M8hM5LHH05E7manY3ZVj24yf7nFyGryp4,31
141
- iwa/tui/screens/wallets.py,sha256=8ClUpXMGk343WC2YejrXovIEW7zyJYy9XJzbJVx7zDQ,30824
142
+ iwa/tui/screens/wallets.py,sha256=PJWDwXt3LYBaGny1DH0WtvWzMQGGgWR1kUzlEr8dLW8,30802
142
143
  iwa/tui/tests/test_app.py,sha256=F0tJthsyWzwNbHcGtiyDQtKDPn3m9N1qt2vMGiXrQTQ,3868
143
144
  iwa/tui/tests/test_rpc.py,sha256=4m2HC-R5R9kO5pluo2G_CrTBQv63YYrdZNufTjtnGUk,4330
144
145
  iwa/tui/tests/test_wallets_refactor.py,sha256=71G3HLbhTtgDy3ffVbYv0MFYRgdYd-NWGBdvdzW4M9c,998
@@ -156,7 +157,7 @@ iwa/web/routers/olas/__init__.py,sha256=Jo6Dm1e8fHafCD800fbxsxeFz3tvuEEKXEf5-9tj
156
157
  iwa/web/routers/olas/admin.py,sha256=PMRdNelqYgQ1xbqh3floFV5xrVtBRQiwZPd8J9_ffxg,5785
157
158
  iwa/web/routers/olas/funding.py,sha256=f8fADNtbZEBFl-vuVKfas6os38Vot6K5tJBTenZmCD0,4832
158
159
  iwa/web/routers/olas/general.py,sha256=dPsBQppTGoQY1RztliUhseOHOZGeeCR10lhThD9kyXo,803
159
- iwa/web/routers/olas/services.py,sha256=mDQh_Hp118Ek8_WIfhmZA_7HC2slw_aKRUjY6PPx91A,18099
160
+ iwa/web/routers/olas/services.py,sha256=jDbxLUJBN48vs2-fXrIpxhPSM6quqYxggmMOkUVEIaI,18200
160
161
  iwa/web/routers/olas/staking.py,sha256=jktJ2C1Q9X4aC0tWJByN3sHpEXY0EIvr3rr4N0MtXXc,14081
161
162
  iwa/web/static/app.js,sha256=hBjUSivxf5Uyy2H6BR-rfdvF8e7qBoDPK23aY3dagNY,114418
162
163
  iwa/web/static/index.html,sha256=q7s7plnMbN1Nkzr5bRxZgvgOFerUChEGIZW7SpAVtPc,28514
@@ -165,7 +166,7 @@ iwa/web/tests/test_web_endpoints.py,sha256=vA25YghHNB23sbmhD4ciesn_f_okSq0tjlkrS
165
166
  iwa/web/tests/test_web_olas.py,sha256=0CVSsrncOeJ3x0ECV7mVLQV_CXZRrOqGiVjgLIi6hZ8,16308
166
167
  iwa/web/tests/test_web_swap.py,sha256=7A4gBJFL01kIXPtW1E1J17SCsVc_0DmUn-R8kKrnnVA,2974
167
168
  iwa/web/tests/test_web_swap_coverage.py,sha256=zGNrzlhZ_vWDCvWmLcoUwFgqxnrp_ACbo49AtWBS_Kw,5584
168
- iwa-0.0.58.dist-info/licenses/LICENSE,sha256=eIubm_IlBHPYRQlLNZKbBNKhJUUP3JH0A2miZUhAVfI,1078
169
+ iwa-0.0.60.dist-info/licenses/LICENSE,sha256=eIubm_IlBHPYRQlLNZKbBNKhJUUP3JH0A2miZUhAVfI,1078
169
170
  tests/legacy_cow.py,sha256=oOkZvIxL70ReEoD9oHQbOD5GpjIr6AGNHcOCgfPlerU,8389
170
171
  tests/legacy_safe.py,sha256=AssM2g13E74dNGODu_H0Q0y412lgqsrYnEzI97nm_Ts,2972
171
172
  tests/legacy_transaction_retry_logic.py,sha256=D9RqZ7DBu61Xr2djBAodU2p9UE939LL-DnQXswX5iQk,1497
@@ -173,9 +174,9 @@ tests/legacy_tui.py,sha256=qu5-_C0H9dumElLFEWB71ACOgcA6bxbipgmWCBB12DM,15676
173
174
  tests/legacy_wallets_screen.py,sha256=9hZnX-VhKgwH9w8MxbNdboRyNxLDhOakLKJECsw_vhc,19262
174
175
  tests/legacy_web.py,sha256=q2ERIriaDHT3Q8axG2N3ucO7f2VSvV_WkuPR00DVko4,8577
175
176
  tests/test_account_service.py,sha256=g_AIVT2jhlvUtbFTaCd-d15x4CmXJQaV66tlAgnaXwY,3745
176
- tests/test_balance_service.py,sha256=tvvokP24TuYAlikZvOiLjsHCcnRO0Xc5RlRmBqdheug,4981
177
- tests/test_chain.py,sha256=bDV6rL0twKovR722wax8aEzfr3wwcfQbapHJQPmg8kw,13957
178
- tests/test_chain_interface.py,sha256=Wu0q0sREtmYBp7YvWrBIrrSTtqeQj18oJp2VmMUEMec,8312
177
+ tests/test_balance_service.py,sha256=wcuCOVszxPy8nPkldAVcEiygcOK3BuQt797fqAJvbp4,4979
178
+ tests/test_chain.py,sha256=VZoidSojWyt1y4mQdZdoZsjuuDZjLC6neTC-2SF_Q7I,13957
179
+ tests/test_chain_interface.py,sha256=bgqGM8wJGZjc-BOX6i0K4sh06KCJl-6UAvrwl8x24lA,8324
179
180
  tests/test_chain_interface_coverage.py,sha256=fvrVvw8-DMwdsSFKQHUhpbfutrVRxnnTc-tjB7Bb-jo,3327
180
181
  tests/test_cli.py,sha256=Pl4RC2xp1omiJUnL3Dza6pCmIoO29LJ0vGw33_ZpT5c,3980
181
182
  tests/test_contract.py,sha256=tApHAxsfKGawYJWA9PhTNrOZUE0VVAq79ruIe3KxeWY,14412
@@ -193,16 +194,16 @@ tests/test_models.py,sha256=1bEfPiDVgEdtwFEzwecSPAHjCF8kjOPSMeQExJ7eCJ4,7107
193
194
  tests/test_monitor.py,sha256=dRVS6EkTwfvGEOg7t0dVhs6M3oEZExBH7iBZe6hmk4M,7261
194
195
  tests/test_multisend.py,sha256=IvXpwnC5xSDRCyCDGcMdO3L-eQegvdjAzHZB0FoVFUI,2685
195
196
  tests/test_plugin_service.py,sha256=ZEe37kV_sv4Eb04032O1hZIoo9yf5gJo83ks7Grzrng,3767
196
- tests/test_rate_limiter.py,sha256=gC-mVsTCqGbBoUxAllY_WS9kl12rBHQv7MNr1zdUdGQ,7334
197
- tests/test_rate_limiter_retry.py,sha256=JPLc1pXpwUlt2ZytpWnHhTXFLbkQf0v4mi15p5PbdQg,4296
197
+ tests/test_rate_limiter.py,sha256=XDN22HWs85OicBpQ9zgHRnoJ1VMola_AOkobqp83dfs,7444
198
+ tests/test_rate_limiter_retry.py,sha256=Yq7Ik2r8VIYgPdlSN2tYbdA0ngrB37ZPimfkZkh9Cvk,4568
198
199
  tests/test_reset_tenderly.py,sha256=GVoqbDT3n4_GnlKF5Lx-8ew15jT8I2hIPdTulQDb6dI,7215
199
- tests/test_rpc_efficiency.py,sha256=EEcBlbUXEi9JVBorLU7mK7mmK0vcFt53KhefHr1oPQc,3741
200
- tests/test_rpc_rate_limit.py,sha256=CS9cgRqlu2jwfB4M0Nw0VY52k8idhfB3GTkzzuKyhPE,1010
201
- tests/test_rpc_rotation.py,sha256=jTJBAcGSomz3U1OFezaeaals5AUhLya1sJhVjw8ZtVE,12533
200
+ tests/test_rpc_efficiency.py,sha256=mNuCoa5r6lSEyTqcRX98oz-huoKMTUlKM2UcOHlTQ6M,3745
201
+ tests/test_rpc_rate_limit.py,sha256=3P_Nd9voFmz-4r_Et-vw8W-Esbq5elSYmRBSOtJGx1Y,1014
202
+ tests/test_rpc_rotation.py,sha256=a1cFKsf0fo-73_MSDnTuU6Zpv7bJHjrCVu3ANe8PXDU,12541
202
203
  tests/test_rpc_view.py,sha256=sgZ53KEHl8VGb7WKYa0VI7Cdxbf8JH1SdroHYbWHjfQ,2031
203
204
  tests/test_safe_coverage.py,sha256=KBxKz64XkK8CgN0N0LTNVKakf8Wg8EpghcBlLmDFmLs,6119
204
- tests/test_safe_executor.py,sha256=5XZ_TmafRjWr_r2XSMrBetIqxEsEbdZf-yt7_c9q_Vc,14226
205
- tests/test_safe_integration.py,sha256=HrSKA04WYElbuR3oDTvbjuDh0fAGYN9C7NYr_BKKO_g,5319
205
+ tests/test_safe_executor.py,sha256=V3ovBRY1lOuW5rm8rpm5Ns7jb-rgmHKHpz9pMTqz6c4,14448
206
+ tests/test_safe_integration.py,sha256=WWAKDio3N-CFyr5RRvphbOPdu3TI9WSM8IesfbFbvWQ,5363
206
207
  tests/test_safe_service.py,sha256=5ULlj0fPZRwg-4fCBJplhm4Msr_Beof7W-Zf_JljZc8,5782
207
208
  tests/test_service_manager_integration.py,sha256=I_BLUzEKrVTyg_8jqsUK0oFD3aQVPCRJ7z0gY8P-j04,2354
208
209
  tests/test_service_manager_structure.py,sha256=zK506ucCXCBHcjPYKrKEuK1bgq0xsbawyL8Y-wahXf8,868
@@ -221,8 +222,8 @@ tests/test_utils.py,sha256=vkP49rYNI8BRzLpWR3WnKdDr8upeZjZcs7Rx0pjbQMo,1292
221
222
  tests/test_workers.py,sha256=MInwdkFY5LdmFB3o1odIaSD7AQZb3263hNafO1De5PE,2793
222
223
  tools/create_and_stake_service.py,sha256=1xwy_bJQI1j9yIQ968Oc9Db_F6mk1659LuuZntTASDE,3742
223
224
  tools/verify_drain.py,sha256=PkMjblyOOAuQge88FwfEzRtCYeEtJxXhPBmtQYCoQ-8,6743
224
- iwa-0.0.58.dist-info/METADATA,sha256=Gl_qD0GNnfLLm-j4s4FTihXqwZbNB1yQ4aiclOfCQ8c,7337
225
- iwa-0.0.58.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
226
- iwa-0.0.58.dist-info/entry_points.txt,sha256=nwB6kscrfA7M00pYmL2j-sBH6eF6h2ga9IK1BZxdiyQ,241
227
- iwa-0.0.58.dist-info/top_level.txt,sha256=kedS9cRUbm4JE2wYeabIXilhHjN8KCw0IGbqqqsw0Bs,16
228
- iwa-0.0.58.dist-info/RECORD,,
225
+ iwa-0.0.60.dist-info/METADATA,sha256=BpkWW6DmPQhaX7fFo7LtVfNYg3thQWSMiMmR_yGApCc,7337
226
+ iwa-0.0.60.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
227
+ iwa-0.0.60.dist-info/entry_points.txt,sha256=nwB6kscrfA7M00pYmL2j-sBH6eF6h2ga9IK1BZxdiyQ,241
228
+ iwa-0.0.60.dist-info/top_level.txt,sha256=kedS9cRUbm4JE2wYeabIXilhHjN8KCw0IGbqqqsw0Bs,16
229
+ iwa-0.0.60.dist-info/RECORD,,
@@ -131,8 +131,6 @@ def test_get_erc20_balance_wei_account_not_found(
131
131
  assert result is None
132
132
 
133
133
 
134
-
135
-
136
134
  def test_balance_service_with_wallet(mock_account_service):
137
135
  """Test BalanceService initialization with Wallet (has key_storage attr)."""
138
136
  from iwa.core.services.balance import BalanceService
tests/test_chain.py CHANGED
@@ -155,7 +155,7 @@ def test_calculate_transaction_params(mock_web3):
155
155
  ci.web3.eth.gas_price = 20
156
156
 
157
157
  # Mock for EIP-1559 check (disable it for simple test)
158
- ci.web3.eth.get_block.return_value = {} # No baseFeePerGas
158
+ ci.web3.eth.get_block.return_value = {} # No baseFeePerGas
159
159
 
160
160
  with patch.object(ci, "estimate_gas", return_value=1000):
161
161
  params = ci.calculate_transaction_params(MagicMock(), {"from": "0xSender"})
@@ -326,7 +326,6 @@ def test_chain_interface_with_real_chains():
326
326
  # --- Negative Tests ---
327
327
 
328
328
 
329
-
330
329
  def test_get_token_symbol_fallback_on_error(mock_web3):
331
330
  """Test get_token_symbol returns truncated address on error."""
332
331
  chain = MagicMock(spec=SupportedChain)
@@ -201,10 +201,10 @@ def test_is_tenderly_property():
201
201
 
202
202
 
203
203
  def test_reset_rpc_failure_counts(mock_chain_interface):
204
- """Test resetting failure counts."""
204
+ """Test resetting backoff tracking."""
205
205
  interface, _ = mock_chain_interface
206
- interface._rpc_failure_counts = {0: 5, 1: 3}
206
+ interface._rpc_backoff_until = {0: 99999.0, 1: 99999.0}
207
207
 
208
208
  interface.reset_rpc_failure_counts()
209
209
 
210
- assert interface._rpc_failure_counts == {}
210
+ assert interface._rpc_backoff_until == {}