wayfinder-paths 0.1.10__py3-none-any.whl → 0.1.13__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 (49) hide show
  1. wayfinder_paths/adapters/balance_adapter/adapter.py +3 -7
  2. wayfinder_paths/adapters/brap_adapter/adapter.py +10 -13
  3. wayfinder_paths/adapters/hyperlend_adapter/adapter.py +6 -9
  4. wayfinder_paths/adapters/hyperliquid_adapter/adapter.py +1 -1
  5. wayfinder_paths/adapters/hyperliquid_adapter/executor.py +44 -5
  6. wayfinder_paths/adapters/hyperliquid_adapter/test_executor.py +104 -0
  7. wayfinder_paths/adapters/moonwell_adapter/adapter.py +0 -3
  8. wayfinder_paths/adapters/pool_adapter/README.md +4 -19
  9. wayfinder_paths/adapters/pool_adapter/adapter.py +4 -29
  10. wayfinder_paths/adapters/pool_adapter/examples.json +6 -7
  11. wayfinder_paths/adapters/pool_adapter/test_adapter.py +8 -8
  12. wayfinder_paths/core/clients/AuthClient.py +2 -2
  13. wayfinder_paths/core/clients/BRAPClient.py +2 -2
  14. wayfinder_paths/core/clients/HyperlendClient.py +2 -2
  15. wayfinder_paths/core/clients/PoolClient.py +18 -54
  16. wayfinder_paths/core/clients/TokenClient.py +3 -3
  17. wayfinder_paths/core/clients/WalletClient.py +2 -2
  18. wayfinder_paths/core/clients/WayfinderClient.py +9 -10
  19. wayfinder_paths/core/clients/protocols.py +1 -7
  20. wayfinder_paths/core/config.py +60 -224
  21. wayfinder_paths/core/services/base.py +0 -55
  22. wayfinder_paths/core/services/local_evm_txn.py +37 -134
  23. wayfinder_paths/core/strategies/Strategy.py +3 -3
  24. wayfinder_paths/core/strategies/descriptors.py +7 -0
  25. wayfinder_paths/core/utils/evm_helpers.py +5 -28
  26. wayfinder_paths/core/utils/wallets.py +12 -19
  27. wayfinder_paths/core/wallets/README.md +1 -1
  28. wayfinder_paths/run_strategy.py +10 -8
  29. wayfinder_paths/scripts/create_strategy.py +5 -5
  30. wayfinder_paths/scripts/make_wallets.py +5 -5
  31. wayfinder_paths/scripts/run_strategy.py +3 -3
  32. wayfinder_paths/strategies/basis_trading_strategy/snapshot_mixin.py +1 -1
  33. wayfinder_paths/strategies/basis_trading_strategy/strategy.py +196 -515
  34. wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py +228 -11
  35. wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md +2 -2
  36. wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py +1 -0
  37. wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/README.md +1 -1
  38. wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py +8 -7
  39. wayfinder_paths/strategies/stablecoin_yield_strategy/README.md +2 -2
  40. wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py +25 -25
  41. wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py +28 -9
  42. wayfinder_paths/templates/adapter/README.md +1 -1
  43. {wayfinder_paths-0.1.10.dist-info → wayfinder_paths-0.1.13.dist-info}/METADATA +15 -18
  44. {wayfinder_paths-0.1.10.dist-info → wayfinder_paths-0.1.13.dist-info}/RECORD +46 -48
  45. wayfinder_paths/CONFIG_GUIDE.md +0 -390
  46. wayfinder_paths/config.example.json +0 -22
  47. wayfinder_paths/core/settings.py +0 -61
  48. {wayfinder_paths-0.1.10.dist-info → wayfinder_paths-0.1.13.dist-info}/LICENSE +0 -0
  49. {wayfinder_paths-0.1.10.dist-info → wayfinder_paths-0.1.13.dist-info}/WHEEL +0 -0
@@ -1,25 +1,25 @@
1
- wayfinder_paths/CONFIG_GUIDE.md,sha256=p8eT2FC_dp4bBdezwGmQYLiefLNze-I6lY__UXv07zQ,12975
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
4
  wayfinder_paths/adapters/balance_adapter/README.md,sha256=t8-QRfU49g9FmJ18xDGbN_k-ybWebBfM7s4bBrnyo-g,3635
6
- wayfinder_paths/adapters/balance_adapter/adapter.py,sha256=2_OgZlHsN3js800TWwTWRoSUNn1YCnSFAY0SG6ddcAg,8379
5
+ wayfinder_paths/adapters/balance_adapter/adapter.py,sha256=_Y7AiI8lXqGv7RV8jteTGD1FMw9_Er02F6aQ2swjApg,8178
7
6
  wayfinder_paths/adapters/balance_adapter/examples.json,sha256=3R1M4B_VsIy29viAuFT9nQbnQShWl8ZbU-rnSNWUW9U,129
8
7
  wayfinder_paths/adapters/balance_adapter/test_adapter.py,sha256=Z8iTRU0Rv1UsODuVSo5q4j-DrTXMd4YRxvaxLdZE4Us,1878
9
8
  wayfinder_paths/adapters/brap_adapter/README.md,sha256=H4_ep4r17DpQ0rnTSIbRsAdnK174NGBAcHNlHhvEA7o,7880
10
9
  wayfinder_paths/adapters/brap_adapter/__init__.py,sha256=jpqxZ-Bv_8kBo-lhgO_QCWaVZNq_WwlkNBHD4RsqOJg,90
11
- wayfinder_paths/adapters/brap_adapter/adapter.py,sha256=uHS0HXQQYQVJOBM_POs2kHZJ9D7i2anOj4f5L40ebYM,30204
10
+ wayfinder_paths/adapters/brap_adapter/adapter.py,sha256=QoTEm4wOO1yiZz2tmoThOdD_pbZP1S8XzsXwQiR6u7I,30054
12
11
  wayfinder_paths/adapters/brap_adapter/examples.json,sha256=KWuAklUspd2uvk0s2ey8gczg4nbzhdwxQqzhascyMiQ,5287
13
12
  wayfinder_paths/adapters/brap_adapter/test_adapter.py,sha256=w2q35tcE7j2QG53jSm_XZgIk7OKL4O51fnFuGMVRSNQ,10754
14
13
  wayfinder_paths/adapters/hyperlend_adapter/__init__.py,sha256=DsWOnEn-Tlu9ZoIoGaFeSqOYI3b4lXGVK3_FTntWpLw,139
15
- wayfinder_paths/adapters/hyperlend_adapter/adapter.py,sha256=OiHIzhfTJTBk2iQs3px82DubhgTkuoPWHtgTPfAB7UQ,10260
14
+ wayfinder_paths/adapters/hyperlend_adapter/adapter.py,sha256=_boW8n7cSySYbxmlbeJ4jDuw5Bj21fGx0irGVBXWQnw,10135
16
15
  wayfinder_paths/adapters/hyperlend_adapter/test_adapter.py,sha256=iLnrALVnK7JWJV2KFDqBYZlr1ShW1tjHC-kCV6-FlgE,9558
17
16
  wayfinder_paths/adapters/hyperliquid_adapter/__init__.py,sha256=QpA258RzVbxzsha86HQduAuNVG0g0qvsI5OcZunQ8DQ,467
18
- wayfinder_paths/adapters/hyperliquid_adapter/adapter.py,sha256=qkU_Au0rqj_vf5O6j81EikrHDk8_M8uaxltQvI3dvbU,34516
19
- wayfinder_paths/adapters/hyperliquid_adapter/executor.py,sha256=uibNnfsgB_KMOYpZzaSDTsiKGQPIKwZyZ6uH34-Xu4A,17447
17
+ wayfinder_paths/adapters/hyperliquid_adapter/adapter.py,sha256=Z5Gl9M9wk7PVUIyP_i2oAMegmCTbVFd48Zp57DURh6M,34510
18
+ wayfinder_paths/adapters/hyperliquid_adapter/executor.py,sha256=ix1FmRO6DPiPk0BwGy4zrCP5IfKzzMSQNhnOmIewfGA,18977
20
19
  wayfinder_paths/adapters/hyperliquid_adapter/paired_filler.py,sha256=nOBsrAka8PKv5h8SuoJuLTH4HYS4n0vpTIADUCyDKlA,37546
21
20
  wayfinder_paths/adapters/hyperliquid_adapter/test_adapter.py,sha256=JEDeIMSTdrgcSy4BGSVB0CixQzl3NsKpukOZ9mRu3kE,4542
22
21
  wayfinder_paths/adapters/hyperliquid_adapter/test_adapter_live.py,sha256=lnlL0njECM6C4hVlsEZ4_7wtcixIBO8qqTRO6b1yGGg,7672
22
+ wayfinder_paths/adapters/hyperliquid_adapter/test_executor.py,sha256=6tAstfO2fFTWWYSqYsd3jzY5iQ1RrCsLl_0pbwJO-bE,4147
23
23
  wayfinder_paths/adapters/hyperliquid_adapter/test_utils.py,sha256=2gSrXJgtfrTqNOQIhBS92vUkfcwhFsMLgFRkf1bzLy8,7290
24
24
  wayfinder_paths/adapters/hyperliquid_adapter/utils.py,sha256=WjLEaNVvcB8FfYlTrwZBrmw7k2MLS5KhBeW4NNoLlVI,4254
25
25
  wayfinder_paths/adapters/ledger_adapter/README.md,sha256=_tGIpIkg-TCYddf8d4FhJvJuHV79iTizqePosKX2ekU,4079
@@ -29,19 +29,18 @@ wayfinder_paths/adapters/ledger_adapter/examples.json,sha256=DdqTSe4vnBrfIycQVQQ
29
29
  wayfinder_paths/adapters/ledger_adapter/test_adapter.py,sha256=Z1-rPP9k5fI-8ofWMKgU3syzNegKGH_hGO6CKApQj1c,7470
30
30
  wayfinder_paths/adapters/moonwell_adapter/README.md,sha256=PyQllVXgW0aUUoWhAZ5phLPAxtR9A5GkwesnZznckV8,5465
31
31
  wayfinder_paths/adapters/moonwell_adapter/__init__.py,sha256=Gf6AM4BylxxPenUQ_cveUg70QcB9i61SIYaCsXMSjXw,135
32
- wayfinder_paths/adapters/moonwell_adapter/adapter.py,sha256=DwUgY03ECTrIr8ulbp4_Ur_ezNK1dkLcNXAkFu3oIxU,45191
32
+ wayfinder_paths/adapters/moonwell_adapter/adapter.py,sha256=kpzuIEUQHHo8WUkt-XGO5FqMtPBRNubYqkkWT0jKvKM,45030
33
33
  wayfinder_paths/adapters/moonwell_adapter/test_adapter.py,sha256=DLbbCW6ytjKY2C5aQUrW-YBFyrXjush9qbGWiuL42DM,23440
34
- wayfinder_paths/adapters/pool_adapter/README.md,sha256=JJZ5V-RpDfG-D0-UxyLEYMorPCORNPUaaLpccB5Oslk,2848
34
+ wayfinder_paths/adapters/pool_adapter/README.md,sha256=-3FJ-NcVdP5IdnBJfljySKuzhoKSrFAjZttHvqAicbo,2453
35
35
  wayfinder_paths/adapters/pool_adapter/__init__.py,sha256=rv56pYzz2Gqiz33uoPJktCQRe3CRt8U9ry5GbjVgK3A,90
36
- wayfinder_paths/adapters/pool_adapter/adapter.py,sha256=-XfmOHqKIr2Q8iyfyKrwIv6bYlyTDDL0WX-XdtKGFqQ,2793
37
- wayfinder_paths/adapters/pool_adapter/examples.json,sha256=3eLXQIECR3tmUJUeX5wAhiJwFwPMYsUhzkc1i8vUAX8,923
38
- wayfinder_paths/adapters/pool_adapter/test_adapter.py,sha256=wtdr-IzfhTeS3oBjZLPHUxwYP-3o6tlir3kA6C7lbcE,2709
36
+ wayfinder_paths/adapters/pool_adapter/adapter.py,sha256=FrzgoXUkrLjL_SDHT5-zK7VMTPx6QdDdMpO--R5b5AE,1842
37
+ wayfinder_paths/adapters/pool_adapter/examples.json,sha256=NW-7J6_zXxky8uMDRym3jJaPP8hZLEiytQ3WKoZEP54,855
38
+ wayfinder_paths/adapters/pool_adapter/test_adapter.py,sha256=jz3QYP8ubHjIfE4Sz7CMQai_7zqG9IJBjXz7CKC0PU0,2625
39
39
  wayfinder_paths/adapters/token_adapter/README.md,sha256=TXn7pYQ6bCAiYNl-avem3_Hoz0p3JVyyThxObr59s8k,2673
40
40
  wayfinder_paths/adapters/token_adapter/__init__.py,sha256=nEmxrvffEygn3iKH3cZTNLkhnUUhlUAEtshmrFRAjq8,62
41
41
  wayfinder_paths/adapters/token_adapter/adapter.py,sha256=JEb7A8wJYHxENFhJ6upAgnQAbPZeVfYi6OGs1hiHxnA,3432
42
42
  wayfinder_paths/adapters/token_adapter/examples.json,sha256=RW-3xazj4wbTPl-AVrzduRH1NCXx8m7-06bRMOUJ-lc,3626
43
43
  wayfinder_paths/adapters/token_adapter/test_adapter.py,sha256=oEhV5OooRh1oGnaTTMKtdU9oqvHBKR25KgL6-ZB6Mzo,4304
44
- wayfinder_paths/config.example.json,sha256=gDvS7W-cbaNe2IV7Q72di_PYpCDKODojELaXdd77Gx4,605
45
44
  wayfinder_paths/conftest.py,sha256=pqDNijXn9_zmbAdkt_2a18UQLjtsDkNTBJVTgC6H2nA,1136
46
45
  wayfinder_paths/core/__init__.py,sha256=AJK8oS2dCVuJ2pmSxqXOCvuWacNaVEU3yALEqsD3rog,398
47
46
  wayfinder_paths/core/adapters/BaseAdapter.py,sha256=bzc3ER7aKOsmk9cxyoJxGdI54eibbpcMC8nGYJUrsp0,2033
@@ -52,19 +51,19 @@ wayfinder_paths/core/analytics/__init__.py,sha256=AtcSpt2vPpCNgdDaFDLhyZZpKa0QXK
52
51
  wayfinder_paths/core/analytics/bootstrap.py,sha256=lb_PjL4Vh3O2F8eXgvAbnAFevJczRF59ODG-dxtpCZ8,1782
53
52
  wayfinder_paths/core/analytics/stats.py,sha256=qE6h0j8TZAbqbVpDeYlVKe0YbV5CENQcHbREzKyZ_s8,1426
54
53
  wayfinder_paths/core/analytics/test_analytics.py,sha256=DNkVTsbWPLc9I1eeCD5wsPPqUDgN-npbGRhBgMKn3GM,5580
55
- wayfinder_paths/core/clients/AuthClient.py,sha256=scz8GvnabNYAQq_XYDcLP2lf2LZqurQOixA7MMAfbCY,2796
56
- wayfinder_paths/core/clients/BRAPClient.py,sha256=-cL05ELlroi3pUfT_5nF8Axie2a0n19npnuP408bkAQ,3744
54
+ wayfinder_paths/core/clients/AuthClient.py,sha256=rr9q1YEharGFiAiL-I87TK2atxek1PsMc8cJXIunWuM,2789
55
+ wayfinder_paths/core/clients/BRAPClient.py,sha256=gkZtjOgAwRP0q7LxVmqBUlFWzKdaQrQFkv-nVsJ7Amg,3737
57
56
  wayfinder_paths/core/clients/ClientManager.py,sha256=pZ4e8XgwDYceCUBFyyemexAH8pqZCAN47iAVVwJWW2Q,7239
58
- wayfinder_paths/core/clients/HyperlendClient.py,sha256=6yAhojEbjrRC7YLckwGL_2z5lwI4xnrRVNzxspqKSTg,6173
57
+ wayfinder_paths/core/clients/HyperlendClient.py,sha256=QZFPsSIGumfabmLtOSkymtjmyW5aQoXbLRTSbsYdAOg,6166
59
58
  wayfinder_paths/core/clients/LedgerClient.py,sha256=M6VlG0yq3H4rQt6qRxc0QQVd7GoPXJpj2FcD0RM_C_k,14430
60
- wayfinder_paths/core/clients/PoolClient.py,sha256=EMIRRw7nh2bha-Qb5uOcIRgbnnu_v5FIvDU0D61nXGI,3475
61
- wayfinder_paths/core/clients/TokenClient.py,sha256=zg39K-uA1ObkNEcxoXviA1QYSd-fxQXxjBHFOeClY9E,2788
62
- wayfinder_paths/core/clients/WalletClient.py,sha256=xG-b5YW1Wps-Lw1JFR3OwAGq0oKMvgIp1crXWd31guE,2604
63
- wayfinder_paths/core/clients/WayfinderClient.py,sha256=jhrCa3lQXVsp41y19GLztrSSFQiD6hSD2P8dWeHBoNE,10397
59
+ wayfinder_paths/core/clients/PoolClient.py,sha256=t0H6EffDjdyK8e_PJKngU3uEkWNCTJ9BMF0HBYYRNLQ,2187
60
+ wayfinder_paths/core/clients/TokenClient.py,sha256=aIdHdV6896XceI-dKOMvWEi_PIoV7qLlaSNcRCE83N0,2778
61
+ wayfinder_paths/core/clients/WalletClient.py,sha256=EhZI7q0U3P769DEQ28ef9RvaqJJ0nSBbdxbWUPhouXM,2597
62
+ wayfinder_paths/core/clients/WayfinderClient.py,sha256=x-SBg1mf6mKy6F5qpamnXmFdJ3vNmZ8Z5veJnVoZIAM,10269
64
63
  wayfinder_paths/core/clients/__init__.py,sha256=eKbB81C9ZphAKH1uKwkqOmVHtEwFdkDuZLVAQXQXa5M,1254
65
- wayfinder_paths/core/clients/protocols.py,sha256=yUDz2dEnO-dDZY5pJfDtcvp5rtsoEQYE4G5IQTGLxfA,8469
64
+ wayfinder_paths/core/clients/protocols.py,sha256=a0D14D2sEq77Nu-Cut4bXgpXyf02jQbkxWKSTGg6kiw,8245
66
65
  wayfinder_paths/core/clients/sdk_example.py,sha256=Y6mSyHfsWcOje6E-geNI0C4CQ6uyZaD3V9Q8kPM53eo,2969
67
- wayfinder_paths/core/config.py,sha256=ktogrNlE4DSf1DZONN4_C-sjjuoMFqQtS7chx2KDVYY,15382
66
+ wayfinder_paths/core/config.py,sha256=ADdrYAapSCwpV4ljSziBmxZV2Z2ORsu8ku-_MptSjjc,9060
68
67
  wayfinder_paths/core/constants/__init__.py,sha256=upAVwHDgMXJ3DWaAuXo52UZktS8NZ17s5XwVH0qxgzg,591
69
68
  wayfinder_paths/core/constants/base.py,sha256=BYQAD72XrsY6WRrOMIlUOpXLVANS7EYaS5Ell4Nj1H4,1551
70
69
  wayfinder_paths/core/constants/erc20_abi.py,sha256=3ljIyUl6FesoEa4uprwNo-nF0Q5s73M9WEqXLw6ONI4,3214
@@ -73,19 +72,18 @@ wayfinder_paths/core/constants/moonwell_abi.py,sha256=ALb-kKdfF9aUtEHR8OlqvA-3zJ
73
72
  wayfinder_paths/core/engine/StrategyJob.py,sha256=DqwkPu5JHp00xkDmj7kyUqs9U-VP0k-OBlVipjEzk14,7257
74
73
  wayfinder_paths/core/engine/__init__.py,sha256=WZ2KWnmOZnBocYrqdwq6EUHp6lmTyrKyXgHSHyQswnU,108
75
74
  wayfinder_paths/core/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
- wayfinder_paths/core/services/base.py,sha256=cvfNoS8VXP7ksrZIjk4BYvqtSSueiHphcxny7Qt7VHY,5980
77
- wayfinder_paths/core/services/local_evm_txn.py,sha256=kzJUOvHWLZ0ygRmYpVnJJTp48E072YpfD8R9IJJIzOM,16522
75
+ wayfinder_paths/core/services/base.py,sha256=94Wvs7Ym7tK9J3k9lEOhSSIC7ptnMJ161dYtF4XTSZ8,4096
76
+ wayfinder_paths/core/services/local_evm_txn.py,sha256=OHxDWDfctxui2YbPRI3B6c3pt9xC66N0-sFC7OLmz4c,12600
78
77
  wayfinder_paths/core/services/local_token_txn.py,sha256=YQjuHjdyGwVfAZt3FGMkSKoc34bRiJrWRiR5pXJmL9U,8556
79
78
  wayfinder_paths/core/services/web3_service.py,sha256=7iR7bfqfUQCQcdfEWVGqy04PZBtZTuzCDpfLt1a-4OI,1485
80
- wayfinder_paths/core/settings.py,sha256=aJdy2bRcJtufr4TZnu30R2iv---Ru4s6nxKo-j22uKQ,1962
81
- wayfinder_paths/core/strategies/Strategy.py,sha256=nEzry8V-FGSM-S1eBmT35Ba2cVOJn3hNNWenpTMAVv8,9455
79
+ wayfinder_paths/core/strategies/Strategy.py,sha256=Q_R-i4kxASdWrsq58VGHkV1k5l-sMF2MdVRw6nMNtJ8,9407
82
80
  wayfinder_paths/core/strategies/__init__.py,sha256=2NjvvDw6sIQGUFV4Qo1olXTxUOY3GmCM8Ivz_J1FSmc,157
83
81
  wayfinder_paths/core/strategies/base.py,sha256=-s0qeiGZl5CHTUL2PavGXM7ACkNlaa0c4jeZR_4DuBM,155
84
- wayfinder_paths/core/strategies/descriptors.py,sha256=9eFf-gPNw1NO1o1eQqGlEgnz237IpAmrmZnIH3JD-ys,1642
82
+ wayfinder_paths/core/strategies/descriptors.py,sha256=2Olef0VWols1CWb-TWcb5pil2rztC0jP6F_Trpv2hIw,1958
85
83
  wayfinder_paths/core/utils/__init__.py,sha256=TEylMYHnG37Z3mizSmw28bUm0vyNBFzf0Nc8dB_7l1A,73
86
- wayfinder_paths/core/utils/evm_helpers.py,sha256=D1NFanIdy7TcBHOFwYHAgnhENChaW34BNarFfauMX38,6230
87
- wayfinder_paths/core/utils/wallets.py,sha256=tGgVxDW2ZvkvJIb6yow1cirrqhQ67_X9IqxZocBEy2k,2438
88
- wayfinder_paths/core/wallets/README.md,sha256=GdO1RFUG_jZdVH6qeobHlr_c69hEDgLLrgqYCvj_dGs,3701
84
+ wayfinder_paths/core/utils/evm_helpers.py,sha256=vxxgenCaRdFEFlrW7eGB9TRubywuCdGvPg5N4C2P9-c,5633
85
+ wayfinder_paths/core/utils/wallets.py,sha256=ccCQ128lDShO265AFMOCdijzPLucWe-Neg5wjLrOsnk,1948
86
+ wayfinder_paths/core/wallets/README.md,sha256=ks3tqO3I69PiOXp4hXfZ7ayupvfS0kB8PW3fBR2bDNA,3700
89
87
  wayfinder_paths/core/wallets/WalletManager.py,sha256=sptj0Dya9iM87BDzUktrYM_Mw33xyVJNrRUTVfBjHGw,1870
90
88
  wayfinder_paths/core/wallets/__init__.py,sha256=hIuhy64pJOs_8mAP7Zup28goXbT8qjBeeVYMkbqlyu8,315
91
89
  wayfinder_paths/policies/enso.py,sha256=oytco04eeGjiRbZPGFE1YpH4NxvV0tfVM14QmlyzjkY,428
@@ -97,34 +95,34 @@ wayfinder_paths/policies/hyperliquid.py,sha256=hAxNtWdxavwf_a-AnlXMOmEYakkNBkrPT
97
95
  wayfinder_paths/policies/moonwell.py,sha256=sKWLbruMKiW7Yh1DhXdVPRe0JBP-nooNybRz0G9PgvA,1605
98
96
  wayfinder_paths/policies/prjx.py,sha256=6kfZ6OQFroFHYJl4vSWT-svwwfvoHlS_ZrcHt8nmZMU,743
99
97
  wayfinder_paths/policies/util.py,sha256=r8xQLPvE3kU21_LG6VbkFI9sUSYltcsKunryZdHOUDA,912
100
- wayfinder_paths/run_strategy.py,sha256=TPtewPaNc4IjSLF83BKhEOYTJacnHNhiiyWjbEwb1oc,11830
98
+ wayfinder_paths/run_strategy.py,sha256=dBkIw5GUru1ZDOycQs6PWLm1E6dYAcO_cRRNpg6GAXI,11924
101
99
  wayfinder_paths/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
- wayfinder_paths/scripts/create_strategy.py,sha256=a4TOYg7iNhnnV2A1emTfxo0mvZzW-Uitnksl5LDsPGQ,5357
103
- wayfinder_paths/scripts/make_wallets.py,sha256=LkWr65mKtKMYlm2ZINsacvnIJ--A5c97xG9ZY1azVec,5242
104
- wayfinder_paths/scripts/run_strategy.py,sha256=QXu30xL1DcyucF80VhH2ArzyOqcZkTi-4VFYD0D01f0,4453
100
+ wayfinder_paths/scripts/create_strategy.py,sha256=WQQLBhClfjyLxEaKubQkBqBpSOFESnk1m6WTau9LylQ,5352
101
+ wayfinder_paths/scripts/make_wallets.py,sha256=RuCa9uYAsOzv8TyFdeOH89-SPJVGXwl5RuAqfJesLOk,5237
102
+ wayfinder_paths/scripts/run_strategy.py,sha256=xXa9Ch7mf1UXSO2UqyUZ6_IJG0TOjoYPyTzCU1U56TM,4450
105
103
  wayfinder_paths/strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
104
  wayfinder_paths/strategies/basis_trading_strategy/README.md,sha256=rTUXQ2owEoPmXlfHcJfRFCwcQxlU3a4hOJGN5kaWWQ0,7176
107
105
  wayfinder_paths/strategies/basis_trading_strategy/__init__.py,sha256=kVcehFjBUtoi5xzSHI56jtDghsy0nYl6XIE6BI1l6aI,79
108
106
  wayfinder_paths/strategies/basis_trading_strategy/constants.py,sha256=PJ1WtSALxiuW1FXx-BF30ciFISEhO5VBfrSZyfhPuz0,45
109
107
  wayfinder_paths/strategies/basis_trading_strategy/examples.json,sha256=q2wlAH8Gr-LUJeamKzWL1EtChL3TBWe0HQ4_P-VCdqQ,429
110
- wayfinder_paths/strategies/basis_trading_strategy/snapshot_mixin.py,sha256=Z1rgAfLGaSFFL2bS9_XPc7RzpY1Q74jZQGc86Yo_0DQ,38634
111
- wayfinder_paths/strategies/basis_trading_strategy/strategy.py,sha256=jfLz0tuyqDhoWIGxuYRcPQLhJNeHV6aeBG5jSZIpsEo,171710
112
- wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py,sha256=FH0napmPYTzmflxfyqrqHujO9fmatYbXRH19LSsO_sA,31579
108
+ wayfinder_paths/strategies/basis_trading_strategy/snapshot_mixin.py,sha256=jjXv-w-uXdkw3-eSUgMmWCE7cPCRrkhyD4_TQjOnRO0,38640
109
+ wayfinder_paths/strategies/basis_trading_strategy/strategy.py,sha256=lntYxZCNyNvnobwBk3UFXiqUABnrFnIObwFGVDO6GV8,161245
110
+ wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py,sha256=PWTJf2sqNb4BkKQytr_teqOqiV5n_7Fh5fPeZtr9Ito,40149
113
111
  wayfinder_paths/strategies/basis_trading_strategy/types.py,sha256=rlbouTUOVPLfGPzMbsf-fUmMcn0R_OsG-IdfiBJmmqI,845
114
112
  wayfinder_paths/strategies/config.py,sha256=5dv-8tWwoxH3Sxd9jtiw90shrLipEe3UlU-IYUBfciM,2762
115
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=2QYulV-rr_Q4rVJTn-Sd0Zurbi7f_1k6V5a808JaqfY,4182
113
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=3dOmUCjs_zu4TgPhis0WG-U1XP_dl9aEGi49EkW_-jw,4180
116
114
  wayfinder_paths/strategies/hyperlend_stable_yield_strategy/examples.json,sha256=GbVo2p6QiG6M7Ma5s671lw8G9JwnMl1h0n9mrtt-ZS8,164
117
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=hCcJk3YTPy5NSdWpHWXbAeLxjp4-zPY0MWeKb7qBBz4,91667
115
+ wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=QQ18aOZD2M7xdY6LttmrTALA-TyyFQASgf6b3RlTMOg,92076
118
116
  wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py,sha256=puHIf160DQ_a1G3LXFHjIel504vKDhZvqktysyEwOdo,15296
119
- wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/README.md,sha256=Vt8Ce429dkiZRKjfx2c-PEEykp62mbjfBcvOCXe7yjY,4517
117
+ wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/README.md,sha256=fv4uLA0Ioxp_LS35aFLhVCPJPoG_uvEYV89KYKmWv_o,4516
120
118
  wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/examples.json,sha256=kgNRdZcqne8XTm-Y8Hv1a1pdajRQsey4Qhd5La-iWss,164
121
- wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py,sha256=sR6KbfEjBlCo6BCF2S3-IRd6Ir1cOF1pl4UNfts1Erg,125347
119
+ wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py,sha256=PhFwyAWbO7qyJ2tOldTIIW9rK6ElHXbAEtRyo909ztQ,125722
122
120
  wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/test_strategy.py,sha256=9PfA5AiTdsyWcd3weNgFaoYJ5iWirZSPFoUwSBts7BY,31248
123
- wayfinder_paths/strategies/stablecoin_yield_strategy/README.md,sha256=KvIkgUdNuG5MGoKDQnth1BvIfQ9XVy6l0V2reYi9oR4,4954
121
+ wayfinder_paths/strategies/stablecoin_yield_strategy/README.md,sha256=GirWeShoIVyzwFIJLta5oNLsa62Gozx2nQ5cFGrgxNM,4952
124
122
  wayfinder_paths/strategies/stablecoin_yield_strategy/examples.json,sha256=pL1DNFEvYvXKK7xXD5oQYFPQj3Cm1ocKnk6r_iZk0IY,423
125
- wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=e9AW57Co_xffjm07BGTwPZ6COIHra2ri7ip8eYUXO6g,75424
126
- wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py,sha256=z3vkiyELwJipWNjksdG3Vs6HIVE_y-UoHJCDezXMH60,19967
127
- wayfinder_paths/templates/adapter/README.md,sha256=nQkJeAfHXXSJj_dXaiFq5LarpHGaDmxwgb0U9pxACqQ,2925
123
+ wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=-WEQO70p-jMlDGtAVbv-vdBXIXSOp3SKm_2sXrxvbW0,75699
124
+ wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py,sha256=ScEJTu4WAFzYmAZUX2Y3fO97RVF2mhADewUxz7lruzc,20669
125
+ wayfinder_paths/templates/adapter/README.md,sha256=pat-Xdvu1y8-neKcgvW8ygVlCkuj2OdHLgp1prJDRkY,2894
128
126
  wayfinder_paths/templates/adapter/adapter.py,sha256=UGPvD8SNcrEtYQXRTUxvK9WZ9Bzx1Xwb8sr9zSbqnuc,763
129
127
  wayfinder_paths/templates/adapter/examples.json,sha256=KLHy3AgPIplAaZN0qY2A-HBMa1xXkMhIyusORovTD9w,79
130
128
  wayfinder_paths/templates/adapter/test_adapter.py,sha256=PeG9ZZwx-cWXCDUKxrvj1cR8ljo9aXrKANZuz2hFAhk,1510
@@ -136,7 +134,7 @@ wayfinder_paths/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
136
134
  wayfinder_paths/tests/test_smoke_manifest.py,sha256=kTcIa4qikcspVh2ohQIk0aHUdIvBvcQBfNbm3PNiVvg,1636
137
135
  wayfinder_paths/tests/test_test_coverage.py,sha256=9NrZeVmP02D4W7Qc0XjciC05bhvdTCVibYjTGfa_GQk,7893
138
136
  wayfinder_paths/tests/test_utils.py,sha256=pxHT0QKFlyJeJo8bFnKXzWcOdi6t8rbJ0JFCBaFCBRQ,2112
139
- wayfinder_paths-0.1.10.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
140
- wayfinder_paths-0.1.10.dist-info/METADATA,sha256=Nyi2X5KQqUSKYoXjM7MQl_mnYZ8EIYbZ4t0BPwC-RSY,25656
141
- wayfinder_paths-0.1.10.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
142
- wayfinder_paths-0.1.10.dist-info/RECORD,,
137
+ wayfinder_paths-0.1.13.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
138
+ wayfinder_paths-0.1.13.dist-info/METADATA,sha256=yu9x6tdOizRjLaEEzr-g3gUrA1I0VAH_FUsJNu5O6kk,25587
139
+ wayfinder_paths-0.1.13.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
140
+ wayfinder_paths-0.1.13.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 strategy files with the correct names
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,22 +0,0 @@
1
- {
2
- "user": {
3
- "username": "your_username",
4
- "password": "your_password",
5
- "refresh_token": null,
6
- "api_key": "sk_live_abc123..."
7
- },
8
- "system": {
9
- "api_base_url": "https://wayfinder.ai/api/v1",
10
- "api_key": "sk_live_abc123...",
11
- "wallets_path": "wallets.json"
12
- },
13
- "strategy": {
14
- "rpc_urls": {
15
- "1": "https://eth.llamarpc.com",
16
- "42161": "https://arb1.arbitrum.io/rpc",
17
- "8453": "https://mainnet.base.org",
18
- "solana": "https://api.mainnet-beta.solana.com",
19
- "999": "https://rpc.hyperliquid.xyz/evm"
20
- }
21
- }
22
- }
@@ -1,61 +0,0 @@
1
- import json
2
- import os
3
-
4
- from pydantic import Field
5
- from pydantic_settings import BaseSettings, SettingsConfigDict
6
-
7
-
8
- class CoreSettings(BaseSettings):
9
- """
10
- Core settings for Wayfinder Paths Engine
11
- These are minimal settings required by the core engine
12
- """
13
-
14
- model_config = SettingsConfigDict(
15
- # Note: .env file is only used for publishing (REPOSITORY_NAME, PUBLISH_TOKEN)
16
- # All other configuration should come from config.json
17
- case_sensitive=False,
18
- extra="ignore", # Ignore extra environment variables (e.g., from Django)
19
- )
20
-
21
- # Core API Configuration
22
- API_ENV: str = Field(default="development")
23
-
24
- def _compute_default_api_url() -> str:
25
- """
26
- Determine default API base URL from config.json if present, otherwise fallback.
27
- Do not mutate the value (consistent with rpc_urls resolution).
28
- """
29
- cfg_path = os.getenv("WAYFINDER_CONFIG_PATH", "config.json")
30
- base = None
31
- try:
32
- with open(cfg_path) as f:
33
- cfg = json.load(f)
34
- system = cfg.get("system", {}) if isinstance(cfg, dict) else {}
35
- candidate = system.get("api_base_url")
36
- if isinstance(candidate, str) and candidate.strip():
37
- base = candidate.strip()
38
- except Exception:
39
- # Config is optional; ignore errors and use fallback
40
- pass
41
-
42
- if not base:
43
- # Provide a sensible default that includes the full API root
44
- base = "https://wayfinder.ai/api/v1"
45
- return base
46
-
47
- WAYFINDER_API_URL: str = Field(default_factory=_compute_default_api_url)
48
-
49
- # Network Configuration
50
- NETWORK: str = Field(default="testnet") # mainnet, testnet, devnet
51
-
52
- # Logging
53
- LOG_LEVEL: str = Field(default="INFO")
54
- LOG_FILE: str = Field(default="logs/strategy.log")
55
-
56
- # Safety
57
- DRY_RUN: bool = Field(default=False)
58
-
59
-
60
- # Core settings instance
61
- settings = CoreSettings()