@emblemvault/primitives-stake 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +26 -0
- package/dist/client.d.ts +257 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +749 -0
- package/dist/client.js.map +1 -0
- package/dist/codec.d.ts +90 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +565 -0
- package/dist/codec.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/pda.d.ts +49 -0
- package/dist/pda.d.ts.map +1 -0
- package/dist/pda.js +58 -0
- package/dist/pda.js.map +1 -0
- package/dist/types.d.ts +151 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/package.json +40 -0
package/dist/codec.js
ADDED
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Borsh codec for StakePool / StakeVault / RewardDistribution accounts.
|
|
3
|
+
*
|
|
4
|
+
* Layouts match the Rust structs in `programs/stake/src/state.rs` (Phase 3
|
|
5
|
+
* task). Locked field orderings; variant tags locked too — changing them
|
|
6
|
+
* invalidates every existing on-chain account.
|
|
7
|
+
*
|
|
8
|
+
* StakePoolAccount field order (LOCKED):
|
|
9
|
+
*
|
|
10
|
+
* bump: u8
|
|
11
|
+
* authority: Pubkey (32)
|
|
12
|
+
* pool_id: u32 LE
|
|
13
|
+
* asset: Pubkey (32)
|
|
14
|
+
* host_url: Option<String> (max 128)
|
|
15
|
+
* lock_options: Vec<LockTier> (u32 LE length + repeated entries)
|
|
16
|
+
* LockTier:
|
|
17
|
+
* days: u32 LE
|
|
18
|
+
* multiplier: u32 LE (×1_000 fixed-point: multiplier 1.0 = 1000, 1.75 = 1750)
|
|
19
|
+
* min_stake: u64 LE
|
|
20
|
+
* max_stake_per_vault: Option<u64>
|
|
21
|
+
* early_exit_penalty_bps: u16 LE
|
|
22
|
+
* penalty_destination: PenaltyDestination (1-byte tag + variant body)
|
|
23
|
+
* - tag=0 redistribute: empty body
|
|
24
|
+
* - tag=1 burn: empty body
|
|
25
|
+
* - tag=2 treasury-pda: String (max 64) body — the treasury id
|
|
26
|
+
* reward_sources: Vec<RewardSource>
|
|
27
|
+
* RewardSource:
|
|
28
|
+
* tag: u8 (0 = distribution-vault, 1 = split-recipient)
|
|
29
|
+
* body: String (max 64) — the id (vault id or splits config id)
|
|
30
|
+
* reward_cadence: u8 (0 hourly, 1 daily, 2 weekly)
|
|
31
|
+
* reward_formula: u8 (0 linear-v1, 1 sammy-curve-v1)
|
|
32
|
+
* total_staked: u64 LE
|
|
33
|
+
* total_weighted_stake: u64 LE
|
|
34
|
+
* current_period: u32 LE
|
|
35
|
+
* version: u32 LE
|
|
36
|
+
* created_at: i64 LE
|
|
37
|
+
*
|
|
38
|
+
* StakeVaultAccount (fixed-size — easier):
|
|
39
|
+
* bump: u8
|
|
40
|
+
* pool_pda: Pubkey
|
|
41
|
+
* owner: Pubkey
|
|
42
|
+
* staked_amount: u64 LE
|
|
43
|
+
* lock_tier_idx: u8
|
|
44
|
+
* lock_ends_at: i64 LE
|
|
45
|
+
* accrued_rewards: u64 LE
|
|
46
|
+
* last_claim_period: u32 LE
|
|
47
|
+
* last_claim_at: i64 LE
|
|
48
|
+
* staked_at: i64 LE
|
|
49
|
+
*
|
|
50
|
+
* RewardDistributionAccount (fixed-size):
|
|
51
|
+
* bump: u8
|
|
52
|
+
* pool_pda: Pubkey
|
|
53
|
+
* period_id: u32 LE
|
|
54
|
+
* total_distributed: u64 LE
|
|
55
|
+
* weighted_stake_at_snapshot: u64 LE
|
|
56
|
+
* distributed_at: i64 LE
|
|
57
|
+
* reward_mint: Pubkey
|
|
58
|
+
*/
|
|
59
|
+
import { PublicKey } from '@solana/web3.js';
|
|
60
|
+
// =============================================================================
|
|
61
|
+
// Discriminators (locked from sha256("account:<Name>").subarray(0, 8))
|
|
62
|
+
// =============================================================================
|
|
63
|
+
export const STAKE_POOL_DISCRIMINATOR = Buffer.from([
|
|
64
|
+
0x79, 0x22, 0xce, 0x15, 0x4f, 0x7f, 0xff, 0x1c,
|
|
65
|
+
]);
|
|
66
|
+
export const STAKE_VAULT_DISCRIMINATOR = Buffer.from([
|
|
67
|
+
0xc0, 0x70, 0x41, 0x7d, 0x81, 0x97, 0xad, 0xe2,
|
|
68
|
+
]);
|
|
69
|
+
export const REWARD_DIST_DISCRIMINATOR = Buffer.from([
|
|
70
|
+
0xf1, 0xfe, 0x40, 0xba, 0xd7, 0x43, 0x19, 0xf7,
|
|
71
|
+
]);
|
|
72
|
+
/** Multiplier scale: stored as u32, displayed as multiplier × 1_000. */
|
|
73
|
+
export const MULTIPLIER_SCALE = 1000;
|
|
74
|
+
/** Caps shared with the on-chain program. */
|
|
75
|
+
export const MAX_LOCK_OPTIONS = 10;
|
|
76
|
+
export const MAX_REWARD_SOURCES = 8;
|
|
77
|
+
export const MAX_HOST_URL_LEN = 128;
|
|
78
|
+
export const MAX_TREASURY_ID_LEN = 64;
|
|
79
|
+
export const MAX_REWARD_SOURCE_ID_LEN = 64;
|
|
80
|
+
// =============================================================================
|
|
81
|
+
// Tag bytes — locked
|
|
82
|
+
// =============================================================================
|
|
83
|
+
export const PENALTY_TAG_REDISTRIBUTE = 0;
|
|
84
|
+
export const PENALTY_TAG_BURN = 1;
|
|
85
|
+
export const PENALTY_TAG_TREASURY_PDA = 2;
|
|
86
|
+
export const REWARD_SOURCE_TAG_DIST_VAULT = 0;
|
|
87
|
+
export const REWARD_SOURCE_TAG_SPLIT_RECIPIENT = 1;
|
|
88
|
+
export const REWARD_CADENCE_HOURLY = 0;
|
|
89
|
+
export const REWARD_CADENCE_DAILY = 1;
|
|
90
|
+
export const REWARD_CADENCE_WEEKLY = 2;
|
|
91
|
+
export const REWARD_FORMULA_LINEAR_V1 = 0;
|
|
92
|
+
export const REWARD_FORMULA_SAMMY_V1 = 1;
|
|
93
|
+
export class StakeCodecError extends Error {
|
|
94
|
+
constructor(message) {
|
|
95
|
+
super(`[StakeCodec] ${message}`);
|
|
96
|
+
this.name = 'StakeCodecError';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// =============================================================================
|
|
100
|
+
// StakePoolAccount
|
|
101
|
+
// =============================================================================
|
|
102
|
+
export function decodeStakePoolAccount(data) {
|
|
103
|
+
const buf = data instanceof Buffer ? data : Buffer.from(data);
|
|
104
|
+
if (buf.length < 8) {
|
|
105
|
+
throw new StakeCodecError(`buffer too small (${buf.length} bytes); need at least 8 for discriminator`);
|
|
106
|
+
}
|
|
107
|
+
const disc = buf.subarray(0, 8);
|
|
108
|
+
if (!disc.equals(STAKE_POOL_DISCRIMINATOR)) {
|
|
109
|
+
throw new StakeCodecError(`StakePool discriminator mismatch: expected ${STAKE_POOL_DISCRIMINATOR.toString('hex')}, got ${disc.toString('hex')}`);
|
|
110
|
+
}
|
|
111
|
+
const r = new BorshReader(buf, 8);
|
|
112
|
+
const bump = r.readU8();
|
|
113
|
+
void bump;
|
|
114
|
+
const authority = r.readPubkey();
|
|
115
|
+
const poolId = r.readU32LE();
|
|
116
|
+
const asset = r.readPubkey();
|
|
117
|
+
const hostUrl = r.readOptionalBorshString(MAX_HOST_URL_LEN);
|
|
118
|
+
const lockOptions = r.readVecLockTier();
|
|
119
|
+
const minStake = r.readU64LE();
|
|
120
|
+
const maxStakePerVault = r.readOptionalU64();
|
|
121
|
+
const earlyExitPenaltyBps = r.readU16LE();
|
|
122
|
+
const penaltyDestination = r.readPenaltyDestination();
|
|
123
|
+
const rewardSources = r.readVecRewardSource();
|
|
124
|
+
const rewardCadence = decodeRewardCadence(r.readU8());
|
|
125
|
+
const rewardFormula = decodeRewardFormula(r.readU8());
|
|
126
|
+
const totalStaked = r.readU64LE();
|
|
127
|
+
const totalWeightedStake = r.readU64LE();
|
|
128
|
+
const currentPeriod = r.readU32LE();
|
|
129
|
+
const version = r.readU32LE();
|
|
130
|
+
const createdAt = r.readI64LE();
|
|
131
|
+
return {
|
|
132
|
+
authority,
|
|
133
|
+
poolId,
|
|
134
|
+
asset,
|
|
135
|
+
hostUrl,
|
|
136
|
+
lockOptions,
|
|
137
|
+
minStake,
|
|
138
|
+
maxStakePerVault,
|
|
139
|
+
earlyExitPenaltyBps,
|
|
140
|
+
penaltyDestination,
|
|
141
|
+
rewardSources,
|
|
142
|
+
rewardCadence,
|
|
143
|
+
rewardFormula,
|
|
144
|
+
totalStaked,
|
|
145
|
+
totalWeightedStake,
|
|
146
|
+
currentPeriod,
|
|
147
|
+
version,
|
|
148
|
+
createdAt: Number(createdAt),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export function encodeStakePoolAccount(account, bump = 255) {
|
|
152
|
+
if (account.lockOptions.length === 0 || account.lockOptions.length > MAX_LOCK_OPTIONS) {
|
|
153
|
+
throw new StakeCodecError(`lockOptions length must be 1..${MAX_LOCK_OPTIONS}; got ${account.lockOptions.length}`);
|
|
154
|
+
}
|
|
155
|
+
if (account.rewardSources.length === 0 ||
|
|
156
|
+
account.rewardSources.length > MAX_REWARD_SOURCES) {
|
|
157
|
+
throw new StakeCodecError(`rewardSources length must be 1..${MAX_REWARD_SOURCES}; got ${account.rewardSources.length}`);
|
|
158
|
+
}
|
|
159
|
+
if (account.earlyExitPenaltyBps < 0 || account.earlyExitPenaltyBps > 10_000) {
|
|
160
|
+
throw new StakeCodecError(`earlyExitPenaltyBps must be 0..10000; got ${account.earlyExitPenaltyBps}`);
|
|
161
|
+
}
|
|
162
|
+
const w = new BorshWriter();
|
|
163
|
+
w.writeBytes(STAKE_POOL_DISCRIMINATOR);
|
|
164
|
+
w.writeU8(bump);
|
|
165
|
+
w.writePubkey(account.authority);
|
|
166
|
+
w.writeU32LE(account.poolId);
|
|
167
|
+
w.writePubkey(account.asset);
|
|
168
|
+
w.writeOptionalBorshString(account.hostUrl, MAX_HOST_URL_LEN);
|
|
169
|
+
w.writeVecLockTier(account.lockOptions);
|
|
170
|
+
w.writeU64LE(account.minStake);
|
|
171
|
+
w.writeOptionalU64(account.maxStakePerVault);
|
|
172
|
+
w.writeU16LE(account.earlyExitPenaltyBps);
|
|
173
|
+
w.writePenaltyDestination(account.penaltyDestination);
|
|
174
|
+
w.writeVecRewardSource(account.rewardSources);
|
|
175
|
+
w.writeU8(encodeRewardCadence(account.rewardCadence));
|
|
176
|
+
w.writeU8(encodeRewardFormula(account.rewardFormula));
|
|
177
|
+
w.writeU64LE(account.totalStaked);
|
|
178
|
+
w.writeU64LE(account.totalWeightedStake);
|
|
179
|
+
w.writeU32LE(account.currentPeriod);
|
|
180
|
+
w.writeU32LE(account.version);
|
|
181
|
+
w.writeI64LE(BigInt(account.createdAt));
|
|
182
|
+
return w.toBuffer();
|
|
183
|
+
}
|
|
184
|
+
// =============================================================================
|
|
185
|
+
// StakeVaultAccount (fixed-size)
|
|
186
|
+
// =============================================================================
|
|
187
|
+
export function decodeStakeVaultAccount(data) {
|
|
188
|
+
const buf = data instanceof Buffer ? data : Buffer.from(data);
|
|
189
|
+
if (buf.length < 8) {
|
|
190
|
+
throw new StakeCodecError(`buffer too small (${buf.length} bytes); need at least 8 for discriminator`);
|
|
191
|
+
}
|
|
192
|
+
const disc = buf.subarray(0, 8);
|
|
193
|
+
if (!disc.equals(STAKE_VAULT_DISCRIMINATOR)) {
|
|
194
|
+
throw new StakeCodecError(`StakeVault discriminator mismatch: expected ${STAKE_VAULT_DISCRIMINATOR.toString('hex')}, got ${disc.toString('hex')}`);
|
|
195
|
+
}
|
|
196
|
+
const r = new BorshReader(buf, 8);
|
|
197
|
+
const bump = r.readU8();
|
|
198
|
+
void bump;
|
|
199
|
+
const poolPda = r.readPubkey();
|
|
200
|
+
const owner = r.readPubkey();
|
|
201
|
+
const stakedAmount = r.readU64LE();
|
|
202
|
+
const lockTierIdx = r.readU8();
|
|
203
|
+
const lockEndsAt = r.readI64LE();
|
|
204
|
+
const accruedRewards = r.readU64LE();
|
|
205
|
+
const lastClaimPeriod = r.readU32LE();
|
|
206
|
+
const lastClaimAt = r.readI64LE();
|
|
207
|
+
const stakedAt = r.readI64LE();
|
|
208
|
+
return {
|
|
209
|
+
poolPda,
|
|
210
|
+
owner,
|
|
211
|
+
stakedAmount,
|
|
212
|
+
lockTierIdx,
|
|
213
|
+
lockEndsAt: Number(lockEndsAt),
|
|
214
|
+
accruedRewards,
|
|
215
|
+
lastClaimPeriod,
|
|
216
|
+
lastClaimAt: Number(lastClaimAt),
|
|
217
|
+
stakedAt: Number(stakedAt),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
export function encodeStakeVaultAccount(account, bump = 255) {
|
|
221
|
+
const w = new BorshWriter();
|
|
222
|
+
w.writeBytes(STAKE_VAULT_DISCRIMINATOR);
|
|
223
|
+
w.writeU8(bump);
|
|
224
|
+
w.writePubkey(account.poolPda);
|
|
225
|
+
w.writePubkey(account.owner);
|
|
226
|
+
w.writeU64LE(account.stakedAmount);
|
|
227
|
+
w.writeU8(account.lockTierIdx);
|
|
228
|
+
w.writeI64LE(BigInt(account.lockEndsAt));
|
|
229
|
+
w.writeU64LE(account.accruedRewards);
|
|
230
|
+
w.writeU32LE(account.lastClaimPeriod);
|
|
231
|
+
w.writeI64LE(BigInt(account.lastClaimAt));
|
|
232
|
+
w.writeI64LE(BigInt(account.stakedAt));
|
|
233
|
+
return w.toBuffer();
|
|
234
|
+
}
|
|
235
|
+
// =============================================================================
|
|
236
|
+
// RewardDistributionAccount (fixed-size)
|
|
237
|
+
// =============================================================================
|
|
238
|
+
export function decodeRewardDistributionAccount(data) {
|
|
239
|
+
const buf = data instanceof Buffer ? data : Buffer.from(data);
|
|
240
|
+
if (buf.length < 8) {
|
|
241
|
+
throw new StakeCodecError(`buffer too small (${buf.length} bytes); need at least 8 for discriminator`);
|
|
242
|
+
}
|
|
243
|
+
const disc = buf.subarray(0, 8);
|
|
244
|
+
if (!disc.equals(REWARD_DIST_DISCRIMINATOR)) {
|
|
245
|
+
throw new StakeCodecError(`RewardDistribution discriminator mismatch: expected ${REWARD_DIST_DISCRIMINATOR.toString('hex')}, got ${disc.toString('hex')}`);
|
|
246
|
+
}
|
|
247
|
+
const r = new BorshReader(buf, 8);
|
|
248
|
+
const bump = r.readU8();
|
|
249
|
+
void bump;
|
|
250
|
+
const poolPda = r.readPubkey();
|
|
251
|
+
const periodId = r.readU32LE();
|
|
252
|
+
const totalDistributed = r.readU64LE();
|
|
253
|
+
const weightedStakeAtSnapshot = r.readU64LE();
|
|
254
|
+
const distributedAt = r.readI64LE();
|
|
255
|
+
const rewardMint = r.readPubkey();
|
|
256
|
+
return {
|
|
257
|
+
poolPda,
|
|
258
|
+
periodId,
|
|
259
|
+
totalDistributed,
|
|
260
|
+
weightedStakeAtSnapshot,
|
|
261
|
+
distributedAt: Number(distributedAt),
|
|
262
|
+
rewardMint,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
export function encodeRewardDistributionAccount(account, bump = 255) {
|
|
266
|
+
const w = new BorshWriter();
|
|
267
|
+
w.writeBytes(REWARD_DIST_DISCRIMINATOR);
|
|
268
|
+
w.writeU8(bump);
|
|
269
|
+
w.writePubkey(account.poolPda);
|
|
270
|
+
w.writeU32LE(account.periodId);
|
|
271
|
+
w.writeU64LE(account.totalDistributed);
|
|
272
|
+
w.writeU64LE(account.weightedStakeAtSnapshot);
|
|
273
|
+
w.writeI64LE(BigInt(account.distributedAt));
|
|
274
|
+
w.writePubkey(account.rewardMint);
|
|
275
|
+
return w.toBuffer();
|
|
276
|
+
}
|
|
277
|
+
// =============================================================================
|
|
278
|
+
// Variant encoders
|
|
279
|
+
// =============================================================================
|
|
280
|
+
function encodeRewardCadence(c) {
|
|
281
|
+
switch (c) {
|
|
282
|
+
case 'hourly':
|
|
283
|
+
return REWARD_CADENCE_HOURLY;
|
|
284
|
+
case 'daily':
|
|
285
|
+
return REWARD_CADENCE_DAILY;
|
|
286
|
+
case 'weekly':
|
|
287
|
+
return REWARD_CADENCE_WEEKLY;
|
|
288
|
+
default: {
|
|
289
|
+
const _exhaustive = c;
|
|
290
|
+
throw new StakeCodecError(`unknown rewardCadence: ${_exhaustive}`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
function decodeRewardCadence(byte) {
|
|
295
|
+
switch (byte) {
|
|
296
|
+
case REWARD_CADENCE_HOURLY:
|
|
297
|
+
return 'hourly';
|
|
298
|
+
case REWARD_CADENCE_DAILY:
|
|
299
|
+
return 'daily';
|
|
300
|
+
case REWARD_CADENCE_WEEKLY:
|
|
301
|
+
return 'weekly';
|
|
302
|
+
default:
|
|
303
|
+
throw new StakeCodecError(`unknown rewardCadence byte: ${byte}`);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function encodeRewardFormula(f) {
|
|
307
|
+
switch (f) {
|
|
308
|
+
case 'linear-v1':
|
|
309
|
+
return REWARD_FORMULA_LINEAR_V1;
|
|
310
|
+
case 'sammy-curve-v1':
|
|
311
|
+
return REWARD_FORMULA_SAMMY_V1;
|
|
312
|
+
default: {
|
|
313
|
+
const _exhaustive = f;
|
|
314
|
+
throw new StakeCodecError(`unknown rewardFormula: ${_exhaustive}`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
function decodeRewardFormula(byte) {
|
|
319
|
+
switch (byte) {
|
|
320
|
+
case REWARD_FORMULA_LINEAR_V1:
|
|
321
|
+
return 'linear-v1';
|
|
322
|
+
case REWARD_FORMULA_SAMMY_V1:
|
|
323
|
+
return 'sammy-curve-v1';
|
|
324
|
+
default:
|
|
325
|
+
throw new StakeCodecError(`unknown rewardFormula byte: ${byte}`);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// =============================================================================
|
|
329
|
+
// Borsh reader / writer
|
|
330
|
+
// =============================================================================
|
|
331
|
+
class BorshReader {
|
|
332
|
+
buf;
|
|
333
|
+
offset;
|
|
334
|
+
constructor(buf, start = 0) {
|
|
335
|
+
this.buf = buf;
|
|
336
|
+
this.offset = start;
|
|
337
|
+
}
|
|
338
|
+
require(n) {
|
|
339
|
+
if (this.offset + n > this.buf.length) {
|
|
340
|
+
throw new StakeCodecError(`unexpected end of buffer at offset ${this.offset}, need ${n} more bytes`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
readU8() {
|
|
344
|
+
this.require(1);
|
|
345
|
+
const v = this.buf.readUInt8(this.offset);
|
|
346
|
+
this.offset += 1;
|
|
347
|
+
return v;
|
|
348
|
+
}
|
|
349
|
+
readU16LE() {
|
|
350
|
+
this.require(2);
|
|
351
|
+
const v = this.buf.readUInt16LE(this.offset);
|
|
352
|
+
this.offset += 2;
|
|
353
|
+
return v;
|
|
354
|
+
}
|
|
355
|
+
readU32LE() {
|
|
356
|
+
this.require(4);
|
|
357
|
+
const v = this.buf.readUInt32LE(this.offset);
|
|
358
|
+
this.offset += 4;
|
|
359
|
+
return v;
|
|
360
|
+
}
|
|
361
|
+
readU64LE() {
|
|
362
|
+
this.require(8);
|
|
363
|
+
const lo = BigInt(this.buf.readUInt32LE(this.offset));
|
|
364
|
+
const hi = BigInt(this.buf.readUInt32LE(this.offset + 4));
|
|
365
|
+
this.offset += 8;
|
|
366
|
+
return (hi << 32n) | lo;
|
|
367
|
+
}
|
|
368
|
+
readI64LE() {
|
|
369
|
+
this.require(8);
|
|
370
|
+
const lo = BigInt(this.buf.readUInt32LE(this.offset));
|
|
371
|
+
const hi = BigInt(this.buf.readInt32LE(this.offset + 4));
|
|
372
|
+
this.offset += 8;
|
|
373
|
+
return (hi << 32n) | (lo & 0xffffffffn);
|
|
374
|
+
}
|
|
375
|
+
readPubkey() {
|
|
376
|
+
this.require(32);
|
|
377
|
+
const slice = this.buf.subarray(this.offset, this.offset + 32);
|
|
378
|
+
this.offset += 32;
|
|
379
|
+
return new PublicKey(slice).toBase58();
|
|
380
|
+
}
|
|
381
|
+
readOptionalU64() {
|
|
382
|
+
const tag = this.readU8();
|
|
383
|
+
if (tag === 0)
|
|
384
|
+
return null;
|
|
385
|
+
if (tag !== 1)
|
|
386
|
+
throw new StakeCodecError(`invalid Option tag ${tag}`);
|
|
387
|
+
return this.readU64LE();
|
|
388
|
+
}
|
|
389
|
+
readBorshString(maxLen) {
|
|
390
|
+
const len = this.readU32LE();
|
|
391
|
+
if (len > maxLen)
|
|
392
|
+
throw new StakeCodecError(`string length ${len} exceeds max ${maxLen}`);
|
|
393
|
+
this.require(len);
|
|
394
|
+
const slice = this.buf.subarray(this.offset, this.offset + len);
|
|
395
|
+
this.offset += len;
|
|
396
|
+
return slice.toString('utf-8');
|
|
397
|
+
}
|
|
398
|
+
readOptionalBorshString(maxLen) {
|
|
399
|
+
const tag = this.readU8();
|
|
400
|
+
if (tag === 0)
|
|
401
|
+
return null;
|
|
402
|
+
if (tag !== 1)
|
|
403
|
+
throw new StakeCodecError(`invalid Option tag ${tag}`);
|
|
404
|
+
return this.readBorshString(maxLen);
|
|
405
|
+
}
|
|
406
|
+
readVecLockTier() {
|
|
407
|
+
const len = this.readU32LE();
|
|
408
|
+
if (len > MAX_LOCK_OPTIONS) {
|
|
409
|
+
throw new StakeCodecError(`lockOptions length ${len} exceeds max ${MAX_LOCK_OPTIONS}`);
|
|
410
|
+
}
|
|
411
|
+
const out = [];
|
|
412
|
+
for (let i = 0; i < len; i++) {
|
|
413
|
+
const days = this.readU32LE();
|
|
414
|
+
const multiplierFp = this.readU32LE();
|
|
415
|
+
out.push({ days, multiplier: multiplierFp / MULTIPLIER_SCALE });
|
|
416
|
+
}
|
|
417
|
+
return out;
|
|
418
|
+
}
|
|
419
|
+
readPenaltyDestination() {
|
|
420
|
+
const tag = this.readU8();
|
|
421
|
+
switch (tag) {
|
|
422
|
+
case PENALTY_TAG_REDISTRIBUTE:
|
|
423
|
+
return { kind: 'redistribute' };
|
|
424
|
+
case PENALTY_TAG_BURN:
|
|
425
|
+
return { kind: 'burn' };
|
|
426
|
+
case PENALTY_TAG_TREASURY_PDA: {
|
|
427
|
+
const id = this.readBorshString(MAX_TREASURY_ID_LEN);
|
|
428
|
+
return { kind: 'treasury-pda', id };
|
|
429
|
+
}
|
|
430
|
+
default:
|
|
431
|
+
throw new StakeCodecError(`unknown PenaltyDestination tag ${tag}`);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
readVecRewardSource() {
|
|
435
|
+
const len = this.readU32LE();
|
|
436
|
+
if (len > MAX_REWARD_SOURCES) {
|
|
437
|
+
throw new StakeCodecError(`rewardSources length ${len} exceeds max ${MAX_REWARD_SOURCES}`);
|
|
438
|
+
}
|
|
439
|
+
const out = [];
|
|
440
|
+
for (let i = 0; i < len; i++) {
|
|
441
|
+
const tag = this.readU8();
|
|
442
|
+
const id = this.readBorshString(MAX_REWARD_SOURCE_ID_LEN);
|
|
443
|
+
if (tag === REWARD_SOURCE_TAG_DIST_VAULT) {
|
|
444
|
+
out.push({ type: 'distribution-vault', id });
|
|
445
|
+
}
|
|
446
|
+
else if (tag === REWARD_SOURCE_TAG_SPLIT_RECIPIENT) {
|
|
447
|
+
out.push({ type: 'split-recipient', fromConfigId: id });
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
throw new StakeCodecError(`unknown RewardSource tag ${tag}`);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
return out;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
class BorshWriter {
|
|
457
|
+
chunks = [];
|
|
458
|
+
writeBytes(b) {
|
|
459
|
+
this.chunks.push(b);
|
|
460
|
+
}
|
|
461
|
+
writeU8(v) {
|
|
462
|
+
const b = Buffer.alloc(1);
|
|
463
|
+
b.writeUInt8(v, 0);
|
|
464
|
+
this.chunks.push(b);
|
|
465
|
+
}
|
|
466
|
+
writeU16LE(v) {
|
|
467
|
+
const b = Buffer.alloc(2);
|
|
468
|
+
b.writeUInt16LE(v, 0);
|
|
469
|
+
this.chunks.push(b);
|
|
470
|
+
}
|
|
471
|
+
writeU32LE(v) {
|
|
472
|
+
const b = Buffer.alloc(4);
|
|
473
|
+
b.writeUInt32LE(v, 0);
|
|
474
|
+
this.chunks.push(b);
|
|
475
|
+
}
|
|
476
|
+
writeU64LE(v) {
|
|
477
|
+
const b = Buffer.alloc(8);
|
|
478
|
+
b.writeBigUInt64LE(v, 0);
|
|
479
|
+
this.chunks.push(b);
|
|
480
|
+
}
|
|
481
|
+
writeI64LE(v) {
|
|
482
|
+
const b = Buffer.alloc(8);
|
|
483
|
+
b.writeBigInt64LE(v, 0);
|
|
484
|
+
this.chunks.push(b);
|
|
485
|
+
}
|
|
486
|
+
writePubkey(addr) {
|
|
487
|
+
const bytes = new PublicKey(addr).toBytes();
|
|
488
|
+
this.chunks.push(Buffer.from(bytes));
|
|
489
|
+
}
|
|
490
|
+
writeOptionalU64(v) {
|
|
491
|
+
if (v == null) {
|
|
492
|
+
this.writeU8(0);
|
|
493
|
+
return;
|
|
494
|
+
}
|
|
495
|
+
this.writeU8(1);
|
|
496
|
+
this.writeU64LE(v);
|
|
497
|
+
}
|
|
498
|
+
writeBorshString(s, maxLen) {
|
|
499
|
+
const utf8 = Buffer.from(s, 'utf-8');
|
|
500
|
+
if (utf8.length > maxLen) {
|
|
501
|
+
throw new StakeCodecError(`string of byte-length ${utf8.length} exceeds max ${maxLen}`);
|
|
502
|
+
}
|
|
503
|
+
this.writeU32LE(utf8.length);
|
|
504
|
+
this.chunks.push(utf8);
|
|
505
|
+
}
|
|
506
|
+
writeOptionalBorshString(s, maxLen) {
|
|
507
|
+
if (s == null) {
|
|
508
|
+
this.writeU8(0);
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
this.writeU8(1);
|
|
512
|
+
this.writeBorshString(s, maxLen);
|
|
513
|
+
}
|
|
514
|
+
writeVecLockTier(tiers) {
|
|
515
|
+
this.writeU32LE(tiers.length);
|
|
516
|
+
for (const t of tiers) {
|
|
517
|
+
this.writeU32LE(t.days);
|
|
518
|
+
// Multiplier × 1000 fixed-point
|
|
519
|
+
const fp = Math.round(t.multiplier * MULTIPLIER_SCALE);
|
|
520
|
+
if (fp < 0 || fp > 0xffff_ffff) {
|
|
521
|
+
throw new StakeCodecError(`multiplier out of u32 range: ${t.multiplier}`);
|
|
522
|
+
}
|
|
523
|
+
this.writeU32LE(fp);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
writePenaltyDestination(p) {
|
|
527
|
+
switch (p.kind) {
|
|
528
|
+
case 'redistribute':
|
|
529
|
+
this.writeU8(PENALTY_TAG_REDISTRIBUTE);
|
|
530
|
+
return;
|
|
531
|
+
case 'burn':
|
|
532
|
+
this.writeU8(PENALTY_TAG_BURN);
|
|
533
|
+
return;
|
|
534
|
+
case 'treasury-pda':
|
|
535
|
+
this.writeU8(PENALTY_TAG_TREASURY_PDA);
|
|
536
|
+
this.writeBorshString(p.id, MAX_TREASURY_ID_LEN);
|
|
537
|
+
return;
|
|
538
|
+
default: {
|
|
539
|
+
const _exhaustive = p;
|
|
540
|
+
throw new StakeCodecError(`unknown PenaltyDestination: ${_exhaustive}`);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
writeVecRewardSource(sources) {
|
|
545
|
+
this.writeU32LE(sources.length);
|
|
546
|
+
for (const s of sources) {
|
|
547
|
+
if (s.type === 'distribution-vault') {
|
|
548
|
+
this.writeU8(REWARD_SOURCE_TAG_DIST_VAULT);
|
|
549
|
+
this.writeBorshString(s.id, MAX_REWARD_SOURCE_ID_LEN);
|
|
550
|
+
}
|
|
551
|
+
else if (s.type === 'split-recipient') {
|
|
552
|
+
this.writeU8(REWARD_SOURCE_TAG_SPLIT_RECIPIENT);
|
|
553
|
+
this.writeBorshString(s.fromConfigId, MAX_REWARD_SOURCE_ID_LEN);
|
|
554
|
+
}
|
|
555
|
+
else {
|
|
556
|
+
const _exhaustive = s;
|
|
557
|
+
throw new StakeCodecError(`unknown RewardSource: ${_exhaustive}`);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
toBuffer() {
|
|
562
|
+
return Buffer.concat(this.chunks);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { EmblemStakeClient, EmblemStakeError, createStakeReader, type EmblemStakeClientOptions, type SolanaSignerInterface, } from './client.js';
|
|
2
|
+
export { decodeStakePoolAccount, encodeStakePoolAccount, decodeStakeVaultAccount, encodeStakeVaultAccount, decodeRewardDistributionAccount, encodeRewardDistributionAccount, STAKE_POOL_DISCRIMINATOR, STAKE_VAULT_DISCRIMINATOR, REWARD_DIST_DISCRIMINATOR, MULTIPLIER_SCALE, MAX_LOCK_OPTIONS, MAX_REWARD_SOURCES, MAX_HOST_URL_LEN, MAX_TREASURY_ID_LEN, MAX_REWARD_SOURCE_ID_LEN, PENALTY_TAG_REDISTRIBUTE, PENALTY_TAG_BURN, PENALTY_TAG_TREASURY_PDA, REWARD_SOURCE_TAG_DIST_VAULT, REWARD_SOURCE_TAG_SPLIT_RECIPIENT, REWARD_CADENCE_HOURLY, REWARD_CADENCE_DAILY, REWARD_CADENCE_WEEKLY, REWARD_FORMULA_LINEAR_V1, REWARD_FORMULA_SAMMY_V1, StakeCodecError, } from './codec.js';
|
|
3
|
+
export { deriveStakePoolPda, deriveStakeVaultPda, deriveRewardDistPda, encodeU32, STAKE_POOL_SEED, STAKE_VAULT_SEED, REWARD_DIST_SEED, STAKE_PROGRAM_ID, type DeriveStakePoolPdaArgs, type DeriveStakeVaultPdaArgs, type DeriveRewardDistPdaArgs, type DerivedPda, } from './pda.js';
|
|
4
|
+
export type { StakePoolAccount, StakePoolView, StakeVaultAccount, StakeVaultView, RewardDistributionAccount, RewardDistributionView, CreatePoolArgs, StakeArgs, UnstakeArgs, ClaimRewardsArgs, DistributeRewardsArgs, GetVaultArgs, StakeGateEvaluationResult, } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAChB,wBAAwB,EACxB,4BAA4B,EAC5B,iCAAiC,EACjC,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,UAAU,GAChB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,yBAAyB,EACzB,sBAAsB,EACtB,cAAc,EACd,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { EmblemStakeClient, EmblemStakeError, createStakeReader, } from './client.js';
|
|
2
|
+
export { decodeStakePoolAccount, encodeStakePoolAccount, decodeStakeVaultAccount, encodeStakeVaultAccount, decodeRewardDistributionAccount, encodeRewardDistributionAccount, STAKE_POOL_DISCRIMINATOR, STAKE_VAULT_DISCRIMINATOR, REWARD_DIST_DISCRIMINATOR, MULTIPLIER_SCALE, MAX_LOCK_OPTIONS, MAX_REWARD_SOURCES, MAX_HOST_URL_LEN, MAX_TREASURY_ID_LEN, MAX_REWARD_SOURCE_ID_LEN, PENALTY_TAG_REDISTRIBUTE, PENALTY_TAG_BURN, PENALTY_TAG_TREASURY_PDA, REWARD_SOURCE_TAG_DIST_VAULT, REWARD_SOURCE_TAG_SPLIT_RECIPIENT, REWARD_CADENCE_HOURLY, REWARD_CADENCE_DAILY, REWARD_CADENCE_WEEKLY, REWARD_FORMULA_LINEAR_V1, REWARD_FORMULA_SAMMY_V1, StakeCodecError, } from './codec.js';
|
|
3
|
+
export { deriveStakePoolPda, deriveStakeVaultPda, deriveRewardDistPda, encodeU32, STAKE_POOL_SEED, STAKE_VAULT_SEED, REWARD_DIST_SEED, STAKE_PROGRAM_ID, } from './pda.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAGlB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAChB,wBAAwB,EACxB,4BAA4B,EAC5B,iCAAiC,EACjC,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GAKjB,MAAM,UAAU,CAAC"}
|
package/dist/pda.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDA derivation for the stake program.
|
|
3
|
+
*
|
|
4
|
+
* Three derivations:
|
|
5
|
+
* StakePool: [b"stake-pool", asset_mint, pool_id_le_u32]
|
|
6
|
+
* StakeVault: [b"stake-vault", pool_pda, owner]
|
|
7
|
+
* RewardDistribution: [b"reward-dist", pool_pda, period_id_le_u32]
|
|
8
|
+
*
|
|
9
|
+
* Mirrors sdk/sell's pattern. Rust and TS sides derive identically.
|
|
10
|
+
*/
|
|
11
|
+
import { PublicKey } from '@solana/web3.js';
|
|
12
|
+
import { STAKE_PROGRAM_ID, type SolanaAddress } from '@emblemvault/primitives-shared';
|
|
13
|
+
export declare const STAKE_POOL_SEED: Buffer<ArrayBuffer>;
|
|
14
|
+
export declare const STAKE_VAULT_SEED: Buffer<ArrayBuffer>;
|
|
15
|
+
export declare const REWARD_DIST_SEED: Buffer<ArrayBuffer>;
|
|
16
|
+
/**
|
|
17
|
+
* Stake program id — derived from `keys/stake.json` and emitted by
|
|
18
|
+
* `scripts/derive-program-ids.mjs` into `shared/src/program-ids.generated.ts`.
|
|
19
|
+
* Re-exported here so SDK consumers don't need to know about `shared`.
|
|
20
|
+
*
|
|
21
|
+
* The Rust program's `declare_id!()` is held in lockstep via Anchor's
|
|
22
|
+
* keypair-vs-source check.
|
|
23
|
+
*/
|
|
24
|
+
export { STAKE_PROGRAM_ID };
|
|
25
|
+
export interface DeriveStakePoolPdaArgs {
|
|
26
|
+
asset: SolanaAddress;
|
|
27
|
+
poolId: number;
|
|
28
|
+
programId: SolanaAddress;
|
|
29
|
+
}
|
|
30
|
+
export interface DerivedPda {
|
|
31
|
+
pda: PublicKey;
|
|
32
|
+
bump: number;
|
|
33
|
+
}
|
|
34
|
+
export declare function deriveStakePoolPda(args: DeriveStakePoolPdaArgs): DerivedPda;
|
|
35
|
+
export interface DeriveStakeVaultPdaArgs {
|
|
36
|
+
poolPda: SolanaAddress;
|
|
37
|
+
owner: SolanaAddress;
|
|
38
|
+
programId: SolanaAddress;
|
|
39
|
+
}
|
|
40
|
+
export declare function deriveStakeVaultPda(args: DeriveStakeVaultPdaArgs): DerivedPda;
|
|
41
|
+
export interface DeriveRewardDistPdaArgs {
|
|
42
|
+
poolPda: SolanaAddress;
|
|
43
|
+
periodId: number;
|
|
44
|
+
programId: SolanaAddress;
|
|
45
|
+
}
|
|
46
|
+
export declare function deriveRewardDistPda(args: DeriveRewardDistPdaArgs): DerivedPda;
|
|
47
|
+
/** Encode a u32 as 4 little-endian bytes with a context-aware error message. */
|
|
48
|
+
export declare function encodeU32(value: number, fieldName: string): Buffer;
|
|
49
|
+
//# sourceMappingURL=pda.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../src/pda.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEtF,eAAO,MAAM,eAAe,qBAA4B,CAAC;AACzD,eAAO,MAAM,gBAAgB,qBAA6B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,qBAA6B,CAAC;AAE3D;;;;;;;GAOG;AACH,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAM5B,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,UAAU,CAS3E;AAMD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,UAAU,CAS7E;AAMD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,UAAU,CAS7E;AAMD,gFAAgF;AAChF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CASlE"}
|