wayfinder-paths 0.1.4__py3-none-any.whl → 0.1.6__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.
Potentially problematic release.
This version of wayfinder-paths might be problematic. Click here for more details.
- wayfinder_paths/CONFIG_GUIDE.md +14 -14
- wayfinder_paths/__init__.py +4 -3
- wayfinder_paths/adapters/balance_adapter/README.md +10 -10
- wayfinder_paths/adapters/balance_adapter/adapter.py +10 -9
- wayfinder_paths/adapters/balance_adapter/examples.json +1 -1
- wayfinder_paths/adapters/brap_adapter/README.md +1 -1
- wayfinder_paths/adapters/brap_adapter/adapter.py +28 -21
- wayfinder_paths/adapters/hyperlend_adapter/adapter.py +33 -26
- wayfinder_paths/adapters/ledger_adapter/README.md +26 -39
- wayfinder_paths/adapters/ledger_adapter/adapter.py +78 -75
- wayfinder_paths/adapters/ledger_adapter/examples.json +10 -4
- wayfinder_paths/adapters/ledger_adapter/manifest.yaml +4 -4
- wayfinder_paths/adapters/ledger_adapter/test_adapter.py +31 -26
- wayfinder_paths/adapters/pool_adapter/README.md +1 -13
- wayfinder_paths/adapters/pool_adapter/adapter.py +12 -19
- wayfinder_paths/adapters/token_adapter/adapter.py +8 -4
- wayfinder_paths/core/__init__.py +9 -4
- wayfinder_paths/core/adapters/BaseAdapter.py +20 -3
- wayfinder_paths/core/adapters/models.py +41 -0
- wayfinder_paths/core/clients/BRAPClient.py +21 -2
- wayfinder_paths/core/clients/ClientManager.py +42 -63
- wayfinder_paths/core/clients/HyperlendClient.py +46 -5
- wayfinder_paths/core/clients/LedgerClient.py +350 -124
- wayfinder_paths/core/clients/PoolClient.py +51 -19
- wayfinder_paths/core/clients/SimulationClient.py +16 -4
- wayfinder_paths/core/clients/TokenClient.py +34 -18
- wayfinder_paths/core/clients/TransactionClient.py +18 -2
- wayfinder_paths/core/clients/WalletClient.py +35 -4
- wayfinder_paths/core/clients/WayfinderClient.py +16 -5
- wayfinder_paths/core/clients/protocols.py +69 -62
- wayfinder_paths/core/clients/sdk_example.py +0 -5
- wayfinder_paths/core/config.py +192 -103
- wayfinder_paths/core/constants/base.py +17 -0
- wayfinder_paths/core/engine/{VaultJob.py → StrategyJob.py} +25 -19
- wayfinder_paths/core/engine/__init__.py +2 -2
- wayfinder_paths/core/services/base.py +6 -4
- wayfinder_paths/core/services/local_evm_txn.py +3 -2
- wayfinder_paths/core/settings.py +2 -2
- wayfinder_paths/core/strategies/Strategy.py +135 -38
- wayfinder_paths/core/strategies/descriptors.py +1 -0
- wayfinder_paths/core/utils/evm_helpers.py +12 -10
- wayfinder_paths/core/wallets/README.md +3 -3
- wayfinder_paths/core/wallets/WalletManager.py +3 -3
- wayfinder_paths/run_strategy.py +26 -24
- wayfinder_paths/scripts/make_wallets.py +6 -6
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md +6 -6
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py +36 -156
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py +6 -6
- wayfinder_paths/strategies/stablecoin_yield_strategy/README.md +11 -11
- wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml +1 -1
- wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py +92 -92
- wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py +6 -6
- wayfinder_paths/templates/adapter/README.md +1 -1
- wayfinder_paths/templates/adapter/test_adapter.py +1 -1
- wayfinder_paths/templates/strategy/README.md +4 -4
- wayfinder_paths/templates/strategy/test_strategy.py +7 -7
- wayfinder_paths/tests/test_test_coverage.py +5 -5
- {wayfinder_paths-0.1.4.dist-info → wayfinder_paths-0.1.6.dist-info}/METADATA +46 -47
- {wayfinder_paths-0.1.4.dist-info → wayfinder_paths-0.1.6.dist-info}/RECORD +61 -60
- {wayfinder_paths-0.1.4.dist-info → wayfinder_paths-0.1.6.dist-info}/LICENSE +0 -0
- {wayfinder_paths-0.1.4.dist-info → wayfinder_paths-0.1.6.dist-info}/WHEEL +0 -0
|
@@ -7,7 +7,7 @@ Quick setup:
|
|
|
7
7
|
1. Replace MyStrategy with your strategy class name
|
|
8
8
|
2. Create examples.json with a 'smoke' example (see TESTING.md)
|
|
9
9
|
3. Add mocking if your strategy uses adapters
|
|
10
|
-
4. Run: pytest
|
|
10
|
+
4. Run: pytest wayfinder_paths/strategies/your_strategy/ -v
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
13
|
import sys
|
|
@@ -51,13 +51,13 @@ def strategy():
|
|
|
51
51
|
"""Create a strategy instance for testing with minimal config."""
|
|
52
52
|
mock_config = {
|
|
53
53
|
"main_wallet": {"address": "0x1234567890123456789012345678901234567890"},
|
|
54
|
-
"
|
|
54
|
+
"strategy_wallet": {"address": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"},
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
s = MyStrategy(
|
|
58
58
|
config=mock_config,
|
|
59
59
|
main_wallet=mock_config["main_wallet"],
|
|
60
|
-
|
|
60
|
+
strategy_wallet=mock_config["strategy_wallet"],
|
|
61
61
|
simulation=True,
|
|
62
62
|
)
|
|
63
63
|
|
|
@@ -96,19 +96,19 @@ def strategy():
|
|
|
96
96
|
|
|
97
97
|
# Example for transaction adapters:
|
|
98
98
|
# if hasattr(s, "tx_adapter") and s.tx_adapter:
|
|
99
|
-
# s.tx_adapter.
|
|
99
|
+
# s.tx_adapter.move_from_main_wallet_to_strategy_wallet = AsyncMock(
|
|
100
100
|
# return_value=(True, "Transfer successful (simulated)")
|
|
101
101
|
# )
|
|
102
|
-
# s.tx_adapter.
|
|
102
|
+
# s.tx_adapter.move_from_strategy_wallet_to_main_wallet = AsyncMock(
|
|
103
103
|
# return_value=(True, "Transfer successful (simulated)")
|
|
104
104
|
# )
|
|
105
105
|
|
|
106
106
|
# Example for ledger_adapter:
|
|
107
107
|
# if hasattr(s, "ledger_adapter") and s.ledger_adapter:
|
|
108
|
-
# s.ledger_adapter.
|
|
108
|
+
# s.ledger_adapter.get_strategy_net_deposit = AsyncMock(
|
|
109
109
|
# return_value=(True, {"net_deposit": 0})
|
|
110
110
|
# )
|
|
111
|
-
# s.ledger_adapter.
|
|
111
|
+
# s.ledger_adapter.get_strategy_transactions = AsyncMock(
|
|
112
112
|
# return_value=(True, {"transactions": []})
|
|
113
113
|
# )
|
|
114
114
|
|
|
@@ -7,7 +7,7 @@ import pytest
|
|
|
7
7
|
|
|
8
8
|
def test_all_adapters_have_tests():
|
|
9
9
|
"""Verify that all adapters have a test_adapter.py file."""
|
|
10
|
-
adapters_dir = Path(__file__).parent.parent / "
|
|
10
|
+
adapters_dir = Path(__file__).parent.parent / "adapters"
|
|
11
11
|
|
|
12
12
|
if not adapters_dir.exists():
|
|
13
13
|
pytest.skip("Adapters directory not found")
|
|
@@ -36,7 +36,7 @@ def test_all_adapters_have_tests():
|
|
|
36
36
|
|
|
37
37
|
def test_all_strategies_have_tests():
|
|
38
38
|
"""Verify that all strategies have a test_strategy.py file."""
|
|
39
|
-
strategies_dir = Path(__file__).parent.parent / "
|
|
39
|
+
strategies_dir = Path(__file__).parent.parent / "strategies"
|
|
40
40
|
|
|
41
41
|
if not strategies_dir.exists():
|
|
42
42
|
pytest.skip("Strategies directory not found")
|
|
@@ -65,7 +65,7 @@ def test_all_strategies_have_tests():
|
|
|
65
65
|
|
|
66
66
|
def test_all_strategies_have_examples_json():
|
|
67
67
|
"""Verify that all strategies have an examples.json file (REQUIRED)."""
|
|
68
|
-
strategies_dir = Path(__file__).parent.parent / "
|
|
68
|
+
strategies_dir = Path(__file__).parent.parent / "strategies"
|
|
69
69
|
|
|
70
70
|
if not strategies_dir.exists():
|
|
71
71
|
pytest.skip("Strategies directory not found")
|
|
@@ -95,7 +95,7 @@ def test_all_strategies_have_examples_json():
|
|
|
95
95
|
|
|
96
96
|
def test_strategy_tests_use_examples_json():
|
|
97
97
|
"""Verify that strategy test files load examples.json using the shared utility."""
|
|
98
|
-
strategies_dir = Path(__file__).parent.parent / "
|
|
98
|
+
strategies_dir = Path(__file__).parent.parent / "strategies"
|
|
99
99
|
|
|
100
100
|
if not strategies_dir.exists():
|
|
101
101
|
pytest.skip("Strategies directory not found")
|
|
@@ -167,7 +167,7 @@ def test_strategy_tests_use_examples_json():
|
|
|
167
167
|
|
|
168
168
|
def test_strategy_examples_have_smoke():
|
|
169
169
|
"""Verify that all strategy examples.json files have a 'smoke' entry."""
|
|
170
|
-
strategies_dir = Path(__file__).parent.parent / "
|
|
170
|
+
strategies_dir = Path(__file__).parent.parent / "strategies"
|
|
171
171
|
|
|
172
172
|
if not strategies_dir.exists():
|
|
173
173
|
pytest.skip("Strategies directory not found")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: wayfinder-paths
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: Wayfinder Path: strategies and adapters
|
|
5
5
|
Author: Wayfinder
|
|
6
6
|
Author-email: dev@wayfinder.ai
|
|
@@ -20,13 +20,13 @@ Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
|
|
|
20
20
|
Requires-Dist: web3 (>=7.13.0,<8.0.0)
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
|
|
23
|
-
# 🔐 Wayfinder
|
|
23
|
+
# 🔐 Wayfinder Paths
|
|
24
24
|
|
|
25
25
|
[](https://www.python.org/downloads/)
|
|
26
26
|
[](https://www.docker.com/)
|
|
27
27
|
[](https://discord.gg/fUVwGMXjm3)
|
|
28
28
|
|
|
29
|
-
Open-source platform for community-contributed crypto trading strategies and adapters. Build, test, and deploy automated trading
|
|
29
|
+
Open-source platform for community-contributed crypto trading strategies and adapters. Build, test, and deploy automated trading strategies with direct wallet integration.
|
|
30
30
|
|
|
31
31
|
## 🚀 Quick Start
|
|
32
32
|
|
|
@@ -68,27 +68,26 @@ wayfinder_paths/
|
|
|
68
68
|
│ ├── core/ # Core engine (maintained by team)
|
|
69
69
|
│ │ ├── clients/ # API client managers
|
|
70
70
|
│ │ ├── adapters/ # Base adapter interfaces
|
|
71
|
-
│ │ ├── engine/ # Trading engine &
|
|
71
|
+
│ │ ├── engine/ # Trading engine & StrategyJob
|
|
72
72
|
│ │ ├── strategies/ # Base strategy classes
|
|
73
73
|
│ │ └── config.py # Configuration system
|
|
74
|
-
│ ├──
|
|
75
|
-
│ │ ├──
|
|
76
|
-
│ │ │ ├──
|
|
77
|
-
│ │ │
|
|
78
|
-
│ │ │
|
|
79
|
-
│ │ │
|
|
80
|
-
│ │ │
|
|
81
|
-
│ │
|
|
82
|
-
│ │
|
|
83
|
-
│
|
|
84
|
-
│ │
|
|
85
|
-
│ │
|
|
86
|
-
│ │
|
|
87
|
-
│ │
|
|
88
|
-
│ │
|
|
89
|
-
│ │
|
|
90
|
-
│ │
|
|
91
|
-
│ │ └── ...
|
|
74
|
+
│ ├── adapters/ # Your exchange/protocol integrations (community contributions)
|
|
75
|
+
│ │ ├── balance_adapter/
|
|
76
|
+
│ │ │ ├── adapter.py # Adapter implementation
|
|
77
|
+
│ │ │ ├── manifest.yaml # Adapter manifest (caps, entrypoint)
|
|
78
|
+
│ │ │ ├── examples.json # Example inputs for smoke
|
|
79
|
+
│ │ │ ├── README.md # Local notes
|
|
80
|
+
│ │ │ └── test_adapter.py # Local smoke test
|
|
81
|
+
│ │ ├── brap_adapter/
|
|
82
|
+
│ │ └── ...
|
|
83
|
+
│ ├── strategies/ # Your trading strategies (community contributions)
|
|
84
|
+
│ │ ├── stablecoin_yield_strategy/
|
|
85
|
+
│ │ │ ├── strategy.py # Strategy implementation
|
|
86
|
+
│ │ │ ├── manifest.yaml # Strategy manifest
|
|
87
|
+
│ │ │ ├── examples.json # Example inputs
|
|
88
|
+
│ │ │ ├── README.md # Local notes
|
|
89
|
+
│ │ │ └── test_strategy.py # Local smoke test
|
|
90
|
+
│ │ └── ...
|
|
92
91
|
│ ├── tests/ # Test suite
|
|
93
92
|
│ ├── CONFIG_GUIDE.md # Configuration documentation
|
|
94
93
|
│ ├── config.example.json # Example configuration
|
|
@@ -109,8 +108,8 @@ We welcome contributions! This is an open-source project where community members
|
|
|
109
108
|
1. **Fork the repository** and clone your fork
|
|
110
109
|
2. **Create a feature branch**: `git checkout -b feature/my-strategy`
|
|
111
110
|
3. **Copy a template** to get started:
|
|
112
|
-
- **For adapters**: Copy `wayfinder_paths/
|
|
113
|
-
- **For strategies**: Copy `wayfinder_paths/
|
|
111
|
+
- **For adapters**: Copy `wayfinder_paths/templates/adapter/` to `wayfinder_paths/adapters/my_adapter/`
|
|
112
|
+
- **For strategies**: Copy `wayfinder_paths/templates/strategy/` to `wayfinder_paths/strategies/my_strategy/`
|
|
114
113
|
4. **Customize** the template (rename classes, update manifest, implement methods)
|
|
115
114
|
5. **Test your code** thoroughly using the provided test framework
|
|
116
115
|
6. **Validate manifests**: Run `just validate-manifests`
|
|
@@ -125,9 +124,9 @@ We welcome contributions! This is an open-source project where community members
|
|
|
125
124
|
### Contributor Guidelines
|
|
126
125
|
|
|
127
126
|
#### For Adapters
|
|
128
|
-
- **Start from the template**: Copy `wayfinder_paths/
|
|
127
|
+
- **Start from the template**: Copy `wayfinder_paths/templates/adapter/` as a starting point
|
|
129
128
|
- Extend `BaseAdapter` from `wayfinder_paths/core/adapters/BaseAdapter.py`
|
|
130
|
-
- Create a `manifest.yaml` (template at `wayfinder_paths/
|
|
129
|
+
- Create a `manifest.yaml` (template at `wayfinder_paths/templates/adapter/manifest.yaml`) with:
|
|
131
130
|
- `entrypoint`: Full import path to your adapter class
|
|
132
131
|
- `capabilities`: List of capabilities your adapter provides
|
|
133
132
|
- `dependencies`: List of required client classes (e.g., `PoolClient`, `TokenClient`)
|
|
@@ -138,9 +137,9 @@ We welcome contributions! This is an open-source project where community members
|
|
|
138
137
|
- Validate your manifest: `just validate-manifests`
|
|
139
138
|
|
|
140
139
|
#### For Strategies
|
|
141
|
-
- **Start from the template**: Use `just create-strategy "Strategy Name"` to create a new strategy with its own wallet, or copy `wayfinder_paths/
|
|
140
|
+
- **Start from the template**: Use `just create-strategy "Strategy Name"` to create a new strategy with its own wallet, or copy `wayfinder_paths/templates/strategy/` manually
|
|
142
141
|
- Extend `Strategy` from `wayfinder_paths/core/strategies/Strategy.py`
|
|
143
|
-
- Create a `manifest.yaml` (template at `wayfinder_paths/
|
|
142
|
+
- Create a `manifest.yaml` (template at `wayfinder_paths/templates/strategy/manifest.yaml`) with:
|
|
144
143
|
- `entrypoint`: Full import path to your strategy class
|
|
145
144
|
- `name`: Strategy directory name (used for wallet lookup)
|
|
146
145
|
- `permissions.policy`: Security policy for transaction permissions
|
|
@@ -177,9 +176,9 @@ just create-strategy "My Strategy Name"
|
|
|
177
176
|
|
|
178
177
|
# Or manually copy a template:
|
|
179
178
|
# For adapters:
|
|
180
|
-
cp -r wayfinder_paths/
|
|
179
|
+
cp -r wayfinder_paths/templates/adapter wayfinder_paths/adapters/my_adapter
|
|
181
180
|
# For strategies:
|
|
182
|
-
cp -r wayfinder_paths/
|
|
181
|
+
cp -r wayfinder_paths/templates/strategy wayfinder_paths/strategies/my_strategy
|
|
183
182
|
|
|
184
183
|
# 5. Customize the template (see template README.md files for details)
|
|
185
184
|
|
|
@@ -190,8 +189,8 @@ just validate-manifests
|
|
|
190
189
|
poetry run pytest -k smoke -v
|
|
191
190
|
|
|
192
191
|
# Or test your specific contribution
|
|
193
|
-
poetry run pytest wayfinder_paths/
|
|
194
|
-
poetry run pytest wayfinder_paths/
|
|
192
|
+
poetry run pytest wayfinder_paths/strategies/your_strategy/ -v
|
|
193
|
+
poetry run pytest wayfinder_paths/adapters/your_adapter/ -v
|
|
195
194
|
|
|
196
195
|
# 8. Test your contribution locally
|
|
197
196
|
poetry run python wayfinder_paths/run_strategy.py your_strategy --action status
|
|
@@ -228,7 +227,7 @@ Every adapter and strategy requires a `manifest.yaml` file that declares its met
|
|
|
228
227
|
|
|
229
228
|
Adapter manifests declare the capabilities an adapter provides and the clients it depends on.
|
|
230
229
|
|
|
231
|
-
**Template:** Copy `wayfinder_paths/
|
|
230
|
+
**Template:** Copy `wayfinder_paths/templates/adapter/manifest.yaml` as a starting point.
|
|
232
231
|
|
|
233
232
|
**Schema:**
|
|
234
233
|
```yaml
|
|
@@ -248,7 +247,7 @@ dependencies:
|
|
|
248
247
|
- `capabilities`: List of abstract capabilities this adapter provides (required, non-empty)
|
|
249
248
|
- `dependencies`: List of client class names from `core.clients` that this adapter requires (required, non-empty)
|
|
250
249
|
|
|
251
|
-
**Example** (`
|
|
250
|
+
**Example** (`wayfinder_paths/adapters/pool_adapter/manifest.yaml`):
|
|
252
251
|
```yaml
|
|
253
252
|
schema_version: "0.1"
|
|
254
253
|
entrypoint: "adapters.pool_adapter.adapter.PoolAdapter"
|
|
@@ -266,7 +265,7 @@ dependencies:
|
|
|
266
265
|
|
|
267
266
|
Strategy manifests declare permissions and required adapters with their capabilities.
|
|
268
267
|
|
|
269
|
-
**Template:** Copy `wayfinder_paths/
|
|
268
|
+
**Template:** Copy `wayfinder_paths/templates/strategy/manifest.yaml` as a starting point.
|
|
270
269
|
|
|
271
270
|
**Schema:**
|
|
272
271
|
```yaml
|
|
@@ -290,7 +289,7 @@ adapters:
|
|
|
290
289
|
- `name`: Adapter type identifier (e.g., "POOL", "BRAP")
|
|
291
290
|
- `capabilities`: List of capabilities required from this adapter
|
|
292
291
|
|
|
293
|
-
**Example** (`
|
|
292
|
+
**Example** (`wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml`):
|
|
294
293
|
```yaml
|
|
295
294
|
schema_version: "0.1"
|
|
296
295
|
entrypoint: "strategies.stablecoin_yield_strategy.strategy.StablecoinYieldStrategy"
|
|
@@ -357,8 +356,8 @@ For each manifest file:
|
|
|
357
356
|
```
|
|
358
357
|
|
|
359
358
|
The script automatically discovers all manifests by scanning:
|
|
360
|
-
- `wayfinder_paths/
|
|
361
|
-
- `wayfinder_paths/
|
|
359
|
+
- `wayfinder_paths/adapters/*/manifest.yaml` for adapter manifests
|
|
360
|
+
- `wayfinder_paths/strategies/*/manifest.yaml` for strategy manifests
|
|
362
361
|
|
|
363
362
|
All errors are collected and reported at the end, with the script exiting with code 1 if any validation fails.
|
|
364
363
|
|
|
@@ -381,7 +380,7 @@ See [CONFIG_GUIDE.md](wayfinder_paths/CONFIG_GUIDE.md) for details.
|
|
|
381
380
|
|
|
382
381
|
### Authentication
|
|
383
382
|
|
|
384
|
-
Wayfinder
|
|
383
|
+
Wayfinder Paths supports two authentication methods:
|
|
385
384
|
|
|
386
385
|
#### 1. Service Account Authentication (API Key)
|
|
387
386
|
For backend services and automated systems with higher rate limits:
|
|
@@ -445,7 +444,7 @@ See [CONFIG_GUIDE.md](wayfinder_paths/CONFIG_GUIDE.md) for detailed authenticati
|
|
|
445
444
|
Adapters connect to exchanges and DeFi protocols using the client system.
|
|
446
445
|
|
|
447
446
|
```python
|
|
448
|
-
# wayfinder_paths/
|
|
447
|
+
# wayfinder_paths/adapters/my_adapter/adapter.py
|
|
449
448
|
from wayfinder_paths.core.adapters.BaseAdapter import BaseAdapter
|
|
450
449
|
from wayfinder_paths.core.clients.PoolClient import PoolClient
|
|
451
450
|
|
|
@@ -475,7 +474,7 @@ class MyAdapter(BaseAdapter):
|
|
|
475
474
|
Strategies implement trading logic using adapters and the unified client system.
|
|
476
475
|
|
|
477
476
|
```python
|
|
478
|
-
# wayfinder_paths/
|
|
477
|
+
# wayfinder_paths/strategies/my_strategy/strategy.py
|
|
479
478
|
from wayfinder_paths.core.services.web3_service import DefaultWeb3Service
|
|
480
479
|
from wayfinder_paths.core.strategies.Strategy import StatusDict, StatusTuple, Strategy
|
|
481
480
|
from wayfinder_paths.adapters.balance_adapter.adapter import BalanceAdapter
|
|
@@ -501,7 +500,7 @@ class MyStrategy(Strategy):
|
|
|
501
500
|
async def deposit(
|
|
502
501
|
self, main_token_amount: float = 0.0, gas_token_amount: float = 0.0
|
|
503
502
|
) -> StatusTuple:
|
|
504
|
-
"""Move funds from main wallet into the
|
|
503
|
+
"""Move funds from main wallet into the strategy wallet."""
|
|
505
504
|
if main_token_amount <= 0:
|
|
506
505
|
return (False, "Nothing to deposit")
|
|
507
506
|
|
|
@@ -524,7 +523,7 @@ class MyStrategy(Strategy):
|
|
|
524
523
|
"""Report balances back to the runner"""
|
|
525
524
|
success, balance = await self.balance_adapter.get_balance(
|
|
526
525
|
token_id=self.config.get("token_id"),
|
|
527
|
-
wallet_address=self.config.get("
|
|
526
|
+
wallet_address=self.config.get("strategy_wallet", {}).get("address"),
|
|
528
527
|
)
|
|
529
528
|
return {
|
|
530
529
|
"portfolio_value": float(balance or 0),
|
|
@@ -535,10 +534,10 @@ class MyStrategy(Strategy):
|
|
|
535
534
|
|
|
536
535
|
### Built-in adapters
|
|
537
536
|
|
|
538
|
-
- **BALANCE (BalanceAdapter)**: wraps `WalletClient`/`TokenClient` to read wallet, token, and pool balances and now orchestrates transfers between the main/
|
|
537
|
+
- **BALANCE (BalanceAdapter)**: wraps `WalletClient`/`TokenClient` to read wallet, token, and pool balances and now orchestrates transfers between the main/strategy wallets with ledger bookkeeping. Requires a `Web3Service` so it can share the same wallet provider as the strategy.
|
|
539
538
|
- **POOL (PoolAdapter)**: composes `PoolClient` to fetch pools, llama analytics, combined reports, high-yield searches, and search helpers.
|
|
540
539
|
- **BRAP (BRAPAdapter)**: integrates the cross-chain quote service for swaps/bridges, including fee breakdowns, route comparisons, validation helpers, and swap execution/ledger recording when provided a `Web3Service`.
|
|
541
|
-
- **LEDGER (LedgerAdapter)**: records deposits, withdrawals, custom operations, and cashflows via `LedgerClient`, and can read
|
|
540
|
+
- **LEDGER (LedgerAdapter)**: records deposits, withdrawals, custom operations, and cashflows via `LedgerClient`, and can read strategy transaction summaries.
|
|
542
541
|
- **TOKEN (TokenAdapter)**: lightweight wrapper around `TokenClient` for token metadata, live price snapshots, and gas token lookups.
|
|
543
542
|
- **HYPERLEND (HyperlendAdapter)**: connects to `HyperlendClient` for lending/supply caps inside the HyperLend strategy.
|
|
544
543
|
|
|
@@ -560,8 +559,8 @@ just create-wallets
|
|
|
560
559
|
poetry run pytest -k smoke -v
|
|
561
560
|
|
|
562
561
|
# 3. Test your specific contribution
|
|
563
|
-
poetry run pytest wayfinder_paths/
|
|
564
|
-
poetry run pytest wayfinder_paths/
|
|
562
|
+
poetry run pytest wayfinder_paths/strategies/my_strategy/ -v # Strategy
|
|
563
|
+
poetry run pytest wayfinder_paths/adapters/my_adapter/ -v # Adapter
|
|
565
564
|
```
|
|
566
565
|
|
|
567
566
|
### Testing Your Contribution
|
|
@@ -1,83 +1,84 @@
|
|
|
1
|
-
wayfinder_paths/CONFIG_GUIDE.md,sha256=
|
|
2
|
-
wayfinder_paths/__init__.py,sha256=
|
|
1
|
+
wayfinder_paths/CONFIG_GUIDE.md,sha256=PN2ClAZ8FCF16_sstaUxbfvQkVAyXdtRvTrrj-qJPuk,13397
|
|
2
|
+
wayfinder_paths/__init__.py,sha256=YgOg-PRPT3ROh0zg6hgQyQE-YFkFGw6TM77zDvB4_sE,427
|
|
3
3
|
wayfinder_paths/abis/generic/erc20.json,sha256=geyzVzdTNt3u1XHKxi4seszP_GIWIzPTl0FYgiftRnM,9336
|
|
4
4
|
wayfinder_paths/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
wayfinder_paths/adapters/balance_adapter/README.md,sha256=
|
|
6
|
-
wayfinder_paths/adapters/balance_adapter/adapter.py,sha256=
|
|
7
|
-
wayfinder_paths/adapters/balance_adapter/examples.json,sha256=
|
|
5
|
+
wayfinder_paths/adapters/balance_adapter/README.md,sha256=g5LXIJ-_6mM6FRwvEJp3jLJeUXfHxauiNRfnYRhJbps,4046
|
|
6
|
+
wayfinder_paths/adapters/balance_adapter/adapter.py,sha256=5-zN_DXypnshpLbMTLEKqG5XI3D0xNKbhWQUxNdnCWA,8991
|
|
7
|
+
wayfinder_paths/adapters/balance_adapter/examples.json,sha256=3R1M4B_VsIy29viAuFT9nQbnQShWl8ZbU-rnSNWUW9U,129
|
|
8
8
|
wayfinder_paths/adapters/balance_adapter/manifest.yaml,sha256=vp2VoQJf-TxFxgkTsUJ1AEeeOoImM_QjrGYCmjyEQYI,189
|
|
9
9
|
wayfinder_paths/adapters/balance_adapter/test_adapter.py,sha256=MzwElYxtdffIJnk9xtWCJml8HG1n8Z0omJY2X9MVmDg,2873
|
|
10
|
-
wayfinder_paths/adapters/brap_adapter/README.md,sha256=
|
|
10
|
+
wayfinder_paths/adapters/brap_adapter/README.md,sha256=euWkSBR6OkYtebhvdNR_PL64sKbzKD5bg5hrYTIWZ1c,7905
|
|
11
11
|
wayfinder_paths/adapters/brap_adapter/__init__.py,sha256=jpqxZ-Bv_8kBo-lhgO_QCWaVZNq_WwlkNBHD4RsqOJg,90
|
|
12
|
-
wayfinder_paths/adapters/brap_adapter/adapter.py,sha256=
|
|
12
|
+
wayfinder_paths/adapters/brap_adapter/adapter.py,sha256=9Nr_pUhIf5ik98pTg-6pidDtnxH_vt_ZkQHchpAG3oE,26778
|
|
13
13
|
wayfinder_paths/adapters/brap_adapter/examples.json,sha256=KWuAklUspd2uvk0s2ey8gczg4nbzhdwxQqzhascyMiQ,5287
|
|
14
14
|
wayfinder_paths/adapters/brap_adapter/manifest.yaml,sha256=bJ8o4j9ZPjfnLxXxHfekoXKUHoBkXmWQ3nokTH1aya4,240
|
|
15
15
|
wayfinder_paths/adapters/brap_adapter/test_adapter.py,sha256=36ixuv11Ql3pWgImmoVuE1EqVpsvT5dToGvN9LjpWpE,10874
|
|
16
16
|
wayfinder_paths/adapters/hyperlend_adapter/__init__.py,sha256=DsWOnEn-Tlu9ZoIoGaFeSqOYI3b4lXGVK3_FTntWpLw,139
|
|
17
|
-
wayfinder_paths/adapters/hyperlend_adapter/adapter.py,sha256=
|
|
17
|
+
wayfinder_paths/adapters/hyperlend_adapter/adapter.py,sha256=QevMiOrztvTRHx7vA_dAQGX3ioUFdLY4aVOfsT-DXX8,10555
|
|
18
18
|
wayfinder_paths/adapters/hyperlend_adapter/manifest.yaml,sha256=Ugc0jNf3txAQRGAXlVvTN3Mbdc4-fUMS1yVs0SZcBwI,259
|
|
19
19
|
wayfinder_paths/adapters/hyperlend_adapter/test_adapter.py,sha256=ZnEiJxHRlcI4ijDfwmL2KEsL6A8dcWDYNhhxCEezWI4,9330
|
|
20
|
-
wayfinder_paths/adapters/ledger_adapter/README.md,sha256=
|
|
20
|
+
wayfinder_paths/adapters/ledger_adapter/README.md,sha256=OIFbJIlck91K3kBKbkPfOWUDx7tJgDjwCAcBLm7FNK4,4104
|
|
21
21
|
wayfinder_paths/adapters/ledger_adapter/__init__.py,sha256=DK9GShIUiQ57YKSqhCKoS43GCweBxi0lzkUQ9sYVxUA,96
|
|
22
|
-
wayfinder_paths/adapters/ledger_adapter/adapter.py,sha256=
|
|
23
|
-
wayfinder_paths/adapters/ledger_adapter/examples.json,sha256=
|
|
24
|
-
wayfinder_paths/adapters/ledger_adapter/manifest.yaml,sha256=
|
|
25
|
-
wayfinder_paths/adapters/ledger_adapter/test_adapter.py,sha256=
|
|
26
|
-
wayfinder_paths/adapters/pool_adapter/README.md,sha256=
|
|
22
|
+
wayfinder_paths/adapters/ledger_adapter/adapter.py,sha256=6Fjxltvn9iXp_-CZtN7lDz1Xt0lWaNQX2drx6lgeryw,10260
|
|
23
|
+
wayfinder_paths/adapters/ledger_adapter/examples.json,sha256=DdqTSe4vnBrfIycQVQQ_JZom7fBGHbL7MR4ppK9ljCY,3936
|
|
24
|
+
wayfinder_paths/adapters/ledger_adapter/manifest.yaml,sha256=121VPXNpx13vO9qoBww47Wvpi29JLn5WoIFnudCkDYs,271
|
|
25
|
+
wayfinder_paths/adapters/ledger_adapter/test_adapter.py,sha256=F5L7YYbYIH1HUGkR-Dra2XU2AdSvx-kfO2qDYzW3xKw,7425
|
|
26
|
+
wayfinder_paths/adapters/pool_adapter/README.md,sha256=rF7KYEtxu6BmDa9gi505-IFUddk6BDaMOQPB4YjeOLc,5863
|
|
27
27
|
wayfinder_paths/adapters/pool_adapter/__init__.py,sha256=rv56pYzz2Gqiz33uoPJktCQRe3CRt8U9ry5GbjVgK3A,90
|
|
28
|
-
wayfinder_paths/adapters/pool_adapter/adapter.py,sha256=
|
|
28
|
+
wayfinder_paths/adapters/pool_adapter/adapter.py,sha256=jXGq5F-xHXF42JN5R0Hd6LEGDds1qAiwOCGQ4etzuPE,9642
|
|
29
29
|
wayfinder_paths/adapters/pool_adapter/examples.json,sha256=hLH74Oy6WlrEvAIOjwqsjpcCDxC-N0efWeLa_-TbntM,3202
|
|
30
30
|
wayfinder_paths/adapters/pool_adapter/manifest.yaml,sha256=z-OQYBsl2RdV6M34RZzqtQTAFHtQod0po_JD_-9ElNM,217
|
|
31
31
|
wayfinder_paths/adapters/pool_adapter/test_adapter.py,sha256=QiEYyLFo0S6gKJuk7j9Md0-mN6yNY5heKDQ_Sm1Yln8,7721
|
|
32
32
|
wayfinder_paths/adapters/token_adapter/README.md,sha256=d2tMJte6HBu62CCYXdjS8GHZXj5f2fU03uZAO6pscBI,2698
|
|
33
33
|
wayfinder_paths/adapters/token_adapter/__init__.py,sha256=nEmxrvffEygn3iKH3cZTNLkhnUUhlUAEtshmrFRAjq8,62
|
|
34
|
-
wayfinder_paths/adapters/token_adapter/adapter.py,sha256=
|
|
34
|
+
wayfinder_paths/adapters/token_adapter/adapter.py,sha256=JEb7A8wJYHxENFhJ6upAgnQAbPZeVfYi6OGs1hiHxnA,3432
|
|
35
35
|
wayfinder_paths/adapters/token_adapter/examples.json,sha256=RW-3xazj4wbTPl-AVrzduRH1NCXx8m7-06bRMOUJ-lc,3626
|
|
36
36
|
wayfinder_paths/adapters/token_adapter/manifest.yaml,sha256=KQgbHAUaJ6JYjTlOJ9HGeRxwmICXVV01qRwW8wJPKMM,143
|
|
37
37
|
wayfinder_paths/adapters/token_adapter/test_adapter.py,sha256=xnJ-nglMnCFqYnH9D-xcnIy-pmPZK6_puNZ9hPthIMI,4701
|
|
38
38
|
wayfinder_paths/config.example.json,sha256=gDvS7W-cbaNe2IV7Q72di_PYpCDKODojELaXdd77Gx4,605
|
|
39
39
|
wayfinder_paths/conftest.py,sha256=pqDNijXn9_zmbAdkt_2a18UQLjtsDkNTBJVTgC6H2nA,1136
|
|
40
|
-
wayfinder_paths/core/__init__.py,sha256=
|
|
41
|
-
wayfinder_paths/core/adapters/BaseAdapter.py,sha256=
|
|
40
|
+
wayfinder_paths/core/__init__.py,sha256=AJK8oS2dCVuJ2pmSxqXOCvuWacNaVEU3yALEqsD3rog,398
|
|
41
|
+
wayfinder_paths/core/adapters/BaseAdapter.py,sha256=bzc3ER7aKOsmk9cxyoJxGdI54eibbpcMC8nGYJUrsp0,2033
|
|
42
42
|
wayfinder_paths/core/adapters/__init__.py,sha256=ZqzkliXm5RjWxYJyJR88XHb3npZFiThk7HoVZe3JF60,108
|
|
43
43
|
wayfinder_paths/core/adapters/base.py,sha256=j10cZ5NwqaAhN2mH_j24tG8r7_7NWtx8F6S7sJ9wOi8,100
|
|
44
|
+
wayfinder_paths/core/adapters/models.py,sha256=cQEZMjKZtUz_M29ijBXhZeIfR7FSYlunxov8pMIuUxs,913
|
|
44
45
|
wayfinder_paths/core/clients/AuthClient.py,sha256=scz8GvnabNYAQq_XYDcLP2lf2LZqurQOixA7MMAfbCY,2796
|
|
45
|
-
wayfinder_paths/core/clients/BRAPClient.py,sha256=
|
|
46
|
-
wayfinder_paths/core/clients/ClientManager.py,sha256=
|
|
47
|
-
wayfinder_paths/core/clients/HyperlendClient.py,sha256=
|
|
48
|
-
wayfinder_paths/core/clients/LedgerClient.py,sha256=
|
|
49
|
-
wayfinder_paths/core/clients/PoolClient.py,sha256=
|
|
50
|
-
wayfinder_paths/core/clients/SimulationClient.py,sha256=
|
|
51
|
-
wayfinder_paths/core/clients/TokenClient.py,sha256=
|
|
52
|
-
wayfinder_paths/core/clients/TransactionClient.py,sha256=
|
|
53
|
-
wayfinder_paths/core/clients/WalletClient.py,sha256=
|
|
54
|
-
wayfinder_paths/core/clients/WayfinderClient.py,sha256=
|
|
46
|
+
wayfinder_paths/core/clients/BRAPClient.py,sha256=AtTYNk1FuCS59xj5FFgv2fIts44BQK19Kv0IeXlcPtw,3700
|
|
47
|
+
wayfinder_paths/core/clients/ClientManager.py,sha256=2p8oEFnCxKCH_TBMKo9gMLAwzwLgeotdgFod8wpoa04,8135
|
|
48
|
+
wayfinder_paths/core/clients/HyperlendClient.py,sha256=6yAhojEbjrRC7YLckwGL_2z5lwI4xnrRVNzxspqKSTg,6173
|
|
49
|
+
wayfinder_paths/core/clients/LedgerClient.py,sha256=c-RSBlf8jSOFWbK-Yr_n91bz5kNNLexEsaiMDGf5g4M,14627
|
|
50
|
+
wayfinder_paths/core/clients/PoolClient.py,sha256=s4fg-OPPxq7tfy8Fbk_QtGCkzkiRCx-P8UwANUfJpE0,4070
|
|
51
|
+
wayfinder_paths/core/clients/SimulationClient.py,sha256=ViQmXCQKwhpnZA-YkfIgArrpxGr1U11lZNlbBIak1MU,6364
|
|
52
|
+
wayfinder_paths/core/clients/TokenClient.py,sha256=zg39K-uA1ObkNEcxoXviA1QYSd-fxQXxjBHFOeClY9E,2788
|
|
53
|
+
wayfinder_paths/core/clients/TransactionClient.py,sha256=APs-8lMdgBnE40wOn5L8_lEdJ3DddTZFcQbW0tIfJWg,2040
|
|
54
|
+
wayfinder_paths/core/clients/WalletClient.py,sha256=Hx4iz41ieEQyUcS16_qgw7LdQMrG5UX-KUDCMgZ3jYc,3677
|
|
55
|
+
wayfinder_paths/core/clients/WayfinderClient.py,sha256=lLdmD58gAyx5N4yYN4-IYjvRDVzwE3K408XuI07g6g4,10724
|
|
55
56
|
wayfinder_paths/core/clients/__init__.py,sha256=oNq6fQW8hUnpkuIZxdbOTLPayJRLA6S-k8e7wqsH_7c,1581
|
|
56
|
-
wayfinder_paths/core/clients/protocols.py,sha256=
|
|
57
|
-
wayfinder_paths/core/clients/sdk_example.py,sha256=
|
|
58
|
-
wayfinder_paths/core/config.py,sha256=
|
|
57
|
+
wayfinder_paths/core/clients/protocols.py,sha256=p6Juadsi3jVVp6WyWNmT3O8qr6TRmWOrsWVMH5RgWPE,8339
|
|
58
|
+
wayfinder_paths/core/clients/sdk_example.py,sha256=Y6mSyHfsWcOje6E-geNI0C4CQ6uyZaD3V9Q8kPM53eo,2969
|
|
59
|
+
wayfinder_paths/core/config.py,sha256=A--KQp_EDLXhtituvk3WXPUP2SJv45IcNcm4G_nFMc0,16890
|
|
59
60
|
wayfinder_paths/core/constants/__init__.py,sha256=KH-TtfNBJgp0WfKIxvHnvS521odH8RS3Qhl8cQhr4Ys,663
|
|
60
|
-
wayfinder_paths/core/constants/base.py,sha256=
|
|
61
|
+
wayfinder_paths/core/constants/base.py,sha256=9XEcgsT_0EMkCoMMdEkvQjjEW9G_8SM3chOBxPpWj00,1169
|
|
61
62
|
wayfinder_paths/core/constants/erc20_abi.py,sha256=3ljIyUl6FesoEa4uprwNo-nF0Q5s73M9WEqXLw6ONI4,3214
|
|
62
63
|
wayfinder_paths/core/constants/hyperlend_abi.py,sha256=nIaqsfMl5-_InYN82pjz0FIKsT-AnNkwz0DIc9VrZSc,4331
|
|
63
|
-
wayfinder_paths/core/engine/
|
|
64
|
-
wayfinder_paths/core/engine/__init__.py,sha256=
|
|
64
|
+
wayfinder_paths/core/engine/StrategyJob.py,sha256=DqwkPu5JHp00xkDmj7kyUqs9U-VP0k-OBlVipjEzk14,7257
|
|
65
|
+
wayfinder_paths/core/engine/__init__.py,sha256=WZ2KWnmOZnBocYrqdwq6EUHp6lmTyrKyXgHSHyQswnU,108
|
|
65
66
|
wayfinder_paths/core/engine/manifest.py,sha256=rkrALipqwqR61lZu_lF1jJj1aqJk6ZskuXokcB1g0HI,3146
|
|
66
67
|
wayfinder_paths/core/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
67
|
-
wayfinder_paths/core/services/base.py,sha256=
|
|
68
|
-
wayfinder_paths/core/services/local_evm_txn.py,sha256=
|
|
68
|
+
wayfinder_paths/core/services/base.py,sha256=Ip7fkRPvCibLs67n-0_ESrDR0t9lffGqY-4K2pJfoG8,5585
|
|
69
|
+
wayfinder_paths/core/services/local_evm_txn.py,sha256=n0LJOH9-Gy9JDjMvz16Lk1PD9gpsuiw2EEW7PNmkzTI,16982
|
|
69
70
|
wayfinder_paths/core/services/local_token_txn.py,sha256=S9RJq2_fm1sqmJmn83vMo69-GQLeCkQ-20rrv0ezU1g,8049
|
|
70
71
|
wayfinder_paths/core/services/web3_service.py,sha256=_8sEpkWzSzp7dQR5OCwScypyOsEv5s2BeuO8TqB_H-w,1558
|
|
71
|
-
wayfinder_paths/core/settings.py,sha256=
|
|
72
|
-
wayfinder_paths/core/strategies/Strategy.py,sha256=
|
|
72
|
+
wayfinder_paths/core/settings.py,sha256=VqNOU84OsX_6KAWr9JdPfyxtV14yTH1uZl2zuKeiJ3g,1921
|
|
73
|
+
wayfinder_paths/core/strategies/Strategy.py,sha256=7Fn29fhCW3TJ1rJnWJHd4e5ndeDfFjNbeAgAazAynUs,9499
|
|
73
74
|
wayfinder_paths/core/strategies/__init__.py,sha256=2NjvvDw6sIQGUFV4Qo1olXTxUOY3GmCM8Ivz_J1FSmc,157
|
|
74
75
|
wayfinder_paths/core/strategies/base.py,sha256=-s0qeiGZl5CHTUL2PavGXM7ACkNlaa0c4jeZR_4DuBM,155
|
|
75
|
-
wayfinder_paths/core/strategies/descriptors.py,sha256=
|
|
76
|
+
wayfinder_paths/core/strategies/descriptors.py,sha256=E8vi7ssaj6rglKVp1xl4PlUlJYLSoayXkTzsPb78vrs,1648
|
|
76
77
|
wayfinder_paths/core/utils/__init__.py,sha256=TEylMYHnG37Z3mizSmw28bUm0vyNBFzf0Nc8dB_7l1A,73
|
|
77
|
-
wayfinder_paths/core/utils/evm_helpers.py,sha256=
|
|
78
|
+
wayfinder_paths/core/utils/evm_helpers.py,sha256=sJUGpwbc3jD9h1BaaYC4mPDs25S3YKyoY1NfvHq9BBg,6491
|
|
78
79
|
wayfinder_paths/core/utils/wallets.py,sha256=tGgVxDW2ZvkvJIb6yow1cirrqhQ67_X9IqxZocBEy2k,2438
|
|
79
|
-
wayfinder_paths/core/wallets/README.md,sha256=
|
|
80
|
-
wayfinder_paths/core/wallets/WalletManager.py,sha256=
|
|
80
|
+
wayfinder_paths/core/wallets/README.md,sha256=gwzFapFnpArdIyUz0NdYOq5Nm9_uqDYuFddKAZJ0Ss4,3745
|
|
81
|
+
wayfinder_paths/core/wallets/WalletManager.py,sha256=sptj0Dya9iM87BDzUktrYM_Mw33xyVJNrRUTVfBjHGw,1870
|
|
81
82
|
wayfinder_paths/core/wallets/__init__.py,sha256=hIuhy64pJOs_8mAP7Zup28goXbT8qjBeeVYMkbqlyu8,315
|
|
82
83
|
wayfinder_paths/policies/enso.py,sha256=oytco04eeGjiRbZPGFE1YpH4NxvV0tfVM14QmlyzjkY,428
|
|
83
84
|
wayfinder_paths/policies/erc20.py,sha256=cmiG03gz82LRUgwf7BD_yoZ9QTiIvIURL40y48NwaFo,958
|
|
@@ -88,38 +89,38 @@ wayfinder_paths/policies/hyperliquid.py,sha256=hAxNtWdxavwf_a-AnlXMOmEYakkNBkrPT
|
|
|
88
89
|
wayfinder_paths/policies/moonwell.py,sha256=sKWLbruMKiW7Yh1DhXdVPRe0JBP-nooNybRz0G9PgvA,1605
|
|
89
90
|
wayfinder_paths/policies/prjx.py,sha256=6kfZ6OQFroFHYJl4vSWT-svwwfvoHlS_ZrcHt8nmZMU,743
|
|
90
91
|
wayfinder_paths/policies/util.py,sha256=r8xQLPvE3kU21_LG6VbkFI9sUSYltcsKunryZdHOUDA,912
|
|
91
|
-
wayfinder_paths/run_strategy.py,sha256=
|
|
92
|
+
wayfinder_paths/run_strategy.py,sha256=HRj5iY2AFWaxRKXukKUKPxaXcz4YN-fb6anSLHJaeDg,14502
|
|
92
93
|
wayfinder_paths/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
94
|
wayfinder_paths/scripts/create_strategy.py,sha256=rp2kkGXsmcAbOt1eZthV1iZ2yM6wAbjn4R10IATulOw,6275
|
|
94
|
-
wayfinder_paths/scripts/make_wallets.py,sha256
|
|
95
|
+
wayfinder_paths/scripts/make_wallets.py,sha256=oP3i8MdU9HJT1QWUfkP7XAv2rDuZg_tbawJ-EJg3b5c,5997
|
|
95
96
|
wayfinder_paths/scripts/validate_manifests.py,sha256=sTJhCVTb8X0SFYozArVbX4AMAEv-0R1Imp4dpHfAuHE,7075
|
|
96
97
|
wayfinder_paths/strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
97
98
|
wayfinder_paths/strategies/config.py,sha256=5dv-8tWwoxH3Sxd9jtiw90shrLipEe3UlU-IYUBfciM,2762
|
|
98
|
-
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=
|
|
99
|
+
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=8mjDUBkBEYp_GWkM0knbFIbJ2Nmb-63pNR09ztZ67qo,4596
|
|
99
100
|
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/examples.json,sha256=i1OZXRmjRYXgmGk-_VqXR1hq7VuP6h40j-PWS1W3j-A,413
|
|
100
101
|
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/manifest.yaml,sha256=__YWl6MEeTBLbNWwUyZjQky0ok1T8B1m8dHPQWtW454,240
|
|
101
|
-
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=
|
|
102
|
-
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py,sha256=
|
|
103
|
-
wayfinder_paths/strategies/stablecoin_yield_strategy/README.md,sha256=
|
|
102
|
+
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=VqHuuULeXZ5bA8g7cK9oD1kgXrK87N8Hxu8bnDBR1Cc,88820
|
|
103
|
+
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py,sha256=_7q9pFrqCUdf8eraK9tINs-6qyOCoX4-2AdL0z18wCY,12205
|
|
104
|
+
wayfinder_paths/strategies/stablecoin_yield_strategy/README.md,sha256=Qj1b2bU5606pbZXsPf1WOtsx0erfBaXpRygxIDGVIgE,5211
|
|
104
105
|
wayfinder_paths/strategies/stablecoin_yield_strategy/examples.json,sha256=pL1DNFEvYvXKK7xXD5oQYFPQj3Cm1ocKnk6r_iZk0IY,423
|
|
105
|
-
wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml,sha256=
|
|
106
|
-
wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=
|
|
107
|
-
wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py,sha256=
|
|
108
|
-
wayfinder_paths/templates/adapter/README.md,sha256=
|
|
106
|
+
wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml,sha256=rBb7-Fmub8twfKJgbBIiCWbwI2nLnuqBNyAJs36WhIg,750
|
|
107
|
+
wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=uYmXBjbTET8zFL3WLkcMWvJIbEJMzHezChKqlBGyLFY,70502
|
|
108
|
+
wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py,sha256=PzBaUJf4HR7QV2fvt5QNIgLrwNocAd32k7q6dt7B40I,13074
|
|
109
|
+
wayfinder_paths/templates/adapter/README.md,sha256=QcJ0cwXqqtj1VRK1wAs-unUphTPHdJwoIrIoSU4hTmA,3550
|
|
109
110
|
wayfinder_paths/templates/adapter/adapter.py,sha256=8wdqcEwqb7XGUxl2gQvGnbFwhPi1h15ZJhB2lgtZieI,814
|
|
110
111
|
wayfinder_paths/templates/adapter/examples.json,sha256=KLHy3AgPIplAaZN0qY2A-HBMa1xXkMhIyusORovTD9w,79
|
|
111
112
|
wayfinder_paths/templates/adapter/manifest.yaml,sha256=Xr46INOnH-R9ambF7GvzhTSZgxW3qPlOtt_04xH0_50,134
|
|
112
|
-
wayfinder_paths/templates/adapter/test_adapter.py,sha256=
|
|
113
|
-
wayfinder_paths/templates/strategy/README.md,sha256=
|
|
113
|
+
wayfinder_paths/templates/adapter/test_adapter.py,sha256=ENjaZH-LMPGYUUbqsfXtvUQep51XjPQNv52i47rkaNk,1525
|
|
114
|
+
wayfinder_paths/templates/strategy/README.md,sha256=c7iKlgkz0FPQC3xjMlXqYaDIwC_EKr0wJ6pCLfr2Oik,5664
|
|
114
115
|
wayfinder_paths/templates/strategy/examples.json,sha256=s8UdlD5uxLITQrRMCqgiaAP0IE0tdnnLfX-Zn-OChIc,135
|
|
115
116
|
wayfinder_paths/templates/strategy/manifest.yaml,sha256=Q13sIhfE7u0wMwa8oFwMZr_twwVMprMV4c_JEQNhkz8,289
|
|
116
117
|
wayfinder_paths/templates/strategy/strategy.py,sha256=dso2jhVphsdKNd17JPwnFAFzU01-1kHlWrKPAKIKSWw,2024
|
|
117
|
-
wayfinder_paths/templates/strategy/test_strategy.py,sha256
|
|
118
|
+
wayfinder_paths/templates/strategy/test_strategy.py,sha256=-ktqbtJ-lXr0CVGgjFkleWmdZeT2nsyL_zt7Hq1aC1g,7692
|
|
118
119
|
wayfinder_paths/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
120
|
wayfinder_paths/tests/test_smoke_manifest.py,sha256=YjVzHTWys5o6Ae2cUuuJPhk-QgKxT1InDFHLjpouRiY,1267
|
|
120
|
-
wayfinder_paths/tests/test_test_coverage.py,sha256=
|
|
121
|
+
wayfinder_paths/tests/test_test_coverage.py,sha256=9NrZeVmP02D4W7Qc0XjciC05bhvdTCVibYjTGfa_GQk,7893
|
|
121
122
|
wayfinder_paths/tests/test_utils.py,sha256=pxHT0QKFlyJeJo8bFnKXzWcOdi6t8rbJ0JFCBaFCBRQ,2112
|
|
122
|
-
wayfinder_paths-0.1.
|
|
123
|
-
wayfinder_paths-0.1.
|
|
124
|
-
wayfinder_paths-0.1.
|
|
125
|
-
wayfinder_paths-0.1.
|
|
123
|
+
wayfinder_paths-0.1.6.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
|
|
124
|
+
wayfinder_paths-0.1.6.dist-info/METADATA,sha256=la0fKZVElWMOQkPIfI-0nXUfsy3LmmsTJ4dqAC_CS9A,31321
|
|
125
|
+
wayfinder_paths-0.1.6.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
126
|
+
wayfinder_paths-0.1.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|