wayfinder-paths 0.1.9__py3-none-any.whl → 0.1.11__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 (54) hide show
  1. wayfinder_paths/adapters/balance_adapter/README.md +1 -2
  2. wayfinder_paths/adapters/balance_adapter/adapter.py +4 -4
  3. wayfinder_paths/adapters/brap_adapter/adapter.py +139 -23
  4. wayfinder_paths/adapters/moonwell_adapter/README.md +174 -0
  5. wayfinder_paths/adapters/moonwell_adapter/__init__.py +7 -0
  6. wayfinder_paths/adapters/moonwell_adapter/adapter.py +1226 -0
  7. wayfinder_paths/adapters/moonwell_adapter/test_adapter.py +635 -0
  8. wayfinder_paths/core/clients/AuthClient.py +3 -0
  9. wayfinder_paths/core/clients/WayfinderClient.py +2 -2
  10. wayfinder_paths/core/constants/__init__.py +0 -2
  11. wayfinder_paths/core/constants/base.py +6 -2
  12. wayfinder_paths/core/constants/moonwell_abi.py +411 -0
  13. wayfinder_paths/core/engine/StrategyJob.py +3 -0
  14. wayfinder_paths/core/services/local_evm_txn.py +182 -217
  15. wayfinder_paths/core/services/local_token_txn.py +46 -26
  16. wayfinder_paths/core/strategies/descriptors.py +1 -1
  17. wayfinder_paths/core/utils/evm_helpers.py +0 -27
  18. wayfinder_paths/run_strategy.py +34 -74
  19. wayfinder_paths/scripts/create_strategy.py +2 -27
  20. wayfinder_paths/scripts/run_strategy.py +37 -7
  21. wayfinder_paths/strategies/basis_trading_strategy/strategy.py +1 -1
  22. wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md +0 -15
  23. wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py +1 -1
  24. wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/README.md +108 -0
  25. wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/examples.json +11 -0
  26. wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py +2975 -0
  27. wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/test_strategy.py +886 -0
  28. wayfinder_paths/strategies/stablecoin_yield_strategy/README.md +0 -7
  29. wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py +1 -1
  30. wayfinder_paths/templates/adapter/README.md +5 -21
  31. wayfinder_paths/templates/adapter/adapter.py +1 -2
  32. wayfinder_paths/templates/adapter/test_adapter.py +1 -1
  33. wayfinder_paths/templates/strategy/README.md +4 -21
  34. wayfinder_paths/tests/test_smoke_manifest.py +17 -2
  35. {wayfinder_paths-0.1.9.dist-info → wayfinder_paths-0.1.11.dist-info}/METADATA +60 -187
  36. {wayfinder_paths-0.1.9.dist-info → wayfinder_paths-0.1.11.dist-info}/RECORD +38 -45
  37. wayfinder_paths/CONFIG_GUIDE.md +0 -390
  38. wayfinder_paths/adapters/balance_adapter/manifest.yaml +0 -8
  39. wayfinder_paths/adapters/brap_adapter/manifest.yaml +0 -11
  40. wayfinder_paths/adapters/hyperlend_adapter/manifest.yaml +0 -10
  41. wayfinder_paths/adapters/hyperliquid_adapter/manifest.yaml +0 -8
  42. wayfinder_paths/adapters/ledger_adapter/manifest.yaml +0 -11
  43. wayfinder_paths/adapters/pool_adapter/manifest.yaml +0 -10
  44. wayfinder_paths/adapters/token_adapter/manifest.yaml +0 -6
  45. wayfinder_paths/config.example.json +0 -22
  46. wayfinder_paths/core/engine/manifest.py +0 -97
  47. wayfinder_paths/scripts/validate_manifests.py +0 -213
  48. wayfinder_paths/strategies/basis_trading_strategy/manifest.yaml +0 -23
  49. wayfinder_paths/strategies/hyperlend_stable_yield_strategy/manifest.yaml +0 -7
  50. wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml +0 -17
  51. wayfinder_paths/templates/adapter/manifest.yaml +0 -6
  52. wayfinder_paths/templates/strategy/manifest.yaml +0 -8
  53. {wayfinder_paths-0.1.9.dist-info → wayfinder_paths-0.1.11.dist-info}/LICENSE +0 -0
  54. {wayfinder_paths-0.1.9.dist-info → wayfinder_paths-0.1.11.dist-info}/WHEEL +0 -0
@@ -1,26 +1,21 @@
1
- wayfinder_paths/CONFIG_GUIDE.md,sha256=REW6wOv8r3YBctAbAjL7gsKyCUbREYmPylcgYJ5aci4,12983
2
1
  wayfinder_paths/__init__.py,sha256=YgOg-PRPT3ROh0zg6hgQyQE-YFkFGw6TM77zDvB4_sE,427
3
2
  wayfinder_paths/abis/generic/erc20.json,sha256=geyzVzdTNt3u1XHKxi4seszP_GIWIzPTl0FYgiftRnM,9336
4
3
  wayfinder_paths/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- wayfinder_paths/adapters/balance_adapter/README.md,sha256=rRq--g4y7X7UOs1KK8c0e-4f-fItZEgHnaTRw0kR76I,3683
6
- wayfinder_paths/adapters/balance_adapter/adapter.py,sha256=byfucmlGXT4_qGD4eeTvLw5X-2NHgHtiV0uOKp73CfE,8355
4
+ wayfinder_paths/adapters/balance_adapter/README.md,sha256=t8-QRfU49g9FmJ18xDGbN_k-ybWebBfM7s4bBrnyo-g,3635
5
+ wayfinder_paths/adapters/balance_adapter/adapter.py,sha256=2_OgZlHsN3js800TWwTWRoSUNn1YCnSFAY0SG6ddcAg,8379
7
6
  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
7
  wayfinder_paths/adapters/balance_adapter/test_adapter.py,sha256=Z8iTRU0Rv1UsODuVSo5q4j-DrTXMd4YRxvaxLdZE4Us,1878
10
8
  wayfinder_paths/adapters/brap_adapter/README.md,sha256=H4_ep4r17DpQ0rnTSIbRsAdnK174NGBAcHNlHhvEA7o,7880
11
9
  wayfinder_paths/adapters/brap_adapter/__init__.py,sha256=jpqxZ-Bv_8kBo-lhgO_QCWaVZNq_WwlkNBHD4RsqOJg,90
12
- wayfinder_paths/adapters/brap_adapter/adapter.py,sha256=cNyW3f5HXzcADmof505mU3RA52e01NWUPLUhMUfRMdk,24917
10
+ wayfinder_paths/adapters/brap_adapter/adapter.py,sha256=uHS0HXQQYQVJOBM_POs2kHZJ9D7i2anOj4f5L40ebYM,30204
13
11
  wayfinder_paths/adapters/brap_adapter/examples.json,sha256=KWuAklUspd2uvk0s2ey8gczg4nbzhdwxQqzhascyMiQ,5287
14
- wayfinder_paths/adapters/brap_adapter/manifest.yaml,sha256=bJ8o4j9ZPjfnLxXxHfekoXKUHoBkXmWQ3nokTH1aya4,240
15
12
  wayfinder_paths/adapters/brap_adapter/test_adapter.py,sha256=w2q35tcE7j2QG53jSm_XZgIk7OKL4O51fnFuGMVRSNQ,10754
16
13
  wayfinder_paths/adapters/hyperlend_adapter/__init__.py,sha256=DsWOnEn-Tlu9ZoIoGaFeSqOYI3b4lXGVK3_FTntWpLw,139
17
14
  wayfinder_paths/adapters/hyperlend_adapter/adapter.py,sha256=OiHIzhfTJTBk2iQs3px82DubhgTkuoPWHtgTPfAB7UQ,10260
18
- wayfinder_paths/adapters/hyperlend_adapter/manifest.yaml,sha256=Ugc0jNf3txAQRGAXlVvTN3Mbdc4-fUMS1yVs0SZcBwI,259
19
15
  wayfinder_paths/adapters/hyperlend_adapter/test_adapter.py,sha256=iLnrALVnK7JWJV2KFDqBYZlr1ShW1tjHC-kCV6-FlgE,9558
20
16
  wayfinder_paths/adapters/hyperliquid_adapter/__init__.py,sha256=QpA258RzVbxzsha86HQduAuNVG0g0qvsI5OcZunQ8DQ,467
21
17
  wayfinder_paths/adapters/hyperliquid_adapter/adapter.py,sha256=qkU_Au0rqj_vf5O6j81EikrHDk8_M8uaxltQvI3dvbU,34516
22
18
  wayfinder_paths/adapters/hyperliquid_adapter/executor.py,sha256=uibNnfsgB_KMOYpZzaSDTsiKGQPIKwZyZ6uH34-Xu4A,17447
23
- wayfinder_paths/adapters/hyperliquid_adapter/manifest.yaml,sha256=IOK5kFaOuqqEcf3EuY5oXufEaUQNoz2oBXRGVbCdSXQ,206
24
19
  wayfinder_paths/adapters/hyperliquid_adapter/paired_filler.py,sha256=nOBsrAka8PKv5h8SuoJuLTH4HYS4n0vpTIADUCyDKlA,37546
25
20
  wayfinder_paths/adapters/hyperliquid_adapter/test_adapter.py,sha256=JEDeIMSTdrgcSy4BGSVB0CixQzl3NsKpukOZ9mRu3kE,4542
26
21
  wayfinder_paths/adapters/hyperliquid_adapter/test_adapter_live.py,sha256=lnlL0njECM6C4hVlsEZ4_7wtcixIBO8qqTRO6b1yGGg,7672
@@ -30,21 +25,21 @@ wayfinder_paths/adapters/ledger_adapter/README.md,sha256=_tGIpIkg-TCYddf8d4FhJvJ
30
25
  wayfinder_paths/adapters/ledger_adapter/__init__.py,sha256=DK9GShIUiQ57YKSqhCKoS43GCweBxi0lzkUQ9sYVxUA,96
31
26
  wayfinder_paths/adapters/ledger_adapter/adapter.py,sha256=6Fjxltvn9iXp_-CZtN7lDz1Xt0lWaNQX2drx6lgeryw,10260
32
27
  wayfinder_paths/adapters/ledger_adapter/examples.json,sha256=DdqTSe4vnBrfIycQVQQ_JZom7fBGHbL7MR4ppK9ljCY,3936
33
- wayfinder_paths/adapters/ledger_adapter/manifest.yaml,sha256=121VPXNpx13vO9qoBww47Wvpi29JLn5WoIFnudCkDYs,271
34
28
  wayfinder_paths/adapters/ledger_adapter/test_adapter.py,sha256=Z1-rPP9k5fI-8ofWMKgU3syzNegKGH_hGO6CKApQj1c,7470
29
+ wayfinder_paths/adapters/moonwell_adapter/README.md,sha256=PyQllVXgW0aUUoWhAZ5phLPAxtR9A5GkwesnZznckV8,5465
30
+ wayfinder_paths/adapters/moonwell_adapter/__init__.py,sha256=Gf6AM4BylxxPenUQ_cveUg70QcB9i61SIYaCsXMSjXw,135
31
+ wayfinder_paths/adapters/moonwell_adapter/adapter.py,sha256=DwUgY03ECTrIr8ulbp4_Ur_ezNK1dkLcNXAkFu3oIxU,45191
32
+ wayfinder_paths/adapters/moonwell_adapter/test_adapter.py,sha256=DLbbCW6ytjKY2C5aQUrW-YBFyrXjush9qbGWiuL42DM,23440
35
33
  wayfinder_paths/adapters/pool_adapter/README.md,sha256=JJZ5V-RpDfG-D0-UxyLEYMorPCORNPUaaLpccB5Oslk,2848
36
34
  wayfinder_paths/adapters/pool_adapter/__init__.py,sha256=rv56pYzz2Gqiz33uoPJktCQRe3CRt8U9ry5GbjVgK3A,90
37
35
  wayfinder_paths/adapters/pool_adapter/adapter.py,sha256=-XfmOHqKIr2Q8iyfyKrwIv6bYlyTDDL0WX-XdtKGFqQ,2793
38
36
  wayfinder_paths/adapters/pool_adapter/examples.json,sha256=3eLXQIECR3tmUJUeX5wAhiJwFwPMYsUhzkc1i8vUAX8,923
39
- wayfinder_paths/adapters/pool_adapter/manifest.yaml,sha256=z-OQYBsl2RdV6M34RZzqtQTAFHtQod0po_JD_-9ElNM,217
40
37
  wayfinder_paths/adapters/pool_adapter/test_adapter.py,sha256=wtdr-IzfhTeS3oBjZLPHUxwYP-3o6tlir3kA6C7lbcE,2709
41
38
  wayfinder_paths/adapters/token_adapter/README.md,sha256=TXn7pYQ6bCAiYNl-avem3_Hoz0p3JVyyThxObr59s8k,2673
42
39
  wayfinder_paths/adapters/token_adapter/__init__.py,sha256=nEmxrvffEygn3iKH3cZTNLkhnUUhlUAEtshmrFRAjq8,62
43
40
  wayfinder_paths/adapters/token_adapter/adapter.py,sha256=JEb7A8wJYHxENFhJ6upAgnQAbPZeVfYi6OGs1hiHxnA,3432
44
41
  wayfinder_paths/adapters/token_adapter/examples.json,sha256=RW-3xazj4wbTPl-AVrzduRH1NCXx8m7-06bRMOUJ-lc,3626
45
- wayfinder_paths/adapters/token_adapter/manifest.yaml,sha256=KQgbHAUaJ6JYjTlOJ9HGeRxwmICXVV01qRwW8wJPKMM,143
46
42
  wayfinder_paths/adapters/token_adapter/test_adapter.py,sha256=oEhV5OooRh1oGnaTTMKtdU9oqvHBKR25KgL6-ZB6Mzo,4304
47
- wayfinder_paths/config.example.json,sha256=gDvS7W-cbaNe2IV7Q72di_PYpCDKODojELaXdd77Gx4,605
48
43
  wayfinder_paths/conftest.py,sha256=pqDNijXn9_zmbAdkt_2a18UQLjtsDkNTBJVTgC6H2nA,1136
49
44
  wayfinder_paths/core/__init__.py,sha256=AJK8oS2dCVuJ2pmSxqXOCvuWacNaVEU3yALEqsD3rog,398
50
45
  wayfinder_paths/core/adapters/BaseAdapter.py,sha256=bzc3ER7aKOsmk9cxyoJxGdI54eibbpcMC8nGYJUrsp0,2033
@@ -55,7 +50,7 @@ wayfinder_paths/core/analytics/__init__.py,sha256=AtcSpt2vPpCNgdDaFDLhyZZpKa0QXK
55
50
  wayfinder_paths/core/analytics/bootstrap.py,sha256=lb_PjL4Vh3O2F8eXgvAbnAFevJczRF59ODG-dxtpCZ8,1782
56
51
  wayfinder_paths/core/analytics/stats.py,sha256=qE6h0j8TZAbqbVpDeYlVKe0YbV5CENQcHbREzKyZ_s8,1426
57
52
  wayfinder_paths/core/analytics/test_analytics.py,sha256=DNkVTsbWPLc9I1eeCD5wsPPqUDgN-npbGRhBgMKn3GM,5580
58
- wayfinder_paths/core/clients/AuthClient.py,sha256=lHB0bhGpStWKropwC8d4qwZyOuKH_Xti9afu0nlsYRI,2711
53
+ wayfinder_paths/core/clients/AuthClient.py,sha256=scz8GvnabNYAQq_XYDcLP2lf2LZqurQOixA7MMAfbCY,2796
59
54
  wayfinder_paths/core/clients/BRAPClient.py,sha256=-cL05ELlroi3pUfT_5nF8Axie2a0n19npnuP408bkAQ,3744
60
55
  wayfinder_paths/core/clients/ClientManager.py,sha256=pZ4e8XgwDYceCUBFyyemexAH8pqZCAN47iAVVwJWW2Q,7239
61
56
  wayfinder_paths/core/clients/HyperlendClient.py,sha256=6yAhojEbjrRC7YLckwGL_2z5lwI4xnrRVNzxspqKSTg,6173
@@ -63,30 +58,30 @@ wayfinder_paths/core/clients/LedgerClient.py,sha256=M6VlG0yq3H4rQt6qRxc0QQVd7GoP
63
58
  wayfinder_paths/core/clients/PoolClient.py,sha256=EMIRRw7nh2bha-Qb5uOcIRgbnnu_v5FIvDU0D61nXGI,3475
64
59
  wayfinder_paths/core/clients/TokenClient.py,sha256=zg39K-uA1ObkNEcxoXviA1QYSd-fxQXxjBHFOeClY9E,2788
65
60
  wayfinder_paths/core/clients/WalletClient.py,sha256=xG-b5YW1Wps-Lw1JFR3OwAGq0oKMvgIp1crXWd31guE,2604
66
- wayfinder_paths/core/clients/WayfinderClient.py,sha256=JsU8u-YUCc32jPSSgN6iGqGTGlCdtb3unkR8rpct6Fo,10329
61
+ wayfinder_paths/core/clients/WayfinderClient.py,sha256=jhrCa3lQXVsp41y19GLztrSSFQiD6hSD2P8dWeHBoNE,10397
67
62
  wayfinder_paths/core/clients/__init__.py,sha256=eKbB81C9ZphAKH1uKwkqOmVHtEwFdkDuZLVAQXQXa5M,1254
68
63
  wayfinder_paths/core/clients/protocols.py,sha256=yUDz2dEnO-dDZY5pJfDtcvp5rtsoEQYE4G5IQTGLxfA,8469
69
64
  wayfinder_paths/core/clients/sdk_example.py,sha256=Y6mSyHfsWcOje6E-geNI0C4CQ6uyZaD3V9Q8kPM53eo,2969
70
65
  wayfinder_paths/core/config.py,sha256=ktogrNlE4DSf1DZONN4_C-sjjuoMFqQtS7chx2KDVYY,15382
71
- wayfinder_paths/core/constants/__init__.py,sha256=KH-TtfNBJgp0WfKIxvHnvS521odH8RS3Qhl8cQhr4Ys,663
72
- wayfinder_paths/core/constants/base.py,sha256=9XEcgsT_0EMkCoMMdEkvQjjEW9G_8SM3chOBxPpWj00,1169
66
+ wayfinder_paths/core/constants/__init__.py,sha256=upAVwHDgMXJ3DWaAuXo52UZktS8NZ17s5XwVH0qxgzg,591
67
+ wayfinder_paths/core/constants/base.py,sha256=BYQAD72XrsY6WRrOMIlUOpXLVANS7EYaS5Ell4Nj1H4,1551
73
68
  wayfinder_paths/core/constants/erc20_abi.py,sha256=3ljIyUl6FesoEa4uprwNo-nF0Q5s73M9WEqXLw6ONI4,3214
74
69
  wayfinder_paths/core/constants/hyperlend_abi.py,sha256=nIaqsfMl5-_InYN82pjz0FIKsT-AnNkwz0DIc9VrZSc,4331
75
- wayfinder_paths/core/engine/StrategyJob.py,sha256=YMgIdtpEVVDhl1FnheaS-HydJT3fwq7k0oQWJaxmpz0,7164
70
+ wayfinder_paths/core/constants/moonwell_abi.py,sha256=ALb-kKdfF9aUtEHR8OlqvA-3zJ48N66RvVptTJyCfe4,13135
71
+ wayfinder_paths/core/engine/StrategyJob.py,sha256=DqwkPu5JHp00xkDmj7kyUqs9U-VP0k-OBlVipjEzk14,7257
76
72
  wayfinder_paths/core/engine/__init__.py,sha256=WZ2KWnmOZnBocYrqdwq6EUHp6lmTyrKyXgHSHyQswnU,108
77
- wayfinder_paths/core/engine/manifest.py,sha256=rkrALipqwqR61lZu_lF1jJj1aqJk6ZskuXokcB1g0HI,3146
78
73
  wayfinder_paths/core/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
74
  wayfinder_paths/core/services/base.py,sha256=94Wvs7Ym7tK9J3k9lEOhSSIC7ptnMJ161dYtF4XTSZ8,4096
80
- wayfinder_paths/core/services/local_evm_txn.py,sha256=XqXw1djXd7N-SAoPFWyNWV9FCSZafLD-PFTirF8zi_w,14281
81
- wayfinder_paths/core/services/local_token_txn.py,sha256=9iAky-HEIyTzREUHubf9687m7O7lxXL5cSHhqb5FUiI,7767
75
+ wayfinder_paths/core/services/local_evm_txn.py,sha256=0SJTTIUNx91bm0XzoqPUUfveNMPPYTUFTMHNFyoJ0ao,11968
76
+ wayfinder_paths/core/services/local_token_txn.py,sha256=YQjuHjdyGwVfAZt3FGMkSKoc34bRiJrWRiR5pXJmL9U,8556
82
77
  wayfinder_paths/core/services/web3_service.py,sha256=7iR7bfqfUQCQcdfEWVGqy04PZBtZTuzCDpfLt1a-4OI,1485
83
78
  wayfinder_paths/core/settings.py,sha256=aJdy2bRcJtufr4TZnu30R2iv---Ru4s6nxKo-j22uKQ,1962
84
79
  wayfinder_paths/core/strategies/Strategy.py,sha256=nEzry8V-FGSM-S1eBmT35Ba2cVOJn3hNNWenpTMAVv8,9455
85
80
  wayfinder_paths/core/strategies/__init__.py,sha256=2NjvvDw6sIQGUFV4Qo1olXTxUOY3GmCM8Ivz_J1FSmc,157
86
81
  wayfinder_paths/core/strategies/base.py,sha256=-s0qeiGZl5CHTUL2PavGXM7ACkNlaa0c4jeZR_4DuBM,155
87
- wayfinder_paths/core/strategies/descriptors.py,sha256=E8vi7ssaj6rglKVp1xl4PlUlJYLSoayXkTzsPb78vrs,1648
82
+ wayfinder_paths/core/strategies/descriptors.py,sha256=9eFf-gPNw1NO1o1eQqGlEgnz237IpAmrmZnIH3JD-ys,1642
88
83
  wayfinder_paths/core/utils/__init__.py,sha256=TEylMYHnG37Z3mizSmw28bUm0vyNBFzf0Nc8dB_7l1A,73
89
- wayfinder_paths/core/utils/evm_helpers.py,sha256=D1NFanIdy7TcBHOFwYHAgnhENChaW34BNarFfauMX38,6230
84
+ wayfinder_paths/core/utils/evm_helpers.py,sha256=jJBOhQfS19xPmrbAnYRai7LG7ixnTHgcNrPKLDeE3tQ,5476
90
85
  wayfinder_paths/core/utils/wallets.py,sha256=tGgVxDW2ZvkvJIb6yow1cirrqhQ67_X9IqxZocBEy2k,2438
91
86
  wayfinder_paths/core/wallets/README.md,sha256=GdO1RFUG_jZdVH6qeobHlr_c69hEDgLLrgqYCvj_dGs,3701
92
87
  wayfinder_paths/core/wallets/WalletManager.py,sha256=sptj0Dya9iM87BDzUktrYM_Mw33xyVJNrRUTVfBjHGw,1870
@@ -100,48 +95,46 @@ wayfinder_paths/policies/hyperliquid.py,sha256=hAxNtWdxavwf_a-AnlXMOmEYakkNBkrPT
100
95
  wayfinder_paths/policies/moonwell.py,sha256=sKWLbruMKiW7Yh1DhXdVPRe0JBP-nooNybRz0G9PgvA,1605
101
96
  wayfinder_paths/policies/prjx.py,sha256=6kfZ6OQFroFHYJl4vSWT-svwwfvoHlS_ZrcHt8nmZMU,743
102
97
  wayfinder_paths/policies/util.py,sha256=r8xQLPvE3kU21_LG6VbkFI9sUSYltcsKunryZdHOUDA,912
103
- wayfinder_paths/run_strategy.py,sha256=HiHdnbu_4rwMgFHTulxCd-AKWeETa3D9TRHlH_NhuzU,14299
98
+ wayfinder_paths/run_strategy.py,sha256=TPtewPaNc4IjSLF83BKhEOYTJacnHNhiiyWjbEwb1oc,11830
104
99
  wayfinder_paths/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
- wayfinder_paths/scripts/create_strategy.py,sha256=rp2kkGXsmcAbOt1eZthV1iZ2yM6wAbjn4R10IATulOw,6275
100
+ wayfinder_paths/scripts/create_strategy.py,sha256=a4TOYg7iNhnnV2A1emTfxo0mvZzW-Uitnksl5LDsPGQ,5357
106
101
  wayfinder_paths/scripts/make_wallets.py,sha256=LkWr65mKtKMYlm2ZINsacvnIJ--A5c97xG9ZY1azVec,5242
107
- wayfinder_paths/scripts/run_strategy.py,sha256=Cue3lxbZCPYrlICAriuQJqrEWwBFp_YK6Kd_LQQGqxw,3541
108
- wayfinder_paths/scripts/validate_manifests.py,sha256=sTJhCVTb8X0SFYozArVbX4AMAEv-0R1Imp4dpHfAuHE,7075
102
+ wayfinder_paths/scripts/run_strategy.py,sha256=QXu30xL1DcyucF80VhH2ArzyOqcZkTi-4VFYD0D01f0,4453
109
103
  wayfinder_paths/strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
104
  wayfinder_paths/strategies/basis_trading_strategy/README.md,sha256=rTUXQ2owEoPmXlfHcJfRFCwcQxlU3a4hOJGN5kaWWQ0,7176
111
105
  wayfinder_paths/strategies/basis_trading_strategy/__init__.py,sha256=kVcehFjBUtoi5xzSHI56jtDghsy0nYl6XIE6BI1l6aI,79
112
106
  wayfinder_paths/strategies/basis_trading_strategy/constants.py,sha256=PJ1WtSALxiuW1FXx-BF30ciFISEhO5VBfrSZyfhPuz0,45
113
107
  wayfinder_paths/strategies/basis_trading_strategy/examples.json,sha256=q2wlAH8Gr-LUJeamKzWL1EtChL3TBWe0HQ4_P-VCdqQ,429
114
- wayfinder_paths/strategies/basis_trading_strategy/manifest.yaml,sha256=cmvAizwBP_SoXvypal8CEHLNh4Du5M_RBKy37ScUjL0,1078
115
108
  wayfinder_paths/strategies/basis_trading_strategy/snapshot_mixin.py,sha256=Z1rgAfLGaSFFL2bS9_XPc7RzpY1Q74jZQGc86Yo_0DQ,38634
116
- wayfinder_paths/strategies/basis_trading_strategy/strategy.py,sha256=qkXKvZr1As8ZEjQHXhg5pP6mJdEtsvyHjrn0Hqg8Xr8,171716
109
+ wayfinder_paths/strategies/basis_trading_strategy/strategy.py,sha256=jfLz0tuyqDhoWIGxuYRcPQLhJNeHV6aeBG5jSZIpsEo,171710
117
110
  wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py,sha256=FH0napmPYTzmflxfyqrqHujO9fmatYbXRH19LSsO_sA,31579
118
111
  wayfinder_paths/strategies/basis_trading_strategy/types.py,sha256=rlbouTUOVPLfGPzMbsf-fUmMcn0R_OsG-IdfiBJmmqI,845
119
112
  wayfinder_paths/strategies/config.py,sha256=5dv-8tWwoxH3Sxd9jtiw90shrLipEe3UlU-IYUBfciM,2762
120
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=3xgX_6qXob7ZSefPHHHdzJtUY1ousVh_YtsS0rwXfpc,4571
113
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=2QYulV-rr_Q4rVJTn-Sd0Zurbi7f_1k6V5a808JaqfY,4182
121
114
  wayfinder_paths/strategies/hyperlend_stable_yield_strategy/examples.json,sha256=GbVo2p6QiG6M7Ma5s671lw8G9JwnMl1h0n9mrtt-ZS8,164
122
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/manifest.yaml,sha256=__YWl6MEeTBLbNWwUyZjQky0ok1T8B1m8dHPQWtW454,240
123
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=V5Tv0Y8Bxbpbyu2JKv7PKHoRiebbWxbtCi7iIp2ivXA,91673
115
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=hCcJk3YTPy5NSdWpHWXbAeLxjp4-zPY0MWeKb7qBBz4,91667
124
116
  wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py,sha256=puHIf160DQ_a1G3LXFHjIel504vKDhZvqktysyEwOdo,15296
125
- wayfinder_paths/strategies/stablecoin_yield_strategy/README.md,sha256=Qj1b2bU5606pbZXsPf1WOtsx0erfBaXpRygxIDGVIgE,5211
117
+ wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/README.md,sha256=Vt8Ce429dkiZRKjfx2c-PEEykp62mbjfBcvOCXe7yjY,4517
118
+ wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/examples.json,sha256=kgNRdZcqne8XTm-Y8Hv1a1pdajRQsey4Qhd5La-iWss,164
119
+ wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py,sha256=sR6KbfEjBlCo6BCF2S3-IRd6Ir1cOF1pl4UNfts1Erg,125347
120
+ wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/test_strategy.py,sha256=9PfA5AiTdsyWcd3weNgFaoYJ5iWirZSPFoUwSBts7BY,31248
121
+ wayfinder_paths/strategies/stablecoin_yield_strategy/README.md,sha256=KvIkgUdNuG5MGoKDQnth1BvIfQ9XVy6l0V2reYi9oR4,4954
126
122
  wayfinder_paths/strategies/stablecoin_yield_strategy/examples.json,sha256=pL1DNFEvYvXKK7xXD5oQYFPQj3Cm1ocKnk6r_iZk0IY,423
127
- wayfinder_paths/strategies/stablecoin_yield_strategy/manifest.yaml,sha256=rBb7-Fmub8twfKJgbBIiCWbwI2nLnuqBNyAJs36WhIg,750
128
- wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=uoy0TnKRG2ZgbJ_4JjC_DBRWAjEvUxiC3MN-QhohB7o,75430
123
+ wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=e9AW57Co_xffjm07BGTwPZ6COIHra2ri7ip8eYUXO6g,75424
129
124
  wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py,sha256=z3vkiyELwJipWNjksdG3Vs6HIVE_y-UoHJCDezXMH60,19967
130
- wayfinder_paths/templates/adapter/README.md,sha256=QcJ0cwXqqtj1VRK1wAs-unUphTPHdJwoIrIoSU4hTmA,3550
131
- wayfinder_paths/templates/adapter/adapter.py,sha256=8wdqcEwqb7XGUxl2gQvGnbFwhPi1h15ZJhB2lgtZieI,814
125
+ wayfinder_paths/templates/adapter/README.md,sha256=nQkJeAfHXXSJj_dXaiFq5LarpHGaDmxwgb0U9pxACqQ,2925
126
+ wayfinder_paths/templates/adapter/adapter.py,sha256=UGPvD8SNcrEtYQXRTUxvK9WZ9Bzx1Xwb8sr9zSbqnuc,763
132
127
  wayfinder_paths/templates/adapter/examples.json,sha256=KLHy3AgPIplAaZN0qY2A-HBMa1xXkMhIyusORovTD9w,79
133
- wayfinder_paths/templates/adapter/manifest.yaml,sha256=Xr46INOnH-R9ambF7GvzhTSZgxW3qPlOtt_04xH0_50,134
134
- wayfinder_paths/templates/adapter/test_adapter.py,sha256=ENjaZH-LMPGYUUbqsfXtvUQep51XjPQNv52i47rkaNk,1525
135
- wayfinder_paths/templates/strategy/README.md,sha256=c7iKlgkz0FPQC3xjMlXqYaDIwC_EKr0wJ6pCLfr2Oik,5664
128
+ wayfinder_paths/templates/adapter/test_adapter.py,sha256=PeG9ZZwx-cWXCDUKxrvj1cR8ljo9aXrKANZuz2hFAhk,1510
129
+ wayfinder_paths/templates/strategy/README.md,sha256=H3pOl_dy_dV3lsRluzV4omjwucJxT_OYBFvakeCFJTg,4972
136
130
  wayfinder_paths/templates/strategy/examples.json,sha256=s8UdlD5uxLITQrRMCqgiaAP0IE0tdnnLfX-Zn-OChIc,135
137
- wayfinder_paths/templates/strategy/manifest.yaml,sha256=Q13sIhfE7u0wMwa8oFwMZr_twwVMprMV4c_JEQNhkz8,289
138
131
  wayfinder_paths/templates/strategy/strategy.py,sha256=dso2jhVphsdKNd17JPwnFAFzU01-1kHlWrKPAKIKSWw,2024
139
132
  wayfinder_paths/templates/strategy/test_strategy.py,sha256=PwDVFTo7gql3WRqhhmyiBE9orfhXv46FBO989NQNxI0,7519
140
133
  wayfinder_paths/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
- wayfinder_paths/tests/test_smoke_manifest.py,sha256=YjVzHTWys5o6Ae2cUuuJPhk-QgKxT1InDFHLjpouRiY,1267
134
+ wayfinder_paths/tests/test_smoke_manifest.py,sha256=kTcIa4qikcspVh2ohQIk0aHUdIvBvcQBfNbm3PNiVvg,1636
142
135
  wayfinder_paths/tests/test_test_coverage.py,sha256=9NrZeVmP02D4W7Qc0XjciC05bhvdTCVibYjTGfa_GQk,7893
143
136
  wayfinder_paths/tests/test_utils.py,sha256=pxHT0QKFlyJeJo8bFnKXzWcOdi6t8rbJ0JFCBaFCBRQ,2112
144
- wayfinder_paths-0.1.9.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
145
- wayfinder_paths-0.1.9.dist-info/METADATA,sha256=cSavzU1Fz9Hgwin71AwbwAaBbVLRGlKXhjpmJrzcCQ8,31036
146
- wayfinder_paths-0.1.9.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
147
- wayfinder_paths-0.1.9.dist-info/RECORD,,
137
+ wayfinder_paths-0.1.11.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
138
+ wayfinder_paths-0.1.11.dist-info/METADATA,sha256=GIUfhzTEdw7KphRWf19P5AaCkT1RIKACpjaelJootCc,25763
139
+ wayfinder_paths-0.1.11.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
140
+ wayfinder_paths-0.1.11.dist-info/RECORD,,
@@ -1,390 +0,0 @@
1
- # Configuration Guide
2
-
3
- This guide explains how to configure your strategies for local testing.
4
-
5
- ## Quick Setup
6
-
7
- ```bash
8
- # 1. Generate test wallets (required!)
9
- # Creates a main wallet (or use 'just create-strategy' which auto-creates wallets)
10
- just create-wallets
11
- # Or manually: poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
12
-
13
- # 2. Create your config file
14
- cp wayfinder_paths/config.example.json config.json
15
-
16
- # 3. Edit config.json with your Wayfinder credentials
17
- # NEVER commit this file - it contains your credentials!
18
- ```
19
-
20
- ## Configuration Structure
21
-
22
- ### config.json Structure
23
-
24
- ```json
25
- {
26
- "user": {
27
- "username": "your_username", // OPTIONAL: For OAuth authentication
28
- "password": "your_password", // OPTIONAL: For OAuth authentication
29
- "refresh_token": null, // OPTIONAL: Alternative to username/password
30
- "api_key": "sk_live_abc123..." // OPTIONAL: For service account authentication (loaded directly by clients, not stored in UserConfig)
31
- },
32
- "system": {
33
- "api_base_url": "https://wayfinder.ai/api/v1",
34
- "api_key": "sk_live_abc123...", // OPTIONAL: System-level API key (alternative to user.api_key, loaded directly by clients)
35
- "wallets_path": "wallets.json" // Path to your generated wallets.json
36
- },
37
- "strategy": {
38
- "rpc_urls": { // RPC endpoints for different chains
39
- "1": "https://eth.llamarpc.com",
40
- "42161": "https://arb1.arbitrum.io/rpc",
41
- "8453": "https://mainnet.base.org",
42
- "solana": "https://api.mainnet-beta.solana.com"
43
- }
44
- }
45
- }
46
- ```
47
-
48
- ## User Configuration
49
-
50
- **Authentication (choose one method):**
51
-
52
- **Option 1: Service Account (API Key) - Recommended for Production**
53
- - `user.api_key` - Your Wayfinder API key for service account authentication (loaded directly by clients from config.json)
54
- - OR `system.api_key` - System-level API key (alternative location, loaded directly by clients)
55
- - OR pass `api_key` parameter to strategy constructor
56
-
57
- **Note:** API keys in `config.json` are loaded directly by `WayfinderClient` via `_load_config_credentials()`, not through the `UserConfig` or `SystemConfig` dataclasses. This is intentional to allow flexible credential loading.
58
-
59
- **Option 2: Personal Access (OAuth) - For Development**
60
- - `user.username` - Your Wayfinder backend username
61
- - `user.password` - Your Wayfinder backend password
62
- - OR `user.refresh_token` - Alternative to username/password
63
-
64
- **Other Optional fields:**
65
- - `user.main_wallet_address` - Override auto-loaded main wallet
66
- - `user.strategy_wallet_address` - Override auto-loaded strategy wallet
67
-
68
- **Security Note:** Never commit `config.json` to version control. Add it to `.gitignore`.
69
-
70
- ## System Configuration
71
-
72
- These are managed automatically by Wayfinder:
73
- - `api_base_url` - Wayfinder backend API endpoint
74
- - `wallets_path` - Location of generated wallets.json
75
- - `job_id` - Auto-generated by Wayfinder
76
- - `job_type` - Set to "strategy"
77
-
78
- ## Strategy Configuration
79
-
80
- ### RPC Endpoints
81
-
82
- Default RPC URLs are provided for:
83
- - Ethereum (chain ID: 1)
84
- - Arbitrum (chain ID: 42161)
85
- - Base (chain ID: 8453)
86
- - Solana
87
-
88
- You can override these in `config.json` if needed.
89
-
90
- ### Strategy-Specific Settings
91
-
92
- Individual strategies may have their own configuration parameters. Check the strategy's README for available options.
93
-
94
- ## Wallet Generation for Testing
95
-
96
- Use the built-in script to generate test wallets for local development:
97
-
98
- ```bash
99
- # Generate main wallet (recommended for initial setup)
100
- poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
101
-
102
- # Add additional wallets for multi-account testing
103
- poetry run python wayfinder_paths/scripts/make_wallets.py -n 3
104
-
105
- # Create a wallet with a specific label (e.g., for a strategy)
106
- poetry run python wayfinder_paths/scripts/make_wallets.py --label "my_strategy_name"
107
-
108
- # Generate keystore files (for geth/web3 compatibility)
109
- poetry run python wayfinder_paths/scripts/make_wallets.py -n 1 --keystore-password "your-password"
110
- ```
111
-
112
- This creates `wallets.json` in the repository root with:
113
- - **main** wallet - your main wallet for testing (labeled "main")
114
- - Additional wallets with labels if specified
115
-
116
- **Note:** Generated wallets are for testing only. Wallet addresses are automatically loaded from `wallets.json` when not explicitly set in config. Strategy-specific wallets are automatically created when you use `just create-strategy "Strategy Name"`.
117
-
118
- ## Per-Strategy Wallets
119
-
120
- Each strategy should have its own dedicated wallet for isolation and security. The system automatically looks up wallets by strategy directory name.
121
-
122
- ### How It Works
123
-
124
- When you run a strategy:
125
- 1. The system uses the strategy directory name (e.g., `hyperlend_stable_yield_strategy`) to look up a wallet
126
- 2. It searches `wallets.json` for a wallet with a matching `label`
127
- 3. If found, that wallet is used as the strategy's dedicated wallet
128
- 4. Falls back to `strategy_wallet_address` from config if explicitly provided
129
-
130
- ### Creating a Strategy with Wallet
131
-
132
- The easiest way to create a new strategy with its own wallet:
133
-
134
- ```bash
135
- # Create a new strategy with dedicated wallet
136
- just create-strategy "My Strategy Name"
137
-
138
- # This automatically:
139
- # - Creates the strategy directory
140
- # - Generates a wallet with label matching the directory name
141
- # - Updates the manifest with the correct name and entrypoint
142
- ```
143
-
144
- ### Wallet Structure
145
-
146
- Wallets in `wallets.json` are stored with labels that match strategy directory names:
147
-
148
- ```json
149
- [
150
- {
151
- "address": "0x...",
152
- "private_key_hex": "...",
153
- "label": "main"
154
- },
155
- {
156
- "address": "0x...",
157
- "private_key_hex": "...",
158
- "label": "hyperlend_stable_yield_strategy"
159
- },
160
- {
161
- "address": "0x...",
162
- "private_key_hex": "...",
163
- "label": "my_awesome_strategy"
164
- }
165
- ]
166
- ```
167
-
168
- ### Manual Wallet Creation
169
-
170
- If you need to manually create a wallet for an existing strategy:
171
-
172
- ```bash
173
- # Generate a wallet
174
- poetry run python wayfinder_paths/scripts/make_wallets.py -n 1
175
-
176
- # Then edit wallets.json to add a label matching your strategy directory name:
177
- # {
178
- # "address": "0x...",
179
- # "private_key_hex": "...",
180
- # "label": "your_strategy_directory_name"
181
- # }
182
- ```
183
-
184
- ### Strategy Access
185
-
186
- Strategies access wallets the same way as before:
187
-
188
- ```python
189
- # In strategy code
190
- strategy_address = self.config.get("strategy_wallet").get("address")
191
- main_address = self.config.get("main_wallet").get("address")
192
- ```
193
-
194
- The strategy wallet is automatically populated from the wallet with label matching the strategy directory name.
195
-
196
- ## Loading Configuration
197
-
198
- The configuration is loaded automatically when running strategies via `run_strategy.py`:
199
-
200
- ```bash
201
- poetry run python wayfinder_paths/run_strategy.py stablecoin_yield_strategy --config config.json
202
- ```
203
-
204
- For programmatic use:
205
-
206
- ```python
207
- from pathlib import Path
208
- from core.config import StrategyJobConfig
209
- import json
210
-
211
- # Load from file
212
- with open("config.json") as f:
213
- config_data = json.load(f)
214
-
215
- config = StrategyJobConfig.from_dict(config_data)
216
-
217
- # Configuration now has:
218
- # - config.user.username & password (for Wayfinder backend)
219
- # - config.system.api_base_url & wallets_path
220
- # - config.strategy_config (strategy-specific settings)
221
- ```
222
-
223
- ## Wallet Abstraction
224
-
225
- The strategy system supports multiple wallet types through a wallet abstraction layer. By default, adapters use local private keys (self-custodial wallets), but you can inject custom wallet providers for custodial wallets like Privy or Turnkey.
226
-
227
- ### Default Behavior (Local Wallets)
228
-
229
- By default, adapters use `LocalWalletProvider` which resolves private keys from:
230
- - `wallets.json` (matched by address)
231
- - Wallet config in `config.json`
232
-
233
- No code changes are required - existing strategies continue to work.
234
-
235
- ### Using Custom Wallet Providers
236
-
237
- To use a custodial wallet provider (e.g., Privy, Turnkey), inject it directly into adapters:
238
-
239
- ```python
240
- from adapters.evm_transaction_adapter.adapter import EvmTransactionAdapter
241
- from my_privy_integration import PrivyWalletProvider
242
-
243
- # Create your custom wallet provider
244
- privy_provider = PrivyWalletProvider(privy_api_key, privy_wallet_id)
245
-
246
- # Inject it into adapters
247
- adapter = EvmTransactionAdapter(config, wallet_provider=privy_provider)
248
- ```
249
-
250
- See `core/wallets/README.md` for details on implementing custom wallet providers.
251
-
252
- ## Security Best Practices
253
-
254
- 1. **Never commit `config.json`** - add it to `.gitignore`
255
- 2. **Never commit `wallets.json`** - contains private keys
256
- 3. **Use test wallets** - the script generates throwaway wallets for testing
257
- 4. **Keep credentials secure** - Wayfinder username/password grant access to backend resources
258
- 5. **Set conservative parameters** for initial testing:
259
- - Lower leverage ratios
260
- - Higher slippage tolerance
261
- - Lower position sizes
262
-
263
- ## Authentication with Wayfinder Backend
264
-
265
- Wayfinder Paths supports **dual authentication** for different use cases:
266
-
267
- ### 1. Service Account Authentication (API Key)
268
-
269
- **Best for:** Backend services, automated systems, and production deployments with higher rate limits.
270
-
271
- API keys provide service account authentication and are automatically discovered by all clients. You can provide an API key in two ways:
272
-
273
- #### Option A: Strategy Constructor (Programmatic)
274
- ```python
275
- from wayfinder_paths.strategies.stablecoin_yield_strategy.strategy import StablecoinYieldStrategy
276
-
277
- strategy = StablecoinYieldStrategy(
278
- config={...},
279
- api_key="sk_live_abc123..." # API key is auto-discovered by all clients
280
- )
281
- ```
282
-
283
- #### Option B: config.json
284
- ```json
285
- {
286
- "user": {
287
- "api_key": "sk_live_abc123..."
288
- },
289
- "system": {
290
- "api_key": "sk_live_abc123..." // Alternative: system-level API key
291
- }
292
- }
293
- ```
294
-
295
- **Priority Order:** Constructor parameter > `config.json` (user.api_key or system.api_key)
296
-
297
- **How It Works:**
298
- - All clients created by adapters automatically discover the API key from:
299
- - Constructor parameter (if passed)
300
- - `config.json` (via `WayfinderClient._load_config_credentials()` which reads `user.api_key` or `system.api_key`)
301
- - API keys are included in **all** API requests (including public endpoints) for rate limiting
302
- - No need to pass API keys explicitly to adapters or clients—they auto-discover it
303
- - **Note:** API keys in `config.json` are loaded directly by clients, not stored in the `UserConfig` or `SystemConfig` dataclasses
304
-
305
- ### 2. Personal Access Authentication (OAuth)
306
-
307
- **Best for:** Standalone SDK users and local development.
308
-
309
- The `username` and `password` in your config authenticate with the Wayfinder backend to access:
310
- - Wallet management
311
- - Transaction signing services
312
- - Strategy execution services
313
-
314
- ```json
315
- {
316
- "user": {
317
- "username": "your_username",
318
- "password": "your_password",
319
- "refresh_token": null // Optional: use refresh token instead of username/password
320
- }
321
- }
322
- ```
323
-
324
- **Fallback Behavior:**
325
- - If an API key is not found or authentication fails, the system automatically falls back to OAuth
326
- - OAuth tokens are automatically refreshed when they expire
327
-
328
- ### Security Best Practices
329
-
330
- - **Never commit credentials** to version control - add `config.json` to `.gitignore`
331
- - **Use API keys for production** - they provide better rate limits and don't require token refresh
332
- - **Use OAuth for development** - simpler setup for local testing
333
- - **Rotate credentials regularly** - especially if exposed or compromised
334
-
335
- ## Configuration in Strategies
336
-
337
- Strategies receive configuration automatically through StrategyJob:
338
-
339
- ```python
340
- from core.strategies.Strategy import Strategy
341
-
342
- class MyStrategy(Strategy):
343
- async def setup(self):
344
- # Access strategy-specific config
345
- target_leverage = self.config.get("target_leverage", 1.0)
346
-
347
- # Access RPC URLs
348
- eth_rpc = self.config.get("rpc_urls", {}).get("1")
349
-
350
- # Configuration is already loaded from config.json
351
- ```
352
-
353
- ## Advanced: Custom RPC Endpoints
354
-
355
- To use custom RPC endpoints, update the `strategy.rpc_urls` section in `config.json`:
356
-
357
- ```json
358
- {
359
- "strategy": {
360
- "rpc_urls": {
361
- "1": "https://your-custom-ethereum-rpc.com",
362
- "8453": "https://your-custom-base-rpc.com"
363
- }
364
- }
365
- }
366
- ```
367
-
368
- ## Troubleshooting
369
-
370
- **Issue:** "Authentication failed"
371
- - **If using API key:**
372
- - Verify API key is correct and not expired
373
- - Check that API key is set in one of: constructor parameter or `config.json` (user.api_key or system.api_key)
374
- - Ensure API key has proper permissions for the operations you're performing
375
- - **If using OAuth:**
376
- - Check that `username` and `password` are correct in `config.json`
377
- - Verify your Wayfinder account credentials
378
- - Try using `refresh_token` instead if you have one
379
- - **General:**
380
- - The system automatically falls back from API key to OAuth if API key authentication fails
381
- - Check logs for specific authentication error messages
382
-
383
- **Issue:** "Wallet not found"
384
- - Run the wallet generation script first
385
- - Check that `wallets.json` exists in repository root
386
- - Verify `system.wallets_path` in config points to the correct location
387
-
388
- **Issue:** "Invalid config"
389
- - Ensure `config.json` follows the correct structure
390
- - Check that all required fields are present
@@ -1,8 +0,0 @@
1
- schema_version: "0.1"
2
- entrypoint: "adapters.balance_adapter.adapter.BalanceAdapter"
3
- capabilities:
4
- - "wallet_read"
5
- - "wallet_transfer"
6
- dependencies:
7
- - "TokenClient"
8
- - "WalletClient"
@@ -1,11 +0,0 @@
1
- schema_version: "0.1"
2
- entrypoint: "adapters.brap_adapter.adapter.BRAPAdapter"
3
- capabilities:
4
- - "swap.quote"
5
- - "swap.execute"
6
- - "bridge.quote"
7
- - "bridge.execute"
8
- - "route.optimize"
9
- - "fee.calculate"
10
- dependencies:
11
- - "BRAPClient"
@@ -1,10 +0,0 @@
1
- schema_version: "0.1"
2
- entrypoint: "adapters.hyperlend_adapter.adapter.HyperlendAdapter"
3
- capabilities:
4
- - "hyperlend.stable_markets.read"
5
- - "hyperlend.markets.query"
6
- - "hyperlend.assets_view.read"
7
- - "hyperlend.lend"
8
- dependencies:
9
- - "HyperlendClient"
10
-
@@ -1,8 +0,0 @@
1
- schema_version: "0.1"
2
- entrypoint: "adapters.hyperliquid_adapter.adapter.HyperliquidAdapter"
3
- capabilities:
4
- - "market.meta"
5
- - "market.funding"
6
- - "market.candles"
7
- - "market.orderbook"
8
- - "user.state"
@@ -1,11 +0,0 @@
1
- schema_version: "0.1"
2
- entrypoint: "adapters.ledger_adapter.adapter.LedgerAdapter"
3
- capabilities:
4
- - "ledger.read"
5
- - "ledger.write"
6
- - "strategy.transactions"
7
- - "strategy.deposits"
8
- - "strategy.withdrawals"
9
- - "strategy.operations"
10
- dependencies:
11
- - "LedgerClient"
@@ -1,10 +0,0 @@
1
- schema_version: "0.1"
2
- entrypoint: "adapters.pool_adapter.adapter.PoolAdapter"
3
- capabilities:
4
- - "pool.read"
5
- - "pool.analytics"
6
- - "pool.discovery"
7
- - "llama.data"
8
- - "pool.reports"
9
- dependencies:
10
- - "PoolClient"
@@ -1,6 +0,0 @@
1
- schema_version: "0.1"
2
- entrypoint: "adapters.token_adapter.adapter.TokenAdapter"
3
- capabilities:
4
- - "token.read"
5
- dependencies:
6
- - "TokenClient"