wayfinder-paths 0.1.3__py3-none-any.whl → 0.1.5__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 +37 -32
- wayfinder_paths/__init__.py +3 -3
- wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/README.md +12 -12
- wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/adapter.py +12 -11
- wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/examples.json +1 -1
- wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/manifest.yaml +1 -1
- wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/test_adapter.py +12 -6
- wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/README.md +2 -2
- wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/adapter.py +30 -23
- wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/manifest.yaml +1 -1
- wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/test_adapter.py +2 -2
- wayfinder_paths/adapters/hyperlend_adapter/__init__.py +7 -0
- wayfinder_paths/{vaults/adapters → adapters}/hyperlend_adapter/adapter.py +33 -26
- wayfinder_paths/{vaults/adapters → adapters}/hyperlend_adapter/manifest.yaml +1 -1
- wayfinder_paths/{vaults/adapters → adapters}/hyperlend_adapter/test_adapter.py +2 -2
- wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/README.md +27 -40
- wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/adapter.py +78 -75
- wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/examples.json +10 -4
- wayfinder_paths/adapters/ledger_adapter/manifest.yaml +11 -0
- wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/test_adapter.py +33 -28
- wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/README.md +2 -14
- wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/adapter.py +12 -19
- wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/manifest.yaml +1 -1
- wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/test_adapter.py +2 -2
- wayfinder_paths/{vaults/adapters → adapters}/token_adapter/README.md +1 -1
- wayfinder_paths/{vaults/adapters → adapters}/token_adapter/adapter.py +8 -4
- wayfinder_paths/adapters/token_adapter/examples.json +26 -0
- wayfinder_paths/{vaults/adapters → adapters}/token_adapter/manifest.yaml +1 -1
- wayfinder_paths/{vaults/adapters → adapters}/token_adapter/test_adapter.py +1 -1
- wayfinder_paths/config.example.json +3 -1
- wayfinder_paths/core/__init__.py +3 -3
- 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/engine/manifest.py +1 -1
- 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 +123 -37
- 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/{vaults/policies → policies}/enso.py +1 -1
- wayfinder_paths/{vaults/policies → policies}/hyper_evm.py +2 -2
- wayfinder_paths/{vaults/policies → policies}/hyperlend.py +1 -1
- wayfinder_paths/{vaults/policies → policies}/moonwell.py +1 -1
- wayfinder_paths/{vaults/policies → policies}/prjx.py +1 -1
- wayfinder_paths/run_strategy.py +29 -27
- wayfinder_paths/scripts/create_strategy.py +3 -3
- wayfinder_paths/scripts/make_wallets.py +6 -6
- wayfinder_paths/scripts/validate_manifests.py +2 -2
- wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/README.md +10 -9
- wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/manifest.yaml +1 -1
- wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/strategy.py +47 -167
- wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/test_strategy.py +10 -8
- wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/README.md +15 -14
- wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/manifest.yaml +2 -2
- wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/strategy.py +97 -97
- wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/test_strategy.py +8 -8
- wayfinder_paths/{vaults/templates → templates}/adapter/README.md +5 -5
- wayfinder_paths/{vaults/templates → templates}/adapter/manifest.yaml +1 -1
- wayfinder_paths/{vaults/templates → templates}/adapter/test_adapter.py +1 -1
- wayfinder_paths/{vaults/templates → templates}/strategy/README.md +10 -9
- wayfinder_paths/{vaults/templates → templates}/strategy/manifest.yaml +1 -1
- wayfinder_paths/{vaults/templates → templates}/strategy/test_strategy.py +8 -8
- wayfinder_paths/tests/test_test_coverage.py +5 -5
- {wayfinder_paths-0.1.3.dist-info → wayfinder_paths-0.1.5.dist-info}/METADATA +146 -69
- wayfinder_paths-0.1.5.dist-info/RECORD +126 -0
- wayfinder_paths/vaults/adapters/hyperlend_adapter/__init__.py +0 -7
- wayfinder_paths/vaults/adapters/ledger_adapter/manifest.yaml +0 -11
- wayfinder_paths/vaults/adapters/token_adapter/examples.json +0 -26
- wayfinder_paths/vaults/strategies/__init__.py +0 -0
- wayfinder_paths-0.1.3.dist-info/RECORD +0 -126
- /wayfinder_paths/{vaults → adapters}/__init__.py +0 -0
- /wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/__init__.py +0 -0
- /wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/examples.json +0 -0
- /wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/__init__.py +0 -0
- /wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/__init__.py +0 -0
- /wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/examples.json +0 -0
- /wayfinder_paths/{vaults/adapters → adapters}/token_adapter/__init__.py +0 -0
- /wayfinder_paths/{vaults/policies → policies}/erc20.py +0 -0
- /wayfinder_paths/{vaults/policies → policies}/evm.py +0 -0
- /wayfinder_paths/{vaults/policies → policies}/hyperliquid.py +0 -0
- /wayfinder_paths/{vaults/policies → policies}/util.py +0 -0
- /wayfinder_paths/{vaults/adapters → strategies}/__init__.py +0 -0
- /wayfinder_paths/{vaults/strategies → strategies}/config.py +0 -0
- /wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/examples.json +0 -0
- /wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/examples.json +0 -0
- /wayfinder_paths/{vaults/templates → templates}/adapter/adapter.py +0 -0
- /wayfinder_paths/{vaults/templates → templates}/adapter/examples.json +0 -0
- /wayfinder_paths/{vaults/templates → templates}/strategy/examples.json +0 -0
- /wayfinder_paths/{vaults/templates → templates}/strategy/strategy.py +0 -0
- {wayfinder_paths-0.1.3.dist-info → wayfinder_paths-0.1.5.dist-info}/LICENSE +0 -0
- {wayfinder_paths-0.1.3.dist-info → wayfinder_paths-0.1.5.dist-info}/WHEEL +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: wayfinder-paths
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.5
|
|
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
|
|
|
@@ -42,8 +42,9 @@ curl -sSL https://install.python-poetry.org | python3 -
|
|
|
42
42
|
poetry install
|
|
43
43
|
|
|
44
44
|
# ⚠️ Generate test wallets FIRST (required!)
|
|
45
|
-
# This creates wallets.json with
|
|
46
|
-
|
|
45
|
+
# This creates wallets.json with a main wallet for local testing
|
|
46
|
+
just create-wallets
|
|
47
|
+
# Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
|
|
47
48
|
|
|
48
49
|
# Copy and configure
|
|
49
50
|
cp wayfinder_paths/config.example.json config.json
|
|
@@ -67,27 +68,26 @@ wayfinder_paths/
|
|
|
67
68
|
│ ├── core/ # Core engine (maintained by team)
|
|
68
69
|
│ │ ├── clients/ # API client managers
|
|
69
70
|
│ │ ├── adapters/ # Base adapter interfaces
|
|
70
|
-
│ │ ├── engine/ # Trading engine &
|
|
71
|
+
│ │ ├── engine/ # Trading engine & StrategyJob
|
|
71
72
|
│ │ ├── strategies/ # Base strategy classes
|
|
72
73
|
│ │ └── config.py # Configuration system
|
|
73
|
-
│ ├──
|
|
74
|
-
│ │ ├──
|
|
75
|
-
│ │ │ ├──
|
|
76
|
-
│ │ │
|
|
77
|
-
│ │ │
|
|
78
|
-
│ │ │
|
|
79
|
-
│ │ │
|
|
80
|
-
│ │
|
|
81
|
-
│ │
|
|
82
|
-
│
|
|
83
|
-
│ │
|
|
84
|
-
│ │
|
|
85
|
-
│ │
|
|
86
|
-
│ │
|
|
87
|
-
│ │
|
|
88
|
-
│ │
|
|
89
|
-
│ │
|
|
90
|
-
│ │ └── ...
|
|
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
|
+
│ │ └── ...
|
|
91
91
|
│ ├── tests/ # Test suite
|
|
92
92
|
│ ├── CONFIG_GUIDE.md # Configuration documentation
|
|
93
93
|
│ ├── config.example.json # Example configuration
|
|
@@ -108,8 +108,8 @@ We welcome contributions! This is an open-source project where community members
|
|
|
108
108
|
1. **Fork the repository** and clone your fork
|
|
109
109
|
2. **Create a feature branch**: `git checkout -b feature/my-strategy`
|
|
110
110
|
3. **Copy a template** to get started:
|
|
111
|
-
- **For adapters**: Copy `wayfinder_paths/
|
|
112
|
-
- **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/`
|
|
113
113
|
4. **Customize** the template (rename classes, update manifest, implement methods)
|
|
114
114
|
5. **Test your code** thoroughly using the provided test framework
|
|
115
115
|
6. **Validate manifests**: Run `just validate-manifests`
|
|
@@ -124,9 +124,9 @@ We welcome contributions! This is an open-source project where community members
|
|
|
124
124
|
### Contributor Guidelines
|
|
125
125
|
|
|
126
126
|
#### For Adapters
|
|
127
|
-
- **Start from the template**: Copy `wayfinder_paths/
|
|
127
|
+
- **Start from the template**: Copy `wayfinder_paths/templates/adapter/` as a starting point
|
|
128
128
|
- Extend `BaseAdapter` from `wayfinder_paths/core/adapters/BaseAdapter.py`
|
|
129
|
-
- Create a `manifest.yaml` (template at `wayfinder_paths/
|
|
129
|
+
- Create a `manifest.yaml` (template at `wayfinder_paths/templates/adapter/manifest.yaml`) with:
|
|
130
130
|
- `entrypoint`: Full import path to your adapter class
|
|
131
131
|
- `capabilities`: List of capabilities your adapter provides
|
|
132
132
|
- `dependencies`: List of required client classes (e.g., `PoolClient`, `TokenClient`)
|
|
@@ -137,9 +137,9 @@ We welcome contributions! This is an open-source project where community members
|
|
|
137
137
|
- Validate your manifest: `just validate-manifests`
|
|
138
138
|
|
|
139
139
|
#### For Strategies
|
|
140
|
-
- **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
|
|
141
141
|
- Extend `Strategy` from `wayfinder_paths/core/strategies/Strategy.py`
|
|
142
|
-
- Create a `manifest.yaml` (template at `wayfinder_paths/
|
|
142
|
+
- Create a `manifest.yaml` (template at `wayfinder_paths/templates/strategy/manifest.yaml`) with:
|
|
143
143
|
- `entrypoint`: Full import path to your strategy class
|
|
144
144
|
- `name`: Strategy directory name (used for wallet lookup)
|
|
145
145
|
- `permissions.policy`: Security policy for transaction permissions
|
|
@@ -167,16 +167,18 @@ cd wayfinder-paths
|
|
|
167
167
|
poetry install
|
|
168
168
|
|
|
169
169
|
# 3. Generate test wallets (required before testing!)
|
|
170
|
-
|
|
170
|
+
# Creates a main wallet (or use 'just create-strategy' which auto-creates wallets)
|
|
171
|
+
just create-wallets
|
|
172
|
+
# Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
|
|
171
173
|
|
|
172
174
|
# 4. Create a new strategy (recommended - automatically creates wallet)
|
|
173
175
|
just create-strategy "My Strategy Name"
|
|
174
176
|
|
|
175
177
|
# Or manually copy a template:
|
|
176
178
|
# For adapters:
|
|
177
|
-
cp -r wayfinder_paths/
|
|
179
|
+
cp -r wayfinder_paths/templates/adapter wayfinder_paths/adapters/my_adapter
|
|
178
180
|
# For strategies:
|
|
179
|
-
cp -r wayfinder_paths/
|
|
181
|
+
cp -r wayfinder_paths/templates/strategy wayfinder_paths/strategies/my_strategy
|
|
180
182
|
|
|
181
183
|
# 5. Customize the template (see template README.md files for details)
|
|
182
184
|
|
|
@@ -187,8 +189,8 @@ just validate-manifests
|
|
|
187
189
|
poetry run pytest -k smoke -v
|
|
188
190
|
|
|
189
191
|
# Or test your specific contribution
|
|
190
|
-
poetry run pytest wayfinder_paths/
|
|
191
|
-
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
|
|
192
194
|
|
|
193
195
|
# 8. Test your contribution locally
|
|
194
196
|
poetry run python wayfinder_paths/run_strategy.py your_strategy --action status
|
|
@@ -225,12 +227,12 @@ Every adapter and strategy requires a `manifest.yaml` file that declares its met
|
|
|
225
227
|
|
|
226
228
|
Adapter manifests declare the capabilities an adapter provides and the clients it depends on.
|
|
227
229
|
|
|
228
|
-
**Template:** Copy `wayfinder_paths/
|
|
230
|
+
**Template:** Copy `wayfinder_paths/templates/adapter/manifest.yaml` as a starting point.
|
|
229
231
|
|
|
230
232
|
**Schema:**
|
|
231
233
|
```yaml
|
|
232
234
|
schema_version: "0.1"
|
|
233
|
-
entrypoint: "
|
|
235
|
+
entrypoint: "adapters.my_adapter.adapter.MyAdapter"
|
|
234
236
|
capabilities:
|
|
235
237
|
- "pool.read"
|
|
236
238
|
- "pool.analytics"
|
|
@@ -245,10 +247,10 @@ dependencies:
|
|
|
245
247
|
- `capabilities`: List of abstract capabilities this adapter provides (required, non-empty)
|
|
246
248
|
- `dependencies`: List of client class names from `core.clients` that this adapter requires (required, non-empty)
|
|
247
249
|
|
|
248
|
-
**Example** (`
|
|
250
|
+
**Example** (`wayfinder_paths/adapters/pool_adapter/manifest.yaml`):
|
|
249
251
|
```yaml
|
|
250
252
|
schema_version: "0.1"
|
|
251
|
-
entrypoint: "
|
|
253
|
+
entrypoint: "adapters.pool_adapter.adapter.PoolAdapter"
|
|
252
254
|
capabilities:
|
|
253
255
|
- "pool.read"
|
|
254
256
|
- "pool.analytics"
|
|
@@ -263,12 +265,12 @@ dependencies:
|
|
|
263
265
|
|
|
264
266
|
Strategy manifests declare permissions and required adapters with their capabilities.
|
|
265
267
|
|
|
266
|
-
**Template:** Copy `wayfinder_paths/
|
|
268
|
+
**Template:** Copy `wayfinder_paths/templates/strategy/manifest.yaml` as a starting point.
|
|
267
269
|
|
|
268
270
|
**Schema:**
|
|
269
271
|
```yaml
|
|
270
272
|
schema_version: "0.1"
|
|
271
|
-
entrypoint: "
|
|
273
|
+
entrypoint: "strategies.my_strategy.strategy.MyStrategy"
|
|
272
274
|
permissions:
|
|
273
275
|
policy: "(wallet.id == 'FORMAT_WALLET_ID') && (eth.tx.to == '0x...')"
|
|
274
276
|
adapters:
|
|
@@ -287,10 +289,10 @@ adapters:
|
|
|
287
289
|
- `name`: Adapter type identifier (e.g., "POOL", "BRAP")
|
|
288
290
|
- `capabilities`: List of capabilities required from this adapter
|
|
289
291
|
|
|
290
|
-
**Example** (`
|
|
292
|
+
**Example** (`wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml`):
|
|
291
293
|
```yaml
|
|
292
294
|
schema_version: "0.1"
|
|
293
|
-
entrypoint: "
|
|
295
|
+
entrypoint: "strategies.stablecoin_yield_strategy.strategy.StablecoinYieldStrategy"
|
|
294
296
|
permissions:
|
|
295
297
|
policy: "(wallet.id == 'FORMAT_WALLET_ID') && ((eth.tx.data[0..10] == '0x095ea7b3' && eth.tx.data[34..74] == 'f75584ef6673ad213a685a1b58cc0330b8ea22cf') || (eth.tx.to == '0xF75584eF6673aD213a685a1B58Cc0330B8eA22Cf'))"
|
|
296
298
|
adapters:
|
|
@@ -328,7 +330,7 @@ The `validate_manifests.py` script performs multi-stage validation:
|
|
|
328
330
|
1. **Schema Validation** (via Pydantic models):
|
|
329
331
|
- Loads YAML file and validates against `AdapterManifest` or `StrategyManifest` schema
|
|
330
332
|
- Checks required fields, types, and basic constraints (e.g., capabilities cannot be empty)
|
|
331
|
-
- Validates entrypoint format (must be full import path like `"
|
|
333
|
+
- Validates entrypoint format (must be full import path like `"adapters.pool_adapter.adapter.PoolAdapter"`)
|
|
332
334
|
|
|
333
335
|
2. **Entrypoint Verification**:
|
|
334
336
|
- **For Adapters**: Imports the entrypoint class and verifies it's a subclass of `BaseAdapter`
|
|
@@ -354,8 +356,8 @@ For each manifest file:
|
|
|
354
356
|
```
|
|
355
357
|
|
|
356
358
|
The script automatically discovers all manifests by scanning:
|
|
357
|
-
- `wayfinder_paths/
|
|
358
|
-
- `wayfinder_paths/
|
|
359
|
+
- `wayfinder_paths/adapters/*/manifest.yaml` for adapter manifests
|
|
360
|
+
- `wayfinder_paths/strategies/*/manifest.yaml` for strategy manifests
|
|
359
361
|
|
|
360
362
|
All errors are collected and reported at the end, with the script exiting with code 1 if any validation fails.
|
|
361
363
|
|
|
@@ -378,14 +380,14 @@ See [CONFIG_GUIDE.md](wayfinder_paths/CONFIG_GUIDE.md) for details.
|
|
|
378
380
|
|
|
379
381
|
### Authentication
|
|
380
382
|
|
|
381
|
-
Wayfinder
|
|
383
|
+
Wayfinder Paths supports two authentication methods:
|
|
382
384
|
|
|
383
385
|
#### 1. Service Account Authentication (API Key)
|
|
384
386
|
For backend services and automated systems with higher rate limits:
|
|
385
387
|
|
|
386
388
|
**Option A: Pass to Strategy Constructor**
|
|
387
389
|
```python
|
|
388
|
-
from wayfinder_paths.
|
|
390
|
+
from wayfinder_paths.strategies.stablecoin_yield_strategy.strategy import StablecoinYieldStrategy
|
|
389
391
|
|
|
390
392
|
strategy = StablecoinYieldStrategy(
|
|
391
393
|
config={...},
|
|
@@ -411,7 +413,9 @@ export WAYFINDER_API_KEY="sk_live_abc123..."
|
|
|
411
413
|
}
|
|
412
414
|
```
|
|
413
415
|
|
|
414
|
-
**Priority Order:** Constructor parameter > `config.json` > `WAYFINDER_API_KEY` environment variable
|
|
416
|
+
**Priority Order:** Constructor parameter > `config.json` (user.api_key or system.api_key) > `WAYFINDER_API_KEY` environment variable
|
|
417
|
+
|
|
418
|
+
**Note:** API keys in `config.json` are loaded directly by `WayfinderClient` via `_load_config_credentials()`, not through the `UserConfig` or `SystemConfig` dataclasses. This allows flexible credential loading.
|
|
415
419
|
|
|
416
420
|
#### 2. Personal Access Authentication (OAuth)
|
|
417
421
|
For standalone SDK users with username/password:
|
|
@@ -431,6 +435,7 @@ For standalone SDK users with username/password:
|
|
|
431
435
|
- When an API key is available, it's used for all API requests (including public endpoints) for rate limiting
|
|
432
436
|
- If no API key is found, the system falls back to OAuth authentication
|
|
433
437
|
- All clients created by adapters automatically inherit the API key discovery mechanism
|
|
438
|
+
- API keys in `config.json` are loaded directly by `WayfinderClient._load_config_credentials()` from `user.api_key` or `system.api_key`, not stored in the `UserConfig` or `SystemConfig` dataclasses
|
|
434
439
|
|
|
435
440
|
See [CONFIG_GUIDE.md](wayfinder_paths/CONFIG_GUIDE.md) for detailed authentication documentation.
|
|
436
441
|
|
|
@@ -439,7 +444,7 @@ See [CONFIG_GUIDE.md](wayfinder_paths/CONFIG_GUIDE.md) for detailed authenticati
|
|
|
439
444
|
Adapters connect to exchanges and DeFi protocols using the client system.
|
|
440
445
|
|
|
441
446
|
```python
|
|
442
|
-
# wayfinder_paths/
|
|
447
|
+
# wayfinder_paths/adapters/my_adapter/adapter.py
|
|
443
448
|
from wayfinder_paths.core.adapters.BaseAdapter import BaseAdapter
|
|
444
449
|
from wayfinder_paths.core.clients.PoolClient import PoolClient
|
|
445
450
|
|
|
@@ -469,10 +474,10 @@ class MyAdapter(BaseAdapter):
|
|
|
469
474
|
Strategies implement trading logic using adapters and the unified client system.
|
|
470
475
|
|
|
471
476
|
```python
|
|
472
|
-
# wayfinder_paths/
|
|
477
|
+
# wayfinder_paths/strategies/my_strategy/strategy.py
|
|
473
478
|
from wayfinder_paths.core.services.web3_service import DefaultWeb3Service
|
|
474
479
|
from wayfinder_paths.core.strategies.Strategy import StatusDict, StatusTuple, Strategy
|
|
475
|
-
from wayfinder_paths.
|
|
480
|
+
from wayfinder_paths.adapters.balance_adapter.adapter import BalanceAdapter
|
|
476
481
|
|
|
477
482
|
|
|
478
483
|
class MyStrategy(Strategy):
|
|
@@ -495,7 +500,7 @@ class MyStrategy(Strategy):
|
|
|
495
500
|
async def deposit(
|
|
496
501
|
self, main_token_amount: float = 0.0, gas_token_amount: float = 0.0
|
|
497
502
|
) -> StatusTuple:
|
|
498
|
-
"""Move funds from main wallet into the
|
|
503
|
+
"""Move funds from main wallet into the strategy wallet."""
|
|
499
504
|
if main_token_amount <= 0:
|
|
500
505
|
return (False, "Nothing to deposit")
|
|
501
506
|
|
|
@@ -518,7 +523,7 @@ class MyStrategy(Strategy):
|
|
|
518
523
|
"""Report balances back to the runner"""
|
|
519
524
|
success, balance = await self.balance_adapter.get_balance(
|
|
520
525
|
token_id=self.config.get("token_id"),
|
|
521
|
-
wallet_address=self.config.get("
|
|
526
|
+
wallet_address=self.config.get("strategy_wallet", {}).get("address"),
|
|
522
527
|
)
|
|
523
528
|
return {
|
|
524
529
|
"portfolio_value": float(balance or 0),
|
|
@@ -529,10 +534,10 @@ class MyStrategy(Strategy):
|
|
|
529
534
|
|
|
530
535
|
### Built-in adapters
|
|
531
536
|
|
|
532
|
-
- **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.
|
|
533
538
|
- **POOL (PoolAdapter)**: composes `PoolClient` to fetch pools, llama analytics, combined reports, high-yield searches, and search helpers.
|
|
534
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`.
|
|
535
|
-
- **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.
|
|
536
541
|
- **TOKEN (TokenAdapter)**: lightweight wrapper around `TokenClient` for token metadata, live price snapshots, and gas token lookups.
|
|
537
542
|
- **HYPERLEND (HyperlendAdapter)**: connects to `HyperlendClient` for lending/supply caps inside the HyperLend strategy.
|
|
538
543
|
|
|
@@ -546,14 +551,16 @@ Each strategy manifest declares which adapters it needs and which capabilities i
|
|
|
546
551
|
|
|
547
552
|
```bash
|
|
548
553
|
# 1. Generate test wallets (required!)
|
|
549
|
-
|
|
554
|
+
# Creates a main wallet (or use 'just create-strategy' which auto-creates wallets)
|
|
555
|
+
just create-wallets
|
|
556
|
+
# Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
|
|
550
557
|
|
|
551
558
|
# 2. Run smoke tests
|
|
552
559
|
poetry run pytest -k smoke -v
|
|
553
560
|
|
|
554
561
|
# 3. Test your specific contribution
|
|
555
|
-
poetry run pytest wayfinder_paths/
|
|
556
|
-
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
|
|
557
564
|
```
|
|
558
565
|
|
|
559
566
|
### Testing Your Contribution
|
|
@@ -577,7 +584,9 @@ cd wayfinder-paths
|
|
|
577
584
|
poetry install
|
|
578
585
|
|
|
579
586
|
# Generate test wallets (essential!)
|
|
580
|
-
|
|
587
|
+
# Creates a main wallet (or use 'just create-strategy' which auto-creates wallets)
|
|
588
|
+
just create-wallets
|
|
589
|
+
# Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
|
|
581
590
|
|
|
582
591
|
# Copy and configure
|
|
583
592
|
cp wayfinder_paths/config.example.json config.json
|
|
@@ -598,14 +607,17 @@ poetry run python wayfinder_paths/run_strategy.py stablecoin_yield_strategy --de
|
|
|
598
607
|
**Before running any strategies, generate test wallets.** This creates `wallets.json` in the repository root with throwaway wallets for local testing:
|
|
599
608
|
|
|
600
609
|
```bash
|
|
601
|
-
# Essential: Create
|
|
602
|
-
|
|
610
|
+
# Essential: Create main wallet for testing
|
|
611
|
+
just create-wallets
|
|
612
|
+
# Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
|
|
603
613
|
```
|
|
604
614
|
|
|
605
615
|
This creates:
|
|
606
|
-
- `
|
|
616
|
+
- `main` wallet - your main wallet for testing (labeled "main" in wallets.json)
|
|
607
617
|
- `wallets.json` - wallet addresses and private keys for local testing
|
|
608
618
|
|
|
619
|
+
**Note:** Strategy-specific wallets are automatically created when you use `just create-strategy "Strategy Name"`. For manual creation, use `just create-wallet "strategy_name"` or `poetry run python wayfinder_paths/scripts/make_wallets.py --label "strategy_name"`.
|
|
620
|
+
|
|
609
621
|
**Important:** These wallets are for testing only. Never use them with real funds or on mainnet.
|
|
610
622
|
|
|
611
623
|
**Per-Strategy Wallets:** Each strategy should have its own dedicated wallet. When you create a new strategy using `just create-strategy`, a wallet is automatically generated with a label matching the strategy directory name. The system automatically uses this wallet when running the strategy. See [CONFIG_GUIDE.md](wayfinder_paths/CONFIG_GUIDE.md) for details.
|
|
@@ -613,14 +625,14 @@ This creates:
|
|
|
613
625
|
Additional options:
|
|
614
626
|
|
|
615
627
|
```bash
|
|
616
|
-
# Add 3 extra
|
|
617
|
-
poetry run python wayfinder_paths/scripts/make_wallets.py
|
|
628
|
+
# Add 3 extra wallets for multi-account testing
|
|
629
|
+
poetry run python wayfinder_paths/scripts/make_wallets.py -n 3
|
|
618
630
|
|
|
619
|
-
#
|
|
620
|
-
poetry run python wayfinder_paths/scripts/make_wallets.py --
|
|
631
|
+
# Create a wallet with a specific label (e.g., for a strategy)
|
|
632
|
+
poetry run python wayfinder_paths/scripts/make_wallets.py --label "my_strategy_name"
|
|
621
633
|
|
|
622
|
-
#
|
|
623
|
-
poetry run python wayfinder_paths/scripts/make_wallets.py
|
|
634
|
+
# Generate keystore files (for geth/web3 compatibility)
|
|
635
|
+
poetry run python wayfinder_paths/scripts/make_wallets.py -n 1 --keystore-password "my-password"
|
|
624
636
|
```
|
|
625
637
|
|
|
626
638
|
### Configuration
|
|
@@ -645,6 +657,65 @@ cp wayfinder_paths/config.example.json config.json
|
|
|
645
657
|
poetry run python wayfinder_paths/run_strategy.py stablecoin_yield_strategy --config config.json
|
|
646
658
|
```
|
|
647
659
|
|
|
660
|
+
## 📦 Versioning
|
|
661
|
+
|
|
662
|
+
This package follows [Semantic Versioning](https://semver.org/) (SemVer) and is published to PyPI as a public package.
|
|
663
|
+
|
|
664
|
+
### Version Format: MAJOR.MINOR.PATCH
|
|
665
|
+
|
|
666
|
+
- **MAJOR** (X.0.0): Breaking changes that require code updates
|
|
667
|
+
- **MINOR** (0.X.0): New features, backward compatible
|
|
668
|
+
- **PATCH** (0.0.X): Bug fixes, backward compatible
|
|
669
|
+
|
|
670
|
+
### Version Bumping Rules
|
|
671
|
+
|
|
672
|
+
- **PATCH**: Bug fixes, security patches, documentation updates
|
|
673
|
+
- **MINOR**: New adapters, new strategies, new features (backward compatible)
|
|
674
|
+
- **MAJOR**: Breaking API changes, removed features, incompatible changes
|
|
675
|
+
|
|
676
|
+
### Important Notes
|
|
677
|
+
|
|
678
|
+
- **Versions are immutable**: Once published to PyPI, a version cannot be changed or deleted
|
|
679
|
+
- **Versions must be unique**: Each release must have a new, unique version number
|
|
680
|
+
- **Publishing is restricted**: Only publish from the `main` branch to prevent accidental releases
|
|
681
|
+
|
|
682
|
+
### Publishing Workflow and Order of Operations
|
|
683
|
+
|
|
684
|
+
**Critical**: Changes must follow this strict order:
|
|
685
|
+
|
|
686
|
+
1. **Merge to main**: All changes must be merged to the `main` branch first
|
|
687
|
+
2. **Publish to PyPI**: The new version must be published to PyPI from `main` branch
|
|
688
|
+
3. **Dependent changes**: Only after publishing can dependent changes be merged in other applications
|
|
689
|
+
|
|
690
|
+
**Why this order matters:**
|
|
691
|
+
- Other applications depend on this package from PyPI
|
|
692
|
+
- They cannot merge changes that depend on new versions until those versions are available on PyPI
|
|
693
|
+
- Publishing from `main` ensures the published version matches what's in the repository
|
|
694
|
+
- This prevents dependency resolution failures in downstream applications
|
|
695
|
+
|
|
696
|
+
**Example workflow:**
|
|
697
|
+
```bash
|
|
698
|
+
# 1. Make changes in a feature branch
|
|
699
|
+
git checkout -b feature/new-adapter
|
|
700
|
+
# ... make changes ...
|
|
701
|
+
git commit -m "Add new adapter"
|
|
702
|
+
|
|
703
|
+
# 2. Merge to main
|
|
704
|
+
git checkout main
|
|
705
|
+
git merge feature/new-adapter
|
|
706
|
+
|
|
707
|
+
# 3. Bump version in pyproject.toml (e.g., 0.1.3 → 0.2.0)
|
|
708
|
+
# Edit pyproject.toml: version = "0.2.0"
|
|
709
|
+
git commit -m "Bump version to 0.2.0"
|
|
710
|
+
git push origin main
|
|
711
|
+
|
|
712
|
+
# 4. Publish to PyPI (must be on main branch)
|
|
713
|
+
just publish
|
|
714
|
+
|
|
715
|
+
# 5. Now dependent applications can update their dependencies
|
|
716
|
+
# pip install wayfinder-paths==0.2.0
|
|
717
|
+
```
|
|
718
|
+
|
|
648
719
|
## 📦 Publishing
|
|
649
720
|
|
|
650
721
|
Publish to PyPI:
|
|
@@ -654,6 +725,12 @@ export PUBLISH_TOKEN="your_pypi_token"
|
|
|
654
725
|
just publish
|
|
655
726
|
```
|
|
656
727
|
|
|
728
|
+
**Important:**
|
|
729
|
+
- ⚠️ **Publishing is only allowed from the `main` branch** - the publish command will fail if run from any other branch
|
|
730
|
+
- ⚠️ **Versions must be unique** - ensure the version in `pyproject.toml` has been bumped and is unique
|
|
731
|
+
- ⚠️ **Follow the order of operations** - see [Versioning](#-versioning) section above for the required workflow
|
|
732
|
+
- ⚠️ **Versions are immutable** - once published, a version cannot be changed or deleted from PyPI
|
|
733
|
+
|
|
657
734
|
Install the published package:
|
|
658
735
|
|
|
659
736
|
```bash
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
wayfinder_paths/CONFIG_GUIDE.md,sha256=PN2ClAZ8FCF16_sstaUxbfvQkVAyXdtRvTrrj-qJPuk,13397
|
|
2
|
+
wayfinder_paths/__init__.py,sha256=JKuLfydWVBIb3fH9o-KBdEdq_7nLt0jAq2y4Al7veMU,404
|
|
3
|
+
wayfinder_paths/abis/generic/erc20.json,sha256=geyzVzdTNt3u1XHKxi4seszP_GIWIzPTl0FYgiftRnM,9336
|
|
4
|
+
wayfinder_paths/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
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
|
+
wayfinder_paths/adapters/balance_adapter/manifest.yaml,sha256=vp2VoQJf-TxFxgkTsUJ1AEeeOoImM_QjrGYCmjyEQYI,189
|
|
9
|
+
wayfinder_paths/adapters/balance_adapter/test_adapter.py,sha256=MzwElYxtdffIJnk9xtWCJml8HG1n8Z0omJY2X9MVmDg,2873
|
|
10
|
+
wayfinder_paths/adapters/brap_adapter/README.md,sha256=euWkSBR6OkYtebhvdNR_PL64sKbzKD5bg5hrYTIWZ1c,7905
|
|
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=9Nr_pUhIf5ik98pTg-6pidDtnxH_vt_ZkQHchpAG3oE,26778
|
|
13
|
+
wayfinder_paths/adapters/brap_adapter/examples.json,sha256=KWuAklUspd2uvk0s2ey8gczg4nbzhdwxQqzhascyMiQ,5287
|
|
14
|
+
wayfinder_paths/adapters/brap_adapter/manifest.yaml,sha256=bJ8o4j9ZPjfnLxXxHfekoXKUHoBkXmWQ3nokTH1aya4,240
|
|
15
|
+
wayfinder_paths/adapters/brap_adapter/test_adapter.py,sha256=36ixuv11Ql3pWgImmoVuE1EqVpsvT5dToGvN9LjpWpE,10874
|
|
16
|
+
wayfinder_paths/adapters/hyperlend_adapter/__init__.py,sha256=DsWOnEn-Tlu9ZoIoGaFeSqOYI3b4lXGVK3_FTntWpLw,139
|
|
17
|
+
wayfinder_paths/adapters/hyperlend_adapter/adapter.py,sha256=QevMiOrztvTRHx7vA_dAQGX3ioUFdLY4aVOfsT-DXX8,10555
|
|
18
|
+
wayfinder_paths/adapters/hyperlend_adapter/manifest.yaml,sha256=Ugc0jNf3txAQRGAXlVvTN3Mbdc4-fUMS1yVs0SZcBwI,259
|
|
19
|
+
wayfinder_paths/adapters/hyperlend_adapter/test_adapter.py,sha256=ZnEiJxHRlcI4ijDfwmL2KEsL6A8dcWDYNhhxCEezWI4,9330
|
|
20
|
+
wayfinder_paths/adapters/ledger_adapter/README.md,sha256=OIFbJIlck91K3kBKbkPfOWUDx7tJgDjwCAcBLm7FNK4,4104
|
|
21
|
+
wayfinder_paths/adapters/ledger_adapter/__init__.py,sha256=DK9GShIUiQ57YKSqhCKoS43GCweBxi0lzkUQ9sYVxUA,96
|
|
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
|
+
wayfinder_paths/adapters/pool_adapter/__init__.py,sha256=rv56pYzz2Gqiz33uoPJktCQRe3CRt8U9ry5GbjVgK3A,90
|
|
28
|
+
wayfinder_paths/adapters/pool_adapter/adapter.py,sha256=jXGq5F-xHXF42JN5R0Hd6LEGDds1qAiwOCGQ4etzuPE,9642
|
|
29
|
+
wayfinder_paths/adapters/pool_adapter/examples.json,sha256=hLH74Oy6WlrEvAIOjwqsjpcCDxC-N0efWeLa_-TbntM,3202
|
|
30
|
+
wayfinder_paths/adapters/pool_adapter/manifest.yaml,sha256=z-OQYBsl2RdV6M34RZzqtQTAFHtQod0po_JD_-9ElNM,217
|
|
31
|
+
wayfinder_paths/adapters/pool_adapter/test_adapter.py,sha256=QiEYyLFo0S6gKJuk7j9Md0-mN6yNY5heKDQ_Sm1Yln8,7721
|
|
32
|
+
wayfinder_paths/adapters/token_adapter/README.md,sha256=d2tMJte6HBu62CCYXdjS8GHZXj5f2fU03uZAO6pscBI,2698
|
|
33
|
+
wayfinder_paths/adapters/token_adapter/__init__.py,sha256=nEmxrvffEygn3iKH3cZTNLkhnUUhlUAEtshmrFRAjq8,62
|
|
34
|
+
wayfinder_paths/adapters/token_adapter/adapter.py,sha256=JEb7A8wJYHxENFhJ6upAgnQAbPZeVfYi6OGs1hiHxnA,3432
|
|
35
|
+
wayfinder_paths/adapters/token_adapter/examples.json,sha256=RW-3xazj4wbTPl-AVrzduRH1NCXx8m7-06bRMOUJ-lc,3626
|
|
36
|
+
wayfinder_paths/adapters/token_adapter/manifest.yaml,sha256=KQgbHAUaJ6JYjTlOJ9HGeRxwmICXVV01qRwW8wJPKMM,143
|
|
37
|
+
wayfinder_paths/adapters/token_adapter/test_adapter.py,sha256=xnJ-nglMnCFqYnH9D-xcnIy-pmPZK6_puNZ9hPthIMI,4701
|
|
38
|
+
wayfinder_paths/config.example.json,sha256=gDvS7W-cbaNe2IV7Q72di_PYpCDKODojELaXdd77Gx4,605
|
|
39
|
+
wayfinder_paths/conftest.py,sha256=pqDNijXn9_zmbAdkt_2a18UQLjtsDkNTBJVTgC6H2nA,1136
|
|
40
|
+
wayfinder_paths/core/__init__.py,sha256=tcpxajbeBGbxFDtI5N05BOV7cMzduuwRbKh3O-DjiRI,358
|
|
41
|
+
wayfinder_paths/core/adapters/BaseAdapter.py,sha256=bzc3ER7aKOsmk9cxyoJxGdI54eibbpcMC8nGYJUrsp0,2033
|
|
42
|
+
wayfinder_paths/core/adapters/__init__.py,sha256=ZqzkliXm5RjWxYJyJR88XHb3npZFiThk7HoVZe3JF60,108
|
|
43
|
+
wayfinder_paths/core/adapters/base.py,sha256=j10cZ5NwqaAhN2mH_j24tG8r7_7NWtx8F6S7sJ9wOi8,100
|
|
44
|
+
wayfinder_paths/core/adapters/models.py,sha256=cQEZMjKZtUz_M29ijBXhZeIfR7FSYlunxov8pMIuUxs,913
|
|
45
|
+
wayfinder_paths/core/clients/AuthClient.py,sha256=scz8GvnabNYAQq_XYDcLP2lf2LZqurQOixA7MMAfbCY,2796
|
|
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
|
|
56
|
+
wayfinder_paths/core/clients/__init__.py,sha256=oNq6fQW8hUnpkuIZxdbOTLPayJRLA6S-k8e7wqsH_7c,1581
|
|
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
|
|
60
|
+
wayfinder_paths/core/constants/__init__.py,sha256=KH-TtfNBJgp0WfKIxvHnvS521odH8RS3Qhl8cQhr4Ys,663
|
|
61
|
+
wayfinder_paths/core/constants/base.py,sha256=9XEcgsT_0EMkCoMMdEkvQjjEW9G_8SM3chOBxPpWj00,1169
|
|
62
|
+
wayfinder_paths/core/constants/erc20_abi.py,sha256=3ljIyUl6FesoEa4uprwNo-nF0Q5s73M9WEqXLw6ONI4,3214
|
|
63
|
+
wayfinder_paths/core/constants/hyperlend_abi.py,sha256=nIaqsfMl5-_InYN82pjz0FIKsT-AnNkwz0DIc9VrZSc,4331
|
|
64
|
+
wayfinder_paths/core/engine/StrategyJob.py,sha256=DqwkPu5JHp00xkDmj7kyUqs9U-VP0k-OBlVipjEzk14,7257
|
|
65
|
+
wayfinder_paths/core/engine/__init__.py,sha256=WZ2KWnmOZnBocYrqdwq6EUHp6lmTyrKyXgHSHyQswnU,108
|
|
66
|
+
wayfinder_paths/core/engine/manifest.py,sha256=rkrALipqwqR61lZu_lF1jJj1aqJk6ZskuXokcB1g0HI,3146
|
|
67
|
+
wayfinder_paths/core/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
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
|
|
70
|
+
wayfinder_paths/core/services/local_token_txn.py,sha256=S9RJq2_fm1sqmJmn83vMo69-GQLeCkQ-20rrv0ezU1g,8049
|
|
71
|
+
wayfinder_paths/core/services/web3_service.py,sha256=_8sEpkWzSzp7dQR5OCwScypyOsEv5s2BeuO8TqB_H-w,1558
|
|
72
|
+
wayfinder_paths/core/settings.py,sha256=VqNOU84OsX_6KAWr9JdPfyxtV14yTH1uZl2zuKeiJ3g,1921
|
|
73
|
+
wayfinder_paths/core/strategies/Strategy.py,sha256=eGgiILhtqk2-AsAFW3i3basDKn1F_K-datITW66DeEQ,9281
|
|
74
|
+
wayfinder_paths/core/strategies/__init__.py,sha256=2NjvvDw6sIQGUFV4Qo1olXTxUOY3GmCM8Ivz_J1FSmc,157
|
|
75
|
+
wayfinder_paths/core/strategies/base.py,sha256=-s0qeiGZl5CHTUL2PavGXM7ACkNlaa0c4jeZR_4DuBM,155
|
|
76
|
+
wayfinder_paths/core/strategies/descriptors.py,sha256=yZ9vnaZo5xYUpHfdJTumxYdDkIY8odp2fiezf_v0Cro,1622
|
|
77
|
+
wayfinder_paths/core/utils/__init__.py,sha256=TEylMYHnG37Z3mizSmw28bUm0vyNBFzf0Nc8dB_7l1A,73
|
|
78
|
+
wayfinder_paths/core/utils/evm_helpers.py,sha256=sJUGpwbc3jD9h1BaaYC4mPDs25S3YKyoY1NfvHq9BBg,6491
|
|
79
|
+
wayfinder_paths/core/utils/wallets.py,sha256=tGgVxDW2ZvkvJIb6yow1cirrqhQ67_X9IqxZocBEy2k,2438
|
|
80
|
+
wayfinder_paths/core/wallets/README.md,sha256=gwzFapFnpArdIyUz0NdYOq5Nm9_uqDYuFddKAZJ0Ss4,3745
|
|
81
|
+
wayfinder_paths/core/wallets/WalletManager.py,sha256=sptj0Dya9iM87BDzUktrYM_Mw33xyVJNrRUTVfBjHGw,1870
|
|
82
|
+
wayfinder_paths/core/wallets/__init__.py,sha256=hIuhy64pJOs_8mAP7Zup28goXbT8qjBeeVYMkbqlyu8,315
|
|
83
|
+
wayfinder_paths/policies/enso.py,sha256=oytco04eeGjiRbZPGFE1YpH4NxvV0tfVM14QmlyzjkY,428
|
|
84
|
+
wayfinder_paths/policies/erc20.py,sha256=cmiG03gz82LRUgwf7BD_yoZ9QTiIvIURL40y48NwaFo,958
|
|
85
|
+
wayfinder_paths/policies/evm.py,sha256=8fJpjAl6XVxr51sVMw_VkWmIaI_lj2T7qrLcR8_sWgs,713
|
|
86
|
+
wayfinder_paths/policies/hyper_evm.py,sha256=wLkrE158rPaDjfU5q-PyRXuQ6KA67VcqWo484UHsLb8,649
|
|
87
|
+
wayfinder_paths/policies/hyperlend.py,sha256=4u0NP80t7rpHlw_nvParUN90sIXypWyXACfE0OPqFys,370
|
|
88
|
+
wayfinder_paths/policies/hyperliquid.py,sha256=hAxNtWdxavwf_a-AnlXMOmEYakkNBkrPTrvprIQqBDQ,796
|
|
89
|
+
wayfinder_paths/policies/moonwell.py,sha256=sKWLbruMKiW7Yh1DhXdVPRe0JBP-nooNybRz0G9PgvA,1605
|
|
90
|
+
wayfinder_paths/policies/prjx.py,sha256=6kfZ6OQFroFHYJl4vSWT-svwwfvoHlS_ZrcHt8nmZMU,743
|
|
91
|
+
wayfinder_paths/policies/util.py,sha256=r8xQLPvE3kU21_LG6VbkFI9sUSYltcsKunryZdHOUDA,912
|
|
92
|
+
wayfinder_paths/run_strategy.py,sha256=HRj5iY2AFWaxRKXukKUKPxaXcz4YN-fb6anSLHJaeDg,14502
|
|
93
|
+
wayfinder_paths/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
|
+
wayfinder_paths/scripts/create_strategy.py,sha256=rp2kkGXsmcAbOt1eZthV1iZ2yM6wAbjn4R10IATulOw,6275
|
|
95
|
+
wayfinder_paths/scripts/make_wallets.py,sha256=oP3i8MdU9HJT1QWUfkP7XAv2rDuZg_tbawJ-EJg3b5c,5997
|
|
96
|
+
wayfinder_paths/scripts/validate_manifests.py,sha256=sTJhCVTb8X0SFYozArVbX4AMAEv-0R1Imp4dpHfAuHE,7075
|
|
97
|
+
wayfinder_paths/strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
|
+
wayfinder_paths/strategies/config.py,sha256=5dv-8tWwoxH3Sxd9jtiw90shrLipEe3UlU-IYUBfciM,2762
|
|
99
|
+
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=8mjDUBkBEYp_GWkM0knbFIbJ2Nmb-63pNR09ztZ67qo,4596
|
|
100
|
+
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/examples.json,sha256=i1OZXRmjRYXgmGk-_VqXR1hq7VuP6h40j-PWS1W3j-A,413
|
|
101
|
+
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/manifest.yaml,sha256=__YWl6MEeTBLbNWwUyZjQky0ok1T8B1m8dHPQWtW454,240
|
|
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
|
|
105
|
+
wayfinder_paths/strategies/stablecoin_yield_strategy/examples.json,sha256=pL1DNFEvYvXKK7xXD5oQYFPQj3Cm1ocKnk6r_iZk0IY,423
|
|
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
|
|
110
|
+
wayfinder_paths/templates/adapter/adapter.py,sha256=8wdqcEwqb7XGUxl2gQvGnbFwhPi1h15ZJhB2lgtZieI,814
|
|
111
|
+
wayfinder_paths/templates/adapter/examples.json,sha256=KLHy3AgPIplAaZN0qY2A-HBMa1xXkMhIyusORovTD9w,79
|
|
112
|
+
wayfinder_paths/templates/adapter/manifest.yaml,sha256=Xr46INOnH-R9ambF7GvzhTSZgxW3qPlOtt_04xH0_50,134
|
|
113
|
+
wayfinder_paths/templates/adapter/test_adapter.py,sha256=ENjaZH-LMPGYUUbqsfXtvUQep51XjPQNv52i47rkaNk,1525
|
|
114
|
+
wayfinder_paths/templates/strategy/README.md,sha256=c7iKlgkz0FPQC3xjMlXqYaDIwC_EKr0wJ6pCLfr2Oik,5664
|
|
115
|
+
wayfinder_paths/templates/strategy/examples.json,sha256=s8UdlD5uxLITQrRMCqgiaAP0IE0tdnnLfX-Zn-OChIc,135
|
|
116
|
+
wayfinder_paths/templates/strategy/manifest.yaml,sha256=Q13sIhfE7u0wMwa8oFwMZr_twwVMprMV4c_JEQNhkz8,289
|
|
117
|
+
wayfinder_paths/templates/strategy/strategy.py,sha256=dso2jhVphsdKNd17JPwnFAFzU01-1kHlWrKPAKIKSWw,2024
|
|
118
|
+
wayfinder_paths/templates/strategy/test_strategy.py,sha256=-ktqbtJ-lXr0CVGgjFkleWmdZeT2nsyL_zt7Hq1aC1g,7692
|
|
119
|
+
wayfinder_paths/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
120
|
+
wayfinder_paths/tests/test_smoke_manifest.py,sha256=YjVzHTWys5o6Ae2cUuuJPhk-QgKxT1InDFHLjpouRiY,1267
|
|
121
|
+
wayfinder_paths/tests/test_test_coverage.py,sha256=9NrZeVmP02D4W7Qc0XjciC05bhvdTCVibYjTGfa_GQk,7893
|
|
122
|
+
wayfinder_paths/tests/test_utils.py,sha256=pxHT0QKFlyJeJo8bFnKXzWcOdi6t8rbJ0JFCBaFCBRQ,2112
|
|
123
|
+
wayfinder_paths-0.1.5.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
|
|
124
|
+
wayfinder_paths-0.1.5.dist-info/METADATA,sha256=RcIPhwnOY1-nifh2nPVoUHWeo1b1lYyZDULOZ-nWVbg,31321
|
|
125
|
+
wayfinder_paths-0.1.5.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
126
|
+
wayfinder_paths-0.1.5.dist-info/RECORD,,
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
schema_version: "0.1"
|
|
2
|
-
entrypoint: "vaults.adapters.ledger_adapter.adapter.LedgerAdapter"
|
|
3
|
-
capabilities:
|
|
4
|
-
- "ledger.read"
|
|
5
|
-
- "ledger.write"
|
|
6
|
-
- "vault.transactions"
|
|
7
|
-
- "vault.deposits"
|
|
8
|
-
- "vault.withdrawals"
|
|
9
|
-
- "vault.operations"
|
|
10
|
-
dependencies:
|
|
11
|
-
- "LedgerClient"
|