@zcomb/programs-sdk 1.11.0 → 1.11.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.
@@ -1,172 +1 @@
1
- "use strict";
2
- /*
3
- * Low-level instruction builders for the SVault program.
4
- * These are thin wrappers around the program methods - use SVaultClient for higher-level operations.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.FEE_AUTHORITY = void 0;
8
- exports.initializeStakingVault = initializeStakingVault;
9
- exports.stake = stake;
10
- exports.initiateUnstake = initiateUnstake;
11
- exports.withdraw = withdraw;
12
- exports.postRewards = postRewards;
13
- exports.claimRewards = claimRewards;
14
- exports.setConfig = setConfig;
15
- exports.slash = slash;
16
- exports.addDelegate = addDelegate;
17
- exports.removeDelegate = removeDelegate;
18
- const anchor_1 = require("@coral-xyz/anchor");
19
- const web3_js_1 = require("@solana/web3.js");
20
- const spl_token_1 = require("@solana/spl-token");
21
- const utils_1 = require("./utils");
22
- /* Fee Authority (same as AMM program) */
23
- exports.FEE_AUTHORITY = new web3_js_1.PublicKey("FEEnkcCNE2623LYCPtLf63LFzXpCFigBLTu4qZovRGZC");
24
- function initializeStakingVault(program, admin, tokenMint, unstakingPeriod, volumeWindow, nonce) {
25
- const unstakingPeriodBN = typeof unstakingPeriod === "number" ? new anchor_1.BN(unstakingPeriod) : unstakingPeriod;
26
- const volumeWindowBN = typeof volumeWindow === "number" ? new anchor_1.BN(volumeWindow) : volumeWindow;
27
- const [configPda] = (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, program.programId);
28
- const [stakeVault] = (0, utils_1.deriveStakeVaultPDA)(configPda, program.programId);
29
- const [rewardVault] = (0, utils_1.deriveRewardVaultPDA)(configPda, program.programId);
30
- return program.methods
31
- .initializeStakingVault(unstakingPeriodBN, volumeWindowBN, nonce)
32
- .accountsPartial({
33
- admin,
34
- tokenMint,
35
- config: configPda,
36
- stakeVault,
37
- rewardVault,
38
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
39
- });
40
- }
41
- function stake(program, user, tokenMint, nonce, amount) {
42
- const amountBN = typeof amount === "number" ? new anchor_1.BN(amount) : amount;
43
- const [configPda] = (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, program.programId);
44
- const [userStakePda] = (0, utils_1.deriveUserStakePDA)(configPda, user, program.programId);
45
- const [stakeVault] = (0, utils_1.deriveStakeVaultPDA)(configPda, program.programId);
46
- const userTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(tokenMint, user);
47
- return program.methods.stake(amountBN).accountsPartial({
48
- user,
49
- tokenMint,
50
- config: configPda,
51
- userStake: userStakePda,
52
- stakeVault,
53
- userTokenAccount,
54
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
55
- });
56
- }
57
- function initiateUnstake(program, user, tokenMint, nonce, amount) {
58
- const amountBN = typeof amount === "number" ? new anchor_1.BN(amount) : amount;
59
- const [configPda] = (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, program.programId);
60
- const [userStakePda] = (0, utils_1.deriveUserStakePDA)(configPda, user, program.programId);
61
- return program.methods.initiateUnstake(amountBN).accountsPartial({
62
- user,
63
- tokenMint,
64
- config: configPda,
65
- userStake: userStakePda,
66
- });
67
- }
68
- function withdraw(program, user, tokenMint, nonce) {
69
- const [configPda] = (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, program.programId);
70
- const [userStakePda] = (0, utils_1.deriveUserStakePDA)(configPda, user, program.programId);
71
- const [stakeVault] = (0, utils_1.deriveStakeVaultPDA)(configPda, program.programId);
72
- const userTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(tokenMint, user);
73
- return program.methods.withdraw().accountsPartial({
74
- user,
75
- tokenMint,
76
- config: configPda,
77
- userStake: userStakePda,
78
- stakeVault,
79
- userTokenAccount,
80
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
81
- });
82
- }
83
- function postRewards(program, admin, tokenMint, nonce, merkleRoot, totalAmount) {
84
- const merkleRootArray = merkleRoot;
85
- const totalAmountBN = typeof totalAmount === "number" ? new anchor_1.BN(totalAmount) : totalAmount;
86
- const [configPda] = (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, program.programId);
87
- const [rewardVault] = (0, utils_1.deriveRewardVaultPDA)(configPda, program.programId);
88
- const adminTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(tokenMint, admin);
89
- return program.methods
90
- .postRewards(merkleRootArray, totalAmountBN)
91
- .accountsPartial({
92
- admin,
93
- tokenMint,
94
- config: configPda,
95
- rewardVault,
96
- adminTokenAccount,
97
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
98
- });
99
- }
100
- function claimRewards(program, user, tokenMint, nonce, cumulativeAmount, proof) {
101
- const cumulativeAmountBN = typeof cumulativeAmount === "number" ? new anchor_1.BN(cumulativeAmount) : cumulativeAmount;
102
- const [configPda] = (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, program.programId);
103
- const [userStakePda] = (0, utils_1.deriveUserStakePDA)(configPda, user, program.programId);
104
- const [rewardVault] = (0, utils_1.deriveRewardVaultPDA)(configPda, program.programId);
105
- const userTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(tokenMint, user);
106
- return program.methods
107
- .claimRewards(cumulativeAmountBN, proof)
108
- .accountsPartial({
109
- user,
110
- tokenMint,
111
- config: configPda,
112
- userStake: userStakePda,
113
- rewardVault,
114
- userTokenAccount,
115
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
116
- });
117
- }
118
- function setConfig(program, admin, tokenMint, nonce, unstakingPeriod, volumeWindow) {
119
- const unstakingPeriodArg = unstakingPeriod === null
120
- ? null
121
- : typeof unstakingPeriod === "number"
122
- ? new anchor_1.BN(unstakingPeriod)
123
- : unstakingPeriod;
124
- const volumeWindowArg = volumeWindow === null
125
- ? null
126
- : typeof volumeWindow === "number"
127
- ? new anchor_1.BN(volumeWindow)
128
- : volumeWindow;
129
- const [configPda] = (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, program.programId);
130
- return program.methods
131
- .setConfig(unstakingPeriodArg, volumeWindowArg)
132
- .accountsPartial({
133
- admin,
134
- config: configPda,
135
- });
136
- }
137
- function slash(program, admin, tokenMint, nonce, userStakePda, basisPoints) {
138
- const [configPda] = (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, program.programId);
139
- const [stakeVault] = (0, utils_1.deriveStakeVaultPDA)(configPda, program.programId);
140
- const feeVault = (0, spl_token_1.getAssociatedTokenAddressSync)(tokenMint, exports.FEE_AUTHORITY);
141
- return program.methods.slash(basisPoints).accountsPartial({
142
- admin,
143
- tokenMint,
144
- config: configPda,
145
- userStake: userStakePda,
146
- stakeVault,
147
- feeVault,
148
- tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
149
- });
150
- }
151
- function addDelegate(program, staker, delegateWallet, tokenMint, nonce) {
152
- const [configPda] = (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, program.programId);
153
- const [userStakePda] = (0, utils_1.deriveUserStakePDA)(configPda, staker, program.programId);
154
- const [delegatePda] = (0, utils_1.deriveDelegatePDA)(configPda, delegateWallet, program.programId);
155
- return program.methods.addDelegate().accountsPartial({
156
- staker,
157
- delegateWallet,
158
- config: configPda,
159
- userStake: userStakePda,
160
- delegate: delegatePda,
161
- });
162
- }
163
- function removeDelegate(program, staker, delegateWallet, tokenMint, nonce) {
164
- const [configPda] = (0, utils_1.deriveStakingConfigPDA)(tokenMint, nonce, program.programId);
165
- const [delegatePda] = (0, utils_1.deriveDelegatePDA)(configPda, delegateWallet, program.programId);
166
- return program.methods.removeDelegate().accountsPartial({
167
- staker,
168
- config: configPda,
169
- delegate: delegatePda,
170
- });
171
- }
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N2YXVsdC9pbnN0cnVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBaUJILHdEQXlCQztBQUVELHNCQXVCQztBQUVELDBDQWtCQztBQUVELDRCQW9CQztBQUVELGtDQXlCQztBQUVELG9DQTBCQztBQUVELDhCQTRCQztBQUVELHNCQXFCQztBQUVELGtDQWtCQztBQUVELHdDQWVDO0FBNVBELDhDQUFnRDtBQUNoRCw2Q0FBNEM7QUFDNUMsaURBQW9GO0FBRXBGLG1DQU1pQjtBQUVqQix5Q0FBeUM7QUFDNUIsUUFBQSxhQUFhLEdBQUcsSUFBSSxtQkFBUyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7QUFFM0YsU0FBZ0Isc0JBQXNCLENBQ3BDLE9BQXdCLEVBQ3hCLEtBQWdCLEVBQ2hCLFNBQW9CLEVBQ3BCLGVBQTRCLEVBQzVCLFlBQXlCLEVBQ3pCLEtBQWE7SUFFYixNQUFNLGlCQUFpQixHQUFHLE9BQU8sZUFBZSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztJQUMxRyxNQUFNLGNBQWMsR0FBRyxPQUFPLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFFOUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUEsOEJBQXNCLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUEsMkJBQW1CLEVBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBQSw0QkFBb0Is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QU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxlQUFlLENBQUM7UUFDdEQsTUFBTTtRQUNOLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLFFBQVEsRUFBRSxXQUFXO0tBQ3RCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogTG93LWxldmVsIGluc3RydWN0aW9uIGJ1aWxkZXJzIGZvciB0aGUgU1ZhdWx0IHByb2dyYW0uXG4gKiBUaGVzZSBhcmUgdGhpbiB3cmFwcGVycyBhcm91bmQgdGhlIHByb2dyYW0gbWV0aG9kcyAtIHVzZSBTVmF1bHRDbGllbnQgZm9yIGhpZ2hlci1sZXZlbCBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7IFByb2dyYW0sIEJOIH0gZnJvbSBcIkBjb3JhbC14eXovYW5jaG9yXCI7XG5pbXBvcnQgeyBQdWJsaWNLZXkgfSBmcm9tIFwiQHNvbGFuYS93ZWIzLmpzXCI7XG5pbXBvcnQgeyBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYywgVE9LRU5fUFJPR1JBTV9JRCB9IGZyb20gXCJAc29sYW5hL3NwbC10b2tlblwiO1xuaW1wb3J0IHsgU3ZhdWx0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIGRlcml2ZVN0YWtpbmdDb25maWdQREEsXG4gIGRlcml2ZVVzZXJTdGFrZVBEQSxcbiAgZGVyaXZlU3Rha2VWYXVsdFBEQSxcbiAgZGVyaXZlUmV3YXJkVmF1bHRQREEsXG4gIGRlcml2ZURlbGVnYXRlUERBLFxufSBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKiBGZWUgQXV0aG9yaXR5IChzYW1lIGFzIEFNTSBwcm9ncmFtKSAqL1xuZXhwb3J0IGNvbnN0IEZFRV9BVVRIT1JJVFkgPSBuZXcgUHVibGljS2V5KFwiRkVFbmtjQ05FMjYyM0xZQ1B0TGY2M0xGelhwQ0ZpZ0JMVHU0cVpvdlJHWkNcIik7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplU3Rha2luZ1ZhdWx0KFxuICBwcm9ncmFtOiBQcm9ncmFtPFN2YXVsdD4sXG4gIGFkbWluOiBQdWJsaWNLZXksXG4gIHRva2VuTWludDogUHVibGljS2V5LFxuICB1bnN0YWtpbmdQZXJpb2Q6IEJOIHwgbnVtYmVyLFxuICB2b2x1bWVXaW5kb3c6IEJOIHwgbnVtYmVyLFxuICBub25jZTogbnVtYmVyXG4pIHtcbiAgY29uc3QgdW5zdGFraW5nUGVyaW9kQk4gPSB0eXBlb2YgdW5zdGFraW5nUGVyaW9kID09PSBcIm51bWJlclwiID8gbmV3IEJOKHVuc3Rha2luZ1BlcmlvZCkgOiB1bnN0YWtpbmdQZXJpb2Q7XG4gIGNvbnN0IHZvbHVtZVdpbmRvd0JOID0gdHlwZW9mIHZvbHVtZVdpbmRvdyA9PT0gXCJudW1iZXJcIiA/IG5ldyBCTih2b2x1bWVXaW5kb3cpIDogdm9sdW1lV2luZG93O1xuXG4gIGNvbnN0IFtjb25maWdQZGFdID0gZGVyaXZlU3Rha2luZ0NvbmZpZ1BEQSh0b2tlbk1pbnQsIG5vbmNlLCBwcm9ncmFtLnByb2dyYW1JZCk7XG4gIGNvbnN0IFtzdGFrZVZhdWx0XSA9IGRlcml2ZVN0YWtlVmF1bHRQREEoY29uZmlnUGRhLCBwcm9ncmFtLnByb2dyYW1JZCk7XG4gIGNvbnN0IFtyZXdhcmRWYXVsdF0gPSBkZXJpdmVSZXdhcmRWYXVsdFBEQShjb25maWdQZGEsIHByb2dyYW0ucHJvZ3JhbUlkKTtcblxuICByZXR1cm4gcHJvZ3JhbS5tZXRob2RzXG4gICAgLmluaXRpYWxpemVTdGFraW5nVmF1bHQodW5zdGFraW5nUGVyaW9kQk4sIHZvbHVtZVdpbmRvd0JOLCBub25jZSlcbiAgICAuYWNjb3VudHNQYXJ0aWFsKHtcbiAgICAgIGFkbWluLFxuICAgICAgdG9rZW5NaW50LFxuICAgICAgY29uZmlnOiBjb25maWdQZGEsXG4gICAgICBzdGFrZVZhdWx0LFxuICAgICAgcmV3YXJkVmF1bHQsXG4gICAgICB0b2tlblByb2dyYW06IFRPS0VOX1BST0dSQU1fSUQsXG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFrZShcbiAgcHJvZ3JhbTogUHJvZ3JhbTxTdmF1bHQ+LFxuICB1c2VyOiBQdWJsaWNLZXksXG4gIHRva2VuTWludDogUHVibGljS2V5LFxuICBub25jZTogbnVtYmVyLFxuICBhbW91bnQ6IEJOIHwgbnVtYmVyXG4pIHtcbiAgY29uc3QgYW1vdW50Qk4gPSB0eXBlb2YgYW1vdW50ID09PSBcIm51bWJlclwiID8gbmV3IEJOKGFtb3VudCkgOiBhbW91bnQ7XG5cbiAgY29uc3QgW2NvbmZpZ1BkYV0gPSBkZXJpdmVTdGFraW5nQ29uZmlnUERBKHRva2VuTWludCwgbm9uY2UsIHByb2dyYW0ucHJvZ3JhbUlkKTtcbiAgY29uc3QgW3VzZXJTdGFrZVBkYV0gPSBkZXJpdmVVc2VyU3Rha2VQREEoY29uZmlnUGRhLCB1c2VyLCBwcm9ncmFtLnByb2dyYW1JZCk7XG4gIGNvbnN0IFtzdGFrZVZhdWx0XSA9IGRlcml2ZVN0YWtlVmF1bHRQREEoY29uZmlnUGRhLCBwcm9ncmFtLnByb2dyYW1JZCk7XG4gIGNvbnN0IHVzZXJUb2tlbkFjY291bnQgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh0b2tlbk1pbnQsIHVzZXIpO1xuXG4gIHJldHVybiBwcm9ncmFtLm1ldGhvZHMuc3Rha2UoYW1vdW50Qk4pLmFjY291bnRzUGFydGlhbCh7XG4gICAgdXNlcixcbiAgICB0b2tlbk1pbnQsXG4gICAgY29uZmlnOiBjb25maWdQZGEsXG4gICAgdXNlclN0YWtlOiB1c2VyU3Rha2VQZGEsXG4gICAgc3Rha2VWYXVsdCxcbiAgICB1c2VyVG9rZW5BY2NvdW50LFxuICAgIHRva2VuUHJvZ3JhbTogVE9LRU5fUFJPR1JBTV9JRCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWF0ZVVuc3Rha2UoXG4gIHByb2dyYW06IFByb2dyYW08U3ZhdWx0PixcbiAgdXNlcjogUHVibGljS2V5LFxuICB0b2tlbk1pbnQ6IFB1YmxpY0tleSxcbiAgbm9uY2U6IG51bWJlcixcbiAgYW1vdW50OiBCTiB8IG51bWJlclxuKSB7XG4gIGNvbnN0IGFtb3VudEJOID0gdHlwZW9mIGFtb3VudCA9PT0gXCJudW1iZXJcIiA/IG5ldyBCTihhbW91bnQpIDogYW1vdW50O1xuXG4gIGNvbnN0IFtjb25maWdQZGFdID0gZGVyaXZlU3Rha2luZ0NvbmZpZ1BEQSh0b2tlbk1pbnQsIG5vbmNlLCBwcm9ncmFtLnByb2dyYW1JZCk7XG4gIGNvbnN0IFt1c2VyU3Rha2VQZGFdID0gZGVyaXZlVXNlclN0YWtlUERBKGNvbmZpZ1BkYSwgdXNlciwgcHJvZ3JhbS5wcm9ncmFtSWQpO1xuXG4gIHJldHVybiBwcm9ncmFtLm1ldGhvZHMuaW5pdGlhdGVVbnN0YWtlKGFtb3VudEJOKS5hY2NvdW50c1BhcnRpYWwoe1xuICAgIHVzZXIsXG4gICAgdG9rZW5NaW50LFxuICAgIGNvbmZpZzogY29uZmlnUGRhLFxuICAgIHVzZXJTdGFrZTogdXNlclN0YWtlUGRhLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhkcmF3KFxuICBwcm9ncmFtOiBQcm9ncmFtPFN2YXVsdD4sXG4gIHVzZXI6IFB1YmxpY0tleSxcbiAgdG9rZW5NaW50OiBQdWJsaWNLZXksXG4gIG5vbmNlOiBudW1iZXJcbikge1xuICBjb25zdCBbY29uZmlnUGRhXSA9IGRlcml2ZVN0YWtpbmdDb25maWdQREEodG9rZW5NaW50LCBub25jZSwgcHJvZ3JhbS5wcm9ncmFtSWQpO1xuICBjb25zdCBbdXNlclN0YWtlUGRhXSA9IGRlcml2ZVVzZXJTdGFrZVBEQShjb25maWdQZGEsIHVzZXIsIHByb2dyYW0ucHJvZ3JhbUlkKTtcbiAgY29uc3QgW3N0YWtlVmF1bHRdID0gZGVyaXZlU3Rha2VWYXVsdFBEQShjb25maWdQZGEsIHByb2dyYW0ucHJvZ3JhbUlkKTtcbiAgY29uc3QgdXNlclRva2VuQWNjb3VudCA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHRva2VuTWludCwgdXNlcik7XG5cbiAgcmV0dXJuIHByb2dyYW0ubWV0aG9kcy53aXRoZHJhdygpLmFjY291bnRzUGFydGlhbCh7XG4gICAgdXNlcixcbiAgICB0b2tlbk1pbnQsXG4gICAgY29uZmlnOiBjb25maWdQZGEsXG4gICAgdXNlclN0YWtlOiB1c2VyU3Rha2VQZGEsXG4gICAgc3Rha2VWYXVsdCxcbiAgICB1c2VyVG9rZW5BY2NvdW50LFxuICAgIHRva2VuUHJvZ3JhbTogVE9LRU5fUFJPR1JBTV9JRCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3N0UmV3YXJkcyhcbiAgcHJvZ3JhbTogUHJvZ3JhbTxTdmF1bHQ+LFxuICBhZG1pbjogUHVibGljS2V5LFxuICB0b2tlbk1pbnQ6IFB1YmxpY0tleSxcbiAgbm9uY2U6IG51bWJlcixcbiAgbWVya2xlUm9vdDogbnVtYmVyW10sXG4gIHRvdGFsQW1vdW50OiBCTiB8IG51bWJlclxuKSB7XG4gIGNvbnN0IG1lcmtsZVJvb3RBcnJheSA9IG1lcmtsZVJvb3QgYXMgbnVtYmVyW107XG4gIGNvbnN0IHRvdGFsQW1vdW50Qk4gPSB0eXBlb2YgdG90YWxBbW91bnQgPT09IFwibnVtYmVyXCIgPyBuZXcgQk4odG90YWxBbW91bnQpIDogdG90YWxBbW91bnQ7XG5cbiAgY29uc3QgW2NvbmZpZ1BkYV0gPSBkZXJpdmVTdGFraW5nQ29uZmlnUERBKHRva2VuTWludCwgbm9uY2UsIHByb2dyYW0ucHJvZ3JhbUlkKTtcbiAgY29uc3QgW3Jld2FyZFZhdWx0XSA9IGRlcml2ZVJld2FyZFZhdWx0UERBKGNvbmZpZ1BkYSwgcHJvZ3JhbS5wcm9ncmFtSWQpO1xuICBjb25zdCBhZG1pblRva2VuQWNjb3VudCA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKHRva2VuTWludCwgYWRtaW4pO1xuXG4gIHJldHVybiBwcm9ncmFtLm1ldGhvZHNcbiAgICAucG9zdFJld2FyZHMobWVya2xlUm9vdEFycmF5LCB0b3RhbEFtb3VudEJOKVxuICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgYWRtaW4sXG4gICAgICB0b2tlbk1pbnQsXG4gICAgICBjb25maWc6IGNvbmZpZ1BkYSxcbiAgICAgIHJld2FyZFZhdWx0LFxuICAgICAgYWRtaW5Ub2tlbkFjY291bnQsXG4gICAgICB0b2tlblByb2dyYW06IFRPS0VOX1BST0dSQU1fSUQsXG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFpbVJld2FyZHMoXG4gIHByb2dyYW06IFByb2dyYW08U3ZhdWx0PixcbiAgdXNlcjogUHVibGljS2V5LFxuICB0b2tlbk1pbnQ6IFB1YmxpY0tleSxcbiAgbm9uY2U6IG51bWJlcixcbiAgY3VtdWxhdGl2ZUFtb3VudDogQk4gfCBudW1iZXIsXG4gIHByb29mOiBudW1iZXJbXVtdXG4pIHtcbiAgY29uc3QgY3VtdWxhdGl2ZUFtb3VudEJOID0gdHlwZW9mIGN1bXVsYXRpdmVBbW91bnQgPT09IFwibnVtYmVyXCIgPyBuZXcgQk4oY3VtdWxhdGl2ZUFtb3VudCkgOiBjdW11bGF0aXZlQW1vdW50O1xuXG4gIGNvbnN0IFtjb25maWdQZGFdID0gZGVyaXZlU3Rha2luZ0NvbmZpZ1BEQSh0b2tlbk1pbnQsIG5vbmNlLCBwcm9ncmFtLnByb2dyYW1JZCk7XG4gIGNvbnN0IFt1c2VyU3Rha2VQZGFdID0gZGVyaXZlVXNlclN0YWtlUERBKGNvbmZpZ1BkYSwgdXNlciwgcHJvZ3JhbS5wcm9ncmFtSWQpO1xuICBjb25zdCBbcmV3YXJkVmF1bHRdID0gZGVyaXZlUmV3YXJkVmF1bHRQREEoY29uZmlnUGRhLCBwcm9ncmFtLnByb2dyYW1JZCk7XG4gIGNvbnN0IHVzZXJUb2tlbkFjY291bnQgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh0b2tlbk1pbnQsIHVzZXIpO1xuXG4gIHJldHVybiBwcm9ncmFtLm1ldGhvZHNcbiAgICAuY2xhaW1SZXdhcmRzKGN1bXVsYXRpdmVBbW91bnRCTiwgcHJvb2YpXG4gICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICB1c2VyLFxuICAgICAgdG9rZW5NaW50LFxuICAgICAgY29uZmlnOiBjb25maWdQZGEsXG4gICAgICB1c2VyU3Rha2U6IHVzZXJTdGFrZVBkYSxcbiAgICAgIHJld2FyZFZhdWx0LFxuICAgICAgdXNlclRva2VuQWNjb3VudCxcbiAgICAgIHRva2VuUHJvZ3JhbTogVE9LRU5fUFJPR1JBTV9JRCxcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbmZpZyhcbiAgcHJvZ3JhbTogUHJvZ3JhbTxTdmF1bHQ+LFxuICBhZG1pbjogUHVibGljS2V5LFxuICB0b2tlbk1pbnQ6IFB1YmxpY0tleSxcbiAgbm9uY2U6IG51bWJlcixcbiAgdW5zdGFraW5nUGVyaW9kOiBCTiB8IG51bWJlciB8IG51bGwsXG4gIHZvbHVtZVdpbmRvdzogQk4gfCBudW1iZXIgfCBudWxsXG4pIHtcbiAgY29uc3QgdW5zdGFraW5nUGVyaW9kQXJnID0gdW5zdGFraW5nUGVyaW9kID09PSBudWxsXG4gICAgPyBudWxsXG4gICAgOiB0eXBlb2YgdW5zdGFraW5nUGVyaW9kID09PSBcIm51bWJlclwiXG4gICAgICA/IG5ldyBCTih1bnN0YWtpbmdQZXJpb2QpXG4gICAgICA6IHVuc3Rha2luZ1BlcmlvZDtcblxuICBjb25zdCB2b2x1bWVXaW5kb3dBcmcgPSB2b2x1bWVXaW5kb3cgPT09IG51bGxcbiAgICA/IG51bGxcbiAgICA6IHR5cGVvZiB2b2x1bWVXaW5kb3cgPT09IFwibnVtYmVyXCJcbiAgICAgID8gbmV3IEJOKHZvbHVtZVdpbmRvdylcbiAgICAgIDogdm9sdW1lV2luZG93O1xuXG4gIGNvbnN0IFtjb25maWdQZGFdID0gZGVyaXZlU3Rha2luZ0NvbmZpZ1BEQSh0b2tlbk1pbnQsIG5vbmNlLCBwcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgcmV0dXJuIHByb2dyYW0ubWV0aG9kc1xuICAgIC5zZXRDb25maWcodW5zdGFraW5nUGVyaW9kQXJnLCB2b2x1bWVXaW5kb3dBcmcpXG4gICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICBhZG1pbixcbiAgICAgIGNvbmZpZzogY29uZmlnUGRhLFxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xhc2goXG4gIHByb2dyYW06IFByb2dyYW08U3ZhdWx0PixcbiAgYWRtaW46IFB1YmxpY0tleSxcbiAgdG9rZW5NaW50OiBQdWJsaWNLZXksXG4gIG5vbmNlOiBudW1iZXIsXG4gIHVzZXJTdGFrZVBkYTogUHVibGljS2V5LFxuICBiYXNpc1BvaW50czogbnVtYmVyXG4pIHtcbiAgY29uc3QgW2NvbmZpZ1BkYV0gPSBkZXJpdmVTdGFraW5nQ29uZmlnUERBKHRva2VuTWludCwgbm9uY2UsIHByb2dyYW0ucHJvZ3JhbUlkKTtcbiAgY29uc3QgW3N0YWtlVmF1bHRdID0gZGVyaXZlU3Rha2VWYXVsdFBEQShjb25maWdQZGEsIHByb2dyYW0ucHJvZ3JhbUlkKTtcbiAgY29uc3QgZmVlVmF1bHQgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyh0b2tlbk1pbnQsIEZFRV9BVVRIT1JJVFkpO1xuXG4gIHJldHVybiBwcm9ncmFtLm1ldGhvZHMuc2xhc2goYmFzaXNQb2ludHMpLmFjY291bnRzUGFydGlhbCh7XG4gICAgYWRtaW4sXG4gICAgdG9rZW5NaW50LFxuICAgIGNvbmZpZzogY29uZmlnUGRhLFxuICAgIHVzZXJTdGFrZTogdXNlclN0YWtlUGRhLFxuICAgIHN0YWtlVmF1bHQsXG4gICAgZmVlVmF1bHQsXG4gICAgdG9rZW5Qcm9ncmFtOiBUT0tFTl9QUk9HUkFNX0lELFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZERlbGVnYXRlKFxuICBwcm9ncmFtOiBQcm9ncmFtPFN2YXVsdD4sXG4gIHN0YWtlcjogUHVibGljS2V5LFxuICBkZWxlZ2F0ZVdhbGxldDogUHVibGljS2V5LFxuICB0b2tlbk1pbnQ6IFB1YmxpY0tleSxcbiAgbm9uY2U6IG51bWJlclxuKSB7XG4gIGNvbnN0IFtjb25maWdQZGFdID0gZGVyaXZlU3Rha2luZ0NvbmZpZ1BEQSh0b2tlbk1pbnQsIG5vbmNlLCBwcm9ncmFtLnByb2dyYW1JZCk7XG4gIGNvbnN0IFt1c2VyU3Rha2VQZGFdID0gZGVyaXZlVXNlclN0YWtlUERBKGNvbmZpZ1BkYSwgc3Rha2VyLCBwcm9ncmFtLnByb2dyYW1JZCk7XG4gIGNvbnN0IFtkZWxlZ2F0ZVBkYV0gPSBkZXJpdmVEZWxlZ2F0ZVBEQShjb25maWdQZGEsIGRlbGVnYXRlV2FsbGV0LCBwcm9ncmFtLnByb2dyYW1JZCk7XG5cbiAgcmV0dXJuIHByb2dyYW0ubWV0aG9kcy5hZGREZWxlZ2F0ZSgpLmFjY291bnRzUGFydGlhbCh7XG4gICAgc3Rha2VyLFxuICAgIGRlbGVnYXRlV2FsbGV0LFxuICAgIGNvbmZpZzogY29uZmlnUGRhLFxuICAgIHVzZXJTdGFrZTogdXNlclN0YWtlUGRhLFxuICAgIGRlbGVnYXRlOiBkZWxlZ2F0ZVBkYSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEZWxlZ2F0ZShcbiAgcHJvZ3JhbTogUHJvZ3JhbTxTdmF1bHQ+LFxuICBzdGFrZXI6IFB1YmxpY0tleSxcbiAgZGVsZWdhdGVXYWxsZXQ6IFB1YmxpY0tleSxcbiAgdG9rZW5NaW50OiBQdWJsaWNLZXksXG4gIG5vbmNlOiBudW1iZXJcbikge1xuICBjb25zdCBbY29uZmlnUGRhXSA9IGRlcml2ZVN0YWtpbmdDb25maWdQREEodG9rZW5NaW50LCBub25jZSwgcHJvZ3JhbS5wcm9ncmFtSWQpO1xuICBjb25zdCBbZGVsZWdhdGVQZGFdID0gZGVyaXZlRGVsZWdhdGVQREEoY29uZmlnUGRhLCBkZWxlZ2F0ZVdhbGxldCwgcHJvZ3JhbS5wcm9ncmFtSWQpO1xuXG4gIHJldHVybiBwcm9ncmFtLm1ldGhvZHMucmVtb3ZlRGVsZWdhdGUoKS5hY2NvdW50c1BhcnRpYWwoe1xuICAgIHN0YWtlcixcbiAgICBjb25maWc6IGNvbmZpZ1BkYSxcbiAgICBkZWxlZ2F0ZTogZGVsZWdhdGVQZGEsXG4gIH0pO1xufVxuIl19
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.FEE_AUTHORITY=void 0,exports.initializeStakingVault=initializeStakingVault,exports.stake=stake,exports.initiateUnstake=initiateUnstake,exports.withdraw=withdraw,exports.postRewards=postRewards,exports.claimRewards=claimRewards,exports.setConfig=setConfig,exports.slash=slash,exports.addDelegate=addDelegate,exports.removeDelegate=removeDelegate;const anchor_1=require("@coral-xyz/anchor"),web3_js_1=require("@solana/web3.js"),spl_token_1=require("@solana/spl-token"),utils_1=require("./utils");function initializeStakingVault(e,t,r,a,n,o){const i="number"==typeof a?new anchor_1.BN(a):a,s="number"==typeof n?new anchor_1.BN(n):n,[u]=(0,utils_1.deriveStakingConfigPDA)(r,o,e.programId),[d]=(0,utils_1.deriveStakeVaultPDA)(u,e.programId),[l]=(0,utils_1.deriveRewardVaultPDA)(u,e.programId);return e.methods.initializeStakingVault(i,s,o).accountsPartial({admin:t,tokenMint:r,config:u,stakeVault:d,rewardVault:l,tokenProgram:spl_token_1.TOKEN_PROGRAM_ID})}function stake(e,t,r,a,n){const o="number"==typeof n?new anchor_1.BN(n):n,[i]=(0,utils_1.deriveStakingConfigPDA)(r,a,e.programId),[s]=(0,utils_1.deriveUserStakePDA)(i,t,e.programId),[u]=(0,utils_1.deriveStakeVaultPDA)(i,e.programId),d=(0,spl_token_1.getAssociatedTokenAddressSync)(r,t);return e.methods.stake(o).accountsPartial({user:t,tokenMint:r,config:i,userStake:s,stakeVault:u,userTokenAccount:d,tokenProgram:spl_token_1.TOKEN_PROGRAM_ID})}function initiateUnstake(e,t,r,a,n){const o="number"==typeof n?new anchor_1.BN(n):n,[i]=(0,utils_1.deriveStakingConfigPDA)(r,a,e.programId),[s]=(0,utils_1.deriveUserStakePDA)(i,t,e.programId);return e.methods.initiateUnstake(o).accountsPartial({user:t,tokenMint:r,config:i,userStake:s})}function withdraw(e,t,r,a){const[n]=(0,utils_1.deriveStakingConfigPDA)(r,a,e.programId),[o]=(0,utils_1.deriveUserStakePDA)(n,t,e.programId),[i]=(0,utils_1.deriveStakeVaultPDA)(n,e.programId),s=(0,spl_token_1.getAssociatedTokenAddressSync)(r,t);return e.methods.withdraw().accountsPartial({user:t,tokenMint:r,config:n,userStake:o,stakeVault:i,userTokenAccount:s,tokenProgram:spl_token_1.TOKEN_PROGRAM_ID})}function postRewards(e,t,r,a,n,o){const i=n,s="number"==typeof o?new anchor_1.BN(o):o,[u]=(0,utils_1.deriveStakingConfigPDA)(r,a,e.programId),[d]=(0,utils_1.deriveRewardVaultPDA)(u,e.programId),l=(0,spl_token_1.getAssociatedTokenAddressSync)(r,t);return e.methods.postRewards(i,s).accountsPartial({admin:t,tokenMint:r,config:u,rewardVault:d,adminTokenAccount:l,tokenProgram:spl_token_1.TOKEN_PROGRAM_ID})}function claimRewards(e,t,r,a,n,o){const i="number"==typeof n?new anchor_1.BN(n):n,[s]=(0,utils_1.deriveStakingConfigPDA)(r,a,e.programId),[u]=(0,utils_1.deriveUserStakePDA)(s,t,e.programId),[d]=(0,utils_1.deriveRewardVaultPDA)(s,e.programId),l=(0,spl_token_1.getAssociatedTokenAddressSync)(r,t);return e.methods.claimRewards(i,o).accountsPartial({user:t,tokenMint:r,config:s,userStake:u,rewardVault:d,userTokenAccount:l,tokenProgram:spl_token_1.TOKEN_PROGRAM_ID})}function setConfig(e,t,r,a,n,o){const i=null===n?null:"number"==typeof n?new anchor_1.BN(n):n,s=null===o?null:"number"==typeof o?new anchor_1.BN(o):o,[u]=(0,utils_1.deriveStakingConfigPDA)(r,a,e.programId);return e.methods.setConfig(i,s).accountsPartial({admin:t,config:u})}function slash(e,t,r,a,n,o){const[i]=(0,utils_1.deriveStakingConfigPDA)(r,a,e.programId),[s]=(0,utils_1.deriveStakeVaultPDA)(i,e.programId),u=(0,spl_token_1.getAssociatedTokenAddressSync)(r,exports.FEE_AUTHORITY);return e.methods.slash(o).accountsPartial({admin:t,tokenMint:r,config:i,userStake:n,stakeVault:s,feeVault:u,tokenProgram:spl_token_1.TOKEN_PROGRAM_ID})}function addDelegate(e,t,r,a,n){const[o]=(0,utils_1.deriveStakingConfigPDA)(a,n,e.programId),[i]=(0,utils_1.deriveUserStakePDA)(o,t,e.programId),[s]=(0,utils_1.deriveDelegatePDA)(o,r,e.programId);return e.methods.addDelegate().accountsPartial({staker:t,delegateWallet:r,config:o,userStake:i,delegate:s})}function removeDelegate(e,t,r,a,n){const[o]=(0,utils_1.deriveStakingConfigPDA)(a,n,e.programId),[i]=(0,utils_1.deriveDelegatePDA)(o,r,e.programId);return e.methods.removeDelegate().accountsPartial({staker:t,config:o,delegate:i})}exports.FEE_AUTHORITY=new web3_js_1.PublicKey("FEEnkcCNE2623LYCPtLf63LFzXpCFigBLTu4qZovRGZC");
@@ -1,7 +1 @@
1
- "use strict";
2
- /*
3
- * Type definitions for the SVault program.
4
- * Exports IDL-derived types and SDK-friendly enums.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3ZhdWx0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFNWYXVsdCBwcm9ncmFtLlxuICogRXhwb3J0cyBJREwtZGVyaXZlZCB0eXBlcyBhbmQgU0RLLWZyaWVuZGx5IGVudW1zLlxuICovXG5cbmltcG9ydCB7IElkbEFjY291bnRzLCBJZGxFdmVudHMgfSBmcm9tIFwiQGNvcmFsLXh5ei9hbmNob3JcIjtcbmltcG9ydCB7IFR4T3B0aW9ucyB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5leHBvcnQgeyBTdmF1bHQgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFN2YXVsdCB9IGZyb20gXCIuLi9nZW5lcmF0ZWQvdHlwZXNcIjtcblxuLyogSURMLWRlcml2ZWQgQWNjb3VudCBUeXBlcyAqL1xuXG5leHBvcnQgdHlwZSBTdGFraW5nQ29uZmlnQWNjb3VudCA9IElkbEFjY291bnRzPFN2YXVsdD5bXCJzdGFraW5nQ29uZmlnXCJdO1xuZXhwb3J0IHR5cGUgVXNlclN0YWtlQWNjb3VudCA9IElkbEFjY291bnRzPFN2YXVsdD5bXCJ1c2VyU3Rha2VcIl07XG5leHBvcnQgdHlwZSBEZWxlZ2F0ZUFjY291bnQgPSBJZGxBY2NvdW50czxTdmF1bHQ+W1wiZGVsZWdhdGVcIl07XG5cbi8qIElETC1kZXJpdmVkIEV2ZW50IFR5cGVzICovXG5cbmV4cG9ydCB0eXBlIFN0YWtpbmdWYXVsdEluaXRpYWxpemVkRXZlbnQgPSBJZGxFdmVudHM8U3ZhdWx0PltcInN0YWtpbmdWYXVsdEluaXRpYWxpemVkXCJdO1xuZXhwb3J0IHR5cGUgU3Rha2VkRXZlbnQgPSBJZGxFdmVudHM8U3ZhdWx0PltcInN0YWtlZFwiXTtcbmV4cG9ydCB0eXBlIFVuc3Rha2VJbml0aWF0ZWRFdmVudCA9IElkbEV2ZW50czxTdmF1bHQ+W1widW5zdGFrZUluaXRpYXRlZFwiXTtcbmV4cG9ydCB0eXBlIFdpdGhkcmF3bkV2ZW50ID0gSWRsRXZlbnRzPFN2YXVsdD5bXCJ3aXRoZHJhd25cIl07XG5leHBvcnQgdHlwZSBSZXdhcmRzUG9zdGVkRXZlbnQgPSBJZGxFdmVudHM8U3ZhdWx0PltcInJld2FyZHNQb3N0ZWRcIl07XG5leHBvcnQgdHlwZSBSZXdhcmRzQ2xhaW1lZEV2ZW50ID0gSWRsRXZlbnRzPFN2YXVsdD5bXCJyZXdhcmRzQ2xhaW1lZFwiXTtcbmV4cG9ydCB0eXBlIFNsYXNoZWRFdmVudCA9IElkbEV2ZW50czxTdmF1bHQ+W1wic2xhc2hlZFwiXTtcbmV4cG9ydCB0eXBlIERlbGVnYXRlQWRkZWRFdmVudCA9IElkbEV2ZW50czxTdmF1bHQ+W1wiZGVsZWdhdGVBZGRlZFwiXTtcbmV4cG9ydCB0eXBlIERlbGVnYXRlUmVtb3ZlZEV2ZW50ID0gSWRsRXZlbnRzPFN2YXVsdD5bXCJkZWxlZ2F0ZVJlbW92ZWRcIl07XG5cbi8qIEV2ZW50IFVuaW9uIFR5cGUgKi9cblxuZXhwb3J0IHR5cGUgU1ZhdWx0RXZlbnQgPVxuICB8IHsgbmFtZTogXCJTdGFraW5nVmF1bHRJbml0aWFsaXplZFwiOyBkYXRhOiBTdGFraW5nVmF1bHRJbml0aWFsaXplZEV2ZW50IH1cbiAgfCB7IG5hbWU6IFwiU3Rha2VkXCI7IGRhdGE6IFN0YWtlZEV2ZW50IH1cbiAgfCB7IG5hbWU6IFwiVW5zdGFrZUluaXRpYXRlZFwiOyBkYXRhOiBVbnN0YWtlSW5pdGlhdGVkRXZlbnQgfVxuICB8IHsgbmFtZTogXCJXaXRoZHJhd25cIjsgZGF0YTogV2l0aGRyYXduRXZlbnQgfVxuICB8IHsgbmFtZTogXCJSZXdhcmRzUG9zdGVkXCI7IGRhdGE6IFJld2FyZHNQb3N0ZWRFdmVudCB9XG4gIHwgeyBuYW1lOiBcIlJld2FyZHNDbGFpbWVkXCI7IGRhdGE6IFJld2FyZHNDbGFpbWVkRXZlbnQgfVxuICB8IHsgbmFtZTogXCJTbGFzaGVkXCI7IGRhdGE6IFNsYXNoZWRFdmVudCB9XG4gIHwgeyBuYW1lOiBcIkRlbGVnYXRlQWRkZWRcIjsgZGF0YTogRGVsZWdhdGVBZGRlZEV2ZW50IH1cbiAgfCB7IG5hbWU6IFwiRGVsZWdhdGVSZW1vdmVkXCI7IGRhdGE6IERlbGVnYXRlUmVtb3ZlZEV2ZW50IH07XG5cbi8qIENsaWVudCBPcHRpb25zICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgU1ZhdWx0VHhPcHRpb25zIGV4dGVuZHMgVHhPcHRpb25zIHt9XG4iXX0=
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});
@@ -1,86 +1 @@
1
- "use strict";
2
- /*
3
- * Utility functions for the SVault program.
4
- * PDA derivation, state parsing, and account fetching.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.deriveStakingConfigPDA = deriveStakingConfigPDA;
8
- exports.deriveUserStakePDA = deriveUserStakePDA;
9
- exports.deriveDelegatePDA = deriveDelegatePDA;
10
- exports.deriveStakeVaultPDA = deriveStakeVaultPDA;
11
- exports.deriveRewardVaultPDA = deriveRewardVaultPDA;
12
- exports.fetchStakingConfigAccount = fetchStakingConfigAccount;
13
- exports.fetchUserStakeAccount = fetchUserStakeAccount;
14
- exports.fetchDelegateAccount = fetchDelegateAccount;
15
- exports.computeWithdrawAvailableAt = computeWithdrawAvailableAt;
16
- exports.isWithdrawAvailable = isWithdrawAvailable;
17
- exports.getTimeUntilWithdraw = getTimeUntilWithdraw;
18
- const web3_js_1 = require("@solana/web3.js");
19
- const constants_1 = require("./constants");
20
- /* PDA Derivation */
21
- function deriveStakingConfigPDA(tokenMint, nonce, programId = constants_1.PROGRAM_ID) {
22
- const nonceBuffer = Buffer.alloc(2);
23
- nonceBuffer.writeUInt16LE(nonce);
24
- return web3_js_1.PublicKey.findProgramAddressSync([constants_1.STAKING_CONFIG_SEED, tokenMint.toBuffer(), nonceBuffer], programId);
25
- }
26
- function deriveUserStakePDA(stakingConfig, user, programId = constants_1.PROGRAM_ID) {
27
- return web3_js_1.PublicKey.findProgramAddressSync([constants_1.USER_STAKE_SEED, stakingConfig.toBuffer(), user.toBuffer()], programId);
28
- }
29
- function deriveDelegatePDA(stakingConfig, delegate, programId = constants_1.PROGRAM_ID) {
30
- // Uses USER_STAKE_SEED to prevent delegate from also being a staker
31
- return web3_js_1.PublicKey.findProgramAddressSync([constants_1.USER_STAKE_SEED, stakingConfig.toBuffer(), delegate.toBuffer()], programId);
32
- }
33
- function deriveStakeVaultPDA(stakingConfig, programId = constants_1.PROGRAM_ID) {
34
- return web3_js_1.PublicKey.findProgramAddressSync([constants_1.STAKE_VAULT_SEED, stakingConfig.toBuffer()], programId);
35
- }
36
- function deriveRewardVaultPDA(stakingConfig, programId = constants_1.PROGRAM_ID) {
37
- return web3_js_1.PublicKey.findProgramAddressSync([constants_1.REWARD_VAULT_SEED, stakingConfig.toBuffer()], programId);
38
- }
39
- /* Fetchers */
40
- async function fetchStakingConfigAccount(program, pda) {
41
- return program.account.stakingConfig.fetch(pda);
42
- }
43
- async function fetchUserStakeAccount(program, pda) {
44
- return program.account.userStake.fetch(pda);
45
- }
46
- async function fetchDelegateAccount(program, pda) {
47
- return program.account.delegate.fetch(pda);
48
- }
49
- /* Helpers */
50
- /**
51
- * Compute when withdrawal will be available based on unstake initiation time.
52
- * @param unstakeInitiatedAt Unix timestamp when unstake was initiated (seconds)
53
- * @param unstakingPeriodDays Number of days in unstaking period
54
- * @returns Date when withdrawal becomes available
55
- */
56
- function computeWithdrawAvailableAt(unstakeInitiatedAt, unstakingPeriodDays) {
57
- const availableAtSeconds = unstakeInitiatedAt + unstakingPeriodDays * constants_1.SECONDS_PER_DAY;
58
- return new Date(availableAtSeconds * 1000);
59
- }
60
- /**
61
- * Check if withdrawal is currently available.
62
- * @param unstakeInitiatedAt Unix timestamp when unstake was initiated (seconds)
63
- * @param unstakingPeriodDays Number of days in unstaking period
64
- * @returns true if unstaking period has elapsed
65
- */
66
- function isWithdrawAvailable(unstakeInitiatedAt, unstakingPeriodDays) {
67
- if (unstakeInitiatedAt === 0)
68
- return false;
69
- const now = Math.floor(Date.now() / 1000);
70
- const availableAt = unstakeInitiatedAt + unstakingPeriodDays * constants_1.SECONDS_PER_DAY;
71
- return now >= availableAt;
72
- }
73
- /**
74
- * Compute the time remaining until withdrawal is available.
75
- * @param unstakeInitiatedAt Unix timestamp when unstake was initiated (seconds)
76
- * @param unstakingPeriodDays Number of days in unstaking period
77
- * @returns Seconds remaining, or 0 if already available
78
- */
79
- function getTimeUntilWithdraw(unstakeInitiatedAt, unstakingPeriodDays) {
80
- if (unstakeInitiatedAt === 0)
81
- return 0;
82
- const now = Math.floor(Date.now() / 1000);
83
- const availableAt = unstakeInitiatedAt + unstakingPeriodDays * constants_1.SECONDS_PER_DAY;
84
- return Math.max(0, availableAt - now);
85
- }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3ZhdWx0L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7O0FBZ0JILHdEQVdDO0FBRUQsZ0RBU0M7QUFFRCw4Q0FVQztBQUVELGtEQVFDO0FBRUQsb0RBUUM7QUFJRCw4REFLQztBQUVELHNEQUtDO0FBRUQsb0RBS0M7QUFVRCxnRUFNQztBQVFELGtEQVFDO0FBUUQsb0RBUUM7QUExSUQsNkNBQTRDO0FBQzVDLDJDQU9xQjtBQUdyQixvQkFBb0I7QUFFcEIsU0FBZ0Isc0JBQXNCLENBQ3BDLFNBQW9CLEVBQ3BCLEtBQWEsRUFDYixZQUF1QixzQkFBVTtJQUVqQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsT0FBTyxtQkFBUyxDQUFDLHNCQUFzQixDQUNyQyxDQUFDLCtCQUFtQixFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFDeEQsU0FBUyxDQUNWLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQ2hDLGFBQXdCLEVBQ3hCLElBQWUsRUFDZixZQUF1QixzQkFBVTtJQUVqQyxPQUFPLG1CQUFTLENBQUMsc0JBQXNCLENBQ3JDLENBQUMsMkJBQWUsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQzVELFNBQVMsQ0FDVixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUMvQixhQUF3QixFQUN4QixRQUFtQixFQUNuQixZQUF1QixzQkFBVTtJQUVqQyxvRUFBb0U7SUFDcEUsT0FBTyxtQkFBUyxDQUFDLHNCQUFzQixDQUNyQyxDQUFDLDJCQUFlLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUNoRSxTQUFTLENBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FDakMsYUFBd0IsRUFDeEIsWUFBdUIsc0JBQVU7SUFFakMsT0FBTyxtQkFBUyxDQUFDLHNCQUFzQixDQUNyQyxDQUFDLDRCQUFnQixFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUM1QyxTQUFTLENBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FDbEMsYUFBd0IsRUFDeEIsWUFBdUIsc0JBQVU7SUFFakMsT0FBTyxtQkFBUyxDQUFDLHNCQUFzQixDQUNyQyxDQUFDLDZCQUFpQixFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUM3QyxTQUFTLENBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRCxjQUFjO0FBRVAsS0FBSyxVQUFVLHlCQUF5QixDQUM3QyxPQUF3QixFQUN4QixHQUFjO0lBRWQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVNLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsT0FBd0IsRUFDeEIsR0FBYztJQUVkLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFTSxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLE9BQXdCLEVBQ3hCLEdBQWM7SUFFZCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsYUFBYTtBQUViOzs7OztHQUtHO0FBQ0gsU0FBZ0IsMEJBQTBCLENBQ3hDLGtCQUEwQixFQUMxQixtQkFBMkI7SUFFM0IsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsR0FBRyxtQkFBbUIsR0FBRywyQkFBZSxDQUFDO0lBQ3RGLE9BQU8sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLGtCQUEwQixFQUMxQixtQkFBMkI7SUFFM0IsSUFBSSxrQkFBa0IsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLEdBQUcsbUJBQW1CLEdBQUcsMkJBQWUsQ0FBQztJQUMvRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLGtCQUEwQixFQUMxQixtQkFBMkI7SUFFM0IsSUFBSSxrQkFBa0IsS0FBSyxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLEdBQUcsbUJBQW1CLEdBQUcsMkJBQWUsQ0FBQztJQUMvRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgU1ZhdWx0IHByb2dyYW0uXG4gKiBQREEgZGVyaXZhdGlvbiwgc3RhdGUgcGFyc2luZywgYW5kIGFjY291bnQgZmV0Y2hpbmcuXG4gKi9cblxuaW1wb3J0IHsgUHJvZ3JhbSB9IGZyb20gXCJAY29yYWwteHl6L2FuY2hvclwiO1xuaW1wb3J0IHsgUHVibGljS2V5IH0gZnJvbSBcIkBzb2xhbmEvd2ViMy5qc1wiO1xuaW1wb3J0IHtcbiAgU1RBS0lOR19DT05GSUdfU0VFRCxcbiAgVVNFUl9TVEFLRV9TRUVELFxuICBTVEFLRV9WQVVMVF9TRUVELFxuICBSRVdBUkRfVkFVTFRfU0VFRCxcbiAgUFJPR1JBTV9JRCxcbiAgU0VDT05EU19QRVJfREFZLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFN2YXVsdCwgU3Rha2luZ0NvbmZpZ0FjY291bnQsIFVzZXJTdGFrZUFjY291bnQsIERlbGVnYXRlQWNjb3VudCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qIFBEQSBEZXJpdmF0aW9uICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVTdGFraW5nQ29uZmlnUERBKFxuICB0b2tlbk1pbnQ6IFB1YmxpY0tleSxcbiAgbm9uY2U6IG51bWJlcixcbiAgcHJvZ3JhbUlkOiBQdWJsaWNLZXkgPSBQUk9HUkFNX0lEXG4pOiBbUHVibGljS2V5LCBudW1iZXJdIHtcbiAgY29uc3Qgbm9uY2VCdWZmZXIgPSBCdWZmZXIuYWxsb2MoMik7XG4gIG5vbmNlQnVmZmVyLndyaXRlVUludDE2TEUobm9uY2UpO1xuICByZXR1cm4gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW1NUQUtJTkdfQ09ORklHX1NFRUQsIHRva2VuTWludC50b0J1ZmZlcigpLCBub25jZUJ1ZmZlcl0sXG4gICAgcHJvZ3JhbUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVVc2VyU3Rha2VQREEoXG4gIHN0YWtpbmdDb25maWc6IFB1YmxpY0tleSxcbiAgdXNlcjogUHVibGljS2V5LFxuICBwcm9ncmFtSWQ6IFB1YmxpY0tleSA9IFBST0dSQU1fSURcbik6IFtQdWJsaWNLZXksIG51bWJlcl0ge1xuICByZXR1cm4gUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW1VTRVJfU1RBS0VfU0VFRCwgc3Rha2luZ0NvbmZpZy50b0J1ZmZlcigpLCB1c2VyLnRvQnVmZmVyKCldLFxuICAgIHByb2dyYW1JZFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlRGVsZWdhdGVQREEoXG4gIHN0YWtpbmdDb25maWc6IFB1YmxpY0tleSxcbiAgZGVsZWdhdGU6IFB1YmxpY0tleSxcbiAgcHJvZ3JhbUlkOiBQdWJsaWNLZXkgPSBQUk9HUkFNX0lEXG4pOiBbUHVibGljS2V5LCBudW1iZXJdIHtcbiAgLy8gVXNlcyBVU0VSX1NUQUtFX1NFRUQgdG8gcHJldmVudCBkZWxlZ2F0ZSBmcm9tIGFsc28gYmVpbmcgYSBzdGFrZXJcbiAgcmV0dXJuIFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgIFtVU0VSX1NUQUtFX1NFRUQsIHN0YWtpbmdDb25maWcudG9CdWZmZXIoKSwgZGVsZWdhdGUudG9CdWZmZXIoKV0sXG4gICAgcHJvZ3JhbUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVTdGFrZVZhdWx0UERBKFxuICBzdGFraW5nQ29uZmlnOiBQdWJsaWNLZXksXG4gIHByb2dyYW1JZDogUHVibGljS2V5ID0gUFJPR1JBTV9JRFxuKTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gIHJldHVybiBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbU1RBS0VfVkFVTFRfU0VFRCwgc3Rha2luZ0NvbmZpZy50b0J1ZmZlcigpXSxcbiAgICBwcm9ncmFtSWRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZVJld2FyZFZhdWx0UERBKFxuICBzdGFraW5nQ29uZmlnOiBQdWJsaWNLZXksXG4gIHByb2dyYW1JZDogUHVibGljS2V5ID0gUFJPR1JBTV9JRFxuKTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gIHJldHVybiBQdWJsaWNLZXkuZmluZFByb2dyYW1BZGRyZXNzU3luYyhcbiAgICBbUkVXQVJEX1ZBVUxUX1NFRUQsIHN0YWtpbmdDb25maWcudG9CdWZmZXIoKV0sXG4gICAgcHJvZ3JhbUlkXG4gICk7XG59XG5cbi8qIEZldGNoZXJzICovXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFN0YWtpbmdDb25maWdBY2NvdW50KFxuICBwcm9ncmFtOiBQcm9ncmFtPFN2YXVsdD4sXG4gIHBkYTogUHVibGljS2V5XG4pOiBQcm9taXNlPFN0YWtpbmdDb25maWdBY2NvdW50PiB7XG4gIHJldHVybiBwcm9ncmFtLmFjY291bnQuc3Rha2luZ0NvbmZpZy5mZXRjaChwZGEpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hVc2VyU3Rha2VBY2NvdW50KFxuICBwcm9ncmFtOiBQcm9ncmFtPFN2YXVsdD4sXG4gIHBkYTogUHVibGljS2V5XG4pOiBQcm9taXNlPFVzZXJTdGFrZUFjY291bnQ+IHtcbiAgcmV0dXJuIHByb2dyYW0uYWNjb3VudC51c2VyU3Rha2UuZmV0Y2gocGRhKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoRGVsZWdhdGVBY2NvdW50KFxuICBwcm9ncmFtOiBQcm9ncmFtPFN2YXVsdD4sXG4gIHBkYTogUHVibGljS2V5XG4pOiBQcm9taXNlPERlbGVnYXRlQWNjb3VudD4ge1xuICByZXR1cm4gcHJvZ3JhbS5hY2NvdW50LmRlbGVnYXRlLmZldGNoKHBkYSk7XG59XG5cbi8qIEhlbHBlcnMgKi9cblxuLyoqXG4gKiBDb21wdXRlIHdoZW4gd2l0aGRyYXdhbCB3aWxsIGJlIGF2YWlsYWJsZSBiYXNlZCBvbiB1bnN0YWtlIGluaXRpYXRpb24gdGltZS5cbiAqIEBwYXJhbSB1bnN0YWtlSW5pdGlhdGVkQXQgVW5peCB0aW1lc3RhbXAgd2hlbiB1bnN0YWtlIHdhcyBpbml0aWF0ZWQgKHNlY29uZHMpXG4gKiBAcGFyYW0gdW5zdGFraW5nUGVyaW9kRGF5cyBOdW1iZXIgb2YgZGF5cyBpbiB1bnN0YWtpbmcgcGVyaW9kXG4gKiBAcmV0dXJucyBEYXRlIHdoZW4gd2l0aGRyYXdhbCBiZWNvbWVzIGF2YWlsYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVdpdGhkcmF3QXZhaWxhYmxlQXQoXG4gIHVuc3Rha2VJbml0aWF0ZWRBdDogbnVtYmVyLFxuICB1bnN0YWtpbmdQZXJpb2REYXlzOiBudW1iZXJcbik6IERhdGUge1xuICBjb25zdCBhdmFpbGFibGVBdFNlY29uZHMgPSB1bnN0YWtlSW5pdGlhdGVkQXQgKyB1bnN0YWtpbmdQZXJpb2REYXlzICogU0VDT05EU19QRVJfREFZO1xuICByZXR1cm4gbmV3IERhdGUoYXZhaWxhYmxlQXRTZWNvbmRzICogMTAwMCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgd2l0aGRyYXdhbCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLlxuICogQHBhcmFtIHVuc3Rha2VJbml0aWF0ZWRBdCBVbml4IHRpbWVzdGFtcCB3aGVuIHVuc3Rha2Ugd2FzIGluaXRpYXRlZCAoc2Vjb25kcylcbiAqIEBwYXJhbSB1bnN0YWtpbmdQZXJpb2REYXlzIE51bWJlciBvZiBkYXlzIGluIHVuc3Rha2luZyBwZXJpb2RcbiAqIEByZXR1cm5zIHRydWUgaWYgdW5zdGFraW5nIHBlcmlvZCBoYXMgZWxhcHNlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXaXRoZHJhd0F2YWlsYWJsZShcbiAgdW5zdGFrZUluaXRpYXRlZEF0OiBudW1iZXIsXG4gIHVuc3Rha2luZ1BlcmlvZERheXM6IG51bWJlclxuKTogYm9vbGVhbiB7XG4gIGlmICh1bnN0YWtlSW5pdGlhdGVkQXQgPT09IDApIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIGNvbnN0IGF2YWlsYWJsZUF0ID0gdW5zdGFrZUluaXRpYXRlZEF0ICsgdW5zdGFraW5nUGVyaW9kRGF5cyAqIFNFQ09ORFNfUEVSX0RBWTtcbiAgcmV0dXJuIG5vdyA+PSBhdmFpbGFibGVBdDtcbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSB0aW1lIHJlbWFpbmluZyB1bnRpbCB3aXRoZHJhd2FsIGlzIGF2YWlsYWJsZS5cbiAqIEBwYXJhbSB1bnN0YWtlSW5pdGlhdGVkQXQgVW5peCB0aW1lc3RhbXAgd2hlbiB1bnN0YWtlIHdhcyBpbml0aWF0ZWQgKHNlY29uZHMpXG4gKiBAcGFyYW0gdW5zdGFraW5nUGVyaW9kRGF5cyBOdW1iZXIgb2YgZGF5cyBpbiB1bnN0YWtpbmcgcGVyaW9kXG4gKiBAcmV0dXJucyBTZWNvbmRzIHJlbWFpbmluZywgb3IgMCBpZiBhbHJlYWR5IGF2YWlsYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZVVudGlsV2l0aGRyYXcoXG4gIHVuc3Rha2VJbml0aWF0ZWRBdDogbnVtYmVyLFxuICB1bnN0YWtpbmdQZXJpb2REYXlzOiBudW1iZXJcbik6IG51bWJlciB7XG4gIGlmICh1bnN0YWtlSW5pdGlhdGVkQXQgPT09IDApIHJldHVybiAwO1xuICBjb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgY29uc3QgYXZhaWxhYmxlQXQgPSB1bnN0YWtlSW5pdGlhdGVkQXQgKyB1bnN0YWtpbmdQZXJpb2REYXlzICogU0VDT05EU19QRVJfREFZO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgYXZhaWxhYmxlQXQgLSBub3cpO1xufVxuIl19
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deriveStakingConfigPDA=deriveStakingConfigPDA,exports.deriveUserStakePDA=deriveUserStakePDA,exports.deriveDelegatePDA=deriveDelegatePDA,exports.deriveStakeVaultPDA=deriveStakeVaultPDA,exports.deriveRewardVaultPDA=deriveRewardVaultPDA,exports.fetchStakingConfigAccount=fetchStakingConfigAccount,exports.fetchUserStakeAccount=fetchUserStakeAccount,exports.fetchDelegateAccount=fetchDelegateAccount,exports.computeWithdrawAvailableAt=computeWithdrawAvailableAt,exports.isWithdrawAvailable=isWithdrawAvailable,exports.getTimeUntilWithdraw=getTimeUntilWithdraw;const web3_js_1=require("@solana/web3.js"),constants_1=require("./constants");function deriveStakingConfigPDA(e,t,n=constants_1.PROGRAM_ID){const r=Buffer.alloc(2);return r.writeUInt16LE(t),web3_js_1.PublicKey.findProgramAddressSync([constants_1.STAKING_CONFIG_SEED,e.toBuffer(),r],n)}function deriveUserStakePDA(e,t,n=constants_1.PROGRAM_ID){return web3_js_1.PublicKey.findProgramAddressSync([constants_1.USER_STAKE_SEED,e.toBuffer(),t.toBuffer()],n)}function deriveDelegatePDA(e,t,n=constants_1.PROGRAM_ID){return web3_js_1.PublicKey.findProgramAddressSync([constants_1.USER_STAKE_SEED,e.toBuffer(),t.toBuffer()],n)}function deriveStakeVaultPDA(e,t=constants_1.PROGRAM_ID){return web3_js_1.PublicKey.findProgramAddressSync([constants_1.STAKE_VAULT_SEED,e.toBuffer()],t)}function deriveRewardVaultPDA(e,t=constants_1.PROGRAM_ID){return web3_js_1.PublicKey.findProgramAddressSync([constants_1.REWARD_VAULT_SEED,e.toBuffer()],t)}async function fetchStakingConfigAccount(e,t){return e.account.stakingConfig.fetch(t)}async function fetchUserStakeAccount(e,t){return e.account.userStake.fetch(t)}async function fetchDelegateAccount(e,t){return e.account.delegate.fetch(t)}function computeWithdrawAvailableAt(e,t){const n=e+t*constants_1.SECONDS_PER_DAY;return new Date(1e3*n)}function isWithdrawAvailable(e,t){if(0===e)return!1;return Math.floor(Date.now()/1e3)>=e+t*constants_1.SECONDS_PER_DAY}function getTimeUntilWithdraw(e,t){if(0===e)return 0;const n=Math.floor(Date.now()/1e3),r=e+t*constants_1.SECONDS_PER_DAY;return Math.max(0,r-n)}
package/dist/utils.js CHANGED
@@ -1,28 +1 @@
1
- "use strict";
2
- /*
3
- * Shared utilities for parsing IDL values and common types.
4
- * Used across program SDKs.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.parseIdlBytes = parseIdlBytes;
8
- exports.getIdlConstant = getIdlConstant;
9
- /*
10
- * Parse IDL bytes value string to Buffer.
11
- * e.g., "[99, 109, 105, 110, 116]" → Buffer.from([99, 109, 105, 110, 116])
12
- */
13
- function parseIdlBytes(value) {
14
- const bytes = JSON.parse(value);
15
- return Buffer.from(bytes);
16
- }
17
- /*
18
- * Get a constant from an IDL by name.
19
- * Throws if the constant is not found (helps catch mismatches after IDL sync).
20
- */
21
- function getIdlConstant(idl, name) {
22
- const constant = idl.constants.find((c) => c.name === name);
23
- if (!constant) {
24
- throw new Error(`IDL missing constant: ${name}`);
25
- }
26
- return constant.value;
27
- }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUF5Qkgsc0NBR0M7QUFNRCx3Q0FTQztBQXRCRDs7O0dBR0c7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBYTtJQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBYSxDQUFDO0lBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixHQUEwRCxFQUMxRCxJQUFZO0lBRVosTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDNUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogU2hhcmVkIHV0aWxpdGllcyBmb3IgcGFyc2luZyBJREwgdmFsdWVzIGFuZCBjb21tb24gdHlwZXMuXG4gKiBVc2VkIGFjcm9zcyBwcm9ncmFtIFNES3MuXG4gKi9cblxuLyogVHJhbnNhY3Rpb24gT3B0aW9ucyAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFR4T3B0aW9ucyB7XG4gIGluY2x1ZGVDdUJ1ZGdldD86IGJvb2xlYW47ICAvLyBJbmNsdWRlIGNvbXB1dGUgYnVkZ2V0IGluc3RydWN0aW9uIChkZWZhdWx0OiB0cnVlKVxuICBjb21wdXRlVW5pdHM/OiBudW1iZXI7ICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCBjb21wdXRlIHVuaXRzXG4gIC8qKlxuICAgKiBQcmlvcml0eSBmZWUgaW4gbWljcm9sYW1wb3J0cyBwZXIgY29tcHV0ZSB1bml0LlxuICAgKiBJZiBwcm92aWRlZCwgYWRkcyBhIHNldENvbXB1dGVVbml0UHJpY2UgaW5zdHJ1Y3Rpb24gdG8gdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBIaWdoZXIgdmFsdWVzIGluY3JlYXNlIGxpa2VsaWhvb2Qgb2YgaW5jbHVzaW9uIGR1cmluZyBuZXR3b3JrIGNvbmdlc3Rpb24uXG4gICAqL1xuICBwcmlvcml0eUZlZU1pY3JvTGFtcG9ydHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQcmUtY3JlYXRlIGNvbmRpdGlvbmFsIHRva2VuIEFUQXMgYmVmb3JlIGxhdW5jaCB0byBhdm9pZCBleGNlZWRpbmdcbiAgICogU29sYW5hJ3MgNjQgaW5zdHJ1Y3Rpb24gdHJhY2UgbGltaXQuIERlZmF1bHQ6IHRydWUgZm9yIDMrIG9wdGlvbnMuXG4gICAqIFNldCB0byBmYWxzZSBpZiB5b3UndmUgYWxyZWFkeSBjcmVhdGVkIEFUQXMgb3Igd2FudCB0byBtYW5hZ2UgdGhlbSBtYW51YWxseS5cbiAgICovXG4gIGVuc3VyZUFUQXM/OiBib29sZWFuO1xufVxuXG4vKlxuICogUGFyc2UgSURMIGJ5dGVzIHZhbHVlIHN0cmluZyB0byBCdWZmZXIuXG4gKiBlLmcuLCBcIls5OSwgMTA5LCAxMDUsIDExMCwgMTE2XVwiIOKGkiBCdWZmZXIuZnJvbShbOTksIDEwOSwgMTA1LCAxMTAsIDExNl0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlkbEJ5dGVzKHZhbHVlOiBzdHJpbmcpOiBCdWZmZXIge1xuICBjb25zdCBieXRlcyA9IEpTT04ucGFyc2UodmFsdWUpIGFzIG51bWJlcltdO1xuICByZXR1cm4gQnVmZmVyLmZyb20oYnl0ZXMpO1xufVxuXG4vKlxuICogR2V0IGEgY29uc3RhbnQgZnJvbSBhbiBJREwgYnkgbmFtZS5cbiAqIFRocm93cyBpZiB0aGUgY29uc3RhbnQgaXMgbm90IGZvdW5kIChoZWxwcyBjYXRjaCBtaXNtYXRjaGVzIGFmdGVyIElETCBzeW5jKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElkbENvbnN0YW50KFxuICBpZGw6IHsgY29uc3RhbnRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB9LFxuICBuYW1lOiBzdHJpbmdcbikge1xuICBjb25zdCBjb25zdGFudCA9IGlkbC5jb25zdGFudHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBuYW1lKTtcbiAgaWYgKCFjb25zdGFudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSURMIG1pc3NpbmcgY29uc3RhbnQ6ICR7bmFtZX1gKTtcbiAgfVxuICByZXR1cm4gY29uc3RhbnQudmFsdWU7XG59XG4iXX0=
1
+ "use strict";function parseIdlBytes(t){const e=JSON.parse(t);return Buffer.from(e)}function getIdlConstant(t,e){const n=t.constants.find(t=>t.name===e);if(!n)throw new Error(`IDL missing constant: ${e}`);return n.value}Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseIdlBytes=parseIdlBytes,exports.getIdlConstant=getIdlConstant;
@@ -1,185 +1 @@
1
- "use strict";
2
- /*
3
- * High-level client for the Vault program.
4
- * Provides ergonomic methods for vault operations with automatic PDA derivation,
5
- * native SOL wrapping/unwrapping, and compute budget management.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.VaultClient = void 0;
9
- const anchor_1 = require("@coral-xyz/anchor");
10
- const web3_js_1 = require("@solana/web3.js");
11
- const spl_token_1 = require("@solana/spl-token");
12
- const constants_1 = require("./constants");
13
- const types_1 = require("./types");
14
- const utils_1 = require("./utils");
15
- const instructions_1 = require("./instructions");
16
- const idls_1 = require("../generated/idls");
17
- const DEFAULT_COMPUTE_UNITS = 450000;
18
- class VaultClient {
19
- constructor(provider, programId, computeUnits) {
20
- this.programId = programId ?? constants_1.PROGRAM_ID;
21
- this.computeUnits = computeUnits ?? DEFAULT_COMPUTE_UNITS;
22
- this.program = new anchor_1.Program(idls_1.VaultIDL, provider);
23
- }
24
- /* PDA Helpers */
25
- deriveVaultPDA(owner, nonce) {
26
- return (0, utils_1.deriveVaultPDA)(owner, nonce, this.programId);
27
- }
28
- deriveConditionalMint(vaultPda, vaultType, index) {
29
- return (0, utils_1.deriveConditionalMint)(vaultPda, vaultType, index, this.programId);
30
- }
31
- /* State Fetching */
32
- async fetchVault(vaultPda) {
33
- return (0, utils_1.fetchVaultAccount)(this.program, vaultPda);
34
- }
35
- async fetchUserATAs(vaultPda, user, vaultType) {
36
- const vault = await this.fetchVault(vaultPda);
37
- const mint = vaultType === types_1.VaultType.Base ? vault.baseMint.address : vault.quoteMint.address;
38
- const condMints = (vaultType === types_1.VaultType.Base ? vault.condBaseMints : vault.condQuoteMints)
39
- .slice(0, vault.numOptions);
40
- return {
41
- userAta: (0, spl_token_1.getAssociatedTokenAddressSync)(mint, user),
42
- userCondATAs: condMints.map((m) => (0, spl_token_1.getAssociatedTokenAddressSync)(m, user)),
43
- };
44
- }
45
- async fetchVaultATA(vaultPda, vaultType) {
46
- const vault = await this.fetchVault(vaultPda);
47
- const mint = vaultType === types_1.VaultType.Base ? vault.baseMint.address : vault.quoteMint.address;
48
- return (0, spl_token_1.getAssociatedTokenAddressSync)(mint, vaultPda, true);
49
- }
50
- async fetchUserBalances(vaultPda, user, vaultType) {
51
- const { userAta, userCondATAs } = await this.fetchUserATAs(vaultPda, user, vaultType);
52
- const connection = this.program.provider.connection;
53
- const getBalanceSafe = async (ata) => {
54
- try {
55
- const acc = await (0, spl_token_1.getAccount)(connection, ata);
56
- return new anchor_1.BN(acc.amount.toString());
57
- }
58
- catch (e) {
59
- if (e instanceof spl_token_1.TokenAccountNotFoundError) {
60
- return new anchor_1.BN(0);
61
- }
62
- throw e;
63
- }
64
- };
65
- const [userBalance, ...condBalances] = await Promise.all([
66
- getBalanceSafe(userAta),
67
- ...userCondATAs.map(getBalanceSafe),
68
- ]);
69
- return { userBalance, condBalances };
70
- }
71
- async fetchVaultBalance(vaultPda, vaultType) {
72
- const vaultAta = await this.fetchVaultATA(vaultPda, vaultType);
73
- try {
74
- const acc = await (0, spl_token_1.getAccount)(this.program.provider.connection, vaultAta);
75
- return new anchor_1.BN(acc.amount.toString());
76
- }
77
- catch (e) {
78
- if (e instanceof spl_token_1.TokenAccountNotFoundError) {
79
- return new anchor_1.BN(0);
80
- }
81
- throw e;
82
- }
83
- }
84
- /* Instruction Builders */
85
- initialize(payer, baseMint, quoteMint, nonce, owner) {
86
- const vaultOwner = owner ?? payer;
87
- const [vaultPda] = this.deriveVaultPDA(vaultOwner, nonce);
88
- const [condBaseMint0] = this.deriveConditionalMint(vaultPda, types_1.VaultType.Base, 0);
89
- const [condBaseMint1] = this.deriveConditionalMint(vaultPda, types_1.VaultType.Base, 1);
90
- const [condQuoteMint0] = this.deriveConditionalMint(vaultPda, types_1.VaultType.Quote, 0);
91
- const [condQuoteMint1] = this.deriveConditionalMint(vaultPda, types_1.VaultType.Quote, 1);
92
- const builder = (0, instructions_1.initialize)(this.program, payer, vaultOwner, vaultPda, baseMint, quoteMint, condBaseMint0, condBaseMint1, condQuoteMint0, condQuoteMint1, nonce);
93
- return {
94
- builder,
95
- vaultPda,
96
- condBaseMint0,
97
- condBaseMint1,
98
- condQuoteMint0,
99
- condQuoteMint1,
100
- };
101
- }
102
- async addOption(payer, owner, vaultPda) {
103
- const vault = await this.fetchVault(vaultPda);
104
- const [condBaseMint] = this.deriveConditionalMint(vaultPda, types_1.VaultType.Base, vault.numOptions);
105
- const [condQuoteMint] = this.deriveConditionalMint(vaultPda, types_1.VaultType.Quote, vault.numOptions);
106
- const builder = (0, instructions_1.addOption)(this.program, payer, owner, vaultPda, condBaseMint, condQuoteMint);
107
- return { builder, condBaseMint, condQuoteMint };
108
- }
109
- activate(payer, owner, vaultPda) {
110
- return (0, instructions_1.activate)(this.program, payer, owner, vaultPda);
111
- }
112
- async deposit(signer, vaultPda, vaultType, amount, options) {
113
- const { autoWrapUnwrap = true, includeCuBudget = true, computeUnits } = options ?? {};
114
- const vault = await this.fetchVault(vaultPda);
115
- const mint = vaultType === types_1.VaultType.Base ? vault.baseMint.address : vault.quoteMint.address;
116
- const condMints = (vaultType === types_1.VaultType.Base ? vault.condBaseMints : vault.condQuoteMints)
117
- .slice(0, vault.numOptions);
118
- const builder = (0, instructions_1.deposit)(this.program, signer, vaultPda, mint, condMints, vaultType, amount);
119
- const preIxs = [];
120
- if (includeCuBudget) {
121
- preIxs.push(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
122
- units: computeUnits ?? this.computeUnits,
123
- }));
124
- }
125
- if (autoWrapUnwrap && mint.equals(spl_token_1.NATIVE_MINT)) {
126
- const amountBN = typeof amount === "number" ? new anchor_1.BN(amount) : amount;
127
- const wsolAta = (0, spl_token_1.getAssociatedTokenAddressSync)(spl_token_1.NATIVE_MINT, signer);
128
- preIxs.push((0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(signer, wsolAta, signer, spl_token_1.NATIVE_MINT), web3_js_1.SystemProgram.transfer({
129
- fromPubkey: signer,
130
- toPubkey: wsolAta,
131
- lamports: BigInt(amountBN.toString()),
132
- }), (0, spl_token_1.createSyncNativeInstruction)(wsolAta));
133
- }
134
- return preIxs.length > 0 ? builder.preInstructions(preIxs) : builder;
135
- }
136
- async withdraw(signer, vaultPda, vaultType, amount, options) {
137
- const { autoWrapUnwrap = true, includeCuBudget = true, computeUnits } = options ?? {};
138
- const vault = await this.fetchVault(vaultPda);
139
- const mint = vaultType === types_1.VaultType.Base ? vault.baseMint.address : vault.quoteMint.address;
140
- const condMints = (vaultType === types_1.VaultType.Base ? vault.condBaseMints : vault.condQuoteMints)
141
- .slice(0, vault.numOptions);
142
- let builder = (0, instructions_1.withdraw)(this.program, signer, vaultPda, mint, condMints, vaultType, amount);
143
- if (includeCuBudget) {
144
- builder = builder.preInstructions([
145
- web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
146
- units: computeUnits ?? this.computeUnits,
147
- }),
148
- ]);
149
- }
150
- if (autoWrapUnwrap && mint.equals(spl_token_1.NATIVE_MINT)) {
151
- const wsolAta = (0, spl_token_1.getAssociatedTokenAddressSync)(spl_token_1.NATIVE_MINT, signer);
152
- builder = builder.postInstructions([
153
- (0, spl_token_1.createCloseAccountInstruction)(wsolAta, signer, signer),
154
- ]);
155
- }
156
- return builder;
157
- }
158
- finalize(payer, owner, vaultPda, winningIdx) {
159
- return (0, instructions_1.finalize)(this.program, payer, owner, vaultPda, winningIdx);
160
- }
161
- async redeemWinnings(signer, vaultPda, vaultType, options) {
162
- const { autoWrapUnwrap = true, includeCuBudget = true, computeUnits } = options ?? {};
163
- const vault = await this.fetchVault(vaultPda);
164
- const mint = vaultType === types_1.VaultType.Base ? vault.baseMint.address : vault.quoteMint.address;
165
- const condMints = (vaultType === types_1.VaultType.Base ? vault.condBaseMints : vault.condQuoteMints)
166
- .slice(0, vault.numOptions);
167
- let builder = (0, instructions_1.redeemWinnings)(this.program, signer, vaultPda, mint, condMints, vaultType);
168
- if (includeCuBudget) {
169
- builder = builder.preInstructions([
170
- web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
171
- units: computeUnits ?? this.computeUnits,
172
- }),
173
- ]);
174
- }
175
- if (autoWrapUnwrap && mint.equals(spl_token_1.NATIVE_MINT)) {
176
- const wsolAta = (0, spl_token_1.getAssociatedTokenAddressSync)(spl_token_1.NATIVE_MINT, signer);
177
- builder = builder.postInstructions([
178
- (0, spl_token_1.createCloseAccountInstruction)(wsolAta, signer, signer),
179
- ]);
180
- }
181
- return builder;
182
- }
183
- }
184
- exports.VaultClient = VaultClient;
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhdWx0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBRUgsOENBQWdFO0FBQ2hFLDZDQUFpRjtBQUNqRixpREFRMkI7QUFDM0IsMkNBQXlDO0FBQ3pDLG1DQUE2RTtBQUM3RSxtQ0FJaUI7QUFDakIsaURBUXdCO0FBRXhCLDRDQUE2QztBQUU3QyxNQUFNLHFCQUFxQixHQUFHLE1BQU8sQ0FBQztBQUV0QyxNQUFhLFdBQVc7SUFLdEIsWUFDRSxRQUF3QixFQUN4QixTQUFxQixFQUNyQixZQUFxQjtRQUVyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxzQkFBVSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxJQUFJLHFCQUFxQixDQUFDO1FBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxnQkFBTyxDQUFDLGVBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGlCQUFpQjtJQUVqQixjQUFjLENBQ1osS0FBZ0IsRUFDaEIsS0FBYTtRQUViLE9BQU8sSUFBQSxzQkFBYyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxxQkFBcUIsQ0FDbkIsUUFBbUIsRUFDbkIsU0FBb0IsRUFDcEIsS0FBYTtRQUViLE9BQU8sSUFBQSw2QkFBcUIsRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELG9CQUFvQjtJQUVwQixLQUFLLENBQUMsVUFBVSxDQUFDLFFBQW1CO1FBQ2xDLE9BQU8sSUFBQSx5QkFBaUIsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxD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Qy9DLE1BQU0sT0FBTyxHQUFHLElBQUEseUNBQTZCLEVBQUMsdUJBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNuRSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2dCQUNqQyxJQUFBLHlDQUE2QixFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO2FBQ3ZELENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUF0U0Qsa0NBc1NDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEhpZ2gtbGV2ZWwgY2xpZW50IGZvciB0aGUgVmF1bHQgcHJvZ3JhbS5cbiAqIFByb3ZpZGVzIGVyZ29ub21pYyBtZXRob2RzIGZvciB2YXVsdCBvcGVyYXRpb25zIHdpdGggYXV0b21hdGljIFBEQSBkZXJpdmF0aW9uLFxuICogbmF0aXZlIFNPTCB3cmFwcGluZy91bndyYXBwaW5nLCBhbmQgY29tcHV0ZSBidWRnZXQgbWFuYWdlbWVudC5cbiAqL1xuXG5pbXBvcnQgeyBQcm9ncmFtLCBBbmNob3JQcm92aWRlciwgQk4gfSBmcm9tIFwiQGNvcmFsLXh5ei9hbmNob3JcIjtcbmltcG9ydCB7IFB1YmxpY0tleSwgQ29tcHV0ZUJ1ZGdldFByb2dyYW0sIFN5c3RlbVByb2dyYW0gfSBmcm9tIFwiQHNvbGFuYS93ZWIzLmpzXCI7XG5pbXBvcnQge1xuICBnZXRBY2NvdW50LFxuICBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyxcbiAgVG9rZW5BY2NvdW50Tm90Rm91bmRFcnJvcixcbiAgTkFUSVZFX01JTlQsXG4gIGNyZWF0ZVN5bmNOYXRpdmVJbnN0cnVjdGlvbixcbiAgY3JlYXRlQ2xvc2VBY2NvdW50SW5zdHJ1Y3Rpb24sXG4gIGNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnRJZGVtcG90ZW50SW5zdHJ1Y3Rpb24sXG59IGZyb20gXCJAc29sYW5hL3NwbC10b2tlblwiO1xuaW1wb3J0IHsgUFJPR1JBTV9JRCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgVmF1bHQsIFZhdWx0VHlwZSwgVmF1bHRBY2NvdW50LCBWYXVsdEFjdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZGVyaXZlVmF1bHRQREEsXG4gIGRlcml2ZUNvbmRpdGlvbmFsTWludCxcbiAgZmV0Y2hWYXVsdEFjY291bnQsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBpbml0aWFsaXplLFxuICBhZGRPcHRpb24sXG4gIGFjdGl2YXRlLFxuICBkZXBvc2l0LFxuICB3aXRoZHJhdyxcbiAgZmluYWxpemUsXG4gIHJlZGVlbVdpbm5pbmdzLFxufSBmcm9tIFwiLi9pbnN0cnVjdGlvbnNcIjtcblxuaW1wb3J0IHsgVmF1bHRJREwgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkL2lkbHNcIjtcblxuY29uc3QgREVGQVVMVF9DT01QVVRFX1VOSVRTID0gNDUwXzAwMDtcblxuZXhwb3J0IGNsYXNzIFZhdWx0Q2xpZW50IHtcbiAgcHVibGljIHByb2dyYW06IFByb2dyYW08VmF1bHQ+O1xuICBwdWJsaWMgcHJvZ3JhbUlkOiBQdWJsaWNLZXk7XG4gIHB1YmxpYyBjb21wdXRlVW5pdHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm92aWRlcjogQW5jaG9yUHJvdmlkZXIsXG4gICAgcHJvZ3JhbUlkPzogUHVibGljS2V5LFxuICAgIGNvbXB1dGVVbml0cz86IG51bWJlclxuICApIHtcbiAgICB0aGlzLnByb2dyYW1JZCA9IHByb2dyYW1JZCA/PyBQUk9HUkFNX0lEO1xuICAgIHRoaXMuY29tcHV0ZVVuaXRzID0gY29tcHV0ZVVuaXRzID8/IERFRkFVTFRfQ09NUFVURV9VTklUUztcbiAgICB0aGlzLnByb2dyYW0gPSBuZXcgUHJvZ3JhbShWYXVsdElETCBhcyBWYXVsdCwgcHJvdmlkZXIpO1xuICB9XG5cbiAgLyogUERBIEhlbHBlcnMgKi9cblxuICBkZXJpdmVWYXVsdFBEQShcbiAgICBvd25lcjogUHVibGljS2V5LFxuICAgIG5vbmNlOiBudW1iZXJcbiAgKTogW1B1YmxpY0tleSwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIGRlcml2ZVZhdWx0UERBKG93bmVyLCBub25jZSwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG5cbiAgZGVyaXZlQ29uZGl0aW9uYWxNaW50KFxuICAgIHZhdWx0UGRhOiBQdWJsaWNLZXksXG4gICAgdmF1bHRUeXBlOiBWYXVsdFR5cGUsXG4gICAgaW5kZXg6IG51bWJlclxuICApOiBbUHVibGljS2V5LCBudW1iZXJdIHtcbiAgICByZXR1cm4gZGVyaXZlQ29uZGl0aW9uYWxNaW50KHZhdWx0UGRhLCB2YXVsdFR5cGUsIGluZGV4LCB0aGlzLnByb2dyYW1JZCk7XG4gIH1cblxuICAvKiBTdGF0ZSBGZXRjaGluZyAqL1xuXG4gIGFzeW5jIGZldGNoVmF1bHQodmF1bHRQZGE6IFB1YmxpY0tleSk6IFByb21pc2U8VmF1bHRBY2NvdW50PiB7XG4gICAgcmV0dXJuIGZldGNoVmF1bHRBY2NvdW50KHRoaXMucHJvZ3JhbSwgdmF1bHRQZGEpO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hVc2VyQVRBcyh2YXVsdFBkYTogUHVibGljS2V5LCB1c2VyOiBQdWJsaWNLZXksIHZhdWx0VHlwZTogVmF1bHRUeXBlKSB7XG4gICAgY29uc3QgdmF1bHQgPSBhd2FpdCB0aGlzLmZldGNoVmF1bHQodmF1bHRQZGEpO1xuICAgIGNvbnN0IG1pbnQgPSB2YXVsdFR5cGUgPT09IFZhdWx0VHlwZS5CYXNlID8gdmF1bHQuYmFzZU1pbnQuYWRkcmVzcyA6IHZhdWx0LnF1b3RlTWludC5hZGRyZXNzO1xuICAgIGNvbnN0IGNvbmRNaW50cyA9ICh2YXVsdFR5cGUgPT09IFZhdWx0VHlwZS5CYXNlID8gdmF1bHQuY29uZEJhc2VNaW50cyA6IHZhdWx0LmNvbmRRdW90ZU1pbnRzKVxuICAgICAgLnNsaWNlKDAsIHZhdWx0Lm51bU9wdGlvbnMpO1xuICAgIHJldHVybiB7XG4gICAgICB1c2VyQXRhOiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtaW50LCB1c2VyKSxcbiAgICAgIHVzZXJDb25kQVRBczogY29uZE1pbnRzLm1hcCgobSkgPT4gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMobSwgdXNlcikpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaFZhdWx0QVRBKHZhdWx0UGRhOiBQdWJsaWNLZXksIHZhdWx0VHlwZTogVmF1bHRUeXBlKSB7XG4gICAgY29uc3QgdmF1bHQgPSBhd2FpdCB0aGlzLmZldGNoVmF1bHQodmF1bHRQZGEpO1xuICAgIGNvbnN0IG1pbnQgPSB2YXVsdFR5cGUgPT09IFZhdWx0VHlwZS5CYXNlID8gdmF1bHQuYmFzZU1pbnQuYWRkcmVzcyA6IHZhdWx0LnF1b3RlTWludC5hZGRyZXNzO1xuICAgIHJldHVybiBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhtaW50LCB2YXVsdFBkYSwgdHJ1ZSk7XG4gIH1cblxuICBhc3luYyBmZXRjaFVzZXJCYWxhbmNlcyh2YXVsdFBkYTogUHVibGljS2V5LCB1c2VyOiBQdWJsaWNLZXksIHZhdWx0VHlwZTogVmF1bHRUeXBlKSB7XG4gICAgY29uc3QgeyB1c2VyQXRhLCB1c2VyQ29uZEFUQXMgfSA9IGF3YWl0IHRoaXMuZmV0Y2hVc2VyQVRBcyh2YXVsdFBkYSwgdXNlciwgdmF1bHRUeXBlKTtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5wcm9ncmFtLnByb3ZpZGVyLmNvbm5lY3Rpb247XG5cbiAgICBjb25zdCBnZXRCYWxhbmNlU2FmZSA9IGFzeW5jIChhdGE6IFB1YmxpY0tleSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYWNjID0gYXdhaXQgZ2V0QWNjb3VudChjb25uZWN0aW9uLCBhdGEpO1xuICAgICAgICByZXR1cm4gbmV3IEJOKGFjYy5hbW91bnQudG9TdHJpbmcoKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgVG9rZW5BY2NvdW50Tm90Rm91bmRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBuZXcgQk4oMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgW3VzZXJCYWxhbmNlLCAuLi5jb25kQmFsYW5jZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgZ2V0QmFsYW5jZVNhZmUodXNlckF0YSksXG4gICAgICAuLi51c2VyQ29uZEFUQXMubWFwKGdldEJhbGFuY2VTYWZlKSxcbiAgICBdKTtcblxuICAgIHJldHVybiB7IHVzZXJCYWxhbmNlLCBjb25kQmFsYW5jZXMgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoVmF1bHRCYWxhbmNlKHZhdWx0UGRhOiBQdWJsaWNLZXksIHZhdWx0VHlwZTogVmF1bHRUeXBlKTogUHJvbWlzZTxCTj4ge1xuICAgIGNvbnN0IHZhdWx0QXRhID0gYXdhaXQgdGhpcy5mZXRjaFZhdWx0QVRBKHZhdWx0UGRhLCB2YXVsdFR5cGUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhY2MgPSBhd2FpdCBnZXRBY2NvdW50KHRoaXMucHJvZ3JhbS5wcm92aWRlci5jb25uZWN0aW9uLCB2YXVsdEF0YSk7XG4gICAgICByZXR1cm4gbmV3IEJOKGFjYy5hbW91bnQudG9TdHJpbmcoKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUb2tlbkFjY291bnROb3RGb3VuZEVycm9yKSB7XG4gICAgICAgIHJldHVybiBuZXcgQk4oMCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qIEluc3RydWN0aW9uIEJ1aWxkZXJzICovXG5cbiAgaW5pdGlhbGl6ZShcbiAgICBwYXllcjogUHVibGljS2V5LFxuICAgIGJhc2VNaW50OiBQdWJsaWNLZXksXG4gICAgcXVvdGVNaW50OiBQdWJsaWNLZXksXG4gICAgbm9uY2U6IG51bWJlcixcbiAgICBvd25lcj86IFB1YmxpY0tleVxuICApIHtcbiAgICBjb25zdCB2YXVsdE93bmVyID0gb3duZXIgPz8gcGF5ZXI7XG4gICAgY29uc3QgW3ZhdWx0UGRhXSA9IHRoaXMuZGVyaXZlVmF1bHRQREEodmF1bHRPd25lciwgbm9uY2UpO1xuICAgIGNvbnN0IFtjb25kQmFzZU1pbnQwXSA9IHRoaXMuZGVyaXZlQ29uZGl0aW9uYWxNaW50KHZhdWx0UGRhLCBWYXVsdFR5cGUuQmFzZSwgMCk7XG4gICAgY29uc3QgW2NvbmRCYXNlTWludDFdID0gdGhpcy5kZXJpdmVDb25kaXRpb25hbE1pbnQodmF1bHRQZGEsIFZhdWx0VHlwZS5CYXNlLCAxKTtcbiAgICBjb25zdCBbY29uZFF1b3RlTWludDBdID0gdGhpcy5kZXJpdmVDb25kaXRpb25hbE1pbnQodmF1bHRQZGEsIFZhdWx0VHlwZS5RdW90ZSwgMCk7XG4gICAgY29uc3QgW2NvbmRRdW90ZU1pbnQxXSA9IHRoaXMuZGVyaXZlQ29uZGl0aW9uYWxNaW50KHZhdWx0UGRhLCBWYXVsdFR5cGUuUXVvdGUsIDEpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGluaXRpYWxpemUoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBwYXllcixcbiAgICAgIHZhdWx0T3duZXIsXG4gICAgICB2YXVsdFBkYSxcbiAgICAgIGJhc2VNaW50LFxuICAgICAgcXVvdGVNaW50LFxuICAgICAgY29uZEJhc2VNaW50MCxcbiAgICAgIGNvbmRCYXNlTWludDEsXG4gICAgICBjb25kUXVvdGVNaW50MCxcbiAgICAgIGNvbmRRdW90ZU1pbnQxLFxuICAgICAgbm9uY2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1aWxkZXIsXG4gICAgICB2YXVsdFBkYSxcbiAgICAgIGNvbmRCYXNlTWludDAsXG4gICAgICBjb25kQmFzZU1pbnQxLFxuICAgICAgY29uZFF1b3RlTWludDAsXG4gICAgICBjb25kUXVvdGVNaW50MSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgYWRkT3B0aW9uKHBheWVyOiBQdWJsaWNLZXksIG93bmVyOiBQdWJsaWNLZXksIHZhdWx0UGRhOiBQdWJsaWNLZXkpIHtcbiAgICBjb25zdCB2YXVsdCA9IGF3YWl0IHRoaXMuZmV0Y2hWYXVsdCh2YXVsdFBkYSk7XG4gICAgY29uc3QgW2NvbmRCYXNlTWludF0gPSB0aGlzLmRlcml2ZUNvbmRpdGlvbmFsTWludCh2YXVsdFBkYSwgVmF1bHRUeXBlLkJhc2UsIHZhdWx0Lm51bU9wdGlvbnMpO1xuICAgIGNvbnN0IFtjb25kUXVvdGVNaW50XSA9IHRoaXMuZGVyaXZlQ29uZGl0aW9uYWxNaW50KHZhdWx0UGRhLCBWYXVsdFR5cGUuUXVvdGUsIHZhdWx0Lm51bU9wdGlvbnMpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGFkZE9wdGlvbihcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIHBheWVyLFxuICAgICAgb3duZXIsXG4gICAgICB2YXVsdFBkYSxcbiAgICAgIGNvbmRCYXNlTWludCxcbiAgICAgIGNvbmRRdW90ZU1pbnRcbiAgICApO1xuXG4gICAgcmV0dXJuIHsgYnVpbGRlciwgY29uZEJhc2VNaW50LCBjb25kUXVvdGVNaW50IH07XG4gIH1cblxuICBhY3RpdmF0ZShwYXllcjogUHVibGljS2V5LCBvd25lcjogUHVibGljS2V5LCB2YXVsdFBkYTogUHVibGljS2V5KSB7XG4gICAgcmV0dXJuIGFjdGl2YXRlKHRoaXMucHJvZ3JhbSwgcGF5ZXIsIG93bmVyLCB2YXVsdFBkYSk7XG4gIH1cblxuICBhc3luYyBkZXBvc2l0KFxuICAgIHNpZ25lcjogUHVibGljS2V5LFxuICAgIHZhdWx0UGRhOiBQdWJsaWNLZXksXG4gICAgdmF1bHRUeXBlOiBWYXVsdFR5cGUsXG4gICAgYW1vdW50OiBCTiB8IG51bWJlcixcbiAgICBvcHRpb25zPzogVmF1bHRBY3Rpb25PcHRpb25zXG4gICkge1xuICAgIGNvbnN0IHsgYXV0b1dyYXBVbndyYXAgPSB0cnVlLCBpbmNsdWRlQ3VCdWRnZXQgPSB0cnVlLCBjb21wdXRlVW5pdHMgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCB2YXVsdCA9IGF3YWl0IHRoaXMuZmV0Y2hWYXVsdCh2YXVsdFBkYSk7XG4gICAgY29uc3QgbWludCA9IHZhdWx0VHlwZSA9PT0gVmF1bHRUeXBlLkJhc2UgPyB2YXVsdC5iYXNlTWludC5hZGRyZXNzIDogdmF1bHQucXVvdGVNaW50LmFkZHJlc3M7XG4gICAgY29uc3QgY29uZE1pbnRzID0gKHZhdWx0VHlwZSA9PT0gVmF1bHRUeXBlLkJhc2UgPyB2YXVsdC5jb25kQmFzZU1pbnRzIDogdmF1bHQuY29uZFF1b3RlTWludHMpXG4gICAgICAuc2xpY2UoMCwgdmF1bHQubnVtT3B0aW9ucyk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gZGVwb3NpdChcbiAgICAgIHRoaXMucHJvZ3JhbSxcbiAgICAgIHNpZ25lcixcbiAgICAgIHZhdWx0UGRhLFxuICAgICAgbWludCxcbiAgICAgIGNvbmRNaW50cyxcbiAgICAgIHZhdWx0VHlwZSxcbiAgICAgIGFtb3VudFxuICAgICk7XG5cbiAgICBjb25zdCBwcmVJeHM6IFJldHVyblR5cGU8dHlwZW9mIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQ+W10gPSBbXTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIHByZUl4cy5wdXNoKFxuICAgICAgICBDb21wdXRlQnVkZ2V0UHJvZ3JhbS5zZXRDb21wdXRlVW5pdExpbWl0KHtcbiAgICAgICAgICB1bml0czogY29tcHV0ZVVuaXRzID8/IHRoaXMuY29tcHV0ZVVuaXRzLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYXV0b1dyYXBVbndyYXAgJiYgbWludC5lcXVhbHMoTkFUSVZFX01JTlQpKSB7XG4gICAgICBjb25zdCBhbW91bnRCTiA9IHR5cGVvZiBhbW91bnQgPT09IFwibnVtYmVyXCIgPyBuZXcgQk4oYW1vdW50KSA6IGFtb3VudDtcbiAgICAgIGNvbnN0IHdzb2xBdGEgPSBnZXRBc3NvY2lhdGVkVG9rZW5BZGRyZXNzU3luYyhOQVRJVkVfTUlOVCwgc2lnbmVyKTtcbiAgICAgIHByZUl4cy5wdXNoKFxuICAgICAgICBjcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50SWRlbXBvdGVudEluc3RydWN0aW9uKFxuICAgICAgICAgIHNpZ25lcixcbiAgICAgICAgICB3c29sQXRhLFxuICAgICAgICAgIHNpZ25lcixcbiAgICAgICAgICBOQVRJVkVfTUlOVFxuICAgICAgICApLFxuICAgICAgICBTeXN0ZW1Qcm9ncmFtLnRyYW5zZmVyKHtcbiAgICAgICAgICBmcm9tUHVia2V5OiBzaWduZXIsXG4gICAgICAgICAgdG9QdWJrZXk6IHdzb2xBdGEsXG4gICAgICAgICAgbGFtcG9ydHM6IEJpZ0ludChhbW91bnRCTi50b1N0cmluZygpKSxcbiAgICAgICAgfSksXG4gICAgICAgIGNyZWF0ZVN5bmNOYXRpdmVJbnN0cnVjdGlvbih3c29sQXRhKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlSXhzLmxlbmd0aCA+IDAgPyBidWlsZGVyLnByZUluc3RydWN0aW9ucyhwcmVJeHMpIDogYnVpbGRlcjtcbiAgfVxuXG4gIGFzeW5jIHdpdGhkcmF3KFxuICAgIHNpZ25lcjogUHVibGljS2V5LFxuICAgIHZhdWx0UGRhOiBQdWJsaWNLZXksXG4gICAgdmF1bHRUeXBlOiBWYXVsdFR5cGUsXG4gICAgYW1vdW50OiBCTiB8IG51bWJlcixcbiAgICBvcHRpb25zPzogVmF1bHRBY3Rpb25PcHRpb25zXG4gICkge1xuICAgIGNvbnN0IHsgYXV0b1dyYXBVbndyYXAgPSB0cnVlLCBpbmNsdWRlQ3VCdWRnZXQgPSB0cnVlLCBjb21wdXRlVW5pdHMgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCB2YXVsdCA9IGF3YWl0IHRoaXMuZmV0Y2hWYXVsdCh2YXVsdFBkYSk7XG4gICAgY29uc3QgbWludCA9IHZhdWx0VHlwZSA9PT0gVmF1bHRUeXBlLkJhc2UgPyB2YXVsdC5iYXNlTWludC5hZGRyZXNzIDogdmF1bHQucXVvdGVNaW50LmFkZHJlc3M7XG4gICAgY29uc3QgY29uZE1pbnRzID0gKHZhdWx0VHlwZSA9PT0gVmF1bHRUeXBlLkJhc2UgPyB2YXVsdC5jb25kQmFzZU1pbnRzIDogdmF1bHQuY29uZFF1b3RlTWludHMpXG4gICAgICAuc2xpY2UoMCwgdmF1bHQubnVtT3B0aW9ucyk7XG5cbiAgICBsZXQgYnVpbGRlciA9IHdpdGhkcmF3KFxuICAgICAgdGhpcy5wcm9ncmFtLFxuICAgICAgc2lnbmVyLFxuICAgICAgdmF1bHRQZGEsXG4gICAgICBtaW50LFxuICAgICAgY29uZE1pbnRzLFxuICAgICAgdmF1bHRUeXBlLFxuICAgICAgYW1vdW50XG4gICAgKTtcblxuICAgIGlmIChpbmNsdWRlQ3VCdWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLnByZUluc3RydWN0aW9ucyhbXG4gICAgICAgIENvbXB1dGVCdWRnZXRQcm9ncmFtLnNldENvbXB1dGVVbml0TGltaXQoe1xuICAgICAgICAgIHVuaXRzOiBjb21wdXRlVW5pdHMgPz8gdGhpcy5jb21wdXRlVW5pdHMsXG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgaWYgKGF1dG9XcmFwVW53cmFwICYmIG1pbnQuZXF1YWxzKE5BVElWRV9NSU5UKSkge1xuICAgICAgY29uc3Qgd3NvbEF0YSA9IGdldEFzc29jaWF0ZWRUb2tlbkFkZHJlc3NTeW5jKE5BVElWRV9NSU5ULCBzaWduZXIpO1xuICAgICAgYnVpbGRlciA9IGJ1aWxkZXIucG9zdEluc3RydWN0aW9ucyhbXG4gICAgICAgIGNyZWF0ZUNsb3NlQWNjb3VudEluc3RydWN0aW9uKHdzb2xBdGEsIHNpZ25lciwgc2lnbmVyKSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgZmluYWxpemUocGF5ZXI6IFB1YmxpY0tleSwgb3duZXI6IFB1YmxpY0tleSwgdmF1bHRQZGE6IFB1YmxpY0tleSwgd2lubmluZ0lkeDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGZpbmFsaXplKHRoaXMucHJvZ3JhbSwgcGF5ZXIsIG93bmVyLCB2YXVsdFBkYSwgd2lubmluZ0lkeCk7XG4gIH1cblxuICBhc3luYyByZWRlZW1XaW5uaW5ncyhcbiAgICBzaWduZXI6IFB1YmxpY0tleSxcbiAgICB2YXVsdFBkYTogUHVibGljS2V5LFxuICAgIHZhdWx0VHlwZTogVmF1bHRUeXBlLFxuICAgIG9wdGlvbnM/OiBWYXVsdEFjdGlvbk9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgeyBhdXRvV3JhcFVud3JhcCA9IHRydWUsIGluY2x1ZGVDdUJ1ZGdldCA9IHRydWUsIGNvbXB1dGVVbml0cyB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIGNvbnN0IHZhdWx0ID0gYXdhaXQgdGhpcy5mZXRjaFZhdWx0KHZhdWx0UGRhKTtcbiAgICBjb25zdCBtaW50ID0gdmF1bHRUeXBlID09PSBWYXVsdFR5cGUuQmFzZSA/IHZhdWx0LmJhc2VNaW50LmFkZHJlc3MgOiB2YXVsdC5xdW90ZU1pbnQuYWRkcmVzcztcbiAgICBjb25zdCBjb25kTWludHMgPSAodmF1bHRUeXBlID09PSBWYXVsdFR5cGUuQmFzZSA/IHZhdWx0LmNvbmRCYXNlTWludHMgOiB2YXVsdC5jb25kUXVvdGVNaW50cylcbiAgICAgIC5zbGljZSgwLCB2YXVsdC5udW1PcHRpb25zKTtcblxuICAgIGxldCBidWlsZGVyID0gcmVkZWVtV2lubmluZ3MoXG4gICAgICB0aGlzLnByb2dyYW0sXG4gICAgICBzaWduZXIsXG4gICAgICB2YXVsdFBkYSxcbiAgICAgIG1pbnQsXG4gICAgICBjb25kTWludHMsXG4gICAgICB2YXVsdFR5cGVcbiAgICApO1xuXG4gICAgaWYgKGluY2x1ZGVDdUJ1ZGdldCkge1xuICAgICAgYnVpbGRlciA9IGJ1aWxkZXIucHJlSW5zdHJ1Y3Rpb25zKFtcbiAgICAgICAgQ29tcHV0ZUJ1ZGdldFByb2dyYW0uc2V0Q29tcHV0ZVVuaXRMaW1pdCh7XG4gICAgICAgICAgdW5pdHM6IGNvbXB1dGVVbml0cyA/PyB0aGlzLmNvbXB1dGVVbml0cyxcbiAgICAgICAgfSksXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBpZiAoYXV0b1dyYXBVbndyYXAgJiYgbWludC5lcXVhbHMoTkFUSVZFX01JTlQpKSB7XG4gICAgICBjb25zdCB3c29sQXRhID0gZ2V0QXNzb2NpYXRlZFRva2VuQWRkcmVzc1N5bmMoTkFUSVZFX01JTlQsIHNpZ25lcik7XG4gICAgICBidWlsZGVyID0gYnVpbGRlci5wb3N0SW5zdHJ1Y3Rpb25zKFtcbiAgICAgICAgY3JlYXRlQ2xvc2VBY2NvdW50SW5zdHJ1Y3Rpb24od3NvbEF0YSwgc2lnbmVyLCBzaWduZXIpLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cbn1cbiJdfQ==
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VaultClient=void 0;const anchor_1=require("@coral-xyz/anchor"),web3_js_1=require("@solana/web3.js"),spl_token_1=require("@solana/spl-token"),constants_1=require("./constants"),types_1=require("./types"),utils_1=require("./utils"),instructions_1=require("./instructions"),idls_1=require("../generated/idls"),DEFAULT_COMPUTE_UNITS=45e4;class VaultClient{constructor(t,e,s){this.programId=e??constants_1.PROGRAM_ID,this.computeUnits=s??45e4,this.program=new anchor_1.Program(idls_1.VaultIDL,t)}deriveVaultPDA(t,e){return(0,utils_1.deriveVaultPDA)(t,e,this.programId)}deriveConditionalMint(t,e,s){return(0,utils_1.deriveConditionalMint)(t,e,s,this.programId)}async fetchVault(t){return(0,utils_1.fetchVaultAccount)(this.program,t)}async fetchUserATAs(t,e,s){const n=await this.fetchVault(t),i=s===types_1.VaultType.Base?n.baseMint.address:n.quoteMint.address,o=(s===types_1.VaultType.Base?n.condBaseMints:n.condQuoteMints).slice(0,n.numOptions);return{userAta:(0,spl_token_1.getAssociatedTokenAddressSync)(i,e),userCondATAs:o.map(t=>(0,spl_token_1.getAssociatedTokenAddressSync)(t,e))}}async fetchVaultATA(t,e){const s=await this.fetchVault(t),n=e===types_1.VaultType.Base?s.baseMint.address:s.quoteMint.address;return(0,spl_token_1.getAssociatedTokenAddressSync)(n,t,!0)}async fetchUserBalances(t,e,s){const{userAta:n,userCondATAs:i}=await this.fetchUserATAs(t,e,s),o=this.program.provider.connection,a=async t=>{try{const e=await(0,spl_token_1.getAccount)(o,t);return new anchor_1.BN(e.amount.toString())}catch(t){if(t instanceof spl_token_1.TokenAccountNotFoundError)return new anchor_1.BN(0);throw t}},[r,...u]=await Promise.all([a(n),...i.map(a)]);return{userBalance:r,condBalances:u}}async fetchVaultBalance(t,e){const s=await this.fetchVaultATA(t,e);try{const t=await(0,spl_token_1.getAccount)(this.program.provider.connection,s);return new anchor_1.BN(t.amount.toString())}catch(t){if(t instanceof spl_token_1.TokenAccountNotFoundError)return new anchor_1.BN(0);throw t}}initialize(t,e,s,n,i){const o=i??t,[a]=this.deriveVaultPDA(o,n),[r]=this.deriveConditionalMint(a,types_1.VaultType.Base,0),[u]=this.deriveConditionalMint(a,types_1.VaultType.Base,1),[c]=this.deriveConditionalMint(a,types_1.VaultType.Quote,0),[p]=this.deriveConditionalMint(a,types_1.VaultType.Quote,1);return{builder:(0,instructions_1.initialize)(this.program,t,o,a,e,s,r,u,c,p,n),vaultPda:a,condBaseMint0:r,condBaseMint1:u,condQuoteMint0:c,condQuoteMint1:p}}async addOption(t,e,s){const n=await this.fetchVault(s),[i]=this.deriveConditionalMint(s,types_1.VaultType.Base,n.numOptions),[o]=this.deriveConditionalMint(s,types_1.VaultType.Quote,n.numOptions);return{builder:(0,instructions_1.addOption)(this.program,t,e,s,i,o),condBaseMint:i,condQuoteMint:o}}activate(t,e,s){return(0,instructions_1.activate)(this.program,t,e,s)}async deposit(t,e,s,n,i){const{autoWrapUnwrap:o=!0,includeCuBudget:a=!0,computeUnits:r}=i??{},u=await this.fetchVault(e),c=s===types_1.VaultType.Base?u.baseMint.address:u.quoteMint.address,p=(s===types_1.VaultType.Base?u.condBaseMints:u.condQuoteMints).slice(0,u.numOptions),d=(0,instructions_1.deposit)(this.program,t,e,c,p,s,n),l=[];if(a&&l.push(web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({units:r??this.computeUnits})),o&&c.equals(spl_token_1.NATIVE_MINT)){const e="number"==typeof n?new anchor_1.BN(n):n,s=(0,spl_token_1.getAssociatedTokenAddressSync)(spl_token_1.NATIVE_MINT,t);l.push((0,spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(t,s,t,spl_token_1.NATIVE_MINT),web3_js_1.SystemProgram.transfer({fromPubkey:t,toPubkey:s,lamports:BigInt(e.toString())}),(0,spl_token_1.createSyncNativeInstruction)(s))}return l.length>0?d.preInstructions(l):d}async withdraw(t,e,s,n,i){const{autoWrapUnwrap:o=!0,includeCuBudget:a=!0,computeUnits:r}=i??{},u=await this.fetchVault(e),c=s===types_1.VaultType.Base?u.baseMint.address:u.quoteMint.address,p=(s===types_1.VaultType.Base?u.condBaseMints:u.condQuoteMints).slice(0,u.numOptions);let d=(0,instructions_1.withdraw)(this.program,t,e,c,p,s,n);if(a&&(d=d.preInstructions([web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({units:r??this.computeUnits})])),o&&c.equals(spl_token_1.NATIVE_MINT)){const e=(0,spl_token_1.getAssociatedTokenAddressSync)(spl_token_1.NATIVE_MINT,t);d=d.postInstructions([(0,spl_token_1.createCloseAccountInstruction)(e,t,t)])}return d}finalize(t,e,s,n){return(0,instructions_1.finalize)(this.program,t,e,s,n)}async redeemWinnings(t,e,s,n){const{autoWrapUnwrap:i=!0,includeCuBudget:o=!0,computeUnits:a}=n??{},r=await this.fetchVault(e),u=s===types_1.VaultType.Base?r.baseMint.address:r.quoteMint.address,c=(s===types_1.VaultType.Base?r.condBaseMints:r.condQuoteMints).slice(0,r.numOptions);let p=(0,instructions_1.redeemWinnings)(this.program,t,e,u,c,s);if(o&&(p=p.preInstructions([web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({units:a??this.computeUnits})])),i&&u.equals(spl_token_1.NATIVE_MINT)){const e=(0,spl_token_1.getAssociatedTokenAddressSync)(spl_token_1.NATIVE_MINT,t);p=p.postInstructions([(0,spl_token_1.createCloseAccountInstruction)(e,t,t)])}return p}}exports.VaultClient=VaultClient;