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.

Files changed (109) hide show
  1. wayfinder_paths/CONFIG_GUIDE.md +37 -32
  2. wayfinder_paths/__init__.py +3 -3
  3. wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/README.md +12 -12
  4. wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/adapter.py +12 -11
  5. wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/examples.json +1 -1
  6. wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/manifest.yaml +1 -1
  7. wayfinder_paths/{vaults/adapters → adapters}/balance_adapter/test_adapter.py +12 -6
  8. wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/README.md +2 -2
  9. wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/adapter.py +30 -23
  10. wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/manifest.yaml +1 -1
  11. wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/test_adapter.py +2 -2
  12. wayfinder_paths/adapters/hyperlend_adapter/__init__.py +7 -0
  13. wayfinder_paths/{vaults/adapters → adapters}/hyperlend_adapter/adapter.py +33 -26
  14. wayfinder_paths/{vaults/adapters → adapters}/hyperlend_adapter/manifest.yaml +1 -1
  15. wayfinder_paths/{vaults/adapters → adapters}/hyperlend_adapter/test_adapter.py +2 -2
  16. wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/README.md +27 -40
  17. wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/adapter.py +78 -75
  18. wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/examples.json +10 -4
  19. wayfinder_paths/adapters/ledger_adapter/manifest.yaml +11 -0
  20. wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/test_adapter.py +33 -28
  21. wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/README.md +2 -14
  22. wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/adapter.py +12 -19
  23. wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/manifest.yaml +1 -1
  24. wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/test_adapter.py +2 -2
  25. wayfinder_paths/{vaults/adapters → adapters}/token_adapter/README.md +1 -1
  26. wayfinder_paths/{vaults/adapters → adapters}/token_adapter/adapter.py +8 -4
  27. wayfinder_paths/adapters/token_adapter/examples.json +26 -0
  28. wayfinder_paths/{vaults/adapters → adapters}/token_adapter/manifest.yaml +1 -1
  29. wayfinder_paths/{vaults/adapters → adapters}/token_adapter/test_adapter.py +1 -1
  30. wayfinder_paths/config.example.json +3 -1
  31. wayfinder_paths/core/__init__.py +3 -3
  32. wayfinder_paths/core/adapters/BaseAdapter.py +20 -3
  33. wayfinder_paths/core/adapters/models.py +41 -0
  34. wayfinder_paths/core/clients/BRAPClient.py +21 -2
  35. wayfinder_paths/core/clients/ClientManager.py +42 -63
  36. wayfinder_paths/core/clients/HyperlendClient.py +46 -5
  37. wayfinder_paths/core/clients/LedgerClient.py +350 -124
  38. wayfinder_paths/core/clients/PoolClient.py +51 -19
  39. wayfinder_paths/core/clients/SimulationClient.py +16 -4
  40. wayfinder_paths/core/clients/TokenClient.py +34 -18
  41. wayfinder_paths/core/clients/TransactionClient.py +18 -2
  42. wayfinder_paths/core/clients/WalletClient.py +35 -4
  43. wayfinder_paths/core/clients/WayfinderClient.py +16 -5
  44. wayfinder_paths/core/clients/protocols.py +69 -62
  45. wayfinder_paths/core/clients/sdk_example.py +0 -5
  46. wayfinder_paths/core/config.py +192 -103
  47. wayfinder_paths/core/constants/base.py +17 -0
  48. wayfinder_paths/core/engine/{VaultJob.py → StrategyJob.py} +25 -19
  49. wayfinder_paths/core/engine/__init__.py +2 -2
  50. wayfinder_paths/core/engine/manifest.py +1 -1
  51. wayfinder_paths/core/services/base.py +6 -4
  52. wayfinder_paths/core/services/local_evm_txn.py +3 -2
  53. wayfinder_paths/core/settings.py +2 -2
  54. wayfinder_paths/core/strategies/Strategy.py +123 -37
  55. wayfinder_paths/core/utils/evm_helpers.py +12 -10
  56. wayfinder_paths/core/wallets/README.md +3 -3
  57. wayfinder_paths/core/wallets/WalletManager.py +3 -3
  58. wayfinder_paths/{vaults/policies → policies}/enso.py +1 -1
  59. wayfinder_paths/{vaults/policies → policies}/hyper_evm.py +2 -2
  60. wayfinder_paths/{vaults/policies → policies}/hyperlend.py +1 -1
  61. wayfinder_paths/{vaults/policies → policies}/moonwell.py +1 -1
  62. wayfinder_paths/{vaults/policies → policies}/prjx.py +1 -1
  63. wayfinder_paths/run_strategy.py +29 -27
  64. wayfinder_paths/scripts/create_strategy.py +3 -3
  65. wayfinder_paths/scripts/make_wallets.py +6 -6
  66. wayfinder_paths/scripts/validate_manifests.py +2 -2
  67. wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/README.md +10 -9
  68. wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/manifest.yaml +1 -1
  69. wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/strategy.py +47 -167
  70. wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/test_strategy.py +10 -8
  71. wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/README.md +15 -14
  72. wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/manifest.yaml +2 -2
  73. wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/strategy.py +97 -97
  74. wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/test_strategy.py +8 -8
  75. wayfinder_paths/{vaults/templates → templates}/adapter/README.md +5 -5
  76. wayfinder_paths/{vaults/templates → templates}/adapter/manifest.yaml +1 -1
  77. wayfinder_paths/{vaults/templates → templates}/adapter/test_adapter.py +1 -1
  78. wayfinder_paths/{vaults/templates → templates}/strategy/README.md +10 -9
  79. wayfinder_paths/{vaults/templates → templates}/strategy/manifest.yaml +1 -1
  80. wayfinder_paths/{vaults/templates → templates}/strategy/test_strategy.py +8 -8
  81. wayfinder_paths/tests/test_test_coverage.py +5 -5
  82. {wayfinder_paths-0.1.3.dist-info → wayfinder_paths-0.1.5.dist-info}/METADATA +146 -69
  83. wayfinder_paths-0.1.5.dist-info/RECORD +126 -0
  84. wayfinder_paths/vaults/adapters/hyperlend_adapter/__init__.py +0 -7
  85. wayfinder_paths/vaults/adapters/ledger_adapter/manifest.yaml +0 -11
  86. wayfinder_paths/vaults/adapters/token_adapter/examples.json +0 -26
  87. wayfinder_paths/vaults/strategies/__init__.py +0 -0
  88. wayfinder_paths-0.1.3.dist-info/RECORD +0 -126
  89. /wayfinder_paths/{vaults → adapters}/__init__.py +0 -0
  90. /wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/__init__.py +0 -0
  91. /wayfinder_paths/{vaults/adapters → adapters}/brap_adapter/examples.json +0 -0
  92. /wayfinder_paths/{vaults/adapters → adapters}/ledger_adapter/__init__.py +0 -0
  93. /wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/__init__.py +0 -0
  94. /wayfinder_paths/{vaults/adapters → adapters}/pool_adapter/examples.json +0 -0
  95. /wayfinder_paths/{vaults/adapters → adapters}/token_adapter/__init__.py +0 -0
  96. /wayfinder_paths/{vaults/policies → policies}/erc20.py +0 -0
  97. /wayfinder_paths/{vaults/policies → policies}/evm.py +0 -0
  98. /wayfinder_paths/{vaults/policies → policies}/hyperliquid.py +0 -0
  99. /wayfinder_paths/{vaults/policies → policies}/util.py +0 -0
  100. /wayfinder_paths/{vaults/adapters → strategies}/__init__.py +0 -0
  101. /wayfinder_paths/{vaults/strategies → strategies}/config.py +0 -0
  102. /wayfinder_paths/{vaults/strategies → strategies}/hyperlend_stable_yield_strategy/examples.json +0 -0
  103. /wayfinder_paths/{vaults/strategies → strategies}/stablecoin_yield_strategy/examples.json +0 -0
  104. /wayfinder_paths/{vaults/templates → templates}/adapter/adapter.py +0 -0
  105. /wayfinder_paths/{vaults/templates → templates}/adapter/examples.json +0 -0
  106. /wayfinder_paths/{vaults/templates → templates}/strategy/examples.json +0 -0
  107. /wayfinder_paths/{vaults/templates → templates}/strategy/strategy.py +0 -0
  108. {wayfinder_paths-0.1.3.dist-info → wayfinder_paths-0.1.5.dist-info}/LICENSE +0 -0
  109. {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
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 Vaults
23
+ # 🔐 Wayfinder Paths
24
24
 
25
25
  [![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/)
26
26
  [![Docker](https://img.shields.io/badge/docker-ready-brightgreen.svg)](https://www.docker.com/)
27
27
  [![Discord](https://img.shields.io/badge/discord-join-7289da.svg)](https://discord.gg/fUVwGMXjm3)
28
28
 
29
- Open-source platform for community-contributed crypto trading strategies and adapters. Build, test, and deploy automated trading vaults with direct wallet integration.
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 live wallets for local testing
46
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
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 & VaultJob
71
+ │ │ ├── engine/ # Trading engine & StrategyJob
71
72
  │ │ ├── strategies/ # Base strategy classes
72
73
  │ │ └── config.py # Configuration system
73
- │ ├── vaults/ # Community contributions (each artifact in its own folder)
74
- │ │ ├── adapters/ # Your exchange/protocol integrations
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
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
- │ │ └── ...
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/vaults/templates/adapter/` to `wayfinder_paths/vaults/adapters/my_adapter/`
112
- - **For strategies**: Copy `wayfinder_paths/vaults/templates/strategy/` to `wayfinder_paths/vaults/strategies/my_strategy/`
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/vaults/templates/adapter/` as a starting point
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/vaults/templates/adapter/manifest.yaml`) with:
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/vaults/templates/strategy/` manually
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/vaults/templates/strategy/manifest.yaml`) with:
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
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
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/vaults/templates/adapter wayfinder_paths/vaults/adapters/my_adapter
179
+ cp -r wayfinder_paths/templates/adapter wayfinder_paths/adapters/my_adapter
178
180
  # For strategies:
179
- cp -r wayfinder_paths/vaults/templates/strategy wayfinder_paths/vaults/strategies/my_strategy
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/vaults/strategies/your_strategy/ -v
191
- poetry run pytest wayfinder_paths/vaults/adapters/your_adapter/ -v
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/vaults/templates/adapter/manifest.yaml` as a starting point.
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: "vaults.adapters.my_adapter.adapter.MyAdapter"
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** (`vaults/adapters/pool_adapter/manifest.yaml`):
250
+ **Example** (`wayfinder_paths/adapters/pool_adapter/manifest.yaml`):
249
251
  ```yaml
250
252
  schema_version: "0.1"
251
- entrypoint: "vaults.adapters.pool_adapter.adapter.PoolAdapter"
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/vaults/templates/strategy/manifest.yaml` as a starting point.
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: "vaults.strategies.my_strategy.strategy.MyStrategy"
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** (`vaults/strategies/stablecoin_yield_strategy/manifest.yaml`):
292
+ **Example** (`wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml`):
291
293
  ```yaml
292
294
  schema_version: "0.1"
293
- entrypoint: "vaults.strategies.stablecoin_yield_strategy.strategy.StablecoinYieldStrategy"
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 `"vaults.adapters.pool_adapter.adapter.PoolAdapter"`)
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/vaults/adapters/*/manifest.yaml` for adapter manifests
358
- - `wayfinder_paths/vaults/strategies/*/manifest.yaml` for strategy manifests
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 Vaults supports two authentication methods:
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.vaults.strategies.stablecoin_yield_strategy.strategy import StablecoinYieldStrategy
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/vaults/adapters/my_adapter/adapter.py
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/vaults/strategies/my_strategy/strategy.py
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.vaults.adapters.balance_adapter.adapter import BalanceAdapter
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 vault wallet."""
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("vault_wallet", {}).get("address"),
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/vault wallets with ledger bookkeeping. Requires a `Web3Service` so it can share the same wallet provider as the strategy.
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 vault transaction summaries.
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
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
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/vaults/strategies/my_strategy/ -v # Strategy
556
- poetry run pytest wayfinder_paths/vaults/adapters/my_adapter/ -v # Adapter
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
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
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 default and vault wallets for testing
602
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault
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
- - `default` wallet - your main wallet for testing
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 unlabeled wallets for multi-account testing
617
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault -n 3
628
+ # Add 3 extra wallets for multi-account testing
629
+ poetry run python wayfinder_paths/scripts/make_wallets.py -n 3
618
630
 
619
- # Generate keystore files (for geth/web3 compatibility)
620
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault --keystore-password "my-password"
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
- # Replace existing wallets (if you need fresh test wallets)
623
- poetry run python wayfinder_paths/scripts/make_wallets.py --default --vault --override
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,7 +0,0 @@
1
- """
2
- Hyperlend Adapter
3
- """
4
-
5
- from wayfinder_paths.vaults.adapters.hyperlend_adapter.adapter import HyperlendAdapter
6
-
7
- __all__ = ["HyperlendAdapter"]
@@ -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"