@exponent-labs/exponent-fetcher 0.9.11 → 0.9.13
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/build/constants.js +3 -3
- package/build/constants.js.map +1 -1
- package/build/exponentFetcher.d.ts +18 -16
- package/build/exponentFetcher.js +74 -141
- package/build/exponentFetcher.js.map +1 -1
- package/build/utils/adrena.d.ts +0 -2
- package/build/utils/adrena.js +1 -2
- package/build/utils/adrena.js.map +1 -1
- package/build/utils/fragmetric.d.ts +0 -2
- package/build/utils/fragmetric.js +2 -2
- package/build/utils/fragmetric.js.map +1 -1
- package/build/utils/jito.d.ts +0 -2
- package/build/utils/jito.js +1 -2
- package/build/utils/jito.js.map +1 -1
- package/build/utils/jupiter.d.ts +0 -2
- package/build/utils/jupiter.js +2 -3
- package/build/utils/jupiter.js.map +1 -1
- package/build/utils/kamino.d.ts +0 -2
- package/build/utils/kamino.js +1 -2
- package/build/utils/kamino.js.map +1 -1
- package/build/utils/meteora.d.ts +0 -3
- package/build/utils/meteora.js +5 -5
- package/build/utils/meteora.js.map +1 -1
- package/build/utils/ore.d.ts +6 -21
- package/build/utils/ore.js +30 -85
- package/build/utils/ore.js.map +1 -1
- package/build/utils/perena.d.ts +0 -2
- package/build/utils/perena.js +2 -3
- package/build/utils/perena.js.map +1 -1
- package/build/utils/sanctum.d.ts +0 -2
- package/build/utils/sanctum.js +1 -2
- package/build/utils/sanctum.js.map +1 -1
- package/build/utils/solstice.d.ts +9 -2
- package/build/utils/solstice.js +20 -2
- package/build/utils/solstice.js.map +1 -1
- package/package.json +21 -21
- package/src/exponentFetcher.ts +75 -155
- package/src/utils/ore.ts +36 -122
- package/src/utils/solstice.ts +27 -0
package/build/utils/ore.js
CHANGED
|
@@ -3,13 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.calculateOreExchangeRate =
|
|
6
|
+
exports.calculateOreExchangeRate = calculateOreExchangeRate;
|
|
7
7
|
const anchor_1 = require("@coral-xyz/anchor");
|
|
8
8
|
const anchor_2 = require("@coral-xyz/anchor");
|
|
9
9
|
const spl_token_1 = require("@solana/spl-token");
|
|
10
10
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
11
|
-
// Steel's Numeric type is
|
|
12
|
-
const
|
|
11
|
+
// Steel's Numeric type is an I80F48 fixed-point number.
|
|
12
|
+
const NUMERIC_SCALE = new decimal_js_1.default(2).pow(48);
|
|
13
13
|
/**
|
|
14
14
|
* Deserialize a steel Numeric type from buffer
|
|
15
15
|
* Numeric is stored as u128 (16 bytes = 2 x u64, little-endian)
|
|
@@ -18,24 +18,22 @@ function deserializeNumeric(data, offset) {
|
|
|
18
18
|
const low = new anchor_1.BN(data.slice(offset, offset + 8), "le");
|
|
19
19
|
const high = new anchor_1.BN(data.slice(offset + 8, offset + 16), "le");
|
|
20
20
|
const rawValue = low.add(high.shln(64));
|
|
21
|
-
const decimalValue = new decimal_js_1.default(rawValue.toString()).div(
|
|
21
|
+
const decimalValue = new decimal_js_1.default(rawValue.toString()).div(NUMERIC_SCALE);
|
|
22
22
|
return { rawValue, decimalValue };
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* Deserialize Stake account from Buffer
|
|
26
26
|
* Skips the 8-byte steel discriminator and deserializes the struct fields
|
|
27
27
|
*
|
|
28
|
-
* Account layout (
|
|
28
|
+
* Account layout (120 bytes total):
|
|
29
29
|
* - discriminator: 8 bytes
|
|
30
30
|
* - authority: 32 bytes
|
|
31
31
|
* - balance: 8 bytes
|
|
32
|
-
* -
|
|
33
|
-
* - compound_fee_reserve: 8 bytes
|
|
32
|
+
* - compound_fee, compound_fee_reserve: 16 bytes (2 x u64)
|
|
34
33
|
* - last_claim_at, last_deposit_at, last_withdraw_at: 24 bytes (3 x i64)
|
|
35
|
-
* - rewards_factor: 16 bytes (
|
|
34
|
+
* - rewards_factor: 16 bytes (I80F48 Numeric)
|
|
36
35
|
* - rewards: 8 bytes
|
|
37
36
|
* - lifetime_rewards: 8 bytes
|
|
38
|
-
* - buffer_f: 8 bytes
|
|
39
37
|
*/
|
|
40
38
|
function deserializeStakeAccount(stakeData) {
|
|
41
39
|
const DISCRIMINATOR_SIZE = 8;
|
|
@@ -46,17 +44,8 @@ function deserializeStakeAccount(stakeData) {
|
|
|
46
44
|
// balance: u64 (8 bytes)
|
|
47
45
|
const balance = new anchor_1.BN(stakeData.slice(offset, offset + 8), "le");
|
|
48
46
|
offset += 8;
|
|
49
|
-
//
|
|
50
|
-
const
|
|
51
|
-
offset += 8;
|
|
52
|
-
// buffer_b: u64 (8 bytes)
|
|
53
|
-
const bufferB = new anchor_1.BN(stakeData.slice(offset, offset + 8), "le");
|
|
54
|
-
offset += 8;
|
|
55
|
-
// buffer_c: u64 (8 bytes)
|
|
56
|
-
const bufferC = new anchor_1.BN(stakeData.slice(offset, offset + 8), "le");
|
|
57
|
-
offset += 8;
|
|
58
|
-
// buffer_d: u64 (8 bytes)
|
|
59
|
-
const bufferD = new anchor_1.BN(stakeData.slice(offset, offset + 8), "le");
|
|
47
|
+
// compound_fee: u64 (8 bytes)
|
|
48
|
+
const compoundFee = new anchor_1.BN(stakeData.slice(offset, offset + 8), "le");
|
|
60
49
|
offset += 8;
|
|
61
50
|
// compound_fee_reserve: u64 (8 bytes)
|
|
62
51
|
const compoundFeeReserve = new anchor_1.BN(stakeData.slice(offset, offset + 8), "le");
|
|
@@ -70,7 +59,7 @@ function deserializeStakeAccount(stakeData) {
|
|
|
70
59
|
// last_withdraw_at: i64 (8 bytes)
|
|
71
60
|
const lastWithdrawAt = new anchor_1.BN(stakeData.slice(offset, offset + 8), "le");
|
|
72
61
|
offset += 8;
|
|
73
|
-
// rewards_factor: Numeric (16 bytes =
|
|
62
|
+
// rewards_factor: Numeric (16 bytes = I80F48)
|
|
74
63
|
const rewardsFactor = deserializeNumeric(stakeData, offset);
|
|
75
64
|
offset += 16;
|
|
76
65
|
// rewards: u64 (8 bytes)
|
|
@@ -78,16 +67,10 @@ function deserializeStakeAccount(stakeData) {
|
|
|
78
67
|
offset += 8;
|
|
79
68
|
// lifetime_rewards: u64 (8 bytes)
|
|
80
69
|
const lifetimeRewards = new anchor_1.BN(stakeData.slice(offset, offset + 8), "le");
|
|
81
|
-
offset += 8;
|
|
82
|
-
// buffer_f: u64 (8 bytes)
|
|
83
|
-
const bufferF = new anchor_1.BN(stakeData.slice(offset, offset + 8), "le");
|
|
84
70
|
return {
|
|
85
71
|
authority,
|
|
86
72
|
balance,
|
|
87
|
-
|
|
88
|
-
bufferB,
|
|
89
|
-
bufferC,
|
|
90
|
-
bufferD,
|
|
73
|
+
compoundFee,
|
|
91
74
|
compoundFeeReserve,
|
|
92
75
|
lastClaimAt,
|
|
93
76
|
lastDepositAt,
|
|
@@ -95,64 +78,28 @@ function deserializeStakeAccount(stakeData) {
|
|
|
95
78
|
rewardsFactor,
|
|
96
79
|
rewards,
|
|
97
80
|
lifetimeRewards,
|
|
98
|
-
bufferF,
|
|
99
81
|
};
|
|
100
82
|
}
|
|
101
83
|
/**
|
|
102
84
|
* Deserialize Treasury account from Buffer
|
|
103
85
|
* Skips the 8-byte steel discriminator and deserializes the struct fields
|
|
104
86
|
*
|
|
105
|
-
* Account layout (
|
|
87
|
+
* Account layout (32 bytes total):
|
|
106
88
|
* - discriminator: 8 bytes
|
|
107
|
-
* -
|
|
108
|
-
* - buffer_a: 8 bytes
|
|
109
|
-
* - motherlode: 8 bytes
|
|
110
|
-
* - miner_rewards_factor: 16 bytes (u128 Numeric)
|
|
111
|
-
* - stake_rewards_factor: 16 bytes (u128 Numeric)
|
|
112
|
-
* - buffer_b: 8 bytes
|
|
113
|
-
* - total_refined: 8 bytes
|
|
89
|
+
* - rewards_factor: 16 bytes (I80F48 Numeric)
|
|
114
90
|
* - total_staked: 8 bytes
|
|
115
|
-
* - total_unclaimed: 8 bytes
|
|
116
91
|
*/
|
|
117
92
|
function deserializeTreasuryAccount(treasuryData) {
|
|
118
93
|
const DISCRIMINATOR_SIZE = 8;
|
|
119
94
|
let offset = DISCRIMINATOR_SIZE;
|
|
120
|
-
//
|
|
121
|
-
const
|
|
122
|
-
offset += 8;
|
|
123
|
-
// buffer_a: u64 (8 bytes)
|
|
124
|
-
const bufferA = new anchor_1.BN(treasuryData.slice(offset, offset + 8), "le");
|
|
125
|
-
offset += 8;
|
|
126
|
-
// motherlode: u64 (8 bytes)
|
|
127
|
-
const motherlode = new anchor_1.BN(treasuryData.slice(offset, offset + 8), "le");
|
|
128
|
-
offset += 8;
|
|
129
|
-
// miner_rewards_factor: Numeric (16 bytes = u128)
|
|
130
|
-
const minerRewardsFactor = deserializeNumeric(treasuryData, offset);
|
|
95
|
+
// rewards_factor: Numeric (16 bytes = I80F48)
|
|
96
|
+
const rewardsFactor = deserializeNumeric(treasuryData, offset);
|
|
131
97
|
offset += 16;
|
|
132
|
-
// stake_rewards_factor: Numeric (16 bytes = u128)
|
|
133
|
-
const stakeRewardsFactor = deserializeNumeric(treasuryData, offset);
|
|
134
|
-
offset += 16;
|
|
135
|
-
// buffer_b: u64 (8 bytes)
|
|
136
|
-
const bufferB = new anchor_1.BN(treasuryData.slice(offset, offset + 8), "le");
|
|
137
|
-
offset += 8;
|
|
138
|
-
// total_refined: u64 (8 bytes)
|
|
139
|
-
const totalRefined = new anchor_1.BN(treasuryData.slice(offset, offset + 8), "le");
|
|
140
|
-
offset += 8;
|
|
141
98
|
// total_staked: u64 (8 bytes)
|
|
142
99
|
const totalStaked = new anchor_1.BN(treasuryData.slice(offset, offset + 8), "le");
|
|
143
|
-
offset += 8;
|
|
144
|
-
// total_unclaimed: u64 (8 bytes)
|
|
145
|
-
const totalUnclaimed = new anchor_1.BN(treasuryData.slice(offset, offset + 8), "le");
|
|
146
100
|
return {
|
|
147
|
-
|
|
148
|
-
bufferA,
|
|
149
|
-
motherlode,
|
|
150
|
-
minerRewardsFactor,
|
|
151
|
-
stakeRewardsFactor,
|
|
152
|
-
bufferB,
|
|
153
|
-
totalRefined,
|
|
101
|
+
rewardsFactor,
|
|
154
102
|
totalStaked,
|
|
155
|
-
totalUnclaimed,
|
|
156
103
|
};
|
|
157
104
|
}
|
|
158
105
|
/**
|
|
@@ -161,8 +108,8 @@ function deserializeTreasuryAccount(treasuryData) {
|
|
|
161
108
|
*
|
|
162
109
|
* Exchange rate formula: (stake.balance + total_rewards) / stORE_supply
|
|
163
110
|
*
|
|
164
|
-
* Where total_rewards is calculated using ORE protocol's Stake::
|
|
165
|
-
* 1. accumulated_rewards = treasury.
|
|
111
|
+
* Where total_rewards is calculated using ORE protocol's Stake::update_rewards:
|
|
112
|
+
* 1. accumulated_rewards = treasury.rewards_factor - stake.rewards_factor
|
|
166
113
|
* 2. personal_rewards = accumulated_rewards * stake.balance
|
|
167
114
|
* 3. total_rewards = stake.rewards + personal_rewards
|
|
168
115
|
*
|
|
@@ -172,8 +119,7 @@ function deserializeTreasuryAccount(treasuryData) {
|
|
|
172
119
|
* the exchange rate. The stake.balance is only updated via ORE program
|
|
173
120
|
* deposit/withdraw instructions.
|
|
174
121
|
*
|
|
175
|
-
* Note: Numeric values are stored as fixed-point numbers
|
|
176
|
-
* When multiplying two Numeric values, the result is divided by 1e12 to maintain scale.
|
|
122
|
+
* Note: Numeric values are stored as I80F48 fixed-point numbers.
|
|
177
123
|
*/
|
|
178
124
|
function calculateOreExchangeRate(accounts) {
|
|
179
125
|
const { stakeAccount, treasuryAccount, storeMint } = accounts;
|
|
@@ -189,20 +135,17 @@ function calculateOreExchangeRate(accounts) {
|
|
|
189
135
|
// Use stake.balance as the canonical staked amount (not token account balance)
|
|
190
136
|
// This prevents exchange rate manipulation via direct token transfers
|
|
191
137
|
const stakeBalance = stake.balance.toNumber();
|
|
192
|
-
// Calculate accrued rewards using ORE protocol's
|
|
193
|
-
// This mirrors the exact logic from Stake::
|
|
194
|
-
const
|
|
138
|
+
// Calculate accrued rewards using ORE protocol's update_rewards algorithm
|
|
139
|
+
// This mirrors the exact logic from Stake::update_rewards() in ore_cpi
|
|
140
|
+
const treasuryRewardsFactorDecimal = treasury.rewardsFactor.decimalValue;
|
|
195
141
|
const stakeRewardsFactorDecimal = stake.rewardsFactor.decimalValue;
|
|
196
142
|
let newlyAccruedRewards = 0;
|
|
197
|
-
if (
|
|
198
|
-
// accumulated_rewards = treasury.
|
|
199
|
-
const accumulatedRewards =
|
|
143
|
+
if (treasuryRewardsFactorDecimal.gt(stakeRewardsFactorDecimal)) {
|
|
144
|
+
// accumulated_rewards = treasury.rewards_factor - stake.rewards_factor
|
|
145
|
+
const accumulatedRewards = treasuryRewardsFactorDecimal.minus(stakeRewardsFactorDecimal);
|
|
200
146
|
// personal_rewards = accumulated_rewards * stake.balance
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
// the result is (a * b) / 1e12 to maintain scale. Then to_u64() divides by 1e12.
|
|
204
|
-
// Since decimalValue already gives us the decimal representation (divided by 1e12),
|
|
205
|
-
// we just multiply by balance and floor the result.
|
|
147
|
+
// Since decimalValue already gives us the decoded fixed-point value, we just
|
|
148
|
+
// multiply by balance and floor the result.
|
|
206
149
|
const personalRewards = accumulatedRewards.mul(new decimal_js_1.default(stakeBalance));
|
|
207
150
|
newlyAccruedRewards = Math.floor(personalRewards.toNumber());
|
|
208
151
|
}
|
|
@@ -211,7 +154,9 @@ function calculateOreExchangeRate(accounts) {
|
|
|
211
154
|
// Calculate total balance: stake.balance + total_rewards
|
|
212
155
|
const totalBalanceWithRewards = stakeBalance + totalRewards;
|
|
213
156
|
// Calculate exchange rate: (stake.balance + accrued_rewards) / stORE_supply
|
|
157
|
+
if (totalBalanceWithRewards === 0) {
|
|
158
|
+
return 1;
|
|
159
|
+
}
|
|
214
160
|
return totalBalanceWithRewards / storeSupply;
|
|
215
161
|
}
|
|
216
|
-
exports.calculateOreExchangeRate = calculateOreExchangeRate;
|
|
217
162
|
//# sourceMappingURL=ore.js.map
|
package/build/utils/ore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ore.js","sourceRoot":"","sources":["../../src/utils/ore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ore.js","sourceRoot":"","sources":["../../src/utils/ore.ts"],"names":[],"mappings":"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"}
|
package/build/utils/perena.d.ts
CHANGED
package/build/utils/perena.js
CHANGED
|
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.getPerenaLpMint = getPerenaLpMint;
|
|
7
|
+
exports.getPerenaStablePoolData = getPerenaStablePoolData;
|
|
7
8
|
const anchor_1 = require("@coral-xyz/anchor");
|
|
8
9
|
const spl_token_1 = require("@solana/spl-token");
|
|
9
10
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
@@ -12,7 +13,6 @@ function getPerenaLpMint(perenaStablePool) {
|
|
|
12
13
|
const [lpMint, _] = anchor_1.web3.PublicKey.findProgramAddressSync([perenaStablePool.toBuffer(), Buffer.from("liquidity")], PERENA_NUMERAIRE_PROGRAM);
|
|
13
14
|
return lpMint;
|
|
14
15
|
}
|
|
15
|
-
exports.getPerenaLpMint = getPerenaLpMint;
|
|
16
16
|
function getPerenaStablePoolData(accounts) {
|
|
17
17
|
const { perenaStablePoolData, lpMintData } = accounts;
|
|
18
18
|
const lpMintDeserialized = spl_token_1.MintLayout.decode(lpMintData);
|
|
@@ -23,5 +23,4 @@ function getPerenaStablePoolData(accounts) {
|
|
|
23
23
|
const exchangeRate = new decimal_js_1.default(invT.toString()).div(new decimal_js_1.default(lpMintDeserialized.supply.toString())).toString();
|
|
24
24
|
return { lpSupply: lpMintDeserialized.supply, invT, exchangeRate };
|
|
25
25
|
}
|
|
26
|
-
exports.getPerenaStablePoolData = getPerenaStablePoolData;
|
|
27
26
|
//# sourceMappingURL=perena.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perena.js","sourceRoot":"","sources":["../../src/utils/perena.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"perena.js","sourceRoot":"","sources":["../../src/utils/perena.ts"],"names":[],"mappings":";;;;;AAIA,0CAQC;AAED,0DAaC;AA3BD,8CAAwC;AACxC,iDAA8C;AAC9C,4DAAgC;AAEhC,SAAgB,eAAe,CAAC,gBAAgC;IAC9D,MAAM,wBAAwB,GAAG,IAAI,aAAI,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAA;IAElG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,aAAI,CAAC,SAAS,CAAC,sBAAsB,CACvD,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EACvD,wBAAwB,CACzB,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAgB,uBAAuB,CAAC,QAA8D;IACpG,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAA;IAErD,MAAM,kBAAkB,GAAG,sBAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAExD,MAAM,mBAAmB,GAAG,CAAC,CAAA;IAC7B,MAAM,UAAU,GAAG,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA,CAAC,wBAAwB;IACnF,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,CAAA;IACzE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAEvD,MAAM,YAAY,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,oBAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAEnH,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;AACpE,CAAC"}
|
package/build/utils/sanctum.d.ts
CHANGED
package/build/utils/sanctum.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.calculateSanctumIndex =
|
|
6
|
+
exports.calculateSanctumIndex = calculateSanctumIndex;
|
|
7
7
|
const sanctum_idl_1 = require("@exponent-labs/sanctum-idl");
|
|
8
8
|
const spl_token_1 = require("@solana/spl-token");
|
|
9
9
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
@@ -22,5 +22,4 @@ function calculateSanctumIndex(accounts) {
|
|
|
22
22
|
const exchangeRate = new decimal_js_1.default(exchangeRateBn.toString()).div(precision.toString()).toNumber();
|
|
23
23
|
return 1 / exchangeRate; // We return inverse exchange rate
|
|
24
24
|
}
|
|
25
|
-
exports.calculateSanctumIndex = calculateSanctumIndex;
|
|
26
25
|
//# sourceMappingURL=sanctum.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanctum.js","sourceRoot":"","sources":["../../src/utils/sanctum.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sanctum.js","sourceRoot":"","sources":["../../src/utils/sanctum.ts"],"names":[],"mappings":";;;;;AAKA,sDAkBC;AAvBD,4DAA4D;AAC5D,iDAA8C;AAC9C,4DAAgC;AAChC,8CAAsC;AAEtC,SAAgB,qBAAqB,CAAC,QAAqE;IACzG,MAAM,SAAS,GAAG,IAAA,6BAAe,EAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,sBAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,EAAE,sBAAU,CAAC,IAAI,CAAC,CAAC,CAAA;IAEzF,MAAM,MAAM,GAAG,IAAI,WAAE,CAAC,CAAC,CAAC,CAAA;IACxB,MAAM,SAAS,GAAG,IAAI,WAAE,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,eAAe,GAAG,IAAI,WAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IACxD,MAAM,mBAAmB,GAAG,IAAI,WAAE,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAA;IAEtE,IAAI,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,mBAAmB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAC9E,MAAM,YAAY,GAAG,IAAI,oBAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;IAEhG,OAAO,CAAC,GAAG,YAAY,CAAA,CAAC,kCAAkC;AAC5D,CAAC"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
1
|
export declare function calculateSolsticeRedemptionRate(accounts: {
|
|
4
2
|
yieldPool: Buffer;
|
|
5
3
|
vestingSchedule: Buffer;
|
|
@@ -10,3 +8,12 @@ export declare function calculateSolsticeRedemptionRate(accounts: {
|
|
|
10
8
|
vestingAmount: string;
|
|
11
9
|
totalVestedAssets: string;
|
|
12
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* Calculates the Solstice GLAM vault stSLX exchange rate using the same account
|
|
13
|
+
* layout and ratio as the Generic Standard on-chain interface.
|
|
14
|
+
*/
|
|
15
|
+
export declare function calculateSolsticeGlamVaultExchangeRate(accounts: {
|
|
16
|
+
stakingVaultSlxAta: Buffer;
|
|
17
|
+
slxMint: Buffer;
|
|
18
|
+
stslxMint: Buffer;
|
|
19
|
+
}): number;
|
package/build/utils/solstice.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.calculateSolsticeRedemptionRate =
|
|
3
|
+
exports.calculateSolsticeRedemptionRate = calculateSolsticeRedemptionRate;
|
|
4
|
+
exports.calculateSolsticeGlamVaultExchangeRate = calculateSolsticeGlamVaultExchangeRate;
|
|
4
5
|
const solstice_idl_1 = require("@exponent-labs/solstice-idl");
|
|
6
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
5
7
|
function calculateSolsticeRedemptionRate(accounts) {
|
|
6
8
|
// Decode accounts using solstice-idl package function
|
|
7
9
|
const { yieldPoolAccount, vestingScheduleAccount } = (0, solstice_idl_1.decodeYieldPoolAndVestingScheduleAccounts)({
|
|
@@ -41,5 +43,21 @@ function calculateSolsticeRedemptionRate(accounts) {
|
|
|
41
43
|
totalVestedAssets: totalVestedAssets.toString(),
|
|
42
44
|
};
|
|
43
45
|
}
|
|
44
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Calculates the Solstice GLAM vault stSLX exchange rate using the same account
|
|
48
|
+
* layout and ratio as the Generic Standard on-chain interface.
|
|
49
|
+
*/
|
|
50
|
+
function calculateSolsticeGlamVaultExchangeRate(accounts) {
|
|
51
|
+
const stakingVaultSlxAccount = spl_token_1.AccountLayout.decode(accounts.stakingVaultSlxAta.subarray(0, spl_token_1.AccountLayout.span));
|
|
52
|
+
const slxMint = spl_token_1.MintLayout.decode(accounts.slxMint.subarray(0, spl_token_1.MintLayout.span));
|
|
53
|
+
const stslxMint = spl_token_1.MintLayout.decode(accounts.stslxMint.subarray(0, spl_token_1.MintLayout.span));
|
|
54
|
+
const stakingVaultSlxBalance = BigInt(stakingVaultSlxAccount.amount.toString());
|
|
55
|
+
const stslxSupply = BigInt(stslxMint.supply.toString());
|
|
56
|
+
if (stakingVaultSlxBalance === 0n || stslxSupply === 0n) {
|
|
57
|
+
return 1;
|
|
58
|
+
}
|
|
59
|
+
const numerator = stakingVaultSlxBalance * 10n ** BigInt(stslxMint.decimals);
|
|
60
|
+
const denominator = stslxSupply * 10n ** BigInt(slxMint.decimals);
|
|
61
|
+
return Number(numerator) / Number(denominator);
|
|
62
|
+
}
|
|
45
63
|
//# sourceMappingURL=solstice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solstice.js","sourceRoot":"","sources":["../../src/utils/solstice.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"solstice.js","sourceRoot":"","sources":["../../src/utils/solstice.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exponent-labs/exponent-fetcher",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.13",
|
|
4
4
|
"main": "build/index.js",
|
|
5
5
|
"types": "build/index.d.ts",
|
|
6
6
|
"license": "AGPL-3.0",
|
|
@@ -9,26 +9,26 @@
|
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@coral-xyz/anchor": "0.30.0",
|
|
12
|
-
"@exponent-labs/adrena-idl": "0.9.
|
|
13
|
-
"@exponent-labs/chainlink-idl": "0.9.
|
|
14
|
-
"@exponent-labs/exponent-idl": "0.9.
|
|
15
|
-
"@exponent-labs/exponent-types": "0.9.
|
|
16
|
-
"@exponent-labs/fragmetric-idl": "0.9.
|
|
17
|
-
"@exponent-labs/generic-sy-idl": "0.9.
|
|
18
|
-
"@exponent-labs/jito-restaking-sy-idl": "0.9.
|
|
19
|
-
"@exponent-labs/jupiter-lend-idl": "0.9.
|
|
20
|
-
"@exponent-labs/jupiter-perps-idl": "0.9.
|
|
21
|
-
"@exponent-labs/kamino-reserve-deserializer": "0.9.
|
|
22
|
-
"@exponent-labs/kamino-sy-idl": "0.9.
|
|
23
|
-
"@exponent-labs/kamino-vault-idl": "0.9.
|
|
24
|
-
"@exponent-labs/marginfi-sy-idl": "0.9.
|
|
25
|
-
"@exponent-labs/meteora-idl": "0.9.
|
|
26
|
-
"@exponent-labs/perena-sy-idl": "0.9.
|
|
27
|
-
"@exponent-labs/precise-number": "0.9.
|
|
28
|
-
"@exponent-labs/sanctum-idl": "0.9.
|
|
29
|
-
"@exponent-labs/solstice-idl": "0.9.
|
|
30
|
-
"@exponent-labs/exponent-clmm-idl": "0.9.
|
|
31
|
-
"@exponent-labs/exponent-orderbook-idl": "0.9.
|
|
12
|
+
"@exponent-labs/adrena-idl": "0.9.13",
|
|
13
|
+
"@exponent-labs/chainlink-idl": "0.9.13",
|
|
14
|
+
"@exponent-labs/exponent-idl": "0.9.13",
|
|
15
|
+
"@exponent-labs/exponent-types": "0.9.13",
|
|
16
|
+
"@exponent-labs/fragmetric-idl": "0.9.13",
|
|
17
|
+
"@exponent-labs/generic-sy-idl": "0.9.13",
|
|
18
|
+
"@exponent-labs/jito-restaking-sy-idl": "0.9.13",
|
|
19
|
+
"@exponent-labs/jupiter-lend-idl": "0.9.13",
|
|
20
|
+
"@exponent-labs/jupiter-perps-idl": "0.9.13",
|
|
21
|
+
"@exponent-labs/kamino-reserve-deserializer": "0.9.13",
|
|
22
|
+
"@exponent-labs/kamino-sy-idl": "0.9.13",
|
|
23
|
+
"@exponent-labs/kamino-vault-idl": "0.9.13",
|
|
24
|
+
"@exponent-labs/marginfi-sy-idl": "0.9.13",
|
|
25
|
+
"@exponent-labs/meteora-idl": "0.9.13",
|
|
26
|
+
"@exponent-labs/perena-sy-idl": "0.9.13",
|
|
27
|
+
"@exponent-labs/precise-number": "0.9.13",
|
|
28
|
+
"@exponent-labs/sanctum-idl": "0.9.13",
|
|
29
|
+
"@exponent-labs/solstice-idl": "0.9.13",
|
|
30
|
+
"@exponent-labs/exponent-clmm-idl": "0.9.13",
|
|
31
|
+
"@exponent-labs/exponent-orderbook-idl": "0.9.13",
|
|
32
32
|
"@solana/spl-stake-pool": "1.1.8",
|
|
33
33
|
"@solana/spl-token": "0.4.6",
|
|
34
34
|
"bn-sqrt": "^1.0.0",
|