levr-sdk 0.2.1 → 0.3.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 (131) hide show
  1. package/dist/esm/abis/ClankerAirdropV2.js +289 -0
  2. package/dist/esm/abis/ClankerVault.js +215 -0
  3. package/dist/esm/abis/LevrFactory_v1.js +23 -0
  4. package/dist/esm/abis/LevrFeeSplitterFactory_v1.js +197 -0
  5. package/dist/esm/abis/LevrFeeSplitter_v1.js +544 -0
  6. package/dist/esm/abis/LevrGovernor_v1.js +10 -0
  7. package/dist/esm/abis/index.js +4 -0
  8. package/dist/esm/airdrop.js +160 -0
  9. package/dist/esm/airdrop.js.map +1 -0
  10. package/dist/esm/build-calldatas-v4.js +3 -1
  11. package/dist/esm/build-calldatas-v4.js.map +1 -1
  12. package/dist/esm/build-clanker-v4.js +75 -25
  13. package/dist/esm/build-clanker-v4.js.map +1 -1
  14. package/dist/esm/client/hook/index.js +10 -0
  15. package/dist/esm/client/hook/index.js.map +1 -1
  16. package/dist/esm/client/hook/use-airdrop.js +8 -4
  17. package/dist/esm/client/hook/use-airdrop.js.map +1 -1
  18. package/dist/esm/client/hook/use-configure-splits.js +43 -0
  19. package/dist/esm/client/hook/use-configure-splits.js.map +1 -0
  20. package/dist/esm/client/hook/use-deploy.js +3 -3
  21. package/dist/esm/client/hook/use-deploy.js.map +1 -1
  22. package/dist/esm/client/hook/use-factory.js +33 -0
  23. package/dist/esm/client/hook/use-factory.js.map +1 -0
  24. package/dist/esm/client/hook/use-fee-receivers.js +4 -12
  25. package/dist/esm/client/hook/use-fee-receivers.js.map +1 -1
  26. package/dist/esm/client/hook/use-governance.js +18 -3
  27. package/dist/esm/client/hook/use-governance.js.map +1 -1
  28. package/dist/esm/client/hook/use-project.js +7 -3
  29. package/dist/esm/client/hook/use-project.js.map +1 -1
  30. package/dist/esm/client/hook/use-proposal.js +11 -5
  31. package/dist/esm/client/hook/use-proposal.js.map +1 -1
  32. package/dist/esm/client/hook/use-stake.js +1 -1
  33. package/dist/esm/client/hook/use-stake.js.map +1 -1
  34. package/dist/esm/client/hook/use-vault.js +67 -0
  35. package/dist/esm/client/hook/use-vault.js.map +1 -0
  36. package/dist/esm/client/levr-provider.js +18 -2
  37. package/dist/esm/client/levr-provider.js.map +1 -1
  38. package/dist/esm/client/query-keys.js +13 -1
  39. package/dist/esm/client/query-keys.js.map +1 -1
  40. package/dist/esm/constants.js +83 -6
  41. package/dist/esm/constants.js.map +1 -1
  42. package/dist/esm/deploy-v4.js +56 -3
  43. package/dist/esm/deploy-v4.js.map +1 -1
  44. package/dist/esm/factory.js +94 -0
  45. package/dist/esm/factory.js.map +1 -0
  46. package/dist/esm/fee-receivers.js +315 -4
  47. package/dist/esm/fee-receivers.js.map +1 -1
  48. package/dist/esm/fee-splitter.js +68 -0
  49. package/dist/esm/fee-splitter.js.map +1 -0
  50. package/dist/esm/governance.js +86 -9
  51. package/dist/esm/governance.js.map +1 -1
  52. package/dist/esm/index.js +5 -1
  53. package/dist/esm/index.js.map +1 -1
  54. package/dist/esm/ipfs-merkle-tree.js +130 -0
  55. package/dist/esm/ipfs-merkle-tree.js.map +1 -0
  56. package/dist/esm/project.js +114 -26
  57. package/dist/esm/project.js.map +1 -1
  58. package/dist/esm/schema/levr.schema.js +94 -33
  59. package/dist/esm/schema/levr.schema.js.map +1 -1
  60. package/dist/esm/stake.js +157 -19
  61. package/dist/esm/stake.js.map +1 -1
  62. package/dist/esm/vault.js +136 -0
  63. package/dist/esm/vault.js.map +1 -0
  64. package/dist/types/abis/ClankerAirdropV2.d.ts +573 -0
  65. package/dist/types/abis/ClankerVault.d.ts +407 -0
  66. package/dist/types/abis/LevrFactory_v1.d.ts +18 -0
  67. package/dist/types/abis/LevrFeeSplitterFactory_v1.d.ts +149 -0
  68. package/dist/types/abis/LevrFeeSplitter_v1.d.ts +422 -0
  69. package/dist/types/abis/LevrGovernor_v1.d.ts +8 -0
  70. package/dist/types/abis/index.d.ts +4 -0
  71. package/dist/types/airdrop.d.ts +18 -0
  72. package/dist/types/airdrop.d.ts.map +1 -0
  73. package/dist/types/build-calldatas-v4.d.ts +3 -0
  74. package/dist/types/build-calldatas-v4.d.ts.map +1 -1
  75. package/dist/types/build-clanker-v4.d.ts +6 -1
  76. package/dist/types/build-clanker-v4.d.ts.map +1 -1
  77. package/dist/types/client/hook/index.d.ts +10 -0
  78. package/dist/types/client/hook/index.d.ts.map +1 -1
  79. package/dist/types/client/hook/use-airdrop.d.ts +3 -1
  80. package/dist/types/client/hook/use-airdrop.d.ts.map +1 -1
  81. package/dist/types/client/hook/use-configure-splits.d.ts +17 -0
  82. package/dist/types/client/hook/use-configure-splits.d.ts.map +1 -0
  83. package/dist/types/client/hook/use-deploy.d.ts +21 -14
  84. package/dist/types/client/hook/use-deploy.d.ts.map +1 -1
  85. package/dist/types/client/hook/use-factory.d.ts +34 -0
  86. package/dist/types/client/hook/use-factory.d.ts.map +1 -0
  87. package/dist/types/client/hook/use-fee-receivers.d.ts +1 -6
  88. package/dist/types/client/hook/use-fee-receivers.d.ts.map +1 -1
  89. package/dist/types/client/hook/use-governance.d.ts +18 -2
  90. package/dist/types/client/hook/use-governance.d.ts.map +1 -1
  91. package/dist/types/client/hook/use-project.d.ts +169 -1
  92. package/dist/types/client/hook/use-project.d.ts.map +1 -1
  93. package/dist/types/client/hook/use-proposal.d.ts +3 -2
  94. package/dist/types/client/hook/use-proposal.d.ts.map +1 -1
  95. package/dist/types/client/hook/use-vault.d.ts +13 -0
  96. package/dist/types/client/hook/use-vault.d.ts.map +1 -0
  97. package/dist/types/client/levr-provider.d.ts +15 -1
  98. package/dist/types/client/levr-provider.d.ts.map +1 -1
  99. package/dist/types/client/query-keys.d.ts +13 -1
  100. package/dist/types/client/query-keys.d.ts.map +1 -1
  101. package/dist/types/constants.d.ts +59 -1
  102. package/dist/types/constants.d.ts.map +1 -1
  103. package/dist/types/deploy-v4.d.ts +3 -1
  104. package/dist/types/deploy-v4.d.ts.map +1 -1
  105. package/dist/types/factory.d.ts +21 -0
  106. package/dist/types/factory.d.ts.map +1 -0
  107. package/dist/types/fee-receivers.d.ts +1836 -1
  108. package/dist/types/fee-receivers.d.ts.map +1 -1
  109. package/dist/types/fee-splitter.d.ts +23 -0
  110. package/dist/types/fee-splitter.d.ts.map +1 -0
  111. package/dist/types/governance.d.ts +18 -2
  112. package/dist/types/governance.d.ts.map +1 -1
  113. package/dist/types/index.d.ts +5 -1
  114. package/dist/types/index.d.ts.map +1 -1
  115. package/dist/types/ipfs-merkle-tree.d.ts +72 -0
  116. package/dist/types/ipfs-merkle-tree.d.ts.map +1 -0
  117. package/dist/types/project.d.ts +10 -2
  118. package/dist/types/project.d.ts.map +1 -1
  119. package/dist/types/proposal.d.ts +16 -0
  120. package/dist/types/proposal.d.ts.map +1 -1
  121. package/dist/types/schema/levr.schema.d.ts +16 -4
  122. package/dist/types/schema/levr.schema.d.ts.map +1 -1
  123. package/dist/types/stake.d.ts +33 -2
  124. package/dist/types/stake.d.ts.map +1 -1
  125. package/dist/types/vault.d.ts +70 -0
  126. package/dist/types/vault.d.ts.map +1 -0
  127. package/package.json +1 -1
  128. package/dist/esm/treasury.js +0 -84
  129. package/dist/esm/treasury.js.map +0 -1
  130. package/dist/types/treasury.d.ts +0 -10
  131. package/dist/types/treasury.d.ts.map +0 -1
@@ -1,7 +1,9 @@
1
1
  import { LevrFactory_v1, LevrForwarder_v1 } from "./abis/index.js";
2
+ import ClankerAirdropV2 from "./abis/ClankerAirdropV2.js";
2
3
  import { buildCalldatasV4 } from "./build-calldatas-v4.js";
3
- import { GET_FACTORY_ADDRESS } from "./constants.js";
4
- export const deployV4 = async ({ c, clanker }) => {
4
+ import { GET_CLANKER_AIRDROP_ADDRESS, GET_FACTORY_ADDRESS } from "./constants.js";
5
+ import { storeMerkleTreeToIPFS } from "./ipfs-merkle-tree.js";
6
+ export const deployV4 = async ({ c, clanker, ipfsJsonUploadUrl, }) => {
5
7
  if (!clanker)
6
8
  throw new Error("Clanker SDK not found");
7
9
  const wallet = clanker.wallet;
@@ -11,6 +13,8 @@ export const deployV4 = async ({ c, clanker }) => {
11
13
  if (!wallet)
12
14
  throw new Error("Wallet not found");
13
15
  const chainId = publicClient.chain?.id;
16
+ if (!chainId)
17
+ throw new Error("Chain ID not found");
14
18
  const factoryAddress = GET_FACTORY_ADDRESS(chainId);
15
19
  if (!factoryAddress)
16
20
  throw new Error("Factory address is required");
@@ -19,7 +23,7 @@ export const deployV4 = async ({ c, clanker }) => {
19
23
  abi: LevrFactory_v1,
20
24
  functionName: "trustedForwarder",
21
25
  });
22
- const { callDatas, clankerTokenAddress, totalValue } = await buildCalldatasV4({
26
+ const { callDatas, clankerTokenAddress, totalValue, merkleTree } = await buildCalldatasV4({
23
27
  c,
24
28
  clanker,
25
29
  publicClient,
@@ -38,9 +42,58 @@ export const deployV4 = async ({ c, clanker }) => {
38
42
  if (receipt.status === "reverted") {
39
43
  throw new Error("Deployment transaction reverted");
40
44
  }
45
+ // Store merkle tree to IPFS if ipfsJsonUploadUrl is provided and airdrop exists
46
+ let merkleTreeCID;
47
+ if (ipfsJsonUploadUrl && merkleTree) {
48
+ // Get airdrop contract info to save metadata
49
+ const airdropAddress = GET_CLANKER_AIRDROP_ADDRESS(chainId);
50
+ if (airdropAddress) {
51
+ // Fetch airdrop info to get lockupEndTime and other metadata
52
+ const airdropInfo = await publicClient.readContract({
53
+ address: airdropAddress,
54
+ abi: ClankerAirdropV2,
55
+ functionName: "airdrops",
56
+ args: [clankerTokenAddress],
57
+ });
58
+ const lockupEndTime = Number(airdropInfo[4]) * 1000; // index 4 is lockupEndTime (convert to ms)
59
+ const lockupDuration = 86400; // 1 day in seconds
60
+ // Store the merkle tree data to IPFS with minimal metadata
61
+ // This will throw an error if upload fails, which will fail the entire deployment
62
+ const treeData = merkleTree.dump();
63
+ const cid = await storeMerkleTreeToIPFS({
64
+ tokenAddress: clankerTokenAddress,
65
+ chainId,
66
+ treeData,
67
+ ipfsJsonUploadUrl,
68
+ lockupEndTime,
69
+ lockupDuration,
70
+ });
71
+ merkleTreeCID = cid;
72
+ console.log(`Merkle tree stored to IPFS with CID: ${cid}`);
73
+ console.log(`Metadata: lockupEndTime=${new Date(lockupEndTime).toISOString()}`);
74
+ console.log(`Retrieve using: tokenAddress=${clankerTokenAddress}, chainId=${chainId}`);
75
+ }
76
+ else {
77
+ console.warn("No airdrop address found, storing merkle tree with default metadata");
78
+ const treeData = merkleTree.dump();
79
+ const currentBlock = await publicClient.getBlock();
80
+ const lockupDuration = 86400; // 1 day in seconds
81
+ const lockupEndTime = Number(currentBlock.timestamp) * 1000 + lockupDuration * 1000;
82
+ const cid = await storeMerkleTreeToIPFS({
83
+ tokenAddress: clankerTokenAddress,
84
+ chainId,
85
+ treeData,
86
+ ipfsJsonUploadUrl,
87
+ lockupEndTime,
88
+ lockupDuration,
89
+ });
90
+ merkleTreeCID = cid;
91
+ }
92
+ }
41
93
  return {
42
94
  receipt,
43
95
  address: clankerTokenAddress,
96
+ merkleTreeCID,
44
97
  };
45
98
  };
46
99
  //# sourceMappingURL=deploy-v4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-v4.js","sourceRoot":"","sources":["../../src/deploy-v4.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAajD,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAkB,EAA+B,EAAE;IAC5F,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC7B,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;IACzC,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC7D,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAEhD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,CAAA;IACtC,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACnD,IAAI,CAAC,cAAc;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAEnE,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QACvD,OAAO,EAAE,cAAc;QACvB,GAAG,EAAE,cAAc;QACnB,YAAY,EAAE,kBAAkB;KACjC,CAAC,CAAA;IAEF,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,UAAU,EAAE,GAAG,MAAM,gBAAgB,CAAC;QAC5E,CAAC;QACD,OAAO;QACP,YAAY;QACZ,MAAM;QACN,cAAc;QACd,gBAAgB,EAAE,gBAAgB;KACnC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;QACxC,OAAO,EAAE,gBAAgB;QACzB,GAAG,EAAE,gBAAgB;QACrB,YAAY,EAAE,kBAAkB;QAChC,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,KAAK,EAAE,UAAU;KAClB,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IAE9E,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACpD,CAAC;IAED,OAAO;QACL,OAAO;QACP,OAAO,EAAE,mBAAmB;KAC7B,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"deploy-v4.js","sourceRoot":"","sources":["../../src/deploy-v4.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import LevrFactory_v1 from "./abis/LevrFactory_v1.js";
2
+ import { GET_FACTORY_ADDRESS } from "./constants.js";
3
+ /**
4
+ * Fetches the factory configuration from the blockchain using multicall
5
+ * @param publicClient - The public client for reading from the blockchain
6
+ * @param chainId - The chain ID
7
+ * @returns The factory configuration
8
+ */
9
+ export async function getFactoryConfig(publicClient, chainId) {
10
+ const factoryAddress = GET_FACTORY_ADDRESS(chainId);
11
+ if (!factoryAddress) {
12
+ return null;
13
+ }
14
+ try {
15
+ const results = await publicClient.multicall({
16
+ contracts: [
17
+ {
18
+ address: factoryAddress,
19
+ abi: LevrFactory_v1,
20
+ functionName: "protocolFeeBps",
21
+ },
22
+ {
23
+ address: factoryAddress,
24
+ abi: LevrFactory_v1,
25
+ functionName: "protocolTreasury",
26
+ },
27
+ {
28
+ address: factoryAddress,
29
+ abi: LevrFactory_v1,
30
+ functionName: "streamWindowSeconds",
31
+ },
32
+ {
33
+ address: factoryAddress,
34
+ abi: LevrFactory_v1,
35
+ functionName: "proposalWindowSeconds",
36
+ },
37
+ {
38
+ address: factoryAddress,
39
+ abi: LevrFactory_v1,
40
+ functionName: "votingWindowSeconds",
41
+ },
42
+ {
43
+ address: factoryAddress,
44
+ abi: LevrFactory_v1,
45
+ functionName: "maxActiveProposals",
46
+ },
47
+ {
48
+ address: factoryAddress,
49
+ abi: LevrFactory_v1,
50
+ functionName: "quorumBps",
51
+ },
52
+ {
53
+ address: factoryAddress,
54
+ abi: LevrFactory_v1,
55
+ functionName: "approvalBps",
56
+ },
57
+ {
58
+ address: factoryAddress,
59
+ abi: LevrFactory_v1,
60
+ functionName: "minSTokenBpsToSubmit",
61
+ },
62
+ {
63
+ address: factoryAddress,
64
+ abi: LevrFactory_v1,
65
+ functionName: "maxProposalAmountBps",
66
+ },
67
+ ],
68
+ });
69
+ // Check for any errors in the results
70
+ const [protocolFeeBps, protocolTreasury, streamWindowSeconds, proposalWindowSeconds, votingWindowSeconds, maxActiveProposals, quorumBps, approvalBps, minSTokenBpsToSubmit, maxProposalAmountBps,] = results.map((result) => {
71
+ if (result.status === "failure") {
72
+ throw new Error(`Contract call failed: ${result.error?.message}`);
73
+ }
74
+ return result.result;
75
+ });
76
+ return {
77
+ protocolFeeBps: protocolFeeBps,
78
+ protocolTreasury: protocolTreasury,
79
+ streamWindowSeconds: streamWindowSeconds,
80
+ proposalWindowSeconds: proposalWindowSeconds,
81
+ votingWindowSeconds: votingWindowSeconds,
82
+ maxActiveProposals: maxActiveProposals,
83
+ quorumBps: quorumBps,
84
+ approvalBps: approvalBps,
85
+ minSTokenBpsToSubmit: minSTokenBpsToSubmit,
86
+ maxProposalAmountBps: maxProposalAmountBps,
87
+ };
88
+ }
89
+ catch (error) {
90
+ console.error("Failed to fetch factory config:", error);
91
+ return null;
92
+ }
93
+ }
94
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,cAAc,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAejD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAA0B,EAC1B,OAAe;IAEf,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACnD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC;YAC3C,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,gBAAgB;iBAC/B;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,kBAAkB;iBACjC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,qBAAqB;iBACpC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,uBAAuB;iBACtC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,qBAAqB;iBACpC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,oBAAoB;iBACnC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,WAAW;iBAC1B;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,aAAa;iBAC5B;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,sBAAsB;iBACrC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,sBAAsB;iBACrC;aACO;SACX,CAAC,CAAA;QAEF,sCAAsC;QACtC,MAAM,CACJ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACrB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACzB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;YACnE,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,OAAO;YACL,cAAc,EAAE,cAAwB;YACxC,gBAAgB,EAAE,gBAA2B;YAC7C,mBAAmB,EAAE,mBAA6B;YAClD,qBAAqB,EAAE,qBAA+B;YACtD,mBAAmB,EAAE,mBAA6B;YAClD,kBAAkB,EAAE,kBAA4B;YAChD,SAAS,EAAE,SAAmB;YAC9B,WAAW,EAAE,WAAqB;YAClC,oBAAoB,EAAE,oBAA8B;YACpD,oBAAoB,EAAE,oBAA8B;SACrD,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAA;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -1,5 +1,11 @@
1
- import { IClankerLpLockerMultiple } from "./abis/index.js";
1
+ import { IClankerLpLockerMultiple, LevrFeeSplitter_v1 } from "./abis/index.js";
2
2
  import { GET_LP_LOCKER_ADDRESS } from "./constants.js";
3
+ export var FeePreference;
4
+ (function (FeePreference) {
5
+ FeePreference[FeePreference["Both"] = 0] = "Both";
6
+ FeePreference[FeePreference["Paired"] = 1] = "Paired";
7
+ FeePreference[FeePreference["Clanker"] = 2] = "Clanker";
8
+ })(FeePreference || (FeePreference = {}));
3
9
  /**
4
10
  * Get tokenRewards from LP locker by reading the contract
5
11
  * Returns pool info and fee receiver data
@@ -51,16 +57,19 @@ export async function getTokenRewards(publicClient, clankerToken) {
51
57
  /**
52
58
  * Parse fee receivers from tokenRewards result
53
59
  * Shared utility to avoid logic duplication
60
+ * Note: feePreference is optional and should be added via a separate call to feePreferences()
54
61
  */
55
62
  export function parseFeeReceivers(tokenRewardsResult, userAddress) {
56
63
  const admins = tokenRewardsResult.rewardAdmins || [];
57
64
  const recipients = tokenRewardsResult.rewardRecipients || [];
58
65
  const bps = tokenRewardsResult.rewardBps || [];
66
+ const feePrefs = tokenRewardsResult.feePreferences || [];
59
67
  return admins.map((admin, index) => ({
60
68
  areYouAnAdmin: userAddress ? admin.toLowerCase() === userAddress.toLowerCase() : false,
61
69
  admin,
62
70
  recipient: recipients[index],
63
71
  percentage: bps[index] / 100, // Convert bps to percentage
72
+ feePreference: feePrefs[index] !== undefined ? feePrefs[index] : undefined,
64
73
  }));
65
74
  }
66
75
  /**
@@ -75,9 +84,10 @@ export async function feeReceivers({ publicClient, clankerToken, userAddress, })
75
84
  }
76
85
  /**
77
86
  * Update fee receiver for a clanker token
87
+ * Waits for transaction confirmation before returning
78
88
  */
79
- export async function updateFeeReceiver({ walletClient, clankerToken, chainId, rewardIndex, newRecipient, }) {
80
- if (Object.values({ walletClient, clankerToken, chainId, newRecipient }).some((value) => !value)) {
89
+ export async function updateFeeReceiver({ walletClient, publicClient, clankerToken, chainId, rewardIndex, newRecipient, }) {
90
+ if (Object.values({ walletClient, publicClient, clankerToken, chainId, newRecipient }).some((value) => !value)) {
81
91
  throw new Error("Invalid update fee receiver params");
82
92
  }
83
93
  const lpLockerAddress = GET_LP_LOCKER_ADDRESS(chainId);
@@ -91,6 +101,307 @@ export async function updateFeeReceiver({ walletClient, clankerToken, chainId, r
91
101
  functionName: "updateRewardRecipient",
92
102
  args: [clankerToken, BigInt(index), newRecipient],
93
103
  });
94
- return hash;
104
+ const receipt = await publicClient.waitForTransactionReceipt({ hash });
105
+ if (receipt.status === "reverted") {
106
+ throw new Error("Update fee receiver transaction reverted");
107
+ }
108
+ return receipt;
109
+ }
110
+ export async function configureSplits({ walletClient, publicClient, clankerToken, chainId, splits, }) {
111
+ if (Object.values({ walletClient, publicClient, clankerToken, chainId }).some((value) => !value)) {
112
+ throw new Error("Invalid configure splits params");
113
+ }
114
+ const { deployFeeSplitter } = await import("./fee-splitter.js");
115
+ const { LevrFeeSplitter_v1 } = await import("./abis/index.js");
116
+ // Step 1: Ensure fee splitter is deployed for this token
117
+ // This will deploy if not exists, or return existing address
118
+ const splitterAddress = await deployFeeSplitter({
119
+ publicClient,
120
+ walletClient,
121
+ clankerToken,
122
+ });
123
+ // Step 2: Configure splits on the deployed splitter
124
+ const splitsWithBps = splits.map((s) => ({
125
+ receiver: s.receiver,
126
+ bps: Math.floor(s.percentage * 100), // percentage to basis points
127
+ }));
128
+ const hash = await walletClient.writeContract({
129
+ address: splitterAddress, // Use deployed splitter, not deployer!
130
+ abi: LevrFeeSplitter_v1,
131
+ functionName: "configureSplits",
132
+ args: [splitsWithBps],
133
+ });
134
+ const receipt = await publicClient.waitForTransactionReceipt({ hash });
135
+ if (receipt.status === "reverted") {
136
+ throw new Error("Configure splits transaction reverted");
137
+ }
138
+ return receipt;
139
+ }
140
+ /**
141
+ * Compare two split configurations for equality
142
+ * Compares receiver addresses and percentages (converted to bps)
143
+ */
144
+ function areSplitsEqual(currentSplits, newSplits) {
145
+ if (currentSplits.length !== newSplits.length)
146
+ return false;
147
+ // Convert UI splits to bps for comparison
148
+ const newSplitsWithBps = newSplits.map((s) => ({
149
+ receiver: s.receiver.toLowerCase(),
150
+ bps: Math.floor(s.percentage * 100),
151
+ }));
152
+ // Sort both arrays by receiver for comparison
153
+ const sortedCurrent = [...currentSplits]
154
+ .map((s) => ({ receiver: s.receiver.toLowerCase(), bps: s.bps }))
155
+ .sort((a, b) => a.receiver.localeCompare(b.receiver));
156
+ const sortedNew = [...newSplitsWithBps].sort((a, b) => a.receiver.localeCompare(b.receiver));
157
+ // Compare each split
158
+ return sortedCurrent.every((current, index) => current.receiver === sortedNew[index].receiver && current.bps === sortedNew[index].bps);
159
+ }
160
+ export async function configureSplitsAndUpdateRecipient(params) {
161
+ const { walletClient, publicClient, clankerToken, chainId, splits, rewardIndex } = params;
162
+ const { getFeeSplitter } = await import("./fee-splitter.js");
163
+ const { LevrFeeSplitter_v1 } = await import("./abis/index.js");
164
+ // Step 0: Get or deploy fee splitter
165
+ const splitterAddress = await getFeeSplitter({
166
+ publicClient,
167
+ clankerToken,
168
+ chainId,
169
+ });
170
+ if (!splitterAddress) {
171
+ // Fee splitter doesn't exist, need to deploy and configure
172
+ const configureSplitsReceipt = await configureSplits({
173
+ walletClient,
174
+ publicClient,
175
+ clankerToken,
176
+ chainId,
177
+ splits,
178
+ });
179
+ // After first deployment, update recipient
180
+ const updateRecipientReceipt = await updateRecipientToSplitter({
181
+ walletClient,
182
+ publicClient,
183
+ clankerToken,
184
+ chainId,
185
+ rewardIndex,
186
+ });
187
+ return {
188
+ configureSplitsReceipt: {
189
+ transactionHash: configureSplitsReceipt.transactionHash,
190
+ status: configureSplitsReceipt.status,
191
+ },
192
+ updateRecipientReceipt: {
193
+ transactionHash: updateRecipientReceipt.transactionHash,
194
+ status: updateRecipientReceipt.status,
195
+ },
196
+ recipientWasAlreadyActive: false,
197
+ splitsWereUnchanged: false,
198
+ };
199
+ }
200
+ // Fee splitter exists - check if splits need updating
201
+ const currentSplits = await publicClient.readContract({
202
+ address: splitterAddress,
203
+ abi: LevrFeeSplitter_v1,
204
+ functionName: "getSplits",
205
+ });
206
+ const splitsUnchanged = areSplitsEqual(currentSplits, splits);
207
+ // Step 1: Configure splits only if they've changed
208
+ let configureSplitsReceipt;
209
+ if (!splitsUnchanged) {
210
+ const receipt = await configureSplits({
211
+ walletClient,
212
+ publicClient,
213
+ clankerToken,
214
+ chainId,
215
+ splits,
216
+ });
217
+ configureSplitsReceipt = {
218
+ transactionHash: receipt.transactionHash,
219
+ status: receipt.status,
220
+ };
221
+ }
222
+ // Step 2: Check if splitter is already the active recipient
223
+ const lpLockerAddress = GET_LP_LOCKER_ADDRESS(chainId);
224
+ if (!lpLockerAddress) {
225
+ throw new Error("LP locker address not found for chain");
226
+ }
227
+ const tokenRewards = await publicClient.readContract({
228
+ address: lpLockerAddress,
229
+ abi: IClankerLpLockerMultiple,
230
+ functionName: "tokenRewards",
231
+ args: [clankerToken],
232
+ });
233
+ const currentRecipient = tokenRewards.rewardRecipients?.[0];
234
+ const isAlreadyActive = currentRecipient && currentRecipient.toLowerCase() === splitterAddress.toLowerCase();
235
+ // Step 3: Update recipient only if not already active
236
+ if (!isAlreadyActive) {
237
+ const updateRecipientReceipt = await updateRecipientToSplitter({
238
+ walletClient,
239
+ publicClient,
240
+ clankerToken,
241
+ chainId,
242
+ rewardIndex,
243
+ });
244
+ return {
245
+ configureSplitsReceipt,
246
+ updateRecipientReceipt: {
247
+ transactionHash: updateRecipientReceipt.transactionHash,
248
+ status: updateRecipientReceipt.status,
249
+ },
250
+ recipientWasAlreadyActive: false,
251
+ splitsWereUnchanged: splitsUnchanged,
252
+ };
253
+ }
254
+ // Recipient already active - return result based on whether splits were configured
255
+ return {
256
+ configureSplitsReceipt,
257
+ recipientWasAlreadyActive: true,
258
+ splitsWereUnchanged: splitsUnchanged,
259
+ };
260
+ }
261
+ export async function updateRecipientToSplitter({ walletClient, publicClient, clankerToken, chainId, rewardIndex, }) {
262
+ // Get the deployed fee splitter for this token
263
+ const { getFeeSplitter } = await import("./fee-splitter.js");
264
+ const splitterAddress = await getFeeSplitter({
265
+ publicClient,
266
+ clankerToken,
267
+ chainId,
268
+ });
269
+ if (!splitterAddress) {
270
+ throw new Error("Fee splitter not deployed for this token. Deploy it first using deployFeeSplitter()");
271
+ }
272
+ // Update to splitter address (direct call from token admin)
273
+ return updateFeeReceiver({
274
+ walletClient,
275
+ publicClient,
276
+ clankerToken,
277
+ chainId,
278
+ rewardIndex,
279
+ newRecipient: splitterAddress,
280
+ });
281
+ }
282
+ /**
283
+ * Check which tokens a specific address is set up to receive as a fee receiver
284
+ * Returns array of tokens (clanker token address and/or WETH address) that this recipient can receive
285
+ * Uses feePreference to determine which tokens: Both (0), Paired/WETH only (1), or Clanker only (2)
286
+ */
287
+ export function getReceivableTokens(feeReceivers, recipientAddress, clankerToken, wethAddress) {
288
+ if (!feeReceivers || feeReceivers.length === 0) {
289
+ return [];
290
+ }
291
+ const receivableTokens = [];
292
+ // Check each fee receiver to see if the recipient address matches
293
+ for (const receiver of feeReceivers) {
294
+ if (receiver.recipient.toLowerCase() === recipientAddress.toLowerCase()) {
295
+ // This recipient receives fees - check which tokens based on feePreference
296
+ const pref = receiver.feePreference;
297
+ if (pref === undefined) {
298
+ // If no preference is set, assume Both for backwards compatibility
299
+ receivableTokens.push(clankerToken);
300
+ if (wethAddress)
301
+ receivableTokens.push(wethAddress);
302
+ }
303
+ else if (pref === FeePreference.Both) {
304
+ // Receives both clanker token and WETH
305
+ receivableTokens.push(clankerToken);
306
+ if (wethAddress)
307
+ receivableTokens.push(wethAddress);
308
+ }
309
+ else if (pref === FeePreference.Paired) {
310
+ // Receives WETH only
311
+ if (wethAddress)
312
+ receivableTokens.push(wethAddress);
313
+ }
314
+ else if (pref === FeePreference.Clanker) {
315
+ // Receives clanker token only
316
+ receivableTokens.push(clankerToken);
317
+ }
318
+ break;
319
+ }
320
+ }
321
+ return receivableTokens;
322
+ }
323
+ /**
324
+ * Get static fee splitter contracts for multicall
325
+ * Returns contracts for: isSplitsConfigured(), getSplits(), getTotalBps()
326
+ */
327
+ export function getFeeSplitterStaticContracts(clankerToken, feeSplitterAddress) {
328
+ return [
329
+ {
330
+ address: feeSplitterAddress,
331
+ abi: LevrFeeSplitter_v1,
332
+ functionName: "isSplitsConfigured",
333
+ },
334
+ {
335
+ address: feeSplitterAddress,
336
+ abi: LevrFeeSplitter_v1,
337
+ functionName: "getSplits",
338
+ },
339
+ {
340
+ address: feeSplitterAddress,
341
+ abi: LevrFeeSplitter_v1,
342
+ functionName: "getTotalBps",
343
+ },
344
+ ];
345
+ }
346
+ /**
347
+ * Parse static fee splitter data from multicall results
348
+ * Returns null if splits are not configured
349
+ */
350
+ export function parseFeeSplitterStatic(results, currentFeeRecipient, feeSplitterAddress) {
351
+ const [isConfiguredResult, splitsResult, totalBpsResult] = results;
352
+ // Check if all calls succeeded
353
+ if (isConfiguredResult.status !== "success" ||
354
+ splitsResult.status !== "success" ||
355
+ totalBpsResult.status !== "success") {
356
+ return null;
357
+ }
358
+ // Check if splits are configured
359
+ if (!isConfiguredResult.result) {
360
+ return null;
361
+ }
362
+ // Ensure we have the fee splitter address
363
+ if (!feeSplitterAddress) {
364
+ throw new Error("Fee splitter address is required to parse static data");
365
+ }
366
+ // Determine if splitter is active by comparing current recipient to splitter address
367
+ const isActive = !!(currentFeeRecipient &&
368
+ feeSplitterAddress &&
369
+ currentFeeRecipient.toLowerCase() === feeSplitterAddress.toLowerCase());
370
+ return {
371
+ address: feeSplitterAddress,
372
+ isConfigured: isConfiguredResult.result,
373
+ isActive,
374
+ splits: splitsResult.result,
375
+ totalBps: Number(totalBpsResult.result),
376
+ };
377
+ }
378
+ /**
379
+ * Get dynamic fee splitter contracts for multicall
380
+ * Returns contracts for: pendingFees() for each reward token
381
+ * Note: Fee splitter internally queries ClankerFeeLocker
382
+ */
383
+ export function getFeeSplitterDynamicContracts(clankerToken, feeSplitterAddress, rewardTokens) {
384
+ return rewardTokens.map((rewardToken) => ({
385
+ address: feeSplitterAddress,
386
+ abi: LevrFeeSplitter_v1,
387
+ functionName: "pendingFees",
388
+ args: [rewardToken],
389
+ }));
390
+ }
391
+ /**
392
+ * Parse dynamic fee splitter data from multicall results
393
+ * Maps pending fees results to { token, weth } structure
394
+ */
395
+ export function parseFeeSplitterDynamic(results, wethAddress) {
396
+ // First result is always the clanker token
397
+ const tokenPending = results[0]?.status === "success" ? results[0].result : 0n;
398
+ // Second result is WETH (if provided)
399
+ const wethPending = wethAddress && results[1]?.status === "success" ? results[1].result : null;
400
+ return {
401
+ pendingFees: {
402
+ token: tokenPending,
403
+ weth: wethPending,
404
+ },
405
+ };
95
406
  }
96
407
  //# sourceMappingURL=fee-receivers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fee-receivers.js","sourceRoot":"","sources":["../../src/fee-receivers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fee-receivers.js","sourceRoot":"","sources":["../../src/fee-receivers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import LevrFeeSplitterFactory_v1 from "./abis/LevrFeeSplitterFactory_v1.js";
2
+ import { GET_FEE_SPLITTER_FACTORY_ADDRESS } from "./constants.js";
3
+ /**
4
+ * Deploy a new fee splitter for a Clanker token
5
+ * Only needs to be called once per token
6
+ * Returns the deployed splitter address (either newly deployed or existing)
7
+ */
8
+ export async function deployFeeSplitter(params) {
9
+ const { publicClient, walletClient, clankerToken } = params;
10
+ const chainId = walletClient.chain?.id;
11
+ if (!chainId)
12
+ throw new Error("Chain ID not found");
13
+ const deployerAddress = GET_FEE_SPLITTER_FACTORY_ADDRESS(chainId);
14
+ if (!deployerAddress)
15
+ throw new Error("Fee splitter factory not found for this chain");
16
+ // Check if already deployed
17
+ const existing = await publicClient.readContract({
18
+ address: deployerAddress,
19
+ abi: LevrFeeSplitterFactory_v1,
20
+ functionName: "getSplitter",
21
+ args: [clankerToken],
22
+ });
23
+ if (existing && existing !== "0x0000000000000000000000000000000000000000") {
24
+ return existing;
25
+ }
26
+ // Deploy new splitter
27
+ const hash = await walletClient.writeContract({
28
+ address: deployerAddress,
29
+ abi: LevrFeeSplitterFactory_v1,
30
+ functionName: "deploy",
31
+ args: [clankerToken],
32
+ chain: walletClient.chain,
33
+ account: walletClient.account,
34
+ });
35
+ const receipt = await publicClient.waitForTransactionReceipt({ hash });
36
+ if (receipt.status === "reverted") {
37
+ throw new Error("Fee splitter deployment failed");
38
+ }
39
+ // Get deployed address
40
+ const splitterAddress = await publicClient.readContract({
41
+ address: deployerAddress,
42
+ abi: LevrFeeSplitterFactory_v1,
43
+ functionName: "getSplitter",
44
+ args: [clankerToken],
45
+ });
46
+ return splitterAddress;
47
+ }
48
+ /**
49
+ * Get the fee splitter address for a token (if deployed)
50
+ * Returns undefined if not deployed yet
51
+ */
52
+ export async function getFeeSplitter(params) {
53
+ const { publicClient, clankerToken, chainId } = params;
54
+ const deployerAddress = GET_FEE_SPLITTER_FACTORY_ADDRESS(chainId);
55
+ if (!deployerAddress)
56
+ return undefined;
57
+ const splitterAddress = await publicClient.readContract({
58
+ address: deployerAddress,
59
+ abi: LevrFeeSplitterFactory_v1,
60
+ functionName: "getSplitter",
61
+ args: [clankerToken],
62
+ });
63
+ if (!splitterAddress || splitterAddress === "0x0000000000000000000000000000000000000000") {
64
+ return undefined;
65
+ }
66
+ return splitterAddress;
67
+ }
68
+ //# sourceMappingURL=fee-splitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fee-splitter.js","sourceRoot":"","sources":["../../src/fee-splitter.ts"],"names":[],"mappings":"AAEA,OAAO,yBAAyB,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAA;AAc9D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAA+B;IACrE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;IAC3D,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,CAAA;IACtC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAEnD,MAAM,eAAe,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAA;IACjE,IAAI,CAAC,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IAEtF,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QAC/C,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,yBAAyB;QAC9B,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE,CAAC,YAAY,CAAC;KACrB,CAAC,CAAA;IAEF,IAAI,QAAQ,IAAI,QAAQ,KAAK,4CAA4C,EAAE,CAAC;QAC1E,OAAO,QAAmB,CAAA;IAC5B,CAAC;IAED,sBAAsB;IACtB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC;QAC5C,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,yBAAyB;QAC9B,YAAY,EAAE,QAAQ;QACtB,IAAI,EAAE,CAAC,YAAY,CAAC;QACpB,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,OAAO,EAAE,YAAY,CAAC,OAAQ;KAC/B,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IACtE,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IAED,uBAAuB;IACvB,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QACtD,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,yBAAyB;QAC9B,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE,CAAC,YAAY,CAAC;KACrB,CAAC,CAAA;IAEF,OAAO,eAA0B,CAAA;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA4B;IAC/D,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAEtD,MAAM,eAAe,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAA;IACjE,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAA;IAEtC,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QACtD,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,yBAAyB;QAC9B,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE,CAAC,YAAY,CAAC;KACrB,CAAC,CAAA;IAEF,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,4CAA4C,EAAE,CAAC;QACzF,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,eAA0B,CAAA;AACnC,CAAC"}