wayfinder-paths 0.1.4__py3-none-any.whl → 0.1.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of wayfinder-paths might be problematic. Click here for more details.

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