@soltracer/nft-staking 0.3.0 → 0.4.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/INTEGRATION.md CHANGED
@@ -131,7 +131,7 @@ const ix = await client.createStakePool(
131
131
  rewardMint: mintPubkey,
132
132
  baseRate: 100,
133
133
  rateInterval: 86400,
134
- traitBonusMode: 0,
134
+ traitBonusEnabled: false,
135
135
  quantityThresholds: [],
136
136
  },
137
137
  [{ lockDuration: 30 * 86400, rewardRate: 150, earlyUnstakePenaltyBps: 500, claimOnlyAtEnd: false }],
@@ -196,10 +196,29 @@ const fund = await client.fundRewardVault(poolId, amount, { rewardMint: mintPk }
196
196
 
197
197
  ### Close Pool
198
198
 
199
+ Permanently deletes the pool account and refunds rent to the project authority. This is a hard delete — the account
200
+ ceases to exist on-chain. The on-chain guard requires **all four** of the following before it will close:
201
+
202
+ 1. `is_active == false` — flip it off first via `updateStakePool({ isActive: false })`.
203
+ 2. `total_staked == 0` — every staker must have unstaked.
204
+ 3. `total_obligation_pending == 0` — every staker must have claimed (settled inside the ix via `pool_settle`).
205
+ 4. Token-reward pools only: the reward vault ATA must hold zero — drain via `withdrawRewardVault(poolId, amount)`.
206
+
199
207
  ```ts
208
+ // Step 1 — deactivate so no new stakes can land while you wind down.
209
+ await client.updateStakePool(poolId, { isActive: false })
210
+
211
+ // Step 2 — (off-chain) wait for or coordinate all unstakes + claims.
212
+ // Optionally drain leftover rewards back to the project treasury:
213
+ await client.withdrawRewardVault(poolId, remainingBalance)
214
+
215
+ // Step 3 — permanent close. The SDK auto-resolves the reward vault for token pools.
200
216
  const ix = await client.closeStakePool(poolId)
201
217
  ```
202
218
 
219
+ If any precondition fails the program returns `PoolStillActive`, `PoolHasActiveStakes`,
220
+ `PoolHasOutstandingObligations`, or `VaultNotEmpty` so you can surface the exact blocker in the admin UI.
221
+
203
222
  ### Secondary Rewards Management
204
223
 
205
224
  ```ts
@@ -269,37 +288,213 @@ Early-unstake penalties apply on exit when configured.
269
288
 
270
289
  ### Trait Bonus Claims
271
290
 
272
- `RewardConfig.traitBonusMode` controls how a signed `traitBonusRate` is interpreted:
291
+ `RewardConfig.traitBonusEnabled` is a single boolean. When `false`, claims that include a non-zero `traitBonusRate`
292
+ are rejected on-chain. When `true`, the pool accepts a signed `u64` `traitBonusRate` and **adds it directly** to the
293
+ staker's effective rate for the accrual window. There are no modes, no on-chain multipliers, no per-claim cross-NFT
294
+ math — the chain only ever sees one absolute number.
295
+
296
+ All bonus aggregation (per-trait lookups, per-NFT multipliers, caps, edge cases) lives off-chain in the trait-authority
297
+ server. The server is the only party that can produce a signature the pool will accept, so reward rules are fully
298
+ enforced even though the chain knows nothing about traits.
273
299
 
274
- - `0` / `None`: trait bonus proofs are disabled; nonzero `traitBonusRate` is rejected.
275
- - `1` / `FixedExtra`: `traitBonusRate` is a raw extra reward rate per interval, added temporarily for the claim accrual
276
- window.
277
- - `2` / `BaseMultiplier`: `traitBonusRate` is bonus basis points over the staker's current base effective rate. `10_000`
278
- means +100%, so total accrual for that window is 2x base.
300
+ #### Why per-NFT (not per-staker) multipliers
279
301
 
280
- #### Aggregating per-trait bonuses
302
+ If you want rare NFTs to earn more, multiply the rare NFT's **own** bonus contribution and leave every other staked
303
+ NFT's contribution alone. A staker-wide multiplier (e.g. "Mythic NFT = 2× everything") cross-contaminates: every plain
304
+ NFT they own also doubles its rewards inside the same claim window. The SDK's `computeTraitBonusRate` helper applies
305
+ `multiplierBps` per NFT and sums the results, so one NFT's multiplier can never inflate another's reward.
281
306
 
282
- The on-chain instruction accepts a **single** `u64` `traitBonusRate` per claim — it has no notion of per-trait or
283
- per-NFT granularity, and it cannot read NFT metadata. Aggregation lives entirely off-chain in the trait-authority
284
- server. The intended flow:
307
+ #### Backend flow
285
308
 
286
- 1. **Client request.** The wallet calls your API with `{ wallet, poolId, mints }` (the mints it wants to claim against).
309
+ 1. **Client request.** The wallet calls your API with `{ wallet, poolId, mints }`.
287
310
  2. **Ownership / stake validation.** The API resolves the wallet's active stake entries
288
- (`client.fetchStakeEntriesByOwner(poolId, wallet)`) and **drops** any mint not present — never trust the client's
311
+ (`client.fetchStakeEntriesByOwner(wallet, poolId)`) and **drops** any mint not present — never trust the client's
289
312
  list. Anything that survives is provably staked by `wallet` in `pool`.
290
313
  3. **Trait resolution.** For each surviving mint, fetch its trait list from your own source of truth (collection JSON,
291
314
  Metaplex on-chain metadata, indexer, internal DB). The chain stores no trait data.
292
- 4. **Catalog lookup.** Each `(traitType, value)` pair is checked against your project's bonus catalog. Traits without
293
- an entry contribute nothing.
294
- 5. **Mode-aware sum.** Bonuses are summed according to the pool's `rewardConfig.traitBonusMode`:
295
- - `FixedExtra`: catalog uses `fixedExtra` (raw reward per `rateInterval`); each matched trait adds its value.
296
- - `BaseMultiplier`: catalog uses `bonusBps` (10_000 = +100%); each matched trait adds its BPS to a single boost that
297
- scales the staker's current `effective_rate` for the accrual window.
298
- 6. **Sign and return.** Sign the resulting `u64` with the pool's `traitAuthority` keypair; return signature + rate to
299
- the client.
300
-
301
- The SDK ships `computeTraitBonusRate` for steps 4–5. It takes the validated NFT/trait list and a bonus catalog, enforces
302
- mode/field consistency, and returns both the aggregated rate and a per-NFT breakdown (handy for receipts or UI tooltips):
315
+ 4. **Catalog lookup.** Each `(traitType, value)` pair is checked against your project's bonus catalog. Each match
316
+ adds its `bonus` (absolute raw reward units per `rateInterval`) to that NFT's running total.
317
+ 5. **Per-NFT multiplier (optional).** If the NFT carries a project-defined `multiplierBps`, multiply its bonus sum by
318
+ `multiplierBps / 10_000`. The multiplier never escapes that NFT.
319
+ 6. **Aggregate.** Sum every NFT's post-multiplier bonus into one `u64` that is the `traitBonusRate`.
320
+ 7. **Sign and return.** Sign the 80-byte message with the pool's `traitAuthority` keypair (or the global stake-config
321
+ authority); return `{ signature, traitBonusRate }` to the client.
322
+
323
+ `computeTraitBonusRate` performs steps 4–6 in one call; `prepareTraitProof` performs steps 2–6 plus the signable
324
+ message (step 7's payload). Pick whichever fits how much of the flow your stack already owns.
325
+
326
+ #### Managing the bonus catalog (any DB)
327
+
328
+ The catalog is keyed by **NFT collection mint**, not by pool id. The same set of trait bonuses applies to every
329
+ pool that stakes a given collection — if you run a 30-day and a 90-day pool over the same NFTs, they share one
330
+ catalog and you only manage it in one place. (Pools toggle whether the bonus is *used* via
331
+ `rewardConfig.traitBonusEnabled` and supply the signing authority; the bonus values themselves live with the
332
+ collection.)
333
+
334
+ Each row stores one absolute `bonus` amount in raw reward units per `rateInterval`. Sample Prisma schema:
335
+
336
+ ```prisma
337
+ model TraitBonusConfig {
338
+ id String @id @default(cuid())
339
+ projectId String @map("project_id")
340
+ collectionMint String @map("collection_mint") @db.VarChar(44) // base58 pubkey
341
+ traitType String @map("trait_type") @db.VarChar(64)
342
+ traitValue String @map("trait_value") @db.VarChar(64)
343
+ bonus BigInt @map("bonus") // raw reward units per rateInterval
344
+ imageUrl String? @map("image_url")
345
+ createdAt DateTime @default(now())
346
+ updatedAt DateTime @updatedAt
347
+
348
+ @@unique([collectionMint, traitType, traitValue])
349
+ @@index([projectId])
350
+ @@map("trait_bonus_configs")
351
+ }
352
+ ```
353
+
354
+ Model it however you like — Drizzle, raw Postgres, Mongo, KV, Firestore, an in-memory map for testing. The SDK only
355
+ needs a `TraitBonusStore` adapter that resolves a collection mint to its catalog rows:
356
+
357
+ ```ts
358
+ import type { TraitBonusStore } from "@soltracer/nft-staking"
359
+
360
+ // Prisma example
361
+ export const prismaTraitBonusStore: TraitBonusStore = {
362
+ async listForCollection(collectionMint) {
363
+ const rows = await prisma.traitBonusConfig.findMany({ where: { collectionMint } })
364
+ return rows.map((r) => ({
365
+ traitType: r.traitType,
366
+ value: r.traitValue,
367
+ bonus: BigInt(r.bonus),
368
+ }))
369
+ },
370
+ }
371
+
372
+ // Drizzle example (drop-in replacement)
373
+ export const drizzleTraitBonusStore: TraitBonusStore = {
374
+ async listForCollection(collectionMint) {
375
+ const rows = await db
376
+ .select()
377
+ .from(traitBonusConfig)
378
+ .where(eq(traitBonusConfig.collectionMint, collectionMint))
379
+ return rows.map((r) => ({ traitType: r.traitType, value: r.traitValue, bonus: BigInt(r.bonus) }))
380
+ },
381
+ }
382
+
383
+ // Firebase / Firestore example
384
+ // Collection layout: traitBonusConfigs/{autoId} with fields
385
+ // { projectId: string, collectionMint: string, traitType: string, traitValue: string, bonus: string }
386
+ // `bonus` is stored as a decimal string so values > 2^53 survive JSON round-trips.
387
+ import { collection, getDocs, query, where } from "firebase/firestore"
388
+ import { db as firestore } from "./firebase" // your initialised Firestore instance
389
+
390
+ export const firestoreTraitBonusStore: TraitBonusStore = {
391
+ async listForCollection(collectionMint) {
392
+ const snap = await getDocs(
393
+ query(collection(firestore, "traitBonusConfigs"), where("collectionMint", "==", collectionMint)),
394
+ )
395
+ return snap.docs.map((d) => {
396
+ const r = d.data() as { traitType: string; traitValue: string; bonus: string }
397
+ return { traitType: r.traitType, value: r.traitValue, bonus: BigInt(r.bonus) }
398
+ })
399
+ },
400
+ }
401
+
402
+ // Realtime Database variant (admin SDK)
403
+ // /traitBonusConfigs/{collectionMint}/{autoId} = { traitType, traitValue, bonus }
404
+ import { getDatabase } from "firebase-admin/database"
405
+
406
+ export const firebaseRtdbTraitBonusStore: TraitBonusStore = {
407
+ async listForCollection(collectionMint) {
408
+ const snap = await getDatabase().ref(`traitBonusConfigs/${collectionMint}`).get()
409
+ const val = (snap.val() ?? {}) as Record<string, { traitType: string; traitValue: string; bonus: string }>
410
+ return Object.values(val).map((r) => ({
411
+ traitType: r.traitType,
412
+ value: r.traitValue,
413
+ bonus: BigInt(r.bonus),
414
+ }))
415
+ },
416
+ }
417
+
418
+ // In-memory (for tests / examples)
419
+ import { InMemoryTraitBonusStore } from "@soltracer/nft-staking"
420
+ const memStore = InMemoryTraitBonusStore.from({
421
+ // key by collection mint (base58)
422
+ "5XyZ...AaBb": [{ traitType: "Rarity", value: "Mythic", bonus: 1_000_000n }],
423
+ })
424
+ ```
425
+
426
+ Recommended CRUD endpoints (the reference app exposes these as tRPC; HTTP/GraphQL works identically):
427
+
428
+ | Operation | Inputs | Behavior |
429
+ | --- | --- | --- |
430
+ | `list` | `{ projectId, collectionMint }` | Returns all catalog rows for the collection. |
431
+ | `create` | `{ projectId, collectionMint, traitType, traitValue, bonus, imageUrl? }` | Inserts one row. |
432
+ | `update` | `{ id, bonus?, imageUrl? }` | Updates a single row. |
433
+ | `delete` | `{ id }` | Deletes a row. |
434
+ | `upsert` (bulk) | `{ projectId, collectionMint, bonuses: [...] }` | Idempotent bulk replace via the unique `(collectionMint, traitType, traitValue)` index. |
435
+
436
+ Treat all five as admin-only. Gate them behind a project-authority check so non-admins can't rewrite reward rules.
437
+
438
+ #### Full backend flow with `prepareTraitProof`
439
+
440
+ ```ts
441
+ import {
442
+ prepareTraitProof,
443
+ ownershipFromClient,
444
+ type NftTraitResolver,
445
+ } from "@soltracer/nft-staking"
446
+ import nacl from "tweetnacl"
447
+
448
+ const traitBonusStore = prismaTraitBonusStore
449
+ const resolveTraits: NftTraitResolver = async (mint) => {
450
+ const nft = await metadataIndex.getByMint(mint)
451
+ return {
452
+ traits: nft.attributes.map((a) => ({ traitType: a.trait_type, value: a.value })),
453
+ // Optional — only set for NFTs that earn a per-NFT multiplier (e.g. 1-of-1s).
454
+ // Affects ONLY this NFT's own bonus sum. 10_000 = 1x, 20_000 = 2x.
455
+ multiplierBps: nft.rarityTier === "mythic" ? 20_000 : undefined,
456
+ }
457
+ }
458
+ const isStakedBy = ownershipFromClient(client) // verifies via fetchStakeEntriesByOwner
459
+
460
+ // ── POST /api/staking/trait-proof
461
+ async function handleProofRequest(req: { wallet: PublicKey; poolId: number; mints: string[] }) {
462
+ const pool = await client.fetchStakePool(undefined, req.poolId)
463
+ const staker = await client.fetchStakerAccount(req.poolId, req.wallet)
464
+
465
+ const { message, traitBonusRate, perNft, rejectedMints } = await prepareTraitProof({
466
+ pool: pool.address,
467
+ wallet: req.wallet,
468
+ totalClaimed: staker.totalClaimed,
469
+ poolId: req.poolId,
470
+ // Catalog is keyed by collection mint — read it straight off the pool so
471
+ // every pool over the same collection shares one set of trait bonuses.
472
+ collectionMint: pool.collectionMint.toBase58(),
473
+ mints: req.mints,
474
+ store: traitBonusStore,
475
+ resolveTraits,
476
+ isStakedBy,
477
+ })
478
+
479
+ const signature = nacl.sign.detached(message, traitAuthority.secretKey)
480
+
481
+ return {
482
+ traitBonusRate: traitBonusRate.toString(),
483
+ signature: Buffer.from(signature).toString("base64"),
484
+ traitAuthority: traitAuthority.publicKey.toBase58(),
485
+ perNft: perNft.map((p) => ({ mint: p.mint, bonus: p.bonus.toString() })),
486
+ rejectedMints,
487
+ }
488
+ }
489
+ ```
490
+
491
+ Client side, pass the returned `signature` and `traitBonusRate` into `client.claimRewards(poolId, { traitBonusRate, fee })`
492
+ and prepend the `Ed25519Program.createInstructionWithPublicKey({ publicKey: traitAuthority, message, signature })`
493
+ instruction to the same transaction.
494
+
495
+ #### Composing the pipeline manually
496
+
497
+ If you already own ownership validation or trait resolution, use the lower-level helpers directly:
303
498
 
304
499
  ```ts
305
500
  import {
@@ -310,74 +505,82 @@ import {
310
505
  } from "@soltracer/nft-staking"
311
506
  import nacl from "tweetnacl"
312
507
 
313
- // ── Server: POST /claim/trait-proof body: { wallet, poolId, mints }
314
508
  async function buildProof(req: { wallet: PublicKey; poolId: number; mints: string[] }) {
315
509
  // 2. Validate ownership / current stake state.
316
- const entries = await client.fetchStakeEntriesByOwner(req.poolId, req.wallet)
510
+ const entries = await client.fetchStakeEntriesByOwner(req.wallet, req.poolId)
317
511
  const stakedSet = new Set(entries.map((e) => e.nftMint.toBase58()))
318
512
  const ownedMints = req.mints.filter((m) => stakedSet.has(m))
319
513
 
320
- // 3. Resolve traits from your collection catalog.
514
+ // 3. Resolve traits + optional per-NFT multiplier.
321
515
  const nfts: NftTraitInput[] = await Promise.all(
322
- ownedMints.map(async (mint) => ({
323
- mint,
324
- traits: await catalog.getTraits(mint), // [{ traitType, value }, ..]
325
- })),
516
+ ownedMints.map(async (mint) => {
517
+ const meta = await catalog.getMint(mint)
518
+ return {
519
+ mint,
520
+ traits: meta.traits, // [{ traitType, value }, ..]
521
+ multiplierBps: meta.multiplierBps, // optional, per-NFT only
522
+ }
523
+ }),
326
524
  )
327
525
 
328
- // 4 + 5. Mode-aware aggregation against the project's bonus catalog.
329
- const pool = await client.fetchStakePool(undefined, req.poolId)
526
+ // 4–6. Per-NFT lookup optional per-NFT multiply → global sum.
330
527
  const bonusCatalog: TraitBonusCatalogEntry[] = [
331
- { traitType: "Background", value: "Mythic", bonusBps: 2500 }, // +25%
332
- { traitType: "Eyes", value: "Laser", bonusBps: 1000 }, // +10%
333
- { traitType: "Head", value: "Gold Crown", bonusBps: 500 }, // +5%
528
+ { traitType: "Background", value: "Mythic", bonus: 25_000_000n },
529
+ { traitType: "Eyes", value: "Laser", bonus: 10_000_000n },
530
+ { traitType: "Head", value: "Gold Crown", bonus: 5_000_000n },
334
531
  ]
335
532
  const { traitBonusRate, perNft } = computeTraitBonusRate({
336
- traitBonusMode: pool.rewardConfig.traitBonusMode as 0 | 1 | 2,
337
533
  catalog: bonusCatalog,
338
534
  nfts,
339
535
  })
340
536
 
341
- // 6. Sign the aggregated rate.
342
- const stakerAccount = await client.fetchStakerAccount(req.poolId, req.wallet)
537
+ // 7. Sign the aggregated rate.
538
+ const staker = await client.fetchStakerAccount(req.poolId, req.wallet)
539
+ const pool = await client.fetchStakePool(undefined, req.poolId)
343
540
  const message = buildTraitProofMessage({
344
541
  pool: pool.address,
345
542
  wallet: req.wallet,
346
543
  traitBonusRate,
347
- totalClaimed: stakerAccount.totalClaimed,
544
+ totalClaimed: staker.totalClaimed,
348
545
  })
349
546
  const signature = nacl.sign.detached(message, traitAuthority.secretKey)
350
547
  return { traitBonusRate: traitBonusRate.toString(), signature, perNft }
351
548
  }
352
549
  ```
353
550
 
354
- > ⚠️ Re-run the entire pipeline on every claim. The staked set, NFT traits, and the staker's `totalClaimed` nonce can
355
- > all change between claims; a stale proof is rejected on-chain.
551
+ > ⚠️ Re-run the entire pipeline on every claim. The staked set, NFT traits, and `staker.totalClaimed` can all change
552
+ > between claims; a stale proof is rejected on-chain.
356
553
 
357
- Examples per mode:
554
+ #### Per-NFT multiplier example
358
555
 
359
- | Mode | Catalog field | What 1 matched trait contributes | Final `traitBonusRate` |
360
- | --- | --- | --- | --- |
361
- | `FixedExtra` | `fixedExtra: 100` | +100 reward tokens per `rateInterval` | Sum across every matched trait on every validated NFT. |
362
- | `BaseMultiplier` | `bonusBps: 500` | +5% over the staker's current effective rate | Sum across every matched trait on every validated NFT. `10_000` ⇒ 2x base for that claim window. |
556
+ Catalog row: `{ traitType: "Rarity", value: "Mythic", bonus: 1_000_000n }`.
557
+ Staker has two staked NFTs:
363
558
 
364
- Trait proof messages bind the pool, wallet, signed rate, and the staker account's strictly-monotonic `totalClaimed`
365
- counter. A new proof is required after every successful claim because `totalClaimed` advances.
559
+ | NFT | Traits matched | Pre-multiplier sum | `multiplierBps` | Post-multiplier sum |
560
+ | ---- | -------------- | ------------------ | --------------- | ------------------- |
561
+ | A | Rarity = Mythic | 1_000_000n | 20_000 (2×) | 2_000_000n |
562
+ | B | (none) | 0n | (n/a) | 0n |
366
563
 
367
- Use the SDK's `buildTraitProofMessage` helper to assemble the exact 80-byte payload the on-chain verifier rebuilds
368
- (`pool wallet rate u64 LE totalClaimed u64 LE`):
564
+ `traitBonusRate = 2_000_000n + 0n = 2_000_000n`. The mythic multiplier doubles A's contribution; B is unaffected.
565
+ Compare to the old `BaseMultiplier` model, which would have doubled the rewards from B as well — that bug is why the
566
+ on-chain enum was replaced with a boolean.
567
+
568
+ #### Trait proof message format
569
+
570
+ The Ed25519 verifier rebuilds an 80-byte payload: `pool ‖ wallet ‖ traitBonusRate u64 LE ‖ totalClaimed u64 LE`. Use
571
+ `buildTraitProofMessage` to construct it identically.
369
572
 
370
573
  ```ts
371
574
  import nacl from "tweetnacl"
372
575
  import { Ed25519Program, Transaction } from "@solana/web3.js"
373
576
  import { buildTraitProofMessage } from "@soltracer/nft-staking"
374
577
 
375
- const stakerAccount = await client.fetchStakerAccount(poolId, wallet)
578
+ const staker = await client.fetchStakerAccount(poolId, wallet)
376
579
  const message = buildTraitProofMessage({
377
580
  pool,
378
581
  wallet,
379
- traitBonusRate, // BN
380
- totalClaimed: stakerAccount.totalClaimed,
582
+ traitBonusRate,
583
+ totalClaimed: staker.totalClaimed,
381
584
  })
382
585
  const signature = nacl.sign.detached(message, traitAuthority.secretKey)
383
586
  const ed25519Ix = Ed25519Program.createInstructionWithPublicKey({
@@ -390,7 +593,27 @@ await provider.sendAndConfirm(new Transaction().add(ed25519Ix, claimIx))
390
593
  ```
391
594
 
392
595
  The Ed25519 verifier instruction MUST be in the same transaction as `claimRewards` and the signing pubkey MUST match
393
- `pool.traitAuthority` (or the global trait authority if configured).
596
+ `pool.traitAuthority` (or the global `stakeConfig.authority` if the pool has no override). The pool also rejects any
597
+ non-zero `traitBonusRate` when `rewardConfig.traitBonusEnabled` is `false`.
598
+
599
+ #### Trait authority scope — per-project, not platform-global
600
+
601
+ There is **no platform-wide trait authority**. The on-chain hierarchy is:
602
+
603
+ | Account | Field | Scope | How to set |
604
+ | --- | --- | --- | --- |
605
+ | `StakePool` | `traitAuthority` | **Per pool** (overrides the project default when non-zero) | `updateStakePool(poolId, { traitAuthority: <pubkey> })` |
606
+ | `StakeConfig` | `authority` | **Per project** (used as fallback when `pool.traitAuthority == Pubkey::default()`) | Set when the project's `StakeConfig` is initialised; rotated via your project-management flow. |
607
+
608
+ In practice each project has its own `StakeConfig` PDA — the same wallet that authorises pool admin actions also acts
609
+ as the default trait signer for that project. To use a separate, dedicated trait-signing wallet (recommended so you
610
+ can rotate it without touching the admin key), call `updateStakePool` with `traitAuthority` set to the dedicated
611
+ keypair's pubkey. Pass `Pubkey::default()` (32 zero bytes) to clear the override and fall back to
612
+ `stakeConfig.authority`.
613
+
614
+ Because the authority is scoped to one project's pools, multi-project deployments must run one signing service (or one
615
+ keypair) **per project**. Do not share a single signer across projects unless you also re-use the same `StakeConfig`
616
+ authority across them.
394
617
 
395
618
  ### Merkle Gate Proofs
396
619
 
package/dist/client.d.ts CHANGED
@@ -217,7 +217,7 @@ export declare class NftStakingClient {
217
217
  rewardMint: PkInput;
218
218
  baseRate: number;
219
219
  rateInterval: number;
220
- traitBonusMode: number;
220
+ traitBonusEnabled: boolean;
221
221
  quantityThresholds: QuantityBonusInput[];
222
222
  }, lockConfigs: {
223
223
  lockDuration: number;
@@ -236,7 +236,7 @@ export declare class NftStakingClient {
236
236
  rewardMint: PkInput;
237
237
  baseRate: number;
238
238
  rateInterval: number;
239
- traitBonusMode: number;
239
+ traitBonusEnabled: boolean;
240
240
  quantityThresholds: QuantityBonusInput[];
241
241
  } | null;
242
242
  lockConfigs?: {
@@ -267,6 +267,19 @@ export declare class NftStakingClient {
267
267
  destinationTokenAccount?: PkInput;
268
268
  projectId?: number;
269
269
  }): Promise<TransactionInstruction>;
270
+ /**
271
+ * Permanently close (delete) a stake pool. The pool account is closed and
272
+ * rent is refunded to `authority`. The on-chain handler requires:
273
+ *
274
+ * - `is_active == false` — call `updateStakePool({ isActive: false })` first.
275
+ * - `total_staked == 0` — every NFT must be unstaked.
276
+ * - `total_obligation_pending == 0` — every staker must have claimed.
277
+ * - For token-reward pools, the `reward_vault` ATA must hold zero —
278
+ * drain via `withdrawRewardVault` before closing.
279
+ *
280
+ * The reward vault and its token program are auto-resolved from the pool
281
+ * for token-reward pools. Points/SOL pools pass `null` automatically.
282
+ */
270
283
  closeStakePool(poolId: number, projectId?: number): Promise<TransactionInstruction>;
271
284
  /** Stake a legacy/pNFT. Auto-resolves stakingMode from pool. */
272
285
  stakeNft(poolId: number, nftMint: PkInput, opts?: {
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -731,7 +731,7 @@ export class NftStakingClient {
731
731
  rewardMint: _rewardMint,
732
732
  baseRate: new BN(Math.round(rewardConfig.baseRate * multiplier)),
733
733
  rateInterval: new BN(rewardConfig.rateInterval),
734
- traitBonusMode: rewardConfig.traitBonusMode,
734
+ traitBonusEnabled: rewardConfig.traitBonusEnabled,
735
735
  quantityThresholds: rewardConfig.quantityThresholds.map(normalizeQuantityBonus),
736
736
  };
737
737
  const rawLockConfigs = lockConfigs.map((lc) => ({
@@ -790,7 +790,7 @@ export class NftStakingClient {
790
790
  rewardMint: _rMint,
791
791
  baseRate: new BN(Math.round(rewardConfig.baseRate * multiplier)),
792
792
  rateInterval: new BN(rewardConfig.rateInterval),
793
- traitBonusMode: rewardConfig.traitBonusMode,
793
+ traitBonusEnabled: rewardConfig.traitBonusEnabled,
794
794
  quantityThresholds: rewardConfig.quantityThresholds.map(normalizeQuantityBonus),
795
795
  };
796
796
  }
@@ -884,18 +884,42 @@ export class NftStakingClient {
884
884
  })
885
885
  .instruction();
886
886
  }
887
+ /**
888
+ * Permanently close (delete) a stake pool. The pool account is closed and
889
+ * rent is refunded to `authority`. The on-chain handler requires:
890
+ *
891
+ * - `is_active == false` — call `updateStakePool({ isActive: false })` first.
892
+ * - `total_staked == 0` — every NFT must be unstaked.
893
+ * - `total_obligation_pending == 0` — every staker must have claimed.
894
+ * - For token-reward pools, the `reward_vault` ATA must hold zero —
895
+ * drain via `withdrawRewardVault` before closing.
896
+ *
897
+ * The reward vault and its token program are auto-resolved from the pool
898
+ * for token-reward pools. Points/SOL pools pass `null` automatically.
899
+ */
887
900
  async closeStakePool(poolId, projectId) {
888
901
  const pid = this.resolveProjectId(projectId);
889
902
  const [poolPda] = getStakePoolPda(pid, poolId);
890
903
  const [project] = getProjectPda(pid);
904
+ // Token-reward pools must pass the (empty) reward vault so the program
905
+ // can assert it. Points pools omit it.
906
+ const pool = await this.fetchStakePool(pid, poolId);
907
+ let rewardVault = null;
908
+ let tokenProgram = null;
909
+ if (pool && pool.rewardConfig.rewardType === 0 /* Token */) {
910
+ const rewardMint = toPk(pool.rewardConfig.rewardMint);
911
+ tokenProgram = await this.resolveTokenProgram(rewardMint);
912
+ const [poolAuthority] = getPoolAuthorityPda(pid, poolId);
913
+ rewardVault = getAta(poolAuthority, rewardMint, tokenProgram);
914
+ }
891
915
  return this.program.methods
892
916
  .closeStakePool(new BN(pid), new BN(poolId))
893
917
  .accountsStrict({
894
918
  pool: poolPda,
895
919
  project,
896
920
  projectManagementProgram: PROJECT_MANAGEMENT_PROGRAM_ID,
897
- rewardVault: null,
898
- tokenProgram: null,
921
+ rewardVault,
922
+ tokenProgram,
899
923
  authority: this.provider.wallet.publicKey,
900
924
  })
901
925
  .instruction();