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,201 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useQueryClient } from "@tanstack/react-query";
4
+ import React, { createContext, useContext, useEffect, useMemo } from "react";
5
+ import { useAccount, useChainId } from "wagmi";
6
+ import { useBalanceQuery } from "./hook/use-balance.js";
7
+ import { useClankerTokenQuery } from "./hook/use-clanker.js";
8
+ import { useFeeReceiversQuery } from "./hook/use-fee-receivers.js";
9
+ import { useGovernanceQueries } from "./hook/use-governance.js";
10
+ import { useProjectQuery } from "./hook/use-project.js";
11
+ import { useProposalsQuery } from "./hook/use-proposals.js";
12
+ import { useStakingQueries } from "./hook/use-stake.js";
13
+ const LevrContext = createContext(null);
14
+ /**
15
+ * Centralized provider for all Levr blockchain queries
16
+ * Eliminates query duplication and provides unified refetch management
17
+ */
18
+ export function LevrProvider({ children, enabled = true }) {
19
+ const [clankerToken, setClankerToken] = React.useState(null);
20
+ const queryClient = useQueryClient();
21
+ const { address: userAddress } = useAccount();
22
+ const chainId = useChainId();
23
+ // ========================================
24
+ // USE INTERNAL QUERY HOOKS
25
+ // ========================================
26
+ const project = useProjectQuery({ clankerToken, enabled });
27
+ const tokenData = useClankerTokenQuery({ clankerToken, enabled });
28
+ const balancesQuery = useBalanceQuery({
29
+ clankerToken,
30
+ projectTokenDecimals: project.data?.token.decimals,
31
+ enabled,
32
+ });
33
+ const staking = useStakingQueries({
34
+ clankerToken,
35
+ projectData: project.data,
36
+ enabled,
37
+ });
38
+ const governance = useGovernanceQueries({
39
+ clankerToken,
40
+ projectData: project.data,
41
+ enabled,
42
+ });
43
+ const proposalsQueryResult = useProposalsQuery({
44
+ governorAddress: project.data?.governor,
45
+ tokenDecimals: project.data?.token.decimals,
46
+ enabled,
47
+ });
48
+ const feeReceiversQuery = useFeeReceiversQuery({
49
+ clankerToken,
50
+ enabled,
51
+ });
52
+ // ========================================
53
+ // REFETCH METHODS
54
+ // ========================================
55
+ const refetchMethods = useMemo(() => ({
56
+ all: async () => {
57
+ await queryClient.invalidateQueries({ refetchType: "active" });
58
+ },
59
+ project: async () => {
60
+ await project.refetch();
61
+ },
62
+ balances: async () => {
63
+ await balancesQuery.refetch();
64
+ },
65
+ governance: async () => {
66
+ await Promise.all([
67
+ governance.currentCycleId.refetch(),
68
+ governance.addresses.refetch(),
69
+ governance.airdropStatus.refetch(),
70
+ ]);
71
+ },
72
+ staking: async () => {
73
+ await Promise.all([
74
+ staking.allowance.refetch(),
75
+ staking.poolData.refetch(),
76
+ staking.userData.refetch(),
77
+ staking.outstandingRewardsStaking.refetch(),
78
+ staking.outstandingRewardsWeth.refetch(),
79
+ staking.claimableRewardsStaking.refetch(),
80
+ staking.claimableRewardsWeth.refetch(),
81
+ staking.wethRewardRate.refetch(),
82
+ staking.aprBpsWeth.refetch(),
83
+ ]);
84
+ },
85
+ proposals: async () => {
86
+ await proposalsQueryResult.refetch();
87
+ },
88
+ feeReceivers: async () => {
89
+ await feeReceiversQuery.refetch();
90
+ },
91
+ // Smart cross-domain refetches
92
+ afterStake: async () => {
93
+ await Promise.all([
94
+ balancesQuery.refetch(),
95
+ staking.poolData.refetch(),
96
+ staking.userData.refetch(),
97
+ staking.allowance.refetch(),
98
+ staking.outstandingRewardsStaking.refetch(),
99
+ staking.outstandingRewardsWeth.refetch(),
100
+ staking.claimableRewardsStaking.refetch(),
101
+ staking.claimableRewardsWeth.refetch(),
102
+ staking.wethRewardRate.refetch(),
103
+ staking.aprBpsWeth.refetch(),
104
+ project.refetch(), // Treasury might have changed
105
+ ]);
106
+ },
107
+ afterSwap: async () => {
108
+ await Promise.all([
109
+ balancesQuery.refetch(),
110
+ project.refetch(), // Pool data might have changed
111
+ ]);
112
+ },
113
+ afterGovernance: async () => {
114
+ await Promise.all([
115
+ governance.currentCycleId.refetch(),
116
+ governance.addresses.refetch(),
117
+ governance.airdropStatus.refetch(),
118
+ proposalsQueryResult.refetch(),
119
+ project.refetch(), // Treasury might have changed
120
+ staking.userData.refetch(), // Voting power might have changed
121
+ ]);
122
+ },
123
+ }), [
124
+ queryClient,
125
+ project,
126
+ balancesQuery,
127
+ governance,
128
+ staking,
129
+ proposalsQueryResult,
130
+ feeReceiversQuery,
131
+ ]);
132
+ // Auto-refetch on wallet/chain change
133
+ useEffect(() => {
134
+ if (enabled) {
135
+ refetchMethods.all();
136
+ }
137
+ }, [userAddress, chainId]);
138
+ const contextValue = useMemo(() => ({
139
+ clankerToken,
140
+ setClankerToken,
141
+ chainId,
142
+ userAddress,
143
+ project,
144
+ balances: balancesQuery,
145
+ tokenData,
146
+ staking: {
147
+ allowance: staking.allowance,
148
+ poolData: staking.poolData,
149
+ userData: staking.userData,
150
+ outstandingRewardsStaking: staking.outstandingRewardsStaking,
151
+ outstandingRewardsWeth: staking.outstandingRewardsWeth,
152
+ claimableRewardsStaking: staking.claimableRewardsStaking,
153
+ claimableRewardsWeth: staking.claimableRewardsWeth,
154
+ wethRewardRate: staking.wethRewardRate,
155
+ aprBpsWeth: staking.aprBpsWeth,
156
+ },
157
+ governance: {
158
+ currentCycleId: governance.currentCycleId,
159
+ addresses: governance.addresses,
160
+ airdropStatus: governance.airdropStatus,
161
+ },
162
+ proposals: proposalsQueryResult,
163
+ feeReceivers: feeReceiversQuery,
164
+ refetch: refetchMethods,
165
+ stakeService: staking.stakeService,
166
+ }), [
167
+ clankerToken,
168
+ setClankerToken,
169
+ chainId,
170
+ userAddress,
171
+ project,
172
+ balancesQuery,
173
+ tokenData,
174
+ staking,
175
+ governance,
176
+ proposalsQueryResult,
177
+ feeReceiversQuery,
178
+ refetchMethods,
179
+ ]);
180
+ return _jsx(LevrContext.Provider, { value: contextValue, children: children });
181
+ }
182
+ /**
183
+ * Hook to access Levr context
184
+ * @throws Error if used outside LevrProvider
185
+ */
186
+ export function useLevrContext() {
187
+ const context = useContext(LevrContext);
188
+ if (!context) {
189
+ throw new Error("Levr hooks must be used within a LevrProvider");
190
+ }
191
+ return context;
192
+ }
193
+ /**
194
+ * Hook to set the current clanker token
195
+ * This allows components to update the global token context
196
+ */
197
+ export const useSetClankerToken = () => useLevrContext().setClankerToken;
198
+ /**
199
+ * Hook to access refetch methods from LevrProvider
200
+ */
201
+ export const useLevrRefetch = () => useLevrContext().refetch;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levr-provider.js","sourceRoot":"","sources":["../../../src/client/levr-provider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ 'use client';
2
+ /**
3
+ * Centralized query key factory for all Levr queries
4
+ * Ensures consistent query keys across the application
5
+ */
6
+ export const queryKeys = {
7
+ /**
8
+ * Project query key
9
+ */
10
+ project: (factory, token, chainId) => ['project', factory, token, chainId],
11
+ /**
12
+ * Balance query keys
13
+ */
14
+ balance: (tokens, userAddress) => ['balance', tokens, userAddress],
15
+ /**
16
+ * Clanker SDK query keys
17
+ */
18
+ clanker: (chainId, walletAddress) => ['clanker', chainId, walletAddress],
19
+ clankerToken: (tokenAddress) => ['clanker-token', tokenAddress],
20
+ /**
21
+ * Staking query keys
22
+ */
23
+ staking: {
24
+ allowance: (stakingAddress, tokenAddress, userAddress) => ['staking', 'allowance', stakingAddress, tokenAddress, userAddress],
25
+ poolData: (stakingAddress, tokenAddress) => ['staking', 'poolData', stakingAddress, tokenAddress],
26
+ userData: (stakingAddress, userAddress) => ['staking', 'userData', stakingAddress, userAddress],
27
+ outstandingRewards: (stakingAddress, tokenAddress, userAddress) => ['staking', 'outstandingRewards', stakingAddress, tokenAddress, userAddress],
28
+ claimableRewards: (stakingAddress, tokenAddress, userAddress) => ['staking', 'claimableRewards', stakingAddress, tokenAddress, userAddress],
29
+ },
30
+ /**
31
+ * Governance query keys
32
+ */
33
+ governance: {
34
+ proposal: (governorAddress, proposalId) => ['governance', 'proposal', governorAddress, proposalId],
35
+ currentCycleId: (governorAddress) => ['governance', 'currentCycleId', governorAddress],
36
+ addresses: (governorAddress) => ['governance', 'addresses', governorAddress],
37
+ airdropStatus: (governorAddress, clankerToken) => ['governance', 'airdropStatus', governorAddress, clankerToken],
38
+ proposalsForCycle: (governorAddress, cycleId) => ['governance', 'proposalsForCycle', governorAddress, cycleId],
39
+ winner: (governorAddress, cycleId) => ['governance', 'winner', governorAddress, cycleId],
40
+ userVoteInCycle: (governorAddress, cycleId, userAddress) => ['governance', 'userVoteInCycle', governorAddress, cycleId, userAddress],
41
+ },
42
+ /**
43
+ * Proposals query keys
44
+ */
45
+ proposals: (governorAddress, tokenDecimals, fromBlock, toBlock, pageSize) => ['proposals', governorAddress, tokenDecimals, fromBlock, toBlock, pageSize],
46
+ /**
47
+ * Projects query keys
48
+ */
49
+ projects: (factoryAddress, chainId) => ['projects', factoryAddress, chainId],
50
+ /**
51
+ * Swap query keys
52
+ */
53
+ swap: {
54
+ quote: (chainId, poolKey, zeroForOne, amountIn, amountInDecimals) => ['swap', 'quote', chainId, poolKey, zeroForOne, amountIn, amountInDecimals],
55
+ },
56
+ /**
57
+ * Fee receivers query keys
58
+ */
59
+ feeReceivers: (clankerToken, userAddress, chainId) => ['fee-receivers', clankerToken, userAddress, chainId],
60
+ };
61
+ //# sourceMappingURL=query-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-keys.js","sourceRoot":"","sources":["../../../src/client/query-keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ import { CLANKERS } from 'clanker-sdk';
2
+ import { BigNumber } from 'ethers';
3
+ import { anvil, base, baseSepolia } from 'viem/chains';
4
+ /**
5
+ * Get the LP locker address for a given chain ID
6
+ * @param chainId - The chain ID
7
+ * @returns The LP locker address
8
+ */
9
+ export const GET_LP_LOCKER_ADDRESS = (chainId) => {
10
+ if (!chainId)
11
+ return undefined;
12
+ const chainMap = {
13
+ // In our dev monorepo, we have a clanker_v4_anvil contract, but in the remote package, it's not defined
14
+ [anvil.id]: CLANKERS?.clanker_v4_anvil?.related?.locker,
15
+ [base.id]: CLANKERS.clanker_v4.related.locker,
16
+ [baseSepolia.id]: CLANKERS.clanker_v4_sepolia.related.locker,
17
+ };
18
+ return chainMap?.[chainId];
19
+ };
20
+ /**
21
+ * Get the factory address for a given chain ID
22
+ * @param chainId - The chain ID
23
+ * @returns The factory address
24
+ */
25
+ export const GET_FACTORY_ADDRESS = (chainId) => {
26
+ if (!chainId)
27
+ return undefined;
28
+ return {
29
+ [anvil.id]: process.env.NEXT_PUBLIC_LEVR_FACTORY_V1_ANVIL,
30
+ [baseSepolia.id]: '0xa6ee403ee39a378308793d9f4c9a24fc97d34046',
31
+ }[chainId];
32
+ };
33
+ /**
34
+ * Get the WETH address for a given chain ID
35
+ * @param chainId - The chain ID
36
+ * @returns The WETH address
37
+ */
38
+ export const WETH = (chainId) => {
39
+ if (!chainId)
40
+ return undefined;
41
+ const initial = {
42
+ decimals: 18,
43
+ symbol: 'WETH',
44
+ name: 'Wrapped Ether',
45
+ address: '0x4200000000000000000000000000000000000006',
46
+ };
47
+ return {
48
+ [anvil.id]: initial,
49
+ [base.id]: initial,
50
+ [baseSepolia.id]: initial,
51
+ }[chainId];
52
+ };
53
+ /**
54
+ * Get the Uniswap V4 Permit2 address for a given chain ID
55
+ * @param chainId - The chain ID
56
+ * @returns The Permit2 address
57
+ */
58
+ export const UNISWAP_V4_PERMIT2 = (chainId) => {
59
+ if (!chainId)
60
+ return undefined;
61
+ return {
62
+ [anvil.id]: '0x000000000022D473030F116dDEE9F6B43aC78BA3',
63
+ [base.id]: '0x000000000022D473030F116dDEE9F6B43aC78BA3',
64
+ [baseSepolia.id]: '0x000000000022D473030F116dDEE9F6B43aC78BA3',
65
+ }[chainId];
66
+ };
67
+ /**
68
+ * Get the Uniswap V4 Quoter address for a given chain ID
69
+ * @param chainId - The chain ID
70
+ * @returns The Quoter address
71
+ */
72
+ export const UNISWAP_V4_QUOTER = (chainId) => {
73
+ if (!chainId)
74
+ return undefined;
75
+ return {
76
+ [anvil.id]: '0x0d5e0f971ed27fbff6c2837bf31316121532048d',
77
+ [base.id]: '0x0d5e0f971ed27fbff6c2837bf31316121532048d',
78
+ [baseSepolia.id]: '0x4a6513c898fe1b2d0e78d3b0e0a4a151589b1cba',
79
+ }[chainId];
80
+ };
81
+ /**
82
+ * Get the Uniswap V4 Universal Router address for a given chain ID
83
+ * @param chainId - The chain ID
84
+ * @returns The Uniswap V4 Universal Router address
85
+ */
86
+ export const UNISWAP_V4_UNIVERSAL_ROUTER = (chainId) => {
87
+ if (!chainId)
88
+ return undefined;
89
+ return {
90
+ [anvil.id]: '0x6ff5693b99212da76ad316178a184ab56d299b43',
91
+ [base.id]: '0x6ff5693b99212da76ad316178a184ab56d299b43',
92
+ [baseSepolia.id]: '0x492e6456d9528771018deb9e87ef7750ef184104',
93
+ }[chainId];
94
+ };
95
+ /**
96
+ * Get the Uniswap V4 Pool Manager address for a given chain ID
97
+ * @param chainId - The chain ID
98
+ * @returns The Pool Manager address
99
+ */
100
+ export const UNISWAP_V4_POOL_MANAGER = (chainId) => {
101
+ if (!chainId)
102
+ return undefined;
103
+ return {
104
+ [anvil.id]: '0x498581ff718922c3f8e6a244956af099b2652b2b',
105
+ [base.id]: '0x498581ff718922c3f8e6a244956af099b2652b2b',
106
+ [baseSepolia.id]: '0x05E73354cFDd6745C338b50BcFDfA3Aa6fA03408',
107
+ }[chainId];
108
+ };
109
+ /**
110
+ * Get the Clanker Factory address for a given chain ID
111
+ * @param chainId - The chain ID
112
+ * @returns The Clanker Factory address (same on Base mainnet and Base Sepolia)
113
+ */
114
+ export const GET_CLANKER_FACTORY_ADDRESS = (chainId) => {
115
+ if (!chainId)
116
+ return undefined;
117
+ const chainMap = {
118
+ // In our dev monorepo, we have a clanker_v4_anvil contract, but in the remote package, it's not defined
119
+ [anvil.id]: CLANKERS?.clanker_v4_anvil?.factoryAddress,
120
+ // Same address on both Base mainnet (8453) and Base Sepolia (84532)
121
+ [base.id]: '0xE85A59c628F7d27878ACeB4bf3b35733630083a9',
122
+ [baseSepolia.id]: '0xE85A59c628F7d27878ACeB4bf3b35733630083a9',
123
+ };
124
+ return chainMap?.[chainId];
125
+ };
126
+ /**
127
+ * Get the Clanker Airdrop address for a given chain ID
128
+ * @param chainId - The chain ID
129
+ * @returns The Clanker Airdrop address
130
+ */
131
+ export const GET_CLANKER_AIRDROP_ADDRESS = (chainId) => {
132
+ if (!chainId)
133
+ return undefined;
134
+ const chainMap = {
135
+ // In our dev monorepo, we have a clanker_v4_anvil contract, but in the remote package, it's not defined
136
+ [anvil.id]: CLANKERS?.clanker_v4_anvil?.related?.airdrop,
137
+ [base.id]: CLANKERS.clanker_v4.related.airdrop,
138
+ [baseSepolia.id]: CLANKERS.clanker_v4_sepolia.related.airdrop,
139
+ };
140
+ return chainMap?.[chainId];
141
+ };
142
+ /**
143
+ * Contract balance representation, for use in Universal Router
144
+ */
145
+ export const CONTRACT_BALANCE = BigNumber.from('0x8000000000000000000000000000000000000000000000000000000000000000');
146
+ /**
147
+ * MSG_SENDER representation, for use in Universal Router
148
+ */
149
+ export const MSG_SENDER = '0x0000000000000000000000000000000000000001';
150
+ /**
151
+ * ADDRESS_THIS representation, for use in Universal Router
152
+ */
153
+ export const ADDRESS_THIS = '0x0000000000000000000000000000000000000002';
154
+ /**
155
+ * Common treasury airdrop amounts in tokens (not wei)
156
+ * First value is used as default in deployV4
157
+ */
158
+ export const TREASURY_AIRDROP_AMOUNTS = {
159
+ '30%': 30_000_000_000, // 30B tokens (30% of 100B)
160
+ '40%': 40_000_000_000, // 40B tokens (40% of 100B)
161
+ '50%': 50_000_000_000, // 50B tokens (50% of 100B)
162
+ '60%': 60_000_000_000, // 60B tokens (60% of 100B)
163
+ '70%': 70_000_000_000, // 70B tokens (70% of 100B)
164
+ '80%': 80_000_000_000, // 80B tokens (80% of 100B)
165
+ '90%': 90_000_000_000, // 90B tokens (90% of 100B)
166
+ };
167
+ /**
168
+ * Staking rewards in basis points
169
+ * The amount of rewards that are distributed to the staking contract
170
+ */
171
+ export const STAKING_REWARDS = {
172
+ '100%': 10_000, // 100% of rewards are distributed to the staking contract
173
+ '90%': 9_000, // 90% of rewards are distributed to the staking contract
174
+ '80%': 8_000, // 80% of rewards are distributed to the staking contract
175
+ '70%': 7_000, // 70% of rewards are distributed to the staking contract
176
+ };
177
+ export const STATIC_FEE_TIERS = {
178
+ '1%': 100,
179
+ '2%': 200,
180
+ '3%': 300,
181
+ };
182
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { LevrFactory_v1, LevrForwarder_v1 } from "./abis/index.js";
2
+ import { buildCalldatasV4 } from "./build-calldatas-v4.js";
3
+ import { GET_FACTORY_ADDRESS } from "./constants.js";
4
+ export const deployV4 = async ({ c, clanker }) => {
5
+ if (!clanker)
6
+ throw new Error("Clanker SDK not found");
7
+ const wallet = clanker.wallet;
8
+ const publicClient = clanker.publicClient;
9
+ if (!publicClient)
10
+ throw new Error("Public client not found");
11
+ if (!wallet)
12
+ throw new Error("Wallet not found");
13
+ const chainId = publicClient.chain?.id;
14
+ const factoryAddress = GET_FACTORY_ADDRESS(chainId);
15
+ if (!factoryAddress)
16
+ throw new Error("Factory address is required");
17
+ const trustedForwarder = await publicClient.readContract({
18
+ address: factoryAddress,
19
+ abi: LevrFactory_v1,
20
+ functionName: "trustedForwarder",
21
+ });
22
+ const { callDatas, clankerTokenAddress, totalValue } = await buildCalldatasV4({
23
+ c,
24
+ clanker,
25
+ publicClient,
26
+ wallet,
27
+ factoryAddress,
28
+ forwarderAddress: trustedForwarder,
29
+ });
30
+ const txHash = await wallet.writeContract({
31
+ address: trustedForwarder,
32
+ abi: LevrForwarder_v1,
33
+ functionName: "executeMulticall",
34
+ args: [callDatas],
35
+ value: totalValue,
36
+ });
37
+ const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
38
+ if (receipt.status === "reverted") {
39
+ throw new Error("Deployment transaction reverted");
40
+ }
41
+ return {
42
+ receipt,
43
+ address: clankerTokenAddress,
44
+ };
45
+ };
46
+ //# sourceMappingURL=deploy-v4.js.map
@@ -0,0 +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"}
@@ -0,0 +1,52 @@
1
+ import { IClankerLpLockerMultiple } from "./abis/index.js";
2
+ import { GET_LP_LOCKER_ADDRESS } from "./constants.js";
3
+ /**
4
+ * Get fee receivers for a clanker token
5
+ */
6
+ export async function feeReceivers({ publicClient, clankerToken, chainId, userAddress, }) {
7
+ if (Object.values({ publicClient, clankerToken, chainId }).some((value) => !value)) {
8
+ throw new Error("Invalid fee receivers params");
9
+ }
10
+ const lpLockerAddress = GET_LP_LOCKER_ADDRESS(chainId);
11
+ if (!lpLockerAddress) {
12
+ throw new Error("LP locker address not found for chain");
13
+ }
14
+ const info = await publicClient.readContract({
15
+ address: lpLockerAddress,
16
+ abi: IClankerLpLockerMultiple,
17
+ functionName: "tokenRewards",
18
+ args: [clankerToken],
19
+ });
20
+ const admins = info?.rewardAdmins || [];
21
+ const recipients = info?.rewardRecipients || [];
22
+ const bps = info?.rewardBps || [];
23
+ const feeReceivers = admins.map((admin, index) => ({
24
+ areYouAnAdmin: userAddress ? admin.toLowerCase() === userAddress.toLowerCase() : false,
25
+ admin,
26
+ recipient: recipients[index],
27
+ // Convert bps to percentage
28
+ percentage: bps[index] / 100,
29
+ }));
30
+ return feeReceivers;
31
+ }
32
+ /**
33
+ * Update fee receiver for a clanker token
34
+ */
35
+ export async function updateFeeReceiver({ walletClient, clankerToken, chainId, rewardIndex, newRecipient, }) {
36
+ if (Object.values({ walletClient, clankerToken, chainId, newRecipient }).some((value) => !value)) {
37
+ throw new Error("Invalid update fee receiver params");
38
+ }
39
+ const lpLockerAddress = GET_LP_LOCKER_ADDRESS(chainId);
40
+ if (!lpLockerAddress) {
41
+ throw new Error("LP locker address not found for chain");
42
+ }
43
+ const index = Number(rewardIndex);
44
+ const hash = await walletClient.writeContract({
45
+ address: lpLockerAddress,
46
+ abi: IClankerLpLockerMultiple,
47
+ functionName: "updateRewardRecipient",
48
+ args: [clankerToken, BigInt(index), newRecipient],
49
+ });
50
+ return hash;
51
+ }
52
+ //# sourceMappingURL=fee-receivers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fee-receivers.js","sourceRoot":"","sources":["../../src/fee-receivers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAyBnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,WAAW,GACQ;IACnB,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACjD,CAAC;IAED,MAAM,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;IACtD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QAC3C,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,wBAAwB;QAC7B,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,CAAC,YAAY,CAAC;KACrB,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,IAAI,EAAE,YAAY,IAAI,EAAE,CAAA;IACvC,MAAM,UAAU,GAAG,IAAI,EAAE,gBAAgB,IAAI,EAAE,CAAA;IAC/C,MAAM,GAAG,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE,CAAA;IAEjC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK;QACtF,KAAK;QACL,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC;QAC5B,4BAA4B;QAC5B,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG;KAC7B,CAAC,CAAC,CAAA;IAEH,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,WAAW,EACX,YAAY,GACY;IACxB,IACE,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAC5F,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,eAAe,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;IACtD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC;QAC5C,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,wBAAwB;QAC7B,YAAY,EAAE,uBAAuB;QACrC,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;KAClD,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;AACb,CAAC"}