@soltracer/nft-staking 0.2.7 → 0.2.8

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
@@ -277,6 +277,75 @@ Early-unstake penalties apply on exit when configured.
277
277
  - `2` / `BaseMultiplier`: `traitBonusRate` is bonus basis points over the staker's current base effective rate. `10_000`
278
278
  means +100%, so total accrual for that window is 2x base.
279
279
 
280
+ #### Aggregating per-trait bonuses
281
+
282
+ The on-chain instruction accepts a **single** `u64` `traitBonusRate` per claim — it has no notion of per-trait or
283
+ per-NFT granularity. When a staker has N NFTs each with M bonus-bearing traits, the off-chain trait-authority server is
284
+ responsible for:
285
+
286
+ 1. Resolving the **active staked set** for the wallet (e.g. `client.fetchStakeEntriesByOwner(poolId, wallet)`).
287
+ 2. Looking up the bonus metadata for every trait on every staked NFT (this comes from your own catalog — the
288
+ chain stores no trait data).
289
+ 3. **Summing** the per-trait bonuses into one number, using the pool's `traitBonusMode`:
290
+ - `FixedExtra`: sum absolute reward-per-interval values across all bonus traits.
291
+ - `BaseMultiplier`: sum BPS values across all bonus traits (the result scales the whole staker rate).
292
+ 4. Signing the proof for that aggregated rate with the pool's `traitAuthority` keypair.
293
+
294
+ Use `aggregateTraitBonusRate` to do step 3 safely (it enforces mode/field consistency and rejects mixing `bonusBps`
295
+ with `fixedExtra` on the same trait):
296
+
297
+ ```ts
298
+ import {
299
+ aggregateTraitBonusRate,
300
+ buildTraitProofMessage,
301
+ } from "@soltracer/nft-staking"
302
+
303
+ // 1. Resolve staker's active NFTs
304
+ const entries = await client.fetchStakeEntriesByOwner(poolId, wallet)
305
+
306
+ // 2. Look up bonuses for each trait of each staked NFT (from your catalog)
307
+ // BaseMultiplier example — pool grants BPS bonuses per trait.
308
+ const traitBonuses: Array<{ bonusBps?: number; fixedExtra?: number }> = []
309
+ for (const entry of entries) {
310
+ const meta = await catalog.getNftTraits(entry.nftMint)
311
+ // meta looks like: [{ traitType: "Background", value: "Mythic", bonusBps: 2500 }, …]
312
+ for (const trait of meta) {
313
+ if (trait.bonusBps && trait.bonusBps > 0) {
314
+ traitBonuses.push({ bonusBps: trait.bonusBps })
315
+ }
316
+ }
317
+ }
318
+
319
+ // 3. Aggregate to a single u64 (mode 2 = BaseMultiplier).
320
+ // Result: 4_000 means +40% over the staker's current effective_rate for this claim window.
321
+ const pool = await client.fetchStakePool(undefined, poolId)
322
+ const traitBonusRate = aggregateTraitBonusRate(
323
+ traitBonuses,
324
+ pool.rewardConfig.traitBonusMode as 0 | 1 | 2,
325
+ )
326
+
327
+ // 4. Sign the aggregated rate.
328
+ const stakerAccount = await client.fetchStakerAccount(poolId, wallet)
329
+ const message = buildTraitProofMessage({
330
+ pool: poolPda,
331
+ wallet,
332
+ traitBonusRate,
333
+ totalClaimed: stakerAccount.totalClaimed,
334
+ })
335
+ const signature = nacl.sign.detached(message, traitAuthority.secretKey)
336
+ ```
337
+
338
+ > ⚠️ Re-aggregate on every claim. The active staked set, traits, and per-trait bonus tables can all change between
339
+ > claims, and the on-chain message also binds `staker.totalClaimed` which advances after every successful claim (see
340
+ > audit fix F-H2 below).
341
+
342
+ Examples per mode:
343
+
344
+ | Mode | Per-trait field | What 1 trait contributes | Final `traitBonusRate` |
345
+ | --- | --- | --- | --- |
346
+ | `FixedExtra` | `fixedExtra: 100` | +100 reward tokens per `rateInterval` | Sum of every staked NFT's per-trait `fixedExtra`. |
347
+ | `BaseMultiplier` | `bonusBps: 500` | +5% over the staker's current effective rate | Sum of every staked NFT's per-trait BPS. `10_000` ⇒ 2x base. |
348
+
280
349
  Trait proof messages bind the pool, wallet, signed rate, and the staker account's strictly-monotonic `totalClaimed`
281
350
  counter (audit fix F-H2 — replaces the prior `lastUpdateAt` nonce to eliminate same-second replay). A new proof is
282
351
  required after every successful claim because `totalClaimed` advances.
package/dist/index.d.ts CHANGED
@@ -4,6 +4,6 @@ export { type NftStaking as NftStakingIDLType } from "./idl";
4
4
  export { default as NftStakingIDL } from "./idl.json";
5
5
  export * from "./errors";
6
6
  export * from "./helpers";
7
- export { buildTraitProofMessage, TRAIT_PROOF_MSG_LEN } from "./traitProof";
7
+ export { buildTraitProofMessage, TRAIT_PROOF_MSG_LEN, aggregateTraitBonusRate } from "./traitProof";
8
8
  export { GATE_TYPE_NONE, GATE_TYPE_WALLET, GATE_TYPE_TOKEN_MINT, type GateType, type MerkleTree, hashLeaf, hashPair, buildMerkleTree, getMerkleProof, proofToAnchorArg, rootToAnchorArg, } from "./merkle";
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,KAAK,UAAU,IAAI,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,YAAY,CAAA;AACrD,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,KAAK,UAAU,IAAI,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,YAAY,CAAA;AACrD,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACnG,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,UAAU,CAAA"}
package/dist/index.js CHANGED
@@ -3,6 +3,6 @@ export { NFT_STAKING_PROGRAM_ID, getStakeConfigPda, getStakePoolPda, getStakeEnt
3
3
  export { default as NftStakingIDL } from "./idl.json";
4
4
  export * from "./errors";
5
5
  export * from "./helpers";
6
- export { buildTraitProofMessage, TRAIT_PROOF_MSG_LEN } from "./traitProof";
6
+ export { buildTraitProofMessage, TRAIT_PROOF_MSG_LEN, aggregateTraitBonusRate } from "./traitProof";
7
7
  export { GATE_TYPE_NONE, GATE_TYPE_WALLET, GATE_TYPE_TOKEN_MINT, hashLeaf, hashPair, buildMerkleTree, getMerkleProof, proofToAnchorArg, rootToAnchorArg, } from "./merkle";
8
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAKjB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,YAAY,CAAA;AACrD,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EAGpB,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAKjB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,YAAY,CAAA;AACrD,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACnG,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EAGpB,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,UAAU,CAAA"}
@@ -58,4 +58,43 @@ export declare function buildTraitProofMessage(params: {
58
58
  * await provider.sendAndConfirm(new Transaction().add(ed25519Ix, claimIx))
59
59
  * ```
60
60
  */
61
+ /**
62
+ * Mode-aware trait-bonus rate aggregator.
63
+ *
64
+ * The on-chain `claim_rewards` instruction accepts a **single** `u64`
65
+ * `traitBonusRate` per claim — the chain knows nothing about per-trait
66
+ * granularity. Aggregation across N staked NFTs (each with M traits) is the
67
+ * caller's responsibility, and the math depends on the pool's
68
+ * `rewardConfig.traitBonusMode`:
69
+ *
70
+ * - `0` / `None` — proofs disabled. Any non-zero rate is rejected.
71
+ * - `1` / `FixedExtra` — `traitBonusRate` is **absolute extra reward per
72
+ * `rateInterval`** added to the staker's effective rate for the claim
73
+ * accrual window. Sum per-trait fixed bonuses across every active staked
74
+ * NFT (and every bonus-bearing trait on each).
75
+ * - `2` / `BaseMultiplier` — `traitBonusRate` is **bonus BPS** applied to the
76
+ * staker's CURRENT `effective_rate` (already includes lock-tier rates).
77
+ * `10_000` = +100% (2x base for the window). Sum per-trait BPS bonuses the
78
+ * same way — the bonus is a scalar over the whole staker rate.
79
+ *
80
+ * `bonusBps` and `fixedExtra` fields are mutually exclusive; mixing both in
81
+ * one trait entry throws. Traits without bonuses can be omitted.
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * // Pool is in BaseMultiplier mode. Each staked NFT exposes its trait list.
86
+ * const traits = [
87
+ * // NFT 1 — "Gold" head (+5%), "Laser Eyes" (+10%)
88
+ * { bonusBps: 500 }, { bonusBps: 1000 },
89
+ * // NFT 2 — "Mythic Background" (+25%)
90
+ * { bonusBps: 2500 },
91
+ * ]
92
+ * const rate = aggregateTraitBonusRate(traits, 2) // → 4000 (i.e. +40% for the window)
93
+ * const message = buildTraitProofMessage({ pool, wallet, traitBonusRate: rate, totalClaimed })
94
+ * ```
95
+ */
96
+ export declare function aggregateTraitBonusRate(traits: ReadonlyArray<{
97
+ bonusBps?: number | bigint;
98
+ fixedExtra?: number | bigint;
99
+ }>, traitBonusMode: 0 | 1 | 2): bigint;
61
100
  //# sourceMappingURL=traitProof.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traitProof.d.ts","sourceRoot":"","sources":["../src/traitProof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAQ,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAElE,sEAAsE;AACtE,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAcrC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,cAAc,EAAE,OAAO,CAAA;IACvB,8DAA8D;IAC9D,YAAY,EAAE,OAAO,CAAA;CACtB,GAAG,MAAM,CAOT;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
1
+ {"version":3,"file":"traitProof.d.ts","sourceRoot":"","sources":["../src/traitProof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAQ,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAElE,sEAAsE;AACtE,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAcrC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,cAAc,EAAE,OAAO,CAAA;IACvB,8DAA8D;IAC9D,YAAY,EAAE,OAAO,CAAA;CACtB,GAAG,MAAM,CAOT;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC,EACnF,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GACxB,MAAM,CAqCR"}
@@ -69,4 +69,70 @@ export function buildTraitProofMessage(params) {
69
69
  * await provider.sendAndConfirm(new Transaction().add(ed25519Ix, claimIx))
70
70
  * ```
71
71
  */
72
+ /**
73
+ * Mode-aware trait-bonus rate aggregator.
74
+ *
75
+ * The on-chain `claim_rewards` instruction accepts a **single** `u64`
76
+ * `traitBonusRate` per claim — the chain knows nothing about per-trait
77
+ * granularity. Aggregation across N staked NFTs (each with M traits) is the
78
+ * caller's responsibility, and the math depends on the pool's
79
+ * `rewardConfig.traitBonusMode`:
80
+ *
81
+ * - `0` / `None` — proofs disabled. Any non-zero rate is rejected.
82
+ * - `1` / `FixedExtra` — `traitBonusRate` is **absolute extra reward per
83
+ * `rateInterval`** added to the staker's effective rate for the claim
84
+ * accrual window. Sum per-trait fixed bonuses across every active staked
85
+ * NFT (and every bonus-bearing trait on each).
86
+ * - `2` / `BaseMultiplier` — `traitBonusRate` is **bonus BPS** applied to the
87
+ * staker's CURRENT `effective_rate` (already includes lock-tier rates).
88
+ * `10_000` = +100% (2x base for the window). Sum per-trait BPS bonuses the
89
+ * same way — the bonus is a scalar over the whole staker rate.
90
+ *
91
+ * `bonusBps` and `fixedExtra` fields are mutually exclusive; mixing both in
92
+ * one trait entry throws. Traits without bonuses can be omitted.
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * // Pool is in BaseMultiplier mode. Each staked NFT exposes its trait list.
97
+ * const traits = [
98
+ * // NFT 1 — "Gold" head (+5%), "Laser Eyes" (+10%)
99
+ * { bonusBps: 500 }, { bonusBps: 1000 },
100
+ * // NFT 2 — "Mythic Background" (+25%)
101
+ * { bonusBps: 2500 },
102
+ * ]
103
+ * const rate = aggregateTraitBonusRate(traits, 2) // → 4000 (i.e. +40% for the window)
104
+ * const message = buildTraitProofMessage({ pool, wallet, traitBonusRate: rate, totalClaimed })
105
+ * ```
106
+ */
107
+ export function aggregateTraitBonusRate(traits, traitBonusMode) {
108
+ if (traitBonusMode === 0) {
109
+ if (traits.some((t) => (t.bonusBps ?? 0) !== 0 || (t.fixedExtra ?? 0) !== 0)) {
110
+ throw new Error("aggregateTraitBonusRate: pool.traitBonusMode === None — non-zero trait bonuses are rejected on-chain.");
111
+ }
112
+ return 0n;
113
+ }
114
+ let sum = 0n;
115
+ for (const t of traits) {
116
+ const bps = BigInt(t.bonusBps ?? 0);
117
+ const extra = BigInt(t.fixedExtra ?? 0);
118
+ if (bps !== 0n && extra !== 0n) {
119
+ throw new Error("aggregateTraitBonusRate: a single trait must set bonusBps OR fixedExtra, not both.");
120
+ }
121
+ if (traitBonusMode === 1) {
122
+ // FixedExtra — sum absolute per-interval bonuses.
123
+ if (bps !== 0n) {
124
+ throw new Error("aggregateTraitBonusRate: traitBonusMode = FixedExtra expects fixedExtra (per-interval reward), not bonusBps.");
125
+ }
126
+ sum += extra;
127
+ }
128
+ else {
129
+ // BaseMultiplier — sum BPS bonuses.
130
+ if (extra !== 0n) {
131
+ throw new Error("aggregateTraitBonusRate: traitBonusMode = BaseMultiplier expects bonusBps (10_000 = +100%), not fixedExtra.");
132
+ }
133
+ sum += bps;
134
+ }
135
+ }
136
+ return sum;
137
+ }
72
138
  //# sourceMappingURL=traitProof.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"traitProof.js","sourceRoot":"","sources":["../src/traitProof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,IAAI,EAA8B,MAAM,iBAAiB,CAAA;AAElE,sEAAsE;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAA;AAErC,SAAS,KAAK,CAAC,KAAc;IAC3B,MAAM,EAAE,GACN,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;IACxB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAMtC;IACC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC5C,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC1C,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACxC,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
1
+ {"version":3,"file":"traitProof.js","sourceRoot":"","sources":["../src/traitProof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,IAAI,EAA8B,MAAM,iBAAiB,CAAA;AAElE,sEAAsE;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAA;AAErC,SAAS,KAAK,CAAC,KAAc;IAC3B,MAAM,EAAE,GACN,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;IACxB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAMtC;IACC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC5C,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC1C,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACxC,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAmF,EACnF,cAAyB;IAEzB,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7E,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAA;QACH,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAA;QACvC,IAAI,GAAG,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAA;QACH,CAAC;QACD,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,kDAAkD;YAClD,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,8GAA8G,CAC/G,CAAA;YACH,CAAC;YACD,GAAG,IAAI,KAAK,CAAA;QACd,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAA;YACH,CAAC;YACD,GAAG,IAAI,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soltracer/nft-staking",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",