@zcomb/programs-sdk 1.10.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.
- package/dist/amm/client.js +1 -226
- package/dist/amm/constants.js +1 -24
- package/dist/amm/index.js +1 -22
- package/dist/amm/instructions.js +1 -79
- package/dist/amm/types.js +1 -14
- package/dist/amm/utils.js +1 -181
- package/dist/futarchy/client.d.ts +2 -1
- package/dist/futarchy/client.js +1 -757
- package/dist/futarchy/constants.js +1 -23
- package/dist/futarchy/index.js +1 -22
- package/dist/futarchy/instructions.js +1 -162
- package/dist/futarchy/types.js +1 -15
- package/dist/futarchy/utils.js +1 -70
- package/dist/generated/idls/index.js +1 -15
- package/dist/generated/types/amm.js +1 -3
- package/dist/generated/types/futarchy.js +1 -3
- package/dist/generated/types/index.js +1 -3
- package/dist/generated/types/svault.js +1 -3
- package/dist/generated/types/vault.js +1 -3
- package/dist/index.js +1 -137
- package/dist/svault/client.js +1 -190
- package/dist/svault/constants.js +1 -20
- package/dist/svault/index.js +1 -22
- package/dist/svault/instructions.js +1 -172
- package/dist/svault/types.js +1 -7
- package/dist/svault/utils.js +1 -86
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +1 -28
- package/dist/vault/client.js +1 -185
- package/dist/vault/constants.js +1 -20
- package/dist/vault/index.js +1 -22
- package/dist/vault/instructions.js +1 -109
- package/dist/vault/types.js +1 -20
- package/dist/vault/utils.js +1 -50
- package/package.json +4 -2
|
@@ -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");
|
package/dist/svault/types.js
CHANGED
|
@@ -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});
|
package/dist/svault/utils.js
CHANGED
|
@@ -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.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export interface TxOptions {
|
|
2
2
|
includeCuBudget?: boolean;
|
|
3
3
|
computeUnits?: number;
|
|
4
|
+
/**
|
|
5
|
+
* Priority fee in microlamports per compute unit.
|
|
6
|
+
* If provided, adds a setComputeUnitPrice instruction to the transaction.
|
|
7
|
+
* Higher values increase likelihood of inclusion during network congestion.
|
|
8
|
+
*/
|
|
9
|
+
priorityFeeMicroLamports?: number;
|
|
4
10
|
/**
|
|
5
11
|
* Pre-create conditional token ATAs before launch to avoid exceeding
|
|
6
12
|
* Solana's 64 instruction trace limit. Default: true for 3+ options.
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUFtQkgsc0NBR0M7QUFNRCx3Q0FTQztBQXRCRDs7O0dBR0c7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBYTtJQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBYSxDQUFDO0lBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixHQUEwRCxFQUMxRCxJQUFZO0lBRVosTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDNUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogU2hhcmVkIHV0aWxpdGllcyBmb3IgcGFyc2luZyBJREwgdmFsdWVzIGFuZCBjb21tb24gdHlwZXMuXG4gKiBVc2VkIGFjcm9zcyBwcm9ncmFtIFNES3MuXG4gKi9cblxuLyogVHJhbnNhY3Rpb24gT3B0aW9ucyAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFR4T3B0aW9ucyB7XG4gIGluY2x1ZGVDdUJ1ZGdldD86IGJvb2xlYW47ICAvLyBJbmNsdWRlIGNvbXB1dGUgYnVkZ2V0IGluc3RydWN0aW9uIChkZWZhdWx0OiB0cnVlKVxuICBjb21wdXRlVW5pdHM/OiBudW1iZXI7ICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCBjb21wdXRlIHVuaXRzXG4gIC8qKlxuICAgKiBQcmUtY3JlYXRlIGNvbmRpdGlvbmFsIHRva2VuIEFUQXMgYmVmb3JlIGxhdW5jaCB0byBhdm9pZCBleGNlZWRpbmdcbiAgICogU29sYW5hJ3MgNjQgaW5zdHJ1Y3Rpb24gdHJhY2UgbGltaXQuIERlZmF1bHQ6IHRydWUgZm9yIDMrIG9wdGlvbnMuXG4gICAqIFNldCB0byBmYWxzZSBpZiB5b3UndmUgYWxyZWFkeSBjcmVhdGVkIEFUQXMgb3Igd2FudCB0byBtYW5hZ2UgdGhlbSBtYW51YWxseS5cbiAgICovXG4gIGVuc3VyZUFUQXM/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;
|