levr-sdk 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +109 -13
  2. package/dist/esm/abis/LevrFactory_v1.js +63 -0
  3. package/dist/esm/abis/LevrGovernor_v1.js +15 -24
  4. package/dist/esm/abis/LevrStaking_v1.js +7 -1
  5. package/dist/esm/abis/StateView.js +149 -0
  6. package/dist/esm/abis/V3QuoterV2.js +26 -0
  7. package/dist/esm/abis/index.js +4 -0
  8. package/dist/esm/balance.js +48 -4
  9. package/dist/esm/balance.js.map +1 -1
  10. package/dist/esm/client/hook/index.js +14 -3
  11. package/dist/esm/client/hook/index.js.map +1 -1
  12. package/dist/esm/client/hook/use-fee-receivers.js +11 -30
  13. package/dist/esm/client/hook/use-fee-receivers.js.map +1 -1
  14. package/dist/esm/client/hook/use-governance.js +20 -274
  15. package/dist/esm/client/hook/use-governance.js.map +1 -1
  16. package/dist/esm/client/hook/use-pool.js +26 -0
  17. package/dist/esm/client/hook/use-pool.js.map +1 -0
  18. package/dist/esm/client/hook/use-prepare.js +6 -3
  19. package/dist/esm/client/hook/use-prepare.js.map +1 -1
  20. package/dist/esm/client/hook/use-project.js +28 -16
  21. package/dist/esm/client/hook/use-project.js.map +1 -1
  22. package/dist/esm/client/hook/use-proposal.js +48 -0
  23. package/dist/esm/client/hook/use-proposal.js.map +1 -0
  24. package/dist/esm/client/hook/use-stake.js +29 -215
  25. package/dist/esm/client/hook/use-stake.js.map +1 -1
  26. package/dist/esm/client/hook/use-swap.js +23 -19
  27. package/dist/esm/client/hook/use-swap.js.map +1 -1
  28. package/dist/esm/client/hook/use-user.js +25 -0
  29. package/dist/esm/client/hook/use-user.js.map +1 -0
  30. package/dist/esm/client/levr-provider.js +73 -108
  31. package/dist/esm/client/levr-provider.js.map +1 -1
  32. package/dist/esm/client/query-keys.js +10 -22
  33. package/dist/esm/client/query-keys.js.map +1 -1
  34. package/dist/esm/constants.js +42 -1
  35. package/dist/esm/constants.js.map +1 -1
  36. package/dist/esm/fee-receivers.js +28 -13
  37. package/dist/esm/fee-receivers.js.map +1 -1
  38. package/dist/esm/governance.js +35 -399
  39. package/dist/esm/governance.js.map +1 -1
  40. package/dist/esm/index.js +7 -3
  41. package/dist/esm/index.js.map +1 -1
  42. package/dist/esm/pool-key.js +152 -0
  43. package/dist/esm/pool-key.js.map +1 -0
  44. package/dist/esm/pool.js +70 -0
  45. package/dist/esm/pool.js.map +1 -0
  46. package/dist/esm/project.js +415 -118
  47. package/dist/esm/project.js.map +1 -1
  48. package/dist/esm/proposal.js +156 -0
  49. package/dist/esm/proposal.js.map +1 -0
  50. package/dist/esm/quote/index.js +98 -0
  51. package/dist/esm/quote/index.js.map +1 -0
  52. package/dist/esm/quote/v3.js +62 -0
  53. package/dist/esm/quote/v3.js.map +1 -0
  54. package/dist/esm/quote/v4.js +228 -0
  55. package/dist/esm/quote/v4.js.map +1 -0
  56. package/dist/esm/stake.js +34 -237
  57. package/dist/esm/stake.js.map +1 -1
  58. package/dist/esm/treasury.js +162 -0
  59. package/dist/esm/treasury.js.map +1 -0
  60. package/dist/esm/usd-price.js +149 -0
  61. package/dist/esm/usd-price.js.map +1 -0
  62. package/dist/esm/user.js +153 -0
  63. package/dist/esm/user.js.map +1 -0
  64. package/dist/esm/util.js +45 -1
  65. package/dist/esm/util.js.map +1 -1
  66. package/dist/types/abis/LevrFactory_v1.d.ts +48 -0
  67. package/dist/types/abis/LevrGovernor_v1.d.ts +12 -18
  68. package/dist/types/abis/LevrStaking_v1.d.ts +5 -1
  69. package/dist/types/abis/StateView.d.ts +278 -0
  70. package/dist/types/abis/V3QuoterV2.d.ts +39 -0
  71. package/dist/types/abis/index.d.ts +2 -0
  72. package/dist/types/balance.d.ts +19 -6
  73. package/dist/types/balance.d.ts.map +1 -1
  74. package/dist/types/client/hook/index.d.ts +12 -4
  75. package/dist/types/client/hook/index.d.ts.map +1 -1
  76. package/dist/types/client/hook/use-fee-receivers.d.ts +6 -16
  77. package/dist/types/client/hook/use-fee-receivers.d.ts.map +1 -1
  78. package/dist/types/client/hook/use-governance.d.ts +4 -93
  79. package/dist/types/client/hook/use-governance.d.ts.map +1 -1
  80. package/dist/types/client/hook/use-pool.d.ts +12 -0
  81. package/dist/types/client/hook/use-pool.d.ts.map +1 -0
  82. package/dist/types/client/hook/use-prepare.d.ts +1 -2
  83. package/dist/types/client/hook/use-prepare.d.ts.map +1 -1
  84. package/dist/types/client/hook/use-project.d.ts +8 -1
  85. package/dist/types/client/hook/use-project.d.ts.map +1 -1
  86. package/dist/types/client/hook/use-proposal.d.ts +18 -0
  87. package/dist/types/client/hook/use-proposal.d.ts.map +1 -0
  88. package/dist/types/client/hook/use-stake.d.ts +14 -168
  89. package/dist/types/client/hook/use-stake.d.ts.map +1 -1
  90. package/dist/types/client/hook/use-swap.d.ts +5 -9
  91. package/dist/types/client/hook/use-swap.d.ts.map +1 -1
  92. package/dist/types/client/hook/use-user.d.ts +13 -0
  93. package/dist/types/client/hook/use-user.d.ts.map +1 -0
  94. package/dist/types/client/levr-provider.d.ts +41 -68
  95. package/dist/types/client/levr-provider.d.ts.map +1 -1
  96. package/dist/types/client/query-keys.d.ts +14 -26
  97. package/dist/types/client/query-keys.d.ts.map +1 -1
  98. package/dist/types/constants.d.ts +18 -0
  99. package/dist/types/constants.d.ts.map +1 -1
  100. package/dist/types/fee-receivers.d.ts +29 -2
  101. package/dist/types/fee-receivers.d.ts.map +1 -1
  102. package/dist/types/governance.d.ts +8 -108
  103. package/dist/types/governance.d.ts.map +1 -1
  104. package/dist/types/index.d.ts +7 -3
  105. package/dist/types/index.d.ts.map +1 -1
  106. package/dist/types/pool-key.d.ts +121 -0
  107. package/dist/types/pool-key.d.ts.map +1 -0
  108. package/dist/types/pool.d.ts +590 -0
  109. package/dist/types/pool.d.ts.map +1 -0
  110. package/dist/types/project.d.ts +61 -11
  111. package/dist/types/project.d.ts.map +1 -1
  112. package/dist/types/proposal.d.ts +1161 -0
  113. package/dist/types/proposal.d.ts.map +1 -0
  114. package/dist/types/quote/index.d.ts +97 -0
  115. package/dist/types/quote/index.d.ts.map +1 -0
  116. package/dist/types/quote/v3.d.ts +78 -0
  117. package/dist/types/quote/v3.d.ts.map +1 -0
  118. package/dist/types/quote/v4.d.ts +95 -0
  119. package/dist/types/quote/v4.d.ts.map +1 -0
  120. package/dist/types/stake.d.ts +41 -87
  121. package/dist/types/stake.d.ts.map +1 -1
  122. package/dist/types/treasury.d.ts +16 -0
  123. package/dist/types/treasury.d.ts.map +1 -0
  124. package/dist/types/types.d.ts +15 -0
  125. package/dist/types/types.d.ts.map +1 -1
  126. package/dist/types/usd-price.d.ts +141 -0
  127. package/dist/types/usd-price.d.ts.map +1 -0
  128. package/dist/types/user.d.ts +188 -0
  129. package/dist/types/user.d.ts.map +1 -0
  130. package/dist/types/util.d.ts +17 -0
  131. package/dist/types/util.d.ts.map +1 -1
  132. package/package.json +5 -2
  133. package/dist/esm/client/hook/use-balance.js +0 -56
  134. package/dist/esm/client/hook/use-balance.js.map +0 -1
  135. package/dist/esm/client/hook/use-projects.js +0 -22
  136. package/dist/esm/client/hook/use-projects.js.map +0 -1
  137. package/dist/esm/client/hook/use-proposals.js +0 -31
  138. package/dist/esm/client/hook/use-proposals.js.map +0 -1
  139. package/dist/esm/projects.js +0 -212
  140. package/dist/esm/projects.js.map +0 -1
  141. package/dist/esm/proposals.js +0 -98
  142. package/dist/esm/proposals.js.map +0 -1
  143. package/dist/esm/quote-v4.js +0 -169
  144. package/dist/esm/quote-v4.js.map +0 -1
  145. package/dist/types/client/hook/use-balance.d.ts +0 -18
  146. package/dist/types/client/hook/use-balance.d.ts.map +0 -1
  147. package/dist/types/client/hook/use-projects.d.ts +0 -6
  148. package/dist/types/client/hook/use-projects.d.ts.map +0 -1
  149. package/dist/types/client/hook/use-proposals.d.ts +0 -16
  150. package/dist/types/client/hook/use-proposals.d.ts.map +0 -1
  151. package/dist/types/projects.d.ts +0 -20
  152. package/dist/types/projects.d.ts.map +0 -1
  153. package/dist/types/proposals.d.ts +0 -20
  154. package/dist/types/proposals.d.ts.map +0 -1
  155. package/dist/types/quote-v4.d.ts +0 -54
  156. package/dist/types/quote-v4.d.ts.map +0 -1
@@ -0,0 +1,152 @@
1
+ import { encodeAbiParameters, keccak256, zeroAddress } from "viem";
2
+ import { StateView } from "./abis/index.js";
3
+ import { UNISWAP_V4_STATE_VIEW } from "./constants.js";
4
+ /**
5
+ * @description Sort two token addresses for pool key (currency0 < currency1)
6
+ */
7
+ export const sortTokens = (tokenA, tokenB) => {
8
+ return tokenA.toLowerCase() < tokenB.toLowerCase() ? [tokenA, tokenB] : [tokenB, tokenA];
9
+ };
10
+ /**
11
+ * @description Default pool configuration
12
+ * 0.3% fee tier is the most common on Uniswap
13
+ */
14
+ export const DEFAULT_POOL_CONFIG = {
15
+ fee: 3000, // 0.3% fee tier (most common)
16
+ tickSpacing: 60, // Corresponds to 0.3% fee tier
17
+ hooks: zeroAddress, // No hooks by default
18
+ };
19
+ /**
20
+ * @description Create a pool key for two tokens
21
+ * @param token0 First token address
22
+ * @param token1 Second token address
23
+ * @param fee Fee tier (in hundredths of a bip, e.g. 3000 = 0.3%). Defaults to 3000 (0.3%)
24
+ * @param tickSpacing Tick spacing. Defaults to 60 (for 0.3% fee tier)
25
+ * @param hooks Hooks address. Defaults to zero address (no hooks)
26
+ * @returns Properly sorted PoolKey
27
+ */
28
+ export const createPoolKey = (token0, token1, fee = DEFAULT_POOL_CONFIG.fee, tickSpacing = DEFAULT_POOL_CONFIG.tickSpacing, hooks = DEFAULT_POOL_CONFIG.hooks) => {
29
+ const [currency0, currency1] = sortTokens(token0, token1);
30
+ return {
31
+ currency0,
32
+ currency1,
33
+ fee,
34
+ tickSpacing,
35
+ hooks,
36
+ };
37
+ };
38
+ /**
39
+ * @description Calculate pool ID from pool key (keccak256 of abi.encode(PoolKey))
40
+ * @param poolKey Pool key
41
+ * @returns Pool ID as bytes32
42
+ */
43
+ export const getPoolId = (poolKey) => {
44
+ return keccak256(encodeAbiParameters([
45
+ {
46
+ type: "tuple",
47
+ components: [
48
+ { name: "currency0", type: "address" },
49
+ { name: "currency1", type: "address" },
50
+ { name: "fee", type: "uint24" },
51
+ { name: "tickSpacing", type: "int24" },
52
+ { name: "hooks", type: "address" },
53
+ ],
54
+ },
55
+ ], [poolKey]));
56
+ };
57
+ /**
58
+ * @description Common fee tiers and their corresponding tick spacings
59
+ * Ordered by preference: 0.3% is most common for major pairs, then 0.05%, then 1%
60
+ * From Uniswap V4 documentation
61
+ */
62
+ export const COMMON_FEE_TIERS = [
63
+ { fee: 3000, tickSpacing: 60 }, // 0.3% - Most common for major pairs like WETH/USDC
64
+ { fee: 500, tickSpacing: 10 }, // 0.05%
65
+ { fee: 10000, tickSpacing: 200 }, // 1%
66
+ ];
67
+ /**
68
+ * @description Discover an existing pool by trying common fee tiers
69
+ * @param params Discovery parameters
70
+ * @returns Pool data if found, null otherwise
71
+ *
72
+ * @remarks
73
+ * This function tries to find an initialized pool by:
74
+ * 1. Trying common fee tiers (0.05%, 0.3%, 1%)
75
+ * 2. Querying StateView contract to check if pool exists and has liquidity
76
+ * 3. Returning the first valid pool found
77
+ *
78
+ * Uses Uniswap V4's StateView contract to fetch pool state:
79
+ * - getSlot0(): sqrtPriceX96, tick, protocol/LP fees
80
+ * - getLiquidity(): pool liquidity
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * const pool = await discoverPool({
85
+ * publicClient,
86
+ * token0: WETH_ADDRESS,
87
+ * token1: USDC_ADDRESS,
88
+ * })
89
+ * if (pool) {
90
+ * console.log('Found pool:', pool.poolKey)
91
+ * console.log('Liquidity:', pool.liquidity)
92
+ * }
93
+ * ```
94
+ */
95
+ export const discoverPool = async ({ publicClient, token0, token1, hooks = zeroAddress, feeTiers = COMMON_FEE_TIERS, }) => {
96
+ const chainId = publicClient.chain?.id;
97
+ if (!chainId)
98
+ throw new Error("Chain ID not found on public client");
99
+ const stateViewAddress = UNISWAP_V4_STATE_VIEW(chainId);
100
+ if (!stateViewAddress) {
101
+ throw new Error(`StateView address not found for chain ID ${chainId}`);
102
+ }
103
+ // Check ALL fee tiers and select the most liquid pool
104
+ let bestPool = null;
105
+ let maxLiquidity = 0n;
106
+ for (const { fee, tickSpacing } of feeTiers) {
107
+ try {
108
+ const poolKey = createPoolKey(token0, token1, fee, tickSpacing, hooks);
109
+ const poolId = getPoolId(poolKey);
110
+ // Query pool state from StateView contract
111
+ const [slot0Result, liquidityResult] = await Promise.all([
112
+ publicClient.readContract({
113
+ address: stateViewAddress,
114
+ abi: StateView,
115
+ functionName: "getSlot0",
116
+ args: [poolId],
117
+ }),
118
+ publicClient.readContract({
119
+ address: stateViewAddress,
120
+ abi: StateView,
121
+ functionName: "getLiquidity",
122
+ args: [poolId],
123
+ }),
124
+ ]);
125
+ const [sqrtPriceX96, tick] = slot0Result;
126
+ const liquidity = liquidityResult;
127
+ // In V4, getLiquidity() returns current tick liquidity which can be 0
128
+ // even if pool has liquidity in other ticks. Check if pool is initialized by sqrtPrice
129
+ const poolInitialized = sqrtPriceX96 > 0n;
130
+ // Select pool with most liquidity
131
+ if (poolInitialized && liquidity > maxLiquidity) {
132
+ maxLiquidity = liquidity;
133
+ bestPool = {
134
+ poolKey,
135
+ sqrtPriceX96,
136
+ liquidity,
137
+ tick: Number(tick),
138
+ };
139
+ }
140
+ }
141
+ catch (error) {
142
+ // Pool doesn't exist or error querying, try next fee tier
143
+ continue;
144
+ }
145
+ }
146
+ return bestPool;
147
+ };
148
+ export const findLiquidPool = async (params) => {
149
+ const pool = await discoverPool(params);
150
+ return pool?.poolKey ?? null;
151
+ };
152
+ //# sourceMappingURL=pool-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-key.js","sourceRoot":"","sources":["../../src/pool-key.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { StateView } from "./abis/index.js";
2
+ import { UNISWAP_V4_STATE_VIEW } from "./constants.js";
3
+ import { getPoolId } from "./pool-key.js";
4
+ // ========================================
5
+ // HELPER UTILS (for composition in larger multicalls)
6
+ // ========================================
7
+ /**
8
+ * Helper: Get pool state contracts for multicall composition
9
+ */
10
+ export function poolStateContracts(params) {
11
+ return [
12
+ {
13
+ address: params.stateViewAddress,
14
+ abi: StateView,
15
+ functionName: "getSlot0",
16
+ args: [params.poolId],
17
+ },
18
+ {
19
+ address: params.stateViewAddress,
20
+ abi: StateView,
21
+ functionName: "getLiquidity",
22
+ args: [params.poolId],
23
+ },
24
+ ];
25
+ }
26
+ // ========================================
27
+ // MAIN POOL DATA FUNCTION
28
+ // ========================================
29
+ /**
30
+ * Get pool-specific data including liquidity, price, and fees
31
+ * Uses StateView contract for efficient state queries
32
+ */
33
+ export async function pool({ publicClient, project }) {
34
+ if (Object.values({ publicClient, project }).some((value) => !value)) {
35
+ throw new Error("Invalid pool params");
36
+ }
37
+ if (!project.pool?.poolKey)
38
+ return null;
39
+ const chainId = publicClient.chain?.id;
40
+ if (!chainId)
41
+ throw new Error("Chain ID not found on public client");
42
+ const stateViewAddress = UNISWAP_V4_STATE_VIEW(chainId);
43
+ if (!stateViewAddress) {
44
+ throw new Error(`StateView address not found for chain ID ${chainId}`);
45
+ }
46
+ const poolKey = project.pool.poolKey;
47
+ const poolId = getPoolId(poolKey);
48
+ // Use helper to get contracts and execute multicall
49
+ const contracts = poolStateContracts({ stateViewAddress, poolId });
50
+ const results = await publicClient.multicall({ contracts });
51
+ const slot0Result = results[0].result;
52
+ const liquidityResult = results[1].result;
53
+ const [sqrtPriceX96, tick, protocolFee, lpFee] = slot0Result;
54
+ const liquidity = liquidityResult;
55
+ // Determine fee display from project
56
+ const feeDisplay = project.pool.feeDisplay;
57
+ return {
58
+ poolKey,
59
+ sqrtPriceX96,
60
+ tick: Number(tick),
61
+ liquidity: {
62
+ raw: liquidity,
63
+ formatted: liquidity.toString(),
64
+ },
65
+ protocolFee: Number(protocolFee),
66
+ lpFee: Number(lpFee),
67
+ feeDisplay,
68
+ };
69
+ }
70
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAmBtC,2CAA2C;AAC3C,sDAAsD;AACtD,2CAA2C;AAE3C;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAGlC;IACC,OAAO;QACL;YACE,OAAO,EAAE,MAAM,CAAC,gBAAgB;YAChC,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,UAAmB;YACjC,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;SACtB;QACD;YACE,OAAO,EAAE,MAAM,CAAC,gBAAgB;YAChC,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,cAAuB;YACrC,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;SACtB;KACF,CAAA;AACH,CAAC;AAED,2CAA2C;AAC3C,0BAA0B;AAC1B,2CAA2C;AAE3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,EAAE,YAAY,EAAE,OAAO,EAAc;IAC9D,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;QAAE,OAAO,IAAI,CAAA;IAEvC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,CAAA;IACtC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IAEpE,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;IACvD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,4CAA4C,OAAO,EAAE,CAAC,CAAA;IACxE,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAA;IACpC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;IAEjC,oDAAoD;IACpD,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAA;IAClE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;IAE3D,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAA0C,CAAA;IACzE,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAgB,CAAA;IAEnD,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,GAAG,WAAW,CAAA;IAC5D,MAAM,SAAS,GAAG,eAAe,CAAA;IAEjC,qCAAqC;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAA;IAE1C,OAAO;QACL,OAAO;QACP,YAAY;QACZ,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;QAClB,SAAS,EAAE;YACT,GAAG,EAAE,SAAS;YACd,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;SAChC;QACD,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;QACpB,UAAU;KACX,CAAA;AACH,CAAC"}