@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 +69 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/traitProof.d.ts +39 -0
- package/dist/traitProof.d.ts.map +1 -1
- package/dist/traitProof.js +66 -0
- package/dist/traitProof.js.map +1 -1
- package/package.json +1 -1
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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"}
|
package/dist/traitProof.d.ts
CHANGED
|
@@ -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
|
package/dist/traitProof.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/traitProof.js
CHANGED
|
@@ -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
|
package/dist/traitProof.js.map
CHANGED
|
@@ -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":"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"}
|