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
package/dist/esm/deploy-v4.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { LevrFactory_v1, LevrForwarder_v1 } from "./abis/index.js";
|
|
2
|
+
import ClankerAirdropV2 from "./abis/ClankerAirdropV2.js";
|
|
2
3
|
import { buildCalldatasV4 } from "./build-calldatas-v4.js";
|
|
3
|
-
import { GET_FACTORY_ADDRESS } from "./constants.js";
|
|
4
|
-
|
|
4
|
+
import { GET_CLANKER_AIRDROP_ADDRESS, GET_FACTORY_ADDRESS } from "./constants.js";
|
|
5
|
+
import { storeMerkleTreeToIPFS } from "./ipfs-merkle-tree.js";
|
|
6
|
+
export const deployV4 = async ({ c, clanker, ipfsJsonUploadUrl, }) => {
|
|
5
7
|
if (!clanker)
|
|
6
8
|
throw new Error("Clanker SDK not found");
|
|
7
9
|
const wallet = clanker.wallet;
|
|
@@ -11,6 +13,8 @@ export const deployV4 = async ({ c, clanker }) => {
|
|
|
11
13
|
if (!wallet)
|
|
12
14
|
throw new Error("Wallet not found");
|
|
13
15
|
const chainId = publicClient.chain?.id;
|
|
16
|
+
if (!chainId)
|
|
17
|
+
throw new Error("Chain ID not found");
|
|
14
18
|
const factoryAddress = GET_FACTORY_ADDRESS(chainId);
|
|
15
19
|
if (!factoryAddress)
|
|
16
20
|
throw new Error("Factory address is required");
|
|
@@ -19,7 +23,7 @@ export const deployV4 = async ({ c, clanker }) => {
|
|
|
19
23
|
abi: LevrFactory_v1,
|
|
20
24
|
functionName: "trustedForwarder",
|
|
21
25
|
});
|
|
22
|
-
const { callDatas, clankerTokenAddress, totalValue } = await buildCalldatasV4({
|
|
26
|
+
const { callDatas, clankerTokenAddress, totalValue, merkleTree } = await buildCalldatasV4({
|
|
23
27
|
c,
|
|
24
28
|
clanker,
|
|
25
29
|
publicClient,
|
|
@@ -38,9 +42,58 @@ export const deployV4 = async ({ c, clanker }) => {
|
|
|
38
42
|
if (receipt.status === "reverted") {
|
|
39
43
|
throw new Error("Deployment transaction reverted");
|
|
40
44
|
}
|
|
45
|
+
// Store merkle tree to IPFS if ipfsJsonUploadUrl is provided and airdrop exists
|
|
46
|
+
let merkleTreeCID;
|
|
47
|
+
if (ipfsJsonUploadUrl && merkleTree) {
|
|
48
|
+
// Get airdrop contract info to save metadata
|
|
49
|
+
const airdropAddress = GET_CLANKER_AIRDROP_ADDRESS(chainId);
|
|
50
|
+
if (airdropAddress) {
|
|
51
|
+
// Fetch airdrop info to get lockupEndTime and other metadata
|
|
52
|
+
const airdropInfo = await publicClient.readContract({
|
|
53
|
+
address: airdropAddress,
|
|
54
|
+
abi: ClankerAirdropV2,
|
|
55
|
+
functionName: "airdrops",
|
|
56
|
+
args: [clankerTokenAddress],
|
|
57
|
+
});
|
|
58
|
+
const lockupEndTime = Number(airdropInfo[4]) * 1000; // index 4 is lockupEndTime (convert to ms)
|
|
59
|
+
const lockupDuration = 86400; // 1 day in seconds
|
|
60
|
+
// Store the merkle tree data to IPFS with minimal metadata
|
|
61
|
+
// This will throw an error if upload fails, which will fail the entire deployment
|
|
62
|
+
const treeData = merkleTree.dump();
|
|
63
|
+
const cid = await storeMerkleTreeToIPFS({
|
|
64
|
+
tokenAddress: clankerTokenAddress,
|
|
65
|
+
chainId,
|
|
66
|
+
treeData,
|
|
67
|
+
ipfsJsonUploadUrl,
|
|
68
|
+
lockupEndTime,
|
|
69
|
+
lockupDuration,
|
|
70
|
+
});
|
|
71
|
+
merkleTreeCID = cid;
|
|
72
|
+
console.log(`Merkle tree stored to IPFS with CID: ${cid}`);
|
|
73
|
+
console.log(`Metadata: lockupEndTime=${new Date(lockupEndTime).toISOString()}`);
|
|
74
|
+
console.log(`Retrieve using: tokenAddress=${clankerTokenAddress}, chainId=${chainId}`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.warn("No airdrop address found, storing merkle tree with default metadata");
|
|
78
|
+
const treeData = merkleTree.dump();
|
|
79
|
+
const currentBlock = await publicClient.getBlock();
|
|
80
|
+
const lockupDuration = 86400; // 1 day in seconds
|
|
81
|
+
const lockupEndTime = Number(currentBlock.timestamp) * 1000 + lockupDuration * 1000;
|
|
82
|
+
const cid = await storeMerkleTreeToIPFS({
|
|
83
|
+
tokenAddress: clankerTokenAddress,
|
|
84
|
+
chainId,
|
|
85
|
+
treeData,
|
|
86
|
+
ipfsJsonUploadUrl,
|
|
87
|
+
lockupEndTime,
|
|
88
|
+
lockupDuration,
|
|
89
|
+
});
|
|
90
|
+
merkleTreeCID = cid;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
41
93
|
return {
|
|
42
94
|
receipt,
|
|
43
95
|
address: clankerTokenAddress,
|
|
96
|
+
merkleTreeCID,
|
|
44
97
|
};
|
|
45
98
|
};
|
|
46
99
|
//# sourceMappingURL=deploy-v4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-v4.js","sourceRoot":"","sources":["../../src/deploy-v4.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;
|
|
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,gBAAgB,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAe1D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,EAC7B,CAAC,EACD,OAAO,EACP,iBAAiB,GACF,EAA+B,EAAE;IAChD,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,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACnD,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,UAAU,EAAE,GAAG,MAAM,gBAAgB,CAAC;QACxF,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,gFAAgF;IAChF,IAAI,aAAiC,CAAA;IAErC,IAAI,iBAAiB,IAAI,UAAU,EAAE,CAAC;QACpC,6CAA6C;QAC7C,MAAM,cAAc,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAA;QAE3D,IAAI,cAAc,EAAE,CAAC;YACnB,6DAA6D;YAC7D,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;gBAClD,OAAO,EAAE,cAAc;gBACvB,GAAG,EAAE,gBAAgB;gBACrB,YAAY,EAAE,UAAU;gBACxB,IAAI,EAAE,CAAC,mBAAmB,CAAC;aAC5B,CAAC,CAAA;YAEF,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA,CAAC,2CAA2C;YAC/F,MAAM,cAAc,GAAG,KAAK,CAAA,CAAC,mBAAmB;YAEhD,2DAA2D;YAC3D,kFAAkF;YAClF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAA;YAClC,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC;gBACtC,YAAY,EAAE,mBAAmB;gBACjC,OAAO;gBACP,QAAQ;gBACR,iBAAiB;gBACjB,aAAa;gBACb,cAAc;aACf,CAAC,CAAA;YAEF,aAAa,GAAG,GAAG,CAAA;YAEnB,OAAO,CAAC,GAAG,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAA;YAC1D,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;YAC/E,OAAO,CAAC,GAAG,CAAC,gCAAgC,mBAAmB,aAAa,OAAO,EAAE,CAAC,CAAA;QACxF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAA;YACnF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAA;YAClC,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAA;YAClD,MAAM,cAAc,GAAG,KAAK,CAAA,CAAC,mBAAmB;YAChD,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,cAAc,GAAG,IAAI,CAAA;YAEnF,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC;gBACtC,YAAY,EAAE,mBAAmB;gBACjC,OAAO;gBACP,QAAQ;gBACR,iBAAiB;gBACjB,aAAa;gBACb,cAAc;aACf,CAAC,CAAA;YACF,aAAa,GAAG,GAAG,CAAA;QACrB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO;QACP,OAAO,EAAE,mBAAmB;QAC5B,aAAa;KACd,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import LevrFactory_v1 from "./abis/LevrFactory_v1.js";
|
|
2
|
+
import { GET_FACTORY_ADDRESS } from "./constants.js";
|
|
3
|
+
/**
|
|
4
|
+
* Fetches the factory configuration from the blockchain using multicall
|
|
5
|
+
* @param publicClient - The public client for reading from the blockchain
|
|
6
|
+
* @param chainId - The chain ID
|
|
7
|
+
* @returns The factory configuration
|
|
8
|
+
*/
|
|
9
|
+
export async function getFactoryConfig(publicClient, chainId) {
|
|
10
|
+
const factoryAddress = GET_FACTORY_ADDRESS(chainId);
|
|
11
|
+
if (!factoryAddress) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const results = await publicClient.multicall({
|
|
16
|
+
contracts: [
|
|
17
|
+
{
|
|
18
|
+
address: factoryAddress,
|
|
19
|
+
abi: LevrFactory_v1,
|
|
20
|
+
functionName: "protocolFeeBps",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
address: factoryAddress,
|
|
24
|
+
abi: LevrFactory_v1,
|
|
25
|
+
functionName: "protocolTreasury",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
address: factoryAddress,
|
|
29
|
+
abi: LevrFactory_v1,
|
|
30
|
+
functionName: "streamWindowSeconds",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
address: factoryAddress,
|
|
34
|
+
abi: LevrFactory_v1,
|
|
35
|
+
functionName: "proposalWindowSeconds",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
address: factoryAddress,
|
|
39
|
+
abi: LevrFactory_v1,
|
|
40
|
+
functionName: "votingWindowSeconds",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
address: factoryAddress,
|
|
44
|
+
abi: LevrFactory_v1,
|
|
45
|
+
functionName: "maxActiveProposals",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
address: factoryAddress,
|
|
49
|
+
abi: LevrFactory_v1,
|
|
50
|
+
functionName: "quorumBps",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
address: factoryAddress,
|
|
54
|
+
abi: LevrFactory_v1,
|
|
55
|
+
functionName: "approvalBps",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
address: factoryAddress,
|
|
59
|
+
abi: LevrFactory_v1,
|
|
60
|
+
functionName: "minSTokenBpsToSubmit",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
address: factoryAddress,
|
|
64
|
+
abi: LevrFactory_v1,
|
|
65
|
+
functionName: "maxProposalAmountBps",
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
});
|
|
69
|
+
// Check for any errors in the results
|
|
70
|
+
const [protocolFeeBps, protocolTreasury, streamWindowSeconds, proposalWindowSeconds, votingWindowSeconds, maxActiveProposals, quorumBps, approvalBps, minSTokenBpsToSubmit, maxProposalAmountBps,] = results.map((result) => {
|
|
71
|
+
if (result.status === "failure") {
|
|
72
|
+
throw new Error(`Contract call failed: ${result.error?.message}`);
|
|
73
|
+
}
|
|
74
|
+
return result.result;
|
|
75
|
+
});
|
|
76
|
+
return {
|
|
77
|
+
protocolFeeBps: protocolFeeBps,
|
|
78
|
+
protocolTreasury: protocolTreasury,
|
|
79
|
+
streamWindowSeconds: streamWindowSeconds,
|
|
80
|
+
proposalWindowSeconds: proposalWindowSeconds,
|
|
81
|
+
votingWindowSeconds: votingWindowSeconds,
|
|
82
|
+
maxActiveProposals: maxActiveProposals,
|
|
83
|
+
quorumBps: quorumBps,
|
|
84
|
+
approvalBps: approvalBps,
|
|
85
|
+
minSTokenBpsToSubmit: minSTokenBpsToSubmit,
|
|
86
|
+
maxProposalAmountBps: maxProposalAmountBps,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error("Failed to fetch factory config:", error);
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/factory.ts"],"names":[],"mappings":"AAEA,OAAO,cAAc,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAejD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAA0B,EAC1B,OAAe;IAEf,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACnD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC;YAC3C,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,gBAAgB;iBAC/B;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,kBAAkB;iBACjC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,qBAAqB;iBACpC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,uBAAuB;iBACtC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,qBAAqB;iBACpC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,oBAAoB;iBACnC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,WAAW;iBAC1B;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,aAAa;iBAC5B;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,sBAAsB;iBACrC;gBACD;oBACE,OAAO,EAAE,cAAc;oBACvB,GAAG,EAAE,cAAc;oBACnB,YAAY,EAAE,sBAAsB;iBACrC;aACO;SACX,CAAC,CAAA;QAEF,sCAAsC;QACtC,MAAM,CACJ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACrB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACzB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;YACnE,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,OAAO;YACL,cAAc,EAAE,cAAwB;YACxC,gBAAgB,EAAE,gBAA2B;YAC7C,mBAAmB,EAAE,mBAA6B;YAClD,qBAAqB,EAAE,qBAA+B;YACtD,mBAAmB,EAAE,mBAA6B;YAClD,kBAAkB,EAAE,kBAA4B;YAChD,SAAS,EAAE,SAAmB;YAC9B,WAAW,EAAE,WAAqB;YAClC,oBAAoB,EAAE,oBAA8B;YACpD,oBAAoB,EAAE,oBAA8B;SACrD,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAA;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IClankerLpLockerMultiple } from "./abis/index.js";
|
|
1
|
+
import { IClankerLpLockerMultiple, LevrFeeSplitter_v1 } from "./abis/index.js";
|
|
2
2
|
import { GET_LP_LOCKER_ADDRESS } from "./constants.js";
|
|
3
3
|
export var FeePreference;
|
|
4
4
|
(function (FeePreference) {
|
|
@@ -84,9 +84,10 @@ export async function feeReceivers({ publicClient, clankerToken, userAddress, })
|
|
|
84
84
|
}
|
|
85
85
|
/**
|
|
86
86
|
* Update fee receiver for a clanker token
|
|
87
|
+
* Waits for transaction confirmation before returning
|
|
87
88
|
*/
|
|
88
|
-
export async function updateFeeReceiver({ walletClient, clankerToken, chainId, rewardIndex, newRecipient, }) {
|
|
89
|
-
if (Object.values({ walletClient, clankerToken, chainId, newRecipient }).some((value) => !value)) {
|
|
89
|
+
export async function updateFeeReceiver({ walletClient, publicClient, clankerToken, chainId, rewardIndex, newRecipient, }) {
|
|
90
|
+
if (Object.values({ walletClient, publicClient, clankerToken, chainId, newRecipient }).some((value) => !value)) {
|
|
90
91
|
throw new Error("Invalid update fee receiver params");
|
|
91
92
|
}
|
|
92
93
|
const lpLockerAddress = GET_LP_LOCKER_ADDRESS(chainId);
|
|
@@ -100,7 +101,183 @@ export async function updateFeeReceiver({ walletClient, clankerToken, chainId, r
|
|
|
100
101
|
functionName: "updateRewardRecipient",
|
|
101
102
|
args: [clankerToken, BigInt(index), newRecipient],
|
|
102
103
|
});
|
|
103
|
-
|
|
104
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
105
|
+
if (receipt.status === "reverted") {
|
|
106
|
+
throw new Error("Update fee receiver transaction reverted");
|
|
107
|
+
}
|
|
108
|
+
return receipt;
|
|
109
|
+
}
|
|
110
|
+
export async function configureSplits({ walletClient, publicClient, clankerToken, chainId, splits, }) {
|
|
111
|
+
if (Object.values({ walletClient, publicClient, clankerToken, chainId }).some((value) => !value)) {
|
|
112
|
+
throw new Error("Invalid configure splits params");
|
|
113
|
+
}
|
|
114
|
+
const { deployFeeSplitter } = await import("./fee-splitter.js");
|
|
115
|
+
const { LevrFeeSplitter_v1 } = await import("./abis/index.js");
|
|
116
|
+
// Step 1: Ensure fee splitter is deployed for this token
|
|
117
|
+
// This will deploy if not exists, or return existing address
|
|
118
|
+
const splitterAddress = await deployFeeSplitter({
|
|
119
|
+
publicClient,
|
|
120
|
+
walletClient,
|
|
121
|
+
clankerToken,
|
|
122
|
+
});
|
|
123
|
+
// Step 2: Configure splits on the deployed splitter
|
|
124
|
+
const splitsWithBps = splits.map((s) => ({
|
|
125
|
+
receiver: s.receiver,
|
|
126
|
+
bps: Math.floor(s.percentage * 100), // percentage to basis points
|
|
127
|
+
}));
|
|
128
|
+
const hash = await walletClient.writeContract({
|
|
129
|
+
address: splitterAddress, // Use deployed splitter, not deployer!
|
|
130
|
+
abi: LevrFeeSplitter_v1,
|
|
131
|
+
functionName: "configureSplits",
|
|
132
|
+
args: [splitsWithBps],
|
|
133
|
+
});
|
|
134
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
135
|
+
if (receipt.status === "reverted") {
|
|
136
|
+
throw new Error("Configure splits transaction reverted");
|
|
137
|
+
}
|
|
138
|
+
return receipt;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Compare two split configurations for equality
|
|
142
|
+
* Compares receiver addresses and percentages (converted to bps)
|
|
143
|
+
*/
|
|
144
|
+
function areSplitsEqual(currentSplits, newSplits) {
|
|
145
|
+
if (currentSplits.length !== newSplits.length)
|
|
146
|
+
return false;
|
|
147
|
+
// Convert UI splits to bps for comparison
|
|
148
|
+
const newSplitsWithBps = newSplits.map((s) => ({
|
|
149
|
+
receiver: s.receiver.toLowerCase(),
|
|
150
|
+
bps: Math.floor(s.percentage * 100),
|
|
151
|
+
}));
|
|
152
|
+
// Sort both arrays by receiver for comparison
|
|
153
|
+
const sortedCurrent = [...currentSplits]
|
|
154
|
+
.map((s) => ({ receiver: s.receiver.toLowerCase(), bps: s.bps }))
|
|
155
|
+
.sort((a, b) => a.receiver.localeCompare(b.receiver));
|
|
156
|
+
const sortedNew = [...newSplitsWithBps].sort((a, b) => a.receiver.localeCompare(b.receiver));
|
|
157
|
+
// Compare each split
|
|
158
|
+
return sortedCurrent.every((current, index) => current.receiver === sortedNew[index].receiver && current.bps === sortedNew[index].bps);
|
|
159
|
+
}
|
|
160
|
+
export async function configureSplitsAndUpdateRecipient(params) {
|
|
161
|
+
const { walletClient, publicClient, clankerToken, chainId, splits, rewardIndex } = params;
|
|
162
|
+
const { getFeeSplitter } = await import("./fee-splitter.js");
|
|
163
|
+
const { LevrFeeSplitter_v1 } = await import("./abis/index.js");
|
|
164
|
+
// Step 0: Get or deploy fee splitter
|
|
165
|
+
const splitterAddress = await getFeeSplitter({
|
|
166
|
+
publicClient,
|
|
167
|
+
clankerToken,
|
|
168
|
+
chainId,
|
|
169
|
+
});
|
|
170
|
+
if (!splitterAddress) {
|
|
171
|
+
// Fee splitter doesn't exist, need to deploy and configure
|
|
172
|
+
const configureSplitsReceipt = await configureSplits({
|
|
173
|
+
walletClient,
|
|
174
|
+
publicClient,
|
|
175
|
+
clankerToken,
|
|
176
|
+
chainId,
|
|
177
|
+
splits,
|
|
178
|
+
});
|
|
179
|
+
// After first deployment, update recipient
|
|
180
|
+
const updateRecipientReceipt = await updateRecipientToSplitter({
|
|
181
|
+
walletClient,
|
|
182
|
+
publicClient,
|
|
183
|
+
clankerToken,
|
|
184
|
+
chainId,
|
|
185
|
+
rewardIndex,
|
|
186
|
+
});
|
|
187
|
+
return {
|
|
188
|
+
configureSplitsReceipt: {
|
|
189
|
+
transactionHash: configureSplitsReceipt.transactionHash,
|
|
190
|
+
status: configureSplitsReceipt.status,
|
|
191
|
+
},
|
|
192
|
+
updateRecipientReceipt: {
|
|
193
|
+
transactionHash: updateRecipientReceipt.transactionHash,
|
|
194
|
+
status: updateRecipientReceipt.status,
|
|
195
|
+
},
|
|
196
|
+
recipientWasAlreadyActive: false,
|
|
197
|
+
splitsWereUnchanged: false,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
// Fee splitter exists - check if splits need updating
|
|
201
|
+
const currentSplits = await publicClient.readContract({
|
|
202
|
+
address: splitterAddress,
|
|
203
|
+
abi: LevrFeeSplitter_v1,
|
|
204
|
+
functionName: "getSplits",
|
|
205
|
+
});
|
|
206
|
+
const splitsUnchanged = areSplitsEqual(currentSplits, splits);
|
|
207
|
+
// Step 1: Configure splits only if they've changed
|
|
208
|
+
let configureSplitsReceipt;
|
|
209
|
+
if (!splitsUnchanged) {
|
|
210
|
+
const receipt = await configureSplits({
|
|
211
|
+
walletClient,
|
|
212
|
+
publicClient,
|
|
213
|
+
clankerToken,
|
|
214
|
+
chainId,
|
|
215
|
+
splits,
|
|
216
|
+
});
|
|
217
|
+
configureSplitsReceipt = {
|
|
218
|
+
transactionHash: receipt.transactionHash,
|
|
219
|
+
status: receipt.status,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// Step 2: Check if splitter is already the active recipient
|
|
223
|
+
const lpLockerAddress = GET_LP_LOCKER_ADDRESS(chainId);
|
|
224
|
+
if (!lpLockerAddress) {
|
|
225
|
+
throw new Error("LP locker address not found for chain");
|
|
226
|
+
}
|
|
227
|
+
const tokenRewards = await publicClient.readContract({
|
|
228
|
+
address: lpLockerAddress,
|
|
229
|
+
abi: IClankerLpLockerMultiple,
|
|
230
|
+
functionName: "tokenRewards",
|
|
231
|
+
args: [clankerToken],
|
|
232
|
+
});
|
|
233
|
+
const currentRecipient = tokenRewards.rewardRecipients?.[0];
|
|
234
|
+
const isAlreadyActive = currentRecipient && currentRecipient.toLowerCase() === splitterAddress.toLowerCase();
|
|
235
|
+
// Step 3: Update recipient only if not already active
|
|
236
|
+
if (!isAlreadyActive) {
|
|
237
|
+
const updateRecipientReceipt = await updateRecipientToSplitter({
|
|
238
|
+
walletClient,
|
|
239
|
+
publicClient,
|
|
240
|
+
clankerToken,
|
|
241
|
+
chainId,
|
|
242
|
+
rewardIndex,
|
|
243
|
+
});
|
|
244
|
+
return {
|
|
245
|
+
configureSplitsReceipt,
|
|
246
|
+
updateRecipientReceipt: {
|
|
247
|
+
transactionHash: updateRecipientReceipt.transactionHash,
|
|
248
|
+
status: updateRecipientReceipt.status,
|
|
249
|
+
},
|
|
250
|
+
recipientWasAlreadyActive: false,
|
|
251
|
+
splitsWereUnchanged: splitsUnchanged,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
// Recipient already active - return result based on whether splits were configured
|
|
255
|
+
return {
|
|
256
|
+
configureSplitsReceipt,
|
|
257
|
+
recipientWasAlreadyActive: true,
|
|
258
|
+
splitsWereUnchanged: splitsUnchanged,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
export async function updateRecipientToSplitter({ walletClient, publicClient, clankerToken, chainId, rewardIndex, }) {
|
|
262
|
+
// Get the deployed fee splitter for this token
|
|
263
|
+
const { getFeeSplitter } = await import("./fee-splitter.js");
|
|
264
|
+
const splitterAddress = await getFeeSplitter({
|
|
265
|
+
publicClient,
|
|
266
|
+
clankerToken,
|
|
267
|
+
chainId,
|
|
268
|
+
});
|
|
269
|
+
if (!splitterAddress) {
|
|
270
|
+
throw new Error("Fee splitter not deployed for this token. Deploy it first using deployFeeSplitter()");
|
|
271
|
+
}
|
|
272
|
+
// Update to splitter address (direct call from token admin)
|
|
273
|
+
return updateFeeReceiver({
|
|
274
|
+
walletClient,
|
|
275
|
+
publicClient,
|
|
276
|
+
clankerToken,
|
|
277
|
+
chainId,
|
|
278
|
+
rewardIndex,
|
|
279
|
+
newRecipient: splitterAddress,
|
|
280
|
+
});
|
|
104
281
|
}
|
|
105
282
|
/**
|
|
106
283
|
* Check which tokens a specific address is set up to receive as a fee receiver
|
|
@@ -143,4 +320,88 @@ export function getReceivableTokens(feeReceivers, recipientAddress, clankerToken
|
|
|
143
320
|
}
|
|
144
321
|
return receivableTokens;
|
|
145
322
|
}
|
|
323
|
+
/**
|
|
324
|
+
* Get static fee splitter contracts for multicall
|
|
325
|
+
* Returns contracts for: isSplitsConfigured(), getSplits(), getTotalBps()
|
|
326
|
+
*/
|
|
327
|
+
export function getFeeSplitterStaticContracts(clankerToken, feeSplitterAddress) {
|
|
328
|
+
return [
|
|
329
|
+
{
|
|
330
|
+
address: feeSplitterAddress,
|
|
331
|
+
abi: LevrFeeSplitter_v1,
|
|
332
|
+
functionName: "isSplitsConfigured",
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
address: feeSplitterAddress,
|
|
336
|
+
abi: LevrFeeSplitter_v1,
|
|
337
|
+
functionName: "getSplits",
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
address: feeSplitterAddress,
|
|
341
|
+
abi: LevrFeeSplitter_v1,
|
|
342
|
+
functionName: "getTotalBps",
|
|
343
|
+
},
|
|
344
|
+
];
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Parse static fee splitter data from multicall results
|
|
348
|
+
* Returns null if splits are not configured
|
|
349
|
+
*/
|
|
350
|
+
export function parseFeeSplitterStatic(results, currentFeeRecipient, feeSplitterAddress) {
|
|
351
|
+
const [isConfiguredResult, splitsResult, totalBpsResult] = results;
|
|
352
|
+
// Check if all calls succeeded
|
|
353
|
+
if (isConfiguredResult.status !== "success" ||
|
|
354
|
+
splitsResult.status !== "success" ||
|
|
355
|
+
totalBpsResult.status !== "success") {
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
// Check if splits are configured
|
|
359
|
+
if (!isConfiguredResult.result) {
|
|
360
|
+
return null;
|
|
361
|
+
}
|
|
362
|
+
// Ensure we have the fee splitter address
|
|
363
|
+
if (!feeSplitterAddress) {
|
|
364
|
+
throw new Error("Fee splitter address is required to parse static data");
|
|
365
|
+
}
|
|
366
|
+
// Determine if splitter is active by comparing current recipient to splitter address
|
|
367
|
+
const isActive = !!(currentFeeRecipient &&
|
|
368
|
+
feeSplitterAddress &&
|
|
369
|
+
currentFeeRecipient.toLowerCase() === feeSplitterAddress.toLowerCase());
|
|
370
|
+
return {
|
|
371
|
+
address: feeSplitterAddress,
|
|
372
|
+
isConfigured: isConfiguredResult.result,
|
|
373
|
+
isActive,
|
|
374
|
+
splits: splitsResult.result,
|
|
375
|
+
totalBps: Number(totalBpsResult.result),
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Get dynamic fee splitter contracts for multicall
|
|
380
|
+
* Returns contracts for: pendingFees() for each reward token
|
|
381
|
+
* Note: Fee splitter internally queries ClankerFeeLocker
|
|
382
|
+
*/
|
|
383
|
+
export function getFeeSplitterDynamicContracts(clankerToken, feeSplitterAddress, rewardTokens) {
|
|
384
|
+
return rewardTokens.map((rewardToken) => ({
|
|
385
|
+
address: feeSplitterAddress,
|
|
386
|
+
abi: LevrFeeSplitter_v1,
|
|
387
|
+
functionName: "pendingFees",
|
|
388
|
+
args: [rewardToken],
|
|
389
|
+
}));
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Parse dynamic fee splitter data from multicall results
|
|
393
|
+
* Maps pending fees results to { token, weth } structure
|
|
394
|
+
*/
|
|
395
|
+
export function parseFeeSplitterDynamic(results, wethAddress) {
|
|
396
|
+
// First result is always the clanker token
|
|
397
|
+
const tokenPending = results[0]?.status === "success" ? results[0].result : 0n;
|
|
398
|
+
// Second result is WETH (if provided)
|
|
399
|
+
const wethPending = wethAddress && results[1]?.status === "success" ? results[1].result : null;
|
|
400
|
+
return {
|
|
401
|
+
pendingFees: {
|
|
402
|
+
token: tokenPending,
|
|
403
|
+
weth: wethPending,
|
|
404
|
+
},
|
|
405
|
+
};
|
|
406
|
+
}
|
|
146
407
|
//# sourceMappingURL=fee-receivers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fee-receivers.js","sourceRoot":"","sources":["../../src/fee-receivers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fee-receivers.js","sourceRoot":"","sources":["../../src/fee-receivers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AASnD,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,iDAAQ,CAAA;IACR,qDAAU,CAAA;IACV,uDAAW,CAAA;AACb,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAyBD;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAA0B,EAAE,EAAE;IACnE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAA;IAC7C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IAEpE,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,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC;QAC5C,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,wBAAwB;QAC7B,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;KAC5B,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,YAA2B,EAAE,OAAe;IAClF,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,OAAO;QACL;YACE,OAAO,EAAE,eAAe;YACxB,GAAG,EAAE,wBAAwB;YAC7B,YAAY,EAAE,cAAuB;YACrC,IAAI,EAAE,CAAC,YAAY,CAAC;SACrB;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,YAA6B,EAAE,YAA2B;IAC9F,OAAO,gBAAgB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAA;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,kBAKC,EACD,WAA2B;IAE3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,IAAI,EAAE,CAAA;IACpD,MAAM,UAAU,GAAG,kBAAkB,CAAC,gBAAgB,IAAI,EAAE,CAAA;IAC5D,MAAM,GAAG,GAAG,kBAAkB,CAAC,SAAS,IAAI,EAAE,CAAA;IAC9C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,cAAc,IAAI,EAAE,CAAA;IAExD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnC,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,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,4BAA4B;QAC1D,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAE,QAAQ,CAAC,KAAK,CAAmB,CAAC,CAAC,CAAC,SAAS;KAC9F,CAAC,CAAC,CAAA;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,YAAY,EACZ,YAAY,EACZ,WAAW,GACQ;IACnB,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACjD,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAA;IAC3E,OAAO,iBAAiB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,WAAW,EACX,YAAY,GACY;IACxB,IACE,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,CACrF,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAClB,EACD,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,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IAEtE,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAqBD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,MAAM,GACgB;IACtB,IACE,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAC5F,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACpD,CAAC;IAED,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAC5D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;IAErD,yDAAyD;IACzD,6DAA6D;IAC7D,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC;QAC9C,YAAY;QACZ,YAAY;QACZ,YAAY;KACb,CAAC,CAAA;IAEF,oDAAoD;IACpD,MAAM,aAAa,GAAkB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,6BAA6B;KACnE,CAAC,CAAC,CAAA;IAEH,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC;QAC5C,OAAO,EAAE,eAAe,EAAE,uCAAuC;QACjE,GAAG,EAAE,kBAAkB;QACvB,YAAY,EAAE,iBAAiB;QAC/B,IAAI,EAAE,CAAC,aAAa,CAAC;KACtB,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IAEtE,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CACrB,aAAqC,EACrC,SAAmC;IAEnC,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAE3D,0CAA0C;IAC1C,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE;QAClC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;KACpC,CAAC,CAAC,CAAA;IAEH,8CAA8C;IAC9C,MAAM,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;SAChE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvD,MAAM,SAAS,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE5F,qBAAqB;IACrB,OAAO,aAAa,CAAC,KAAK,CACxB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CACjB,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CACzF,CAAA;AACH,CAAC;AAwBD,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,MAA+C;IAE/C,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA;IAEzF,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACzD,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;IAErD,qCAAqC;IACrC,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC;QAC3C,YAAY;QACZ,YAAY;QACZ,OAAO;KACR,CAAC,CAAA;IAEF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,2DAA2D;QAC3D,MAAM,sBAAsB,GAAG,MAAM,eAAe,CAAC;YACnD,YAAY;YACZ,YAAY;YACZ,YAAY;YACZ,OAAO;YACP,MAAM;SACP,CAAC,CAAA;QAEF,2CAA2C;QAC3C,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,CAAC;YAC7D,YAAY;YACZ,YAAY;YACZ,YAAY;YACZ,OAAO;YACP,WAAW;SACZ,CAAC,CAAA;QAEF,OAAO;YACL,sBAAsB,EAAE;gBACtB,eAAe,EAAE,sBAAsB,CAAC,eAAe;gBACvD,MAAM,EAAE,sBAAsB,CAAC,MAAM;aACtC;YACD,sBAAsB,EAAE;gBACtB,eAAe,EAAE,sBAAsB,CAAC,eAAe;gBACvD,MAAM,EAAE,sBAAsB,CAAC,MAAM;aACtC;YACD,yBAAyB,EAAE,KAAK;YAChC,mBAAmB,EAAE,KAAK;SAC3B,CAAA;IACH,CAAC;IAED,sDAAsD;IACtD,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QACpD,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,kBAAkB;QACvB,YAAY,EAAE,WAAW;KAC1B,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAE7D,mDAAmD;IACnD,IAAI,sBAES,CAAA;IACb,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC;YACpC,YAAY;YACZ,YAAY;YACZ,YAAY;YACZ,OAAO;YACP,MAAM;SACP,CAAC,CAAA;QACF,sBAAsB,GAAG;YACvB,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAA;IACH,CAAC;IAED,4DAA4D;IAC5D,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,YAAY,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QACnD,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,wBAAwB;QAC7B,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,CAAC,YAAY,CAAC;KACrB,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAA;IAC3D,MAAM,eAAe,GACnB,gBAAgB,IAAI,gBAAgB,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,CAAA;IAEtF,sDAAsD;IACtD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,CAAC;YAC7D,YAAY;YACZ,YAAY;YACZ,YAAY;YACZ,OAAO;YACP,WAAW;SACZ,CAAC,CAAA;QAEF,OAAO;YACL,sBAAsB;YACtB,sBAAsB,EAAE;gBACtB,eAAe,EAAE,sBAAsB,CAAC,eAAe;gBACvD,MAAM,EAAE,sBAAsB,CAAC,MAAM;aACtC;YACD,yBAAyB,EAAE,KAAK;YAChC,mBAAmB,EAAE,eAAe;SACrC,CAAA;IACH,CAAC;IAED,mFAAmF;IACnF,OAAO;QACL,sBAAsB;QACtB,yBAAyB,EAAE,IAAI;QAC/B,mBAAmB,EAAE,eAAe;KACrC,CAAA;AACH,CAAC;AAcD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAC9C,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,WAAW,GACqB;IAChC,+CAA+C;IAC/C,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACzD,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC;QAC3C,YAAY;QACZ,YAAY;QACZ,OAAO;KACR,CAAC,CAAA;IAEF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAA;IACH,CAAC;IAED,4DAA4D;IAC5D,OAAO,iBAAiB,CAAC;QACvB,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,OAAO;QACP,WAAW;QACX,YAAY,EAAE,eAAe;KAC9B,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAA4C,EAC5C,gBAA+B,EAC/B,YAA2B,EAC3B,WAA2B;IAE3B,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,gBAAgB,GAAoB,EAAE,CAAA;IAE5C,kEAAkE;IAClE,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC;YACxE,2EAA2E;YAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAA;YAEnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,mEAAmE;gBACnE,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBACnC,IAAI,WAAW;oBAAE,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACrD,CAAC;iBAAM,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;gBACvC,uCAAuC;gBACvC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBACnC,IAAI,WAAW;oBAAE,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACrD,CAAC;iBAAM,IAAI,IAAI,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;gBACzC,qBAAqB;gBACrB,IAAI,WAAW;oBAAE,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACrD,CAAC;iBAAM,IAAI,IAAI,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC1C,8BAA8B;gBAC9B,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACrC,CAAC;YACD,MAAK;QACP,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAA;AACzB,CAAC;AAoCD;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAC3C,YAA2B,EAC3B,kBAAiC;IAEjC,OAAO;QACL;YACE,OAAO,EAAE,kBAAkB;YAC3B,GAAG,EAAE,kBAAkB;YACvB,YAAY,EAAE,oBAA6B;SAC5C;QACD;YACE,OAAO,EAAE,kBAAkB;YAC3B,GAAG,EAAE,kBAAkB;YACvB,YAAY,EAAE,WAAoB;SACnC;QACD;YACE,OAAO,EAAE,kBAAkB;YAC3B,GAAG,EAAE,kBAAkB;YACvB,YAAY,EAAE,aAAsB;SACrC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAIC,EACD,mBAAmC,EACnC,kBAAkC;IAElC,MAAM,CAAC,kBAAkB,EAAE,YAAY,EAAE,cAAc,CAAC,GAAG,OAAO,CAAA;IAElE,+BAA+B;IAC/B,IACE,kBAAkB,CAAC,MAAM,KAAK,SAAS;QACvC,YAAY,CAAC,MAAM,KAAK,SAAS;QACjC,cAAc,CAAC,MAAM,KAAK,SAAS,EACnC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IAED,qFAAqF;IACrF,MAAM,QAAQ,GAAG,CAAC,CAAC,CACjB,mBAAmB;QACnB,kBAAkB;QAClB,mBAAmB,CAAC,WAAW,EAAE,KAAK,kBAAkB,CAAC,WAAW,EAAE,CACvE,CAAA;IAED,OAAO;QACL,OAAO,EAAE,kBAAkB;QAC3B,YAAY,EAAE,kBAAkB,CAAC,MAAM;QACvC,QAAQ;QACR,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;KACxC,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,YAA2B,EAC3B,kBAAiC,EACjC,YAA6B;IAE7B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACxC,OAAO,EAAE,kBAAkB;QAC3B,GAAG,EAAE,kBAAkB;QACvB,YAAY,EAAE,aAAsB;QACpC,IAAI,EAAE,CAAC,WAAW,CAAC;KACpB,CAAC,CAAC,CAAA;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAiE,EACjE,WAA2B;IAE3B,2CAA2C;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IAE9E,sCAAsC;IACtC,MAAM,WAAW,GAAG,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;IAE9F,OAAO;QACL,WAAW,EAAE;YACX,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,WAAW;SAClB;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import LevrFeeSplitterFactory_v1 from "./abis/LevrFeeSplitterFactory_v1.js";
|
|
2
|
+
import { GET_FEE_SPLITTER_FACTORY_ADDRESS } from "./constants.js";
|
|
3
|
+
/**
|
|
4
|
+
* Deploy a new fee splitter for a Clanker token
|
|
5
|
+
* Only needs to be called once per token
|
|
6
|
+
* Returns the deployed splitter address (either newly deployed or existing)
|
|
7
|
+
*/
|
|
8
|
+
export async function deployFeeSplitter(params) {
|
|
9
|
+
const { publicClient, walletClient, clankerToken } = params;
|
|
10
|
+
const chainId = walletClient.chain?.id;
|
|
11
|
+
if (!chainId)
|
|
12
|
+
throw new Error("Chain ID not found");
|
|
13
|
+
const deployerAddress = GET_FEE_SPLITTER_FACTORY_ADDRESS(chainId);
|
|
14
|
+
if (!deployerAddress)
|
|
15
|
+
throw new Error("Fee splitter factory not found for this chain");
|
|
16
|
+
// Check if already deployed
|
|
17
|
+
const existing = await publicClient.readContract({
|
|
18
|
+
address: deployerAddress,
|
|
19
|
+
abi: LevrFeeSplitterFactory_v1,
|
|
20
|
+
functionName: "getSplitter",
|
|
21
|
+
args: [clankerToken],
|
|
22
|
+
});
|
|
23
|
+
if (existing && existing !== "0x0000000000000000000000000000000000000000") {
|
|
24
|
+
return existing;
|
|
25
|
+
}
|
|
26
|
+
// Deploy new splitter
|
|
27
|
+
const hash = await walletClient.writeContract({
|
|
28
|
+
address: deployerAddress,
|
|
29
|
+
abi: LevrFeeSplitterFactory_v1,
|
|
30
|
+
functionName: "deploy",
|
|
31
|
+
args: [clankerToken],
|
|
32
|
+
chain: walletClient.chain,
|
|
33
|
+
account: walletClient.account,
|
|
34
|
+
});
|
|
35
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
36
|
+
if (receipt.status === "reverted") {
|
|
37
|
+
throw new Error("Fee splitter deployment failed");
|
|
38
|
+
}
|
|
39
|
+
// Get deployed address
|
|
40
|
+
const splitterAddress = await publicClient.readContract({
|
|
41
|
+
address: deployerAddress,
|
|
42
|
+
abi: LevrFeeSplitterFactory_v1,
|
|
43
|
+
functionName: "getSplitter",
|
|
44
|
+
args: [clankerToken],
|
|
45
|
+
});
|
|
46
|
+
return splitterAddress;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get the fee splitter address for a token (if deployed)
|
|
50
|
+
* Returns undefined if not deployed yet
|
|
51
|
+
*/
|
|
52
|
+
export async function getFeeSplitter(params) {
|
|
53
|
+
const { publicClient, clankerToken, chainId } = params;
|
|
54
|
+
const deployerAddress = GET_FEE_SPLITTER_FACTORY_ADDRESS(chainId);
|
|
55
|
+
if (!deployerAddress)
|
|
56
|
+
return undefined;
|
|
57
|
+
const splitterAddress = await publicClient.readContract({
|
|
58
|
+
address: deployerAddress,
|
|
59
|
+
abi: LevrFeeSplitterFactory_v1,
|
|
60
|
+
functionName: "getSplitter",
|
|
61
|
+
args: [clankerToken],
|
|
62
|
+
});
|
|
63
|
+
if (!splitterAddress || splitterAddress === "0x0000000000000000000000000000000000000000") {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
return splitterAddress;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=fee-splitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee-splitter.js","sourceRoot":"","sources":["../../src/fee-splitter.ts"],"names":[],"mappings":"AAEA,OAAO,yBAAyB,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAA;AAc9D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAA+B;IACrE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;IAC3D,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,CAAA;IACtC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAEnD,MAAM,eAAe,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAA;IACjE,IAAI,CAAC,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IAEtF,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QAC/C,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,yBAAyB;QAC9B,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE,CAAC,YAAY,CAAC;KACrB,CAAC,CAAA;IAEF,IAAI,QAAQ,IAAI,QAAQ,KAAK,4CAA4C,EAAE,CAAC;QAC1E,OAAO,QAAmB,CAAA;IAC5B,CAAC;IAED,sBAAsB;IACtB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC;QAC5C,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,yBAAyB;QAC9B,YAAY,EAAE,QAAQ;QACtB,IAAI,EAAE,CAAC,YAAY,CAAC;QACpB,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,OAAO,EAAE,YAAY,CAAC,OAAQ;KAC/B,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IACtE,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IAED,uBAAuB;IACvB,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QACtD,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,yBAAyB;QAC9B,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE,CAAC,YAAY,CAAC;KACrB,CAAC,CAAA;IAEF,OAAO,eAA0B,CAAA;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA4B;IAC/D,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAEtD,MAAM,eAAe,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAA;IACjE,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAA;IAEtC,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QACtD,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,yBAAyB;QAC9B,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE,CAAC,YAAY,CAAC;KACrB,CAAC,CAAA;IAEF,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,4CAA4C,EAAE,CAAC;QACzF,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,eAA0B,CAAA;AACnC,CAAC"}
|