wayfinder-paths 0.1.15__py3-none-any.whl → 0.1.16__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of wayfinder-paths might be problematic. Click here for more details.
- wayfinder_paths/adapters/balance_adapter/README.md +19 -20
- wayfinder_paths/adapters/balance_adapter/adapter.py +66 -37
- wayfinder_paths/adapters/balance_adapter/test_adapter.py +2 -8
- wayfinder_paths/adapters/brap_adapter/README.md +22 -19
- wayfinder_paths/adapters/brap_adapter/adapter.py +33 -34
- wayfinder_paths/adapters/brap_adapter/test_adapter.py +2 -18
- wayfinder_paths/adapters/hyperlend_adapter/adapter.py +40 -56
- wayfinder_paths/adapters/hyperlend_adapter/test_adapter.py +1 -8
- wayfinder_paths/adapters/moonwell_adapter/README.md +29 -31
- wayfinder_paths/adapters/moonwell_adapter/adapter.py +301 -662
- wayfinder_paths/adapters/moonwell_adapter/test_adapter.py +275 -179
- wayfinder_paths/core/config.py +8 -47
- wayfinder_paths/core/constants/base.py +0 -1
- wayfinder_paths/core/constants/erc20_abi.py +13 -13
- wayfinder_paths/core/strategies/Strategy.py +6 -2
- wayfinder_paths/core/utils/erc20_service.py +100 -0
- wayfinder_paths/core/utils/evm_helpers.py +1 -1
- wayfinder_paths/core/utils/transaction.py +191 -0
- wayfinder_paths/core/utils/web3.py +66 -0
- wayfinder_paths/run_strategy.py +37 -6
- wayfinder_paths/strategies/basis_trading_strategy/strategy.py +200 -224
- wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py +128 -151
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md +0 -1
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py +52 -78
- wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py +0 -12
- wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/README.md +0 -1
- wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py +39 -64
- wayfinder_paths/strategies/stablecoin_yield_strategy/README.md +0 -1
- wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py +42 -85
- wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py +0 -8
- wayfinder_paths/templates/strategy/README.md +1 -5
- {wayfinder_paths-0.1.15.dist-info → wayfinder_paths-0.1.16.dist-info}/METADATA +3 -41
- {wayfinder_paths-0.1.15.dist-info → wayfinder_paths-0.1.16.dist-info}/RECORD +35 -44
- {wayfinder_paths-0.1.15.dist-info → wayfinder_paths-0.1.16.dist-info}/WHEEL +1 -1
- wayfinder_paths/core/clients/sdk_example.py +0 -125
- wayfinder_paths/core/engine/__init__.py +0 -5
- wayfinder_paths/core/services/__init__.py +0 -0
- wayfinder_paths/core/services/base.py +0 -131
- wayfinder_paths/core/services/local_evm_txn.py +0 -350
- wayfinder_paths/core/services/local_token_txn.py +0 -238
- wayfinder_paths/core/services/web3_service.py +0 -43
- wayfinder_paths/core/wallets/README.md +0 -88
- wayfinder_paths/core/wallets/WalletManager.py +0 -56
- wayfinder_paths/core/wallets/__init__.py +0 -7
- wayfinder_paths/scripts/run_strategy.py +0 -152
- wayfinder_paths/strategies/config.py +0 -85
- {wayfinder_paths-0.1.15.dist-info → wayfinder_paths-0.1.16.dist-info}/LICENSE +0 -0
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
wayfinder_paths/__init__.py,sha256=YgOg-PRPT3ROh0zg6hgQyQE-YFkFGw6TM77zDvB4_sE,427
|
|
2
2
|
wayfinder_paths/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
wayfinder_paths/adapters/balance_adapter/README.md,sha256=
|
|
4
|
-
wayfinder_paths/adapters/balance_adapter/adapter.py,sha256=
|
|
3
|
+
wayfinder_paths/adapters/balance_adapter/README.md,sha256=NXd9NSIz6j10_WL8UMDRJ3LXepiZ0DMfRgd_hmulg9o,3155
|
|
4
|
+
wayfinder_paths/adapters/balance_adapter/adapter.py,sha256=nL29BY12rbCiB3WUgpNHvyMAYZtoxjz6n1CD3AmbFa8,11126
|
|
5
5
|
wayfinder_paths/adapters/balance_adapter/examples.json,sha256=3R1M4B_VsIy29viAuFT9nQbnQShWl8ZbU-rnSNWUW9U,129
|
|
6
|
-
wayfinder_paths/adapters/balance_adapter/test_adapter.py,sha256=
|
|
7
|
-
wayfinder_paths/adapters/brap_adapter/README.md,sha256=
|
|
6
|
+
wayfinder_paths/adapters/balance_adapter/test_adapter.py,sha256=UQArZUMLWC_F9vsXt_cKhwX_4_4SWwOIwEGSFTwlvkQ,6078
|
|
7
|
+
wayfinder_paths/adapters/brap_adapter/README.md,sha256=Yihq35seDSvypW9c6u7IJViDGPTTWs_X3-mfjjc6uRA,7477
|
|
8
8
|
wayfinder_paths/adapters/brap_adapter/__init__.py,sha256=jpqxZ-Bv_8kBo-lhgO_QCWaVZNq_WwlkNBHD4RsqOJg,90
|
|
9
|
-
wayfinder_paths/adapters/brap_adapter/adapter.py,sha256=
|
|
9
|
+
wayfinder_paths/adapters/brap_adapter/adapter.py,sha256=1qdE9jfnxkwuIKxeVnn6z50hGtzFeLab_DL8whni4g4,32539
|
|
10
10
|
wayfinder_paths/adapters/brap_adapter/examples.json,sha256=FGZhNaMCAQ56KhovEGSsV1BHOcMd_QqQBNmCU6m8zfQ,5389
|
|
11
|
-
wayfinder_paths/adapters/brap_adapter/test_adapter.py,sha256=
|
|
11
|
+
wayfinder_paths/adapters/brap_adapter/test_adapter.py,sha256=ohaiMPyGxW5faOXjjAHuW5yAdcqx_lRWa3-Tm6Px0U0,12110
|
|
12
12
|
wayfinder_paths/adapters/hyperlend_adapter/__init__.py,sha256=DsWOnEn-Tlu9ZoIoGaFeSqOYI3b4lXGVK3_FTntWpLw,139
|
|
13
|
-
wayfinder_paths/adapters/hyperlend_adapter/adapter.py,sha256=
|
|
14
|
-
wayfinder_paths/adapters/hyperlend_adapter/test_adapter.py,sha256=
|
|
13
|
+
wayfinder_paths/adapters/hyperlend_adapter/adapter.py,sha256=Zm1be-r6KgUjyGv6SVPzLsEMadBg4KFOkGrCCY4twUg,9940
|
|
14
|
+
wayfinder_paths/adapters/hyperlend_adapter/test_adapter.py,sha256=UEKGh-cRMhuc7k1tClLu8wuh6oQ4KV8ViczUa62qibk,11811
|
|
15
15
|
wayfinder_paths/adapters/hyperliquid_adapter/__init__.py,sha256=QpA258RzVbxzsha86HQduAuNVG0g0qvsI5OcZunQ8DQ,467
|
|
16
16
|
wayfinder_paths/adapters/hyperliquid_adapter/adapter.py,sha256=Z5Gl9M9wk7PVUIyP_i2oAMegmCTbVFd48Zp57DURh6M,34510
|
|
17
17
|
wayfinder_paths/adapters/hyperliquid_adapter/executor.py,sha256=ix1FmRO6DPiPk0BwGy4zrCP5IfKzzMSQNhnOmIewfGA,18977
|
|
@@ -26,10 +26,10 @@ wayfinder_paths/adapters/ledger_adapter/__init__.py,sha256=DK9GShIUiQ57YKSqhCKoS
|
|
|
26
26
|
wayfinder_paths/adapters/ledger_adapter/adapter.py,sha256=6Fjxltvn9iXp_-CZtN7lDz1Xt0lWaNQX2drx6lgeryw,10260
|
|
27
27
|
wayfinder_paths/adapters/ledger_adapter/examples.json,sha256=DdqTSe4vnBrfIycQVQQ_JZom7fBGHbL7MR4ppK9ljCY,3936
|
|
28
28
|
wayfinder_paths/adapters/ledger_adapter/test_adapter.py,sha256=9q38ublf4mxc8c8K5Rttb8JevljHNz7urEab6czWPpg,7422
|
|
29
|
-
wayfinder_paths/adapters/moonwell_adapter/README.md,sha256=
|
|
29
|
+
wayfinder_paths/adapters/moonwell_adapter/README.md,sha256=6vHLZTJBeH1hOkx0T477laZVTlqmFqRCrf3aBheH7EM,6119
|
|
30
30
|
wayfinder_paths/adapters/moonwell_adapter/__init__.py,sha256=Gf6AM4BylxxPenUQ_cveUg70QcB9i61SIYaCsXMSjXw,135
|
|
31
|
-
wayfinder_paths/adapters/moonwell_adapter/adapter.py,sha256=
|
|
32
|
-
wayfinder_paths/adapters/moonwell_adapter/test_adapter.py,sha256=
|
|
31
|
+
wayfinder_paths/adapters/moonwell_adapter/adapter.py,sha256=Fsao8ggTmrDJRnQKyov2C7HJb3ucXhVQx9iq2-yIPGM,45081
|
|
32
|
+
wayfinder_paths/adapters/moonwell_adapter/test_adapter.py,sha256=L3gBOaiAm9l0UDokTTeB_Ztq2XvWZta27jTG5tm2h8Q,25661
|
|
33
33
|
wayfinder_paths/adapters/pool_adapter/README.md,sha256=cBeWz8UzOOIKCkyBUDGTujR1vZNPyhgqKO2HNgq0j3I,2470
|
|
34
34
|
wayfinder_paths/adapters/pool_adapter/__init__.py,sha256=rv56pYzz2Gqiz33uoPJktCQRe3CRt8U9ry5GbjVgK3A,90
|
|
35
35
|
wayfinder_paths/adapters/pool_adapter/adapter.py,sha256=zHYCcCjum3jJpG4BZnTJ8YuOyI9ZJlSN5r8TMO4KCDM,1806
|
|
@@ -60,31 +60,24 @@ wayfinder_paths/core/clients/WalletClient.py,sha256=efvdJlS1fZfvNBU_hXn63mOKoETB
|
|
|
60
60
|
wayfinder_paths/core/clients/WayfinderClient.py,sha256=gl-YHTYDa5GStg5O2xETiL4dAaCLphRos-btB1rQzVE,4319
|
|
61
61
|
wayfinder_paths/core/clients/__init__.py,sha256=2xpZ4tBYkK0QjpBI88ZB4t4esfIc-enm0LqHdRo479M,1173
|
|
62
62
|
wayfinder_paths/core/clients/protocols.py,sha256=Z0vvce55wfXrSXfuO0Y-s9EfT9zvwUier4-XhwPZSTs,7984
|
|
63
|
-
wayfinder_paths/core/
|
|
64
|
-
wayfinder_paths/core/config.py,sha256=ADdrYAapSCwpV4ljSziBmxZV2Z2ORsu8ku-_MptSjjc,9060
|
|
63
|
+
wayfinder_paths/core/config.py,sha256=hcmK0o_FPuAqQvPCOS_OHwRsC8o6i8ftW13dvAN1Hck,7538
|
|
65
64
|
wayfinder_paths/core/constants/__init__.py,sha256=upAVwHDgMXJ3DWaAuXo52UZktS8NZ17s5XwVH0qxgzg,591
|
|
66
|
-
wayfinder_paths/core/constants/base.py,sha256=
|
|
67
|
-
wayfinder_paths/core/constants/erc20_abi.py,sha256=
|
|
65
|
+
wayfinder_paths/core/constants/base.py,sha256=mJHZWZ9g9loIV0RVVJNRAM0wUid4vW2ql1bn-qAco48,1481
|
|
66
|
+
wayfinder_paths/core/constants/erc20_abi.py,sha256=SQD4aNiw_xhb-8NxsnAfUAx1LeG9cIaBbCVrtU_5Z68,2885
|
|
68
67
|
wayfinder_paths/core/constants/hyperlend_abi.py,sha256=nIaqsfMl5-_InYN82pjz0FIKsT-AnNkwz0DIc9VrZSc,4331
|
|
69
68
|
wayfinder_paths/core/constants/moonwell_abi.py,sha256=ALb-kKdfF9aUtEHR8OlqvA-3zJ48N66RvVptTJyCfe4,13135
|
|
70
69
|
wayfinder_paths/core/engine/StrategyJob.py,sha256=zkYo8TmHdj1Hj8cHMmeLgyWJzO7Vy_onF7I0hq_H_2k,5355
|
|
71
|
-
wayfinder_paths/core/engine/__init__.py,sha256=WZ2KWnmOZnBocYrqdwq6EUHp6lmTyrKyXgHSHyQswnU,108
|
|
72
|
-
wayfinder_paths/core/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
|
-
wayfinder_paths/core/services/base.py,sha256=xnedv_dOh5sjJkpFzkgPab1ILSzJeHN_A19q54FywHk,4128
|
|
74
|
-
wayfinder_paths/core/services/local_evm_txn.py,sha256=hOVbCKtDJmcYlFdb2OxGjkfdmOd4TV6nj6m2b7lAneQ,13459
|
|
75
|
-
wayfinder_paths/core/services/local_token_txn.py,sha256=R7IHcvM4hyMxY17AjYAelVZm_kztkOyjZtg3KpCJzTY,8327
|
|
76
70
|
wayfinder_paths/core/services/test_local_evm_txn.py,sha256=tmP3pt4QBihA6T3PgCSd8hjBkVh4ImNtKGFiFKOkWWA,4829
|
|
77
|
-
wayfinder_paths/core/
|
|
78
|
-
wayfinder_paths/core/strategies/Strategy.py,sha256=Y6UidZ_1LVD_RSlbr9trySCZ4u9Sps4667sc0RXGVQw,9707
|
|
71
|
+
wayfinder_paths/core/strategies/Strategy.py,sha256=WTO8KLieMufdCEUjwT5qWmpnz6kA3Ris-O0Skr2OusI,9973
|
|
79
72
|
wayfinder_paths/core/strategies/__init__.py,sha256=2NjvvDw6sIQGUFV4Qo1olXTxUOY3GmCM8Ivz_J1FSmc,157
|
|
80
73
|
wayfinder_paths/core/strategies/base.py,sha256=-s0qeiGZl5CHTUL2PavGXM7ACkNlaa0c4jeZR_4DuBM,155
|
|
81
74
|
wayfinder_paths/core/strategies/descriptors.py,sha256=2Olef0VWols1CWb-TWcb5pil2rztC0jP6F_Trpv2hIw,1958
|
|
82
75
|
wayfinder_paths/core/utils/__init__.py,sha256=TEylMYHnG37Z3mizSmw28bUm0vyNBFzf0Nc8dB_7l1A,73
|
|
83
|
-
wayfinder_paths/core/utils/
|
|
76
|
+
wayfinder_paths/core/utils/erc20_service.py,sha256=MM2nE1iirPdqpohzvmbv50tFsu03LzAer7cmNWHjYQQ,3422
|
|
77
|
+
wayfinder_paths/core/utils/evm_helpers.py,sha256=ml6f2oMRv_YWFoiPxsoZYUSqM-IOkp4IbTrpfFHn-fU,5400
|
|
78
|
+
wayfinder_paths/core/utils/transaction.py,sha256=JDeSOHw7YxTMsYmMmCXk28nIdmH9FQ99b8F0fw0fYl4,6914
|
|
84
79
|
wayfinder_paths/core/utils/wallets.py,sha256=ccCQ128lDShO265AFMOCdijzPLucWe-Neg5wjLrOsnk,1948
|
|
85
|
-
wayfinder_paths/core/
|
|
86
|
-
wayfinder_paths/core/wallets/WalletManager.py,sha256=sptj0Dya9iM87BDzUktrYM_Mw33xyVJNrRUTVfBjHGw,1870
|
|
87
|
-
wayfinder_paths/core/wallets/__init__.py,sha256=hIuhy64pJOs_8mAP7Zup28goXbT8qjBeeVYMkbqlyu8,315
|
|
80
|
+
wayfinder_paths/core/utils/web3.py,sha256=UuTZ102CW9KNYgupwN1rm7WrqEgi8xOirUi1OOix7kI,1903
|
|
88
81
|
wayfinder_paths/policies/enso.py,sha256=oytco04eeGjiRbZPGFE1YpH4NxvV0tfVM14QmlyzjkY,428
|
|
89
82
|
wayfinder_paths/policies/erc20.py,sha256=K5PQCUivBrU2nYmIdsIARzRiFy36Rijver-RJnaxNT8,960
|
|
90
83
|
wayfinder_paths/policies/evm.py,sha256=8fJpjAl6XVxr51sVMw_VkWmIaI_lj2T7qrLcR8_sWgs,713
|
|
@@ -94,38 +87,36 @@ wayfinder_paths/policies/hyperliquid.py,sha256=hAxNtWdxavwf_a-AnlXMOmEYakkNBkrPT
|
|
|
94
87
|
wayfinder_paths/policies/moonwell.py,sha256=sKWLbruMKiW7Yh1DhXdVPRe0JBP-nooNybRz0G9PgvA,1605
|
|
95
88
|
wayfinder_paths/policies/prjx.py,sha256=6kfZ6OQFroFHYJl4vSWT-svwwfvoHlS_ZrcHt8nmZMU,743
|
|
96
89
|
wayfinder_paths/policies/util.py,sha256=r8xQLPvE3kU21_LG6VbkFI9sUSYltcsKunryZdHOUDA,912
|
|
97
|
-
wayfinder_paths/run_strategy.py,sha256=
|
|
90
|
+
wayfinder_paths/run_strategy.py,sha256=vs54IVLzWpdzRFb8siMcvvlBfX80StmDp8ExaulivVU,13324
|
|
98
91
|
wayfinder_paths/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
99
92
|
wayfinder_paths/scripts/create_strategy.py,sha256=WQQLBhClfjyLxEaKubQkBqBpSOFESnk1m6WTau9LylQ,5352
|
|
100
93
|
wayfinder_paths/scripts/make_wallets.py,sha256=RuCa9uYAsOzv8TyFdeOH89-SPJVGXwl5RuAqfJesLOk,5237
|
|
101
|
-
wayfinder_paths/scripts/run_strategy.py,sha256=xXa9Ch7mf1UXSO2UqyUZ6_IJG0TOjoYPyTzCU1U56TM,4450
|
|
102
94
|
wayfinder_paths/strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
103
95
|
wayfinder_paths/strategies/basis_trading_strategy/README.md,sha256=rTUXQ2owEoPmXlfHcJfRFCwcQxlU3a4hOJGN5kaWWQ0,7176
|
|
104
96
|
wayfinder_paths/strategies/basis_trading_strategy/__init__.py,sha256=kVcehFjBUtoi5xzSHI56jtDghsy0nYl6XIE6BI1l6aI,79
|
|
105
97
|
wayfinder_paths/strategies/basis_trading_strategy/constants.py,sha256=PJ1WtSALxiuW1FXx-BF30ciFISEhO5VBfrSZyfhPuz0,45
|
|
106
98
|
wayfinder_paths/strategies/basis_trading_strategy/examples.json,sha256=q2wlAH8Gr-LUJeamKzWL1EtChL3TBWe0HQ4_P-VCdqQ,429
|
|
107
99
|
wayfinder_paths/strategies/basis_trading_strategy/snapshot_mixin.py,sha256=jjXv-w-uXdkw3-eSUgMmWCE7cPCRrkhyD4_TQjOnRO0,38640
|
|
108
|
-
wayfinder_paths/strategies/basis_trading_strategy/strategy.py,sha256=
|
|
109
|
-
wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py,sha256=
|
|
100
|
+
wayfinder_paths/strategies/basis_trading_strategy/strategy.py,sha256=9lHl20065LQSc2GSbyDN0z4Y_1fHVpdn7X6GfEwFKtY,162891
|
|
101
|
+
wayfinder_paths/strategies/basis_trading_strategy/test_strategy.py,sha256=NDqJIA47IwXAksxyWIcFGqFv67O628Q79k3gSj0SNtM,38281
|
|
110
102
|
wayfinder_paths/strategies/basis_trading_strategy/types.py,sha256=rlbouTUOVPLfGPzMbsf-fUmMcn0R_OsG-IdfiBJmmqI,845
|
|
111
|
-
wayfinder_paths/strategies/
|
|
112
|
-
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=3dOmUCjs_zu4TgPhis0WG-U1XP_dl9aEGi49EkW_-jw,4180
|
|
103
|
+
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/README.md,sha256=20gA0Ae37tuILWdUoODcVLFTR73S7hTGUv4lAZhOvzA,4073
|
|
113
104
|
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/examples.json,sha256=GbVo2p6QiG6M7Ma5s671lw8G9JwnMl1h0n9mrtt-ZS8,164
|
|
114
|
-
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=
|
|
115
|
-
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py,sha256=
|
|
116
|
-
wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/README.md,sha256=
|
|
105
|
+
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/strategy.py,sha256=rWwm_Zd9__XCF6Rl1qd2SMEXmxbDq9v2GeP475DQxf8,94074
|
|
106
|
+
wayfinder_paths/strategies/hyperlend_stable_yield_strategy/test_strategy.py,sha256=82VvObTwpmsnTlh_jMwLXHMQFDEH1qgbee4xQoDEzXo,16429
|
|
107
|
+
wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/README.md,sha256=Rfx6qeSYL9ttn7Wxi-_LiM7qqleoDByfhLaqLiGSKAw,4773
|
|
117
108
|
wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/examples.json,sha256=kgNRdZcqne8XTm-Y8Hv1a1pdajRQsey4Qhd5La-iWss,164
|
|
118
|
-
wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py,sha256=
|
|
109
|
+
wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/strategy.py,sha256=98P6qzaiqkeVU8nkeCwRaJRXn2SiQ_OFLbynWanfHFc,161871
|
|
119
110
|
wayfinder_paths/strategies/moonwell_wsteth_loop_strategy/test_strategy.py,sha256=f1w6jYZlfg0pdZDLmD01PNXENph8MIb03_GgPRNEXZ4,38348
|
|
120
|
-
wayfinder_paths/strategies/stablecoin_yield_strategy/README.md,sha256=
|
|
111
|
+
wayfinder_paths/strategies/stablecoin_yield_strategy/README.md,sha256=LOWLL-Z3DX0WTitZYkoVXjzVzGtqR9dCAy2L0OK8qqM,4878
|
|
121
112
|
wayfinder_paths/strategies/stablecoin_yield_strategy/examples.json,sha256=pL1DNFEvYvXKK7xXD5oQYFPQj3Cm1ocKnk6r_iZk0IY,423
|
|
122
|
-
wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=
|
|
123
|
-
wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py,sha256=
|
|
113
|
+
wayfinder_paths/strategies/stablecoin_yield_strategy/strategy.py,sha256=xe8s_Qi7poeSQvQKIBU2aUoERtQaDZlndvzZpd399Fc,78092
|
|
114
|
+
wayfinder_paths/strategies/stablecoin_yield_strategy/test_strategy.py,sha256=Rqy28eTEuvQcB0dJv-bUg73h2h_KqxUr3wEKkaN-gnw,20630
|
|
124
115
|
wayfinder_paths/templates/adapter/README.md,sha256=saBsgYOjdI-EMZIjc8wO0CYm4KgsC7zN7I_ucH6iNeg,2886
|
|
125
116
|
wayfinder_paths/templates/adapter/adapter.py,sha256=UGPvD8SNcrEtYQXRTUxvK9WZ9Bzx1Xwb8sr9zSbqnuc,763
|
|
126
117
|
wayfinder_paths/templates/adapter/examples.json,sha256=KLHy3AgPIplAaZN0qY2A-HBMa1xXkMhIyusORovTD9w,79
|
|
127
118
|
wayfinder_paths/templates/adapter/test_adapter.py,sha256=PeG9ZZwx-cWXCDUKxrvj1cR8ljo9aXrKANZuz2hFAhk,1510
|
|
128
|
-
wayfinder_paths/templates/strategy/README.md,sha256=
|
|
119
|
+
wayfinder_paths/templates/strategy/README.md,sha256=LMSE7Zo7IptU7MDMkIH76kkCOhP5FLeE3DxCh4Vnhco,4640
|
|
129
120
|
wayfinder_paths/templates/strategy/examples.json,sha256=s8UdlD5uxLITQrRMCqgiaAP0IE0tdnnLfX-Zn-OChIc,135
|
|
130
121
|
wayfinder_paths/templates/strategy/strategy.py,sha256=dso2jhVphsdKNd17JPwnFAFzU01-1kHlWrKPAKIKSWw,2024
|
|
131
122
|
wayfinder_paths/templates/strategy/test_strategy.py,sha256=TWw8NHOLy_dKgffHTK43N5He5gJ-oNUFi5QbSQM3l1k,7591
|
|
@@ -133,7 +124,7 @@ wayfinder_paths/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
133
124
|
wayfinder_paths/tests/test_smoke_manifest.py,sha256=kTcIa4qikcspVh2ohQIk0aHUdIvBvcQBfNbm3PNiVvg,1636
|
|
134
125
|
wayfinder_paths/tests/test_test_coverage.py,sha256=9NrZeVmP02D4W7Qc0XjciC05bhvdTCVibYjTGfa_GQk,7893
|
|
135
126
|
wayfinder_paths/tests/test_utils.py,sha256=pxHT0QKFlyJeJo8bFnKXzWcOdi6t8rbJ0JFCBaFCBRQ,2112
|
|
136
|
-
wayfinder_paths-0.1.
|
|
137
|
-
wayfinder_paths-0.1.
|
|
138
|
-
wayfinder_paths-0.1.
|
|
139
|
-
wayfinder_paths-0.1.
|
|
127
|
+
wayfinder_paths-0.1.16.dist-info/LICENSE,sha256=dYKnlkC_xosBAEQNUvB6cHMuhFgcUtN0oBR7E8_aR2Y,1066
|
|
128
|
+
wayfinder_paths-0.1.16.dist-info/METADATA,sha256=baZT_LBKdtV8t7MzDqM8CGDoQ4nMwUDxototj9fmaHw,22924
|
|
129
|
+
wayfinder_paths-0.1.16.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
130
|
+
wayfinder_paths-0.1.16.dist-info/RECORD,,
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
SDK Usage Examples
|
|
3
|
-
|
|
4
|
-
Demonstrates how to use the SDK with custom client implementations.
|
|
5
|
-
Use cases: mocks for testing, caching layers, alternative endpoints, rate limiting.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from typing import Any
|
|
9
|
-
|
|
10
|
-
from wayfinder_paths.core.clients.ClientManager import ClientManager
|
|
11
|
-
from wayfinder_paths.core.clients.TokenClient import TokenClient
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class CachedTokenClient:
|
|
15
|
-
"""Token client with in-memory caching"""
|
|
16
|
-
|
|
17
|
-
def __init__(self):
|
|
18
|
-
self._cache: dict[str, dict[str, Any]] = {}
|
|
19
|
-
self._default_client = TokenClient()
|
|
20
|
-
|
|
21
|
-
async def get_token_details(
|
|
22
|
-
self, token_id: str, force_refresh: bool = False
|
|
23
|
-
) -> dict[str, Any]:
|
|
24
|
-
cache_key = f"token_{token_id}"
|
|
25
|
-
if not force_refresh and cache_key in self._cache:
|
|
26
|
-
return self._cache[cache_key]
|
|
27
|
-
data = await self._default_client.get_token_details(token_id, force_refresh)
|
|
28
|
-
self._cache[cache_key] = data
|
|
29
|
-
return data
|
|
30
|
-
|
|
31
|
-
async def get_gas_token(self, chain_code: str) -> dict[str, Any]:
|
|
32
|
-
return await self._default_client.get_gas_token(chain_code)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class MockHyperlendClient:
|
|
36
|
-
"""Mock client for testing"""
|
|
37
|
-
|
|
38
|
-
async def get_stable_markets(
|
|
39
|
-
self,
|
|
40
|
-
*,
|
|
41
|
-
required_underlying_tokens: float | None = None,
|
|
42
|
-
buffer_bps: int | None = None,
|
|
43
|
-
min_buffer_tokens: float | None = None,
|
|
44
|
-
) -> dict[str, Any]:
|
|
45
|
-
return {
|
|
46
|
-
"markets": {
|
|
47
|
-
"0xMockToken": {
|
|
48
|
-
"symbol": "USDC",
|
|
49
|
-
"symbol_canonical": "usdc",
|
|
50
|
-
"display_symbol": "USDC",
|
|
51
|
-
"reserve": {},
|
|
52
|
-
"decimals": 6,
|
|
53
|
-
"headroom": 1000000000000,
|
|
54
|
-
"supply_cap": 5000000000000,
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
"notes": [],
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
async def get_assets_view(
|
|
61
|
-
self,
|
|
62
|
-
*,
|
|
63
|
-
user_address: str,
|
|
64
|
-
) -> dict[str, Any]:
|
|
65
|
-
return {
|
|
66
|
-
"block_number": 12345,
|
|
67
|
-
"user": user_address,
|
|
68
|
-
"native_balance_wei": 0,
|
|
69
|
-
"native_balance": 0.0,
|
|
70
|
-
"assets": [],
|
|
71
|
-
"account_data": {
|
|
72
|
-
"total_collateral_base": 0,
|
|
73
|
-
"total_debt_base": 0,
|
|
74
|
-
"available_borrows_base": 0,
|
|
75
|
-
"current_liquidation_threshold": 0,
|
|
76
|
-
"ltv": 0,
|
|
77
|
-
"health_factor_wad": 0,
|
|
78
|
-
"health_factor": 0.0,
|
|
79
|
-
},
|
|
80
|
-
"base_currency_info": {
|
|
81
|
-
"marketReferenceCurrencyUnit": 100000000,
|
|
82
|
-
"marketReferenceCurrencyPriceInUsd": 100000000,
|
|
83
|
-
"networkBaseTokenPriceInUsd": 0,
|
|
84
|
-
"networkBaseTokenPriceDecimals": 8,
|
|
85
|
-
},
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
async def get_market_entry(
|
|
89
|
-
self,
|
|
90
|
-
*,
|
|
91
|
-
token: str,
|
|
92
|
-
) -> dict[str, Any]:
|
|
93
|
-
return {
|
|
94
|
-
"symbol": "USDC",
|
|
95
|
-
"symbol_canonical": "usdc",
|
|
96
|
-
"display_symbol": "USDC",
|
|
97
|
-
"reserve": {},
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
async def get_lend_rate_history(
|
|
101
|
-
self,
|
|
102
|
-
*,
|
|
103
|
-
token: str,
|
|
104
|
-
lookback_hours: int,
|
|
105
|
-
force_refresh: bool | None = None,
|
|
106
|
-
) -> dict[str, Any]:
|
|
107
|
-
return {
|
|
108
|
-
"history": [],
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
async def example_sdk_usage():
|
|
113
|
-
"""Direct client injection - inject only what you customize"""
|
|
114
|
-
|
|
115
|
-
custom_token_client = CachedTokenClient()
|
|
116
|
-
custom_hyperlend_client = MockHyperlendClient()
|
|
117
|
-
|
|
118
|
-
ClientManager(
|
|
119
|
-
clients={
|
|
120
|
-
"token": custom_token_client,
|
|
121
|
-
"hyperlend": custom_hyperlend_client,
|
|
122
|
-
},
|
|
123
|
-
skip_auth=True,
|
|
124
|
-
)
|
|
125
|
-
pass
|
|
File without changes
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
from abc import ABC, abstractmethod
|
|
2
|
-
from typing import Any
|
|
3
|
-
|
|
4
|
-
from web3 import AsyncWeb3
|
|
5
|
-
|
|
6
|
-
from wayfinder_paths.core.constants.base import DEFAULT_TRANSACTION_TIMEOUT
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class TokenTxn(ABC):
|
|
10
|
-
"""Interface describing high-level EVM transaction builders."""
|
|
11
|
-
|
|
12
|
-
@abstractmethod
|
|
13
|
-
async def build_send(
|
|
14
|
-
self,
|
|
15
|
-
*,
|
|
16
|
-
token_id: str,
|
|
17
|
-
amount: float,
|
|
18
|
-
from_address: str,
|
|
19
|
-
to_address: str,
|
|
20
|
-
token_info: dict[str, Any] | None = None,
|
|
21
|
-
) -> tuple[bool, dict[str, Any] | str]:
|
|
22
|
-
"""Build raw transaction data for sending tokens."""
|
|
23
|
-
|
|
24
|
-
@abstractmethod
|
|
25
|
-
def build_erc20_approve(
|
|
26
|
-
self,
|
|
27
|
-
*,
|
|
28
|
-
chain_id: int,
|
|
29
|
-
token_address: str,
|
|
30
|
-
from_address: str,
|
|
31
|
-
spender: str,
|
|
32
|
-
amount: int,
|
|
33
|
-
) -> tuple[bool, dict[str, Any] | str]:
|
|
34
|
-
"""Build raw ERC20 approve transaction data."""
|
|
35
|
-
|
|
36
|
-
@abstractmethod
|
|
37
|
-
async def read_erc20_allowance(
|
|
38
|
-
self, chain: Any, token_address: str, from_address: str, spender_address: str
|
|
39
|
-
) -> dict[str, Any]:
|
|
40
|
-
"""Read allowance granted for a spender."""
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class EvmTxn(ABC):
|
|
44
|
-
"""
|
|
45
|
-
Abstract base class for wallet providers.
|
|
46
|
-
|
|
47
|
-
This interface abstracts all blockchain interactions needed by adapters so the
|
|
48
|
-
rest of the codebase never touches raw web3 primitives. Implementations
|
|
49
|
-
are responsible for RPC resolution, gas estimation, signing, broadcasting and
|
|
50
|
-
transaction confirmations.
|
|
51
|
-
"""
|
|
52
|
-
|
|
53
|
-
@abstractmethod
|
|
54
|
-
async def broadcast_transaction(
|
|
55
|
-
self,
|
|
56
|
-
transaction: dict[str, Any],
|
|
57
|
-
*,
|
|
58
|
-
wait_for_receipt: bool = True,
|
|
59
|
-
timeout: int = DEFAULT_TRANSACTION_TIMEOUT,
|
|
60
|
-
confirmations: int = 1,
|
|
61
|
-
) -> tuple[bool, Any]:
|
|
62
|
-
"""
|
|
63
|
-
Sign and broadcast a transaction dict.
|
|
64
|
-
|
|
65
|
-
Providers must handle gas estimation, gas pricing, nonce selection, signing
|
|
66
|
-
and submission internally so callers can simply pass the transaction data.
|
|
67
|
-
|
|
68
|
-
Args:
|
|
69
|
-
transaction: Dictionary describing the transaction (to, data, value, etc.)
|
|
70
|
-
wait_for_receipt: Whether to wait for the transaction receipt
|
|
71
|
-
timeout: Receipt timeout in seconds
|
|
72
|
-
"""
|
|
73
|
-
pass
|
|
74
|
-
|
|
75
|
-
@abstractmethod
|
|
76
|
-
async def transaction_succeeded(
|
|
77
|
-
self, tx_hash: str, chain_id: int, timeout: int = 120
|
|
78
|
-
) -> bool:
|
|
79
|
-
"""
|
|
80
|
-
Check if a transaction hash succeeded on-chain.
|
|
81
|
-
|
|
82
|
-
Args:
|
|
83
|
-
tx_hash: Transaction hash to inspect
|
|
84
|
-
chain_id: Chain ID where the transaction was broadcast
|
|
85
|
-
timeout: Maximum seconds to wait for a receipt
|
|
86
|
-
|
|
87
|
-
Returns:
|
|
88
|
-
Boolean indicating whether the transaction completed successfully.
|
|
89
|
-
"""
|
|
90
|
-
pass
|
|
91
|
-
|
|
92
|
-
@abstractmethod
|
|
93
|
-
def get_web3(self, chain_id: int) -> AsyncWeb3:
|
|
94
|
-
"""
|
|
95
|
-
Return an AsyncWeb3 instance configured for the given chain.
|
|
96
|
-
|
|
97
|
-
Implementations may create new instances per call or pull from an internal
|
|
98
|
-
cache, but they must document whether the caller is responsible for closing
|
|
99
|
-
the underlying HTTP session.
|
|
100
|
-
"""
|
|
101
|
-
pass
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
class Web3Service(ABC):
|
|
105
|
-
"""Facade that exposes low-level wallet access and higher-level EVM helpers."""
|
|
106
|
-
|
|
107
|
-
@property
|
|
108
|
-
@abstractmethod
|
|
109
|
-
def evm_transactions(self) -> EvmTxn:
|
|
110
|
-
"""Return the wallet provider responsible for RPC, signing, and broadcasting."""
|
|
111
|
-
|
|
112
|
-
@property
|
|
113
|
-
@abstractmethod
|
|
114
|
-
def token_transactions(self) -> TokenTxn:
|
|
115
|
-
"""Returns TokenTxn, for sends and swaps of any token"""
|
|
116
|
-
|
|
117
|
-
async def broadcast_transaction(
|
|
118
|
-
self,
|
|
119
|
-
transaction: dict[str, Any],
|
|
120
|
-
*,
|
|
121
|
-
wait_for_receipt: bool = True,
|
|
122
|
-
timeout: int = DEFAULT_TRANSACTION_TIMEOUT,
|
|
123
|
-
) -> tuple[bool, Any]:
|
|
124
|
-
"""Proxy convenience wrapper to underlying wallet provider."""
|
|
125
|
-
return await self.evm_transactions.broadcast_transaction(
|
|
126
|
-
transaction, wait_for_receipt=wait_for_receipt, timeout=timeout
|
|
127
|
-
)
|
|
128
|
-
|
|
129
|
-
def get_web3(self, chain_id: int):
|
|
130
|
-
"""Expose underlying web3 provider for ABI encoding helpers."""
|
|
131
|
-
return self.evm_transactions.get_web3(chain_id)
|