iwa 0.0.20__py3-none-any.whl → 0.0.21__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.
@@ -48,10 +48,17 @@ class ChainInterface:
48
48
  self._rotation_lock = threading.Lock()
49
49
  self._init_web3()
50
50
 
51
+ @property
52
+ def current_rpc(self) -> str:
53
+ """Get the current active RPC URL."""
54
+ if not self.chain.rpcs:
55
+ return ""
56
+ return self.chain.rpcs[self._current_rpc_index]
57
+
51
58
  @property
52
59
  def is_tenderly(self) -> bool:
53
60
  """Check if connected to Tenderly vNet."""
54
- rpc = self.chain.rpc or ""
61
+ rpc = self.current_rpc or ""
55
62
  return "tenderly" in rpc.lower() or "virtual" in rpc.lower()
56
63
 
57
64
  def init_block_tracking(self):
iwa/core/monitor.py CHANGED
@@ -24,7 +24,7 @@ class EventMonitor:
24
24
  self.chain_interface = ChainInterfaces().get(chain_name)
25
25
  self.web3 = self.chain_interface.web3
26
26
  self.running = False
27
- if self.chain_interface.chain.rpc:
27
+ if self.chain_interface.current_rpc:
28
28
  try:
29
29
  self.last_checked_block = self.web3.eth.block_number
30
30
  except Exception:
@@ -39,7 +39,7 @@ class EventMonitor:
39
39
  f"Starting EventMonitor for {len(self.addresses)} addresses on {self.chain_interface.chain.name}"
40
40
  )
41
41
 
42
- if not self.chain_interface.chain.rpc:
42
+ if not self.chain_interface.current_rpc:
43
43
  logger.error(
44
44
  f"Cannot start EventMonitor: No RPC URL found for chain {self.chain_interface.chain.name}"
45
45
  )
iwa/core/services/safe.py CHANGED
@@ -102,7 +102,7 @@ class SafeService:
102
102
 
103
103
  # Use ChainInterface which has proper RPC rotation and parsing
104
104
  chain_interface = ChainInterfaces().get(chain_name)
105
- return EthereumClient(chain_interface.chain.rpc)
105
+ return EthereumClient(chain_interface.current_rpc)
106
106
 
107
107
  def _deploy_safe_contract(
108
108
  self,
@@ -254,7 +254,7 @@ class SafeService:
254
254
 
255
255
  # Use ChainInterface which has proper RPC rotation and parsing
256
256
  chain_interface = ChainInterfaces().get(chain)
257
- ethereum_client = EthereumClient(chain_interface.chain.rpc)
257
+ ethereum_client = EthereumClient(chain_interface.current_rpc)
258
258
 
259
259
  code = ethereum_client.w3.eth.get_code(account.address)
260
260
 
@@ -30,7 +30,7 @@ class SafeMultisig:
30
30
  from iwa.core.chain import ChainInterfaces
31
31
 
32
32
  chain_interface = ChainInterfaces().get(chain_name.lower())
33
- ethereum_client = EthereumClient(chain_interface.chain.rpc)
33
+ ethereum_client = EthereumClient(chain_interface.current_rpc)
34
34
  self.multisig = Safe(safe_account.address, ethereum_client)
35
35
  self.ethereum_client = ethereum_client
36
36
 
@@ -42,7 +42,7 @@ def test_init(safe_account, mock_settings, mock_safe_eth):
42
42
  """Test initialization."""
43
43
  with patch("iwa.core.chain.ChainInterfaces") as mock_ci_cls:
44
44
  mock_ci = mock_ci_cls.return_value
45
- mock_ci.get.return_value.chain.rpc = "http://rpc"
45
+ mock_ci.get.return_value.current_rpc = "http://rpc"
46
46
  ms = SafeMultisig(safe_account, "gnosis")
47
47
  assert ms.multisig is not None
48
48
  mock_safe_eth[0].assert_called_with("http://rpc") # EthereumClient init
@@ -73,12 +73,12 @@ class OlasPlugin(Plugin):
73
73
 
74
74
  try:
75
75
  chain_interface = ChainInterfaces().get(chain_name)
76
- if not chain_interface.chain.rpcs:
76
+ if not chain_interface.current_rpc:
77
77
  return None, None
78
78
  except ValueError:
79
79
  return None, None # Chain not supported/configured
80
80
 
81
- ethereum_client = EthereumClient(chain_interface.chain.rpc)
81
+ ethereum_client = EthereumClient(chain_interface.current_rpc)
82
82
  safe = Safe(safe_address, ethereum_client)
83
83
  owners = safe.retrieve_owners()
84
84
  return owners, True
@@ -105,7 +105,7 @@ def test_get_safe_signers_edge_cases(plugin):
105
105
  # 1. No RPC configured
106
106
  with patch("iwa.core.chain.ChainInterfaces") as mock_ci_cls:
107
107
  mock_ci = mock_ci_cls.return_value
108
- mock_ci.get.return_value.chain.rpcs = []
108
+ mock_ci.get.return_value.current_rpc = ""
109
109
  signers, exists = plugin._get_safe_signers("0x1", "gnosis")
110
110
  assert signers is None
111
111
  assert exists is None
@@ -113,8 +113,7 @@ def test_get_safe_signers_edge_cases(plugin):
113
113
  # 2. Safe doesn't exist (raises exception)
114
114
  with patch("iwa.core.chain.ChainInterfaces") as mock_ci_cls:
115
115
  mock_ci = mock_ci_cls.return_value
116
- mock_ci.get.return_value.chain.rpcs = ["http://rpc"]
117
- mock_ci.get.return_value.chain.rpc = "http://rpc"
116
+ mock_ci.get.return_value.current_rpc = "http://rpc"
118
117
  with patch("safe_eth.eth.EthereumClient"), patch("safe_eth.safe.Safe") as mock_safe_cls:
119
118
  mock_safe = mock_safe_cls.return_value
120
119
  mock_safe.retrieve_owners.side_effect = Exception("Generic error")
@@ -126,8 +125,7 @@ def test_get_safe_signers_edge_cases(plugin):
126
125
  # 3. Success path
127
126
  with patch("iwa.core.chain.ChainInterfaces") as mock_ci_cls:
128
127
  mock_ci = mock_ci_cls.return_value
129
- mock_ci.get.return_value.chain.rpcs = ["http://rpc"]
130
- mock_ci.get.return_value.chain.rpc = "http://rpc"
128
+ mock_ci.get.return_value.current_rpc = "http://rpc"
131
129
  with patch("safe_eth.eth.EthereumClient"), patch("safe_eth.safe.Safe") as mock_safe_cls:
132
130
  mock_safe = mock_safe_cls.return_value
133
131
  mock_safe.retrieve_owners.return_value = ["0xAgent"]
iwa/tui/rpc.py CHANGED
@@ -38,7 +38,7 @@ class RPCView(Static):
38
38
  results.append((chain_name, "N/A", "Not Configured", "-"))
39
39
  continue
40
40
 
41
- rpc_url = interface.chain.rpc
41
+ rpc_url = interface.current_rpc
42
42
  if not rpc_url:
43
43
  results.append((chain_name, "None", "Missing URL", "-"))
44
44
  continue
@@ -381,7 +381,7 @@ class WalletsScreen(VerticalScroll):
381
381
  self.stop_monitor()
382
382
  addresses = [acc.address for acc in self.wallet.key_storage.accounts.values()]
383
383
  for chain_name, interface in ChainInterfaces().items():
384
- if interface.chain.rpc:
384
+ if interface.current_rpc:
385
385
  monitor = EventMonitor(addresses, self.monitor_callback, chain_name)
386
386
 
387
387
  # Worker wrapper
@@ -497,7 +497,7 @@ class WalletsScreen(VerticalScroll):
497
497
  """Handle blockchain selection changes."""
498
498
  if event.value and event.value != self.active_chain:
499
499
  interface = ChainInterfaces().get(event.value)
500
- if not interface or not interface.chain.rpc:
500
+ if not interface or not interface.current_rpc:
501
501
  self.notify(f"No RPC for {event.value}", severity="warning")
502
502
  event.control.value = self.active_chain
503
503
  return
iwa/tui/tests/test_rpc.py CHANGED
@@ -71,7 +71,7 @@ def test_check_rpcs_success(rpc_view, mock_chain_interfaces):
71
71
  """Test check_rpcs with successful connections."""
72
72
  # Setup mock chain interfaces
73
73
  mock_gnosis = MagicMock()
74
- mock_gnosis.chain.rpc = "http://gnosis"
74
+ mock_gnosis.current_rpc = "http://gnosis"
75
75
  mock_gnosis.web3.is_connected.return_value = True
76
76
 
77
77
  mock_chain_interfaces.get.side_effect = lambda name: mock_gnosis if name == "gnosis" else None
@@ -99,7 +99,7 @@ def test_check_rpcs_success(rpc_view, mock_chain_interfaces):
99
99
  def test_check_rpcs_error(rpc_view, mock_chain_interfaces):
100
100
  """Test check_rpcs with connection error."""
101
101
  mock_eth = MagicMock()
102
- mock_eth.chain.rpc = "http://eth"
102
+ mock_eth.current_rpc = "http://eth"
103
103
  mock_eth.web3.is_connected.side_effect = Exception("Connection fail")
104
104
 
105
105
  mock_chain_interfaces.get.side_effect = lambda name: mock_eth if name == "ethereum" else None
iwa/tui/widgets/base.py CHANGED
@@ -39,7 +39,7 @@ class ChainSelector(Horizontal):
39
39
 
40
40
  for name in chain_names:
41
41
  interface = ChainInterfaces().get(name)
42
- if interface.chain.rpc:
42
+ if interface.current_rpc:
43
43
  label = name.title()
44
44
  chain_options.append((label, name))
45
45
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iwa
3
- Version: 0.0.20
3
+ Version: 0.0.21
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
@@ -9,7 +9,7 @@ iwa/core/ipfs.py,sha256=aHjq_pflgwDVHl8g5EMQv0q2RAmMs-a0pOTVsj_L5xE,4980
9
9
  iwa/core/keys.py,sha256=ckacVZxm_02V9hlmHIxz-CkxjXdGHqvGGAXfO6EeHCw,22365
10
10
  iwa/core/mnemonic.py,sha256=LiG1VmpydQoHQ0pHUJ1OIlrWJry47VSMnOqPM_Yk-O8,12930
11
11
  iwa/core/models.py,sha256=kBQ0cBe6uFmL2QfW7mjKiMFeZxhT-FRN-RyK3Ko0vE8,12849
12
- iwa/core/monitor.py,sha256=OmhKVMkfhvtxig3wDUL6iGwBIClTx0YUqMncCao4SqI,7953
12
+ iwa/core/monitor.py,sha256=6hQHAdJIsyoOwnZ9KdYDk_k0mclgr94iFk8V6BtatFQ,7957
13
13
  iwa/core/plugins.py,sha256=FLvOG4S397fKi0aTH1fWBEtexn4yvGv_QzGWqFrhSKE,1102
14
14
  iwa/core/pricing.py,sha256=uENpqVMmuogZHctsLuEsU7WJ1cLSNAI-rZTtbpTDjeQ,4048
15
15
  iwa/core/rpc_monitor.py,sha256=-NHR1Mn2IJKJ9x975NGfsze_shI12yL0OyTPtmjUMKg,1661
@@ -22,7 +22,7 @@ iwa/core/utils.py,sha256=shJuANkXSWVO3NF49syPA9hCG7H5AzaMJOG8V4fo6IM,4279
22
22
  iwa/core/wallet.py,sha256=sNFK-_0y-EgeLpNHt9o5tCqTM0oVqJra-eAWjR7AgyU,13038
23
23
  iwa/core/chain/__init__.py,sha256=XJMmn0ed-_aVkY2iEMKpuTxPgIKBd41dexSVmEZTa-o,1604
24
24
  iwa/core/chain/errors.py,sha256=9SEbhxZ-qASPkzt-DoI51qq0GRJVqRgqgL720gO7a64,1275
25
- iwa/core/chain/interface.py,sha256=uUIUo9Q6Sr4h9AjqFe6WqQzdbMs9VkJcUj0mgd6lfx4,18602
25
+ iwa/core/chain/interface.py,sha256=04eGlhonHAvxFnqLoHRWUaQBzys6jW6BppUuNNjlnSk,18809
26
26
  iwa/core/chain/manager.py,sha256=cFEzh6pK5OyVhjhpeMAqhc9RnRDQR1DjIGiGKp-FXBI,1159
27
27
  iwa/core/chain/models.py,sha256=0OgBo08FZEQisOdd00YUMXSAV7BC0CcWpqJ2y-gs0cI,4863
28
28
  iwa/core/chain/rate_limiter.py,sha256=gU7TmWdH9D_wbXKT1X7mIgoIUCWVuebgvRhxiyLGAmI,6613
@@ -38,7 +38,7 @@ iwa/core/services/__init__.py,sha256=ab5pYzmu3LrZLTO5N-plx6Rp4R0hBEnbbzsgz84zWGM
38
38
  iwa/core/services/account.py,sha256=01MoEvl6FJlMnMB4fGwsPtnGa4kgA-d5hJeKu_ACg7Y,1982
39
39
  iwa/core/services/balance.py,sha256=mPE12CuOFfCaJXaQXWOcQM1O03ZF3ghpy_-oOjNk_GE,4104
40
40
  iwa/core/services/plugin.py,sha256=GNNlbtELyHl7MNVChrypF76GYphxXduxDog4kx1MLi8,3277
41
- iwa/core/services/safe.py,sha256=ytNJMndXrzTMHwhDZKYLIh4Q0UTWDBgQgTpof-UqIkA,14827
41
+ iwa/core/services/safe.py,sha256=ZmgVwbQhYlH5r3qhlY5uP8nCPtkkvV3sNnYG7_UCWUQ,14831
42
42
  iwa/core/services/transaction.py,sha256=DiEVwE1L_UpCyC5UmknaRwRYRxsDlAkwMQRN64NiwIQ,15162
43
43
  iwa/core/services/transfer/__init__.py,sha256=ZJfshFxJRsp8rkOqfVvd1cqEzIJ9tqBJh8pc0l90GLk,5576
44
44
  iwa/core/services/transfer/base.py,sha256=sohz-Ss2i-pGYGl4x9bD93cnYKcSvsXaXyvyRawvgQs,9043
@@ -51,20 +51,20 @@ iwa/plugins/__init__.py,sha256=zy-DjOZn8GSgIETN2X_GAb9O6yk71t6ZRzeUgoZ52KA,23
51
51
  iwa/plugins/gnosis/__init__.py,sha256=dpx0mE84eV-g5iZaH5nKivZJnoKWyRFX5rhdjowBwuU,114
52
52
  iwa/plugins/gnosis/cow_utils.py,sha256=iSvbfgTr2bCqRsUznKCWqmoTnyuX-WZX4oh0E-l3XBU,2263
53
53
  iwa/plugins/gnosis/plugin.py,sha256=AgkgOGYfnrcjWrPUiAvySMj6ITnss0SFXiEi6Z6fnMs,1885
54
- iwa/plugins/gnosis/safe.py,sha256=aDcBz50Bliur90sVqxgjGoQJyCqsfZlm0PDsmWIDBak,5517
54
+ iwa/plugins/gnosis/safe.py,sha256=ye5GQhzKALPNiyJhr7lyrhDgdrDyIj_h3TN2QWI4Xds,5519
55
55
  iwa/plugins/gnosis/cow/__init__.py,sha256=lZN5QpIYWL67rE8r7z7zS9dlr8OqFrYeD9T4-RwUghU,224
56
56
  iwa/plugins/gnosis/cow/quotes.py,sha256=u2xFKgL7QTKqCkSPMv1RHaXvZ6WzID4haaZDMVS42Bs,5177
57
57
  iwa/plugins/gnosis/cow/swap.py,sha256=XZdvJbTbh54hxer7cKkum7lNQ-03gddMK95K3MenaFE,15209
58
58
  iwa/plugins/gnosis/cow/types.py,sha256=-9VRiFhAkmN1iIJ95Pg7zLFSeXtkkW00sl13usxi3o8,470
59
59
  iwa/plugins/gnosis/tests/test_cow.py,sha256=iVy5ockMIcPZWsX4WGXU91DhBsYEZ5NOxtFzAQ2sK3o,8440
60
- iwa/plugins/gnosis/tests/test_safe.py,sha256=pw1zrYvAiVtmPIU5k7BtOQpDNAQTSTrLIaeljCjSahc,3216
60
+ iwa/plugins/gnosis/tests/test_safe.py,sha256=hQHVHBWQhGnuvzvx4U9fOWEwASJWwql42q6cfRcuAls,3218
61
61
  iwa/plugins/olas/__init__.py,sha256=_NhBczzM61fhGYwGhnWfEeL8Jywyy_730GASe2BxzeQ,106
62
62
  iwa/plugins/olas/constants.py,sha256=iTFoO2QW3KbhL5k5sKsJxxyDytl9wVIb_9hAih55KrE,7728
63
63
  iwa/plugins/olas/events.py,sha256=SWD3wYdQ-l6dLUJSkfh_WsLmedH4Vsw_EvYXg7QC3yc,5970
64
64
  iwa/plugins/olas/importer.py,sha256=f8KlZ9dGcNbpg8uoTYbO9sDvbluZoslhpWFLqPjPnLA,26717
65
65
  iwa/plugins/olas/mech_reference.py,sha256=CaSCpQnQL4F7wOG6Ox6Zdoy-uNEQ78YBwVLILQZKL8Q,5782
66
66
  iwa/plugins/olas/models.py,sha256=xC5hYakX53pBT6zZteM9cyiC7t6XRLLpobjQmDYueOo,3520
67
- iwa/plugins/olas/plugin.py,sha256=S_vnvZ02VdVWD7N5kp7u5JIRQ2JLtfwGDZ7OHkAN0M8,9390
67
+ iwa/plugins/olas/plugin.py,sha256=h7Wjw-ozalu9ocZbFcQGEw_TM8fgW6Qyh_DY1VOGeLY,9393
68
68
  iwa/plugins/olas/contracts/activity_checker.py,sha256=WXxuzbpXGVqIfEiMPiiqN3Z_UxIY-Lvx0raa1ErBfPA,5323
69
69
  iwa/plugins/olas/contracts/base.py,sha256=y73aQbDq6l4zUpz_eQAg4MsLkTAEqjjupXlcvxjfgCI,240
70
70
  iwa/plugins/olas/contracts/mech.py,sha256=dXYtyORc-oiu9ga5PtTquOFkoakb6BLGKvlUsteygIg,2767
@@ -101,7 +101,7 @@ iwa/plugins/olas/tests/test_olas_view.py,sha256=kh3crsriyoRiZC6l8vzGllocvQnYmqzi
101
101
  iwa/plugins/olas/tests/test_olas_view_actions.py,sha256=jAxr9bjFNAaxGf1btIrxdMaHgJ0PWX9aDwVU-oPGMpk,5109
102
102
  iwa/plugins/olas/tests/test_olas_view_modals.py,sha256=8j0PNFjKqFC5V1kBdVFWNLMvqGt49H6fLSYGxn02c8o,5562
103
103
  iwa/plugins/olas/tests/test_plugin.py,sha256=RVgU-Cq6t_3mOh90xFAGwlJOV7ZIgp0VNaK5ZAxisAQ,2565
104
- iwa/plugins/olas/tests/test_plugin_full.py,sha256=xevLYmdU4zd5FyEEEn9gvzGimPztmt6vymybeZHXnq8,8507
104
+ iwa/plugins/olas/tests/test_plugin_full.py,sha256=HdEJf_beqH18TaA-PFFMsKFA4ycXY-bz_kbaHQknaic,8390
105
105
  iwa/plugins/olas/tests/test_service_lifecycle.py,sha256=sOCtpz8T9s55AZe9AoqP1h3XrXw5NDSjDqwLgYThvU4,5559
106
106
  iwa/plugins/olas/tests/test_service_manager.py,sha256=rS2m0A26apc-o4HsfP5oXmVcmZSR5e874bjhQKZRaSg,40650
107
107
  iwa/plugins/olas/tests/test_service_manager_errors.py,sha256=udlAsQj_t1F5TwVQuWhroF6jDJ4RmGEXaxPh87tMsuA,8538
@@ -125,18 +125,18 @@ iwa/tools/test_chainlist.py,sha256=9J06sTsKgnEcN7WSn-YgJkCHhfbGDdVS-KNMDBhYllA,1
125
125
  iwa/tools/wallet_check.py,sha256=IQLgb8oCt4oG6FMEAqzUxM57DLv_UE24dFUSVxtBo_Y,4774
126
126
  iwa/tui/__init__.py,sha256=XYIZNQNy-fZC1NHHM0sd9qUO0vE1slml-cm0CpQ4NLY,27
127
127
  iwa/tui/app.py,sha256=XDQ4nAPGBwhrEmdL_e3V8oYSOho8pY7jsd3C_wk92UU,4163
128
- iwa/tui/rpc.py,sha256=4q2zcBu7XXDU9c66UYtfbXiNdQyS_uLa9xOs3UmPOO0,2131
128
+ iwa/tui/rpc.py,sha256=iEp7aQ2MZxeXWqvxYud_5Y5oX2NoweMd1DQQlGYBGv8,2133
129
129
  iwa/tui/workers.py,sha256=lvzbIS375_H1rj7-9d-w0PKnkDJ4lW_13aWzZRaX9fY,1192
130
130
  iwa/tui/modals/__init__.py,sha256=OyrjWjaPqQAllZcUJ-Ac_e1PtTouJy8m1eGo132p-EA,130
131
131
  iwa/tui/modals/base.py,sha256=q9dEV6We_SPxbMRh711amFDwAOBywD00Qg0jcqvh5LE,12060
132
132
  iwa/tui/screens/__init__.py,sha256=j0brLsuVd9M8hM5LHH05E7manY3ZVj24yf7nFyGryp4,31
133
- iwa/tui/screens/wallets.py,sha256=F_1feKuml3rUUHSfdT2XmgBIViGHNrdQeUcgpFUb0Ys,30821
133
+ iwa/tui/screens/wallets.py,sha256=U6IUbV_7ByAyUi3aBVdFr3A1QlGzNORRE4uOHBQXQB0,30825
134
134
  iwa/tui/tests/test_app.py,sha256=F0tJthsyWzwNbHcGtiyDQtKDPn3m9N1qt2vMGiXrQTQ,3868
135
- iwa/tui/tests/test_rpc.py,sha256=chH9b6GunfymaYdqz3GVQ_LQui4zihyBkrCG6xOUY1Q,4326
135
+ iwa/tui/tests/test_rpc.py,sha256=4m2HC-R5R9kO5pluo2G_CrTBQv63YYrdZNufTjtnGUk,4330
136
136
  iwa/tui/tests/test_wallets_refactor.py,sha256=71G3HLbhTtgDy3ffVbYv0MFYRgdYd-NWGBdvdzW4M9c,998
137
137
  iwa/tui/tests/test_widgets.py,sha256=C9UgIGeWRaQ459JygFEQx-7hOi9mWrSUDDIMZH1ge50,3994
138
138
  iwa/tui/widgets/__init__.py,sha256=UzD6nJbwv9hOtkWl9I7faXm1a-rcu4xFRxrf4KBwwY4,161
139
- iwa/tui/widgets/base.py,sha256=G844GU61qSS6AgY5NxmOVHTghbgHlyTfo8hhE2VUrqQ,3379
139
+ iwa/tui/widgets/base.py,sha256=Z8FigMhsfD76PkFVERqMaotd-xwXfuFZm_8TmCMOsl4,3381
140
140
  iwa/web/dependencies.py,sha256=0_dAJlRh6gKrUDRPKUe92eshFsg572yx_H0lQgSqGDA,2103
141
141
  iwa/web/models.py,sha256=MSD9WPy_Nz_amWgoo2KSDTn4ZLv_AV0o0amuNtSf-68,3035
142
142
  iwa/web/server.py,sha256=4ZLVFEKoGs_NoCcXMeyYzDNdxUXazjwHQaX7CR1pwHE,5239
@@ -157,7 +157,7 @@ iwa/web/tests/test_web_endpoints.py,sha256=C264MH-CTyDW4GLUrTXBgLJKUk4-89pFAScBd
157
157
  iwa/web/tests/test_web_olas.py,sha256=0CVSsrncOeJ3x0ECV7mVLQV_CXZRrOqGiVjgLIi6hZ8,16308
158
158
  iwa/web/tests/test_web_swap.py,sha256=7A4gBJFL01kIXPtW1E1J17SCsVc_0DmUn-R8kKrnnVA,2974
159
159
  iwa/web/tests/test_web_swap_coverage.py,sha256=zGNrzlhZ_vWDCvWmLcoUwFgqxnrp_ACbo49AtWBS_Kw,5584
160
- iwa-0.0.20.dist-info/licenses/LICENSE,sha256=eIubm_IlBHPYRQlLNZKbBNKhJUUP3JH0A2miZUhAVfI,1078
160
+ iwa-0.0.21.dist-info/licenses/LICENSE,sha256=eIubm_IlBHPYRQlLNZKbBNKhJUUP3JH0A2miZUhAVfI,1078
161
161
  tests/legacy_cow.py,sha256=oOkZvIxL70ReEoD9oHQbOD5GpjIr6AGNHcOCgfPlerU,8389
162
162
  tests/legacy_safe.py,sha256=AssM2g13E74dNGODu_H0Q0y412lgqsrYnEzI97nm_Ts,2972
163
163
  tests/legacy_transaction_retry_logic.py,sha256=D9RqZ7DBu61Xr2djBAodU2p9UE939LL-DnQXswX5iQk,1497
@@ -182,7 +182,7 @@ tests/test_migration.py,sha256=fYoxzI3KqGh0cPV0bFcbvGrAnKcNlvnwjggG_uD0QGo,1789
182
182
  tests/test_mnemonic.py,sha256=BFtXMMg17uHWh_H-ZwAOn0qzgbUCqL8BRLkgRjzfzxo,7379
183
183
  tests/test_modals.py,sha256=R_lXa7wnnGewAP5jJvVZDyQyY1FbE98IeO2B7y3x86c,2945
184
184
  tests/test_models.py,sha256=1bEfPiDVgEdtwFEzwecSPAHjCF8kjOPSMeQExJ7eCJ4,7107
185
- tests/test_monitor.py,sha256=P_hF61VMlCX2rh9yu_a6aKhlgXOAcCMGOZRntjcqrd0,7255
185
+ tests/test_monitor.py,sha256=dRVS6EkTwfvGEOg7t0dVhs6M3oEZExBH7iBZe6hmk4M,7261
186
186
  tests/test_multisend.py,sha256=IvXpwnC5xSDRCyCDGcMdO3L-eQegvdjAzHZB0FoVFUI,2685
187
187
  tests/test_plugin_service.py,sha256=ZEe37kV_sv4Eb04032O1hZIoo9yf5gJo83ks7Grzrng,3767
188
188
  tests/test_pricing.py,sha256=ptu_2Csc6d64bIzMMw3TheJge2Kfn05Gs-twz_KmBzg,5276
@@ -210,8 +210,8 @@ tests/test_utils.py,sha256=vkP49rYNI8BRzLpWR3WnKdDr8upeZjZcs7Rx0pjbQMo,1292
210
210
  tests/test_workers.py,sha256=MInwdkFY5LdmFB3o1odIaSD7AQZb3263hNafO1De5PE,2793
211
211
  tools/create_and_stake_service.py,sha256=1xwy_bJQI1j9yIQ968Oc9Db_F6mk1659LuuZntTASDE,3742
212
212
  tools/verify_drain.py,sha256=PkMjblyOOAuQge88FwfEzRtCYeEtJxXhPBmtQYCoQ-8,6743
213
- iwa-0.0.20.dist-info/METADATA,sha256=_ERQ1f_nDtVFZClmaQ4vW6o6Yso2JjqumBbS56JJCCs,7295
214
- iwa-0.0.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
215
- iwa-0.0.20.dist-info/entry_points.txt,sha256=nwB6kscrfA7M00pYmL2j-sBH6eF6h2ga9IK1BZxdiyQ,241
216
- iwa-0.0.20.dist-info/top_level.txt,sha256=kedS9cRUbm4JE2wYeabIXilhHjN8KCw0IGbqqqsw0Bs,16
217
- iwa-0.0.20.dist-info/RECORD,,
213
+ iwa-0.0.21.dist-info/METADATA,sha256=G_17iq72W9SNwyz3rr7rrvVgRA_iKLlVgxUnbrXdLNk,7295
214
+ iwa-0.0.21.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
215
+ iwa-0.0.21.dist-info/entry_points.txt,sha256=nwB6kscrfA7M00pYmL2j-sBH6eF6h2ga9IK1BZxdiyQ,241
216
+ iwa-0.0.21.dist-info/top_level.txt,sha256=kedS9cRUbm4JE2wYeabIXilhHjN8KCw0IGbqqqsw0Bs,16
217
+ iwa-0.0.21.dist-info/RECORD,,
tests/test_monitor.py CHANGED
@@ -12,7 +12,7 @@ def mock_chain_interfaces():
12
12
  instance = mock.return_value
13
13
  gnosis_interface = MagicMock()
14
14
  gnosis_interface.chain.name = "Gnosis"
15
- gnosis_interface.chain.rpc = "https://rpc"
15
+ gnosis_interface.current_rpc = "https://rpc"
16
16
  gnosis_interface.web3 = MagicMock()
17
17
  instance.get.return_value = gnosis_interface
18
18
  yield instance
@@ -46,7 +46,7 @@ def test_monitor_init_rpc_fail(mock_chain_interfaces, mock_callback):
46
46
 
47
47
  def test_monitor_init_no_rpc(mock_chain_interfaces, mock_callback):
48
48
  chain_interface = mock_chain_interfaces.get.return_value
49
- chain_interface.chain.rpc = ""
49
+ chain_interface.current_rpc = ""
50
50
 
51
51
  monitor = EventMonitor(["0x1234567890123456789012345678901234567890"], mock_callback)
52
52
  assert monitor.last_checked_block == 0
@@ -54,7 +54,7 @@ def test_monitor_init_no_rpc(mock_chain_interfaces, mock_callback):
54
54
 
55
55
  def test_start_no_rpc(mock_chain_interfaces, mock_callback):
56
56
  chain_interface = mock_chain_interfaces.get.return_value
57
- chain_interface.chain.rpc = ""
57
+ chain_interface.current_rpc = ""
58
58
 
59
59
  monitor = EventMonitor(["0x1234567890123456789012345678901234567890"], mock_callback)
60
60
 
File without changes