levr-sdk 0.2.2 → 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.
- package/dist/esm/abis/ClankerAirdropV2.js +289 -0
- package/dist/esm/abis/ClankerVault.js +215 -0
- package/dist/esm/abis/LevrFactory_v1.js +23 -0
- package/dist/esm/abis/LevrFeeSplitterFactory_v1.js +197 -0
- package/dist/esm/abis/LevrFeeSplitter_v1.js +544 -0
- package/dist/esm/abis/LevrGovernor_v1.js +10 -0
- package/dist/esm/abis/index.js +4 -0
- package/dist/esm/airdrop.js +160 -0
- package/dist/esm/airdrop.js.map +1 -0
- package/dist/esm/build-calldatas-v4.js +3 -1
- package/dist/esm/build-calldatas-v4.js.map +1 -1
- package/dist/esm/build-clanker-v4.js +75 -25
- package/dist/esm/build-clanker-v4.js.map +1 -1
- package/dist/esm/client/hook/index.js +10 -0
- package/dist/esm/client/hook/index.js.map +1 -1
- package/dist/esm/client/hook/use-airdrop.js +8 -4
- package/dist/esm/client/hook/use-airdrop.js.map +1 -1
- package/dist/esm/client/hook/use-configure-splits.js +43 -0
- package/dist/esm/client/hook/use-configure-splits.js.map +1 -0
- package/dist/esm/client/hook/use-deploy.js +3 -3
- package/dist/esm/client/hook/use-deploy.js.map +1 -1
- package/dist/esm/client/hook/use-factory.js +33 -0
- package/dist/esm/client/hook/use-factory.js.map +1 -0
- package/dist/esm/client/hook/use-fee-receivers.js +3 -2
- package/dist/esm/client/hook/use-fee-receivers.js.map +1 -1
- package/dist/esm/client/hook/use-governance.js +18 -3
- package/dist/esm/client/hook/use-governance.js.map +1 -1
- package/dist/esm/client/hook/use-project.js +7 -3
- package/dist/esm/client/hook/use-project.js.map +1 -1
- package/dist/esm/client/hook/use-proposal.js +11 -5
- package/dist/esm/client/hook/use-proposal.js.map +1 -1
- package/dist/esm/client/hook/use-stake.js +1 -1
- package/dist/esm/client/hook/use-stake.js.map +1 -1
- package/dist/esm/client/hook/use-vault.js +67 -0
- package/dist/esm/client/hook/use-vault.js.map +1 -0
- package/dist/esm/client/levr-provider.js +18 -2
- package/dist/esm/client/levr-provider.js.map +1 -1
- package/dist/esm/client/query-keys.js +13 -1
- package/dist/esm/client/query-keys.js.map +1 -1
- package/dist/esm/constants.js +83 -6
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/deploy-v4.js +56 -3
- package/dist/esm/deploy-v4.js.map +1 -1
- package/dist/esm/factory.js +94 -0
- package/dist/esm/factory.js.map +1 -0
- package/dist/esm/fee-receivers.js +265 -4
- package/dist/esm/fee-receivers.js.map +1 -1
- package/dist/esm/fee-splitter.js +68 -0
- package/dist/esm/fee-splitter.js.map +1 -0
- package/dist/esm/governance.js +86 -9
- package/dist/esm/governance.js.map +1 -1
- package/dist/esm/index.js +5 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/ipfs-merkle-tree.js +130 -0
- package/dist/esm/ipfs-merkle-tree.js.map +1 -0
- package/dist/esm/project.js +114 -26
- package/dist/esm/project.js.map +1 -1
- package/dist/esm/schema/levr.schema.js +94 -33
- package/dist/esm/schema/levr.schema.js.map +1 -1
- package/dist/esm/stake.js +157 -19
- package/dist/esm/stake.js.map +1 -1
- package/dist/esm/vault.js +136 -0
- package/dist/esm/vault.js.map +1 -0
- package/dist/types/abis/ClankerAirdropV2.d.ts +573 -0
- package/dist/types/abis/ClankerVault.d.ts +407 -0
- package/dist/types/abis/LevrFactory_v1.d.ts +18 -0
- package/dist/types/abis/LevrFeeSplitterFactory_v1.d.ts +149 -0
- package/dist/types/abis/LevrFeeSplitter_v1.d.ts +422 -0
- package/dist/types/abis/LevrGovernor_v1.d.ts +8 -0
- package/dist/types/abis/index.d.ts +4 -0
- package/dist/types/airdrop.d.ts +18 -0
- package/dist/types/airdrop.d.ts.map +1 -0
- package/dist/types/build-calldatas-v4.d.ts +3 -0
- package/dist/types/build-calldatas-v4.d.ts.map +1 -1
- package/dist/types/build-clanker-v4.d.ts +6 -1
- package/dist/types/build-clanker-v4.d.ts.map +1 -1
- package/dist/types/client/hook/index.d.ts +10 -0
- package/dist/types/client/hook/index.d.ts.map +1 -1
- package/dist/types/client/hook/use-airdrop.d.ts +3 -1
- package/dist/types/client/hook/use-airdrop.d.ts.map +1 -1
- package/dist/types/client/hook/use-configure-splits.d.ts +17 -0
- package/dist/types/client/hook/use-configure-splits.d.ts.map +1 -0
- package/dist/types/client/hook/use-deploy.d.ts +21 -14
- package/dist/types/client/hook/use-deploy.d.ts.map +1 -1
- package/dist/types/client/hook/use-factory.d.ts +34 -0
- package/dist/types/client/hook/use-factory.d.ts.map +1 -0
- package/dist/types/client/hook/use-fee-receivers.d.ts +1 -1
- package/dist/types/client/hook/use-fee-receivers.d.ts.map +1 -1
- package/dist/types/client/hook/use-governance.d.ts +18 -2
- package/dist/types/client/hook/use-governance.d.ts.map +1 -1
- package/dist/types/client/hook/use-project.d.ts +169 -1
- package/dist/types/client/hook/use-project.d.ts.map +1 -1
- package/dist/types/client/hook/use-proposal.d.ts +3 -2
- package/dist/types/client/hook/use-proposal.d.ts.map +1 -1
- package/dist/types/client/hook/use-vault.d.ts +13 -0
- package/dist/types/client/hook/use-vault.d.ts.map +1 -0
- package/dist/types/client/levr-provider.d.ts +15 -1
- package/dist/types/client/levr-provider.d.ts.map +1 -1
- package/dist/types/client/query-keys.d.ts +13 -1
- package/dist/types/client/query-keys.d.ts.map +1 -1
- package/dist/types/constants.d.ts +59 -1
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/deploy-v4.d.ts +3 -1
- package/dist/types/deploy-v4.d.ts.map +1 -1
- package/dist/types/factory.d.ts +21 -0
- package/dist/types/factory.d.ts.map +1 -0
- package/dist/types/fee-receivers.d.ts +1822 -1
- package/dist/types/fee-receivers.d.ts.map +1 -1
- package/dist/types/fee-splitter.d.ts +23 -0
- package/dist/types/fee-splitter.d.ts.map +1 -0
- package/dist/types/governance.d.ts +18 -2
- package/dist/types/governance.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/ipfs-merkle-tree.d.ts +72 -0
- package/dist/types/ipfs-merkle-tree.d.ts.map +1 -0
- package/dist/types/project.d.ts +10 -2
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/proposal.d.ts +16 -0
- package/dist/types/proposal.d.ts.map +1 -1
- package/dist/types/schema/levr.schema.d.ts +16 -4
- package/dist/types/schema/levr.schema.d.ts.map +1 -1
- package/dist/types/stake.d.ts +33 -2
- package/dist/types/stake.d.ts.map +1 -1
- package/dist/types/vault.d.ts +70 -0
- package/dist/types/vault.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/esm/treasury.js +0 -90
- package/dist/esm/treasury.js.map +0 -1
- package/dist/types/treasury.d.ts +0 -11
- package/dist/types/treasury.d.ts.map +0 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { StandardMerkleTree } from "@openzeppelin/merkle-tree";
|
|
2
|
+
import ClankerAirdropV2 from "./abis/ClankerAirdropV2.js";
|
|
3
|
+
import { formatBalanceWithUsd } from "./balance.js";
|
|
4
|
+
import { GET_CLANKER_AIRDROP_ADDRESS } from "./constants.js";
|
|
5
|
+
import { retrieveMerkleTreeFromIPFS } from "./ipfs-merkle-tree.js";
|
|
6
|
+
export async function getAirdropStatus(publicClient, clankerToken, treasury, tokenDecimals, tokenUsdPrice, ipfsSearchUrl, // Full URL to /api/ipfs-search
|
|
7
|
+
ipfsJsonUrl // Full URL to /api/ipfs-json
|
|
8
|
+
) {
|
|
9
|
+
const chainId = publicClient.chain?.id;
|
|
10
|
+
const airdropAddress = GET_CLANKER_AIRDROP_ADDRESS(chainId);
|
|
11
|
+
if (!airdropAddress) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
if (!ipfsSearchUrl || !ipfsJsonUrl) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
// Fetch merkle tree from IPFS
|
|
19
|
+
const treeData = await retrieveMerkleTreeFromIPFS({
|
|
20
|
+
tokenAddress: clankerToken,
|
|
21
|
+
chainId,
|
|
22
|
+
ipfsSearchUrl,
|
|
23
|
+
ipfsJsonUrl,
|
|
24
|
+
});
|
|
25
|
+
if (!treeData) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const treeWithMetadata = treeData;
|
|
29
|
+
const tree = StandardMerkleTree.load(treeWithMetadata);
|
|
30
|
+
// Get current block time for accurate comparison (always needed)
|
|
31
|
+
const currentBlock = await publicClient.getBlock();
|
|
32
|
+
const currentBlockTime = Number(currentBlock.timestamp) * 1000;
|
|
33
|
+
// Try to get metadata from IPFS first to avoid RPC calls
|
|
34
|
+
let lockupEndTime;
|
|
35
|
+
let lockupDuration;
|
|
36
|
+
if (treeWithMetadata.metadata?.lockupEndTime) {
|
|
37
|
+
// Use saved metadata from IPFS (fast path!)
|
|
38
|
+
lockupEndTime = treeWithMetadata.metadata.lockupEndTime;
|
|
39
|
+
lockupDuration = treeWithMetadata.metadata.lockupDuration;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// Fallback: Query contract (slower)
|
|
43
|
+
const airdropInfo = await publicClient.readContract({
|
|
44
|
+
address: airdropAddress,
|
|
45
|
+
abi: ClankerAirdropV2,
|
|
46
|
+
functionName: "airdrops",
|
|
47
|
+
args: [clankerToken],
|
|
48
|
+
});
|
|
49
|
+
lockupEndTime = Number(airdropInfo[4]) * 1000;
|
|
50
|
+
lockupDuration = 86400; // 1 day in seconds
|
|
51
|
+
}
|
|
52
|
+
// Calculate derived values from saved metadata
|
|
53
|
+
const deploymentTimestamp = lockupEndTime - lockupDuration * 1000;
|
|
54
|
+
const lockupDurationHours = lockupDuration / 3600;
|
|
55
|
+
// Process ALL recipients in the merkle tree
|
|
56
|
+
const recipients = [];
|
|
57
|
+
// Collect all recipients first to batch the multicall
|
|
58
|
+
const recipientEntries = [];
|
|
59
|
+
for (const [i, value] of tree.entries()) {
|
|
60
|
+
const [address, amount] = value;
|
|
61
|
+
recipientEntries.push({
|
|
62
|
+
address: address,
|
|
63
|
+
allocatedAmount: BigInt(amount),
|
|
64
|
+
index: i,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// Get current block number for claim event search
|
|
68
|
+
const currentBlockNumber = await publicClient.getBlockNumber();
|
|
69
|
+
const blocksToSearch = 1000000n;
|
|
70
|
+
const fromBlock = currentBlockNumber > blocksToSearch ? currentBlockNumber - blocksToSearch : 0n;
|
|
71
|
+
// Get AirdropClaimed events to check who has actually claimed
|
|
72
|
+
const airdropClaimedEvent = ClankerAirdropV2.find((item) => item.type === "event" && item.name === "AirdropClaimed");
|
|
73
|
+
const claimLogs = airdropClaimedEvent
|
|
74
|
+
? await publicClient.getLogs({
|
|
75
|
+
address: airdropAddress,
|
|
76
|
+
event: airdropClaimedEvent,
|
|
77
|
+
args: {
|
|
78
|
+
token: clankerToken,
|
|
79
|
+
},
|
|
80
|
+
fromBlock,
|
|
81
|
+
toBlock: "latest",
|
|
82
|
+
})
|
|
83
|
+
: [];
|
|
84
|
+
// Track which addresses have claimed
|
|
85
|
+
const claimedAddresses = new Set(claimLogs.map((log) => log.args.user.toLowerCase()));
|
|
86
|
+
// Batch check available amounts for all recipients
|
|
87
|
+
const availableAmounts = (await publicClient.multicall({
|
|
88
|
+
contracts: recipientEntries.map((entry) => ({
|
|
89
|
+
address: airdropAddress,
|
|
90
|
+
abi: ClankerAirdropV2,
|
|
91
|
+
functionName: "amountAvailableToClaim",
|
|
92
|
+
args: [clankerToken, entry.address, entry.allocatedAmount],
|
|
93
|
+
})),
|
|
94
|
+
allowFailure: true,
|
|
95
|
+
}));
|
|
96
|
+
// Process each recipient
|
|
97
|
+
for (let i = 0; i < recipientEntries.length; i++) {
|
|
98
|
+
const entry = recipientEntries[i];
|
|
99
|
+
const availableResult = availableAmounts[i];
|
|
100
|
+
const availableAmount = availableResult?.result ?? 0n;
|
|
101
|
+
const isTreasury = entry.address.toLowerCase() === treasury.toLowerCase();
|
|
102
|
+
const hasClaimed = claimedAddresses.has(entry.address.toLowerCase());
|
|
103
|
+
// Generate proof for this recipient
|
|
104
|
+
const proof = tree.getProof(entry.index);
|
|
105
|
+
// Log for debugging single recipient case
|
|
106
|
+
if (recipientEntries.length === 1) {
|
|
107
|
+
console.log("[AIRDROP] Single recipient detected:", {
|
|
108
|
+
address: entry.address,
|
|
109
|
+
proofLength: proof.length,
|
|
110
|
+
proof,
|
|
111
|
+
index: entry.index,
|
|
112
|
+
allocatedAmount: entry.allocatedAmount.toString(),
|
|
113
|
+
availableAmount: availableAmount.toString(),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
// Determine status
|
|
117
|
+
let error;
|
|
118
|
+
let isAvailable = availableAmount > 0n;
|
|
119
|
+
if (availableAmount === 0n) {
|
|
120
|
+
if (hasClaimed) {
|
|
121
|
+
// Actually claimed
|
|
122
|
+
error = "Airdrop already claimed";
|
|
123
|
+
isAvailable = false;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
// Not claimed but 0 available = still locked
|
|
127
|
+
const isLocked = currentBlockTime < lockupEndTime;
|
|
128
|
+
if (isLocked) {
|
|
129
|
+
error = "Airdrop is still locked (lockup period not passed)";
|
|
130
|
+
isAvailable = false;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Unlocked but 0 available and not claimed - shouldn't happen
|
|
134
|
+
error = "No airdrop available";
|
|
135
|
+
isAvailable = false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
recipients.push({
|
|
140
|
+
address: entry.address,
|
|
141
|
+
allocatedAmount: formatBalanceWithUsd(entry.allocatedAmount, tokenDecimals, tokenUsdPrice),
|
|
142
|
+
availableAmount: formatBalanceWithUsd(availableAmount, tokenDecimals, tokenUsdPrice),
|
|
143
|
+
isAvailable,
|
|
144
|
+
proof,
|
|
145
|
+
isTreasury,
|
|
146
|
+
error,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
recipients,
|
|
151
|
+
deploymentTimestamp,
|
|
152
|
+
lockupDurationHours,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
console.error("[AIRDROP] Failed to fetch airdrop:", error);
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=airdrop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"airdrop.js","sourceRoot":"","sources":["../../src/airdrop.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ export const buildCalldatasV4 = async ({ c, clanker, publicClient, wallet, facto
|
|
|
37
37
|
functionName: "prepareForDeployment",
|
|
38
38
|
data: result.data,
|
|
39
39
|
});
|
|
40
|
-
const config = buildClankerV4({
|
|
40
|
+
const { config, merkleTree } = buildClankerV4({
|
|
41
41
|
c,
|
|
42
42
|
treasuryAddress: treasury,
|
|
43
43
|
deployer,
|
|
@@ -93,6 +93,8 @@ export const buildCalldatasV4 = async ({ c, clanker, publicClient, wallet, facto
|
|
|
93
93
|
callDatas,
|
|
94
94
|
clankerTokenAddress: tokenAddress,
|
|
95
95
|
totalValue: devBuyValue, // Total ETH to send with executeMulticall
|
|
96
|
+
merkleTree,
|
|
97
|
+
treasury,
|
|
96
98
|
};
|
|
97
99
|
};
|
|
98
100
|
//# sourceMappingURL=build-calldatas-v4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-calldatas-v4.js","sourceRoot":"","sources":["../../src/build-calldatas-v4.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-calldatas-v4.js","sourceRoot":"","sources":["../../src/build-calldatas-v4.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
import { createMerkleTree, FEE_CONFIGS } from "clanker-sdk";
|
|
2
2
|
import { omit } from "lodash";
|
|
3
|
-
import { STAKING_REWARDS, STATIC_FEE_TIERS, TREASURY_AIRDROP_AMOUNTS } from "./constants.js";
|
|
3
|
+
import { LEVR_TEAM_LP_FEE_PERCENTAGE, LEVR_TEAM_WALLET, STAKING_REWARDS, STATIC_FEE_TIERS, TREASURY_AIRDROP_AMOUNTS, VAULT_LOCKUP_PERIODS, VAULT_VESTING_PERIODS, } from "./constants.js";
|
|
4
4
|
export const buildClankerV4 = ({ c, treasuryAddress, deployer, staking, chainId, }) => {
|
|
5
|
-
const airdrop = getAirdrop(c.airdrop, treasuryAddress, c.treasuryFunding);
|
|
5
|
+
const { airdrop, merkleTree } = getAirdrop(c.airdrop, treasuryAddress, c.treasuryFunding);
|
|
6
6
|
const devBuy = getDevBuy(c.devBuy);
|
|
7
7
|
const metadata = getMetadata(c.metadata);
|
|
8
8
|
const fees = getFees(c.fees);
|
|
9
9
|
const rewards = getRewards(deployer, staking, c.stakingReward, c.rewards);
|
|
10
|
+
const vault = getVault(c.vault);
|
|
10
11
|
const config = {
|
|
11
12
|
...omit(c, "treasuryFunding", "stakingReward"),
|
|
12
13
|
tokenAdmin: deployer,
|
|
13
14
|
devBuy,
|
|
14
15
|
airdrop,
|
|
16
|
+
vault,
|
|
15
17
|
metadata,
|
|
16
18
|
fees,
|
|
17
19
|
rewards,
|
|
18
20
|
chainId: chainId,
|
|
19
21
|
vanity: true,
|
|
20
22
|
};
|
|
21
|
-
return
|
|
23
|
+
return {
|
|
24
|
+
config,
|
|
25
|
+
merkleTree,
|
|
26
|
+
};
|
|
22
27
|
};
|
|
23
28
|
/**
|
|
24
29
|
* Builds the fees for the Clanker token using the Levr fees
|
|
@@ -38,25 +43,60 @@ const getFees = (fees) => {
|
|
|
38
43
|
}
|
|
39
44
|
return FEE_CONFIGS.Dynamic3;
|
|
40
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* Builds the vault for the Clanker token using the Levr vault
|
|
48
|
+
* Converts day strings and percentage strings to numbers (seconds and percentages)
|
|
49
|
+
* @param vault - Levr vault configuration
|
|
50
|
+
* @returns Clanker vault with durations in seconds
|
|
51
|
+
*/
|
|
52
|
+
const getVault = (vault) => {
|
|
53
|
+
if (!vault)
|
|
54
|
+
return undefined;
|
|
55
|
+
// Convert lockup period from days to seconds
|
|
56
|
+
const lockupDurationSeconds = VAULT_LOCKUP_PERIODS[vault.lockupPeriod] * 24 * 60 * 60;
|
|
57
|
+
// Convert vesting period from days to seconds (0 for instant means no vesting)
|
|
58
|
+
const vestingDurationSeconds = vault.vestingPeriod === "instant"
|
|
59
|
+
? 0
|
|
60
|
+
: VAULT_VESTING_PERIODS[vault.vestingPeriod] * 24 * 60 * 60;
|
|
61
|
+
// Convert percentage from string (e.g., "5%") to number (5)
|
|
62
|
+
const percentageNumber = parseFloat(vault.percentage);
|
|
63
|
+
return {
|
|
64
|
+
percentage: percentageNumber,
|
|
65
|
+
lockupDuration: lockupDurationSeconds,
|
|
66
|
+
vestingDuration: vestingDurationSeconds,
|
|
67
|
+
};
|
|
68
|
+
};
|
|
41
69
|
/**
|
|
42
70
|
* Builds the rewards for the Clanker token using the Levr rewards
|
|
43
|
-
* @param
|
|
44
|
-
* @
|
|
71
|
+
* @param admin - Admin address
|
|
72
|
+
* @param staking - Staking contract address
|
|
73
|
+
* @param stakingReward - Staking reward percentage key (user-facing, before team fee)
|
|
74
|
+
* @param rewards - Levr custom rewards
|
|
75
|
+
* @returns Clanker rewards with team LP fee automatically included
|
|
45
76
|
*/
|
|
46
|
-
const getRewards = (admin, staking, stakingReward
|
|
77
|
+
const getRewards = (admin, staking, stakingReward, rewards) => {
|
|
47
78
|
const recipients = rewards
|
|
48
79
|
? rewards.map((r) => ({
|
|
49
80
|
admin: r.admin,
|
|
50
81
|
recipient: r.recipient,
|
|
51
|
-
// Convert percentage to basis points
|
|
52
|
-
bps: r.percentage * 100,
|
|
82
|
+
// Convert human percentage to basis points (e.g., 5 -> 500)
|
|
83
|
+
bps: Math.round(r.percentage * 100),
|
|
53
84
|
token: r.token,
|
|
54
85
|
}))
|
|
55
86
|
: [];
|
|
87
|
+
// Add Levr team LP fee (always included for UI deployments)
|
|
88
|
+
recipients.push({
|
|
89
|
+
admin: LEVR_TEAM_WALLET,
|
|
90
|
+
recipient: LEVR_TEAM_WALLET,
|
|
91
|
+
bps: LEVR_TEAM_LP_FEE_PERCENTAGE * 100, // Convert percentage to basis points
|
|
92
|
+
token: "Both",
|
|
93
|
+
});
|
|
94
|
+
// Add staking rewards (subtract team fee from user-facing percentage)
|
|
95
|
+
const stakingBps = STAKING_REWARDS[stakingReward] - LEVR_TEAM_LP_FEE_PERCENTAGE * 100;
|
|
56
96
|
recipients.push({
|
|
57
97
|
admin,
|
|
58
98
|
recipient: staking,
|
|
59
|
-
bps:
|
|
99
|
+
bps: stakingBps,
|
|
60
100
|
token: "Both",
|
|
61
101
|
});
|
|
62
102
|
return { recipients };
|
|
@@ -64,25 +104,30 @@ const getRewards = (admin, staking, stakingReward = "100%", rewards) => {
|
|
|
64
104
|
/**
|
|
65
105
|
* Builds the metadata for the Clanker token using the Levr metadata
|
|
66
106
|
* @param metadata - Levr metadata
|
|
67
|
-
* @returns Clanker metadata
|
|
107
|
+
* @returns Clanker metadata with "Deployed on levr.world" appended to description
|
|
68
108
|
*/
|
|
69
109
|
const getMetadata = (metadata) => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const { description, ...socials } = metadata;
|
|
110
|
+
const description = metadata?.description;
|
|
111
|
+
const socials = metadata ? omit(metadata, "description") : {};
|
|
73
112
|
const platformMap = {
|
|
74
113
|
telegramLink: "telegram",
|
|
75
114
|
websiteLink: "website",
|
|
76
115
|
xLink: "x",
|
|
77
116
|
farcasterLink: "farcaster",
|
|
78
117
|
};
|
|
79
|
-
const socialMediaUrls = Object.entries(socials)
|
|
118
|
+
const socialMediaUrls = Object.entries(socials)
|
|
119
|
+
.filter(([_, value]) => value !== undefined)
|
|
120
|
+
.map(([key, value]) => ({
|
|
80
121
|
platform: platformMap[key],
|
|
81
122
|
url: value,
|
|
82
123
|
}));
|
|
124
|
+
// Append "Deployed on levr.world" to description
|
|
125
|
+
const enhancedDescription = description
|
|
126
|
+
? `${description} Deployed on levr.world`
|
|
127
|
+
: "Deployed on levr.world";
|
|
83
128
|
return {
|
|
84
|
-
description,
|
|
85
|
-
socialMediaUrls,
|
|
129
|
+
description: enhancedDescription,
|
|
130
|
+
socialMediaUrls: socialMediaUrls.length > 0 ? socialMediaUrls : undefined,
|
|
86
131
|
};
|
|
87
132
|
};
|
|
88
133
|
/**
|
|
@@ -99,17 +144,19 @@ const getDevBuy = (devBuy) => {
|
|
|
99
144
|
};
|
|
100
145
|
/**
|
|
101
146
|
* Builds the airdrop for the Clanker token using the Levr airdrop
|
|
102
|
-
* @param airdrop - Levr airdrop
|
|
147
|
+
* @param airdrop - Levr airdrop (with percentages)
|
|
103
148
|
* @param treasuryAddress - Treasury address
|
|
104
149
|
* @param treasuryAirdropAmount - Treasury airdrop amount
|
|
105
|
-
* @returns Clanker airdrop
|
|
150
|
+
* @returns Clanker airdrop config and merkle tree
|
|
106
151
|
*/
|
|
107
152
|
const getAirdrop = (airdrop, treasuryAddress, treasuryAirdrop) => {
|
|
108
|
-
|
|
153
|
+
const TOTAL_SUPPLY = 100000000000; // 100B tokens
|
|
154
|
+
// Convert airdrop percentages to amounts
|
|
109
155
|
const airdropData = airdrop
|
|
110
156
|
? airdrop.map((a) => ({
|
|
111
157
|
account: a.account,
|
|
112
|
-
amount
|
|
158
|
+
// Convert percentage (0-100) to actual amount (e.g., 5% of 100B = 5B)
|
|
159
|
+
amount: Math.round((a.percentage / 100) * TOTAL_SUPPLY),
|
|
113
160
|
}))
|
|
114
161
|
: [];
|
|
115
162
|
// Always add treasury to airdrop
|
|
@@ -117,12 +164,15 @@ const getAirdrop = (airdrop, treasuryAddress, treasuryAirdrop) => {
|
|
|
117
164
|
account: treasuryAddress,
|
|
118
165
|
amount: TREASURY_AIRDROP_AMOUNTS[treasuryAirdrop],
|
|
119
166
|
});
|
|
120
|
-
const
|
|
167
|
+
const merkleTreeResult = createMerkleTree(airdropData);
|
|
121
168
|
return {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
169
|
+
airdrop: {
|
|
170
|
+
amount: airdropData.reduce((acc, curr) => acc + curr.amount, 0),
|
|
171
|
+
merkleRoot: merkleTreeResult.root,
|
|
172
|
+
lockupDuration: 86400, // 1 day minimum required by Clanker SDK
|
|
173
|
+
vestingDuration: 0,
|
|
174
|
+
},
|
|
175
|
+
merkleTree: merkleTreeResult.tree,
|
|
126
176
|
};
|
|
127
177
|
};
|
|
128
178
|
//# sourceMappingURL=build-clanker-v4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-clanker-v4.js","sourceRoot":"","sources":["../../src/build-clanker-v4.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-clanker-v4.js","sourceRoot":"","sources":["../../src/build-clanker-v4.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,10 +22,18 @@ export const useProposals = () => useLevrContext().proposals;
|
|
|
22
22
|
* Hook to access airdrop status from LevrProvider
|
|
23
23
|
*/
|
|
24
24
|
export const useAirdropStatus = () => useLevrContext().airdropStatus;
|
|
25
|
+
/**
|
|
26
|
+
* Hook to access and manage governance cycle selection
|
|
27
|
+
*/
|
|
28
|
+
export const useGovernanceCycle = () => {
|
|
29
|
+
const { selectedCycleId, setSelectedCycleId } = useLevrContext();
|
|
30
|
+
return { selectedCycleId, setSelectedCycleId };
|
|
31
|
+
};
|
|
25
32
|
// ========================================
|
|
26
33
|
// COMPLEX HOOKS (with mutations/callbacks)
|
|
27
34
|
// ========================================
|
|
28
35
|
export * from "./use-clanker.js";
|
|
36
|
+
export * from "./use-configure-splits.js";
|
|
29
37
|
export * from "./use-fee-receivers.js";
|
|
30
38
|
export * from "./use-governance.js";
|
|
31
39
|
export * from "./use-stake.js";
|
|
@@ -35,9 +43,11 @@ export * from "./use-swap.js";
|
|
|
35
43
|
// ========================================
|
|
36
44
|
export * from "./use-airdrop.js";
|
|
37
45
|
export * from "./use-deploy.js";
|
|
46
|
+
export * from "./use-factory.js";
|
|
38
47
|
export * from "./use-pool.js";
|
|
39
48
|
export * from "./use-prepare.js";
|
|
40
49
|
export * from "./use-project.js";
|
|
41
50
|
export * from "./use-proposal.js";
|
|
42
51
|
export * from "./use-register.js";
|
|
52
|
+
export * from "./use-vault.js";
|
|
43
53
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +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,OAAO,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAA;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,OAAO,CAAA;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAA;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,SAAS,CAAA;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,aAAa,CAAA;AAEpE,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,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA"}
|
|
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,OAAO,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAA;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,OAAO,CAAA;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAA;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,SAAS,CAAA;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,aAAa,CAAA;AAEpE;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,EAAE,eAAe,EAAE,kBAAkB,EAAE,GAAG,cAAc,EAAE,CAAA;IAChE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAA;AAChD,CAAC,CAAA;AAED,2CAA2C;AAC3C,2CAA2C;AAC3C,2CAA2C;AAE3C,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAE1B,2CAA2C;AAC3C,yCAAyC;AACzC,2CAA2C;AAE3C,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA"}
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
3
|
import { usePublicClient } from "wagmi";
|
|
4
|
-
import {
|
|
4
|
+
import { getAirdropStatus } from "../../airdrop.js";
|
|
5
5
|
/**
|
|
6
6
|
* Hook to fetch airdrop status for a treasury
|
|
7
7
|
* This should be called separately from project data
|
|
8
8
|
*/
|
|
9
|
-
export function useAirdropStatusQuery({ project, enabled: e = true }) {
|
|
9
|
+
export function useAirdropStatusQuery({ project, enabled: e = true, ipfsSearchUrl, ipfsJsonUrl, }) {
|
|
10
10
|
const publicClient = usePublicClient();
|
|
11
11
|
const chainId = publicClient?.chain?.id;
|
|
12
12
|
const enabled = !!publicClient && !!project && !!chainId && e;
|
|
13
13
|
return useQuery({
|
|
14
|
-
queryKey: ["airdrop-status", project?.token.address, chainId],
|
|
14
|
+
queryKey: ["airdrop-status", project?.token.address, chainId, ipfsSearchUrl, ipfsJsonUrl],
|
|
15
15
|
enabled,
|
|
16
|
-
queryFn: () =>
|
|
16
|
+
queryFn: () => {
|
|
17
|
+
if (!publicClient || !project)
|
|
18
|
+
return null;
|
|
19
|
+
return getAirdropStatus(publicClient, project.token.address, project.treasury, project.token.decimals, project.pricing?.tokenUsd ? parseFloat(project.pricing.tokenUsd) : null, ipfsSearchUrl, ipfsJsonUrl);
|
|
20
|
+
},
|
|
17
21
|
staleTime: 30000, // 30 seconds cache
|
|
18
22
|
});
|
|
19
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-airdrop.js","sourceRoot":"","sources":["../../../../src/client/hook/use-airdrop.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAGvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"use-airdrop.js","sourceRoot":"","sources":["../../../../src/client/hook/use-airdrop.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAGvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAShD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,OAAO,EACP,OAAO,EAAE,CAAC,GAAG,IAAI,EACjB,aAAa,EACb,WAAW,GACiB;IAC5B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,OAAO,GAAG,YAAY,EAAE,KAAK,EAAE,EAAE,CAAA;IAEvC,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA;IAE7D,OAAO,QAAQ,CAAuB;QACpC,QAAQ,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC;QACzF,OAAO;QACP,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAA;YAC1C,OAAO,gBAAgB,CACrB,YAAY,EACZ,OAAO,CAAC,KAAK,CAAC,OAAO,EACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,KAAK,CAAC,QAAQ,EACtB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EACvE,aAAa,EACb,WAAW,CACZ,CAAA;QACH,CAAC;QACD,SAAS,EAAE,MAAM,EAAE,mBAAmB;KACvC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMutation } from "@tanstack/react-query";
|
|
3
|
+
import { usePublicClient, useWalletClient } from "wagmi";
|
|
4
|
+
import { configureSplitsAndUpdateRecipient } from "../../fee-receivers.js";
|
|
5
|
+
export function useConfigureSplits({ onConfigureSplitsSuccess, onUpdateRecipientSuccess, onRecipientAlreadyActive, onSplitsUnchanged, onSuccess, onError, } = {}) {
|
|
6
|
+
const publicClient = usePublicClient();
|
|
7
|
+
const wallet = useWalletClient();
|
|
8
|
+
const chainId = publicClient?.chain?.id;
|
|
9
|
+
return useMutation({
|
|
10
|
+
mutationFn: async (params) => {
|
|
11
|
+
// Use the smart flow that checks if splits/recipient updates are needed
|
|
12
|
+
const result = await configureSplitsAndUpdateRecipient({
|
|
13
|
+
walletClient: wallet.data,
|
|
14
|
+
publicClient: publicClient,
|
|
15
|
+
clankerToken: params.clankerToken,
|
|
16
|
+
chainId: chainId,
|
|
17
|
+
splits: params.splits,
|
|
18
|
+
rewardIndex: params.rewardIndex,
|
|
19
|
+
});
|
|
20
|
+
// Notify if splits were configured
|
|
21
|
+
if (result.configureSplitsReceipt) {
|
|
22
|
+
onConfigureSplitsSuccess?.(result.configureSplitsReceipt.transactionHash);
|
|
23
|
+
}
|
|
24
|
+
else if (result.splitsWereUnchanged) {
|
|
25
|
+
onSplitsUnchanged?.();
|
|
26
|
+
}
|
|
27
|
+
// Notify if recipient was updated
|
|
28
|
+
if (result.updateRecipientReceipt) {
|
|
29
|
+
onUpdateRecipientSuccess?.(result.updateRecipientReceipt.transactionHash);
|
|
30
|
+
}
|
|
31
|
+
else if (result.recipientWasAlreadyActive) {
|
|
32
|
+
onRecipientAlreadyActive?.();
|
|
33
|
+
}
|
|
34
|
+
// Return the final hash (prefer update, then configure, or undefined if nothing changed)
|
|
35
|
+
return (result.updateRecipientReceipt?.transactionHash ??
|
|
36
|
+
result.configureSplitsReceipt?.transactionHash);
|
|
37
|
+
},
|
|
38
|
+
onSuccess: async (hash) => {
|
|
39
|
+
onSuccess?.(hash);
|
|
40
|
+
},
|
|
41
|
+
onError: onError,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-configure-splits.js","sourceRoot":"","sources":["../../../../src/client/hook/use-configure-splits.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAGxD,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAA;AAmBvE,MAAM,UAAU,kBAAkB,CAAC,EACjC,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,SAAS,EACT,OAAO,MACqB,EAAE;IAC9B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,YAAY,EAAE,KAAK,EAAE,EAAE,CAAA;IAEvC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAK,EAAE,MAA4B,EAAE,EAAE;YACjD,wEAAwE;YACxE,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC;gBACrD,YAAY,EAAE,MAAM,CAAC,IAAK;gBAC1B,YAAY,EAAE,YAAa;gBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,OAAO,EAAE,OAAQ;gBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CAAA;YAEF,mCAAmC;YACnC,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;gBAClC,wBAAwB,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAA;YAC3E,CAAC;iBAAM,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBACtC,iBAAiB,EAAE,EAAE,CAAA;YACvB,CAAC;YAED,kCAAkC;YAClC,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;gBAClC,wBAAwB,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAA;YAC3E,CAAC;iBAAM,IAAI,MAAM,CAAC,yBAAyB,EAAE,CAAC;gBAC5C,wBAAwB,EAAE,EAAE,CAAA;YAC9B,CAAC;YAED,yFAAyF;YACzF,OAAO,CACL,MAAM,CAAC,sBAAsB,EAAE,eAAe;gBAC9C,MAAM,CAAC,sBAAsB,EAAE,eAAe,CAC/C,CAAA;QACH,CAAC;QACD,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACxB,SAAS,EAAE,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;QACD,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -3,12 +3,12 @@ import { deployV4 } from "../../deploy-v4.js";
|
|
|
3
3
|
import { useClanker } from "./use-clanker.js";
|
|
4
4
|
/**
|
|
5
5
|
* Deploys a Clanker token and registers it with the Levr factory.
|
|
6
|
-
* Returns tx hash and
|
|
6
|
+
* Returns tx hash, deployed address, and merkle tree CID (if IPFS URL provided).
|
|
7
7
|
*/
|
|
8
|
-
export function useDeploy({ onSuccess, onError }) {
|
|
8
|
+
export function useDeploy({ ipfsJsonUploadUrl, onSuccess, onError }) {
|
|
9
9
|
const clanker = useClanker();
|
|
10
10
|
return useMutation({
|
|
11
|
-
mutationFn: (c) => deployV4({ c, clanker: clanker.data }),
|
|
11
|
+
mutationFn: (c) => deployV4({ c, clanker: clanker.data, ipfsJsonUploadUrl }),
|
|
12
12
|
onSuccess,
|
|
13
13
|
onError,
|
|
14
14
|
});
|
|
@@ -1 +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;
|
|
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;AAa1C;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAmB;IAClF,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAE5B,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,CAAC,CAAkC,EAAE,EAAE,CACjD,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAC3D,SAAS;QACT,OAAO;KACR,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useQuery } from "@tanstack/react-query";
|
|
3
|
+
import { useChainId, usePublicClient } from "wagmi";
|
|
4
|
+
import { getFactoryConfig } from "../../factory.js";
|
|
5
|
+
import { useLevrContext } from "../levr-provider.js";
|
|
6
|
+
import { queryKeys } from "../query-keys.js";
|
|
7
|
+
/**
|
|
8
|
+
* Hook to fetch factory configuration directly (used internally by LevrProvider)
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export function useFactoryConfigQuery(params) {
|
|
12
|
+
const publicClient = usePublicClient();
|
|
13
|
+
const chainId = useChainId();
|
|
14
|
+
const enabled = params?.enabled ?? true;
|
|
15
|
+
return useQuery({
|
|
16
|
+
queryKey: queryKeys.factoryConfig(chainId),
|
|
17
|
+
queryFn: async () => {
|
|
18
|
+
if (!publicClient) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return getFactoryConfig(publicClient, chainId);
|
|
22
|
+
},
|
|
23
|
+
enabled: enabled && !!publicClient,
|
|
24
|
+
staleTime: Infinity, // Factory config never changes unless chain changes
|
|
25
|
+
gcTime: 1000 * 60 * 60, // Cache for 1 hour
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Hook to access factory config from LevrProvider
|
|
30
|
+
*/
|
|
31
|
+
export function useFactory() {
|
|
32
|
+
return useLevrContext().factoryConfig;
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-factory.js","sourceRoot":"","sources":["../../../../src/client/hook/use-factory.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA8B;IAClE,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,IAAI,CAAA;IAEvC,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC;QAC1C,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAChD,CAAC;QACD,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,YAAY;QAClC,SAAS,EAAE,QAAQ,EAAE,oDAAoD;QACzE,MAAM,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,mBAAmB;KAC5C,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,cAAc,EAAE,CAAC,aAAa,CAAA;AACvC,CAAC"}
|
|
@@ -13,13 +13,14 @@ export function useFeeReceivers({ onSuccess, onError } = {}) {
|
|
|
13
13
|
return useMutation({
|
|
14
14
|
mutationFn: (params) => updateFeeReceiver({
|
|
15
15
|
walletClient: wallet.data,
|
|
16
|
+
publicClient: publicClient,
|
|
16
17
|
clankerToken: params.clankerToken,
|
|
17
18
|
chainId: chainId,
|
|
18
19
|
rewardIndex: params.rewardIndex,
|
|
19
20
|
newRecipient: params.newRecipient,
|
|
20
21
|
}),
|
|
21
|
-
onSuccess: async (
|
|
22
|
-
onSuccess?.(
|
|
22
|
+
onSuccess: async (receipt) => {
|
|
23
|
+
onSuccess?.(receipt.transactionHash);
|
|
23
24
|
},
|
|
24
25
|
onError: onError,
|
|
25
26
|
});
|
|
@@ -1 +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,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAcvD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,KAA4B,EAAE;IAChF,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,YAAY,EAAE,KAAK,EAAE,EAAE,CAAA;IAEvC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,
|
|
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,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAcvD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,KAA4B,EAAE;IAChF,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,YAAY,EAAE,KAAK,EAAE,EAAE,CAAA;IAEvC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,CACV,MAAkF,EAClF,EAAE,CACF,iBAAiB,CAAC;YAChB,YAAY,EAAE,MAAM,CAAC,IAAK;YAC1B,YAAY,EAAE,YAAa;YAC3B,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,OAAO,EAAE,EAAE;YAC3B,SAAS,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QACtC,CAAC;QACD,OAAO,EAAE,OAAO;KACjB,CAAC,CAAA;AACJ,CAAC"}
|