levr-sdk 0.4.0 → 0.5.0-alpha.10

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 (752) hide show
  1. package/dist/esm/packages/clanker-sdk/src/abi/uniswap/UniswapV3Factory.js +136 -0
  2. package/dist/esm/packages/clanker-sdk/src/abi/uniswap/UniswapV3Factory.js.map +1 -0
  3. package/dist/esm/packages/clanker-sdk/src/abi/uniswap/UniswapV3NonfungiblePositionManager.js +603 -0
  4. package/dist/esm/packages/clanker-sdk/src/abi/uniswap/UniswapV3NonfungiblePositionManager.js.map +1 -0
  5. package/dist/esm/packages/clanker-sdk/src/abi/v0/Clanker.js +312 -0
  6. package/dist/esm/packages/clanker-sdk/src/abi/v0/Clanker.js.map +1 -0
  7. package/dist/esm/packages/clanker-sdk/src/abi/v1/Clanker.js +323 -0
  8. package/dist/esm/packages/clanker-sdk/src/abi/v1/Clanker.js.map +1 -0
  9. package/dist/esm/packages/clanker-sdk/src/abi/v2/Clanker.js +315 -0
  10. package/dist/esm/packages/clanker-sdk/src/abi/v2/Clanker.js.map +1 -0
  11. package/dist/esm/packages/clanker-sdk/src/abi/v2/LpLockerv2.js +321 -0
  12. package/dist/esm/packages/clanker-sdk/src/abi/v2/LpLockerv2.js.map +1 -0
  13. package/dist/esm/packages/clanker-sdk/src/abi/v3/Clanker.js +323 -0
  14. package/dist/esm/packages/clanker-sdk/src/abi/v3/Clanker.js.map +1 -0
  15. package/dist/esm/packages/clanker-sdk/src/abi/v3/ClankerToken.js +548 -0
  16. package/dist/esm/packages/clanker-sdk/src/abi/v3/ClankerToken.js.map +1 -0
  17. package/dist/esm/packages/clanker-sdk/src/abi/v3.1/Clanker.js +689 -0
  18. package/dist/esm/packages/clanker-sdk/src/abi/v3.1/Clanker.js.map +1 -0
  19. package/dist/esm/packages/clanker-sdk/src/abi/v3.1/ClankerToken.js +1794 -0
  20. package/dist/esm/packages/clanker-sdk/src/abi/v3.1/ClankerToken.js.map +1 -0
  21. package/dist/esm/packages/clanker-sdk/src/abi/v3.1/ClankerVault.js +234 -0
  22. package/dist/esm/packages/clanker-sdk/src/abi/v3.1/ClankerVault.js.map +1 -0
  23. package/dist/esm/packages/clanker-sdk/src/abi/v3.1/LpLockerv2.js +571 -0
  24. package/dist/esm/packages/clanker-sdk/src/abi/v3.1/LpLockerv2.js.map +1 -0
  25. package/dist/esm/packages/clanker-sdk/src/abi/v4/Clanker.js +437 -0
  26. package/dist/esm/packages/clanker-sdk/src/abi/v4/Clanker.js.map +1 -0
  27. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerAirdrop.js +198 -0
  28. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerAirdrop.js.map +1 -0
  29. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerAirdropV2.js +290 -0
  30. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerAirdropV2.js.map +1 -0
  31. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerFeeLocker.js +160 -0
  32. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerFeeLocker.js.map +1 -0
  33. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHook.js +1476 -0
  34. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHook.js.map +1 -0
  35. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHookDynamicFee.js +758 -0
  36. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHookDynamicFee.js.map +1 -0
  37. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHookStaticFee.js +636 -0
  38. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerHookStaticFee.js.map +1 -0
  39. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerLocker.js +459 -0
  40. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerLocker.js.map +1 -0
  41. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerMevBlockDelay.js +84 -0
  42. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerMevBlockDelay.js.map +1 -0
  43. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerSniperAuction.js +342 -0
  44. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerSniperAuction.js.map +1 -0
  45. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerSniperUtil.js +80 -0
  46. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerSniperUtil.js.map +1 -0
  47. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerToken.js +554 -0
  48. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerToken.js.map +1 -0
  49. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerUniV4EthDevBuy.js +170 -0
  50. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerUniV4EthDevBuy.js.map +1 -0
  51. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerUniv3EthDevBuy.js +172 -0
  52. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerUniv3EthDevBuy.js.map +1 -0
  53. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerVault.js +221 -0
  54. package/dist/esm/packages/clanker-sdk/src/abi/v4/ClankerVault.js.map +1 -0
  55. package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerHookDynamicFee.js +829 -0
  56. package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerHookDynamicFee.js.map +1 -0
  57. package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerHookStaticFee.js +717 -0
  58. package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerHookStaticFee.js.map +1 -0
  59. package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerMevSniperAuction.js +415 -0
  60. package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerMevSniperAuction.js.map +1 -0
  61. package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerPool.js +11 -0
  62. package/dist/esm/packages/clanker-sdk/src/abi/v4.1/ClankerPool.js.map +1 -0
  63. package/dist/esm/packages/clanker-sdk/src/config/clankerTokenV3.js +272 -0
  64. package/dist/esm/packages/clanker-sdk/src/config/clankerTokenV3.js.map +1 -0
  65. package/dist/esm/packages/clanker-sdk/src/config/clankerTokenV4.js +508 -0
  66. package/dist/esm/packages/clanker-sdk/src/config/clankerTokenV4.js.map +1 -0
  67. package/dist/esm/packages/clanker-sdk/src/config/clankerTokens.js +2 -0
  68. package/dist/esm/packages/clanker-sdk/src/config/clankerTokens.js.map +1 -0
  69. package/dist/esm/packages/clanker-sdk/src/constants.js +95 -0
  70. package/dist/esm/packages/clanker-sdk/src/constants.js.map +1 -0
  71. package/dist/esm/packages/clanker-sdk/src/deployment/deploy.js +53 -0
  72. package/dist/esm/packages/clanker-sdk/src/deployment/deploy.js.map +1 -0
  73. package/dist/esm/packages/clanker-sdk/src/extensions/DevBuyExtension.js +89 -0
  74. package/dist/esm/packages/clanker-sdk/src/extensions/DevBuyExtension.js.map +1 -0
  75. package/dist/esm/packages/clanker-sdk/src/extensions/IClankerExtension.js +2 -0
  76. package/dist/esm/packages/clanker-sdk/src/extensions/IClankerExtension.js.map +1 -0
  77. package/dist/esm/packages/clanker-sdk/src/extensions/VaultExtension.js +26 -0
  78. package/dist/esm/packages/clanker-sdk/src/extensions/VaultExtension.js.map +1 -0
  79. package/dist/esm/packages/clanker-sdk/src/extensions/index.js +4 -0
  80. package/dist/esm/packages/clanker-sdk/src/extensions/index.js.map +1 -0
  81. package/dist/esm/packages/clanker-sdk/src/index.js +6 -0
  82. package/dist/esm/packages/clanker-sdk/src/index.js.map +1 -0
  83. package/dist/esm/packages/clanker-sdk/src/services/vanityAddress.js +40 -0
  84. package/dist/esm/packages/clanker-sdk/src/services/vanityAddress.js.map +1 -0
  85. package/dist/esm/packages/clanker-sdk/src/utils/clanker-contracts.js +2 -0
  86. package/dist/esm/packages/clanker-sdk/src/utils/clanker-contracts.js.map +1 -0
  87. package/dist/esm/packages/clanker-sdk/src/utils/clankers.js +212 -0
  88. package/dist/esm/packages/clanker-sdk/src/utils/clankers.js.map +1 -0
  89. package/dist/esm/packages/clanker-sdk/src/utils/errors.js +80 -0
  90. package/dist/esm/packages/clanker-sdk/src/utils/errors.js.map +1 -0
  91. package/dist/esm/packages/clanker-sdk/src/utils/market-cap.js +19 -0
  92. package/dist/esm/packages/clanker-sdk/src/utils/market-cap.js.map +1 -0
  93. package/dist/esm/packages/clanker-sdk/src/utils/merkleTree.js +37 -0
  94. package/dist/esm/packages/clanker-sdk/src/utils/merkleTree.js.map +1 -0
  95. package/dist/esm/packages/clanker-sdk/src/utils/meta.js +9 -0
  96. package/dist/esm/packages/clanker-sdk/src/utils/meta.js.map +1 -0
  97. package/dist/esm/packages/clanker-sdk/src/utils/write-clanker-contracts.js +70 -0
  98. package/dist/esm/packages/clanker-sdk/src/utils/write-clanker-contracts.js.map +1 -0
  99. package/dist/esm/packages/clanker-sdk/src/utils/zod-onchain.js +39 -0
  100. package/dist/esm/packages/clanker-sdk/src/utils/zod-onchain.js.map +1 -0
  101. package/dist/esm/packages/clanker-sdk/src/v3/index.js +151 -0
  102. package/dist/esm/packages/clanker-sdk/src/v3/index.js.map +1 -0
  103. package/dist/esm/packages/clanker-sdk/src/v4/extensions/airdrop.js +144 -0
  104. package/dist/esm/packages/clanker-sdk/src/v4/extensions/airdrop.js.map +1 -0
  105. package/dist/esm/packages/clanker-sdk/src/v4/extensions/index.js +2 -0
  106. package/dist/esm/packages/clanker-sdk/src/v4/extensions/index.js.map +1 -0
  107. package/dist/esm/packages/clanker-sdk/src/v4/index.js +383 -0
  108. package/dist/esm/packages/clanker-sdk/src/v4/index.js.map +1 -0
  109. package/dist/esm/{abis → src/abis}/ClankerAirdropV2.js +1 -0
  110. package/dist/esm/src/abis/ClankerAirdropV2.js.map +1 -0
  111. package/dist/esm/{abis → src/abis}/ClankerVault.js +1 -0
  112. package/dist/esm/src/abis/ClankerVault.js.map +1 -0
  113. package/dist/esm/{abis → src/abis}/IClankerAirdrop.js +1 -0
  114. package/dist/esm/src/abis/IClankerAirdrop.js.map +1 -0
  115. package/dist/esm/{abis → src/abis}/IClankerFeeLocker.js +1 -0
  116. package/dist/esm/src/abis/IClankerFeeLocker.js.map +1 -0
  117. package/dist/esm/{abis → src/abis}/IClankerHookDynamicFee.js +1 -0
  118. package/dist/esm/src/abis/IClankerHookDynamicFee.js.map +1 -0
  119. package/dist/esm/{abis → src/abis}/IClankerHookStaticFee.js +1 -0
  120. package/dist/esm/src/abis/IClankerHookStaticFee.js.map +1 -0
  121. package/dist/esm/{abis → src/abis}/IClankerLPLocker.js +1 -0
  122. package/dist/esm/src/abis/IClankerLPLocker.js.map +1 -0
  123. package/dist/esm/{abis → src/abis}/IClankerLpLockerFeeConversion.js +1 -0
  124. package/dist/esm/src/abis/IClankerLpLockerFeeConversion.js.map +1 -0
  125. package/dist/esm/{abis → src/abis}/IClankerLpLockerMultiple.js +1 -0
  126. package/dist/esm/src/abis/IClankerLpLockerMultiple.js.map +1 -0
  127. package/dist/esm/{abis → src/abis}/IClankerToken.js +1 -0
  128. package/dist/esm/src/abis/IClankerToken.js.map +1 -0
  129. package/dist/esm/{abis → src/abis}/LevrDeployer_v1.js +1 -0
  130. package/dist/esm/src/abis/LevrDeployer_v1.js.map +1 -0
  131. package/dist/esm/{abis → src/abis}/LevrFactory_v1.js +1 -0
  132. package/dist/esm/src/abis/LevrFactory_v1.js.map +1 -0
  133. package/dist/esm/{abis → src/abis}/LevrFeeSplitterFactory_v1.js +1 -0
  134. package/dist/esm/src/abis/LevrFeeSplitterFactory_v1.js.map +1 -0
  135. package/dist/esm/{abis → src/abis}/LevrFeeSplitter_v1.js +1 -0
  136. package/dist/esm/src/abis/LevrFeeSplitter_v1.js.map +1 -0
  137. package/dist/esm/{abis → src/abis}/LevrForwarder_v1.js +1 -0
  138. package/dist/esm/src/abis/LevrForwarder_v1.js.map +1 -0
  139. package/dist/esm/{abis → src/abis}/LevrGovernor_v1.js +1 -0
  140. package/dist/esm/src/abis/LevrGovernor_v1.js.map +1 -0
  141. package/dist/esm/{abis → src/abis}/LevrStakedToken_v1.js +1 -0
  142. package/dist/esm/src/abis/LevrStakedToken_v1.js.map +1 -0
  143. package/dist/esm/{abis → src/abis}/LevrStaking_v1.js +1 -0
  144. package/dist/esm/src/abis/LevrStaking_v1.js.map +1 -0
  145. package/dist/esm/{abis → src/abis}/LevrTreasury_v1.js +1 -0
  146. package/dist/esm/src/abis/LevrTreasury_v1.js.map +1 -0
  147. package/dist/esm/{abis → src/abis}/Permit2.js +1 -0
  148. package/dist/esm/src/abis/Permit2.js.map +1 -0
  149. package/dist/esm/{abis → src/abis}/StateView.js +1 -0
  150. package/dist/esm/src/abis/StateView.js.map +1 -0
  151. package/dist/esm/src/abis/V3Pool.js +36 -0
  152. package/dist/esm/src/abis/V3Pool.js.map +1 -0
  153. package/dist/esm/{abis → src/abis}/V3QuoterV2.js +1 -0
  154. package/dist/esm/src/abis/V3QuoterV2.js.map +1 -0
  155. package/dist/esm/{abis → src/abis}/V4Quoter.js +1 -0
  156. package/dist/esm/src/abis/V4Quoter.js.map +1 -0
  157. package/dist/esm/{abis → src/abis}/WETH9.js +1 -0
  158. package/dist/esm/src/abis/WETH9.js.map +1 -0
  159. package/dist/esm/{abis → src/abis}/index.js +3 -1
  160. package/dist/esm/src/abis/index.js.map +1 -0
  161. package/dist/esm/src/airdrop.js.map +1 -0
  162. package/dist/esm/{balance.js → src/balance.js} +3 -3
  163. package/dist/esm/src/balance.js.map +1 -0
  164. package/dist/esm/{build-calldatas-v4.js → src/build-calldatas-v4.js} +2 -9
  165. package/dist/esm/src/build-calldatas-v4.js.map +1 -0
  166. package/dist/esm/{build-clanker-v4.js → src/build-clanker-v4.js} +115 -12
  167. package/dist/esm/src/build-clanker-v4.js.map +1 -0
  168. package/dist/esm/{client → src/client}/hook/index.js +7 -5
  169. package/dist/esm/src/client/hook/index.js.map +1 -0
  170. package/dist/esm/src/client/hook/use-airdrop.js.map +1 -0
  171. package/dist/esm/{client → src/client}/hook/use-clanker.js +1 -1
  172. package/dist/esm/src/client/hook/use-clanker.js.map +1 -0
  173. package/dist/esm/src/client/hook/use-configure-splits.js.map +1 -0
  174. package/dist/esm/src/client/hook/use-deploy.js.map +1 -0
  175. package/dist/esm/{client → src/client}/hook/use-factory.js +5 -11
  176. package/dist/esm/src/client/hook/use-factory.js.map +1 -0
  177. package/dist/esm/src/client/hook/use-fee-receivers.js.map +1 -0
  178. package/dist/esm/src/client/hook/use-governance.js.map +1 -0
  179. package/dist/esm/src/client/hook/use-metrics.js +63 -0
  180. package/dist/esm/src/client/hook/use-metrics.js.map +1 -0
  181. package/dist/esm/src/client/hook/use-prepare.js.map +1 -0
  182. package/dist/esm/src/client/hook/use-project.js +133 -0
  183. package/dist/esm/src/client/hook/use-project.js.map +1 -0
  184. package/dist/esm/{client → src/client}/hook/use-proposal.js +6 -5
  185. package/dist/esm/src/client/hook/use-proposal.js.map +1 -0
  186. package/dist/esm/src/client/hook/use-register.js.map +1 -0
  187. package/dist/esm/{client → src/client}/hook/use-stake.js +4 -10
  188. package/dist/esm/src/client/hook/use-stake.js.map +1 -0
  189. package/dist/esm/src/client/hook/use-subscription.js +98 -0
  190. package/dist/esm/src/client/hook/use-subscription.js.map +1 -0
  191. package/dist/esm/{client → src/client}/hook/use-swap.js +5 -4
  192. package/dist/esm/src/client/hook/use-swap.js.map +1 -0
  193. package/dist/esm/src/client/hook/use-token-admin.js +91 -0
  194. package/dist/esm/src/client/hook/use-token-admin.js.map +1 -0
  195. package/dist/esm/src/client/hook/use-user.js.map +1 -0
  196. package/dist/esm/src/client/hook/use-vault.js.map +1 -0
  197. package/dist/esm/src/client/index.js.map +1 -0
  198. package/dist/esm/{client → src/client}/levr-provider.js +4 -24
  199. package/dist/esm/src/client/levr-provider.js.map +1 -0
  200. package/dist/esm/{client → src/client}/query-keys.js +15 -5
  201. package/dist/esm/src/client/query-keys.js.map +1 -0
  202. package/dist/esm/src/constants/chain.js +260 -0
  203. package/dist/esm/src/constants/chain.js.map +1 -0
  204. package/dist/esm/{constants → src/constants}/clanker.js +15 -10
  205. package/dist/esm/src/constants/clanker.js.map +1 -0
  206. package/dist/esm/src/constants/config.js.map +1 -0
  207. package/dist/esm/src/constants/index.js +24 -0
  208. package/dist/esm/src/constants/index.js.map +1 -0
  209. package/dist/esm/{constants → src/constants}/levr.js +8 -1
  210. package/dist/esm/src/constants/levr.js.map +1 -0
  211. package/dist/esm/{constants → src/constants}/uniswap.js +38 -1
  212. package/dist/esm/src/constants/uniswap.js.map +1 -0
  213. package/dist/esm/{deploy-v4.js → src/deploy-v4.js} +22 -1
  214. package/dist/esm/src/deploy-v4.js.map +1 -0
  215. package/dist/esm/src/factory.js +40 -0
  216. package/dist/esm/src/factory.js.map +1 -0
  217. package/dist/esm/{fee-receivers.js → src/fee-receivers.js} +5 -5
  218. package/dist/esm/src/fee-receivers.js.map +1 -0
  219. package/dist/esm/src/fee-splitter.js.map +1 -0
  220. package/dist/esm/src/governance.js.map +1 -0
  221. package/dist/esm/src/graphql/client.js +62 -0
  222. package/dist/esm/src/graphql/client.js.map +1 -0
  223. package/dist/esm/src/graphql/constants.js +3 -0
  224. package/dist/esm/src/graphql/constants.js.map +1 -0
  225. package/dist/esm/src/graphql/fields/factory.js +24 -0
  226. package/dist/esm/src/graphql/fields/factory.js.map +1 -0
  227. package/dist/esm/src/graphql/fields/index.js +5 -0
  228. package/dist/esm/src/graphql/fields/index.js.map +1 -0
  229. package/dist/esm/src/graphql/fields/metrics.js +28 -0
  230. package/dist/esm/src/graphql/fields/metrics.js.map +1 -0
  231. package/dist/esm/src/graphql/fields/project.js +117 -0
  232. package/dist/esm/src/graphql/fields/project.js.map +1 -0
  233. package/dist/esm/src/graphql/fields/proposal.js +97 -0
  234. package/dist/esm/src/graphql/fields/proposal.js.map +1 -0
  235. package/dist/esm/src/graphql/gen/index.js +25 -0
  236. package/dist/esm/src/graphql/gen/index.js.map +1 -0
  237. package/dist/esm/src/graphql/gen/runtime/batcher.js +207 -0
  238. package/dist/esm/src/graphql/gen/runtime/batcher.js.map +1 -0
  239. package/dist/esm/src/graphql/gen/runtime/createClient.js +25 -0
  240. package/dist/esm/src/graphql/gen/runtime/createClient.js.map +1 -0
  241. package/dist/esm/src/graphql/gen/runtime/error.js +18 -0
  242. package/dist/esm/src/graphql/gen/runtime/error.js.map +1 -0
  243. package/dist/esm/src/graphql/gen/runtime/fetcher.js +68 -0
  244. package/dist/esm/src/graphql/gen/runtime/fetcher.js.map +1 -0
  245. package/dist/esm/src/graphql/gen/runtime/generateGraphqlOperation.js +126 -0
  246. package/dist/esm/src/graphql/gen/runtime/generateGraphqlOperation.js.map +1 -0
  247. package/dist/esm/src/graphql/gen/runtime/index.js +10 -0
  248. package/dist/esm/src/graphql/gen/runtime/index.js.map +1 -0
  249. package/dist/esm/src/graphql/gen/runtime/linkTypeMap.js +92 -0
  250. package/dist/esm/src/graphql/gen/runtime/linkTypeMap.js.map +1 -0
  251. package/dist/esm/src/graphql/gen/runtime/typeSelection.js +4 -0
  252. package/dist/esm/src/graphql/gen/runtime/typeSelection.js.map +1 -0
  253. package/dist/esm/src/graphql/gen/runtime/types.js +3 -0
  254. package/dist/esm/src/graphql/gen/runtime/types.js.map +1 -0
  255. package/dist/esm/src/graphql/gen/schema.js +527 -0
  256. package/dist/esm/src/graphql/gen/schema.js.map +1 -0
  257. package/dist/esm/src/graphql/gen/types.js +4298 -0
  258. package/dist/esm/src/graphql/gen/types.js.map +1 -0
  259. package/dist/esm/src/graphql/index.js +18 -0
  260. package/dist/esm/src/graphql/index.js.map +1 -0
  261. package/dist/esm/src/graphql/subscription-manager.js +101 -0
  262. package/dist/esm/src/graphql/subscription-manager.js.map +1 -0
  263. package/dist/esm/{index.js → src/index.js} +3 -1
  264. package/dist/esm/src/index.js.map +1 -0
  265. package/dist/esm/src/ipfs-merkle-tree.js.map +1 -0
  266. package/dist/esm/src/pool-key.js.map +1 -0
  267. package/dist/esm/{project.js → src/project.js} +303 -336
  268. package/dist/esm/src/project.js.map +1 -0
  269. package/dist/esm/src/proposal.js +181 -0
  270. package/dist/esm/src/proposal.js.map +1 -0
  271. package/dist/esm/src/quote/index.js.map +1 -0
  272. package/dist/esm/src/quote/v3.js.map +1 -0
  273. package/dist/esm/src/quote/v4.js.map +1 -0
  274. package/dist/esm/src/schema/base.schema.js.map +1 -0
  275. package/dist/esm/{schema → src/schema}/clanker.schema.js +26 -2
  276. package/dist/esm/src/schema/clanker.schema.js.map +1 -0
  277. package/dist/esm/src/schema/index.js.map +1 -0
  278. package/dist/esm/{schema → src/schema}/levr.schema.js +19 -2
  279. package/dist/esm/src/schema/levr.schema.js.map +1 -0
  280. package/dist/esm/{stake.js → src/stake.js} +19 -21
  281. package/dist/esm/src/stake.js.map +1 -0
  282. package/dist/esm/{swap-v4.js → src/swap-v4.js} +2 -13
  283. package/dist/esm/src/swap-v4.js.map +1 -0
  284. package/dist/esm/src/token-admin.js +87 -0
  285. package/dist/esm/src/token-admin.js.map +1 -0
  286. package/dist/esm/{types.js.map → src/types.js.map} +1 -1
  287. package/dist/esm/src/usd-price.js +274 -0
  288. package/dist/esm/src/usd-price.js.map +1 -0
  289. package/dist/esm/{user.js → src/user.js} +26 -21
  290. package/dist/esm/src/user.js.map +1 -0
  291. package/dist/esm/{util.js → src/util.js} +43 -25
  292. package/dist/esm/src/util.js.map +1 -0
  293. package/dist/esm/src/vault.js.map +1 -0
  294. package/dist/types/packages/clanker-sdk/src/abi/uniswap/UniswapV3Factory.d.ts +185 -0
  295. package/dist/types/packages/clanker-sdk/src/abi/uniswap/UniswapV3Factory.d.ts.map +1 -0
  296. package/dist/types/packages/clanker-sdk/src/abi/uniswap/UniswapV3NonfungiblePositionManager.d.ts +949 -0
  297. package/dist/types/packages/clanker-sdk/src/abi/uniswap/UniswapV3NonfungiblePositionManager.d.ts.map +1 -0
  298. package/dist/types/packages/clanker-sdk/src/abi/v0/Clanker.d.ts +402 -0
  299. package/dist/types/packages/clanker-sdk/src/abi/v0/Clanker.d.ts.map +1 -0
  300. package/dist/types/packages/clanker-sdk/src/abi/v1/Clanker.d.ts +491 -0
  301. package/dist/types/packages/clanker-sdk/src/abi/v1/Clanker.d.ts.map +1 -0
  302. package/dist/types/packages/clanker-sdk/src/abi/v2/Clanker.d.ts +463 -0
  303. package/dist/types/packages/clanker-sdk/src/abi/v2/Clanker.d.ts.map +1 -0
  304. package/dist/types/packages/clanker-sdk/src/abi/v2/LpLockerv2.d.ts +428 -0
  305. package/dist/types/packages/clanker-sdk/src/abi/v2/LpLockerv2.d.ts.map +1 -0
  306. package/dist/types/packages/clanker-sdk/src/abi/v3/Clanker.d.ts +499 -0
  307. package/dist/types/packages/clanker-sdk/src/abi/v3/Clanker.d.ts.map +1 -0
  308. package/dist/types/packages/clanker-sdk/src/abi/v3/ClankerToken.d.ts +846 -0
  309. package/dist/types/packages/clanker-sdk/src/abi/v3/ClankerToken.d.ts.map +1 -0
  310. package/dist/types/packages/clanker-sdk/src/abi/v3.1/Clanker.d.ts +846 -0
  311. package/dist/types/packages/clanker-sdk/src/abi/v3.1/Clanker.d.ts.map +1 -0
  312. package/dist/types/packages/clanker-sdk/src/abi/v3.1/ClankerToken.d.ts +2654 -0
  313. package/dist/types/packages/clanker-sdk/src/abi/v3.1/ClankerToken.d.ts.map +1 -0
  314. package/dist/types/packages/clanker-sdk/src/abi/v3.1/ClankerVault.d.ts +289 -0
  315. package/dist/types/packages/clanker-sdk/src/abi/v3.1/ClankerVault.d.ts.map +1 -0
  316. package/dist/types/packages/clanker-sdk/src/abi/v3.1/LpLockerv2.d.ts +670 -0
  317. package/dist/types/packages/clanker-sdk/src/abi/v3.1/LpLockerv2.d.ts.map +1 -0
  318. package/dist/types/packages/clanker-sdk/src/abi/v4/Clanker.d.ts +819 -0
  319. package/dist/types/packages/clanker-sdk/src/abi/v4/Clanker.d.ts.map +1 -0
  320. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerAirdrop.d.ts +413 -0
  321. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerAirdrop.d.ts.map +1 -0
  322. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerAirdropV2.d.ts +573 -0
  323. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerAirdropV2.d.ts.map +1 -0
  324. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerFeeLocker.d.ts +290 -0
  325. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerFeeLocker.d.ts.map +1 -0
  326. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHook.d.ts +1143 -0
  327. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHook.d.ts.map +1 -0
  328. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHookDynamicFee.d.ts +1430 -0
  329. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHookDynamicFee.d.ts.map +1 -0
  330. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHookStaticFee.d.ts +1219 -0
  331. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerHookStaticFee.d.ts.map +1 -0
  332. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerLocker.d.ts +845 -0
  333. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerLocker.d.ts.map +1 -0
  334. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerMevBlockDelay.d.ts +151 -0
  335. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerMevBlockDelay.d.ts.map +1 -0
  336. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerSniperAuction.d.ts +572 -0
  337. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerSniperAuction.d.ts.map +1 -0
  338. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerSniperUtil.d.ts +167 -0
  339. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerSniperUtil.d.ts.map +1 -0
  340. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerToken.d.ts +981 -0
  341. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerToken.d.ts.map +1 -0
  342. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerUniV4EthDevBuy.d.ts +325 -0
  343. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerUniV4EthDevBuy.d.ts.map +1 -0
  344. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerUniv3EthDevBuy.d.ts +326 -0
  345. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerUniv3EthDevBuy.d.ts.map +1 -0
  346. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerVault.d.ts +414 -0
  347. package/dist/types/packages/clanker-sdk/src/abi/v4/ClankerVault.d.ts.map +1 -0
  348. package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerHookDynamicFee.d.ts +92 -0
  349. package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerHookDynamicFee.d.ts.map +1 -0
  350. package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerHookStaticFee.d.ts +88 -0
  351. package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerHookStaticFee.d.ts.map +1 -0
  352. package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerMevSniperAuction.d.ts +69 -0
  353. package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerMevSniperAuction.d.ts.map +1 -0
  354. package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerPool.d.ts +9 -0
  355. package/dist/types/packages/clanker-sdk/src/abi/v4.1/ClankerPool.d.ts.map +1 -0
  356. package/dist/types/packages/clanker-sdk/src/config/clankerTokenV3.d.ts +64 -0
  357. package/dist/types/packages/clanker-sdk/src/config/clankerTokenV3.d.ts.map +1 -0
  358. package/dist/types/packages/clanker-sdk/src/config/clankerTokenV4.d.ts +136 -0
  359. package/dist/types/packages/clanker-sdk/src/config/clankerTokenV4.d.ts.map +1 -0
  360. package/dist/types/packages/clanker-sdk/src/config/clankerTokens.d.ts +12 -0
  361. package/dist/types/packages/clanker-sdk/src/config/clankerTokens.d.ts.map +1 -0
  362. package/dist/types/packages/clanker-sdk/src/constants.d.ts +29 -0
  363. package/dist/types/packages/clanker-sdk/src/constants.d.ts.map +1 -0
  364. package/dist/types/packages/clanker-sdk/src/deployment/deploy.d.ts +21 -0
  365. package/dist/types/packages/clanker-sdk/src/deployment/deploy.d.ts.map +1 -0
  366. package/dist/types/packages/clanker-sdk/src/extensions/DevBuyExtension.d.ts +52 -0
  367. package/dist/types/packages/clanker-sdk/src/extensions/DevBuyExtension.d.ts.map +1 -0
  368. package/dist/types/packages/clanker-sdk/src/extensions/IClankerExtension.d.ts +36 -0
  369. package/dist/types/packages/clanker-sdk/src/extensions/IClankerExtension.d.ts.map +1 -0
  370. package/dist/types/packages/clanker-sdk/src/extensions/VaultExtension.d.ts +17 -0
  371. package/dist/types/packages/clanker-sdk/src/extensions/VaultExtension.d.ts.map +1 -0
  372. package/dist/types/packages/clanker-sdk/src/extensions/index.d.ts +4 -0
  373. package/dist/types/packages/clanker-sdk/src/extensions/index.d.ts.map +1 -0
  374. package/dist/types/packages/clanker-sdk/src/index.d.ts +8 -0
  375. package/dist/types/packages/clanker-sdk/src/index.d.ts.map +1 -0
  376. package/dist/types/packages/clanker-sdk/src/services/vanityAddress.d.ts +15 -0
  377. package/dist/types/packages/clanker-sdk/src/services/vanityAddress.d.ts.map +1 -0
  378. package/dist/types/packages/clanker-sdk/src/utils/clanker-contracts.d.ts +16 -0
  379. package/dist/types/packages/clanker-sdk/src/utils/clanker-contracts.d.ts.map +1 -0
  380. package/dist/types/packages/clanker-sdk/src/utils/clankers.d.ts +9506 -0
  381. package/dist/types/packages/clanker-sdk/src/utils/clankers.d.ts.map +1 -0
  382. package/dist/types/packages/clanker-sdk/src/utils/errors.d.ts +16 -0
  383. package/dist/types/packages/clanker-sdk/src/utils/errors.d.ts.map +1 -0
  384. package/dist/types/packages/clanker-sdk/src/utils/market-cap.d.ts +12 -0
  385. package/dist/types/packages/clanker-sdk/src/utils/market-cap.d.ts.map +1 -0
  386. package/dist/types/packages/clanker-sdk/src/utils/merkleTree.d.ts +19 -0
  387. package/dist/types/packages/clanker-sdk/src/utils/merkleTree.d.ts.map +1 -0
  388. package/dist/types/packages/clanker-sdk/src/utils/meta.d.ts +7 -0
  389. package/dist/types/packages/clanker-sdk/src/utils/meta.d.ts.map +1 -0
  390. package/dist/types/packages/clanker-sdk/src/utils/write-clanker-contracts.d.ts +57 -0
  391. package/dist/types/packages/clanker-sdk/src/utils/write-clanker-contracts.d.ts.map +1 -0
  392. package/dist/types/packages/clanker-sdk/src/utils/zod-onchain.d.ts +29 -0
  393. package/dist/types/packages/clanker-sdk/src/utils/zod-onchain.d.ts.map +1 -0
  394. package/dist/types/packages/clanker-sdk/src/v3/index.d.ts +3167 -0
  395. package/dist/types/packages/clanker-sdk/src/v3/index.d.ts.map +1 -0
  396. package/dist/types/packages/clanker-sdk/src/v4/extensions/airdrop.d.ts +108 -0
  397. package/dist/types/packages/clanker-sdk/src/v4/extensions/airdrop.d.ts.map +1 -0
  398. package/dist/types/packages/clanker-sdk/src/v4/extensions/index.d.ts +2 -0
  399. package/dist/types/packages/clanker-sdk/src/v4/extensions/index.d.ts.map +1 -0
  400. package/dist/types/packages/clanker-sdk/src/v4/index.d.ts +3781 -0
  401. package/dist/types/packages/clanker-sdk/src/v4/index.d.ts.map +1 -0
  402. package/dist/types/{abis → src/abis}/ClankerAirdropV2.d.ts +1 -0
  403. package/dist/types/src/abis/ClankerAirdropV2.d.ts.map +1 -0
  404. package/dist/types/{abis → src/abis}/ClankerVault.d.ts +1 -0
  405. package/dist/types/src/abis/ClankerVault.d.ts.map +1 -0
  406. package/dist/types/{abis → src/abis}/IClankerAirdrop.d.ts +1 -0
  407. package/dist/types/src/abis/IClankerAirdrop.d.ts.map +1 -0
  408. package/dist/types/{abis → src/abis}/IClankerFeeLocker.d.ts +1 -0
  409. package/dist/types/src/abis/IClankerFeeLocker.d.ts.map +1 -0
  410. package/dist/types/{abis → src/abis}/IClankerHookDynamicFee.d.ts +1 -0
  411. package/dist/types/src/abis/IClankerHookDynamicFee.d.ts.map +1 -0
  412. package/dist/types/{abis → src/abis}/IClankerHookStaticFee.d.ts +1 -0
  413. package/dist/types/src/abis/IClankerHookStaticFee.d.ts.map +1 -0
  414. package/dist/types/{abis → src/abis}/IClankerLPLocker.d.ts +1 -0
  415. package/dist/types/src/abis/IClankerLPLocker.d.ts.map +1 -0
  416. package/dist/types/{abis → src/abis}/IClankerLpLockerFeeConversion.d.ts +1 -0
  417. package/dist/types/src/abis/IClankerLpLockerFeeConversion.d.ts.map +1 -0
  418. package/dist/types/{abis → src/abis}/IClankerLpLockerMultiple.d.ts +1 -0
  419. package/dist/types/src/abis/IClankerLpLockerMultiple.d.ts.map +1 -0
  420. package/dist/types/{abis → src/abis}/IClankerToken.d.ts +1 -0
  421. package/dist/types/src/abis/IClankerToken.d.ts.map +1 -0
  422. package/dist/types/{abis → src/abis}/LevrDeployer_v1.d.ts +1 -0
  423. package/dist/types/src/abis/LevrDeployer_v1.d.ts.map +1 -0
  424. package/dist/types/{abis → src/abis}/LevrFactory_v1.d.ts +1 -0
  425. package/dist/types/src/abis/LevrFactory_v1.d.ts.map +1 -0
  426. package/dist/types/{abis → src/abis}/LevrFeeSplitterFactory_v1.d.ts +1 -0
  427. package/dist/types/src/abis/LevrFeeSplitterFactory_v1.d.ts.map +1 -0
  428. package/dist/types/{abis → src/abis}/LevrFeeSplitter_v1.d.ts +1 -0
  429. package/dist/types/src/abis/LevrFeeSplitter_v1.d.ts.map +1 -0
  430. package/dist/types/{abis → src/abis}/LevrForwarder_v1.d.ts +1 -0
  431. package/dist/types/src/abis/LevrForwarder_v1.d.ts.map +1 -0
  432. package/dist/types/{abis → src/abis}/LevrGovernor_v1.d.ts +1 -0
  433. package/dist/types/src/abis/LevrGovernor_v1.d.ts.map +1 -0
  434. package/dist/types/{abis → src/abis}/LevrStakedToken_v1.d.ts +1 -0
  435. package/dist/types/src/abis/LevrStakedToken_v1.d.ts.map +1 -0
  436. package/dist/types/{abis → src/abis}/LevrStaking_v1.d.ts +1 -0
  437. package/dist/types/src/abis/LevrStaking_v1.d.ts.map +1 -0
  438. package/dist/types/{abis → src/abis}/LevrTreasury_v1.d.ts +1 -0
  439. package/dist/types/src/abis/LevrTreasury_v1.d.ts.map +1 -0
  440. package/dist/types/{abis → src/abis}/Permit2.d.ts +1 -0
  441. package/dist/types/src/abis/Permit2.d.ts.map +1 -0
  442. package/dist/types/{abis → src/abis}/StateView.d.ts +1 -0
  443. package/dist/types/src/abis/StateView.d.ts.map +1 -0
  444. package/dist/types/src/abis/V3Pool.d.ts +50 -0
  445. package/dist/types/src/abis/V3Pool.d.ts.map +1 -0
  446. package/dist/types/{abis → src/abis}/V3QuoterV2.d.ts +1 -0
  447. package/dist/types/src/abis/V3QuoterV2.d.ts.map +1 -0
  448. package/dist/types/{abis → src/abis}/V4Quoter.d.ts +1 -0
  449. package/dist/types/src/abis/V4Quoter.d.ts.map +1 -0
  450. package/dist/types/{abis → src/abis}/WETH9.d.ts +1 -0
  451. package/dist/types/src/abis/WETH9.d.ts.map +1 -0
  452. package/dist/types/{abis → src/abis}/index.d.ts +3 -1
  453. package/dist/types/src/abis/index.d.ts.map +1 -0
  454. package/dist/types/src/airdrop.d.ts.map +1 -0
  455. package/dist/types/src/balance.d.ts.map +1 -0
  456. package/dist/types/{build-calldatas-v4.d.ts → src/build-calldatas-v4.d.ts} +0 -1
  457. package/dist/types/src/build-calldatas-v4.d.ts.map +1 -0
  458. package/dist/types/src/build-clanker-v4.d.ts.map +1 -0
  459. package/dist/types/{client → src/client}/hook/index.d.ts +7 -5
  460. package/dist/types/src/client/hook/index.d.ts.map +1 -0
  461. package/dist/types/src/client/hook/use-airdrop.d.ts.map +1 -0
  462. package/dist/types/src/client/hook/use-clanker.d.ts.map +1 -0
  463. package/dist/types/src/client/hook/use-configure-splits.d.ts.map +1 -0
  464. package/dist/types/{client → src/client}/hook/use-deploy.d.ts +3 -1
  465. package/dist/types/src/client/hook/use-deploy.d.ts.map +1 -0
  466. package/dist/types/{client → src/client}/hook/use-factory.d.ts +2 -2
  467. package/dist/types/src/client/hook/use-factory.d.ts.map +1 -0
  468. package/dist/types/src/client/hook/use-fee-receivers.d.ts.map +1 -0
  469. package/dist/types/src/client/hook/use-governance.d.ts.map +1 -0
  470. package/dist/types/src/client/hook/use-metrics.d.ts +16 -0
  471. package/dist/types/src/client/hook/use-metrics.d.ts.map +1 -0
  472. package/dist/types/src/client/hook/use-prepare.d.ts.map +1 -0
  473. package/dist/types/{client → src/client}/hook/use-project.d.ts +22 -6
  474. package/dist/types/src/client/hook/use-project.d.ts.map +1 -0
  475. package/dist/types/{client → src/client}/hook/use-proposal.d.ts +2 -2
  476. package/dist/types/src/client/hook/use-proposal.d.ts.map +1 -0
  477. package/dist/types/src/client/hook/use-register.d.ts.map +1 -0
  478. package/dist/types/src/client/hook/use-stake.d.ts.map +1 -0
  479. package/dist/types/src/client/hook/use-subscription.d.ts +33 -0
  480. package/dist/types/src/client/hook/use-subscription.d.ts.map +1 -0
  481. package/dist/types/src/client/hook/use-swap.d.ts.map +1 -0
  482. package/dist/types/src/client/hook/use-token-admin.d.ts +27 -0
  483. package/dist/types/src/client/hook/use-token-admin.d.ts.map +1 -0
  484. package/dist/types/src/client/hook/use-user.d.ts.map +1 -0
  485. package/dist/types/src/client/hook/use-vault.d.ts.map +1 -0
  486. package/dist/types/src/client/index.d.ts.map +1 -0
  487. package/dist/types/{client → src/client}/levr-provider.d.ts +1 -15
  488. package/dist/types/src/client/levr-provider.d.ts.map +1 -0
  489. package/dist/types/{client → src/client}/query-keys.d.ts +8 -5
  490. package/dist/types/src/client/query-keys.d.ts.map +1 -0
  491. package/dist/types/src/constants/chain.d.ts +121 -0
  492. package/dist/types/src/constants/chain.d.ts.map +1 -0
  493. package/dist/types/{constants → src/constants}/clanker.d.ts +1 -1
  494. package/dist/types/src/constants/clanker.d.ts.map +1 -0
  495. package/dist/types/src/constants/config.d.ts.map +1 -0
  496. package/dist/types/{constants → src/constants}/index.d.ts +1 -17
  497. package/dist/types/src/constants/index.d.ts.map +1 -0
  498. package/dist/types/{constants → src/constants}/levr.d.ts +5 -0
  499. package/dist/types/src/constants/levr.d.ts.map +1 -0
  500. package/dist/types/{constants → src/constants}/uniswap.d.ts +13 -0
  501. package/dist/types/src/constants/uniswap.d.ts.map +1 -0
  502. package/dist/types/src/deploy-v4.d.ts.map +1 -0
  503. package/dist/types/src/factory.d.ts +21 -0
  504. package/dist/types/src/factory.d.ts.map +1 -0
  505. package/dist/types/{fee-receivers.d.ts → src/fee-receivers.d.ts} +3 -3
  506. package/dist/types/src/fee-receivers.d.ts.map +1 -0
  507. package/dist/types/src/fee-splitter.d.ts.map +1 -0
  508. package/dist/types/src/governance.d.ts.map +1 -0
  509. package/dist/types/src/graphql/client.d.ts +12 -0
  510. package/dist/types/src/graphql/client.d.ts.map +1 -0
  511. package/dist/types/src/graphql/constants.d.ts +2 -0
  512. package/dist/types/src/graphql/constants.d.ts.map +1 -0
  513. package/dist/types/src/graphql/fields/factory.d.ts +22 -0
  514. package/dist/types/src/graphql/fields/factory.d.ts.map +1 -0
  515. package/dist/types/src/graphql/fields/index.d.ts +5 -0
  516. package/dist/types/src/graphql/fields/index.d.ts.map +1 -0
  517. package/dist/types/src/graphql/fields/metrics.d.ts +36 -0
  518. package/dist/types/src/graphql/fields/metrics.d.ts.map +1 -0
  519. package/dist/types/src/graphql/fields/project.d.ts +249 -0
  520. package/dist/types/src/graphql/fields/project.d.ts.map +1 -0
  521. package/dist/types/src/graphql/fields/proposal.d.ts +195 -0
  522. package/dist/types/src/graphql/fields/proposal.d.ts.map +1 -0
  523. package/dist/types/src/graphql/gen/index.d.ts +23 -0
  524. package/dist/types/src/graphql/gen/index.d.ts.map +1 -0
  525. package/dist/types/src/graphql/gen/runtime/batcher.d.ts +106 -0
  526. package/dist/types/src/graphql/gen/runtime/batcher.d.ts.map +1 -0
  527. package/dist/types/src/graphql/gen/runtime/createClient.d.ts +18 -0
  528. package/dist/types/src/graphql/gen/runtime/createClient.d.ts.map +1 -0
  529. package/dist/types/src/graphql/gen/runtime/error.d.ts +19 -0
  530. package/dist/types/src/graphql/gen/runtime/error.d.ts.map +1 -0
  531. package/dist/types/src/graphql/gen/runtime/fetcher.d.ts +11 -0
  532. package/dist/types/src/graphql/gen/runtime/fetcher.d.ts.map +1 -0
  533. package/dist/types/src/graphql/gen/runtime/generateGraphqlOperation.d.ts +31 -0
  534. package/dist/types/src/graphql/gen/runtime/generateGraphqlOperation.d.ts.map +1 -0
  535. package/dist/types/src/graphql/gen/runtime/index.d.ts +12 -0
  536. package/dist/types/src/graphql/gen/runtime/index.d.ts.map +1 -0
  537. package/dist/types/src/graphql/gen/runtime/linkTypeMap.d.ts +10 -0
  538. package/dist/types/src/graphql/gen/runtime/linkTypeMap.d.ts.map +1 -0
  539. package/dist/types/src/graphql/gen/runtime/typeSelection.d.ts +29 -0
  540. package/dist/types/src/graphql/gen/runtime/typeSelection.d.ts.map +1 -0
  541. package/dist/types/src/graphql/gen/runtime/types.d.ts +53 -0
  542. package/dist/types/src/graphql/gen/runtime/types.d.ts.map +1 -0
  543. package/dist/types/src/graphql/gen/schema.d.ts +6056 -0
  544. package/dist/types/src/graphql/gen/schema.d.ts.map +1 -0
  545. package/dist/types/src/graphql/gen/types.d.ts +3867 -0
  546. package/dist/types/src/graphql/gen/types.d.ts.map +1 -0
  547. package/dist/types/src/graphql/index.d.ts +19 -0
  548. package/dist/types/src/graphql/index.d.ts.map +1 -0
  549. package/dist/types/src/graphql/subscription-manager.d.ts +64 -0
  550. package/dist/types/src/graphql/subscription-manager.d.ts.map +1 -0
  551. package/dist/types/{index.d.ts → src/index.d.ts} +3 -1
  552. package/dist/types/src/index.d.ts.map +1 -0
  553. package/dist/types/src/ipfs-merkle-tree.d.ts.map +1 -0
  554. package/dist/types/src/pool-key.d.ts.map +1 -0
  555. package/dist/types/{project.d.ts → src/project.d.ts} +26 -18
  556. package/dist/types/src/project.d.ts.map +1 -0
  557. package/dist/types/src/proposal.d.ts +34 -0
  558. package/dist/types/src/proposal.d.ts.map +1 -0
  559. package/dist/types/src/quote/index.d.ts.map +1 -0
  560. package/dist/types/src/quote/v3.d.ts.map +1 -0
  561. package/dist/types/src/quote/v4.d.ts.map +1 -0
  562. package/dist/types/src/schema/base.schema.d.ts.map +1 -0
  563. package/dist/types/{schema → src/schema}/clanker.schema.d.ts +16 -4
  564. package/dist/types/src/schema/clanker.schema.d.ts.map +1 -0
  565. package/dist/types/src/schema/index.d.ts.map +1 -0
  566. package/dist/types/{schema → src/schema}/levr.schema.d.ts +3 -1
  567. package/dist/types/src/schema/levr.schema.d.ts.map +1 -0
  568. package/dist/types/{stake.d.ts → src/stake.d.ts} +8 -1
  569. package/dist/types/src/stake.d.ts.map +1 -0
  570. package/dist/types/src/swap-v4.d.ts.map +1 -0
  571. package/dist/types/src/token-admin.d.ts +40 -0
  572. package/dist/types/src/token-admin.d.ts.map +1 -0
  573. package/dist/types/{types.d.ts → src/types.d.ts} +1 -1
  574. package/dist/types/src/types.d.ts.map +1 -0
  575. package/dist/types/src/usd-price.d.ts +189 -0
  576. package/dist/types/src/usd-price.d.ts.map +1 -0
  577. package/dist/types/{user.d.ts → src/user.d.ts} +5 -5
  578. package/dist/types/src/user.d.ts.map +1 -0
  579. package/dist/types/{util.d.ts → src/util.d.ts} +7 -0
  580. package/dist/types/src/util.d.ts.map +1 -0
  581. package/dist/types/src/vault.d.ts.map +1 -0
  582. package/package.json +20 -8
  583. package/dist/esm/airdrop.js.map +0 -1
  584. package/dist/esm/balance.js.map +0 -1
  585. package/dist/esm/build-calldatas-v4.js.map +0 -1
  586. package/dist/esm/build-clanker-v4.js.map +0 -1
  587. package/dist/esm/client/hook/index.js.map +0 -1
  588. package/dist/esm/client/hook/use-airdrop.js.map +0 -1
  589. package/dist/esm/client/hook/use-clanker.js.map +0 -1
  590. package/dist/esm/client/hook/use-configure-splits.js.map +0 -1
  591. package/dist/esm/client/hook/use-deploy.js.map +0 -1
  592. package/dist/esm/client/hook/use-factory.js.map +0 -1
  593. package/dist/esm/client/hook/use-fee-receivers.js.map +0 -1
  594. package/dist/esm/client/hook/use-governance.js.map +0 -1
  595. package/dist/esm/client/hook/use-pool.js +0 -26
  596. package/dist/esm/client/hook/use-pool.js.map +0 -1
  597. package/dist/esm/client/hook/use-prepare.js.map +0 -1
  598. package/dist/esm/client/hook/use-project.js +0 -72
  599. package/dist/esm/client/hook/use-project.js.map +0 -1
  600. package/dist/esm/client/hook/use-proposal.js.map +0 -1
  601. package/dist/esm/client/hook/use-register.js.map +0 -1
  602. package/dist/esm/client/hook/use-stake.js.map +0 -1
  603. package/dist/esm/client/hook/use-swap.js.map +0 -1
  604. package/dist/esm/client/hook/use-user.js.map +0 -1
  605. package/dist/esm/client/hook/use-vault.js.map +0 -1
  606. package/dist/esm/client/index.js.map +0 -1
  607. package/dist/esm/client/levr-provider.js.map +0 -1
  608. package/dist/esm/client/query-keys.js.map +0 -1
  609. package/dist/esm/constants/clanker.js.map +0 -1
  610. package/dist/esm/constants/config.js.map +0 -1
  611. package/dist/esm/constants/index.js +0 -52
  612. package/dist/esm/constants/index.js.map +0 -1
  613. package/dist/esm/constants/levr.js.map +0 -1
  614. package/dist/esm/constants/uniswap.js.map +0 -1
  615. package/dist/esm/deploy-v4.js.map +0 -1
  616. package/dist/esm/factory.js +0 -171
  617. package/dist/esm/factory.js.map +0 -1
  618. package/dist/esm/fee-receivers.js.map +0 -1
  619. package/dist/esm/fee-splitter.js.map +0 -1
  620. package/dist/esm/governance.js.map +0 -1
  621. package/dist/esm/index.js.map +0 -1
  622. package/dist/esm/ipfs-merkle-tree.js.map +0 -1
  623. package/dist/esm/pool-key.js.map +0 -1
  624. package/dist/esm/pool.js +0 -70
  625. package/dist/esm/pool.js.map +0 -1
  626. package/dist/esm/project.js.map +0 -1
  627. package/dist/esm/proposal.js +0 -157
  628. package/dist/esm/proposal.js.map +0 -1
  629. package/dist/esm/quote/index.js.map +0 -1
  630. package/dist/esm/quote/v3.js.map +0 -1
  631. package/dist/esm/quote/v4.js.map +0 -1
  632. package/dist/esm/schema/base.schema.js.map +0 -1
  633. package/dist/esm/schema/clanker.schema.js.map +0 -1
  634. package/dist/esm/schema/index.js.map +0 -1
  635. package/dist/esm/schema/levr.schema.js.map +0 -1
  636. package/dist/esm/stake.js.map +0 -1
  637. package/dist/esm/swap-v4.js.map +0 -1
  638. package/dist/esm/usd-price.js +0 -166
  639. package/dist/esm/usd-price.js.map +0 -1
  640. package/dist/esm/user.js.map +0 -1
  641. package/dist/esm/util.js.map +0 -1
  642. package/dist/esm/vault.js.map +0 -1
  643. package/dist/types/airdrop.d.ts.map +0 -1
  644. package/dist/types/balance.d.ts.map +0 -1
  645. package/dist/types/build-calldatas-v4.d.ts.map +0 -1
  646. package/dist/types/build-clanker-v4.d.ts.map +0 -1
  647. package/dist/types/client/hook/index.d.ts.map +0 -1
  648. package/dist/types/client/hook/use-airdrop.d.ts.map +0 -1
  649. package/dist/types/client/hook/use-clanker.d.ts.map +0 -1
  650. package/dist/types/client/hook/use-configure-splits.d.ts.map +0 -1
  651. package/dist/types/client/hook/use-deploy.d.ts.map +0 -1
  652. package/dist/types/client/hook/use-factory.d.ts.map +0 -1
  653. package/dist/types/client/hook/use-fee-receivers.d.ts.map +0 -1
  654. package/dist/types/client/hook/use-governance.d.ts.map +0 -1
  655. package/dist/types/client/hook/use-pool.d.ts +0 -12
  656. package/dist/types/client/hook/use-pool.d.ts.map +0 -1
  657. package/dist/types/client/hook/use-prepare.d.ts.map +0 -1
  658. package/dist/types/client/hook/use-project.d.ts.map +0 -1
  659. package/dist/types/client/hook/use-proposal.d.ts.map +0 -1
  660. package/dist/types/client/hook/use-register.d.ts.map +0 -1
  661. package/dist/types/client/hook/use-stake.d.ts.map +0 -1
  662. package/dist/types/client/hook/use-swap.d.ts.map +0 -1
  663. package/dist/types/client/hook/use-user.d.ts.map +0 -1
  664. package/dist/types/client/hook/use-vault.d.ts.map +0 -1
  665. package/dist/types/client/index.d.ts.map +0 -1
  666. package/dist/types/client/levr-provider.d.ts.map +0 -1
  667. package/dist/types/client/query-keys.d.ts.map +0 -1
  668. package/dist/types/constants/clanker.d.ts.map +0 -1
  669. package/dist/types/constants/config.d.ts.map +0 -1
  670. package/dist/types/constants/index.d.ts.map +0 -1
  671. package/dist/types/constants/levr.d.ts.map +0 -1
  672. package/dist/types/constants/uniswap.d.ts.map +0 -1
  673. package/dist/types/deploy-v4.d.ts.map +0 -1
  674. package/dist/types/factory.d.ts +0 -38
  675. package/dist/types/factory.d.ts.map +0 -1
  676. package/dist/types/fee-receivers.d.ts.map +0 -1
  677. package/dist/types/fee-splitter.d.ts.map +0 -1
  678. package/dist/types/governance.d.ts.map +0 -1
  679. package/dist/types/index.d.ts.map +0 -1
  680. package/dist/types/ipfs-merkle-tree.d.ts.map +0 -1
  681. package/dist/types/pool-key.d.ts.map +0 -1
  682. package/dist/types/pool.d.ts +0 -590
  683. package/dist/types/pool.d.ts.map +0 -1
  684. package/dist/types/project.d.ts.map +0 -1
  685. package/dist/types/proposal.d.ts +0 -1493
  686. package/dist/types/proposal.d.ts.map +0 -1
  687. package/dist/types/quote/index.d.ts.map +0 -1
  688. package/dist/types/quote/v3.d.ts.map +0 -1
  689. package/dist/types/quote/v4.d.ts.map +0 -1
  690. package/dist/types/schema/base.schema.d.ts.map +0 -1
  691. package/dist/types/schema/clanker.schema.d.ts.map +0 -1
  692. package/dist/types/schema/index.d.ts.map +0 -1
  693. package/dist/types/schema/levr.schema.d.ts.map +0 -1
  694. package/dist/types/stake.d.ts.map +0 -1
  695. package/dist/types/swap-v4.d.ts.map +0 -1
  696. package/dist/types/types.d.ts.map +0 -1
  697. package/dist/types/usd-price.d.ts +0 -146
  698. package/dist/types/usd-price.d.ts.map +0 -1
  699. package/dist/types/user.d.ts.map +0 -1
  700. package/dist/types/util.d.ts.map +0 -1
  701. package/dist/types/vault.d.ts.map +0 -1
  702. /package/dist/esm/{airdrop.js → src/airdrop.js} +0 -0
  703. /package/dist/esm/{client → src/client}/hook/use-airdrop.js +0 -0
  704. /package/dist/esm/{client → src/client}/hook/use-configure-splits.js +0 -0
  705. /package/dist/esm/{client → src/client}/hook/use-deploy.js +0 -0
  706. /package/dist/esm/{client → src/client}/hook/use-fee-receivers.js +0 -0
  707. /package/dist/esm/{client → src/client}/hook/use-governance.js +0 -0
  708. /package/dist/esm/{client → src/client}/hook/use-prepare.js +0 -0
  709. /package/dist/esm/{client → src/client}/hook/use-register.js +0 -0
  710. /package/dist/esm/{client → src/client}/hook/use-user.js +0 -0
  711. /package/dist/esm/{client → src/client}/hook/use-vault.js +0 -0
  712. /package/dist/esm/{client → src/client}/index.js +0 -0
  713. /package/dist/esm/{constants → src/constants}/config.js +0 -0
  714. /package/dist/esm/{fee-splitter.js → src/fee-splitter.js} +0 -0
  715. /package/dist/esm/{governance.js → src/governance.js} +0 -0
  716. /package/dist/esm/{ipfs-merkle-tree.js → src/ipfs-merkle-tree.js} +0 -0
  717. /package/dist/esm/{pool-key.js → src/pool-key.js} +0 -0
  718. /package/dist/esm/{quote → src/quote}/index.js +0 -0
  719. /package/dist/esm/{quote → src/quote}/v3.js +0 -0
  720. /package/dist/esm/{quote → src/quote}/v4.js +0 -0
  721. /package/dist/esm/{schema → src/schema}/base.schema.js +0 -0
  722. /package/dist/esm/{schema → src/schema}/index.js +0 -0
  723. /package/dist/esm/{types.js → src/types.js} +0 -0
  724. /package/dist/esm/{vault.js → src/vault.js} +0 -0
  725. /package/dist/types/{airdrop.d.ts → src/airdrop.d.ts} +0 -0
  726. /package/dist/types/{balance.d.ts → src/balance.d.ts} +0 -0
  727. /package/dist/types/{build-clanker-v4.d.ts → src/build-clanker-v4.d.ts} +0 -0
  728. /package/dist/types/{client → src/client}/hook/use-airdrop.d.ts +0 -0
  729. /package/dist/types/{client → src/client}/hook/use-clanker.d.ts +0 -0
  730. /package/dist/types/{client → src/client}/hook/use-configure-splits.d.ts +0 -0
  731. /package/dist/types/{client → src/client}/hook/use-fee-receivers.d.ts +0 -0
  732. /package/dist/types/{client → src/client}/hook/use-governance.d.ts +0 -0
  733. /package/dist/types/{client → src/client}/hook/use-prepare.d.ts +0 -0
  734. /package/dist/types/{client → src/client}/hook/use-register.d.ts +0 -0
  735. /package/dist/types/{client → src/client}/hook/use-stake.d.ts +0 -0
  736. /package/dist/types/{client → src/client}/hook/use-swap.d.ts +0 -0
  737. /package/dist/types/{client → src/client}/hook/use-user.d.ts +0 -0
  738. /package/dist/types/{client → src/client}/hook/use-vault.d.ts +0 -0
  739. /package/dist/types/{client → src/client}/index.d.ts +0 -0
  740. /package/dist/types/{constants → src/constants}/config.d.ts +0 -0
  741. /package/dist/types/{deploy-v4.d.ts → src/deploy-v4.d.ts} +0 -0
  742. /package/dist/types/{fee-splitter.d.ts → src/fee-splitter.d.ts} +0 -0
  743. /package/dist/types/{governance.d.ts → src/governance.d.ts} +0 -0
  744. /package/dist/types/{ipfs-merkle-tree.d.ts → src/ipfs-merkle-tree.d.ts} +0 -0
  745. /package/dist/types/{pool-key.d.ts → src/pool-key.d.ts} +0 -0
  746. /package/dist/types/{quote → src/quote}/index.d.ts +0 -0
  747. /package/dist/types/{quote → src/quote}/v3.d.ts +0 -0
  748. /package/dist/types/{quote → src/quote}/v4.d.ts +0 -0
  749. /package/dist/types/{schema → src/schema}/base.schema.d.ts +0 -0
  750. /package/dist/types/{schema → src/schema}/index.d.ts +0 -0
  751. /package/dist/types/{swap-v4.d.ts → src/swap-v4.d.ts} +0 -0
  752. /package/dist/types/{vault.d.ts → src/vault.d.ts} +0 -0
@@ -1,10 +1,13 @@
1
1
  import { erc20Abi, zeroAddress } from "viem";
2
- import { IClankerFeeLocker, IClankerLpLockerFeeConversion, IClankerToken, LevrFactory_v1, LevrGovernor_v1, LevrStaking_v1, } from "./abis/index.js";
2
+ import { IClankerFeeLocker, IClankerLpLockerFeeConversion, LevrFactory_v1, LevrStaking_v1, } from "./abis/index.js";
3
3
  import { formatBalanceWithUsd } from "./balance.js";
4
4
  import { GET_FACTORY_ADDRESS, GET_FEE_LOCKER_ADDRESS, GET_LP_LOCKER_ADDRESS, WETH, } from "./constants/index.js";
5
5
  import { getFeeReceiverContracts, getFeeSplitterDynamicContracts, getFeeSplitterStaticContracts, parseFeeReceivers, parseFeeSplitterDynamic, parseFeeSplitterStatic, } from "./fee-receivers.js";
6
6
  import { getFeeSplitter } from "./fee-splitter.js";
7
- import { getUsdPrice, getWethUsdPrice } from "./usd-price.js";
7
+ import { query } from "./graphql/index.js";
8
+ import { getLevrProjectByIdFields } from "./graphql/fields/project.js";
9
+ import { getPairedTokenUsdPrice, getUsdPrice } from "./usd-price.js";
10
+ import { isWETH } from "./util.js";
8
11
  async function fetchFeePreferences({ publicClient, chainId, clankerToken, slotCount, }) {
9
12
  if (!slotCount)
10
13
  return undefined;
@@ -35,52 +38,71 @@ async function fetchFeePreferences({ publicClient, chainId, clankerToken, slotCo
35
38
  }
36
39
  }
37
40
  // ---
38
- // Contract Getters
39
- function getTokenContracts(clankerToken) {
40
- return [
41
- {
42
- address: clankerToken,
43
- abi: erc20Abi,
44
- functionName: "decimals",
45
- },
46
- {
47
- address: clankerToken,
48
- abi: erc20Abi,
49
- functionName: "name",
50
- },
51
- {
52
- address: clankerToken,
53
- abi: erc20Abi,
54
- functionName: "symbol",
55
- },
56
- {
57
- address: clankerToken,
58
- abi: erc20Abi,
59
- functionName: "totalSupply",
60
- },
61
- {
62
- address: clankerToken,
63
- abi: IClankerToken,
64
- functionName: "allData",
65
- },
66
- ];
41
+ // Paired Token Resolution
42
+ /**
43
+ * Resolves paired token info from pool key and indexed data.
44
+ * Handles WETH/WBNB detection and fallback symbol resolution.
45
+ */
46
+ function resolvePairedToken(poolKey, clankerToken, clankerSymbol, v4Pool, chainId) {
47
+ // Get paired token address from pool key (case-insensitive)
48
+ const isCurrency0Clanker = poolKey.currency0.toLowerCase() === clankerToken.toLowerCase();
49
+ const pairedTokenAddress = isCurrency0Clanker ? poolKey.currency1 : poolKey.currency0;
50
+ // Check if paired token is native (WETH/WBNB)
51
+ const wethInfo = WETH(chainId);
52
+ const isNativeByAddress = isWETH(pairedTokenAddress, chainId);
53
+ // Find paired token from indexed v4Pool data
54
+ const indexedPairedToken = findIndexedPairedToken(v4Pool, pairedTokenAddress);
55
+ // Also check if native by symbol (fallback when address doesn't match)
56
+ const isNativeBySymbol = wethInfo && indexedPairedToken?.symbol === wethInfo.symbol;
57
+ // Return native token info if WETH/WBNB
58
+ if ((isNativeByAddress || isNativeBySymbol) && wethInfo) {
59
+ return {
60
+ address: wethInfo.address,
61
+ symbol: wethInfo.symbol,
62
+ decimals: wethInfo.decimals,
63
+ isNative: true,
64
+ };
65
+ }
66
+ // Return non-native paired token info
67
+ const symbol = resolveSymbol(indexedPairedToken?.symbol);
68
+ return {
69
+ address: pairedTokenAddress,
70
+ symbol,
71
+ decimals: indexedPairedToken?.decimals ?? 18,
72
+ isNative: false,
73
+ };
67
74
  }
68
- function getFactoryContracts(factoryAddress, clankerToken) {
69
- return [
70
- {
71
- address: factoryAddress,
72
- abi: LevrFactory_v1,
73
- functionName: "getProject",
74
- args: [clankerToken],
75
- },
76
- {
77
- address: factoryAddress,
78
- abi: LevrFactory_v1,
79
- functionName: "trustedForwarder",
80
- },
81
- ];
75
+ /**
76
+ * Finds the paired token from indexed v4Pool data by address matching.
77
+ */
78
+ function findIndexedPairedToken(v4Pool, pairedTokenAddress) {
79
+ if (!v4Pool)
80
+ return null;
81
+ const { token0, token1 } = v4Pool;
82
+ const targetAddress = pairedTokenAddress.toLowerCase();
83
+ // Match by address
84
+ if (token0?.address?.toLowerCase() === targetAddress)
85
+ return token0;
86
+ if (token1?.address?.toLowerCase() === targetAddress)
87
+ return token1;
88
+ return null;
82
89
  }
83
- function getTreasuryContracts(clankerToken, treasury, staking, wethAddress) {
90
+ /**
91
+ * Resolves symbol for paired token.
92
+ * Returns the symbol if available, otherwise falls back to 'PAIRED'.
93
+ *
94
+ * Note: We no longer check against clankerSymbol because tokens can legitimately
95
+ * have the same symbol (e.g., a clanker named "U" paired with U stablecoin).
96
+ * Address matching in findIndexedPairedToken ensures we get the correct token.
97
+ */
98
+ function resolveSymbol(symbol) {
99
+ if (symbol)
100
+ return symbol;
101
+ return "PAIRED";
102
+ }
103
+ // ---
104
+ // Contract Getters
105
+ function getTreasuryContracts(clankerToken, treasury, staking, pairedTokenAddress) {
84
106
  const contracts = [
85
107
  {
86
108
  address: clankerToken,
@@ -101,9 +123,9 @@ function getTreasuryContracts(clankerToken, treasury, staking, wethAddress) {
101
123
  args: [clankerToken],
102
124
  },
103
125
  ];
104
- if (wethAddress) {
126
+ if (pairedTokenAddress) {
105
127
  contracts.push({
106
- address: wethAddress,
128
+ address: pairedTokenAddress,
107
129
  abi: erc20Abi,
108
130
  functionName: "balanceOf",
109
131
  args: [staking],
@@ -111,28 +133,7 @@ function getTreasuryContracts(clankerToken, treasury, staking, wethAddress) {
111
133
  }
112
134
  return contracts;
113
135
  }
114
- function getGovernanceContracts(governor) {
115
- return [
116
- {
117
- address: governor,
118
- abi: LevrGovernor_v1,
119
- functionName: "currentCycleId",
120
- },
121
- {
122
- address: governor,
123
- abi: LevrGovernor_v1,
124
- functionName: "activeProposalCount",
125
- args: [0], // boost type
126
- },
127
- {
128
- address: governor,
129
- abi: LevrGovernor_v1,
130
- functionName: "activeProposalCount",
131
- args: [1], // transfer type
132
- },
133
- ];
134
- }
135
- function getStakingContracts(staking, clankerToken, wethAddress) {
136
+ function getStakingContracts(staking, clankerToken, pairedTokenAddress) {
136
137
  const baseContracts = [
137
138
  {
138
139
  address: staking,
@@ -163,31 +164,31 @@ function getStakingContracts(staking, clankerToken, wethAddress) {
163
164
  args: [clankerToken],
164
165
  },
165
166
  ];
166
- const wethContracts = wethAddress
167
+ const pairedContracts = pairedTokenAddress
167
168
  ? [
168
169
  {
169
170
  address: staking,
170
171
  abi: LevrStaking_v1,
171
172
  functionName: "outstandingRewards",
172
- args: [wethAddress],
173
+ args: [pairedTokenAddress],
173
174
  },
174
175
  {
175
176
  address: staking,
176
177
  abi: LevrStaking_v1,
177
178
  functionName: "rewardRatePerSecond",
178
- args: [wethAddress],
179
+ args: [pairedTokenAddress],
179
180
  },
180
181
  {
181
182
  address: staking,
182
183
  abi: LevrStaking_v1,
183
184
  functionName: "getTokenStreamInfo",
184
- args: [wethAddress],
185
+ args: [pairedTokenAddress],
185
186
  },
186
187
  ]
187
188
  : [];
188
- return [...baseContracts, ...wethContracts];
189
+ return [...baseContracts, ...pairedContracts];
189
190
  }
190
- function getPendingFeesContracts(feeLockerAddress, feeRecipient, clankerToken, wethAddress) {
191
+ function getPendingFeesContracts(feeLockerAddress, feeRecipient, clankerToken, pairedTokenAddress) {
191
192
  const baseContracts = [
192
193
  {
193
194
  address: feeLockerAddress,
@@ -196,64 +197,26 @@ function getPendingFeesContracts(feeLockerAddress, feeRecipient, clankerToken, w
196
197
  args: [feeRecipient, clankerToken],
197
198
  },
198
199
  ];
199
- const wethContracts = wethAddress
200
+ const pairedContracts = pairedTokenAddress
200
201
  ? [
201
202
  {
202
203
  address: feeLockerAddress,
203
204
  abi: IClankerFeeLocker,
204
205
  functionName: "availableFees",
205
- args: [feeRecipient, wethAddress],
206
+ args: [feeRecipient, pairedTokenAddress],
206
207
  },
207
208
  ]
208
209
  : [];
209
- return [...baseContracts, ...wethContracts];
210
+ return [...baseContracts, ...pairedContracts];
210
211
  }
211
212
  // ---
212
213
  // Parsers
213
- function parseTokenData(results, clankerToken) {
214
- const [decimals, name, symbol, totalSupply, allData] = results;
215
- // Extract allData fields: [originalAdmin, admin, image, metadata, context]
216
- const [originalAdmin, admin, image, metadata, context] = allData.result;
217
- // Parse metadata JSON
218
- let parsedMetadata = null;
219
- if (metadata && typeof metadata === "string") {
220
- try {
221
- parsedMetadata = JSON.parse(metadata);
222
- }
223
- catch {
224
- // If parsing fails, leave as null
225
- }
226
- }
227
- return {
228
- address: clankerToken,
229
- decimals: decimals.result,
230
- name: name.result,
231
- symbol: symbol.result,
232
- totalSupply: totalSupply.result,
233
- metadata: parsedMetadata,
234
- imageUrl: image || undefined,
235
- originalAdmin,
236
- admin,
237
- context,
238
- };
239
- }
240
- function parseFactoryData(results) {
241
- const [projectContracts, forwarder] = results;
242
- const { treasury, governor, staking, stakedToken } = projectContracts.result;
243
- return {
244
- treasury,
245
- governor,
246
- staking,
247
- stakedToken,
248
- forwarder: forwarder.result,
249
- };
250
- }
251
- function parseTreasuryStats(results, tokenDecimals, totalSupply, tokenUsdPrice, wethUsdPrice) {
252
- const [treasuryBalance, stakingBalance, escrowBalance, stakingWethBalance] = results;
214
+ function parseTreasuryStats(results, tokenDecimals, totalSupply, tokenUsdPrice, pairedTokenUsdPrice, pairedTokenDecimals = 18) {
215
+ const [treasuryBalance, stakingBalance, escrowBalance, stakingPairedBalance] = results;
253
216
  const treasuryBalanceRaw = treasuryBalance.result;
254
217
  const stakingBalanceRaw = stakingBalance.result;
255
218
  const escrowBalanceRaw = escrowBalance.result;
256
- const stakingWethBalanceRaw = stakingWethBalance ? stakingWethBalance.result : null;
219
+ const stakingPairedBalanceRaw = stakingPairedBalance ? stakingPairedBalance.result : null;
257
220
  // Total allocated = treasury + staking balances (protocol-controlled tokens)
258
221
  const totalAllocatedRaw = treasuryBalanceRaw + stakingBalanceRaw;
259
222
  // Utilization = (total allocated / total supply) * 100
@@ -265,22 +228,12 @@ function parseTreasuryStats(results, tokenDecimals, totalSupply, tokenUsdPrice,
265
228
  utilization,
266
229
  stakingContractBalance: formatBalanceWithUsd(stakingBalanceRaw, tokenDecimals, tokenUsdPrice),
267
230
  escrowBalance: formatBalanceWithUsd(escrowBalanceRaw, tokenDecimals, tokenUsdPrice),
268
- stakingContractWethBalance: stakingWethBalanceRaw
269
- ? formatBalanceWithUsd(stakingWethBalanceRaw, 18, wethUsdPrice ?? null)
231
+ stakingContractPairedBalance: stakingPairedBalanceRaw
232
+ ? formatBalanceWithUsd(stakingPairedBalanceRaw, pairedTokenDecimals, pairedTokenUsdPrice ?? null)
270
233
  : undefined,
271
234
  };
272
235
  }
273
- function parseGovernanceData(results) {
274
- const [currentCycleId, boostCount, transferCount] = results;
275
- return {
276
- currentCycleId: currentCycleId.result === 0n ? 1n : currentCycleId.result,
277
- activeProposalCount: {
278
- boost: boostCount.result,
279
- transfer: transferCount.result,
280
- },
281
- };
282
- }
283
- function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdPrice, wethUsdPrice, blockTimestamp, pricing, feeSplitterPending) {
236
+ function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdPrice, pairedTokenUsdPrice, pairedTokenDecimals = 18, blockTimestamp, pricing, feeSplitterPending) {
284
237
  const totalStakedRaw = results[0].result;
285
238
  const aprBpsRaw = results[1].result;
286
239
  const outstandingRewardsTokenAvailable = results[2].result; // Now returns only available
@@ -289,73 +242,74 @@ function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdP
289
242
  const streamInfoRaw = results[4].result;
290
243
  const tokenStreamStartRaw = streamInfoRaw[0];
291
244
  const tokenStreamEndRaw = streamInfoRaw[1];
292
- // Check if WETH data is present
293
- const hasWethData = results.length > 5;
294
- const outstandingRewardsWethAvailable = hasWethData && results[5] ? results[5].result : null;
295
- const wethRewardRateRaw = hasWethData && results[6] ? results[6].result : null;
245
+ // Check if pairedToken data is present
246
+ const hasPairedTokenData = results.length > 5;
247
+ const outstandingRewardsPairedAvailable = hasPairedTokenData && results[5] ? results[5].result : null;
248
+ const pairedTokenRewardRateRaw = hasPairedTokenData && results[6] ? results[6].result : null;
296
249
  // Check if token stream is currently active
297
250
  const isTokenStreamActive = tokenStreamStartRaw <= blockTimestamp && blockTimestamp <= tokenStreamEndRaw;
298
- // Check if WETH stream is active (if available) and get longest active stream window
299
- let isWethStreamActive = false;
300
- let wethStreamStartRaw = 0n;
301
- let wethStreamEndRaw = 0n;
302
- if (hasWethData && results[7]) {
303
- const wethStreamInfoRaw = results[7].result;
304
- wethStreamStartRaw = wethStreamInfoRaw[0];
305
- wethStreamEndRaw = wethStreamInfoRaw[1];
306
- isWethStreamActive = wethStreamStartRaw <= blockTimestamp && blockTimestamp <= wethStreamEndRaw;
251
+ // Check if pairedToken stream is active (if available) and get longest active stream window
252
+ let isPairedTokenStreamActive = false;
253
+ let pairedTokenStreamStartRaw = 0n;
254
+ let pairedTokenStreamEndRaw = 0n;
255
+ if (hasPairedTokenData && results[7]) {
256
+ const pairedTokenStreamInfoRaw = results[7].result;
257
+ pairedTokenStreamStartRaw = pairedTokenStreamInfoRaw[0];
258
+ pairedTokenStreamEndRaw = pairedTokenStreamInfoRaw[1];
259
+ isPairedTokenStreamActive =
260
+ pairedTokenStreamStartRaw <= blockTimestamp && blockTimestamp <= pairedTokenStreamEndRaw;
307
261
  }
308
- // Stream is active if either token or WETH reward stream is active
309
- const isStreamActive = isTokenStreamActive || isWethStreamActive;
262
+ // Stream is active if either token or pairedToken reward stream is active
263
+ const isStreamActive = isTokenStreamActive || isPairedTokenStreamActive;
310
264
  // Determine which stream window to display
311
265
  let displayStreamStartRaw = tokenStreamStartRaw;
312
266
  let displayStreamEndRaw = tokenStreamEndRaw;
313
267
  const tokenStreamDuration = tokenStreamEndRaw > tokenStreamStartRaw ? tokenStreamEndRaw - tokenStreamStartRaw : 0n;
314
- const wethStreamDuration = wethStreamStartRaw > 0n && wethStreamEndRaw > wethStreamStartRaw
315
- ? wethStreamEndRaw - wethStreamStartRaw
268
+ const pairedTokenStreamDuration = pairedTokenStreamStartRaw > 0n && pairedTokenStreamEndRaw > pairedTokenStreamStartRaw
269
+ ? pairedTokenStreamEndRaw - pairedTokenStreamStartRaw
316
270
  : 0n;
317
- if (isTokenStreamActive && isWethStreamActive) {
271
+ if (isTokenStreamActive && isPairedTokenStreamActive) {
318
272
  // When both streams are active, display the one that ends last
319
273
  displayStreamStartRaw =
320
- wethStreamEndRaw > tokenStreamEndRaw ? wethStreamStartRaw : tokenStreamStartRaw;
274
+ pairedTokenStreamEndRaw > tokenStreamEndRaw ? pairedTokenStreamStartRaw : tokenStreamStartRaw;
321
275
  displayStreamEndRaw =
322
- wethStreamEndRaw > tokenStreamEndRaw ? wethStreamEndRaw : tokenStreamEndRaw;
276
+ pairedTokenStreamEndRaw > tokenStreamEndRaw ? pairedTokenStreamEndRaw : tokenStreamEndRaw;
323
277
  }
324
278
  else if (isTokenStreamActive) {
325
279
  displayStreamStartRaw = tokenStreamStartRaw;
326
280
  displayStreamEndRaw = tokenStreamEndRaw;
327
281
  }
328
- else if (isWethStreamActive) {
329
- displayStreamStartRaw = wethStreamStartRaw;
330
- displayStreamEndRaw = wethStreamEndRaw;
282
+ else if (isPairedTokenStreamActive) {
283
+ displayStreamStartRaw = pairedTokenStreamStartRaw;
284
+ displayStreamEndRaw = pairedTokenStreamEndRaw;
331
285
  }
332
- else if (wethStreamDuration > tokenStreamDuration) {
286
+ else if (pairedTokenStreamDuration > tokenStreamDuration) {
333
287
  // No active streams: keep prior behaviour of showing the longer window
334
- displayStreamStartRaw = wethStreamStartRaw;
335
- displayStreamEndRaw = wethStreamEndRaw;
288
+ displayStreamStartRaw = pairedTokenStreamStartRaw;
289
+ displayStreamEndRaw = pairedTokenStreamEndRaw;
336
290
  }
337
291
  // Get pending fees from ClankerFeeLocker (staking recipient)
338
292
  const stakingPendingToken = pendingFeesResults?.[0]?.result ?? 0n;
339
- const stakingPendingWeth = pendingFeesResults?.[1]?.result ?? 0n;
340
- // Calculate WETH APR if available
341
- let wethApr = null;
342
- if (wethRewardRateRaw !== null &&
343
- wethRewardRateRaw !== undefined &&
293
+ const stakingPendingPaired = pendingFeesResults?.[1]?.result ?? 0n;
294
+ // Calculate pairedToken APR if available
295
+ let pairedTokenApr = null;
296
+ if (pairedTokenRewardRateRaw !== null &&
297
+ pairedTokenRewardRateRaw !== undefined &&
344
298
  pricing &&
345
299
  totalStakedRaw > 0n) {
346
- const wethUsd = parseFloat(pricing.wethUsd);
300
+ const pairedTokenUsd = parseFloat(pricing.pairedTokenUsd);
347
301
  const tokenUsd = parseFloat(pricing.tokenUsd);
348
302
  if (tokenUsd > 0) {
349
- const wethPriceInTokens = wethUsd / tokenUsd;
303
+ const pairedTokenPriceInTokens = pairedTokenUsd / tokenUsd;
350
304
  const secondsPerYear = BigInt(365 * 24 * 60 * 60);
351
- const annualWethRewards = wethRewardRateRaw * secondsPerYear;
305
+ const annualPairedRewards = pairedTokenRewardRateRaw * secondsPerYear;
352
306
  const priceScaleFactor = BigInt(1000000000000000000);
353
- const wethPriceScaled = BigInt(Math.floor(wethPriceInTokens * Number(priceScaleFactor)));
354
- const annualRewardsInUnderlying = (annualWethRewards * wethPriceScaled) / priceScaleFactor;
355
- const aprBpsWeth = totalStakedRaw > 0n ? (annualRewardsInUnderlying * 10000n) / totalStakedRaw : 0n;
356
- wethApr = {
357
- raw: aprBpsWeth,
358
- percentage: Number(aprBpsWeth) / 100,
307
+ const pairedTokenPriceScaled = BigInt(Math.floor(pairedTokenPriceInTokens * Number(priceScaleFactor)));
308
+ const annualRewardsInUnderlying = (annualPairedRewards * pairedTokenPriceScaled) / priceScaleFactor;
309
+ const aprBpsPairedToken = totalStakedRaw > 0n ? (annualRewardsInUnderlying * 10000n) / totalStakedRaw : 0n;
310
+ pairedTokenApr = {
311
+ raw: aprBpsPairedToken,
312
+ percentage: Number(aprBpsPairedToken) / 100,
359
313
  };
360
314
  }
361
315
  }
@@ -368,7 +322,7 @@ function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdP
368
322
  // When fee splitter is NOT active: stakingPendingToken = staking's pending from ClankerFeeLocker
369
323
  // Note: feeSplitterPending is now local balance only (not from ClankerFeeLocker), so we don't add it
370
324
  const tokenPendingTotal = stakingPendingToken; // Already queried for correct recipient
371
- const wethPendingTotal = stakingPendingWeth; // Already queried for correct recipient
325
+ const pairedTokenPendingTotal = stakingPendingPaired; // Already queried for correct recipient
372
326
  return {
373
327
  totalStaked: formatBalanceWithUsd(totalStakedRaw, tokenDecimals, tokenUsdPrice),
374
328
  apr: {
@@ -376,24 +330,24 @@ function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdP
376
330
  raw: aprBpsRaw,
377
331
  percentage: Number(aprBpsRaw) / 100,
378
332
  },
379
- weth: wethApr,
333
+ pairedToken: pairedTokenApr,
380
334
  },
381
335
  outstandingRewards: {
382
336
  staking: {
383
337
  available: formatBalanceWithUsd(outstandingRewardsTokenAvailable, tokenDecimals, tokenUsdPrice),
384
338
  pending: formatBalanceWithUsd(tokenPendingTotal, tokenDecimals, tokenUsdPrice),
385
339
  },
386
- weth: outstandingRewardsWethAvailable !== null
340
+ pairedToken: outstandingRewardsPairedAvailable !== null
387
341
  ? {
388
- available: formatBalanceWithUsd(outstandingRewardsWethAvailable, 18, wethUsdPrice),
389
- pending: formatBalanceWithUsd(wethPendingTotal, 18, wethUsdPrice),
342
+ available: formatBalanceWithUsd(outstandingRewardsPairedAvailable, pairedTokenDecimals, pairedTokenUsdPrice),
343
+ pending: formatBalanceWithUsd(pairedTokenPendingTotal, pairedTokenDecimals, pairedTokenUsdPrice),
390
344
  }
391
345
  : null,
392
346
  },
393
347
  rewardRates: {
394
348
  token: formatBalanceWithUsd(tokenRewardRateRaw, tokenDecimals, tokenUsdPrice),
395
- weth: wethRewardRateRaw !== null && wethRewardRateRaw !== undefined
396
- ? formatBalanceWithUsd(wethRewardRateRaw, 18, wethUsdPrice)
349
+ pairedToken: pairedTokenRewardRateRaw !== null && pairedTokenRewardRateRaw !== undefined
350
+ ? formatBalanceWithUsd(pairedTokenRewardRateRaw, pairedTokenDecimals, pairedTokenUsdPrice)
397
351
  : null,
398
352
  },
399
353
  streamParams: {
@@ -404,80 +358,32 @@ function parseStakingStats(results, pendingFeesResults, tokenDecimals, tokenUsdP
404
358
  },
405
359
  };
406
360
  }
361
+ // ============================================================================
362
+ // Indexed Project Data
363
+ // ============================================================================
407
364
  /**
408
- * Get multiple projects data using factory's paginated getProjects()
365
+ * Fetch project data from the indexer
366
+ * Returns null if the project is not found in the indexer
409
367
  */
410
- export async function getProjects({ publicClient, offset = 0, limit = 50, }) {
411
- if (Object.values({ publicClient }).some((value) => !value)) {
412
- throw new Error("Invalid projects params");
368
+ export async function getIndexedProject(chainId, clankerToken) {
369
+ try {
370
+ const fields = getLevrProjectByIdFields(chainId, clankerToken);
371
+ const result = await query(fields);
372
+ // Cast to our explicit type since the generated types can be complex
373
+ return result.LevrProject_by_pk ?? null;
413
374
  }
414
- const chainId = publicClient.chain?.id;
415
- if (!chainId)
416
- throw new Error("Chain ID not found on public client");
417
- const factoryAddress = GET_FACTORY_ADDRESS(chainId);
418
- if (!factoryAddress)
419
- throw new Error("Factory address not found");
420
- // Get projects from factory using paginated view function
421
- const [projectsData, total] = await publicClient.readContract({
422
- address: factoryAddress,
423
- abi: LevrFactory_v1,
424
- functionName: "getProjects",
425
- args: [BigInt(offset), BigInt(limit)],
426
- });
427
- if (projectsData.length === 0) {
428
- return {
429
- projects: [],
430
- total: Number(total),
431
- };
375
+ catch {
376
+ return null;
432
377
  }
433
- // Track contracts and their mapping per project for correct result parsing
434
- const contractsPerProject = [];
435
- // Build contract calls for all projects (token data + treasury balances)
436
- const contracts = projectsData.flatMap((projectInfo) => {
437
- const tokenContracts = getTokenContracts(projectInfo.clankerToken);
438
- const treasuryContracts = getTreasuryContracts(projectInfo.clankerToken, projectInfo.project.treasury, projectInfo.project.staking, undefined);
439
- contractsPerProject.push({
440
- tokenCount: tokenContracts.length,
441
- treasuryCount: treasuryContracts.length,
442
- });
443
- return [...tokenContracts, ...treasuryContracts];
444
- });
445
- const results = await publicClient.multicall({ contracts });
446
- // Parse results into Project objects
447
- const projects = [];
448
- let currentOffset = 0;
449
- for (let i = 0; i < projectsData.length; i++) {
450
- const projectInfo = projectsData[i];
451
- const tokenCount = contractsPerProject[i].tokenCount;
452
- const treasuryCount = contractsPerProject[i].treasuryCount;
453
- // Extract results for this project
454
- const tokenResults = results.slice(currentOffset, currentOffset + tokenCount);
455
- currentOffset += tokenCount;
456
- const treasuryResults = results.slice(currentOffset, currentOffset + treasuryCount);
457
- currentOffset += treasuryCount;
458
- // Parse using our type-safe parsers
459
- const tokenData = parseTokenData(tokenResults, projectInfo.clankerToken);
460
- const treasuryStats = parseTreasuryStats(treasuryResults, tokenData.decimals, tokenData.totalSupply, null // No pricing for list view
461
- );
462
- projects.push({
463
- chainId,
464
- treasury: projectInfo.project.treasury,
465
- governor: projectInfo.project.governor,
466
- staking: projectInfo.project.staking,
467
- stakedToken: projectInfo.project.stakedToken,
468
- factory: factoryAddress,
469
- token: tokenData,
470
- treasuryStats,
471
- });
472
- }
473
- return {
474
- projects,
475
- total: Number(total),
476
- };
477
378
  }
379
+ // ============================================================================
380
+ // Static Project Functions
381
+ // ============================================================================
478
382
  /**
479
383
  * Get static project data that doesn't change frequently
480
384
  * This includes contract addresses, token metadata, pool info, and fee receivers
385
+ *
386
+ * Uses indexed data for token and project data, only fetches via RPC what's not indexed
481
387
  */
482
388
  export async function getStaticProject({ publicClient, clankerToken, userAddress, }) {
483
389
  if (Object.values({ publicClient, clankerToken }).some((value) => !value)) {
@@ -489,39 +395,86 @@ export async function getStaticProject({ publicClient, clankerToken, userAddress
489
395
  const factoryAddress = GET_FACTORY_ADDRESS(chainId);
490
396
  if (!factoryAddress)
491
397
  throw new Error("Factory address not found");
492
- // Get deployed fee splitter for this token (if exists)
493
- const feeSplitterAddress = await getFeeSplitter({
494
- publicClient,
495
- clankerToken,
496
- chainId,
497
- });
498
- // Build contract calls including tokenRewards and fee splitter static in the same multicall
398
+ // Fetch indexed data and fee splitter in parallel
399
+ const [indexedProject, feeSplitterAddress] = await Promise.all([
400
+ getIndexedProject(chainId, clankerToken),
401
+ getFeeSplitter({ publicClient, clankerToken, chainId }),
402
+ ]);
403
+ if (!indexedProject)
404
+ return null;
405
+ // Parse token data from indexed project
406
+ const indexedToken = indexedProject.clankerToken;
407
+ if (!indexedToken)
408
+ return null;
409
+ let parsedMetadata = null;
410
+ if (indexedToken.metadata && typeof indexedToken.metadata === "string") {
411
+ try {
412
+ parsedMetadata = JSON.parse(indexedToken.metadata);
413
+ }
414
+ catch {
415
+ // If parsing fails, leave as null
416
+ }
417
+ }
418
+ const tokenData = {
419
+ address: clankerToken,
420
+ decimals: indexedToken.decimals ?? 18,
421
+ name: indexedToken.name ?? "",
422
+ symbol: indexedToken.symbol ?? "",
423
+ totalSupply: indexedToken.totalSupply ? BigInt(indexedToken.totalSupply) : 0n,
424
+ metadata: parsedMetadata,
425
+ imageUrl: indexedToken.imageUrl ?? undefined,
426
+ originalAdmin: (indexedToken.originalAdmin ?? zeroAddress),
427
+ admin: (indexedToken.admin ?? zeroAddress),
428
+ context: indexedToken.context ?? "",
429
+ };
430
+ // Parse factory data from indexed project
431
+ const { treasury_id, governor_id, staking_id, stakedToken_id } = indexedProject;
432
+ const indexedFactory = treasury_id && governor_id && staking_id && stakedToken_id
433
+ ? {
434
+ treasury: treasury_id,
435
+ governor: governor_id,
436
+ staking: staking_id,
437
+ stakedToken: stakedToken_id,
438
+ forwarder: zeroAddress,
439
+ }
440
+ : null;
441
+ // Only fetch what's not in the indexer: forwarder, fee receivers, fee splitter
499
442
  const contracts = [
500
- ...getTokenContracts(clankerToken),
501
- ...getFactoryContracts(factoryAddress, clankerToken),
443
+ // Forwarder is not indexed
444
+ {
445
+ address: factoryAddress,
446
+ abi: LevrFactory_v1,
447
+ functionName: "trustedForwarder",
448
+ },
449
+ // Fee receivers from LP locker (not indexed)
502
450
  ...getFeeReceiverContracts(clankerToken, chainId),
451
+ // Fee splitter static data if available
503
452
  ...(feeSplitterAddress ? getFeeSplitterStaticContracts(clankerToken, feeSplitterAddress) : []),
504
453
  ];
505
454
  const multicallResults = await publicClient.multicall({ contracts });
506
- // Calculate slice indices for each data group
507
- const tokenCount = 5;
508
- const factoryCount = 2;
509
- const tokenRewardsCount = 1;
510
- const feeSplitterStaticCount = feeSplitterAddress ? 3 : 0;
455
+ // Parse results
511
456
  let idx = 0;
512
- const tokenResults = multicallResults.slice(idx, idx + tokenCount);
513
- idx += tokenCount;
514
- const factoryResults = multicallResults.slice(idx, idx + factoryCount);
515
- idx += factoryCount;
457
+ // Forwarder
458
+ const forwarderResult = multicallResults[idx];
459
+ idx += 1;
460
+ const factoryData = indexedFactory
461
+ ? { ...indexedFactory, forwarder: forwarderResult.result ?? zeroAddress }
462
+ : {
463
+ treasury: zeroAddress,
464
+ governor: zeroAddress,
465
+ staking: zeroAddress,
466
+ stakedToken: zeroAddress,
467
+ forwarder: forwarderResult.result ?? zeroAddress,
468
+ };
469
+ // Fee receivers (tokenRewards)
516
470
  const tokenRewardsResult = multicallResults[idx];
517
- idx += tokenRewardsCount;
471
+ idx += 1;
472
+ // Fee splitter static
473
+ const feeSplitterStaticCount = feeSplitterAddress ? 3 : 0;
518
474
  const feeSplitterStaticResults = feeSplitterAddress
519
475
  ? multicallResults.slice(idx, idx + feeSplitterStaticCount)
520
476
  : null;
521
477
  idx += feeSplitterStaticCount;
522
- // Parse results using individual parsers
523
- const tokenData = parseTokenData(tokenResults, clankerToken);
524
- const factoryData = parseFactoryData(factoryResults);
525
478
  // Check if project exists
526
479
  const { treasury, governor, staking, stakedToken } = factoryData;
527
480
  const isRegistered = [treasury, governor, staking, stakedToken].every((a) => a !== zeroAddress);
@@ -531,10 +484,13 @@ export async function getStaticProject({ publicClient, clankerToken, userAddress
531
484
  if (tokenRewardsResult.status === "success") {
532
485
  const tokenRewards = tokenRewardsResult.result;
533
486
  const poolKey = tokenRewards.poolKey;
487
+ // Resolve paired token info from pool key and indexed data
488
+ const pairedToken = resolvePairedToken(poolKey, clankerToken, indexedToken.symbol, indexedToken.v4Pool, chainId);
534
489
  poolInfo = {
535
490
  poolKey,
536
491
  feeDisplay: poolKey.fee === 8388608 ? "Dynamic" : `${(poolKey.fee / 10000).toFixed(2)}%`,
537
492
  numPositions: tokenRewards.numPositions,
493
+ pairedToken,
538
494
  };
539
495
  const rewardSlotCount = tokenRewards.rewardRecipients?.length ??
540
496
  tokenRewards.rewardAdmins?.length ??
@@ -592,81 +548,55 @@ export async function getStaticProject({ publicClient, clankerToken, userAddress
592
548
  /**
593
549
  * Get project data for a clanker token
594
550
  * Requires staticProject data to avoid refetching static information
595
- * Fetches dynamic data including treasury, governance, staking stats, and pricing
551
+ * Fetches dynamic data including treasury, staking stats, and pricing
552
+ *
553
+ * Governance stats are fetched from the indexer (no RPC calls needed)
596
554
  */
597
- export async function getProject({ publicClient, staticProject, oraclePublicClient, }) {
555
+ export async function getProject({ publicClient, staticProject, }) {
598
556
  if (Object.values({ publicClient, staticProject }).some((value) => !value)) {
599
557
  throw new Error("Invalid project params");
600
558
  }
601
559
  const chainId = publicClient.chain?.id;
602
560
  if (!chainId)
603
561
  throw new Error("Chain ID not found on public client");
604
- const wethAddress = WETH(chainId)?.address;
562
+ // Get paired token info from static project if available
563
+ const pairedTokenInfo = staticProject.pool?.pairedToken;
564
+ const pairedTokenAddress = pairedTokenInfo?.address;
605
565
  const clankerToken = staticProject.token.address;
606
- // Use fee splitter from staticProject (already fetched in getStaticProject)
607
566
  const feeSplitterAddress = staticProject.feeSplitter?.address;
608
- const rewardTokens = wethAddress ? [clankerToken, wethAddress] : [clankerToken];
609
- // Fetch pricing data if oracle client is provided and pool exists
610
- let pricing;
611
- if (oraclePublicClient && staticProject.pool) {
612
- try {
613
- const [wethUsdData, tokenUsdData] = await Promise.all([
614
- getWethUsdPrice({ publicClient: oraclePublicClient }),
615
- getUsdPrice({
616
- oraclePublicClient,
617
- quotePublicClient: publicClient,
618
- tokenAddress: clankerToken,
619
- tokenDecimals: staticProject.token.decimals,
620
- quoteFee: staticProject.pool.poolKey.fee,
621
- quoteTickSpacing: staticProject.pool.poolKey.tickSpacing,
622
- quoteHooks: staticProject.pool.poolKey.hooks,
623
- }),
624
- ]);
625
- pricing = {
626
- wethUsd: wethUsdData.priceUsd,
627
- tokenUsd: tokenUsdData.priceUsd,
628
- };
629
- }
630
- catch (error) {
631
- // If pricing fails, continue without it (graceful degradation)
632
- console.warn("Failed to fetch USD pricing:", error);
633
- }
634
- }
635
- // Get current block timestamp for accurate stream status
636
- const block = await publicClient.getBlock();
637
- const blockTimestamp = block.timestamp;
638
- // Get fee locker address to query pending fees
639
- const feeLockerAddress = GET_FEE_LOCKER_ADDRESS(chainId);
567
+ const rewardTokens = pairedTokenAddress ? [clankerToken, pairedTokenAddress] : [clankerToken];
640
568
  // Determine fee recipient for pending fees query
641
- // If fee splitter is active, query pending for fee splitter (it receives fees before distribution)
642
- // If fee splitter is NOT active, query pending for staking (direct recipient)
569
+ const feeLockerAddress = GET_FEE_LOCKER_ADDRESS(chainId);
643
570
  const stakingFeeRecipient = feeSplitterAddress && staticProject.feeSplitter?.isActive
644
- ? feeSplitterAddress // Fee splitter is the ClankerFeeLocker recipient
645
- : staticProject.staking; // Staking is the direct ClankerFeeLocker recipient
646
- // Fetch only dynamic data (treasury, governance, staking stats, pending fees, and fee splitter dynamic)
571
+ ? feeSplitterAddress
572
+ : staticProject.staking;
573
+ // Build contract calls (governance is fetched from indexer, not RPC)
647
574
  const contracts = [
648
- ...getTreasuryContracts(clankerToken, staticProject.treasury, staticProject.staking, wethAddress),
649
- ...getGovernanceContracts(staticProject.governor),
650
- ...getStakingContracts(staticProject.staking, clankerToken, wethAddress),
575
+ ...getTreasuryContracts(clankerToken, staticProject.treasury, staticProject.staking, pairedTokenAddress),
576
+ ...getStakingContracts(staticProject.staking, clankerToken, pairedTokenAddress),
651
577
  ...(feeLockerAddress
652
- ? getPendingFeesContracts(feeLockerAddress, stakingFeeRecipient, clankerToken, wethAddress)
578
+ ? getPendingFeesContracts(feeLockerAddress, stakingFeeRecipient, clankerToken, pairedTokenAddress)
653
579
  : []),
654
580
  ...(feeSplitterAddress && staticProject.feeSplitter?.isActive
655
581
  ? getFeeSplitterDynamicContracts(clankerToken, feeSplitterAddress, rewardTokens)
656
582
  : []),
657
583
  ];
658
- const results = await publicClient.multicall({ contracts });
659
- // Calculate slice indices for dynamic data
660
- const treasuryCount = wethAddress ? 4 : 3; // treasury balance, staking balance, escrow balance, (optional weth balance)
661
- const governanceCount = 3; // currentCycleId + 2 activeProposalCount calls
662
- const stakingCount = wethAddress ? 8 : 5; // 5 base + 3 optional weth (including getTokenStreamInfo for weth)
663
- const pendingFeesCount = feeLockerAddress ? (wethAddress ? 2 : 1) : 0; // Pending fees from ClankerFeeLocker
584
+ // Fetch all data in parallel: indexed governance, pricing, block, and RPC multicall
585
+ const [indexedProject, pricing, block, results] = await Promise.all([
586
+ getIndexedProject(chainId, clankerToken),
587
+ fetchPricing(publicClient, staticProject),
588
+ publicClient.getBlock(),
589
+ publicClient.multicall({ contracts }),
590
+ ]);
591
+ const blockTimestamp = block.timestamp;
592
+ // Calculate slice indices for multicall results
593
+ const treasuryCount = pairedTokenAddress ? 4 : 3;
594
+ const stakingCount = pairedTokenAddress ? 8 : 5;
595
+ const pendingFeesCount = feeLockerAddress ? (pairedTokenAddress ? 2 : 1) : 0;
664
596
  const feeSplitterDynamicCount = feeSplitterAddress && staticProject.feeSplitter?.isActive ? rewardTokens.length : 0;
665
597
  let idx = 0;
666
598
  const treasuryResults = results.slice(idx, idx + treasuryCount);
667
599
  idx += treasuryCount;
668
- const governanceResults = results.slice(idx, idx + governanceCount);
669
- idx += governanceCount;
670
600
  const stakingResults = results.slice(idx, idx + stakingCount);
671
601
  idx += stakingCount;
672
602
  const pendingFeesResults = pendingFeesCount > 0
@@ -674,31 +604,35 @@ export async function getProject({ publicClient, staticProject, oraclePublicClie
674
604
  : null;
675
605
  idx += pendingFeesCount;
676
606
  const feeSplitterDynamicResults = feeSplitterDynamicCount > 0 ? results.slice(idx, idx + feeSplitterDynamicCount) : null;
677
- // Calculate USD values for stats if pricing is available
607
+ // Calculate USD values for stats
678
608
  const tokenUsdPrice = pricing ? parseFloat(pricing.tokenUsd) : null;
679
- const wethUsdPrice = pricing ? parseFloat(pricing.wethUsd) : null;
680
- // Parse fee splitter dynamic data first (needed for staking stats)
609
+ const pairedTokenUsdPrice = pricing ? parseFloat(pricing.pairedTokenUsd) : null;
610
+ // Parse fee splitter dynamic data
681
611
  let feeSplitter = staticProject.feeSplitter;
682
612
  let feeSplitterPendingFees;
683
613
  if (feeSplitterDynamicResults && staticProject.feeSplitter) {
684
- const feeSplitterDynamic = parseFeeSplitterDynamic(feeSplitterDynamicResults, wethAddress);
685
- feeSplitter = {
686
- ...staticProject.feeSplitter,
687
- ...feeSplitterDynamic,
688
- };
689
- // Extract pending fees to add to outstanding rewards
690
- // When using fee splitter, fees in LP locker should show as "pending" in outstanding rewards
614
+ const feeSplitterDynamic = parseFeeSplitterDynamic(feeSplitterDynamicResults, pairedTokenAddress);
615
+ feeSplitter = { ...staticProject.feeSplitter, ...feeSplitterDynamic };
691
616
  if (staticProject.feeSplitter.isActive && feeSplitterDynamic.pendingFees) {
692
617
  feeSplitterPendingFees = {
693
618
  token: feeSplitterDynamic.pendingFees.token,
694
- weth: feeSplitterDynamic.pendingFees.weth ?? null,
619
+ pairedToken: feeSplitterDynamic.pendingFees.pairedToken ?? null,
695
620
  };
696
621
  }
697
622
  }
698
- // Parse treasury and staking stats using individual parsers
699
- const treasuryStats = parseTreasuryStats(treasuryResults, staticProject.token.decimals, staticProject.token.totalSupply, tokenUsdPrice, wethUsdPrice);
700
- const stakingStats = parseStakingStats(stakingResults, pendingFeesResults, staticProject.token.decimals, tokenUsdPrice, wethUsdPrice, blockTimestamp, pricing, feeSplitterPendingFees);
701
- const governanceStats = parseGovernanceData(governanceResults);
623
+ // Parse stats
624
+ const treasuryStats = parseTreasuryStats(treasuryResults, staticProject.token.decimals, staticProject.token.totalSupply, tokenUsdPrice, pairedTokenUsdPrice, pairedTokenInfo?.decimals ?? 18);
625
+ const stakingStats = parseStakingStats(stakingResults, pendingFeesResults, staticProject.token.decimals, tokenUsdPrice, pairedTokenUsdPrice, pairedTokenInfo?.decimals ?? 18, blockTimestamp, pricing, feeSplitterPendingFees);
626
+ // Use indexed governance data (no RPC calls needed)
627
+ const governanceStats = indexedProject
628
+ ? {
629
+ currentCycleId: BigInt(indexedProject.currentCycleId ?? "1"),
630
+ activeProposalCount: {
631
+ boost: BigInt(indexedProject.activeBoostProposals ?? "0"),
632
+ transfer: BigInt(indexedProject.activeTransferProposals ?? "0"),
633
+ },
634
+ }
635
+ : { currentCycleId: 1n, activeProposalCount: { boost: 0n, transfer: 0n } };
702
636
  return {
703
637
  chainId,
704
638
  ...staticProject,
@@ -710,4 +644,37 @@ export async function getProject({ publicClient, staticProject, oraclePublicClie
710
644
  blockTimestamp,
711
645
  };
712
646
  }
647
+ // ============================================================================
648
+ // Internal Helpers
649
+ // ============================================================================
650
+ async function fetchPricing(publicClient, staticProject) {
651
+ if (!staticProject.pool)
652
+ return undefined;
653
+ try {
654
+ const pairedToken = staticProject.pool.pairedToken;
655
+ const tokenUsdData = await getUsdPrice({
656
+ publicClient,
657
+ tokenAddress: staticProject.token.address,
658
+ tokenDecimals: staticProject.token.decimals,
659
+ pairedTokenAddress: pairedToken.address,
660
+ pairedTokenDecimals: pairedToken.decimals,
661
+ quoteFee: staticProject.pool.poolKey.fee,
662
+ quoteTickSpacing: staticProject.pool.poolKey.tickSpacing,
663
+ quoteHooks: staticProject.pool.poolKey.hooks,
664
+ });
665
+ // Get paired token USD price (WETH/WBNB = oracle, stablecoins = $1.00)
666
+ const pairedTokenUsdPrice = await getPairedTokenUsdPrice({
667
+ publicClient,
668
+ pairedTokenAddress: pairedToken.address,
669
+ });
670
+ return {
671
+ tokenUsd: tokenUsdData.priceUsd,
672
+ pairedTokenUsd: pairedTokenUsdPrice,
673
+ };
674
+ }
675
+ catch (error) {
676
+ console.warn("Failed to fetch USD pricing:", error);
677
+ return undefined;
678
+ }
679
+ }
713
680
  //# sourceMappingURL=project.js.map