levr-sdk 0.0.1

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 (179) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +711 -0
  3. package/dist/esm/abis/IClankerAirdrop.js +443 -0
  4. package/dist/esm/abis/IClankerHookDynamicFee.js +198 -0
  5. package/dist/esm/abis/IClankerHookStaticFee.js +75 -0
  6. package/dist/esm/abis/IClankerLPLocker.js +402 -0
  7. package/dist/esm/abis/IClankerLpLockerMultiple.js +609 -0
  8. package/dist/esm/abis/IClankerToken.js +421 -0
  9. package/dist/esm/abis/LevrFactory_v1.js +608 -0
  10. package/dist/esm/abis/LevrForwarder_v1.js +622 -0
  11. package/dist/esm/abis/LevrGovernor_v1.js +726 -0
  12. package/dist/esm/abis/LevrStakedToken_v1.js +441 -0
  13. package/dist/esm/abis/LevrStaking_v1.js +607 -0
  14. package/dist/esm/abis/LevrTreasury_v1.js +219 -0
  15. package/dist/esm/abis/Permit2.js +29 -0
  16. package/dist/esm/abis/V4Quoter.js +466 -0
  17. package/dist/esm/abis/WETH9.js +153 -0
  18. package/dist/esm/abis/index.js +23 -0
  19. package/dist/esm/balance.js +72 -0
  20. package/dist/esm/balance.js.map +1 -0
  21. package/dist/esm/build-calldatas-v4.js +98 -0
  22. package/dist/esm/build-calldatas-v4.js.map +1 -0
  23. package/dist/esm/build-clanker-v4.js +128 -0
  24. package/dist/esm/build-clanker-v4.js.map +1 -0
  25. package/dist/esm/client/hook/index.js +36 -0
  26. package/dist/esm/client/hook/index.js.map +1 -0
  27. package/dist/esm/client/hook/use-balance.js +56 -0
  28. package/dist/esm/client/hook/use-balance.js.map +1 -0
  29. package/dist/esm/client/hook/use-clanker.js +57 -0
  30. package/dist/esm/client/hook/use-clanker.js.map +1 -0
  31. package/dist/esm/client/hook/use-deploy.js +16 -0
  32. package/dist/esm/client/hook/use-deploy.js.map +1 -0
  33. package/dist/esm/client/hook/use-fee-receivers.js +54 -0
  34. package/dist/esm/client/hook/use-fee-receivers.js.map +1 -0
  35. package/dist/esm/client/hook/use-governance.js +389 -0
  36. package/dist/esm/client/hook/use-governance.js.map +1 -0
  37. package/dist/esm/client/hook/use-prepare.js +47 -0
  38. package/dist/esm/client/hook/use-prepare.js.map +1 -0
  39. package/dist/esm/client/hook/use-project.js +29 -0
  40. package/dist/esm/client/hook/use-project.js.map +1 -0
  41. package/dist/esm/client/hook/use-projects.js +22 -0
  42. package/dist/esm/client/hook/use-projects.js.map +1 -0
  43. package/dist/esm/client/hook/use-proposals.js +31 -0
  44. package/dist/esm/client/hook/use-proposals.js.map +1 -0
  45. package/dist/esm/client/hook/use-register.js +101 -0
  46. package/dist/esm/client/hook/use-register.js.map +1 -0
  47. package/dist/esm/client/hook/use-stake.js +327 -0
  48. package/dist/esm/client/hook/use-stake.js.map +1 -0
  49. package/dist/esm/client/hook/use-swap.js +110 -0
  50. package/dist/esm/client/hook/use-swap.js.map +1 -0
  51. package/dist/esm/client/index.js +4 -0
  52. package/dist/esm/client/index.js.map +1 -0
  53. package/dist/esm/client/levr-provider.js +201 -0
  54. package/dist/esm/client/levr-provider.js.map +1 -0
  55. package/dist/esm/client/query-keys.js +61 -0
  56. package/dist/esm/client/query-keys.js.map +1 -0
  57. package/dist/esm/constants.js +182 -0
  58. package/dist/esm/constants.js.map +1 -0
  59. package/dist/esm/deploy-v4.js +46 -0
  60. package/dist/esm/deploy-v4.js.map +1 -0
  61. package/dist/esm/fee-receivers.js +52 -0
  62. package/dist/esm/fee-receivers.js.map +1 -0
  63. package/dist/esm/governance.js +555 -0
  64. package/dist/esm/governance.js.map +1 -0
  65. package/dist/esm/index.js +18 -0
  66. package/dist/esm/index.js.map +1 -0
  67. package/dist/esm/project.js +146 -0
  68. package/dist/esm/project.js.map +1 -0
  69. package/dist/esm/projects.js +212 -0
  70. package/dist/esm/projects.js.map +1 -0
  71. package/dist/esm/proposals.js +98 -0
  72. package/dist/esm/proposals.js.map +1 -0
  73. package/dist/esm/quote-v4.js +169 -0
  74. package/dist/esm/quote-v4.js.map +1 -0
  75. package/dist/esm/schema/base.schema.js +11 -0
  76. package/dist/esm/schema/base.schema.js.map +1 -0
  77. package/dist/esm/schema/clanker.schema.js +191 -0
  78. package/dist/esm/schema/clanker.schema.js.map +1 -0
  79. package/dist/esm/schema/index.js +4 -0
  80. package/dist/esm/schema/index.js.map +1 -0
  81. package/dist/esm/schema/levr.schema.js +114 -0
  82. package/dist/esm/schema/levr.schema.js.map +1 -0
  83. package/dist/esm/stake.js +384 -0
  84. package/dist/esm/stake.js.map +1 -0
  85. package/dist/esm/swap-v4.js +281 -0
  86. package/dist/esm/swap-v4.js.map +1 -0
  87. package/dist/esm/types.js +2 -0
  88. package/dist/esm/types.js.map +1 -0
  89. package/dist/esm/util.js +19 -0
  90. package/dist/esm/util.js.map +1 -0
  91. package/dist/types/abis/IClankerAirdrop.d.ts +348 -0
  92. package/dist/types/abis/IClankerHookDynamicFee.d.ts +156 -0
  93. package/dist/types/abis/IClankerHookStaticFee.d.ts +58 -0
  94. package/dist/types/abis/IClankerLPLocker.d.ts +316 -0
  95. package/dist/types/abis/IClankerLpLockerMultiple.d.ts +481 -0
  96. package/dist/types/abis/IClankerToken.d.ts +326 -0
  97. package/dist/types/abis/LevrFactory_v1.d.ts +471 -0
  98. package/dist/types/abis/LevrForwarder_v1.d.ts +478 -0
  99. package/dist/types/abis/LevrGovernor_v1.d.ts +562 -0
  100. package/dist/types/abis/LevrStakedToken_v1.d.ts +338 -0
  101. package/dist/types/abis/LevrStaking_v1.d.ts +468 -0
  102. package/dist/types/abis/LevrTreasury_v1.d.ts +169 -0
  103. package/dist/types/abis/Permit2.d.ts +54 -0
  104. package/dist/types/abis/V4Quoter.d.ts +496 -0
  105. package/dist/types/abis/WETH9.d.ts +244 -0
  106. package/dist/types/abis/index.d.ts +15 -0
  107. package/dist/types/balance.d.ts +24 -0
  108. package/dist/types/balance.d.ts.map +1 -0
  109. package/dist/types/build-calldatas-v4.d.ts +20 -0
  110. package/dist/types/build-calldatas-v4.d.ts.map +1 -0
  111. package/dist/types/build-clanker-v4.d.ts +12 -0
  112. package/dist/types/build-clanker-v4.d.ts.map +1 -0
  113. package/dist/types/client/hook/index.d.ts +32 -0
  114. package/dist/types/client/hook/index.d.ts.map +1 -0
  115. package/dist/types/client/hook/use-balance.d.ts +18 -0
  116. package/dist/types/client/hook/use-balance.d.ts.map +1 -0
  117. package/dist/types/client/hook/use-clanker.d.ts +23 -0
  118. package/dist/types/client/hook/use-clanker.d.ts.map +1 -0
  119. package/dist/types/client/hook/use-deploy.d.ts +45 -0
  120. package/dist/types/client/hook/use-deploy.d.ts.map +1 -0
  121. package/dist/types/client/hook/use-fee-receivers.d.ts +26 -0
  122. package/dist/types/client/hook/use-fee-receivers.d.ts.map +1 -0
  123. package/dist/types/client/hook/use-governance.d.ts +145 -0
  124. package/dist/types/client/hook/use-governance.d.ts.map +1 -0
  125. package/dist/types/client/hook/use-prepare.d.ts +21 -0
  126. package/dist/types/client/hook/use-prepare.d.ts.map +1 -0
  127. package/dist/types/client/hook/use-project.d.ts +11 -0
  128. package/dist/types/client/hook/use-project.d.ts.map +1 -0
  129. package/dist/types/client/hook/use-projects.d.ts +6 -0
  130. package/dist/types/client/hook/use-projects.d.ts.map +1 -0
  131. package/dist/types/client/hook/use-proposals.d.ts +16 -0
  132. package/dist/types/client/hook/use-proposals.d.ts.map +1 -0
  133. package/dist/types/client/hook/use-register.d.ts +31 -0
  134. package/dist/types/client/hook/use-register.d.ts.map +1 -0
  135. package/dist/types/client/hook/use-stake.d.ts +195 -0
  136. package/dist/types/client/hook/use-stake.d.ts.map +1 -0
  137. package/dist/types/client/hook/use-swap.d.ts +59 -0
  138. package/dist/types/client/hook/use-swap.d.ts.map +1 -0
  139. package/dist/types/client/index.d.ts +4 -0
  140. package/dist/types/client/index.d.ts.map +1 -0
  141. package/dist/types/client/levr-provider.d.ts +127 -0
  142. package/dist/types/client/levr-provider.d.ts.map +1 -0
  143. package/dist/types/client/query-keys.d.ts +61 -0
  144. package/dist/types/client/query-keys.d.ts.map +1 -0
  145. package/dist/types/constants.d.ts +101 -0
  146. package/dist/types/constants.d.ts.map +1 -0
  147. package/dist/types/deploy-v4.d.ts +13 -0
  148. package/dist/types/deploy-v4.d.ts.map +1 -0
  149. package/dist/types/fee-receivers.d.ts +29 -0
  150. package/dist/types/fee-receivers.d.ts.map +1 -0
  151. package/dist/types/governance.d.ts +205 -0
  152. package/dist/types/governance.d.ts.map +1 -0
  153. package/dist/types/index.d.ts +18 -0
  154. package/dist/types/index.d.ts.map +1 -0
  155. package/dist/types/project.d.ts +51 -0
  156. package/dist/types/project.d.ts.map +1 -0
  157. package/dist/types/projects.d.ts +20 -0
  158. package/dist/types/projects.d.ts.map +1 -0
  159. package/dist/types/proposals.d.ts +20 -0
  160. package/dist/types/proposals.d.ts.map +1 -0
  161. package/dist/types/quote-v4.d.ts +54 -0
  162. package/dist/types/quote-v4.d.ts.map +1 -0
  163. package/dist/types/schema/base.schema.d.ts +5 -0
  164. package/dist/types/schema/base.schema.d.ts.map +1 -0
  165. package/dist/types/schema/clanker.schema.d.ts +104 -0
  166. package/dist/types/schema/clanker.schema.d.ts.map +1 -0
  167. package/dist/types/schema/index.d.ts +4 -0
  168. package/dist/types/schema/index.d.ts.map +1 -0
  169. package/dist/types/schema/levr.schema.d.ts +34 -0
  170. package/dist/types/schema/levr.schema.d.ts.map +1 -0
  171. package/dist/types/stake.d.ts +137 -0
  172. package/dist/types/stake.d.ts.map +1 -0
  173. package/dist/types/swap-v4.d.ts +97 -0
  174. package/dist/types/swap-v4.d.ts.map +1 -0
  175. package/dist/types/types.d.ts +20 -0
  176. package/dist/types/types.d.ts.map +1 -0
  177. package/dist/types/util.d.ts +5 -0
  178. package/dist/types/util.d.ts.map +1 -0
  179. package/package.json +100 -0
@@ -0,0 +1,72 @@
1
+ import { erc20Abi, formatUnits, zeroAddress } from 'viem';
2
+ /**
3
+ * Get balances for multiple tokens including native currency
4
+ * @param publicClient - The public client to use for queries
5
+ * @param address - The address to check balances for
6
+ * @param tokens - Array of token configurations (use zeroAddress for native currency)
7
+ * @returns Object with balances keyed by token address or custom key
8
+ */
9
+ export async function balance({ publicClient, address, tokens, }) {
10
+ if (!address || tokens.length === 0)
11
+ return {};
12
+ const balances = {};
13
+ // Separate native and ERC20 tokens
14
+ const erc20Tokens = tokens.filter((token) => token.address !== zeroAddress);
15
+ const nativeTokens = tokens.filter((token) => token.address === zeroAddress);
16
+ // Handle native balance
17
+ if (nativeTokens.length > 0) {
18
+ try {
19
+ const nativeBalance = await publicClient.getBalance({ address });
20
+ nativeTokens.forEach((token) => {
21
+ const key = token.key || token.address;
22
+ balances[key] = {
23
+ raw: nativeBalance,
24
+ formatted: formatUnits(nativeBalance, token.decimals),
25
+ };
26
+ });
27
+ }
28
+ catch (error) {
29
+ // If native balance fetch fails, set to 0
30
+ nativeTokens.forEach((token) => {
31
+ const key = token.key || token.address;
32
+ balances[key] = {
33
+ raw: 0n,
34
+ formatted: '0',
35
+ };
36
+ });
37
+ }
38
+ }
39
+ // Handle ERC20 balances using multicall
40
+ if (erc20Tokens.length > 0) {
41
+ try {
42
+ const results = await publicClient.multicall({
43
+ contracts: erc20Tokens.map((token) => ({
44
+ address: token.address,
45
+ abi: erc20Abi,
46
+ functionName: 'balanceOf',
47
+ args: [address],
48
+ })),
49
+ });
50
+ erc20Tokens.forEach((token, index) => {
51
+ const result = results[index].result;
52
+ const key = token.key || token.address;
53
+ balances[key] = {
54
+ raw: result || 0n,
55
+ formatted: formatUnits(result || 0n, token.decimals),
56
+ };
57
+ });
58
+ }
59
+ catch (error) {
60
+ // If multicall fails, set all ERC20 balances to 0
61
+ erc20Tokens.forEach((token) => {
62
+ const key = token.key || token.address;
63
+ balances[key] = {
64
+ raw: 0n,
65
+ formatted: '0',
66
+ };
67
+ });
68
+ }
69
+ }
70
+ return balances;
71
+ }
72
+ //# sourceMappingURL=balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/balance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAqBzD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAC5B,YAAY,EACZ,OAAO,EACP,MAAM,GACQ;IACd,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAE9C,MAAM,QAAQ,GAAkC,EAAE,CAAA;IAElD,mCAAmC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,WAAW,CAAC,CAAA;IAC3E,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,WAAW,CAAC,CAAA;IAE5E,wBAAwB;IACxB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;YAEhE,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAA;gBACtC,QAAQ,CAAC,GAAG,CAAC,GAAG;oBACd,GAAG,EAAE,aAAa;oBAClB,SAAS,EAAE,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC;iBACtD,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0CAA0C;YAC1C,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAA;gBACtC,QAAQ,CAAC,GAAG,CAAC,GAAG;oBACd,GAAG,EAAE,EAAE;oBACP,SAAS,EAAE,GAAG;iBACf,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC;gBAC3C,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACrC,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,GAAG,EAAE,QAAQ;oBACb,YAAY,EAAE,WAAoB;oBAClC,IAAI,EAAE,CAAC,OAAO,CAAC;iBAChB,CAAC,CAAC;aACJ,CAAC,CAAA;YAEF,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAA;gBACpC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAA;gBACtC,QAAQ,CAAC,GAAG,CAAC,GAAG;oBACd,GAAG,EAAG,MAAiB,IAAI,EAAE;oBAC7B,SAAS,EAAE,WAAW,CAAE,MAAiB,IAAI,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC;iBACjE,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kDAAkD;YAClD,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAA;gBACtC,QAAQ,CAAC,GAAG,CAAC,GAAG;oBACd,GAAG,EAAE,EAAE;oBACP,SAAS,EAAE,GAAG;iBACf,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { CLANKERS } from "clanker-sdk";
2
+ import { decodeFunctionResult, encodeFunctionData } from "viem";
3
+ import * as chains from "viem/chains";
4
+ import { LevrFactory_v1, LevrForwarder_v1 } from "./abis/index.js";
5
+ import { buildClankerV4 } from "./build-clanker-v4.js";
6
+ export const clankerV4Factory = {
7
+ // In our dev monorepo, we have a clanker_v4_anvil contract, but in the remote package, it's not defined
8
+ [chains.anvil.id]: CLANKERS?.clanker_v4_anvil?.address,
9
+ [chains.base.id]: CLANKERS.clanker_v4.address,
10
+ [chains.baseSepolia.id]: CLANKERS.clanker_v4_sepolia.address,
11
+ };
12
+ export const buildCalldatasV4 = async ({ c, clanker, publicClient, wallet, factoryAddress, forwarderAddress, }) => {
13
+ const deployer = wallet.account?.address;
14
+ if (!publicClient.chain?.id)
15
+ throw new Error("Chain ID not found");
16
+ const chainId = publicClient.chain.id;
17
+ const clankerFactory = clankerV4Factory?.[chainId];
18
+ if (!clankerFactory)
19
+ throw new Error("Clanker factory not found");
20
+ if (!deployer)
21
+ throw new Error("Deployer address not found");
22
+ const prepareForDeploymentTransaction = encodeFunctionData({
23
+ abi: LevrFactory_v1,
24
+ functionName: "prepareForDeployment",
25
+ args: [],
26
+ });
27
+ const result = await publicClient.call({
28
+ to: factoryAddress, // Your LevrFactory_v1 contract address
29
+ data: prepareForDeploymentTransaction,
30
+ account: wallet.account, // The sender address
31
+ });
32
+ if (!result.data)
33
+ throw new Error("Prepare for deployment failed");
34
+ // Then decode the result
35
+ const [treasury, staking] = decodeFunctionResult({
36
+ abi: LevrFactory_v1,
37
+ functionName: "prepareForDeployment",
38
+ data: result.data,
39
+ });
40
+ const config = buildClankerV4({
41
+ c,
42
+ treasuryAddress: treasury,
43
+ deployer,
44
+ staking,
45
+ chainId,
46
+ });
47
+ // Validate and get the deployment transaction
48
+ // The SDK computes the token address deterministically when vanity is enabled
49
+ const deployContractCall = await clanker.getDeployTransaction(config);
50
+ // Extract the expected token address from the deployment call
51
+ // When vanity: true, the SDK uses CREATE2 and computes the address in advance
52
+ const tokenAddress = deployContractCall.expectedAddress;
53
+ if (!tokenAddress) {
54
+ throw new Error("Expected token address not found - ensure vanity is enabled");
55
+ }
56
+ const deployTransaction = encodeFunctionData({
57
+ abi: deployContractCall.abi,
58
+ functionName: deployContractCall.functionName,
59
+ args: deployContractCall.args,
60
+ });
61
+ const proxyDeployTransaction = encodeFunctionData({
62
+ abi: LevrForwarder_v1,
63
+ functionName: "executeTransaction",
64
+ args: [clankerFactory, deployTransaction],
65
+ });
66
+ // Calculate the ETH value needed for devBuy (if specified)
67
+ const devBuyValue = config.devBuy ? BigInt(Math.floor(config.devBuy.ethAmount * 1000000000000000000)) : 0n;
68
+ const callDatas = [
69
+ {
70
+ target: factoryAddress,
71
+ allowFailure: false,
72
+ value: 0n,
73
+ callData: prepareForDeploymentTransaction,
74
+ },
75
+ {
76
+ target: forwarderAddress,
77
+ allowFailure: false,
78
+ value: devBuyValue, // ETH forwarded through executeTransaction to Clanker deployment
79
+ callData: proxyDeployTransaction,
80
+ },
81
+ {
82
+ target: factoryAddress,
83
+ allowFailure: false,
84
+ value: 0n,
85
+ callData: encodeFunctionData({
86
+ abi: LevrFactory_v1,
87
+ functionName: "register",
88
+ args: [tokenAddress],
89
+ }),
90
+ },
91
+ ];
92
+ return {
93
+ callDatas,
94
+ clankerTokenAddress: tokenAddress,
95
+ totalValue: devBuyValue, // Total ETH to send with executeMulticall
96
+ };
97
+ };
98
+ //# sourceMappingURL=build-calldatas-v4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-calldatas-v4.js","sourceRoot":"","sources":["../../src/build-calldatas-v4.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAGtC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAA;AAC/D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAmBnD,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC7D,wGAAwG;IACxG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAG,QAAgB,EAAE,gBAAgB,EAAE,OAAO;IAC/D,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO;IAC7C,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,OAAO;CAC7D,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACrC,CAAC,EACD,OAAO,EACP,YAAY,EACZ,MAAM,EACN,cAAc,EACd,gBAAgB,GACO,EAAuC,EAAE;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,CAAA;IAExC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAClE,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAA;IACrC,MAAM,cAAc,GAAG,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAA;IAClD,IAAI,CAAC,cAAc;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAEjE,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAE5D,MAAM,+BAA+B,GAAG,kBAAkB,CAAC;QACzD,GAAG,EAAE,cAAc;QACnB,YAAY,EAAE,sBAAsB;QACpC,IAAI,EAAE,EAAE;KACT,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC;QACrC,EAAE,EAAE,cAAc,EAAE,uCAAuC;QAC3D,IAAI,EAAE,+BAA+B;QACrC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,qBAAqB;KAC/C,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAElE,yBAAyB;IACzB,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,oBAAoB,CAAC;QAC/C,GAAG,EAAE,cAAc;QACnB,YAAY,EAAE,sBAAsB;QACpC,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,cAAc,CAAC;QAC5B,CAAC;QACD,eAAe,EAAE,QAAQ;QACzB,QAAQ;QACR,OAAO;QACP,OAAO;KACR,CAAC,CAAA;IAEF,8CAA8C;IAC9C,8EAA8E;IAC9E,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;IAErE,8DAA8D;IAC9D,8EAA8E;IAC9E,MAAM,YAAY,GAAG,kBAAkB,CAAC,eAAe,CAAA;IACvD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;IAChF,CAAC;IAED,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;QAC3C,GAAG,EAAE,kBAAkB,CAAC,GAAG;QAC3B,YAAY,EAAE,kBAAkB,CAAC,YAAY;QAC7C,IAAI,EAAE,kBAAkB,CAAC,IAAI;KAC9B,CAAC,CAAA;IAEF,MAAM,sBAAsB,GAAG,kBAAkB,CAAC;QAChD,GAAG,EAAE,gBAAgB;QACrB,YAAY,EAAE,oBAAoB;QAClC,IAAI,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;KAC1C,CAAC,CAAA;IAEF,2DAA2D;IAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE3F,MAAM,SAAS,GAAe;QAC5B;YACE,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,KAAK;YACnB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,+BAA+B;SAC1C;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,YAAY,EAAE,KAAK;YACnB,KAAK,EAAE,WAAW,EAAE,iEAAiE;YACrF,QAAQ,EAAE,sBAAsB;SACjC;QACD;YACE,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,KAAK;YACnB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,kBAAkB,CAAC;gBAC3B,GAAG,EAAE,cAAc;gBACnB,YAAY,EAAE,UAAU;gBACxB,IAAI,EAAE,CAAC,YAAY,CAAC;aACrB,CAAC;SACH;KACF,CAAA;IAED,OAAO;QACL,SAAS;QACT,mBAAmB,EAAE,YAAY;QACjC,UAAU,EAAE,WAAW,EAAE,0CAA0C;KACpE,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,128 @@
1
+ import { createMerkleTree, FEE_CONFIGS } from "clanker-sdk";
2
+ import { omit } from "lodash";
3
+ import { STAKING_REWARDS, STATIC_FEE_TIERS, TREASURY_AIRDROP_AMOUNTS } from "./constants.js";
4
+ export const buildClankerV4 = ({ c, treasuryAddress, deployer, staking, chainId, }) => {
5
+ const airdrop = getAirdrop(c.airdrop, treasuryAddress, c.treasuryFunding);
6
+ const devBuy = getDevBuy(c.devBuy);
7
+ const metadata = getMetadata(c.metadata);
8
+ const fees = getFees(c.fees);
9
+ const rewards = getRewards(deployer, staking, c.stakingReward, c.rewards);
10
+ const config = {
11
+ ...omit(c, "treasuryFunding", "stakingReward"),
12
+ tokenAdmin: deployer,
13
+ devBuy,
14
+ airdrop,
15
+ metadata,
16
+ fees,
17
+ rewards,
18
+ chainId: chainId,
19
+ vanity: true,
20
+ };
21
+ return config;
22
+ };
23
+ /**
24
+ * Builds the fees for the Clanker token using the Levr fees
25
+ * @param fees - Levr fees
26
+ * @returns Clanker fees
27
+ */
28
+ const getFees = (fees) => {
29
+ if (fees.type === "static") {
30
+ return {
31
+ type: "static",
32
+ clankerFee: STATIC_FEE_TIERS[fees.feeTier],
33
+ pairedFee: STATIC_FEE_TIERS[fees.feeTier],
34
+ };
35
+ }
36
+ if (fees.type === "dynamic 3%") {
37
+ return FEE_CONFIGS.Dynamic3;
38
+ }
39
+ return FEE_CONFIGS.Dynamic3;
40
+ };
41
+ /**
42
+ * Builds the rewards for the Clanker token using the Levr rewards
43
+ * @param rewards - Levr rewards
44
+ * @returns Clanker rewards
45
+ */
46
+ const getRewards = (admin, staking, stakingReward = "100%", rewards) => {
47
+ const recipients = rewards
48
+ ? rewards.map((r) => ({
49
+ admin: r.admin,
50
+ recipient: r.recipient,
51
+ // Convert percentage to basis points
52
+ bps: r.percentage * 100,
53
+ token: r.token,
54
+ }))
55
+ : [];
56
+ recipients.push({
57
+ admin,
58
+ recipient: staking,
59
+ bps: STAKING_REWARDS[stakingReward],
60
+ token: "Both",
61
+ });
62
+ return { recipients };
63
+ };
64
+ /**
65
+ * Builds the metadata for the Clanker token using the Levr metadata
66
+ * @param metadata - Levr metadata
67
+ * @returns Clanker metadata
68
+ */
69
+ const getMetadata = (metadata) => {
70
+ if (!metadata)
71
+ return undefined;
72
+ const { description, ...socials } = metadata;
73
+ const platformMap = {
74
+ telegramLink: "telegram",
75
+ websiteLink: "website",
76
+ xLink: "x",
77
+ farcasterLink: "farcaster",
78
+ };
79
+ const socialMediaUrls = Object.entries(socials).map(([key, value]) => ({
80
+ platform: platformMap[key],
81
+ url: value,
82
+ }));
83
+ return {
84
+ description,
85
+ socialMediaUrls,
86
+ };
87
+ };
88
+ /**
89
+ * Builds the dev buy for the Clanker token using the Levr dev buy
90
+ * @param devBuy - Levr dev buy
91
+ * @returns Clanker dev buy
92
+ */
93
+ const getDevBuy = (devBuy) => {
94
+ if (!devBuy)
95
+ return undefined;
96
+ return {
97
+ ethAmount: Number(devBuy.replace(" ETH", "")),
98
+ };
99
+ };
100
+ /**
101
+ * Builds the airdrop for the Clanker token using the Levr airdrop
102
+ * @param airdrop - Levr airdrop
103
+ * @param treasuryAddress - Treasury address
104
+ * @param treasuryAirdropAmount - Treasury airdrop amount
105
+ * @returns Clanker airdrop
106
+ */
107
+ const getAirdrop = (airdrop, treasuryAddress, treasuryAirdrop) => {
108
+ // Always include treasury in airdrop, even if no other recipients specified
109
+ const airdropData = airdrop
110
+ ? airdrop.map((a) => ({
111
+ account: a.account,
112
+ amount: a.amount,
113
+ }))
114
+ : [];
115
+ // Always add treasury to airdrop
116
+ airdropData.push({
117
+ account: treasuryAddress,
118
+ amount: TREASURY_AIRDROP_AMOUNTS[treasuryAirdrop],
119
+ });
120
+ const merkleTree = createMerkleTree(airdropData);
121
+ return {
122
+ amount: airdropData.reduce((acc, curr) => acc + curr.amount, 0),
123
+ merkleRoot: merkleTree.root,
124
+ lockupDuration: 86400, // 1 day minimum required by Clanker SDK
125
+ vestingDuration: 0,
126
+ };
127
+ };
128
+ //# sourceMappingURL=build-clanker-v4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-clanker-v4.js","sourceRoot":"","sources":["../../src/build-clanker-v4.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { useLevrContext } from "../levr-provider.js";
2
+ // ========================================
3
+ // SIMPLE CONTEXT ACCESSORS (one-liner exports)
4
+ // ========================================
5
+ /**
6
+ * Hook to access project data from LevrProvider
7
+ */
8
+ export const useProject = () => useLevrContext().project;
9
+ /**
10
+ * Hook to access balance data from LevrProvider
11
+ */
12
+ export const useBalance = () => useLevrContext().balances;
13
+ /**
14
+ * Hook to access proposals from LevrProvider
15
+ */
16
+ export const useProposals = () => useLevrContext().proposals;
17
+ /**
18
+ * Hook to access clanker token metadata from LevrProvider
19
+ */
20
+ export const useClankerToken = () => useLevrContext().tokenData;
21
+ // ========================================
22
+ // COMPLEX HOOKS (with mutations/callbacks)
23
+ // ========================================
24
+ export * from "./use-clanker.js";
25
+ export * from "./use-fee-receivers.js";
26
+ export * from "./use-governance.js";
27
+ export * from "./use-stake.js";
28
+ export * from "./use-swap.js";
29
+ // ========================================
30
+ // OTHER HOOKS (not part of Levr context)
31
+ // ========================================
32
+ export * from "./use-deploy.js";
33
+ export * from "./use-prepare.js";
34
+ export * from "./use-projects.js";
35
+ export * from "./use-register.js";
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/client/hook/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,2CAA2C;AAC3C,+CAA+C;AAC/C,2CAA2C;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,OAAO,CAAA;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAA;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,SAAS,CAAA;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,SAAS,CAAA;AAE/D,2CAA2C;AAC3C,2CAA2C;AAC3C,2CAA2C;AAE3C,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAE1B,2CAA2C;AAC3C,yCAAyC;AACzC,2CAA2C;AAE3C,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { useMemo } from "react";
4
+ import { zeroAddress } from "viem";
5
+ import { useAccount, useChainId, usePublicClient } from "wagmi";
6
+ import { balance } from "../../balance.js";
7
+ import { WETH } from "../../constants.js";
8
+ import { queryKeys } from "../query-keys.js";
9
+ /**
10
+ * Internal: Creates balance query with all logic
11
+ * Used by LevrProvider
12
+ */
13
+ export function useBalanceQuery({ clankerToken, projectTokenDecimals = 18, enabled: e = true, }) {
14
+ const publicClient = usePublicClient();
15
+ const chainId = useChainId();
16
+ const { address: userAddress } = useAccount();
17
+ const wethAddress = WETH(chainId)?.address;
18
+ const tokenAddresses = useMemo(() => {
19
+ const addresses = [];
20
+ if (clankerToken) {
21
+ addresses.push({
22
+ address: clankerToken,
23
+ decimals: projectTokenDecimals,
24
+ key: "token",
25
+ });
26
+ }
27
+ if (wethAddress) {
28
+ addresses.push({
29
+ address: wethAddress,
30
+ decimals: 18,
31
+ key: "weth",
32
+ });
33
+ }
34
+ // Add native ETH balance
35
+ addresses.push({
36
+ address: zeroAddress,
37
+ decimals: 18,
38
+ key: "eth",
39
+ });
40
+ return addresses;
41
+ }, [clankerToken, projectTokenDecimals, wethAddress]);
42
+ return useQuery({
43
+ queryKey: queryKeys.balance(tokenAddresses.map((t) => t.address).join(","), userAddress),
44
+ queryFn: async () => {
45
+ if (!userAddress || tokenAddresses.length === 0)
46
+ return {};
47
+ return balance({
48
+ publicClient: publicClient,
49
+ address: userAddress,
50
+ tokens: tokenAddresses,
51
+ });
52
+ },
53
+ enabled: e && !!publicClient && !!userAddress && tokenAddresses.length > 0,
54
+ refetchInterval: 10000,
55
+ });
56
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-balance.js","sourceRoot":"","sources":["../../../../src/client/hook/use-balance.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAG/D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAczC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,YAAY,EACZ,oBAAoB,GAAG,EAAE,EACzB,OAAO,EAAE,CAAC,GAAG,IAAI,GACK;IACtB,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,CAAA;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAE1C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,SAAS,GAA+D,EAAE,CAAA;QAEhF,IAAI,YAAY,EAAE,CAAC;YACjB,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO,EAAE,YAAY;gBACrB,QAAQ,EAAE,oBAAoB;gBAC9B,GAAG,EAAE,OAAO;aACb,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,SAAS,CAAC,IAAI,CAAC;gBACb,OAAO,EAAE,WAAW;gBACpB,QAAQ,EAAE,EAAE;gBACZ,GAAG,EAAE,MAAM;aACZ,CAAC,CAAA;QACJ,CAAC;QAED,yBAAyB;QACzB,SAAS,CAAC,IAAI,CAAC;YACb,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,EAAE;YACZ,GAAG,EAAE,KAAK;SACX,CAAC,CAAA;QAEF,OAAO,SAAS,CAAA;IAClB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAA;IAErD,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,WAAY,CAAC;QACzF,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,WAAW,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAA;YAC1D,OAAO,OAAO,CAAC;gBACb,YAAY,EAAE,YAAa;gBAC3B,OAAO,EAAE,WAAW;gBACpB,MAAM,EAAE,cAAc;aACvB,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAC1E,eAAe,EAAE,MAAM;KACxB,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { Clanker } from "clanker-sdk/v4";
4
+ import { usePublicClient, useWalletClient } from "wagmi";
5
+ import { IClankerToken } from "../../abis/index.js";
6
+ import { queryKeys } from "../query-keys.js";
7
+ /**
8
+ * Internal: Creates clanker token metadata query
9
+ * Used by LevrProvider
10
+ */
11
+ export function useClankerTokenQuery({ clankerToken, enabled: e = true, }) {
12
+ const publicClient = usePublicClient();
13
+ return useQuery({
14
+ queryKey: queryKeys.clankerToken(clankerToken),
15
+ queryFn: async () => {
16
+ const allData = await publicClient?.readContract({
17
+ address: clankerToken,
18
+ abi: IClankerToken,
19
+ functionName: "allData",
20
+ });
21
+ if (!allData)
22
+ return null;
23
+ const [originalAdmin, admin, image, metadata, context] = allData;
24
+ return {
25
+ originalAdmin,
26
+ admin,
27
+ image,
28
+ metadata,
29
+ context,
30
+ };
31
+ },
32
+ enabled: e && !!clankerToken && !!publicClient,
33
+ });
34
+ }
35
+ // ========================================
36
+ // PUBLIC HOOK (exported from index.ts)
37
+ // ========================================
38
+ /**
39
+ * Hook to get Clanker SDK instance
40
+ * For token metadata, use useClankerToken() from index.ts
41
+ */
42
+ export function useClanker(_clankerToken) {
43
+ const publicClient = usePublicClient();
44
+ const { data: wallet } = useWalletClient();
45
+ return useQuery({
46
+ queryKey: queryKeys.clanker(publicClient?.chain.id, wallet?.account?.address),
47
+ queryFn: () => {
48
+ try {
49
+ return new Clanker({ publicClient: publicClient, wallet: wallet });
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ },
55
+ enabled: !!publicClient && !!wallet,
56
+ });
57
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-clanker.js","sourceRoot":"","sources":["../../../../src/client/hook/use-clanker.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAOzC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,YAAY,EACZ,OAAO,EAAE,CAAC,GAAG,IAAI,GACU;IAC3B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IAEtC,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,SAAS,CAAC,YAAY,CAAC,YAAa,CAAC;QAC/C,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,YAAY,CAAC;gBAC/C,OAAO,EAAE,YAAa;gBACtB,GAAG,EAAE,aAAa;gBAClB,YAAY,EAAE,SAAS;aACxB,CAAC,CAAA;YAEF,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAA;YAEzB,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;YAEhE,OAAO;gBACL,aAAa;gBACb,KAAK;gBACL,KAAK;gBACL,QAAQ;gBACR,OAAO;aACR,CAAA;QACH,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY;KAC/C,CAAC,CAAA;AACJ,CAAC;AAED,2CAA2C;AAC3C,uCAAuC;AACvC,2CAA2C;AAE3C;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,aAA6B;IACtD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAA;IAE1C,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;QAC7E,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,CAAC;gBACH,OAAO,IAAI,OAAO,CAAC,EAAE,YAAY,EAAE,YAAa,EAAE,MAAM,EAAE,MAAO,EAAE,CAAC,CAAA;YACtE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM;KACpC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { useMutation } from "@tanstack/react-query";
2
+ import { deployV4 } from "../../deploy-v4.js";
3
+ import { useClanker } from "./use-clanker.js";
4
+ /**
5
+ * Deploys a Clanker token and registers it with the Levr factory.
6
+ * Returns tx hash and deployed address.
7
+ */
8
+ export function useDeploy({ onSuccess, onError }) {
9
+ const clanker = useClanker();
10
+ return useMutation({
11
+ mutationFn: (c) => deployV4({ c, clanker: clanker.data }),
12
+ onSuccess,
13
+ onError,
14
+ });
15
+ }
16
+ //# sourceMappingURL=use-deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-deploy.js","sourceRoot":"","sources":["../../../../src/client/hook/use-deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAQ1C;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAmB;IAC/D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAE5B,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,CAAC,CAAkC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1F,SAAS;QACT,OAAO;KACR,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { useMutation, useQuery } from "@tanstack/react-query";
3
+ import { useAccount, useChainId, usePublicClient, useWalletClient } from "wagmi";
4
+ import { feeReceivers, updateFeeReceiver } from "../../fee-receivers.js";
5
+ import { useLevrContext } from "../levr-provider.js";
6
+ import { queryKeys } from "../query-keys.js";
7
+ /**
8
+ * Internal: Creates fee receivers query with all logic
9
+ * Used by LevrProvider
10
+ */
11
+ export function useFeeReceiversQuery({ clankerToken, enabled: e = true, }) {
12
+ const publicClient = usePublicClient();
13
+ const chainId = useChainId();
14
+ const { address: userAddress } = useAccount();
15
+ return useQuery({
16
+ queryKey: queryKeys.feeReceivers(clankerToken, userAddress, chainId),
17
+ queryFn: () => feeReceivers({
18
+ publicClient: publicClient,
19
+ clankerToken: clankerToken,
20
+ chainId: chainId,
21
+ userAddress,
22
+ }),
23
+ enabled: e && !!publicClient && !!chainId && !!clankerToken,
24
+ staleTime: 15000,
25
+ });
26
+ }
27
+ /**
28
+ * Hook to access fee receivers query and mutations
29
+ * Returns both query data and mutation function
30
+ */
31
+ export function useFeeReceivers({ clankerToken: _clankerToken, enabled: _e = true, onSuccess, onError, } = {}) {
32
+ const { feeReceivers: query, refetch } = useLevrContext();
33
+ const publicClient = usePublicClient();
34
+ const wallet = useWalletClient();
35
+ const chainId = publicClient?.chain?.id;
36
+ const mutate = useMutation({
37
+ mutationFn: (params) => updateFeeReceiver({
38
+ walletClient: wallet.data,
39
+ clankerToken: params.clankerToken,
40
+ chainId: chainId,
41
+ rewardIndex: params.rewardIndex,
42
+ newRecipient: params.newRecipient,
43
+ }),
44
+ onSuccess: async (hash) => {
45
+ await refetch.feeReceivers();
46
+ onSuccess?.(hash);
47
+ },
48
+ onError: onError,
49
+ });
50
+ return {
51
+ query,
52
+ mutate,
53
+ };
54
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-fee-receivers.js","sourceRoot":"","sources":["../../../../src/client/hook/use-fee-receivers.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAGhF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAOzC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,YAAY,EACZ,OAAO,EAAE,CAAC,GAAG,IAAI,GACU;IAC3B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,CAAA;IAE7C,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,SAAS,CAAC,YAAY,CAAC,YAAa,EAAE,WAAW,EAAE,OAAO,CAAC;QACrE,OAAO,EAAE,GAAG,EAAE,CACZ,YAAY,CAAC;YACX,YAAY,EAAE,YAAa;YAC3B,YAAY,EAAE,YAAa;YAC3B,OAAO,EAAE,OAAQ;YACjB,WAAW;SACZ,CAAC;QACJ,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,YAAY;QAC3D,SAAS,EAAE,MAAM;KAClB,CAAC,CAAA;AACJ,CAAC;AAaD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,EAAE,GAAG,IAAI,EAClB,SAAS,EACT,OAAO,MACkB,EAAE;IAC3B,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAA;IACzD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,YAAY,EAAE,KAAK,EAAE,EAAE,CAAA;IAEvC,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,MAAiE,EAAE,EAAE,CAChF,iBAAiB,CAAC;YAChB,YAAY,EAAE,MAAM,CAAC,IAAK;YAC1B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,OAAO,EAAE,OAAQ;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;QACJ,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACxB,MAAM,OAAO,CAAC,YAAY,EAAE,CAAA;YAC5B,SAAS,EAAE,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;QACD,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;IAEF,OAAO;QACL,KAAK;QACL,MAAM;KACP,CAAA;AACH,CAAC"}