levr-sdk 0.2.2 → 0.3.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.
- 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,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault utilities for interacting with the Clanker Vault contract
|
|
3
|
+
* This module provides server-side functions to retrieve and interact with vault state
|
|
4
|
+
*/
|
|
5
|
+
import { ClankerVault } from "./abis/index.js";
|
|
6
|
+
import { GET_VAULT_ADDRESS } from "./constants.js";
|
|
7
|
+
/**
|
|
8
|
+
* Vault status enum
|
|
9
|
+
*/
|
|
10
|
+
export var VaultStatus;
|
|
11
|
+
(function (VaultStatus) {
|
|
12
|
+
VaultStatus["LOCKED"] = "locked";
|
|
13
|
+
VaultStatus["VESTING"] = "vesting";
|
|
14
|
+
VaultStatus["VESTED"] = "vested";
|
|
15
|
+
})(VaultStatus || (VaultStatus = {}));
|
|
16
|
+
/**
|
|
17
|
+
* Build contract calls for vault data
|
|
18
|
+
* @param vaultAddress - Vault contract address
|
|
19
|
+
* @param tokenAddress - Token address to query
|
|
20
|
+
* @returns Array of contract calls
|
|
21
|
+
*/
|
|
22
|
+
function getVaultContracts(vaultAddress, tokenAddress) {
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
address: vaultAddress,
|
|
26
|
+
abi: ClankerVault,
|
|
27
|
+
functionName: "allocation",
|
|
28
|
+
args: [tokenAddress],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
address: vaultAddress,
|
|
32
|
+
abi: ClankerVault,
|
|
33
|
+
functionName: "amountAvailableToClaim",
|
|
34
|
+
args: [tokenAddress],
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parse vault contract results
|
|
40
|
+
* @param results - Array of contract call results
|
|
41
|
+
* @returns Parsed vault state or undefined if allocation doesn't exist
|
|
42
|
+
*/
|
|
43
|
+
function parseVaultData(results) {
|
|
44
|
+
const allocationResult = results[0];
|
|
45
|
+
const claimableResult = results[1];
|
|
46
|
+
// Check if allocation call failed
|
|
47
|
+
if (allocationResult.status === "failure") {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
const allocation = allocationResult.result;
|
|
51
|
+
const claimable = (claimableResult.result ?? 0n);
|
|
52
|
+
return {
|
|
53
|
+
allocation: {
|
|
54
|
+
token: allocation[0],
|
|
55
|
+
amountTotal: allocation[1],
|
|
56
|
+
amountClaimed: allocation[2],
|
|
57
|
+
lockupEndTime: allocation[3],
|
|
58
|
+
vestingEndTime: allocation[4],
|
|
59
|
+
admin: allocation[5],
|
|
60
|
+
},
|
|
61
|
+
claimable,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Fetch vault data using multicall
|
|
66
|
+
* @param publicClient - Viem public client
|
|
67
|
+
* @param tokenAddress - Token address to query
|
|
68
|
+
* @param chainId - Chain ID (optional, can be inferred from publicClient)
|
|
69
|
+
* @returns Parsed vault data or undefined if allocation doesn't exist
|
|
70
|
+
*/
|
|
71
|
+
export async function fetchVaultData(publicClient, tokenAddress, chainId) {
|
|
72
|
+
const actualChainId = chainId || publicClient.chain?.id;
|
|
73
|
+
if (!actualChainId)
|
|
74
|
+
throw new Error("Chain ID not found");
|
|
75
|
+
const vaultAddress = GET_VAULT_ADDRESS(actualChainId);
|
|
76
|
+
if (!vaultAddress)
|
|
77
|
+
throw new Error(`Vault not configured for chain ${actualChainId}`);
|
|
78
|
+
try {
|
|
79
|
+
const contracts = getVaultContracts(vaultAddress, tokenAddress);
|
|
80
|
+
const results = await publicClient.multicall({ contracts });
|
|
81
|
+
return parseVaultData(results);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get vault status with computed messages
|
|
89
|
+
* @param data - Vault data from fetchVaultData
|
|
90
|
+
* @param blockTimestamp - Current block timestamp in seconds (for consistency)
|
|
91
|
+
* @returns Vault status data with messages
|
|
92
|
+
*/
|
|
93
|
+
export function getVaultStatus(data, blockTimestamp) {
|
|
94
|
+
const lockupEndTime = Number(data.allocation.lockupEndTime);
|
|
95
|
+
const vestingEndTime = Number(data.allocation.vestingEndTime);
|
|
96
|
+
let status;
|
|
97
|
+
let statusMessage;
|
|
98
|
+
let descriptionMessage;
|
|
99
|
+
let daysRemaining;
|
|
100
|
+
if (blockTimestamp < lockupEndTime) {
|
|
101
|
+
// Still in lockup
|
|
102
|
+
status = VaultStatus.LOCKED;
|
|
103
|
+
daysRemaining = Math.ceil((lockupEndTime - blockTimestamp) / (24 * 60 * 60));
|
|
104
|
+
statusMessage = "Tokens Locked";
|
|
105
|
+
descriptionMessage = `Your tokens will be available to claim in ${daysRemaining} days.`;
|
|
106
|
+
}
|
|
107
|
+
else if (blockTimestamp < vestingEndTime) {
|
|
108
|
+
// In vesting period
|
|
109
|
+
status = VaultStatus.VESTING;
|
|
110
|
+
daysRemaining = Math.ceil((vestingEndTime - blockTimestamp) / (24 * 60 * 60));
|
|
111
|
+
statusMessage = "Vesting in Progress";
|
|
112
|
+
descriptionMessage = `Tokens are vesting linearly. ${daysRemaining} days until fully vested.`;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Fully vested
|
|
116
|
+
status = VaultStatus.VESTED;
|
|
117
|
+
daysRemaining = 0;
|
|
118
|
+
statusMessage = "Vesting Complete";
|
|
119
|
+
descriptionMessage =
|
|
120
|
+
data.claimable > 0n
|
|
121
|
+
? "All tokens are now available to claim."
|
|
122
|
+
: "All tokens in this vault have been claimed.";
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
status,
|
|
126
|
+
statusMessage,
|
|
127
|
+
descriptionMessage,
|
|
128
|
+
daysRemaining,
|
|
129
|
+
claimable: data.claimable,
|
|
130
|
+
total: data.allocation.amountTotal,
|
|
131
|
+
claimed: data.allocation.amountClaimed,
|
|
132
|
+
lockupEndTime: data.allocation.lockupEndTime,
|
|
133
|
+
vestingEndTime: data.allocation.vestingEndTime,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=vault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/vault.ts"],"names":[],"mappings":"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"}
|