levr-sdk 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/abis/LevrFactory_v1.js +63 -0
- package/dist/esm/abis/LevrGovernor_v1.js +15 -24
- package/dist/esm/abis/LevrStaking_v1.js +7 -1
- package/dist/esm/balance.js +19 -1
- package/dist/esm/balance.js.map +1 -1
- package/dist/esm/client/hook/index.js +14 -3
- package/dist/esm/client/hook/index.js.map +1 -1
- package/dist/esm/client/hook/use-fee-receivers.js +11 -29
- package/dist/esm/client/hook/use-fee-receivers.js.map +1 -1
- package/dist/esm/client/hook/use-governance.js +19 -254
- package/dist/esm/client/hook/use-governance.js.map +1 -1
- package/dist/esm/client/hook/use-pool.js +26 -0
- package/dist/esm/client/hook/use-pool.js.map +1 -0
- package/dist/esm/client/hook/use-prepare.js +6 -3
- package/dist/esm/client/hook/use-prepare.js.map +1 -1
- package/dist/esm/client/hook/use-project.js +24 -9
- package/dist/esm/client/hook/use-project.js.map +1 -1
- package/dist/esm/client/hook/use-proposal.js +48 -0
- package/dist/esm/client/hook/use-proposal.js.map +1 -0
- package/dist/esm/client/hook/use-stake.js +29 -195
- package/dist/esm/client/hook/use-stake.js.map +1 -1
- package/dist/esm/client/hook/use-swap.js +9 -13
- package/dist/esm/client/hook/use-swap.js.map +1 -1
- package/dist/esm/client/hook/use-user.js +25 -0
- package/dist/esm/client/hook/use-user.js.map +1 -0
- package/dist/esm/client/levr-provider.js +65 -107
- package/dist/esm/client/levr-provider.js.map +1 -1
- package/dist/esm/client/query-keys.js +9 -21
- package/dist/esm/client/query-keys.js.map +1 -1
- package/dist/esm/constants.js +1 -1
- package/dist/esm/fee-receivers.js +25 -13
- package/dist/esm/fee-receivers.js.map +1 -1
- package/dist/esm/governance.js +35 -414
- package/dist/esm/governance.js.map +1 -1
- package/dist/esm/index.js +4 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pool.js +70 -0
- package/dist/esm/pool.js.map +1 -0
- package/dist/esm/project.js +389 -135
- package/dist/esm/project.js.map +1 -1
- package/dist/esm/proposal.js +156 -0
- package/dist/esm/proposal.js.map +1 -0
- package/dist/esm/quote/index.js +2 -2
- package/dist/esm/quote/index.js.map +1 -1
- package/dist/esm/stake.js +34 -299
- package/dist/esm/stake.js.map +1 -1
- package/dist/esm/treasury.js +162 -0
- package/dist/esm/treasury.js.map +1 -0
- package/dist/esm/user.js +153 -0
- package/dist/esm/user.js.map +1 -0
- package/dist/types/abis/LevrFactory_v1.d.ts +48 -0
- package/dist/types/abis/LevrGovernor_v1.d.ts +12 -18
- package/dist/types/abis/LevrStaking_v1.d.ts +5 -1
- package/dist/types/balance.d.ts +15 -0
- package/dist/types/balance.d.ts.map +1 -1
- package/dist/types/client/hook/index.d.ts +11 -3
- package/dist/types/client/hook/index.d.ts.map +1 -1
- package/dist/types/client/hook/use-fee-receivers.d.ts +6 -16
- package/dist/types/client/hook/use-fee-receivers.d.ts.map +1 -1
- package/dist/types/client/hook/use-governance.d.ts +4 -98
- package/dist/types/client/hook/use-governance.d.ts.map +1 -1
- package/dist/types/client/hook/use-pool.d.ts +12 -0
- package/dist/types/client/hook/use-pool.d.ts.map +1 -0
- package/dist/types/client/hook/use-prepare.d.ts +1 -2
- package/dist/types/client/hook/use-prepare.d.ts.map +1 -1
- package/dist/types/client/hook/use-project.d.ts +5 -0
- package/dist/types/client/hook/use-project.d.ts.map +1 -1
- package/dist/types/client/hook/use-proposal.d.ts +18 -0
- package/dist/types/client/hook/use-proposal.d.ts.map +1 -0
- package/dist/types/client/hook/use-stake.d.ts +14 -73
- package/dist/types/client/hook/use-stake.d.ts.map +1 -1
- package/dist/types/client/hook/use-swap.d.ts +3 -8
- package/dist/types/client/hook/use-swap.d.ts.map +1 -1
- package/dist/types/client/hook/use-user.d.ts +13 -0
- package/dist/types/client/hook/use-user.d.ts.map +1 -0
- package/dist/types/client/levr-provider.d.ts +30 -50
- package/dist/types/client/levr-provider.d.ts.map +1 -1
- package/dist/types/client/query-keys.d.ts +13 -25
- package/dist/types/client/query-keys.d.ts.map +1 -1
- package/dist/types/fee-receivers.d.ts +28 -0
- package/dist/types/fee-receivers.d.ts.map +1 -1
- package/dist/types/governance.d.ts +5 -92
- package/dist/types/governance.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/pool.d.ts +590 -0
- package/dist/types/pool.d.ts.map +1 -0
- package/dist/types/project.d.ts +56 -1
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/proposal.d.ts +1161 -0
- package/dist/types/proposal.d.ts.map +1 -0
- package/dist/types/quote/index.d.ts +2 -2
- package/dist/types/quote/index.d.ts.map +1 -1
- package/dist/types/stake.d.ts +16 -41
- package/dist/types/stake.d.ts.map +1 -1
- package/dist/types/treasury.d.ts +16 -0
- package/dist/types/treasury.d.ts.map +1 -0
- package/dist/types/user.d.ts +188 -0
- package/dist/types/user.d.ts.map +1 -0
- package/package.json +5 -2
- package/dist/esm/client/hook/use-balance.js +0 -57
- package/dist/esm/client/hook/use-balance.js.map +0 -1
- package/dist/esm/client/hook/use-projects.js +0 -22
- package/dist/esm/client/hook/use-projects.js.map +0 -1
- package/dist/esm/client/hook/use-proposals.js +0 -29
- package/dist/esm/client/hook/use-proposals.js.map +0 -1
- package/dist/esm/projects.js +0 -184
- package/dist/esm/projects.js.map +0 -1
- package/dist/esm/proposals.js +0 -98
- package/dist/esm/proposals.js.map +0 -1
- package/dist/types/client/hook/use-balance.d.ts +0 -20
- package/dist/types/client/hook/use-balance.d.ts.map +0 -1
- package/dist/types/client/hook/use-projects.d.ts +0 -6
- package/dist/types/client/hook/use-projects.d.ts.map +0 -1
- package/dist/types/client/hook/use-proposals.d.ts +0 -16
- package/dist/types/client/hook/use-proposals.d.ts.map +0 -1
- package/dist/types/projects.d.ts +0 -20
- package/dist/types/projects.d.ts.map +0 -1
- package/dist/types/proposals.d.ts +0 -20
- package/dist/types/proposals.d.ts.map +0 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { erc20Abi } from "viem";
|
|
2
|
+
import { IClankerAirdrop } from "./abis/index.js";
|
|
3
|
+
import { formatBalanceWithUsd } from "./balance.js";
|
|
4
|
+
import { GET_CLANKER_AIRDROP_ADDRESS, TREASURY_AIRDROP_AMOUNTS } from "./constants.js";
|
|
5
|
+
/**
|
|
6
|
+
* Find treasury airdrop allocation by checking all known amounts using multicall
|
|
7
|
+
*/
|
|
8
|
+
async function findTreasuryAllocation(publicClient, clankerToken, treasury) {
|
|
9
|
+
const chainId = publicClient.chain?.id;
|
|
10
|
+
const airdropAddress = GET_CLANKER_AIRDROP_ADDRESS(chainId);
|
|
11
|
+
if (!airdropAddress)
|
|
12
|
+
return null;
|
|
13
|
+
// Prepare multicall for all possible treasury airdrop amounts + treasury balance check
|
|
14
|
+
const amounts = Object.values(TREASURY_AIRDROP_AMOUNTS).map((amountInTokens) => BigInt(amountInTokens) * 10n ** 18n);
|
|
15
|
+
const results = await publicClient.multicall({
|
|
16
|
+
contracts: [
|
|
17
|
+
// First check treasury balance
|
|
18
|
+
{
|
|
19
|
+
address: clankerToken,
|
|
20
|
+
abi: erc20Abi,
|
|
21
|
+
functionName: "balanceOf",
|
|
22
|
+
args: [treasury],
|
|
23
|
+
},
|
|
24
|
+
// Then check all airdrop amounts
|
|
25
|
+
...amounts.map((amount) => ({
|
|
26
|
+
address: airdropAddress,
|
|
27
|
+
abi: IClankerAirdrop,
|
|
28
|
+
functionName: "amountAvailableToClaim",
|
|
29
|
+
args: [clankerToken, treasury, amount],
|
|
30
|
+
})),
|
|
31
|
+
], // Mixed ABIs in multicall
|
|
32
|
+
allowFailure: true,
|
|
33
|
+
});
|
|
34
|
+
// Extract treasury balance from first result
|
|
35
|
+
const treasuryBalanceResult = results[0];
|
|
36
|
+
const treasuryBalance = treasuryBalanceResult && treasuryBalanceResult.status === "success"
|
|
37
|
+
? treasuryBalanceResult.result
|
|
38
|
+
: 0n;
|
|
39
|
+
// Extract airdrop check results (skip first result which is balance)
|
|
40
|
+
const airdropResults = results.slice(1);
|
|
41
|
+
// Collect all valid results
|
|
42
|
+
const allResults = [];
|
|
43
|
+
for (let i = 0; i < airdropResults.length; i++) {
|
|
44
|
+
const result = airdropResults[i];
|
|
45
|
+
const amount = amounts[i];
|
|
46
|
+
if (result.status === "success" && result.result !== undefined) {
|
|
47
|
+
const available = result.result;
|
|
48
|
+
if (available > 0n) {
|
|
49
|
+
// Available - highest priority (1)
|
|
50
|
+
allResults.push({ amount, available, status: "available", priority: 1 });
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Available is 0 - check treasury balance to determine if claimed or locked
|
|
54
|
+
const isClaimed = treasuryBalance >= amount;
|
|
55
|
+
const priority = isClaimed ? 4 : 2;
|
|
56
|
+
const status = isClaimed ? "claimed" : "locked";
|
|
57
|
+
const error = isClaimed ? "Treasury airdrop already claimed" : "Airdrop is still locked";
|
|
58
|
+
allResults.push({ amount, available: 0n, status, priority, error });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (result.status === "failure") {
|
|
62
|
+
const errorMessage = result.error?.message || "";
|
|
63
|
+
// AirdropNotCreated means this amount wasn't configured - skip entirely
|
|
64
|
+
if (errorMessage.includes("AirdropNotCreated")) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
// AirdropNotUnlocked means this amount exists but is locked (priority 2)
|
|
68
|
+
if (errorMessage.includes("AirdropNotUnlocked")) {
|
|
69
|
+
allResults.push({
|
|
70
|
+
amount,
|
|
71
|
+
available: 0n,
|
|
72
|
+
status: "locked",
|
|
73
|
+
error: "Airdrop is still locked",
|
|
74
|
+
priority: 2,
|
|
75
|
+
});
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// Already claimed errors (priority 3)
|
|
79
|
+
if (errorMessage.includes("UserMaxClaimed") || errorMessage.includes("TotalMaxClaimed")) {
|
|
80
|
+
allResults.push({
|
|
81
|
+
amount,
|
|
82
|
+
available: 0n,
|
|
83
|
+
status: "claimed",
|
|
84
|
+
error: "Already claimed maximum amount",
|
|
85
|
+
priority: 3,
|
|
86
|
+
});
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// Arithmetic underflow/overflow means a different amount was claimed - skip
|
|
90
|
+
if (errorMessage.includes("underflow") || errorMessage.includes("overflow")) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Other errors - treat as locked (priority 2)
|
|
94
|
+
allResults.push({
|
|
95
|
+
amount,
|
|
96
|
+
available: 0n,
|
|
97
|
+
status: "locked",
|
|
98
|
+
error: errorMessage,
|
|
99
|
+
priority: 2,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// If no results found, return null
|
|
104
|
+
if (allResults.length === 0) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
// Sort by priority (lower is better), then by amount (higher is better for same priority)
|
|
108
|
+
allResults.sort((a, b) => {
|
|
109
|
+
if (a.priority !== b.priority) {
|
|
110
|
+
return a.priority - b.priority;
|
|
111
|
+
}
|
|
112
|
+
// For same priority, prefer larger amounts
|
|
113
|
+
return a.amount > b.amount ? -1 : 1;
|
|
114
|
+
});
|
|
115
|
+
// Return the best result
|
|
116
|
+
const best = allResults[0];
|
|
117
|
+
return {
|
|
118
|
+
amount: best.amount,
|
|
119
|
+
available: best.available,
|
|
120
|
+
status: best.status,
|
|
121
|
+
error: best.error,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get treasury airdrop status
|
|
126
|
+
*/
|
|
127
|
+
export async function getTreasuryAirdropStatus(publicClient, clankerToken, treasury, tokenDecimals, tokenUsdPrice) {
|
|
128
|
+
const allocation = await findTreasuryAllocation(publicClient, clankerToken, treasury);
|
|
129
|
+
if (!allocation) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
// Generate appropriate error message based on status
|
|
133
|
+
let error;
|
|
134
|
+
switch (allocation.status) {
|
|
135
|
+
case "available":
|
|
136
|
+
error = undefined;
|
|
137
|
+
break;
|
|
138
|
+
case "locked":
|
|
139
|
+
error = allocation.error || "Airdrop is still locked (lockup period not passed)";
|
|
140
|
+
break;
|
|
141
|
+
case "claimed":
|
|
142
|
+
error = "Treasury airdrop already claimed";
|
|
143
|
+
break;
|
|
144
|
+
case "not_found":
|
|
145
|
+
error = "No treasury airdrop found";
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
availableAmount: formatBalanceWithUsd(allocation.available, tokenDecimals, tokenUsdPrice),
|
|
150
|
+
allocatedAmount: formatBalanceWithUsd(allocation.amount, tokenDecimals, tokenUsdPrice),
|
|
151
|
+
isAvailable: allocation.status === "available" && allocation.available > 0n,
|
|
152
|
+
error,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get available airdrop amount for treasury
|
|
157
|
+
*/
|
|
158
|
+
export async function getTreasuryAirdropAvailable(publicClient, clankerToken, treasury) {
|
|
159
|
+
const allocation = await findTreasuryAllocation(publicClient, clankerToken, treasury);
|
|
160
|
+
return allocation?.available || 0n;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=treasury.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treasury.js","sourceRoot":"","sources":["../../src/treasury.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAiBnF;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACnC,YAA6B,EAC7B,YAA2B,EAC3B,QAAuB;IAEvB,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,CAAA;IACtC,MAAM,cAAc,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAA;IAE3D,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAA;IAEhC,uFAAuF;IACvF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,GAAG,CACzD,CAAC,cAAc,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,GAAG,IAAI,GAAG,CACxD,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC;QAC3C,SAAS,EAAE;YACT,+BAA+B;YAC/B;gBACE,OAAO,EAAE,YAAY;gBACrB,GAAG,EAAE,QAAQ;gBACb,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,QAAQ,CAAC;aACjB;YACD,iCAAiC;YACjC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC1B,OAAO,EAAE,cAAc;gBACvB,GAAG,EAAE,eAAe;gBACpB,YAAY,EAAE,wBAAiC;gBAC/C,IAAI,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC;aACvC,CAAC,CAAC;SACG,EAAE,0BAA0B;QACpC,YAAY,EAAE,IAAI;KACnB,CAAC,CAAA;IAEF,6CAA6C;IAC7C,MAAM,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACxC,MAAM,eAAe,GACnB,qBAAqB,IAAI,qBAAqB,CAAC,MAAM,KAAK,SAAS;QACjE,CAAC,CAAE,qBAAqB,CAAC,MAAiB;QAC1C,CAAC,CAAC,EAAE,CAAA;IAER,qEAAqE;IACrE,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEvC,4BAA4B;IAC5B,MAAM,UAAU,GAMX,EAAE,CAAA;IAEP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAgB,CAAA;YAEzC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;gBACnB,mCAAmC;gBACnC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;YAC1E,CAAC;iBAAM,CAAC;gBACN,4EAA4E;gBAC5E,MAAM,SAAS,GAAG,eAAe,IAAI,MAAM,CAAA;gBAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAClC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;gBAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,yBAAyB,CAAA;gBAExF,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;YACrE,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAA;YAEhD,wEAAwE;YACxE,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC/C,SAAQ;YACV,CAAC;YAED,yEAAyE;YACzE,IAAI,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAChD,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM;oBACN,SAAS,EAAE,EAAE;oBACb,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,yBAAyB;oBAChC,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YAED,sCAAsC;YACtC,IAAI,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACxF,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM;oBACN,SAAS,EAAE,EAAE;oBACb,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,gCAAgC;oBACvC,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YAED,4EAA4E;YAC5E,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5E,SAAQ;YACV,CAAC;YAED,8CAA8C;YAC9C,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM;gBACN,SAAS,EAAE,EAAE;gBACb,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,YAAY;gBACnB,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,0FAA0F;IAC1F,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAA;QAChC,CAAC;QACD,2CAA2C;QAC3C,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,yBAAyB;IACzB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;IAE1B,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,YAA6B,EAC7B,YAA2B,EAC3B,QAAuB,EACvB,aAAqB,EACrB,aAA4B;IAE5B,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;IAErF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,qDAAqD;IACrD,IAAI,KAAyB,CAAA;IAC7B,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC;QAC1B,KAAK,WAAW;YACd,KAAK,GAAG,SAAS,CAAA;YACjB,MAAK;QACP,KAAK,QAAQ;YACX,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,oDAAoD,CAAA;YAChF,MAAK;QACP,KAAK,SAAS;YACZ,KAAK,GAAG,kCAAkC,CAAA;YAC1C,MAAK;QACP,KAAK,WAAW;YACd,KAAK,GAAG,2BAA2B,CAAA;YACnC,MAAK;IACT,CAAC;IAED,OAAO;QACL,eAAe,EAAE,oBAAoB,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,EAAE,aAAa,CAAC;QACzF,eAAe,EAAE,oBAAoB,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC;QACtF,WAAW,EAAE,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,UAAU,CAAC,SAAS,GAAG,EAAE;QAC3E,KAAK;KACN,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,YAA6B,EAC7B,YAA2B,EAC3B,QAAuB;IAEvB,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;IACrF,OAAO,UAAU,EAAE,SAAS,IAAI,EAAE,CAAA;AACpC,CAAC"}
|
package/dist/esm/user.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { erc20Abi } from "viem";
|
|
2
|
+
import { LevrStaking_v1 } from "./abis/index.js";
|
|
3
|
+
import { formatBalanceWithUsd } from "./balance.js";
|
|
4
|
+
import { WETH } from "./constants.js";
|
|
5
|
+
// ========================================
|
|
6
|
+
// HELPER UTILS (for composition in larger multicalls)
|
|
7
|
+
// ========================================
|
|
8
|
+
/**
|
|
9
|
+
* Helper: Get balance contracts for multicall composition
|
|
10
|
+
*/
|
|
11
|
+
export function balanceContracts(params) {
|
|
12
|
+
const contracts = [
|
|
13
|
+
{
|
|
14
|
+
address: params.clankerToken,
|
|
15
|
+
abi: erc20Abi,
|
|
16
|
+
functionName: "balanceOf",
|
|
17
|
+
args: [params.userAddress],
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
if (params.wethAddress) {
|
|
21
|
+
contracts.push({
|
|
22
|
+
address: params.wethAddress,
|
|
23
|
+
abi: erc20Abi,
|
|
24
|
+
functionName: "balanceOf",
|
|
25
|
+
args: [params.userAddress],
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return contracts;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Helper: Get user-specific staking contracts for multicall composition
|
|
32
|
+
* Pool-level stats (totalStaked, apr, outstandingRewards) now in project.ts
|
|
33
|
+
*/
|
|
34
|
+
export function stakingContracts(params) {
|
|
35
|
+
const contracts = [
|
|
36
|
+
{
|
|
37
|
+
address: params.stakingAddress,
|
|
38
|
+
abi: LevrStaking_v1,
|
|
39
|
+
functionName: "stakedBalanceOf",
|
|
40
|
+
args: [params.userAddress],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
address: params.clankerToken,
|
|
44
|
+
abi: erc20Abi,
|
|
45
|
+
functionName: "allowance",
|
|
46
|
+
args: [params.userAddress, params.stakingAddress],
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
address: params.stakingAddress,
|
|
50
|
+
abi: LevrStaking_v1,
|
|
51
|
+
functionName: "claimableRewards",
|
|
52
|
+
args: [params.userAddress, params.clankerToken],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
address: params.stakingAddress,
|
|
56
|
+
abi: LevrStaking_v1,
|
|
57
|
+
functionName: "getVotingPower",
|
|
58
|
+
args: [params.userAddress],
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
if (params.wethAddress) {
|
|
62
|
+
contracts.push({
|
|
63
|
+
address: params.stakingAddress,
|
|
64
|
+
abi: LevrStaking_v1,
|
|
65
|
+
functionName: "claimableRewards",
|
|
66
|
+
args: [params.userAddress, params.wethAddress],
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return contracts;
|
|
70
|
+
}
|
|
71
|
+
// ========================================
|
|
72
|
+
// MAIN USER DATA FUNCTION
|
|
73
|
+
// ========================================
|
|
74
|
+
/**
|
|
75
|
+
* Get all user-related data in a single efficient multicall
|
|
76
|
+
* Composes balances, staking, and governance data with USD values
|
|
77
|
+
*/
|
|
78
|
+
export async function getUser({ publicClient, userAddress, project }) {
|
|
79
|
+
if (Object.values({ publicClient, userAddress, project }).some((value) => !value)) {
|
|
80
|
+
throw new Error("Invalid user params");
|
|
81
|
+
}
|
|
82
|
+
const chainId = publicClient.chain?.id;
|
|
83
|
+
if (!chainId)
|
|
84
|
+
throw new Error("Chain ID not found on public client");
|
|
85
|
+
const wethAddress = WETH(chainId)?.address;
|
|
86
|
+
const { clankerToken, stakingAddress, tokenDecimals, pricing } = {
|
|
87
|
+
clankerToken: project.token.address,
|
|
88
|
+
stakingAddress: project.staking,
|
|
89
|
+
tokenDecimals: project.token.decimals,
|
|
90
|
+
pricing: project.pricing,
|
|
91
|
+
};
|
|
92
|
+
// Build single comprehensive multicall for ALL user data
|
|
93
|
+
const contracts = [
|
|
94
|
+
// Balances
|
|
95
|
+
{
|
|
96
|
+
address: clankerToken,
|
|
97
|
+
abi: erc20Abi,
|
|
98
|
+
functionName: "balanceOf",
|
|
99
|
+
args: [userAddress],
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
if (wethAddress) {
|
|
103
|
+
contracts.push({
|
|
104
|
+
address: wethAddress,
|
|
105
|
+
abi: erc20Abi,
|
|
106
|
+
functionName: "balanceOf",
|
|
107
|
+
args: [userAddress],
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// Add staking contracts
|
|
111
|
+
contracts.push(...stakingContracts({ userAddress, stakingAddress, clankerToken, wethAddress }));
|
|
112
|
+
// Execute single multicall + native balance
|
|
113
|
+
const [nativeBalance, ...multicallResults] = await Promise.all([
|
|
114
|
+
publicClient.getBalance({ address: userAddress }),
|
|
115
|
+
publicClient.multicall({ contracts }),
|
|
116
|
+
]);
|
|
117
|
+
const results = multicallResults[0];
|
|
118
|
+
// Parse balance results
|
|
119
|
+
const stakingDataStartIndex = wethAddress ? 2 : 1;
|
|
120
|
+
const tokenBalanceRaw = results[0].result;
|
|
121
|
+
const wethBalanceRaw = wethAddress ? results[1].result : 0n;
|
|
122
|
+
// Parse user-specific staking results (pool stats now in project)
|
|
123
|
+
const stakedBalance = results[stakingDataStartIndex + 0].result;
|
|
124
|
+
const allowance = results[stakingDataStartIndex + 1].result;
|
|
125
|
+
const claimableRewardsToken = results[stakingDataStartIndex + 2].result;
|
|
126
|
+
const votingPower = results[stakingDataStartIndex + 3].result;
|
|
127
|
+
// Parse WETH claimable rewards if available
|
|
128
|
+
const claimableRewardsWeth = wethAddress
|
|
129
|
+
? results[stakingDataStartIndex + 4].result
|
|
130
|
+
: null;
|
|
131
|
+
// Calculate USD values
|
|
132
|
+
const tokenPrice = pricing ? parseFloat(pricing.tokenUsd) : null;
|
|
133
|
+
const wethPrice = pricing ? parseFloat(pricing.wethUsd) : null;
|
|
134
|
+
return {
|
|
135
|
+
balances: {
|
|
136
|
+
token: formatBalanceWithUsd(tokenBalanceRaw, tokenDecimals, tokenPrice),
|
|
137
|
+
weth: formatBalanceWithUsd(wethBalanceRaw, 18, wethPrice),
|
|
138
|
+
eth: formatBalanceWithUsd(nativeBalance, 18, wethPrice),
|
|
139
|
+
},
|
|
140
|
+
staking: {
|
|
141
|
+
stakedBalance: formatBalanceWithUsd(stakedBalance, tokenDecimals, tokenPrice),
|
|
142
|
+
allowance: formatBalanceWithUsd(allowance, tokenDecimals, tokenPrice),
|
|
143
|
+
claimableRewards: {
|
|
144
|
+
staking: formatBalanceWithUsd(claimableRewardsToken, tokenDecimals, tokenPrice),
|
|
145
|
+
weth: claimableRewardsWeth !== null && wethAddress
|
|
146
|
+
? formatBalanceWithUsd(claimableRewardsWeth, 18, wethPrice)
|
|
147
|
+
: null,
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
votingPower: formatBalanceWithUsd(votingPower, tokenDecimals, tokenPrice),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/user.ts"],"names":[],"mappings":"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"}
|
|
@@ -141,6 +141,54 @@ declare const _default: readonly [{
|
|
|
141
141
|
}];
|
|
142
142
|
}];
|
|
143
143
|
readonly stateMutability: "view";
|
|
144
|
+
}, {
|
|
145
|
+
readonly type: "function";
|
|
146
|
+
readonly name: "getProjects";
|
|
147
|
+
readonly inputs: readonly [{
|
|
148
|
+
readonly name: "offset";
|
|
149
|
+
readonly type: "uint256";
|
|
150
|
+
readonly internalType: "uint256";
|
|
151
|
+
}, {
|
|
152
|
+
readonly name: "limit";
|
|
153
|
+
readonly type: "uint256";
|
|
154
|
+
readonly internalType: "uint256";
|
|
155
|
+
}];
|
|
156
|
+
readonly outputs: readonly [{
|
|
157
|
+
readonly name: "projects";
|
|
158
|
+
readonly type: "tuple[]";
|
|
159
|
+
readonly internalType: "struct ILevrFactory_v1.ProjectInfo[]";
|
|
160
|
+
readonly components: readonly [{
|
|
161
|
+
readonly name: "clankerToken";
|
|
162
|
+
readonly type: "address";
|
|
163
|
+
readonly internalType: "address";
|
|
164
|
+
}, {
|
|
165
|
+
readonly name: "project";
|
|
166
|
+
readonly type: "tuple";
|
|
167
|
+
readonly internalType: "struct ILevrFactory_v1.Project";
|
|
168
|
+
readonly components: readonly [{
|
|
169
|
+
readonly name: "treasury";
|
|
170
|
+
readonly type: "address";
|
|
171
|
+
readonly internalType: "address";
|
|
172
|
+
}, {
|
|
173
|
+
readonly name: "governor";
|
|
174
|
+
readonly type: "address";
|
|
175
|
+
readonly internalType: "address";
|
|
176
|
+
}, {
|
|
177
|
+
readonly name: "staking";
|
|
178
|
+
readonly type: "address";
|
|
179
|
+
readonly internalType: "address";
|
|
180
|
+
}, {
|
|
181
|
+
readonly name: "stakedToken";
|
|
182
|
+
readonly type: "address";
|
|
183
|
+
readonly internalType: "address";
|
|
184
|
+
}];
|
|
185
|
+
}];
|
|
186
|
+
}, {
|
|
187
|
+
readonly name: "total";
|
|
188
|
+
readonly type: "uint256";
|
|
189
|
+
readonly internalType: "uint256";
|
|
190
|
+
}];
|
|
191
|
+
readonly stateMutability: "view";
|
|
144
192
|
}, {
|
|
145
193
|
readonly type: "function";
|
|
146
194
|
readonly name: "isTrustedForwarder";
|
|
@@ -138,6 +138,18 @@ declare const _default: readonly [{
|
|
|
138
138
|
readonly name: "cycleId";
|
|
139
139
|
readonly type: "uint256";
|
|
140
140
|
readonly internalType: "uint256";
|
|
141
|
+
}, {
|
|
142
|
+
readonly name: "state";
|
|
143
|
+
readonly type: "uint8";
|
|
144
|
+
readonly internalType: "enum ILevrGovernor_v1.ProposalState";
|
|
145
|
+
}, {
|
|
146
|
+
readonly name: "meetsQuorum";
|
|
147
|
+
readonly type: "bool";
|
|
148
|
+
readonly internalType: "bool";
|
|
149
|
+
}, {
|
|
150
|
+
readonly name: "meetsApproval";
|
|
151
|
+
readonly type: "bool";
|
|
152
|
+
readonly internalType: "bool";
|
|
141
153
|
}];
|
|
142
154
|
}];
|
|
143
155
|
readonly stateMutability: "view";
|
|
@@ -186,24 +198,6 @@ declare const _default: readonly [{
|
|
|
186
198
|
}];
|
|
187
199
|
}];
|
|
188
200
|
readonly stateMutability: "view";
|
|
189
|
-
}, {
|
|
190
|
-
readonly type: "function";
|
|
191
|
-
readonly name: "getVotingPowerSnapshot";
|
|
192
|
-
readonly inputs: readonly [{
|
|
193
|
-
readonly name: "proposalId";
|
|
194
|
-
readonly type: "uint256";
|
|
195
|
-
readonly internalType: "uint256";
|
|
196
|
-
}, {
|
|
197
|
-
readonly name: "user";
|
|
198
|
-
readonly type: "address";
|
|
199
|
-
readonly internalType: "address";
|
|
200
|
-
}];
|
|
201
|
-
readonly outputs: readonly [{
|
|
202
|
-
readonly name: "";
|
|
203
|
-
readonly type: "uint256";
|
|
204
|
-
readonly internalType: "uint256";
|
|
205
|
-
}];
|
|
206
|
-
readonly stateMutability: "view";
|
|
207
201
|
}, {
|
|
208
202
|
readonly type: "function";
|
|
209
203
|
readonly name: "getWinner";
|
|
@@ -322,7 +322,11 @@ declare const _default: readonly [{
|
|
|
322
322
|
readonly type: "address";
|
|
323
323
|
readonly internalType: "address";
|
|
324
324
|
}];
|
|
325
|
-
readonly outputs: readonly [
|
|
325
|
+
readonly outputs: readonly [{
|
|
326
|
+
readonly name: "newVotingPower";
|
|
327
|
+
readonly type: "uint256";
|
|
328
|
+
readonly internalType: "uint256";
|
|
329
|
+
}];
|
|
326
330
|
readonly stateMutability: "nonpayable";
|
|
327
331
|
}, {
|
|
328
332
|
readonly type: "event";
|
package/dist/types/balance.d.ts
CHANGED
|
@@ -10,6 +10,21 @@ export type BalanceParams = {
|
|
|
10
10
|
tokens: TokenConfig[];
|
|
11
11
|
pricing?: PricingResult;
|
|
12
12
|
};
|
|
13
|
+
/**
|
|
14
|
+
* Calculate USD value for a balance
|
|
15
|
+
* @param formatted - Formatted token amount as string
|
|
16
|
+
* @param usdPrice - USD price as string
|
|
17
|
+
* @returns USD value as string
|
|
18
|
+
*/
|
|
19
|
+
export declare const calculateUsd: (formatted: string, usdPrice: string) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Format a balance with optional USD value
|
|
22
|
+
* @param amount - Raw balance amount
|
|
23
|
+
* @param decimals - Token decimals
|
|
24
|
+
* @param usdPrice - Optional USD price (null if not available)
|
|
25
|
+
* @returns BalanceResult with raw, formatted, and optional USD value
|
|
26
|
+
*/
|
|
27
|
+
export declare const formatBalanceWithUsd: (amount: bigint, decimals: number, usdPrice: number | null) => BalanceResult;
|
|
13
28
|
/**
|
|
14
29
|
* Get balances for multiple tokens including native currency
|
|
15
30
|
* @param publicClient - The public client to use for queries
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/balance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,eAAe,CAAA;IAC7B,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;IACtB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;
|
|
1
|
+
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/balance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,eAAe,CAAA;IAC7B,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;IACtB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,EAAE,UAAU,MAAM,KAAG,MAIlE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,MAAM,EACd,UAAU,MAAM,EAChB,UAAU,MAAM,GAAG,IAAI,KACtB,aAOF,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,EAC5B,YAAY,EACZ,OAAO,EACP,MAAM,EACN,OAAO,GACR,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAoFxD"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to access user data from LevrProvider (hierarchical)
|
|
3
|
+
*/
|
|
4
|
+
export declare const useUser: () => import("@tanstack/react-query").UseQueryResult<import("../..").User | null>;
|
|
1
5
|
/**
|
|
2
6
|
* Hook to access project data from LevrProvider
|
|
3
7
|
*/
|
|
4
8
|
export declare const useProject: () => import("@tanstack/react-query").UseQueryResult<import("../..").Project | null>;
|
|
5
9
|
/**
|
|
6
|
-
* Hook to access
|
|
10
|
+
* Hook to access pool data from LevrProvider
|
|
7
11
|
*/
|
|
8
|
-
export declare const
|
|
12
|
+
export declare const usePool: () => import("@tanstack/react-query").UseQueryResult<import("../..").PoolData | null>;
|
|
9
13
|
/**
|
|
10
14
|
* Hook to access proposals from LevrProvider
|
|
11
15
|
*/
|
|
@@ -25,8 +29,12 @@ export * from './use-fee-receivers';
|
|
|
25
29
|
export * from './use-governance';
|
|
26
30
|
export * from './use-stake';
|
|
27
31
|
export * from './use-swap';
|
|
32
|
+
export { usePoolQuery } from './use-pool';
|
|
33
|
+
export { useProposalsQuery } from './use-proposal';
|
|
34
|
+
export { useUserQuery } from './use-user';
|
|
28
35
|
export * from './use-deploy';
|
|
29
36
|
export * from './use-prepare';
|
|
30
|
-
export * from './use-
|
|
37
|
+
export * from './use-project';
|
|
38
|
+
export { useProposal } from './use-proposal';
|
|
31
39
|
export * from './use-register';
|
|
32
40
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/index.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,UAAU,sFAAiC,CAAA;AAExD;;GAEG;AACH,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/index.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,OAAO,mFAA8B,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,UAAU,sFAAiC,CAAA;AAExD;;GAEG;AACH,eAAO,MAAM,OAAO,uFAA8B,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,YAAY,8FAAmC,CAAA;AAE5D;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;SAAmC,CAAA;AAM/D,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAM1B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAMzC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,cAAc,gBAAgB,CAAA"}
|
|
@@ -1,26 +1,16 @@
|
|
|
1
|
-
import type { Address } from 'viem';
|
|
2
1
|
import type { UpdateFeeReceiverParams } from '../../fee-receivers';
|
|
3
|
-
export type UseFeeReceiversQueryParams = {
|
|
4
|
-
clankerToken: Address | null;
|
|
5
|
-
enabled?: boolean;
|
|
6
|
-
};
|
|
7
|
-
/**
|
|
8
|
-
* Internal: Creates fee receivers query with all logic
|
|
9
|
-
* Used by LevrProvider
|
|
10
|
-
*/
|
|
11
|
-
export declare function useFeeReceiversQuery({ clankerToken, enabled: e, }: UseFeeReceiversQueryParams): import("@tanstack/react-query").UseQueryResult<import("../..").FeeReceiverAdmin[] | undefined, Error>;
|
|
12
2
|
export type UseFeeReceiversParams = {
|
|
13
|
-
clankerToken?: `0x${string}` | undefined;
|
|
14
|
-
enabled?: boolean;
|
|
15
3
|
onSuccess?: (hash: `0x${string}`) => void;
|
|
16
4
|
onError?: (error: unknown) => void;
|
|
17
5
|
};
|
|
18
6
|
/**
|
|
19
|
-
* Hook to access fee receivers
|
|
20
|
-
*
|
|
7
|
+
* Hook to access fee receivers and update mutations
|
|
8
|
+
* Fee receivers come from project.feeReceivers (with areYouAnAdmin already calculated)
|
|
21
9
|
*/
|
|
22
|
-
export declare function useFeeReceivers({
|
|
23
|
-
|
|
10
|
+
export declare function useFeeReceivers({ onSuccess, onError }?: UseFeeReceiversParams): {
|
|
11
|
+
data: import("../..").FeeReceiverAdmin[] | undefined;
|
|
12
|
+
isLoading: boolean;
|
|
13
|
+
error: Error | null;
|
|
24
14
|
mutate: import("@tanstack/react-query").UseMutationResult<`0x${string}`, unknown, Omit<UpdateFeeReceiverParams, "chainId" | "walletClient">, unknown>;
|
|
25
15
|
};
|
|
26
16
|
//# sourceMappingURL=use-fee-receivers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-fee-receivers.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/use-fee-receivers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-fee-receivers.d.ts","sourceRoot":"","sources":["../../../../src/client/hook/use-fee-receivers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAWlE,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,KAAK,IAAI,CAAA;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC,CAAA;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAE,qBAA0B;;;;;EA4BjF"}
|