iwa 0.0.33__py3-none-any.whl → 0.0.59__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.
- iwa/core/chain/interface.py +130 -11
- iwa/core/chain/models.py +15 -3
- iwa/core/chain/rate_limiter.py +48 -12
- iwa/core/chainlist.py +15 -10
- iwa/core/cli.py +4 -1
- iwa/core/contracts/cache.py +1 -1
- iwa/core/contracts/contract.py +1 -0
- iwa/core/contracts/decoder.py +10 -4
- iwa/core/http.py +31 -0
- iwa/core/ipfs.py +21 -7
- iwa/core/keys.py +65 -15
- iwa/core/models.py +58 -13
- iwa/core/pricing.py +10 -6
- iwa/core/rpc_monitor.py +1 -0
- iwa/core/secrets.py +27 -0
- iwa/core/services/account.py +1 -1
- iwa/core/services/balance.py +0 -23
- iwa/core/services/safe.py +72 -45
- iwa/core/services/safe_executor.py +350 -0
- iwa/core/services/transaction.py +43 -13
- iwa/core/services/transfer/erc20.py +14 -3
- iwa/core/services/transfer/native.py +14 -31
- iwa/core/services/transfer/swap.py +1 -0
- iwa/core/tests/test_gnosis_fee.py +91 -0
- iwa/core/tests/test_ipfs.py +85 -0
- iwa/core/tests/test_pricing.py +65 -0
- iwa/core/tests/test_regression_fixes.py +97 -0
- iwa/core/utils.py +2 -0
- iwa/core/wallet.py +6 -4
- iwa/plugins/gnosis/cow/quotes.py +2 -2
- iwa/plugins/gnosis/cow/swap.py +18 -32
- iwa/plugins/gnosis/tests/test_cow.py +19 -10
- iwa/plugins/olas/constants.py +15 -5
- iwa/plugins/olas/contracts/activity_checker.py +3 -3
- iwa/plugins/olas/contracts/staking.py +0 -1
- iwa/plugins/olas/events.py +15 -13
- iwa/plugins/olas/importer.py +29 -25
- iwa/plugins/olas/models.py +0 -3
- iwa/plugins/olas/plugin.py +16 -14
- iwa/plugins/olas/service_manager/drain.py +16 -9
- iwa/plugins/olas/service_manager/lifecycle.py +23 -12
- iwa/plugins/olas/service_manager/staking.py +15 -10
- iwa/plugins/olas/tests/test_importer_error_handling.py +13 -0
- iwa/plugins/olas/tests/test_olas_archiving.py +83 -0
- iwa/plugins/olas/tests/test_olas_integration.py +49 -29
- iwa/plugins/olas/tests/test_olas_view.py +5 -1
- iwa/plugins/olas/tests/test_service_manager.py +15 -17
- iwa/plugins/olas/tests/test_service_manager_errors.py +6 -5
- iwa/plugins/olas/tests/test_service_manager_flows.py +7 -6
- iwa/plugins/olas/tests/test_service_manager_rewards.py +5 -1
- iwa/plugins/olas/tests/test_service_staking.py +64 -38
- iwa/tools/drain_accounts.py +61 -0
- iwa/tools/list_contracts.py +2 -0
- iwa/tools/reset_env.py +2 -1
- iwa/tools/test_chainlist.py +5 -1
- iwa/tui/screens/wallets.py +2 -4
- iwa/web/routers/accounts.py +1 -1
- iwa/web/routers/olas/services.py +10 -5
- iwa/web/static/app.js +21 -9
- iwa/web/static/style.css +4 -0
- iwa/web/tests/test_web_endpoints.py +2 -2
- {iwa-0.0.33.dist-info → iwa-0.0.59.dist-info}/METADATA +6 -3
- {iwa-0.0.33.dist-info → iwa-0.0.59.dist-info}/RECORD +82 -71
- {iwa-0.0.33.dist-info → iwa-0.0.59.dist-info}/WHEEL +1 -1
- tests/test_balance_service.py +0 -43
- tests/test_chain.py +13 -5
- tests/test_cli.py +2 -2
- tests/test_drain_coverage.py +12 -6
- tests/test_keys.py +23 -23
- tests/test_rate_limiter.py +2 -2
- tests/test_rate_limiter_retry.py +103 -0
- tests/test_rpc_efficiency.py +4 -1
- tests/test_rpc_rate_limit.py +34 -0
- tests/test_rpc_rotation.py +59 -11
- tests/test_safe_coverage.py +37 -23
- tests/test_safe_executor.py +361 -0
- tests/test_safe_integration.py +153 -0
- tests/test_safe_service.py +1 -1
- tests/test_transfer_swap_unit.py +5 -1
- tests/test_pricing.py +0 -160
- {iwa-0.0.33.dist-info → iwa-0.0.59.dist-info}/entry_points.txt +0 -0
- {iwa-0.0.33.dist-info → iwa-0.0.59.dist-info}/licenses/LICENSE +0 -0
- {iwa-0.0.33.dist-info → iwa-0.0.59.dist-info}/top_level.txt +0 -0
iwa/web/static/app.js
CHANGED
|
@@ -2096,13 +2096,24 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
2096
2096
|
<span class="value ${
|
|
2097
2097
|
isLoading
|
|
2098
2098
|
? ""
|
|
2099
|
-
:
|
|
2100
|
-
? "
|
|
2101
|
-
:
|
|
2102
|
-
? "
|
|
2103
|
-
: "
|
|
2099
|
+
: staking.staking_state === "EVICTED"
|
|
2100
|
+
? "evicted"
|
|
2101
|
+
: isStaked
|
|
2102
|
+
? "staked"
|
|
2103
|
+
: service.state === "DEPLOYED"
|
|
2104
|
+
? "deployed"
|
|
2105
|
+
: "not-staked"
|
|
2104
2106
|
}">
|
|
2105
|
-
${
|
|
2107
|
+
${
|
|
2108
|
+
isLoading
|
|
2109
|
+
? '<span class="cell-spinner"></span>'
|
|
2110
|
+
: (service.state || "UNKNOWN") +
|
|
2111
|
+
(staking.staking_state
|
|
2112
|
+
? `, ${staking.staking_state.replace(/_/g, " ")}`
|
|
2113
|
+
: isStaked
|
|
2114
|
+
? ", STAKED"
|
|
2115
|
+
: ", NOT STAKED")
|
|
2116
|
+
}
|
|
2106
2117
|
</span>
|
|
2107
2118
|
</div>
|
|
2108
2119
|
<div class="staking-row">
|
|
@@ -2638,11 +2649,11 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
2638
2649
|
|
|
2639
2650
|
// Show select, hide spinner
|
|
2640
2651
|
select.style.display = "";
|
|
2641
|
-
spinnerDiv.
|
|
2652
|
+
spinnerDiv.classList.add("hidden");
|
|
2642
2653
|
} catch (err) {
|
|
2643
2654
|
select.innerHTML = '<option value="">Error loading contracts</option>';
|
|
2644
2655
|
select.style.display = "";
|
|
2645
|
-
spinnerDiv.
|
|
2656
|
+
spinnerDiv.classList.add("hidden");
|
|
2646
2657
|
confirmBtn.disabled = false;
|
|
2647
2658
|
}
|
|
2648
2659
|
};
|
|
@@ -2699,7 +2710,8 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
2699
2710
|
|
|
2700
2711
|
// Load staking contracts
|
|
2701
2712
|
contractSelect.style.display = "none";
|
|
2702
|
-
spinnerDiv.
|
|
2713
|
+
spinnerDiv.classList.remove("hidden");
|
|
2714
|
+
spinnerDiv.style.display = "block"; // Ensure display block for visibility
|
|
2703
2715
|
spinnerDiv.innerHTML =
|
|
2704
2716
|
'<span class="loading-spinner"></span> Loading contracts...';
|
|
2705
2717
|
submitBtn.disabled = true;
|
iwa/web/static/style.css
CHANGED
|
@@ -284,7 +284,7 @@ def test_safe_create_request_validation(client):
|
|
|
284
284
|
|
|
285
285
|
def test_create_eoa_success(client):
|
|
286
286
|
"""Cover create_eoa success (lines 308-315)."""
|
|
287
|
-
wallet.key_storage.
|
|
287
|
+
wallet.key_storage.generate_new_account = MagicMock()
|
|
288
288
|
|
|
289
289
|
response = client.post("/api/accounts/eoa", json={"tag": "my_wallet"})
|
|
290
290
|
assert response.status_code == 200
|
|
@@ -293,7 +293,7 @@ def test_create_eoa_success(client):
|
|
|
293
293
|
|
|
294
294
|
def test_create_eoa_error(client):
|
|
295
295
|
"""Cover create_eoa error (lines 314-315)."""
|
|
296
|
-
wallet.key_storage.
|
|
296
|
+
wallet.key_storage.generate_new_account = MagicMock(side_effect=Exception("Tag exists"))
|
|
297
297
|
|
|
298
298
|
response = client.post("/api/accounts/eoa", json={"tag": "existing"})
|
|
299
299
|
assert response.status_code == 400
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iwa
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.59
|
|
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
|
|
@@ -17,6 +17,7 @@ Requires-Dist: tomli-w>=1.2.0
|
|
|
17
17
|
Requires-Dist: typer>=0.19.2
|
|
18
18
|
Requires-Dist: web3>=7.13.0
|
|
19
19
|
Requires-Dist: pyyaml<7.0.0,>=6.0.3
|
|
20
|
+
Requires-Dist: ruamel.yaml>=0.18.0
|
|
20
21
|
Requires-Dist: safe-eth-py>=7.14.0
|
|
21
22
|
Requires-Dist: twine>=6.2.0
|
|
22
23
|
Requires-Dist: cowdao-cowpy>=1.0.1
|
|
@@ -82,7 +83,7 @@ iwa/
|
|
|
82
83
|
├── core/ # Core wallet functionality
|
|
83
84
|
│ ├── keys.py # KeyStorage - Encrypted key management
|
|
84
85
|
│ ├── wallet.py # Wallet - High-level interface
|
|
85
|
-
│ ├── chain
|
|
86
|
+
│ ├── chain/ # Blockchain interface with rate limiting
|
|
86
87
|
│ ├── services/ # Service layer (accounts, balances, transactions)
|
|
87
88
|
│ └── contracts/ # Contract abstractions (ERC20, Safe)
|
|
88
89
|
├── plugins/ # Protocol integrations
|
|
@@ -134,6 +135,9 @@ GNOSIS_RPC=https://rpc.gnosis.io,https://gnosis.drpc.org
|
|
|
134
135
|
ETHEREUM_RPC=https://mainnet.infura.io/v3/YOUR_KEY
|
|
135
136
|
BASE_RPC=https://mainnet.base.org
|
|
136
137
|
|
|
138
|
+
# Testing mode (default: true uses Tenderly test RPCs)
|
|
139
|
+
TESTING=false
|
|
140
|
+
|
|
137
141
|
# Optional
|
|
138
142
|
GNOSISSCAN_API_KEY=your_api_key
|
|
139
143
|
COINGECKO_API_KEY=your_api_key
|
|
@@ -150,7 +154,6 @@ just web
|
|
|
150
154
|
|
|
151
155
|
# Use CLI
|
|
152
156
|
iwa wallet list --chain gnosis
|
|
153
|
-
iwa wallet balance <address> --chain gnosis
|
|
154
157
|
```
|
|
155
158
|
|
|
156
159
|
### Running Tests
|
|
@@ -1,52 +1,58 @@
|
|
|
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=
|
|
5
|
-
iwa/core/cli.py,sha256=
|
|
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/
|
|
9
|
-
iwa/core/
|
|
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=
|
|
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=
|
|
15
|
-
iwa/core/rpc_monitor.py,sha256
|
|
16
|
-
iwa/core/secrets.py,sha256=
|
|
15
|
+
iwa/core/pricing.py,sha256=xMihEHi0Mupu1nO5YwujafWLOZnd50Lj9fYQS_JDWTQ,4236
|
|
16
|
+
iwa/core/rpc_monitor.py,sha256=C6AX5pSs5TEE43u3nVlE9oZ-ISKn5pq1jMQb5xatZ-g,1662
|
|
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=
|
|
22
|
-
iwa/core/wallet.py,sha256=
|
|
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=
|
|
26
|
+
iwa/core/chain/interface.py,sha256=FNb_M1Hl1FlgyC3FUPKH91RW7tF-wKJXQP4iOI14vGg,23798
|
|
26
27
|
iwa/core/chain/manager.py,sha256=cFEzh6pK5OyVhjhpeMAqhc9RnRDQR1DjIGiGKp-FXBI,1159
|
|
27
|
-
iwa/core/chain/models.py,sha256=
|
|
28
|
-
iwa/core/chain/rate_limiter.py,sha256=
|
|
28
|
+
iwa/core/chain/models.py,sha256=WUhAighMKcFdbAUkPU_3dkGbWyAUpRJqXMHLcWFC1xg,5261
|
|
29
|
+
iwa/core/chain/rate_limiter.py,sha256=6XnaB6i3Tvf-6YD4L-YBeJnKjAIuAxBGDvTmm1dQDTM,7924
|
|
29
30
|
iwa/core/contracts/__init__.py,sha256=P5GFY_pnuI02teqVY2U0t98bn1_SSPAbcAzRMpCdTi4,34
|
|
30
|
-
iwa/core/contracts/cache.py,sha256=
|
|
31
|
-
iwa/core/contracts/contract.py,sha256=
|
|
32
|
-
iwa/core/contracts/decoder.py,sha256=
|
|
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
|
|
36
37
|
iwa/core/contracts/abis/multisend.json,sha256=BE8JbNQU_m1VsIppNK0GKP1E9R7Aor9YTrCAwsC0pNQ,396
|
|
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
|
-
iwa/core/services/account.py,sha256=
|
|
40
|
-
iwa/core/services/balance.py,sha256=
|
|
40
|
+
iwa/core/services/account.py,sha256=0l14qD8_-ZbN_hQUNa7bRZt0tkceHPPc4GHmB8UKqy4,2009
|
|
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=
|
|
43
|
-
iwa/core/services/
|
|
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
|
|
44
46
|
iwa/core/services/transfer/__init__.py,sha256=ZJfshFxJRsp8rkOqfVvd1cqEzIJ9tqBJh8pc0l90GLk,5576
|
|
45
47
|
iwa/core/services/transfer/base.py,sha256=sohz-Ss2i-pGYGl4x9bD93cnYKcSvsXaXyvyRawvgQs,9043
|
|
46
|
-
iwa/core/services/transfer/erc20.py,sha256=
|
|
48
|
+
iwa/core/services/transfer/erc20.py,sha256=e6RD1_QcI_-iJvP85kj7aw4p6NnCPjZcm-QSKi14RRA,10104
|
|
47
49
|
iwa/core/services/transfer/multisend.py,sha256=MuOTjzUQoYg1eSixXKhJGBmB1c0ymLelvk4puHm_VGE,15194
|
|
48
|
-
iwa/core/services/transfer/native.py,sha256=
|
|
49
|
-
iwa/core/services/transfer/swap.py,sha256=
|
|
50
|
+
iwa/core/services/transfer/native.py,sha256=fZZJURW5kcNPEA_R9c5eG813F-7_odLcvdHLZqlUavQ,9900
|
|
51
|
+
iwa/core/services/transfer/swap.py,sha256=jsLCj_wc8Q4iWIXplcOIEtAvQnTpgTQF_5wrhQ6GjEk,12306
|
|
52
|
+
iwa/core/tests/test_gnosis_fee.py,sha256=-Qs4yQy8qMrsqWMA5DHYWiF0UEW7PpT3sekJbnKn-uM,3702
|
|
53
|
+
iwa/core/tests/test_ipfs.py,sha256=nhS1ZRAuc9_rtnBd9aJhG7RD5yzA1vWKqcek2Q16pj8,2774
|
|
54
|
+
iwa/core/tests/test_pricing.py,sha256=B2f8vx_JSdilIMu6cb8TxfVyr6kDLt5wN8ZCPvEAuOY,1876
|
|
55
|
+
iwa/core/tests/test_regression_fixes.py,sha256=W53R5Gj-gj8lZJwO_PBVNE3h7pWybj0G99oDwJcCl3g,3972
|
|
50
56
|
iwa/core/tests/test_wallet.py,sha256=N8_gO7KkV5nqk_KcHqW_xOwNNKpDuXHeFgnala3bB84,9361
|
|
51
57
|
iwa/plugins/__init__.py,sha256=zy-DjOZn8GSgIETN2X_GAb9O6yk71t6ZRzeUgoZ52KA,23
|
|
52
58
|
iwa/plugins/gnosis/__init__.py,sha256=dpx0mE84eV-g5iZaH5nKivZJnoKWyRFX5rhdjowBwuU,114
|
|
@@ -54,25 +60,25 @@ iwa/plugins/gnosis/cow_utils.py,sha256=iSvbfgTr2bCqRsUznKCWqmoTnyuX-WZX4oh0E-l3X
|
|
|
54
60
|
iwa/plugins/gnosis/plugin.py,sha256=AgkgOGYfnrcjWrPUiAvySMj6ITnss0SFXiEi6Z6fnMs,1885
|
|
55
61
|
iwa/plugins/gnosis/safe.py,sha256=ye5GQhzKALPNiyJhr7lyrhDgdrDyIj_h3TN2QWI4Xds,5519
|
|
56
62
|
iwa/plugins/gnosis/cow/__init__.py,sha256=lZN5QpIYWL67rE8r7z7zS9dlr8OqFrYeD9T4-RwUghU,224
|
|
57
|
-
iwa/plugins/gnosis/cow/quotes.py,sha256=
|
|
58
|
-
iwa/plugins/gnosis/cow/swap.py,sha256=
|
|
63
|
+
iwa/plugins/gnosis/cow/quotes.py,sha256=2emu4St016Gf7Nn5P2XW5CcSNxprKoVecdZQ016RpcY,5177
|
|
64
|
+
iwa/plugins/gnosis/cow/swap.py,sha256=XgeMnTDnCiTXVlrrh2pXk4qmjJnFxIVnhZsa1K82uDQ,14729
|
|
59
65
|
iwa/plugins/gnosis/cow/types.py,sha256=-9VRiFhAkmN1iIJ95Pg7zLFSeXtkkW00sl13usxi3o8,470
|
|
60
|
-
iwa/plugins/gnosis/tests/test_cow.py,sha256=
|
|
66
|
+
iwa/plugins/gnosis/tests/test_cow.py,sha256=50bj9kZ-PwrZXIdTTTNlien5WdDWHhxI44dcB89jOc8,8809
|
|
61
67
|
iwa/plugins/gnosis/tests/test_safe.py,sha256=hQHVHBWQhGnuvzvx4U9fOWEwASJWwql42q6cfRcuAls,3218
|
|
62
68
|
iwa/plugins/olas/__init__.py,sha256=_NhBczzM61fhGYwGhnWfEeL8Jywyy_730GASe2BxzeQ,106
|
|
63
|
-
iwa/plugins/olas/constants.py,sha256=
|
|
64
|
-
iwa/plugins/olas/events.py,sha256=
|
|
65
|
-
iwa/plugins/olas/importer.py,sha256=
|
|
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
|
|
66
72
|
iwa/plugins/olas/mech_reference.py,sha256=CaSCpQnQL4F7wOG6Ox6Zdoy-uNEQ78YBwVLILQZKL8Q,5782
|
|
67
|
-
iwa/plugins/olas/models.py,sha256=
|
|
68
|
-
iwa/plugins/olas/plugin.py,sha256=
|
|
69
|
-
iwa/plugins/olas/contracts/activity_checker.py,sha256=
|
|
73
|
+
iwa/plugins/olas/models.py,sha256=uXih8UcmBYj6PlxqP-cnyAiazJezjShjkCaN1Kqlb2I,4921
|
|
74
|
+
iwa/plugins/olas/plugin.py,sha256=kz21CxIGQw3Is6HC2dvKvFRIm9m1FRKHO0YgUuDEplQ,15650
|
|
75
|
+
iwa/plugins/olas/contracts/activity_checker.py,sha256=OXh0SFPGfcpeD665ay-I19LqcIx38qEz8o62dw0A9zE,5361
|
|
70
76
|
iwa/plugins/olas/contracts/base.py,sha256=y73aQbDq6l4zUpz_eQAg4MsLkTAEqjjupXlcvxjfgCI,240
|
|
71
77
|
iwa/plugins/olas/contracts/mech.py,sha256=dXYtyORc-oiu9ga5PtTquOFkoakb6BLGKvlUsteygIg,2767
|
|
72
78
|
iwa/plugins/olas/contracts/mech_marketplace.py,sha256=hMADl5MQGvT2wLRKu4vHGe4RrAZVq8Y2M_EvXWWz528,1554
|
|
73
79
|
iwa/plugins/olas/contracts/mech_marketplace_v1.py,sha256=ooF5uw1wxwYsoriGUGGxXxmaD8DtWZtK4TJBCUNTGtI,2501
|
|
74
80
|
iwa/plugins/olas/contracts/service.py,sha256=BDQKeCTCnBNrwKD1a8rrlLytpKG3CAdjr-s0ec-dsFY,8243
|
|
75
|
-
iwa/plugins/olas/contracts/staking.py,sha256=
|
|
81
|
+
iwa/plugins/olas/contracts/staking.py,sha256=kKF4Uc2cFr9_drKG5OzFgzKTdgGyHIM_PUa-L0LX9gU,18486
|
|
76
82
|
iwa/plugins/olas/contracts/abis/activity_checker.json,sha256=HT0IMbyTLMO71ITBKwoS950rHe772suPP4b8eDAodJ0,2230
|
|
77
83
|
iwa/plugins/olas/contracts/abis/mech.json,sha256=bMMCXInjE_2PTPnc_sIyS_H8pod5Sm_e-xTbKgZppKc,16369
|
|
78
84
|
iwa/plugins/olas/contracts/abis/mech_marketplace.json,sha256=KPnF-H_UATb3wdb_7o6ky_hSp5xwgvckD-QqylsWJLg,32468
|
|
@@ -87,42 +93,44 @@ iwa/plugins/olas/scripts/test_full_mech_flow.py,sha256=Fqoq5bn7Z_3YyRrnuqNAZy9cw
|
|
|
87
93
|
iwa/plugins/olas/scripts/test_simple_lifecycle.py,sha256=8T50tOZx3afeECSfCNAb0rAHNtYOsBaeXlMwKXElCk8,2099
|
|
88
94
|
iwa/plugins/olas/service_manager/__init__.py,sha256=GXiThMEY3nPgHUl1i-DLrF4h96z9jPxxI8Jepo2E1PM,1926
|
|
89
95
|
iwa/plugins/olas/service_manager/base.py,sha256=EBPg0ymqgtAb7ZvVSfTt31QYgv_6gp4UAc6je00NLAg,5009
|
|
90
|
-
iwa/plugins/olas/service_manager/drain.py,sha256=
|
|
91
|
-
iwa/plugins/olas/service_manager/lifecycle.py,sha256=
|
|
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
|
|
92
98
|
iwa/plugins/olas/service_manager/mech.py,sha256=NVzVbEmyOe3wK92VEzCCOSuy3HDkEP1MSoVt7Av8Psk,27949
|
|
93
|
-
iwa/plugins/olas/service_manager/staking.py,sha256=
|
|
99
|
+
iwa/plugins/olas/service_manager/staking.py,sha256=kT9OOQ4fi3FrIJB2T2gsvmv7DBRD6pDxqcXXh2o6iwc,29600
|
|
94
100
|
iwa/plugins/olas/tests/conftest.py,sha256=4vM7EI00SrTGyeP0hNzsGSQHEj2-iznVgzlNh2_OGfo,739
|
|
95
101
|
iwa/plugins/olas/tests/test_importer.py,sha256=i9LKov7kNRECB3hmRnhKBwcfx3uxtjWe4BB77bOOpeo,4282
|
|
96
|
-
iwa/plugins/olas/tests/test_importer_error_handling.py,sha256=
|
|
102
|
+
iwa/plugins/olas/tests/test_importer_error_handling.py,sha256=GeXu4Par3_FAUL9hT6Sn5PdRg2_EU2gf3iaL73atoYo,12256
|
|
97
103
|
iwa/plugins/olas/tests/test_mech_contracts.py,sha256=wvxuigPafF-ySIHVBdWVei3AO418iPh7cSVdAlUGm_s,3566
|
|
104
|
+
iwa/plugins/olas/tests/test_olas_archiving.py,sha256=rwyP-9eZ1cNvvV4h4bBOrs_8qV-du9yt-VNMuH_13nY,3443
|
|
98
105
|
iwa/plugins/olas/tests/test_olas_contracts.py,sha256=B8X-5l1KfYMoZOiM94_rcNzbILLl78rqt_jhyxzAOqE,10835
|
|
99
|
-
iwa/plugins/olas/tests/test_olas_integration.py,sha256=
|
|
106
|
+
iwa/plugins/olas/tests/test_olas_integration.py,sha256=LGkdeso5lvi7_0GjlS9EFlSs6PEEn_b5aD2USmperDA,23086
|
|
100
107
|
iwa/plugins/olas/tests/test_olas_models.py,sha256=5scX-wvRLGH3G44S2okq_tyQ9Rk7Pd0Ak1zNCZ2HtI4,4957
|
|
101
|
-
iwa/plugins/olas/tests/test_olas_view.py,sha256=
|
|
108
|
+
iwa/plugins/olas/tests/test_olas_view.py,sha256=2SsQYayeV3rf_mAPVvt4vINcMysAXmICkkQe3MRn4K8,10662
|
|
102
109
|
iwa/plugins/olas/tests/test_olas_view_actions.py,sha256=jAxr9bjFNAaxGf1btIrxdMaHgJ0PWX9aDwVU-oPGMpk,5109
|
|
103
110
|
iwa/plugins/olas/tests/test_olas_view_modals.py,sha256=8j0PNFjKqFC5V1kBdVFWNLMvqGt49H6fLSYGxn02c8o,5562
|
|
104
111
|
iwa/plugins/olas/tests/test_plugin.py,sha256=RVgU-Cq6t_3mOh90xFAGwlJOV7ZIgp0VNaK5ZAxisAQ,2565
|
|
105
112
|
iwa/plugins/olas/tests/test_plugin_full.py,sha256=55EBa07JhJLVG3IMi6QKlR_ivWLYCdLQTySP66qbEXo,8584
|
|
106
113
|
iwa/plugins/olas/tests/test_service_lifecycle.py,sha256=sOCtpz8T9s55AZe9AoqP1h3XrXw5NDSjDqwLgYThvU4,5559
|
|
107
|
-
iwa/plugins/olas/tests/test_service_manager.py,sha256=
|
|
108
|
-
iwa/plugins/olas/tests/test_service_manager_errors.py,sha256
|
|
109
|
-
iwa/plugins/olas/tests/test_service_manager_flows.py,sha256=
|
|
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
|
|
110
117
|
iwa/plugins/olas/tests/test_service_manager_mech.py,sha256=qG6qu5IPRNypXUsblU2OEkuiuwDJ0TH8RXZbibmTFcQ,4937
|
|
111
|
-
iwa/plugins/olas/tests/test_service_manager_rewards.py,sha256=
|
|
118
|
+
iwa/plugins/olas/tests/test_service_manager_rewards.py,sha256=jVAe4HSAxDfnq8Ec-JMsvE2E0HYsydO78ITFHnSSka4,11993
|
|
112
119
|
iwa/plugins/olas/tests/test_service_manager_validation.py,sha256=ajlfH5uc4mAHf8A7GLE5cW7X8utM2vUilM0JdGDdlVg,5382
|
|
113
|
-
iwa/plugins/olas/tests/test_service_staking.py,sha256=
|
|
120
|
+
iwa/plugins/olas/tests/test_service_staking.py,sha256=ETNnWzV52FDhK0mrPb9xl9gSiYRH2EeDVxcaQIV0d5Q,15849
|
|
114
121
|
iwa/plugins/olas/tests/test_staking_integration.py,sha256=QCBQf6P2ZmmsEGt2k8W2r53lG2aVRuoMJE-aFxVDLss,9701
|
|
115
122
|
iwa/plugins/olas/tests/test_staking_validation.py,sha256=uug64jFcXYJ3Nw_lNa3O4fnhNr5wAWHHIrchSbR2MVE,4020
|
|
116
123
|
iwa/plugins/olas/tui/__init__.py,sha256=5ZRsbC7J3z1xfkZRiwr4bLEklf78rNVjdswe2p7SlS8,28
|
|
117
124
|
iwa/plugins/olas/tui/olas_view.py,sha256=OlhciDK1Ni4BdzggqTzQeYnP2azB-We02hH6jQhbZuU,37388
|
|
118
125
|
iwa/tools/__init__.py,sha256=jQyuwDQGRigSe7S9JMb4yK3CXPgZFJNffzt6N2v9PU0,21
|
|
119
126
|
iwa/tools/check_profile.py,sha256=0LAv9wx4wMM610mX88-6tIoDi2I5LDzh0W9nkprt42s,2177
|
|
120
|
-
iwa/tools/
|
|
127
|
+
iwa/tools/drain_accounts.py,sha256=Xd0ephHENms2f5G7IotpFBazPpKrvXoRurctS7fYrc4,1760
|
|
128
|
+
iwa/tools/list_contracts.py,sha256=c7ugXfblJ47cC2n5ruGzBwN5DYWiZVJqKYqIttc_PMk,5013
|
|
121
129
|
iwa/tools/release.py,sha256=-Z9GG6Y-K6KG32K0VUf_MruiUdJxG6W7ToOMzhyCH7Y,3963
|
|
122
|
-
iwa/tools/reset_env.py,sha256=
|
|
130
|
+
iwa/tools/reset_env.py,sha256=UbstfM9zIVNyH_8Oa3T4rSixQLmueR903pRx_aEu_Pk,3833
|
|
123
131
|
iwa/tools/reset_tenderly.py,sha256=usKfOLrQvdCzEncueg-Sz3spqX80vHPQmbh2tIygo8o,11295
|
|
124
132
|
iwa/tools/restore_backup.py,sha256=_LJbmKv9SlekLUQFdjI3aHCvAc6uePobJe3bQEFyatk,2455
|
|
125
|
-
iwa/tools/test_chainlist.py,sha256=
|
|
133
|
+
iwa/tools/test_chainlist.py,sha256=CtSA1p-lUxhaJFqYL8LN20gyDiFwVgHmdyEbSJSxD0M,1167
|
|
126
134
|
iwa/tools/wallet_check.py,sha256=IQLgb8oCt4oG6FMEAqzUxM57DLv_UE24dFUSVxtBo_Y,4774
|
|
127
135
|
iwa/tui/__init__.py,sha256=XYIZNQNy-fZC1NHHM0sd9qUO0vE1slml-cm0CpQ4NLY,27
|
|
128
136
|
iwa/tui/app.py,sha256=XDQ4nAPGBwhrEmdL_e3V8oYSOho8pY7jsd3C_wk92UU,4163
|
|
@@ -131,7 +139,7 @@ iwa/tui/workers.py,sha256=lvzbIS375_H1rj7-9d-w0PKnkDJ4lW_13aWzZRaX9fY,1192
|
|
|
131
139
|
iwa/tui/modals/__init__.py,sha256=OyrjWjaPqQAllZcUJ-Ac_e1PtTouJy8m1eGo132p-EA,130
|
|
132
140
|
iwa/tui/modals/base.py,sha256=q9dEV6We_SPxbMRh711amFDwAOBywD00Qg0jcqvh5LE,12060
|
|
133
141
|
iwa/tui/screens/__init__.py,sha256=j0brLsuVd9M8hM5LHH05E7manY3ZVj24yf7nFyGryp4,31
|
|
134
|
-
iwa/tui/screens/wallets.py,sha256=
|
|
142
|
+
iwa/tui/screens/wallets.py,sha256=PJWDwXt3LYBaGny1DH0WtvWzMQGGgWR1kUzlEr8dLW8,30802
|
|
135
143
|
iwa/tui/tests/test_app.py,sha256=F0tJthsyWzwNbHcGtiyDQtKDPn3m9N1qt2vMGiXrQTQ,3868
|
|
136
144
|
iwa/tui/tests/test_rpc.py,sha256=4m2HC-R5R9kO5pluo2G_CrTBQv63YYrdZNufTjtnGUk,4330
|
|
137
145
|
iwa/tui/tests/test_wallets_refactor.py,sha256=71G3HLbhTtgDy3ffVbYv0MFYRgdYd-NWGBdvdzW4M9c,998
|
|
@@ -141,7 +149,7 @@ iwa/tui/widgets/base.py,sha256=Z8FigMhsfD76PkFVERqMaotd-xwXfuFZm_8TmCMOsl4,3381
|
|
|
141
149
|
iwa/web/dependencies.py,sha256=0_dAJlRh6gKrUDRPKUe92eshFsg572yx_H0lQgSqGDA,2103
|
|
142
150
|
iwa/web/models.py,sha256=MSD9WPy_Nz_amWgoo2KSDTn4ZLv_AV0o0amuNtSf-68,3035
|
|
143
151
|
iwa/web/server.py,sha256=4ZLVFEKoGs_NoCcXMeyYzDNdxUXazjwHQaX7CR1pwHE,5239
|
|
144
|
-
iwa/web/routers/accounts.py,sha256=
|
|
152
|
+
iwa/web/routers/accounts.py,sha256=VhCHrwzRWqZcSW-tTEqFWT5hFl-IYEWpqXeuN8xM3-4,3922
|
|
145
153
|
iwa/web/routers/state.py,sha256=aEfeGFAOyaS6kWhXuWLrdvEbnQAeonKIWxJrQkqJ1GY,2198
|
|
146
154
|
iwa/web/routers/swap.py,sha256=8xycAytquR29ELxW3vx428W8s9bI_w_x2kpRhhJ0KXY,22630
|
|
147
155
|
iwa/web/routers/transactions.py,sha256=bRjfD7zcuX3orVIHzOMVsIkEtcE_pM_KCom4cdAKV6Q,5602
|
|
@@ -149,16 +157,16 @@ iwa/web/routers/olas/__init__.py,sha256=Jo6Dm1e8fHafCD800fbxsxeFz3tvuEEKXEf5-9tj
|
|
|
149
157
|
iwa/web/routers/olas/admin.py,sha256=PMRdNelqYgQ1xbqh3floFV5xrVtBRQiwZPd8J9_ffxg,5785
|
|
150
158
|
iwa/web/routers/olas/funding.py,sha256=f8fADNtbZEBFl-vuVKfas6os38Vot6K5tJBTenZmCD0,4832
|
|
151
159
|
iwa/web/routers/olas/general.py,sha256=dPsBQppTGoQY1RztliUhseOHOZGeeCR10lhThD9kyXo,803
|
|
152
|
-
iwa/web/routers/olas/services.py,sha256=
|
|
160
|
+
iwa/web/routers/olas/services.py,sha256=jDbxLUJBN48vs2-fXrIpxhPSM6quqYxggmMOkUVEIaI,18200
|
|
153
161
|
iwa/web/routers/olas/staking.py,sha256=jktJ2C1Q9X4aC0tWJByN3sHpEXY0EIvr3rr4N0MtXXc,14081
|
|
154
|
-
iwa/web/static/app.js,sha256=
|
|
162
|
+
iwa/web/static/app.js,sha256=hBjUSivxf5Uyy2H6BR-rfdvF8e7qBoDPK23aY3dagNY,114418
|
|
155
163
|
iwa/web/static/index.html,sha256=q7s7plnMbN1Nkzr5bRxZgvgOFerUChEGIZW7SpAVtPc,28514
|
|
156
|
-
iwa/web/static/style.css,sha256=
|
|
157
|
-
iwa/web/tests/test_web_endpoints.py,sha256=
|
|
164
|
+
iwa/web/static/style.css,sha256=7i6T96pS7gXSLDZfyp_87gRlyB9rpsFWJEHJ-dRY1ug,24371
|
|
165
|
+
iwa/web/tests/test_web_endpoints.py,sha256=vA25YghHNB23sbmhD4ciesn_f_okSq0tjlkrSiKZ0rs,24007
|
|
158
166
|
iwa/web/tests/test_web_olas.py,sha256=0CVSsrncOeJ3x0ECV7mVLQV_CXZRrOqGiVjgLIi6hZ8,16308
|
|
159
167
|
iwa/web/tests/test_web_swap.py,sha256=7A4gBJFL01kIXPtW1E1J17SCsVc_0DmUn-R8kKrnnVA,2974
|
|
160
168
|
iwa/web/tests/test_web_swap_coverage.py,sha256=zGNrzlhZ_vWDCvWmLcoUwFgqxnrp_ACbo49AtWBS_Kw,5584
|
|
161
|
-
iwa-0.0.
|
|
169
|
+
iwa-0.0.59.dist-info/licenses/LICENSE,sha256=eIubm_IlBHPYRQlLNZKbBNKhJUUP3JH0A2miZUhAVfI,1078
|
|
162
170
|
tests/legacy_cow.py,sha256=oOkZvIxL70ReEoD9oHQbOD5GpjIr6AGNHcOCgfPlerU,8389
|
|
163
171
|
tests/legacy_safe.py,sha256=AssM2g13E74dNGODu_H0Q0y412lgqsrYnEzI97nm_Ts,2972
|
|
164
172
|
tests/legacy_transaction_retry_logic.py,sha256=D9RqZ7DBu61Xr2djBAodU2p9UE939LL-DnQXswX5iQk,1497
|
|
@@ -166,17 +174,17 @@ tests/legacy_tui.py,sha256=qu5-_C0H9dumElLFEWB71ACOgcA6bxbipgmWCBB12DM,15676
|
|
|
166
174
|
tests/legacy_wallets_screen.py,sha256=9hZnX-VhKgwH9w8MxbNdboRyNxLDhOakLKJECsw_vhc,19262
|
|
167
175
|
tests/legacy_web.py,sha256=q2ERIriaDHT3Q8axG2N3ucO7f2VSvV_WkuPR00DVko4,8577
|
|
168
176
|
tests/test_account_service.py,sha256=g_AIVT2jhlvUtbFTaCd-d15x4CmXJQaV66tlAgnaXwY,3745
|
|
169
|
-
tests/test_balance_service.py,sha256=
|
|
170
|
-
tests/test_chain.py,sha256=
|
|
177
|
+
tests/test_balance_service.py,sha256=wcuCOVszxPy8nPkldAVcEiygcOK3BuQt797fqAJvbp4,4979
|
|
178
|
+
tests/test_chain.py,sha256=VZoidSojWyt1y4mQdZdoZsjuuDZjLC6neTC-2SF_Q7I,13957
|
|
171
179
|
tests/test_chain_interface.py,sha256=Wu0q0sREtmYBp7YvWrBIrrSTtqeQj18oJp2VmMUEMec,8312
|
|
172
180
|
tests/test_chain_interface_coverage.py,sha256=fvrVvw8-DMwdsSFKQHUhpbfutrVRxnnTc-tjB7Bb-jo,3327
|
|
173
|
-
tests/test_cli.py,sha256=
|
|
181
|
+
tests/test_cli.py,sha256=Pl4RC2xp1omiJUnL3Dza6pCmIoO29LJ0vGw33_ZpT5c,3980
|
|
174
182
|
tests/test_contract.py,sha256=tApHAxsfKGawYJWA9PhTNrOZUE0VVAq79ruIe3KxeWY,14412
|
|
175
183
|
tests/test_db.py,sha256=dmbrupj0qlUeiiycZ2mzMFjf7HrDa6tcqMPY8zpiKIk,5710
|
|
176
|
-
tests/test_drain_coverage.py,sha256=
|
|
184
|
+
tests/test_drain_coverage.py,sha256=oFpY7tFPXWe9WLh3z2D4L2GxuAJO6_txLNxJmtgZT7M,7208
|
|
177
185
|
tests/test_erc20.py,sha256=kNEw1afpm5EbXRNXkjpkBNZIy7Af1nqGlztKH5IWAwU,3074
|
|
178
186
|
tests/test_gnosis_plugin.py,sha256=XMoHBCTrnVBq9bXYPzMUIrhr95caucMVRxooCjKrzjg,3454
|
|
179
|
-
tests/test_keys.py,sha256=
|
|
187
|
+
tests/test_keys.py,sha256=Qk4n3QDZ2HjXYRvehdrSlvDS_q3NLRLMnCq45Eo1Q9o,17551
|
|
180
188
|
tests/test_legacy_wallet.py,sha256=Caj3xP1FijRyLKa-xKiZu6NCAsQRHjWbsnAarncAoA0,49798
|
|
181
189
|
tests/test_main.py,sha256=y2xr7HjCt4rHsxm8y6n24FKCteSHPyxC3DFuMcUgX1Y,475
|
|
182
190
|
tests/test_migration.py,sha256=fYoxzI3KqGh0cPV0bFcbvGrAnKcNlvnwjggG_uD0QGo,1789
|
|
@@ -186,14 +194,17 @@ tests/test_models.py,sha256=1bEfPiDVgEdtwFEzwecSPAHjCF8kjOPSMeQExJ7eCJ4,7107
|
|
|
186
194
|
tests/test_monitor.py,sha256=dRVS6EkTwfvGEOg7t0dVhs6M3oEZExBH7iBZe6hmk4M,7261
|
|
187
195
|
tests/test_multisend.py,sha256=IvXpwnC5xSDRCyCDGcMdO3L-eQegvdjAzHZB0FoVFUI,2685
|
|
188
196
|
tests/test_plugin_service.py,sha256=ZEe37kV_sv4Eb04032O1hZIoo9yf5gJo83ks7Grzrng,3767
|
|
189
|
-
tests/
|
|
190
|
-
tests/
|
|
197
|
+
tests/test_rate_limiter.py,sha256=gC-mVsTCqGbBoUxAllY_WS9kl12rBHQv7MNr1zdUdGQ,7334
|
|
198
|
+
tests/test_rate_limiter_retry.py,sha256=gU4AJk1s39HvdcbGeIoIrr1M7p6WMba_n2y8eFNSXc8,4261
|
|
191
199
|
tests/test_reset_tenderly.py,sha256=GVoqbDT3n4_GnlKF5Lx-8ew15jT8I2hIPdTulQDb6dI,7215
|
|
192
|
-
tests/test_rpc_efficiency.py,sha256=
|
|
193
|
-
tests/
|
|
200
|
+
tests/test_rpc_efficiency.py,sha256=mNuCoa5r6lSEyTqcRX98oz-huoKMTUlKM2UcOHlTQ6M,3745
|
|
201
|
+
tests/test_rpc_rate_limit.py,sha256=Eo-Nr_7p8jERtouCtKuEmcSzACeiVUb33kt7BeTo4uA,1011
|
|
202
|
+
tests/test_rpc_rotation.py,sha256=a1cFKsf0fo-73_MSDnTuU6Zpv7bJHjrCVu3ANe8PXDU,12541
|
|
194
203
|
tests/test_rpc_view.py,sha256=sgZ53KEHl8VGb7WKYa0VI7Cdxbf8JH1SdroHYbWHjfQ,2031
|
|
195
|
-
tests/test_safe_coverage.py,sha256=
|
|
196
|
-
tests/
|
|
204
|
+
tests/test_safe_coverage.py,sha256=KBxKz64XkK8CgN0N0LTNVKakf8Wg8EpghcBlLmDFmLs,6119
|
|
205
|
+
tests/test_safe_executor.py,sha256=V3ovBRY1lOuW5rm8rpm5Ns7jb-rgmHKHpz9pMTqz6c4,14448
|
|
206
|
+
tests/test_safe_integration.py,sha256=WWAKDio3N-CFyr5RRvphbOPdu3TI9WSM8IesfbFbvWQ,5363
|
|
207
|
+
tests/test_safe_service.py,sha256=5ULlj0fPZRwg-4fCBJplhm4Msr_Beof7W-Zf_JljZc8,5782
|
|
197
208
|
tests/test_service_manager_integration.py,sha256=I_BLUzEKrVTyg_8jqsUK0oFD3aQVPCRJ7z0gY8P-j04,2354
|
|
198
209
|
tests/test_service_manager_structure.py,sha256=zK506ucCXCBHcjPYKrKEuK1bgq0xsbawyL8Y-wahXf8,868
|
|
199
210
|
tests/test_service_transaction.py,sha256=IeqYhmRD-pIXffBJrBQwfPx-qnfNEJs0iPM3eCb8MLo,7054
|
|
@@ -205,14 +216,14 @@ tests/test_transfer_multisend.py,sha256=PErjNqNwN66TMh4oVa307re64Ucccg1LkXqB0Klk
|
|
|
205
216
|
tests/test_transfer_native.py,sha256=cDbb4poV_veIw6eHpokrHe9yUndOjA6rQhrHd_IY3HQ,7445
|
|
206
217
|
tests/test_transfer_security.py,sha256=gdpC6ybdXQbQgILbAQ0GqjWdwn9AJRNR3B_7TYg0NxI,3617
|
|
207
218
|
tests/test_transfer_structure.py,sha256=Q2rHB8QotipbvPuwL5hbgwcQG-DE-1RFXgoyuFyxpPQ,1172
|
|
208
|
-
tests/test_transfer_swap_unit.py,sha256=
|
|
219
|
+
tests/test_transfer_swap_unit.py,sha256=XkHuitzbOl-Fgzxx26sPtBI7Tlp-B2tHILryIE_jD_E,5056
|
|
209
220
|
tests/test_ui_coverage.py,sha256=N-7uhPlKOXCKyS32VjwG3JQRnAS1PoAJxR-InaOZtCQ,2423
|
|
210
221
|
tests/test_utils.py,sha256=vkP49rYNI8BRzLpWR3WnKdDr8upeZjZcs7Rx0pjbQMo,1292
|
|
211
222
|
tests/test_workers.py,sha256=MInwdkFY5LdmFB3o1odIaSD7AQZb3263hNafO1De5PE,2793
|
|
212
223
|
tools/create_and_stake_service.py,sha256=1xwy_bJQI1j9yIQ968Oc9Db_F6mk1659LuuZntTASDE,3742
|
|
213
224
|
tools/verify_drain.py,sha256=PkMjblyOOAuQge88FwfEzRtCYeEtJxXhPBmtQYCoQ-8,6743
|
|
214
|
-
iwa-0.0.
|
|
215
|
-
iwa-0.0.
|
|
216
|
-
iwa-0.0.
|
|
217
|
-
iwa-0.0.
|
|
218
|
-
iwa-0.0.
|
|
225
|
+
iwa-0.0.59.dist-info/METADATA,sha256=FZrh67solKvQcjzWzdns2HPQGMwPZs0B6_Z2rK7hLJA,7337
|
|
226
|
+
iwa-0.0.59.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
227
|
+
iwa-0.0.59.dist-info/entry_points.txt,sha256=nwB6kscrfA7M00pYmL2j-sBH6eF6h2ga9IK1BZxdiyQ,241
|
|
228
|
+
iwa-0.0.59.dist-info/top_level.txt,sha256=kedS9cRUbm4JE2wYeabIXilhHjN8KCw0IGbqqqsw0Bs,16
|
|
229
|
+
iwa-0.0.59.dist-info/RECORD,,
|
tests/test_balance_service.py
CHANGED
|
@@ -131,49 +131,6 @@ def test_get_erc20_balance_wei_account_not_found(
|
|
|
131
131
|
assert result is None
|
|
132
132
|
|
|
133
133
|
|
|
134
|
-
def test_get_erc20_balance_with_retry_success(
|
|
135
|
-
balance_service, mock_chain_interfaces, mock_account_service
|
|
136
|
-
):
|
|
137
|
-
"""Test get_erc20_balance_with_retry succeeds on first try."""
|
|
138
|
-
with patch("iwa.core.services.balance.ERC20Contract") as mock_erc20:
|
|
139
|
-
mock_erc20.return_value.balance_of_eth.return_value = 50.0
|
|
140
|
-
|
|
141
|
-
result = balance_service.get_erc20_balance_with_retry("0xAccount", "DAI", "gnosis")
|
|
142
|
-
|
|
143
|
-
assert result == 50.0
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
def test_get_erc20_balance_with_retry_fails_then_succeeds(
|
|
147
|
-
balance_service, mock_chain_interfaces, mock_account_service
|
|
148
|
-
):
|
|
149
|
-
"""Test get_erc20_balance_with_retry retries on failure."""
|
|
150
|
-
with patch("iwa.core.services.balance.ERC20Contract") as mock_erc20, patch("time.sleep"):
|
|
151
|
-
mock_erc20.return_value.balance_of_eth.side_effect = [
|
|
152
|
-
Exception("Network error"),
|
|
153
|
-
25.0,
|
|
154
|
-
]
|
|
155
|
-
|
|
156
|
-
result = balance_service.get_erc20_balance_with_retry(
|
|
157
|
-
"0xAccount", "DAI", "gnosis", retries=3
|
|
158
|
-
)
|
|
159
|
-
|
|
160
|
-
assert result == 25.0
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
def test_get_erc20_balance_with_retry_all_attempts_fail(
|
|
164
|
-
balance_service, mock_chain_interfaces, mock_account_service
|
|
165
|
-
):
|
|
166
|
-
"""Test get_erc20_balance_with_retry returns None after all retries fail."""
|
|
167
|
-
with patch("iwa.core.services.balance.ERC20Contract") as mock_erc20, patch("time.sleep"):
|
|
168
|
-
mock_erc20.return_value.balance_of_eth.side_effect = Exception("Network error")
|
|
169
|
-
|
|
170
|
-
result = balance_service.get_erc20_balance_with_retry(
|
|
171
|
-
"0xAccount", "DAI", "gnosis", retries=3
|
|
172
|
-
)
|
|
173
|
-
|
|
174
|
-
assert result is None
|
|
175
|
-
|
|
176
|
-
|
|
177
134
|
def test_balance_service_with_wallet(mock_account_service):
|
|
178
135
|
"""Test BalanceService initialization with Wallet (has key_storage attr)."""
|
|
179
136
|
from iwa.core.services.balance import BalanceService
|
tests/test_chain.py
CHANGED
|
@@ -124,9 +124,7 @@ def test_get_native_balance(mock_web3):
|
|
|
124
124
|
assert ci.get_native_balance_eth("0xAddress") == 1.0
|
|
125
125
|
|
|
126
126
|
|
|
127
|
-
# NOTE:
|
|
128
|
-
# from ChainInterface for security reasons. Transaction signing is now handled exclusively
|
|
129
|
-
# through TransactionService.sign_and_send() which uses KeyStorage internally.
|
|
127
|
+
# NOTE: sign_and_send_transaction tests are in test_wallet.py - method moved to Wallet class
|
|
130
128
|
|
|
131
129
|
|
|
132
130
|
def test_estimate_gas(mock_web3):
|
|
@@ -156,11 +154,19 @@ def test_calculate_transaction_params(mock_web3):
|
|
|
156
154
|
ci.web3.eth.get_transaction_count.return_value = 5
|
|
157
155
|
ci.web3.eth.gas_price = 20
|
|
158
156
|
|
|
157
|
+
# Mock for EIP-1559 check (disable it for simple test)
|
|
158
|
+
ci.web3.eth.get_block.return_value = {} # No baseFeePerGas
|
|
159
|
+
|
|
159
160
|
with patch.object(ci, "estimate_gas", return_value=1000):
|
|
160
161
|
params = ci.calculate_transaction_params(MagicMock(), {"from": "0xSender"})
|
|
161
162
|
assert params["nonce"] == 5
|
|
162
163
|
assert params["gas"] == 1000
|
|
163
|
-
|
|
164
|
+
# If EIP-1559 is disabled by the mock above, it uses gasPrice
|
|
165
|
+
if "gasPrice" in params:
|
|
166
|
+
assert params["gasPrice"] == 20
|
|
167
|
+
else:
|
|
168
|
+
assert "maxFeePerGas" in params
|
|
169
|
+
assert "maxPriorityFeePerGas" in params
|
|
164
170
|
|
|
165
171
|
|
|
166
172
|
def test_wait_for_no_pending_tx(mock_web3):
|
|
@@ -237,10 +243,12 @@ def test_rotate_rpc(mock_web3):
|
|
|
237
243
|
assert ci._current_rpc_index == 1
|
|
238
244
|
|
|
239
245
|
# Rotate 2
|
|
246
|
+
ci._last_rotation_time = 0 # Bypass cooldown
|
|
240
247
|
assert ci.rotate_rpc() is True
|
|
241
248
|
assert ci._current_rpc_index == 2
|
|
242
249
|
|
|
243
250
|
# Rotate 3 (back to 0)
|
|
251
|
+
ci._last_rotation_time = 0 # Bypass cooldown
|
|
244
252
|
assert ci.rotate_rpc() is True
|
|
245
253
|
assert ci._current_rpc_index == 0
|
|
246
254
|
|
|
@@ -286,6 +294,7 @@ def test_chain_interface_with_real_chains():
|
|
|
286
294
|
|
|
287
295
|
# Mock health check to pass
|
|
288
296
|
with patch.object(interface, "check_rpc_health", return_value=True):
|
|
297
|
+
interface._last_rotation_time = 0 # Bypass cooldown
|
|
289
298
|
rotated = interface.rotate_rpc()
|
|
290
299
|
assert rotated is True
|
|
291
300
|
|
|
@@ -317,7 +326,6 @@ def test_chain_interface_with_real_chains():
|
|
|
317
326
|
# --- Negative Tests ---
|
|
318
327
|
|
|
319
328
|
|
|
320
|
-
|
|
321
329
|
def test_get_token_symbol_fallback_on_error(mock_web3):
|
|
322
330
|
"""Test get_token_symbol returns truncated address on error."""
|
|
323
331
|
chain = MagicMock(spec=SupportedChain)
|
tests/test_cli.py
CHANGED
|
@@ -61,11 +61,11 @@ def mock_wallet():
|
|
|
61
61
|
def test_account_create(cli, mock_key_storage):
|
|
62
62
|
result = runner.invoke(cli, ["wallet", "create", "--tag", "test"])
|
|
63
63
|
assert result.exit_code == 0
|
|
64
|
-
mock_key_storage.
|
|
64
|
+
mock_key_storage.generate_new_account.assert_called_with("test")
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
def test_account_create_error(cli, mock_key_storage):
|
|
68
|
-
mock_key_storage.
|
|
68
|
+
mock_key_storage.generate_new_account.side_effect = ValueError("Error creating account")
|
|
69
69
|
result = runner.invoke(cli, ["wallet", "create", "--tag", "test"])
|
|
70
70
|
assert result.exit_code == 1
|
|
71
71
|
assert "Error: Error creating account" in result.stdout
|
tests/test_drain_coverage.py
CHANGED
|
@@ -94,14 +94,20 @@ def test_claim_rewards_success_no_event(mock_drain_manager):
|
|
|
94
94
|
assert amount == 1000000000000000000
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
def
|
|
98
|
-
"""Test withdraw_rewards
|
|
99
|
-
mock_drain_manager.service.multisig_address = "
|
|
97
|
+
def test_withdraw_rewards_fallback_to_master(mock_drain_manager):
|
|
98
|
+
"""Test withdraw_rewards falls back to master account when not configured."""
|
|
99
|
+
mock_drain_manager.service.multisig_address = "0x1111111111111111111111111111111111111111"
|
|
100
100
|
mock_drain_manager.olas_config.withdrawal_address = None
|
|
101
|
+
mock_drain_manager.wallet.master_account.address = "0x2222222222222222222222222222222222222222"
|
|
101
102
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
with patch("iwa.plugins.olas.service_manager.drain.ERC20Contract") as mock_erc20_cls:
|
|
104
|
+
mock_erc20 = mock_erc20_cls.return_value
|
|
105
|
+
mock_erc20.balance_of_wei.return_value = 0
|
|
106
|
+
|
|
107
|
+
success, amount = mock_drain_manager.withdraw_rewards()
|
|
108
|
+
# If balance is 0, it logs info and returns (False, 0) in drain.py
|
|
109
|
+
assert not success
|
|
110
|
+
assert amount == 0
|
|
105
111
|
|
|
106
112
|
|
|
107
113
|
def test_drain_service_no_service(mock_drain_manager):
|