@guru-fund/sdk 0.1.0

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.
Files changed (413) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +226 -0
  3. package/dist/GuruProtocol.d.ts +44 -0
  4. package/dist/GuruProtocol.js +75 -0
  5. package/dist/addresses.d.ts +40 -0
  6. package/dist/addresses.js +111 -0
  7. package/dist/constants.d.ts +22 -0
  8. package/dist/constants.js +23 -0
  9. package/dist/helpers/FundDataFetcher.d.ts +24 -0
  10. package/dist/helpers/FundDataFetcher.js +66 -0
  11. package/dist/helpers/ReceiptParser.d.ts +23 -0
  12. package/dist/helpers/ReceiptParser.js +59 -0
  13. package/dist/helpers/Token.d.ts +18 -0
  14. package/dist/helpers/Token.js +43 -0
  15. package/dist/helpers/compareAddresses.d.ts +1 -0
  16. package/dist/helpers/compareAddresses.js +15 -0
  17. package/dist/index.d.ts +17 -0
  18. package/dist/index.js +3 -0
  19. package/dist/quotes/quoteDeposit.d.ts +41 -0
  20. package/dist/quotes/quoteDeposit.js +186 -0
  21. package/dist/quotes/quoteHarvest.d.ts +34 -0
  22. package/dist/quotes/quoteHarvest.js +105 -0
  23. package/dist/quotes/quoteRebalance.d.ts +51 -0
  24. package/dist/quotes/quoteRebalance.js +201 -0
  25. package/dist/quotes/quoteTrade.d.ts +18 -0
  26. package/dist/quotes/quoteTrade.js +51 -0
  27. package/dist/quotes/quoteWithdrawal.d.ts +41 -0
  28. package/dist/quotes/quoteWithdrawal.js +113 -0
  29. package/dist/router/constants.d.ts +18 -0
  30. package/dist/router/constants.js +25 -0
  31. package/dist/router/finalizeRoute.d.ts +16 -0
  32. package/dist/router/finalizeRoute.js +29 -0
  33. package/dist/router/getFallbackRoutes.d.ts +10 -0
  34. package/dist/router/getFallbackRoutes.js +91 -0
  35. package/dist/router/getUniswapV4Route.d.ts +42 -0
  36. package/dist/router/getUniswapV4Route.js +324 -0
  37. package/dist/router/getVeloraRoute.d.ts +10 -0
  38. package/dist/router/getVeloraRoute.js +68 -0
  39. package/dist/router/helpers.d.ts +11 -0
  40. package/dist/router/helpers.js +30 -0
  41. package/dist/router/index.d.ts +22 -0
  42. package/dist/router/index.js +135 -0
  43. package/dist/router/pathCache.d.ts +16 -0
  44. package/dist/router/pathCache.js +116 -0
  45. package/dist/router/poolHelper.d.ts +126 -0
  46. package/dist/router/poolHelper.js +807 -0
  47. package/dist/router/quoteWethTrade.d.ts +14 -0
  48. package/dist/router/quoteWethTrade.js +125 -0
  49. package/dist/router/simulation.d.ts +43 -0
  50. package/dist/router/simulation.js +70 -0
  51. package/dist/router/types.d.ts +149 -0
  52. package/dist/router/types.js +1 -0
  53. package/dist/router/v4PoolDiscovery.d.ts +30 -0
  54. package/dist/router/v4PoolDiscovery.js +147 -0
  55. package/dist/router/velora.d.ts +42 -0
  56. package/dist/router/velora.js +279 -0
  57. package/dist/schemas/index.d.ts +6 -0
  58. package/dist/schemas/index.js +6 -0
  59. package/dist/schemas/primitives.d.ts +3 -0
  60. package/dist/schemas/primitives.js +9 -0
  61. package/dist/schemas/quoteDeposit.d.ts +23 -0
  62. package/dist/schemas/quoteDeposit.js +10 -0
  63. package/dist/schemas/quoteHarvest.d.ts +17 -0
  64. package/dist/schemas/quoteHarvest.js +8 -0
  65. package/dist/schemas/quoteRebalance.d.ts +29 -0
  66. package/dist/schemas/quoteRebalance.js +10 -0
  67. package/dist/schemas/quoteTrade.d.ts +20 -0
  68. package/dist/schemas/quoteTrade.js +9 -0
  69. package/dist/schemas/quoteWithdrawal.d.ts +23 -0
  70. package/dist/schemas/quoteWithdrawal.js +10 -0
  71. package/dist/txBuilders/buildDepositTx.d.ts +17 -0
  72. package/dist/txBuilders/buildDepositTx.js +18 -0
  73. package/dist/txBuilders/buildHarvestTx.d.ts +16 -0
  74. package/dist/txBuilders/buildHarvestTx.js +17 -0
  75. package/dist/txBuilders/buildTradeTx.d.ts +9 -0
  76. package/dist/txBuilders/buildTradeTx.js +9 -0
  77. package/dist/txBuilders/buildWithdrawTx.d.ts +16 -0
  78. package/dist/txBuilders/buildWithdrawTx.js +17 -0
  79. package/dist/txBuilders/index.d.ts +8 -0
  80. package/dist/txBuilders/index.js +4 -0
  81. package/dist/typechain/common.d.ts +50 -0
  82. package/dist/typechain/common.js +1 -0
  83. package/dist/typechain/factories/include/IPancakeQuoterV2__factory.d.ts +225 -0
  84. package/dist/typechain/factories/include/IPancakeQuoterV2__factory.js +295 -0
  85. package/dist/typechain/factories/include/ISwapRouter02__factory.d.ts +826 -0
  86. package/dist/typechain/factories/include/ISwapRouter02__factory.js +1073 -0
  87. package/dist/typechain/factories/include/index.d.ts +2 -0
  88. package/dist/typechain/factories/include/index.js +2 -0
  89. package/dist/typechain/factories/index.d.ts +2 -0
  90. package/dist/typechain/factories/index.js +2 -0
  91. package/dist/typechain/factories/out/Adapter__factory.d.ts +31 -0
  92. package/dist/typechain/factories/out/Adapter__factory.js +43 -0
  93. package/dist/typechain/factories/out/AerodromeV2Adapter__factory.d.ts +179 -0
  94. package/dist/typechain/factories/out/AerodromeV2Adapter__factory.js +237 -0
  95. package/dist/typechain/factories/out/AerodromeV3Adapter__factory.d.ts +162 -0
  96. package/dist/typechain/factories/out/AerodromeV3Adapter__factory.js +215 -0
  97. package/dist/typechain/factories/out/AssetManager.sol/LedgerAssetManager__factory.d.ts +1032 -0
  98. package/dist/typechain/factories/out/AssetManager.sol/LedgerAssetManager__factory.js +1357 -0
  99. package/dist/typechain/factories/out/AssetManager.sol/index.d.ts +1 -0
  100. package/dist/typechain/factories/out/AssetManager.sol/index.js +1 -0
  101. package/dist/typechain/factories/out/Bookkeeper.sol/LedgerBookkeeper__factory.d.ts +950 -0
  102. package/dist/typechain/factories/out/Bookkeeper.sol/LedgerBookkeeper__factory.js +1250 -0
  103. package/dist/typechain/factories/out/Bookkeeper.sol/index.d.ts +1 -0
  104. package/dist/typechain/factories/out/Bookkeeper.sol/index.js +1 -0
  105. package/dist/typechain/factories/out/Checkpoint.sol/CheckpointController__factory.d.ts +33 -0
  106. package/dist/typechain/factories/out/Checkpoint.sol/CheckpointController__factory.js +47 -0
  107. package/dist/typechain/factories/out/Checkpoint.sol/index.d.ts +1 -0
  108. package/dist/typechain/factories/out/Checkpoint.sol/index.js +1 -0
  109. package/dist/typechain/factories/out/Closure.sol/ClosureController__factory.d.ts +459 -0
  110. package/dist/typechain/factories/out/Closure.sol/ClosureController__factory.js +603 -0
  111. package/dist/typechain/factories/out/Closure.sol/index.d.ts +1 -0
  112. package/dist/typechain/factories/out/Closure.sol/index.js +1 -0
  113. package/dist/typechain/factories/out/ContextBuilder__factory.d.ts +671 -0
  114. package/dist/typechain/factories/out/ContextBuilder__factory.js +870 -0
  115. package/dist/typechain/factories/out/Control.sol/Controllable__factory.d.ts +107 -0
  116. package/dist/typechain/factories/out/Control.sol/Controllable__factory.js +141 -0
  117. package/dist/typechain/factories/out/Control.sol/Controller__factory.d.ts +21 -0
  118. package/dist/typechain/factories/out/Control.sol/Controller__factory.js +30 -0
  119. package/dist/typechain/factories/out/Control.sol/index.d.ts +2 -0
  120. package/dist/typechain/factories/out/Control.sol/index.js +2 -0
  121. package/dist/typechain/factories/out/Controller.sol/ClosureDelegate__factory.d.ts +57 -0
  122. package/dist/typechain/factories/out/Controller.sol/ClosureDelegate__factory.js +77 -0
  123. package/dist/typechain/factories/out/Controller.sol/CreationDelegate__factory.d.ts +58 -0
  124. package/dist/typechain/factories/out/Controller.sol/CreationDelegate__factory.js +77 -0
  125. package/dist/typechain/factories/out/Controller.sol/DepositDelegate__factory.d.ts +55 -0
  126. package/dist/typechain/factories/out/Controller.sol/DepositDelegate__factory.js +74 -0
  127. package/dist/typechain/factories/out/Controller.sol/FundController__factory.d.ts +703 -0
  128. package/dist/typechain/factories/out/Controller.sol/FundController__factory.js +911 -0
  129. package/dist/typechain/factories/out/Controller.sol/HarvestDelegate__factory.d.ts +234 -0
  130. package/dist/typechain/factories/out/Controller.sol/HarvestDelegate__factory.js +303 -0
  131. package/dist/typechain/factories/out/Controller.sol/TradeDelegate__factory.d.ts +61 -0
  132. package/dist/typechain/factories/out/Controller.sol/TradeDelegate__factory.js +81 -0
  133. package/dist/typechain/factories/out/Controller.sol/TransferDelegate__factory.d.ts +29 -0
  134. package/dist/typechain/factories/out/Controller.sol/TransferDelegate__factory.js +40 -0
  135. package/dist/typechain/factories/out/Controller.sol/WithdrawalDelegate__factory.d.ts +51 -0
  136. package/dist/typechain/factories/out/Controller.sol/WithdrawalDelegate__factory.js +69 -0
  137. package/dist/typechain/factories/out/Controller.sol/index.d.ts +8 -0
  138. package/dist/typechain/factories/out/Controller.sol/index.js +8 -0
  139. package/dist/typechain/factories/out/Cooldown.sol/LedgerCooldown__factory.d.ts +747 -0
  140. package/dist/typechain/factories/out/Cooldown.sol/LedgerCooldown__factory.js +982 -0
  141. package/dist/typechain/factories/out/Cooldown.sol/index.d.ts +1 -0
  142. package/dist/typechain/factories/out/Cooldown.sol/index.js +1 -0
  143. package/dist/typechain/factories/out/Creation.sol/CreationController__factory.d.ts +172 -0
  144. package/dist/typechain/factories/out/Creation.sol/CreationController__factory.js +225 -0
  145. package/dist/typechain/factories/out/Creation.sol/index.d.ts +1 -0
  146. package/dist/typechain/factories/out/Creation.sol/index.js +1 -0
  147. package/dist/typechain/factories/out/Deposit.sol/DepositController__factory.d.ts +162 -0
  148. package/dist/typechain/factories/out/Deposit.sol/DepositController__factory.js +223 -0
  149. package/dist/typechain/factories/out/Deposit.sol/index.d.ts +1 -0
  150. package/dist/typechain/factories/out/Deposit.sol/index.js +1 -0
  151. package/dist/typechain/factories/out/Error__factory.d.ts +318 -0
  152. package/dist/typechain/factories/out/Error__factory.js +423 -0
  153. package/dist/typechain/factories/out/Harvest.sol/HarvestController__factory.d.ts +401 -0
  154. package/dist/typechain/factories/out/Harvest.sol/HarvestController__factory.js +527 -0
  155. package/dist/typechain/factories/out/Harvest.sol/index.d.ts +1 -0
  156. package/dist/typechain/factories/out/Harvest.sol/index.js +1 -0
  157. package/dist/typechain/factories/out/IAerodromeRouter__factory.d.ts +85 -0
  158. package/dist/typechain/factories/out/IAerodromeRouter__factory.js +113 -0
  159. package/dist/typechain/factories/out/IAerodromeSwapRouter__factory.d.ts +89 -0
  160. package/dist/typechain/factories/out/IAerodromeSwapRouter__factory.js +119 -0
  161. package/dist/typechain/factories/out/IUniswapV4.sol/IPermit2__factory.d.ts +29 -0
  162. package/dist/typechain/factories/out/IUniswapV4.sol/IPermit2__factory.js +40 -0
  163. package/dist/typechain/factories/out/IUniswapV4.sol/IUniversalRouter__factory.d.ts +25 -0
  164. package/dist/typechain/factories/out/IUniswapV4.sol/IUniversalRouter__factory.js +35 -0
  165. package/dist/typechain/factories/out/IUniswapV4.sol/index.d.ts +2 -0
  166. package/dist/typechain/factories/out/IUniswapV4.sol/index.js +2 -0
  167. package/dist/typechain/factories/out/IV0Fund__factory.d.ts +129 -0
  168. package/dist/typechain/factories/out/IV0Fund__factory.js +173 -0
  169. package/dist/typechain/factories/out/IV3SwapRouter__factory.d.ts +38 -0
  170. package/dist/typechain/factories/out/IV3SwapRouter__factory.js +53 -0
  171. package/dist/typechain/factories/out/Initializer.sol/LedgerInitializer__factory.d.ts +655 -0
  172. package/dist/typechain/factories/out/Initializer.sol/LedgerInitializer__factory.js +859 -0
  173. package/dist/typechain/factories/out/Initializer.sol/VaultInitializer__factory.d.ts +141 -0
  174. package/dist/typechain/factories/out/Initializer.sol/VaultInitializer__factory.js +185 -0
  175. package/dist/typechain/factories/out/Initializer.sol/index.d.ts +2 -0
  176. package/dist/typechain/factories/out/Initializer.sol/index.js +2 -0
  177. package/dist/typechain/factories/out/Ledger.sol/FundLedger__factory.d.ts +1502 -0
  178. package/dist/typechain/factories/out/Ledger.sol/FundLedger__factory.js +1959 -0
  179. package/dist/typechain/factories/out/Ledger.sol/index.d.ts +1 -0
  180. package/dist/typechain/factories/out/Ledger.sol/index.js +1 -0
  181. package/dist/typechain/factories/out/LotusP2P__factory.d.ts +847 -0
  182. package/dist/typechain/factories/out/LotusP2P__factory.js +1095 -0
  183. package/dist/typechain/factories/out/MulticallStatic__factory.d.ts +29 -0
  184. package/dist/typechain/factories/out/MulticallStatic__factory.js +42 -0
  185. package/dist/typechain/factories/out/Operator.sol/VaultOperator__factory.d.ts +235 -0
  186. package/dist/typechain/factories/out/Operator.sol/VaultOperator__factory.js +308 -0
  187. package/dist/typechain/factories/out/Operator.sol/index.d.ts +1 -0
  188. package/dist/typechain/factories/out/Operator.sol/index.js +1 -0
  189. package/dist/typechain/factories/out/P2PAdapter__factory.d.ts +216 -0
  190. package/dist/typechain/factories/out/P2PAdapter__factory.js +287 -0
  191. package/dist/typechain/factories/out/ProtocolMigrationExtension__factory.d.ts +1084 -0
  192. package/dist/typechain/factories/out/ProtocolMigrationExtension__factory.js +1409 -0
  193. package/dist/typechain/factories/out/ProtocolProvider__factory.d.ts +21 -0
  194. package/dist/typechain/factories/out/ProtocolProvider__factory.js +30 -0
  195. package/dist/typechain/factories/out/Protocol__factory.d.ts +1095 -0
  196. package/dist/typechain/factories/out/Protocol__factory.js +1424 -0
  197. package/dist/typechain/factories/out/Registrar.sol/LedgerRegistrar__factory.d.ts +1375 -0
  198. package/dist/typechain/factories/out/Registrar.sol/LedgerRegistrar__factory.js +1791 -0
  199. package/dist/typechain/factories/out/Registrar.sol/index.d.ts +1 -0
  200. package/dist/typechain/factories/out/Registrar.sol/index.js +1 -0
  201. package/dist/typechain/factories/out/Settings.sol/SettingsController__factory.d.ts +143 -0
  202. package/dist/typechain/factories/out/Settings.sol/SettingsController__factory.js +188 -0
  203. package/dist/typechain/factories/out/Settings.sol/index.d.ts +1 -0
  204. package/dist/typechain/factories/out/Settings.sol/index.js +1 -0
  205. package/dist/typechain/factories/out/Shares.sol/ICheckpointController__factory.d.ts +21 -0
  206. package/dist/typechain/factories/out/Shares.sol/ICheckpointController__factory.js +31 -0
  207. package/dist/typechain/factories/out/Shares.sol/ITransferController__factory.d.ts +25 -0
  208. package/dist/typechain/factories/out/Shares.sol/ITransferController__factory.js +35 -0
  209. package/dist/typechain/factories/out/Shares.sol/LedgerShares__factory.d.ts +829 -0
  210. package/dist/typechain/factories/out/Shares.sol/LedgerShares__factory.js +1089 -0
  211. package/dist/typechain/factories/out/Shares.sol/index.d.ts +3 -0
  212. package/dist/typechain/factories/out/Shares.sol/index.js +3 -0
  213. package/dist/typechain/factories/out/SignatureVerifier__factory.d.ts +171 -0
  214. package/dist/typechain/factories/out/SignatureVerifier__factory.js +224 -0
  215. package/dist/typechain/factories/out/Storage.sol/LedgerStorage__factory.d.ts +527 -0
  216. package/dist/typechain/factories/out/Storage.sol/LedgerStorage__factory.js +695 -0
  217. package/dist/typechain/factories/out/Storage.sol/index.d.ts +1 -0
  218. package/dist/typechain/factories/out/Storage.sol/index.js +1 -0
  219. package/dist/typechain/factories/out/Trade.sol/TradeController__factory.d.ts +200 -0
  220. package/dist/typechain/factories/out/Trade.sol/TradeController__factory.js +262 -0
  221. package/dist/typechain/factories/out/Trade.sol/index.d.ts +1 -0
  222. package/dist/typechain/factories/out/Trade.sol/index.js +1 -0
  223. package/dist/typechain/factories/out/Transfer.sol/TransferController__factory.d.ts +100 -0
  224. package/dist/typechain/factories/out/Transfer.sol/TransferController__factory.js +141 -0
  225. package/dist/typechain/factories/out/Transfer.sol/index.d.ts +1 -0
  226. package/dist/typechain/factories/out/Transfer.sol/index.js +1 -0
  227. package/dist/typechain/factories/out/UniswapV2Adapter__factory.d.ts +162 -0
  228. package/dist/typechain/factories/out/UniswapV2Adapter__factory.js +215 -0
  229. package/dist/typechain/factories/out/UniswapV3Adapter__factory.d.ts +162 -0
  230. package/dist/typechain/factories/out/UniswapV3Adapter__factory.js +215 -0
  231. package/dist/typechain/factories/out/UniswapV3SwapRouter02Adapter__factory.d.ts +162 -0
  232. package/dist/typechain/factories/out/UniswapV3SwapRouter02Adapter__factory.js +215 -0
  233. package/dist/typechain/factories/out/UniswapV4Adapter__factory.d.ts +203 -0
  234. package/dist/typechain/factories/out/UniswapV4Adapter__factory.js +268 -0
  235. package/dist/typechain/factories/out/V0ToLotusMigrator__factory.d.ts +216 -0
  236. package/dist/typechain/factories/out/V0ToLotusMigrator__factory.js +284 -0
  237. package/dist/typechain/factories/out/Vault.sol/FundVault__factory.d.ts +258 -0
  238. package/dist/typechain/factories/out/Vault.sol/FundVault__factory.js +339 -0
  239. package/dist/typechain/factories/out/Vault.sol/index.d.ts +1 -0
  240. package/dist/typechain/factories/out/Vault.sol/index.js +1 -0
  241. package/dist/typechain/factories/out/Withdrawal.sol/WithdrawalController__factory.d.ts +285 -0
  242. package/dist/typechain/factories/out/Withdrawal.sol/WithdrawalController__factory.js +377 -0
  243. package/dist/typechain/factories/out/Withdrawal.sol/index.d.ts +1 -0
  244. package/dist/typechain/factories/out/Withdrawal.sol/index.js +1 -0
  245. package/dist/typechain/factories/out/index.d.ts +43 -0
  246. package/dist/typechain/factories/out/index.js +43 -0
  247. package/dist/typechain/include/IPancakeQuoterV2.d.ts +223 -0
  248. package/dist/typechain/include/IPancakeQuoterV2.js +1 -0
  249. package/dist/typechain/include/ISwapRouter02.d.ts +682 -0
  250. package/dist/typechain/include/ISwapRouter02.js +1 -0
  251. package/dist/typechain/include/index.d.ts +2 -0
  252. package/dist/typechain/include/index.js +1 -0
  253. package/dist/typechain/index.d.ts +119 -0
  254. package/dist/typechain/index.js +58 -0
  255. package/dist/typechain/out/Adapter.d.ts +29 -0
  256. package/dist/typechain/out/Adapter.js +1 -0
  257. package/dist/typechain/out/AerodromeV2Adapter.d.ts +106 -0
  258. package/dist/typechain/out/AerodromeV2Adapter.js +1 -0
  259. package/dist/typechain/out/AerodromeV3Adapter.d.ts +87 -0
  260. package/dist/typechain/out/AerodromeV3Adapter.js +1 -0
  261. package/dist/typechain/out/AssetManager.sol/LedgerAssetManager.d.ts +604 -0
  262. package/dist/typechain/out/AssetManager.sol/LedgerAssetManager.js +1 -0
  263. package/dist/typechain/out/AssetManager.sol/index.d.ts +1 -0
  264. package/dist/typechain/out/AssetManager.sol/index.js +1 -0
  265. package/dist/typechain/out/Bookkeeper.sol/LedgerBookkeeper.d.ts +548 -0
  266. package/dist/typechain/out/Bookkeeper.sol/LedgerBookkeeper.js +1 -0
  267. package/dist/typechain/out/Bookkeeper.sol/index.d.ts +1 -0
  268. package/dist/typechain/out/Bookkeeper.sol/index.js +1 -0
  269. package/dist/typechain/out/Checkpoint.sol/CheckpointController.d.ts +29 -0
  270. package/dist/typechain/out/Checkpoint.sol/CheckpointController.js +1 -0
  271. package/dist/typechain/out/Checkpoint.sol/index.d.ts +1 -0
  272. package/dist/typechain/out/Checkpoint.sol/index.js +1 -0
  273. package/dist/typechain/out/Closure.sol/ClosureController.d.ts +273 -0
  274. package/dist/typechain/out/Closure.sol/ClosureController.js +1 -0
  275. package/dist/typechain/out/Closure.sol/index.d.ts +1 -0
  276. package/dist/typechain/out/Closure.sol/index.js +1 -0
  277. package/dist/typechain/out/ContextBuilder.d.ts +403 -0
  278. package/dist/typechain/out/ContextBuilder.js +1 -0
  279. package/dist/typechain/out/Control.sol/Controllable.d.ts +97 -0
  280. package/dist/typechain/out/Control.sol/Controllable.js +1 -0
  281. package/dist/typechain/out/Control.sol/Controller.d.ts +25 -0
  282. package/dist/typechain/out/Control.sol/Controller.js +1 -0
  283. package/dist/typechain/out/Control.sol/index.d.ts +2 -0
  284. package/dist/typechain/out/Control.sol/index.js +1 -0
  285. package/dist/typechain/out/Controller.sol/ClosureDelegate.d.ts +61 -0
  286. package/dist/typechain/out/Controller.sol/ClosureDelegate.js +1 -0
  287. package/dist/typechain/out/Controller.sol/CreationDelegate.d.ts +61 -0
  288. package/dist/typechain/out/Controller.sol/CreationDelegate.js +1 -0
  289. package/dist/typechain/out/Controller.sol/DepositDelegate.d.ts +56 -0
  290. package/dist/typechain/out/Controller.sol/DepositDelegate.js +1 -0
  291. package/dist/typechain/out/Controller.sol/FundController.d.ts +464 -0
  292. package/dist/typechain/out/Controller.sol/FundController.js +1 -0
  293. package/dist/typechain/out/Controller.sol/HarvestDelegate.d.ts +163 -0
  294. package/dist/typechain/out/Controller.sol/HarvestDelegate.js +1 -0
  295. package/dist/typechain/out/Controller.sol/TradeDelegate.d.ts +67 -0
  296. package/dist/typechain/out/Controller.sol/TradeDelegate.js +1 -0
  297. package/dist/typechain/out/Controller.sol/TransferDelegate.d.ts +37 -0
  298. package/dist/typechain/out/Controller.sol/TransferDelegate.js +1 -0
  299. package/dist/typechain/out/Controller.sol/WithdrawalDelegate.d.ts +53 -0
  300. package/dist/typechain/out/Controller.sol/WithdrawalDelegate.js +1 -0
  301. package/dist/typechain/out/Controller.sol/index.d.ts +8 -0
  302. package/dist/typechain/out/Controller.sol/index.js +1 -0
  303. package/dist/typechain/out/Cooldown.sol/LedgerCooldown.d.ts +446 -0
  304. package/dist/typechain/out/Cooldown.sol/LedgerCooldown.js +1 -0
  305. package/dist/typechain/out/Cooldown.sol/index.d.ts +1 -0
  306. package/dist/typechain/out/Cooldown.sol/index.js +1 -0
  307. package/dist/typechain/out/Creation.sol/CreationController.d.ts +102 -0
  308. package/dist/typechain/out/Creation.sol/CreationController.js +1 -0
  309. package/dist/typechain/out/Creation.sol/index.d.ts +1 -0
  310. package/dist/typechain/out/Creation.sol/index.js +1 -0
  311. package/dist/typechain/out/Deposit.sol/DepositController.d.ts +68 -0
  312. package/dist/typechain/out/Deposit.sol/DepositController.js +1 -0
  313. package/dist/typechain/out/Deposit.sol/index.d.ts +1 -0
  314. package/dist/typechain/out/Deposit.sol/index.js +1 -0
  315. package/dist/typechain/out/Error.d.ts +20 -0
  316. package/dist/typechain/out/Error.js +1 -0
  317. package/dist/typechain/out/Harvest.sol/HarvestController.d.ts +241 -0
  318. package/dist/typechain/out/Harvest.sol/HarvestController.js +1 -0
  319. package/dist/typechain/out/Harvest.sol/index.d.ts +1 -0
  320. package/dist/typechain/out/Harvest.sol/index.js +1 -0
  321. package/dist/typechain/out/IAerodromeRouter.d.ts +80 -0
  322. package/dist/typechain/out/IAerodromeRouter.js +1 -0
  323. package/dist/typechain/out/IAerodromeSwapRouter.d.ts +96 -0
  324. package/dist/typechain/out/IAerodromeSwapRouter.js +1 -0
  325. package/dist/typechain/out/IUniswapV4.sol/IPermit2.d.ts +39 -0
  326. package/dist/typechain/out/IUniswapV4.sol/IPermit2.js +1 -0
  327. package/dist/typechain/out/IUniswapV4.sol/IUniversalRouter.d.ts +37 -0
  328. package/dist/typechain/out/IUniswapV4.sol/IUniversalRouter.js +1 -0
  329. package/dist/typechain/out/IUniswapV4.sol/index.d.ts +2 -0
  330. package/dist/typechain/out/IUniswapV4.sol/index.js +1 -0
  331. package/dist/typechain/out/IV0Fund.d.ts +69 -0
  332. package/dist/typechain/out/IV0Fund.js +1 -0
  333. package/dist/typechain/out/IV3SwapRouter.d.ts +52 -0
  334. package/dist/typechain/out/IV3SwapRouter.js +1 -0
  335. package/dist/typechain/out/Initializer.sol/LedgerInitializer.d.ts +379 -0
  336. package/dist/typechain/out/Initializer.sol/LedgerInitializer.js +1 -0
  337. package/dist/typechain/out/Initializer.sol/VaultInitializer.d.ts +129 -0
  338. package/dist/typechain/out/Initializer.sol/VaultInitializer.js +1 -0
  339. package/dist/typechain/out/Initializer.sol/index.d.ts +2 -0
  340. package/dist/typechain/out/Initializer.sol/index.js +1 -0
  341. package/dist/typechain/out/Ledger.sol/FundLedger.d.ts +926 -0
  342. package/dist/typechain/out/Ledger.sol/FundLedger.js +1 -0
  343. package/dist/typechain/out/Ledger.sol/index.d.ts +1 -0
  344. package/dist/typechain/out/Ledger.sol/index.js +1 -0
  345. package/dist/typechain/out/LotusP2P.d.ts +610 -0
  346. package/dist/typechain/out/LotusP2P.js +1 -0
  347. package/dist/typechain/out/MulticallStatic.d.ts +25 -0
  348. package/dist/typechain/out/MulticallStatic.js +1 -0
  349. package/dist/typechain/out/Operator.sol/VaultOperator.d.ts +197 -0
  350. package/dist/typechain/out/Operator.sol/VaultOperator.js +1 -0
  351. package/dist/typechain/out/Operator.sol/index.d.ts +1 -0
  352. package/dist/typechain/out/Operator.sol/index.js +1 -0
  353. package/dist/typechain/out/P2PAdapter.d.ts +100 -0
  354. package/dist/typechain/out/P2PAdapter.js +1 -0
  355. package/dist/typechain/out/Protocol.d.ts +815 -0
  356. package/dist/typechain/out/Protocol.js +1 -0
  357. package/dist/typechain/out/ProtocolMigrationExtension.d.ts +806 -0
  358. package/dist/typechain/out/ProtocolMigrationExtension.js +1 -0
  359. package/dist/typechain/out/ProtocolProvider.d.ts +25 -0
  360. package/dist/typechain/out/ProtocolProvider.js +1 -0
  361. package/dist/typechain/out/Registrar.sol/LedgerRegistrar.d.ts +866 -0
  362. package/dist/typechain/out/Registrar.sol/LedgerRegistrar.js +1 -0
  363. package/dist/typechain/out/Registrar.sol/index.d.ts +1 -0
  364. package/dist/typechain/out/Registrar.sol/index.js +1 -0
  365. package/dist/typechain/out/Settings.sol/SettingsController.d.ts +97 -0
  366. package/dist/typechain/out/Settings.sol/SettingsController.js +1 -0
  367. package/dist/typechain/out/Settings.sol/index.d.ts +1 -0
  368. package/dist/typechain/out/Settings.sol/index.js +1 -0
  369. package/dist/typechain/out/Shares.sol/ICheckpointController.d.ts +29 -0
  370. package/dist/typechain/out/Shares.sol/ICheckpointController.js +1 -0
  371. package/dist/typechain/out/Shares.sol/ITransferController.d.ts +37 -0
  372. package/dist/typechain/out/Shares.sol/ITransferController.js +1 -0
  373. package/dist/typechain/out/Shares.sol/LedgerShares.d.ts +494 -0
  374. package/dist/typechain/out/Shares.sol/LedgerShares.js +1 -0
  375. package/dist/typechain/out/Shares.sol/index.d.ts +3 -0
  376. package/dist/typechain/out/Shares.sol/index.js +1 -0
  377. package/dist/typechain/out/SignatureVerifier.d.ts +139 -0
  378. package/dist/typechain/out/SignatureVerifier.js +1 -0
  379. package/dist/typechain/out/Storage.sol/LedgerStorage.d.ts +281 -0
  380. package/dist/typechain/out/Storage.sol/LedgerStorage.js +1 -0
  381. package/dist/typechain/out/Storage.sol/index.d.ts +1 -0
  382. package/dist/typechain/out/Storage.sol/index.js +1 -0
  383. package/dist/typechain/out/Trade.sol/TradeController.d.ts +137 -0
  384. package/dist/typechain/out/Trade.sol/TradeController.js +1 -0
  385. package/dist/typechain/out/Trade.sol/index.d.ts +1 -0
  386. package/dist/typechain/out/Trade.sol/index.js +1 -0
  387. package/dist/typechain/out/Transfer.sol/TransferController.d.ts +49 -0
  388. package/dist/typechain/out/Transfer.sol/TransferController.js +1 -0
  389. package/dist/typechain/out/Transfer.sol/index.d.ts +1 -0
  390. package/dist/typechain/out/Transfer.sol/index.js +1 -0
  391. package/dist/typechain/out/UniswapV2Adapter.d.ts +87 -0
  392. package/dist/typechain/out/UniswapV2Adapter.js +1 -0
  393. package/dist/typechain/out/UniswapV3Adapter.d.ts +87 -0
  394. package/dist/typechain/out/UniswapV3Adapter.js +1 -0
  395. package/dist/typechain/out/UniswapV3SwapRouter02Adapter.d.ts +87 -0
  396. package/dist/typechain/out/UniswapV3SwapRouter02Adapter.js +1 -0
  397. package/dist/typechain/out/UniswapV4Adapter.d.ts +110 -0
  398. package/dist/typechain/out/UniswapV4Adapter.js +1 -0
  399. package/dist/typechain/out/V0ToLotusMigrator.d.ts +94 -0
  400. package/dist/typechain/out/V0ToLotusMigrator.js +1 -0
  401. package/dist/typechain/out/Vault.sol/FundVault.d.ts +197 -0
  402. package/dist/typechain/out/Vault.sol/FundVault.js +1 -0
  403. package/dist/typechain/out/Vault.sol/index.d.ts +1 -0
  404. package/dist/typechain/out/Vault.sol/index.js +1 -0
  405. package/dist/typechain/out/Withdrawal.sol/WithdrawalController.d.ts +152 -0
  406. package/dist/typechain/out/Withdrawal.sol/WithdrawalController.js +1 -0
  407. package/dist/typechain/out/Withdrawal.sol/index.d.ts +1 -0
  408. package/dist/typechain/out/Withdrawal.sol/index.js +1 -0
  409. package/dist/typechain/out/index.d.ts +65 -0
  410. package/dist/typechain/out/index.js +1 -0
  411. package/dist/types/Fund.d.ts +27 -0
  412. package/dist/types/Fund.js +1 -0
  413. package/package.json +67 -0
@@ -0,0 +1,201 @@
1
+ import { getGuruProtocolAddresses, } from '../addresses.js';
2
+ import { MAX_BPS } from '../constants.js';
3
+ import compareAddresses from '../helpers/compareAddresses.js';
4
+ import { Token } from '../helpers/Token.js';
5
+ import FundDataFetcher, { WEIGHT_DENOMINATOR, } from '../helpers/FundDataFetcher.js';
6
+ import ReceiptParser from '../helpers/ReceiptParser.js';
7
+ import { getRouteIn, getRouteOut } from '../router/index.js';
8
+ import { encodeVaultExecute } from '../router/simulation.js';
9
+ import { quoteRebalanceSchema } from '../schemas/quoteRebalance.js';
10
+ import { FundController__factory, FundLedger__factory, TradeController__factory, } from '../typechain/index.js';
11
+ const TOLERANCE = 500n;
12
+ const DUST_THRESHOLD = 5000000n;
13
+ const NORMALIZER = BigInt(1e12);
14
+ const absBigint = (v) => (v < 0n ? -v : v);
15
+ export default async function quoteRebalance(params, ctx) {
16
+ const parsed = quoteRebalanceSchema.parse(params);
17
+ const addresses = getGuruProtocolAddresses(ctx.chainId);
18
+ const intermediary = addresses.tokens.USDC;
19
+ const provider = ctx.provider;
20
+ const ledger = FundLedger__factory.connect(parsed.ledger, provider);
21
+ const fetcher = new FundDataFetcher({
22
+ chainId: ctx.chainId,
23
+ provider,
24
+ getPriceUsd1e18: ctx.getPriceUsd1e18,
25
+ });
26
+ const [fundData, vault, manager, controllerAddress] = await Promise.all([
27
+ fetcher.fetchFundData(ledger),
28
+ ledger.vault(),
29
+ ledger.manager(),
30
+ ledger.controller(),
31
+ ]);
32
+ const targetWeightMap = new Map();
33
+ let totalTargetWeight = 0n;
34
+ for (const tw of parsed.targetWeights) {
35
+ const w = tw.weight;
36
+ targetWeightMap.set(tw.token.toLowerCase(), w);
37
+ totalTargetWeight += w;
38
+ }
39
+ if (totalTargetWeight !== WEIGHT_DENOMINATOR) {
40
+ throw new Error(`[@guru-fund/sdk] quoteRebalance: target weights must sum to ${WEIGHT_DENOMINATOR}, got ${totalTargetWeight}`);
41
+ }
42
+ const slippageByToken = new Map(Object.entries(parsed.slippageSettings ?? {}).map(([token, slippage]) => [token.toLowerCase(), slippage]));
43
+ const slippageE2For = (token) => {
44
+ const slippage = slippageByToken.get(token.toLowerCase());
45
+ return slippage == null ? undefined : Number(slippage / 10n);
46
+ };
47
+ const totalValue = fundData.totalValueLocked;
48
+ const sellAssets = [];
49
+ const buyAssets = [];
50
+ let skippedDust = 0;
51
+ for (const asset of fundData.assets) {
52
+ const targetWeight = targetWeightMap.get(asset.token.address.toLowerCase());
53
+ if (targetWeight === undefined)
54
+ continue;
55
+ const delta = targetWeight - asset.weight;
56
+ if (delta >= -TOLERANCE && delta <= TOLERANCE)
57
+ continue;
58
+ const deltaValueUsdt = (absBigint(delta) * totalValue) / WEIGHT_DENOMINATOR;
59
+ if (deltaValueUsdt < DUST_THRESHOLD) {
60
+ skippedDust++;
61
+ continue;
62
+ }
63
+ if (delta < 0n) {
64
+ const sellAmount = (absBigint(delta) * asset.balance) / asset.weight;
65
+ sellAssets.push({ asset, sellAmount });
66
+ }
67
+ else {
68
+ buyAssets.push({ asset, deltaWeight: delta });
69
+ }
70
+ }
71
+ const buildTxData = (extCalls) => ({
72
+ to: controllerAddress,
73
+ from: manager,
74
+ data: FundController__factory.createInterface().encodeFunctionData('executeTrades', [
75
+ parsed.ledger,
76
+ extCalls.map((c) => c.adapter),
77
+ extCalls.map((c) => c.callData),
78
+ ]),
79
+ });
80
+ const decodeLogs = (logs) => {
81
+ try {
82
+ const parser = ReceiptParser.fromSimulationLogs(logs);
83
+ const controller = TradeController__factory.connect(controllerAddress, provider);
84
+ const events = parser.getDecodedLogs(controller.interface, controller.getEvent('TradeExecuted'));
85
+ return {
86
+ trades: events.map((e) => ({
87
+ tokenIn: e.trade.tokenIn,
88
+ tokenOut: e.trade.tokenOut,
89
+ amountIn: e.trade.amountIn,
90
+ amountOut: e.trade.amountOut,
91
+ })),
92
+ };
93
+ }
94
+ catch {
95
+ return null;
96
+ }
97
+ };
98
+ if (sellAssets.length === 0 && buyAssets.length === 0) {
99
+ return {
100
+ extCalls: [],
101
+ trades: [],
102
+ cumulativeSlippageBps: 0n,
103
+ txData: buildTxData([]),
104
+ decodeLogs,
105
+ emptyReason: skippedDust > 0 ? 'dust' : 'balanced',
106
+ };
107
+ }
108
+ const extCalls = [];
109
+ const trades = [];
110
+ let totalUsd1e18In = 0n;
111
+ let totalUsd1e18Out = 0n;
112
+ const prefixTxs = [];
113
+ const pushPrefix = (route) => {
114
+ prefixTxs.push({
115
+ from: controllerAddress,
116
+ to: vault,
117
+ callData: encodeVaultExecute(String(route.adapter), String(route.callData)),
118
+ });
119
+ };
120
+ let totalIntermediaryProceeds = 0n;
121
+ for (const { asset, sellAmount } of sellAssets) {
122
+ if (compareAddresses(asset.token.address, intermediary)) {
123
+ totalIntermediaryProceeds += sellAmount;
124
+ continue;
125
+ }
126
+ const route = await getRouteOut({
127
+ chainId: ctx.chainId,
128
+ tokenIn: asset.token.address,
129
+ tokenOut: intermediary,
130
+ amountIn: sellAmount,
131
+ slippageE2: slippageE2For(asset.token.address),
132
+ account: vault,
133
+ vault,
134
+ prefixTxs: [...prefixTxs],
135
+ }, ctx);
136
+ const amountToReceive = BigInt(route.data.amountToReceive);
137
+ totalIntermediaryProceeds += amountToReceive;
138
+ extCalls.push({ adapter: route.adapter, callData: route.callData });
139
+ pushPrefix({
140
+ adapter: String(route.adapter),
141
+ callData: route.callData,
142
+ });
143
+ const usdIn1e18 = (sellAmount * asset.usd1e18Price) /
144
+ Token.unitFor(asset.token.decimals);
145
+ const usdOut1e18 = amountToReceive * NORMALIZER;
146
+ totalUsd1e18In += usdIn1e18;
147
+ totalUsd1e18Out += usdOut1e18;
148
+ trades.push({
149
+ tokenIn: asset.token.address,
150
+ tokenOut: intermediary,
151
+ amountIn: sellAmount,
152
+ expectedAmountOut: amountToReceive,
153
+ });
154
+ }
155
+ const totalBuyWeight = buyAssets.reduce((sum, b) => sum + b.deltaWeight, 0n);
156
+ for (const { asset, deltaWeight } of buyAssets) {
157
+ const buyAmountIntermediary = totalBuyWeight === 0n
158
+ ? 0n
159
+ : (totalIntermediaryProceeds * deltaWeight) / totalBuyWeight;
160
+ if (compareAddresses(asset.token.address, intermediary))
161
+ continue;
162
+ const route = await getRouteIn({
163
+ chainId: ctx.chainId,
164
+ tokenIn: intermediary,
165
+ tokenOut: asset.token.address,
166
+ amountIn: buyAmountIntermediary,
167
+ slippageE2: slippageE2For(asset.token.address),
168
+ account: vault,
169
+ vault,
170
+ prefixTxs: [...prefixTxs],
171
+ }, ctx);
172
+ const amountToReceive = BigInt(route.data.amountToReceive);
173
+ extCalls.push({ adapter: route.adapter, callData: route.callData });
174
+ pushPrefix({
175
+ adapter: String(route.adapter),
176
+ callData: route.callData,
177
+ });
178
+ const usdIn1e18 = buyAmountIntermediary * NORMALIZER;
179
+ const usdOut1e18 = (amountToReceive * asset.usd1e18Price) /
180
+ Token.unitFor(asset.token.decimals);
181
+ totalUsd1e18In += usdIn1e18;
182
+ totalUsd1e18Out += usdOut1e18;
183
+ trades.push({
184
+ tokenIn: intermediary,
185
+ tokenOut: asset.token.address,
186
+ amountIn: buyAmountIntermediary,
187
+ expectedAmountOut: amountToReceive,
188
+ });
189
+ }
190
+ const cumulativeSlippageBps = totalUsd1e18In > 0n
191
+ ? ((totalUsd1e18In - totalUsd1e18Out) * MAX_BPS) / totalUsd1e18In
192
+ : 0n;
193
+ return {
194
+ extCalls,
195
+ trades,
196
+ cumulativeSlippageBps,
197
+ txData: buildTxData(extCalls),
198
+ decodeLogs,
199
+ emptyReason: null,
200
+ };
201
+ }
@@ -0,0 +1,18 @@
1
+ import type { TransactionRequest } from 'ethers';
2
+ import { type GuruProtocolChainId } from '../addresses';
3
+ import { type RouterContext } from '../router';
4
+ import type { Route } from '../router/types';
5
+ export interface QuoteTradeParams {
6
+ ledger: string;
7
+ tokenIn: string;
8
+ tokenOut: string;
9
+ amountIn: bigint;
10
+ maxSlippage?: bigint;
11
+ }
12
+ export interface QuoteTradeContext extends RouterContext {
13
+ chainId: GuruProtocolChainId;
14
+ }
15
+ export interface QuoteTradeResult extends Route {
16
+ txData: TransactionRequest;
17
+ }
18
+ export default function quoteTrade(params: QuoteTradeParams, ctx: QuoteTradeContext): Promise<QuoteTradeResult>;
@@ -0,0 +1,51 @@
1
+ import { getGuruProtocolAddresses, } from '../addresses.js';
2
+ import compareAddresses from '../helpers/compareAddresses.js';
3
+ import { getRouteIn, getRouteOut } from '../router/index.js';
4
+ import { quoteTradeSchema } from '../schemas/quoteTrade.js';
5
+ import buildTradeTx from '../txBuilders/buildTradeTx.js';
6
+ import { FundLedger__factory, Protocol__factory } from '../typechain/index.js';
7
+ export default async function quoteTrade(params, ctx) {
8
+ const parsed = quoteTradeSchema.parse(params);
9
+ const provider = ctx.provider;
10
+ const addresses = getGuruProtocolAddresses(ctx.chainId);
11
+ const protocol = Protocol__factory.connect(addresses.protocol, provider);
12
+ const isTollApplicable = async (token) => {
13
+ return (compareAddresses(token, addresses.tokens.WETH) ||
14
+ (await protocol.isEnabledStablecoin(token)));
15
+ };
16
+ const [tollIn, tollOut] = await Promise.all([
17
+ isTollApplicable(parsed.tokenIn),
18
+ isTollApplicable(parsed.tokenOut),
19
+ ]);
20
+ if (!tollIn && !tollOut) {
21
+ throw new Error(`[@guru-fund/sdk] quoteTrade: toll not applicable to ${parsed.tokenIn} ↔ ${parsed.tokenOut}`);
22
+ }
23
+ const getRoute = tollIn ? getRouteIn : getRouteOut;
24
+ const ledger = FundLedger__factory.connect(parsed.ledger, provider);
25
+ const [vaultAddress, controllerAddress, manager] = await Promise.all([
26
+ ledger.vault(),
27
+ ledger.controller(),
28
+ ledger.manager(),
29
+ ]);
30
+ const route = await getRoute({
31
+ chainId: ctx.chainId,
32
+ tokenIn: parsed.tokenIn,
33
+ tokenOut: parsed.tokenOut,
34
+ amountIn: parsed.amountIn,
35
+ slippageE2: parsed.maxSlippage != null
36
+ ? Number(parsed.maxSlippage / 10n)
37
+ : undefined,
38
+ account: vaultAddress,
39
+ vault: vaultAddress,
40
+ }, ctx);
41
+ return {
42
+ ...route,
43
+ txData: buildTradeTx({
44
+ controller: controllerAddress,
45
+ ledger: parsed.ledger,
46
+ adapter: String(route.adapter),
47
+ callData: String(route.callData),
48
+ from: manager,
49
+ }),
50
+ };
51
+ }
@@ -0,0 +1,41 @@
1
+ import type { AddressLike, BytesLike, TransactionRequest } from 'ethers';
2
+ import type { GuruProtocolChainId } from '../addresses';
3
+ import { type GetPriceUsd1e18 } from '../helpers/FundDataFetcher';
4
+ import { type RouterContext } from '../router';
5
+ import type { Route } from '../router/types';
6
+ export type ExternalCallStruct = {
7
+ adapter: AddressLike;
8
+ callData: BytesLike;
9
+ };
10
+ export interface QuoteWithdrawalParams {
11
+ ledger: string;
12
+ account: string;
13
+ shares: bigint;
14
+ coin: string;
15
+ referrerFeeBps: bigint;
16
+ slippageSettings?: Record<string, string | number | bigint>;
17
+ }
18
+ export interface QuoteWithdrawalContext extends RouterContext {
19
+ chainId: GuruProtocolChainId;
20
+ getPriceUsd1e18: GetPriceUsd1e18;
21
+ }
22
+ export interface QuoteWithdrawalLogs {
23
+ netAmountOut: bigint;
24
+ managerFee: bigint;
25
+ }
26
+ export type SimulationLog = {
27
+ address: string;
28
+ data: string;
29
+ topics: string[];
30
+ };
31
+ export interface QuoteWithdrawalResult {
32
+ proceeds: bigint;
33
+ extCalls: ExternalCallStruct[];
34
+ routing: Route['data'][];
35
+ referrerFeeBps: bigint;
36
+ cumulativeSlippageBps: bigint;
37
+ perAssetSlippageBps: Record<string, bigint>;
38
+ txData: TransactionRequest;
39
+ decodeLogs: (logs: SimulationLog[]) => QuoteWithdrawalLogs | null;
40
+ }
41
+ export default function quoteWithdrawal(params: QuoteWithdrawalParams, ctx: QuoteWithdrawalContext): Promise<QuoteWithdrawalResult>;
@@ -0,0 +1,113 @@
1
+ import { MAX_BPS, SECONDS_PER_YEAR } from '../constants.js';
2
+ import compareAddresses from '../helpers/compareAddresses.js';
3
+ import { Token } from '../helpers/Token.js';
4
+ import FundDataFetcher, { WEIGHT_DENOMINATOR, } from '../helpers/FundDataFetcher.js';
5
+ import ReceiptParser from '../helpers/ReceiptParser.js';
6
+ import { getRouteOut } from '../router/index.js';
7
+ import { quoteWithdrawalSchema } from '../schemas/quoteWithdrawal.js';
8
+ import buildWithdrawTx from '../txBuilders/buildWithdrawTx.js';
9
+ import { FundLedger__factory } from '../typechain/index.js';
10
+ const MANAGEMENT_FEE_BPS = 200n;
11
+ const MANAGEMENT_FEE_HORIZON_SECONDS = 300n;
12
+ const slippageE2For = (settings, token) => {
13
+ const slippage = settings?.[token.toLowerCase()];
14
+ return slippage == null ? undefined : Number(BigInt(slippage) / 10n);
15
+ };
16
+ export default async function quoteWithdrawal(params, ctx) {
17
+ const parsed = quoteWithdrawalSchema.parse(params);
18
+ if (parsed.referrerFeeBps < 0n || parsed.referrerFeeBps > MAX_BPS) {
19
+ throw new Error(`referrerFeeBps must be between 0 and ${MAX_BPS}, got ${parsed.referrerFeeBps}`);
20
+ }
21
+ const provider = ctx.provider;
22
+ const ledger = FundLedger__factory.connect(parsed.ledger, provider);
23
+ const fetcher = new FundDataFetcher({
24
+ chainId: ctx.chainId,
25
+ provider,
26
+ getPriceUsd1e18: ctx.getPriceUsd1e18,
27
+ });
28
+ const [fundData, vault, controllerAddress, viewBalance, rawBalance, rawTotalSupply, totalSupplyOffset,] = await Promise.all([
29
+ fetcher.fetchFundData(ledger),
30
+ ledger.vault(),
31
+ ledger.controller(),
32
+ ledger.balanceOf(parsed.account),
33
+ ledger.preAdjustedBalanceOf(parsed.account),
34
+ ledger.rawTotalSupply(),
35
+ ledger.totalSupplyOffset(),
36
+ ]);
37
+ const stablecoinBalance = await new Token(parsed.coin, provider).balanceOf(vault);
38
+ const pendingMgmtFees = fundData.tokenTotalSupply - rawTotalSupply - totalSupplyOffset;
39
+ const checkpointDelta = viewBalance - rawBalance;
40
+ const effectiveSupply = rawTotalSupply + pendingMgmtFees + checkpointDelta;
41
+ let proceeds = (parsed.shares * stablecoinBalance) / effectiveSupply;
42
+ const routing = [];
43
+ const extCalls = [];
44
+ const assetsToSwap = fundData.assets.filter((asset) => !compareAddresses(asset.token.address, parsed.coin));
45
+ const routeResults = await Promise.all(assetsToSwap.map(async (asset) => {
46
+ const amountIn = (parsed.shares * asset.balance) / effectiveSupply;
47
+ const mgmtFeeBuffer = (amountIn *
48
+ MANAGEMENT_FEE_BPS *
49
+ MANAGEMENT_FEE_HORIZON_SECONDS) /
50
+ (MAX_BPS * SECONDS_PER_YEAR);
51
+ const route = await getRouteOut({
52
+ chainId: ctx.chainId,
53
+ tokenIn: asset.token.address,
54
+ tokenOut: parsed.coin,
55
+ amountIn: amountIn - mgmtFeeBuffer,
56
+ slippageE2: slippageE2For(parsed.slippageSettings, asset.token.address),
57
+ account: parsed.account,
58
+ vault,
59
+ }, ctx);
60
+ return { asset, route };
61
+ }));
62
+ const perAssetSlippageBps = {};
63
+ let cumulativeSlippageBps = 0n;
64
+ for (const { asset, route } of routeResults) {
65
+ routing.push(route.data);
66
+ extCalls.push({
67
+ adapter: route.adapter,
68
+ callData: route.callData,
69
+ });
70
+ proceeds += BigInt(route.data.amountToReceive);
71
+ const bps = route.effectiveSlippageBps;
72
+ if (bps != null) {
73
+ const bpsN = BigInt(bps);
74
+ const assetKey = asset.token.address.toLowerCase();
75
+ perAssetSlippageBps[assetKey] = bpsN;
76
+ cumulativeSlippageBps += (bpsN * asset.weight) / WEIGHT_DENOMINATOR;
77
+ }
78
+ }
79
+ const referrerFeeBps = parsed.referrerFeeBps;
80
+ const txData = buildWithdrawTx({
81
+ controller: controllerAddress,
82
+ ledger: parsed.ledger,
83
+ coin: parsed.coin,
84
+ shares: parsed.shares,
85
+ extCalls,
86
+ referrerFeeBps,
87
+ from: parsed.account,
88
+ });
89
+ const withdrawnEvent = ledger.getEvent('Withdrawn');
90
+ const decodeLogs = (logs) => {
91
+ try {
92
+ const parser = ReceiptParser.fromSimulationLogs(logs);
93
+ const withdrawn = parser.getDecodedLog(ledger.interface, withdrawnEvent);
94
+ return {
95
+ netAmountOut: withdrawn.netAmountOut,
96
+ managerFee: withdrawn.managerFee,
97
+ };
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ };
103
+ return {
104
+ proceeds,
105
+ extCalls,
106
+ routing,
107
+ referrerFeeBps,
108
+ cumulativeSlippageBps,
109
+ perAssetSlippageBps,
110
+ txData,
111
+ decodeLogs,
112
+ };
113
+ }
@@ -0,0 +1,18 @@
1
+ export declare const VELORA_ENDPOINT = "https://api.velora.xyz/swap";
2
+ export declare const SUPPORTED_DEXS: readonly ["UniswapV2", "UniswapV3", "UniswapV4", "PancakeSwapV2", "PancakeSwapV3"];
3
+ export declare const VELORA_VERSION_BY_DEX: Partial<Record<SupportedDex, string>>;
4
+ export type SupportedDex = (typeof SUPPORTED_DEXS)[number];
5
+ export declare const INITIAL_SLIPPAGE_E3 = 500n;
6
+ export declare const MAX_EFFECTIVE_SLIPPAGE_BPS = 8000n;
7
+ export declare const SWAP_DEADLINE_SECONDS = 1800;
8
+ export declare const MAX_ROUTE_HOPS = 3;
9
+ export declare const RATE_LIMIT_MAX_RETRIES = 16;
10
+ export declare const SIMULATION_RETRY_BASE_DELAY_MS = 500;
11
+ export declare const BUNDLE_SIMULATION_CANDIDATES = 20;
12
+ export declare const MAX_SLIPPAGE_SEARCH_E3 = 8000n;
13
+ export declare const VELORA_PATH_CACHE_TTL: number;
14
+ export declare const VELORA_NEGATIVE_CACHE_TTL: number;
15
+ export declare const V4_ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
16
+ export declare const DEXSCREENER_ENDPOINT = "https://api.dexscreener.com/token-pairs/v1";
17
+ export declare const V4_DISCOVERY_MIN_LIQUIDITY_USD = 10000;
18
+ export declare const V4_DISCOVERY_MAX_POOLS = 3;
@@ -0,0 +1,25 @@
1
+ export const VELORA_ENDPOINT = 'https://api.velora.xyz/swap';
2
+ export const SUPPORTED_DEXS = [
3
+ 'UniswapV2',
4
+ 'UniswapV3',
5
+ 'UniswapV4',
6
+ 'PancakeSwapV2',
7
+ 'PancakeSwapV3',
8
+ ];
9
+ export const VELORA_VERSION_BY_DEX = {
10
+ UniswapV4: '6.2',
11
+ };
12
+ export const INITIAL_SLIPPAGE_E3 = 500n;
13
+ export const MAX_EFFECTIVE_SLIPPAGE_BPS = 8000n;
14
+ export const SWAP_DEADLINE_SECONDS = 1800;
15
+ export const MAX_ROUTE_HOPS = 3;
16
+ export const RATE_LIMIT_MAX_RETRIES = 16;
17
+ export const SIMULATION_RETRY_BASE_DELAY_MS = 500;
18
+ export const BUNDLE_SIMULATION_CANDIDATES = 20;
19
+ export const MAX_SLIPPAGE_SEARCH_E3 = 8000n;
20
+ export const VELORA_PATH_CACHE_TTL = 1000 * 60 * 60;
21
+ export const VELORA_NEGATIVE_CACHE_TTL = 1000 * 60;
22
+ export const V4_ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
23
+ export const DEXSCREENER_ENDPOINT = 'https://api.dexscreener.com/token-pairs/v1';
24
+ export const V4_DISCOVERY_MIN_LIQUIDITY_USD = 10_000;
25
+ export const V4_DISCOVERY_MAX_POOLS = 3;
@@ -0,0 +1,16 @@
1
+ import { type SwapSimulationContext } from './simulation';
2
+ export interface FinalizeRouteQuoteParams {
3
+ context: SwapSimulationContext;
4
+ amountToSend: bigint;
5
+ amountQuoted: bigint;
6
+ initialTollAmount: bigint;
7
+ outputTollE3?: bigint;
8
+ maxSlippageE3?: bigint;
9
+ }
10
+ export interface FinalizeRouteQuoteResult {
11
+ finalAmountToReceive: bigint;
12
+ callData: string;
13
+ effectiveSlippageBps: string;
14
+ finalTollAmount: bigint;
15
+ }
16
+ export declare function finalizeRouteQuote({ context, amountToSend, amountQuoted, initialTollAmount, outputTollE3, maxSlippageE3, }: FinalizeRouteQuoteParams): Promise<FinalizeRouteQuoteResult>;
@@ -0,0 +1,29 @@
1
+ import { INITIAL_SLIPPAGE_E3, MAX_EFFECTIVE_SLIPPAGE_BPS } from './constants.js';
2
+ import { withSlippageTolerance } from './helpers.js';
3
+ import { findMaxPassingAmountToReceive, } from './simulation.js';
4
+ export async function finalizeRouteQuote({ context, amountToSend, amountQuoted, initialTollAmount, outputTollE3 = 200n, maxSlippageE3, }) {
5
+ const amountWithSlippage = withSlippageTolerance(amountQuoted, INITIAL_SLIPPAGE_E3);
6
+ const finalAmountToReceive = await findMaxPassingAmountToReceive({
7
+ ...context,
8
+ amountQuoted,
9
+ amountWithSlippage,
10
+ amountIn: amountToSend,
11
+ maxSlippageE3,
12
+ });
13
+ const finalTollAmount = initialTollAmount === 0n
14
+ ? (finalAmountToReceive * outputTollE3) / 100000n
15
+ : initialTollAmount;
16
+ const rawBps = finalAmountToReceive > 0n
17
+ ? ((amountQuoted - finalAmountToReceive) * 10000n) /
18
+ finalAmountToReceive
19
+ : 0n;
20
+ const effectiveSlippageBps = (rawBps > MAX_EFFECTIVE_SLIPPAGE_BPS
21
+ ? MAX_EFFECTIVE_SLIPPAGE_BPS
22
+ : rawBps).toString();
23
+ return {
24
+ finalAmountToReceive,
25
+ callData: context.buildCallDataForAmount(finalAmountToReceive),
26
+ effectiveSlippageBps,
27
+ finalTollAmount,
28
+ };
29
+ }
@@ -0,0 +1,10 @@
1
+ import type { Provider } from 'ethers';
2
+ import type { SwapSimulator } from './simulation';
3
+ import type { Route, RouteSearchParams } from './types';
4
+ export interface GetFallbackRouteContext {
5
+ provider: Provider;
6
+ simulator: SwapSimulator;
7
+ getSwapFeePercentage: () => Promise<bigint>;
8
+ }
9
+ export declare function getFallbackRouteIn(params: RouteSearchParams, ctx: GetFallbackRouteContext): Promise<Route>;
10
+ export declare function getFallbackRouteOut(params: RouteSearchParams, ctx: GetFallbackRouteContext): Promise<Route>;
@@ -0,0 +1,91 @@
1
+ import compareAddresses from '../helpers/compareAddresses.js';
2
+ import { FundVault__factory } from '../typechain/index.js';
3
+ import PoolHelper from './poolHelper.js';
4
+ import { quoteWethTrade } from './quoteWethTrade.js';
5
+ export async function getFallbackRouteIn(params, ctx) {
6
+ const { chainId, tokenIn, tokenOut, amountIn, slippageE2 } = params;
7
+ const slippage = BigInt(slippageE2 ?? 500) * 10n;
8
+ const poolHelper = new PoolHelper({
9
+ chainId,
10
+ provider: ctx.provider,
11
+ getSwapFeePercentage: ctx.getSwapFeePercentage,
12
+ });
13
+ const weth = poolHelper.addresses.tokens.WETH;
14
+ const [controller, blockNumber] = await Promise.all([
15
+ FundVault__factory.connect(params.vault, ctx.provider).controller(),
16
+ ctx.provider.getBlockNumber(),
17
+ ]);
18
+ const finalization = {
19
+ blockNumber,
20
+ controller,
21
+ vault: params.vault,
22
+ account: params.account,
23
+ simulator: ctx.simulator,
24
+ prefixTxs: params.prefixTxs,
25
+ maxSlippageE3: slippage,
26
+ };
27
+ if (compareAddresses(tokenIn, weth) || compareAddresses(tokenOut, weth)) {
28
+ const pairedToken = compareAddresses(tokenIn, weth) ? tokenOut : tokenIn;
29
+ const coinTokenPool = await poolHelper.getUniswapCompatibleTokenPool(pairedToken);
30
+ return quoteWethTrade({
31
+ feeTier: coinTokenPool.feeTier,
32
+ input: { tokenIn, tokenOut, amountIn, slippage },
33
+ poolHelper,
34
+ finalization,
35
+ });
36
+ }
37
+ const pool = await poolHelper.getUniswapCompatibleTokenPool(tokenOut);
38
+ const path = [tokenIn, weth, tokenOut];
39
+ const route = await poolHelper.getStableForTokenQuote({
40
+ path,
41
+ inputAmount: amountIn,
42
+ slippage,
43
+ exchangeFactory: pool.exchangeFactory,
44
+ finalization,
45
+ });
46
+ return { ...route, hops: 2 };
47
+ }
48
+ export async function getFallbackRouteOut(params, ctx) {
49
+ const { chainId, tokenIn, tokenOut, amountIn, slippageE2 } = params;
50
+ const slippage = BigInt(slippageE2 ?? 500) * 10n;
51
+ const poolHelper = new PoolHelper({
52
+ chainId,
53
+ provider: ctx.provider,
54
+ getSwapFeePercentage: ctx.getSwapFeePercentage,
55
+ });
56
+ const weth = poolHelper.addresses.tokens.WETH;
57
+ const [controller, blockNumber] = await Promise.all([
58
+ FundVault__factory.connect(params.vault, ctx.provider).controller(),
59
+ ctx.provider.getBlockNumber(),
60
+ ]);
61
+ const finalization = {
62
+ blockNumber,
63
+ controller,
64
+ vault: params.vault,
65
+ account: params.account,
66
+ simulator: ctx.simulator,
67
+ prefixTxs: params.prefixTxs,
68
+ maxSlippageE3: slippage,
69
+ };
70
+ if (compareAddresses(tokenIn, weth) || compareAddresses(tokenOut, weth)) {
71
+ const pairedToken = compareAddresses(tokenIn, weth) ? tokenOut : tokenIn;
72
+ const coinTokenPool = await poolHelper.getUniswapCompatibleTokenPool(pairedToken);
73
+ const route = await quoteWethTrade({
74
+ feeTier: coinTokenPool.feeTier,
75
+ input: { tokenIn, tokenOut, amountIn, slippage },
76
+ poolHelper,
77
+ finalization,
78
+ });
79
+ return { ...route, hops: 1 };
80
+ }
81
+ const pool = await poolHelper.getUniswapCompatibleTokenPool(tokenIn);
82
+ const path = [tokenIn, weth, tokenOut];
83
+ const route = await poolHelper.getTokensForStableQuote({
84
+ path,
85
+ inputAmount: amountIn,
86
+ slippage,
87
+ exchangeFactory: pool.exchangeFactory,
88
+ finalization,
89
+ });
90
+ return { ...route, hops: 2 };
91
+ }
@@ -0,0 +1,42 @@
1
+ import { type Provider } from 'ethers';
2
+ import type { SwapV4Struct } from '../typechain/out/UniswapV4Adapter';
3
+ import type { SwapSimulator } from './simulation';
4
+ import type { Route, RouteSearchParams, V4HookPathKey, V4Path } from './types';
5
+ export interface V4QuoterLike {
6
+ quoteExactInput: {
7
+ staticCall: (params: {
8
+ exactCurrency: string;
9
+ path: SwapV4Struct['path'];
10
+ exactAmount: bigint;
11
+ }) => Promise<[bigint, bigint]>;
12
+ };
13
+ }
14
+ export declare function connectV4Quoter(address: string, provider: Provider): V4QuoterLike;
15
+ export declare function toAdapterPathKeys(path: V4Path): SwapV4Struct['path'];
16
+ type V4QuoteSource = 'quoter' | 'adapter-preview';
17
+ export interface ApplyV4TollParams {
18
+ baseToll: {
19
+ currency: string;
20
+ amount: bigint;
21
+ };
22
+ quotedAmountToReceive: bigint;
23
+ quoteSource: V4QuoteSource;
24
+ swapAmountIn: bigint;
25
+ }
26
+ export interface ApplyV4TollResult {
27
+ toll: {
28
+ currency: string;
29
+ amount: bigint;
30
+ };
31
+ amountQuoted: bigint;
32
+ amountToSend: bigint;
33
+ initialTollAmount: bigint;
34
+ }
35
+ export declare function applyV4Toll({ baseToll, quotedAmountToReceive, quoteSource, swapAmountIn, }: ApplyV4TollParams): ApplyV4TollResult;
36
+ export declare function toHookAdapterPathKeys(path: V4Path): V4HookPathKey[];
37
+ export interface GetUniswapV4RouteContext {
38
+ provider: Provider;
39
+ simulator: SwapSimulator;
40
+ }
41
+ export default function getUniswapV4Route(params: RouteSearchParams, ctx: GetUniswapV4RouteContext): Promise<Route>;
42
+ export {};