@elemental-stv-core/sdk 0.1.1 → 0.3.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/dist/elemental-lend/accounts.d.ts +4 -1
- package/dist/elemental-lend/accounts.d.ts.map +1 -1
- package/dist/elemental-lend/accounts.js +34 -0
- package/dist/elemental-lend/accounts.js.map +1 -1
- package/dist/elemental-lend/constants.d.ts +5 -0
- package/dist/elemental-lend/constants.d.ts.map +1 -1
- package/dist/elemental-lend/constants.js +9 -1
- package/dist/elemental-lend/constants.js.map +1 -1
- package/dist/elemental-lend/index.d.ts +2 -0
- package/dist/elemental-lend/index.d.ts.map +1 -1
- package/dist/elemental-lend/index.js +2 -0
- package/dist/elemental-lend/index.js.map +1 -1
- package/dist/elemental-lend/instructions.d.ts +24 -4
- package/dist/elemental-lend/instructions.d.ts.map +1 -1
- package/dist/elemental-lend/instructions.js +49 -12
- package/dist/elemental-lend/instructions.js.map +1 -1
- package/dist/elemental-lend/jupiter-lend.d.ts +36 -0
- package/dist/elemental-lend/jupiter-lend.d.ts.map +1 -1
- package/dist/elemental-lend/jupiter-lend.js +94 -1
- package/dist/elemental-lend/jupiter-lend.js.map +1 -1
- package/dist/elemental-lend/kamino-vault.d.ts +173 -0
- package/dist/elemental-lend/kamino-vault.d.ts.map +1 -0
- package/dist/elemental-lend/kamino-vault.js +460 -0
- package/dist/elemental-lend/kamino-vault.js.map +1 -0
- package/dist/elemental-lend/pda.d.ts +1 -0
- package/dist/elemental-lend/pda.d.ts.map +1 -1
- package/dist/elemental-lend/pda.js +4 -0
- package/dist/elemental-lend/pda.js.map +1 -1
- package/dist/elemental-lend/protocol-actions.d.ts +49 -0
- package/dist/elemental-lend/protocol-actions.d.ts.map +1 -0
- package/dist/elemental-lend/protocol-actions.js +228 -0
- package/dist/elemental-lend/protocol-actions.js.map +1 -0
- package/dist/elemental-lend/types.d.ts +17 -1
- package/dist/elemental-lend/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/jlpd-strategy/accounts.d.ts +17 -0
- package/dist/jlpd-strategy/accounts.d.ts.map +1 -0
- package/dist/{jlp-strategy → jlpd-strategy}/accounts.js +50 -28
- package/dist/jlpd-strategy/accounts.js.map +1 -0
- package/dist/jlpd-strategy/constants.d.ts +62 -0
- package/dist/jlpd-strategy/constants.d.ts.map +1 -0
- package/dist/jlpd-strategy/constants.js +86 -0
- package/dist/jlpd-strategy/constants.js.map +1 -0
- package/dist/jlpd-strategy/index.d.ts +9 -0
- package/dist/jlpd-strategy/index.d.ts.map +1 -0
- package/dist/{jlp-strategy → jlpd-strategy}/index.js +4 -0
- package/dist/jlpd-strategy/index.js.map +1 -0
- package/dist/jlpd-strategy/instructions.d.ts +41 -0
- package/dist/jlpd-strategy/instructions.d.ts.map +1 -0
- package/dist/jlpd-strategy/instructions.js +64 -0
- package/dist/jlpd-strategy/instructions.js.map +1 -0
- package/dist/jlpd-strategy/jlp-data.d.ts +73 -0
- package/dist/jlpd-strategy/jlp-data.d.ts.map +1 -0
- package/dist/jlpd-strategy/jlp-data.js +406 -0
- package/dist/jlpd-strategy/jlp-data.js.map +1 -0
- package/dist/jlpd-strategy/pda.d.ts +8 -0
- package/dist/jlpd-strategy/pda.d.ts.map +1 -0
- package/dist/{jlp-strategy → jlpd-strategy}/pda.js +10 -3
- package/dist/jlpd-strategy/pda.js.map +1 -0
- package/dist/jlpd-strategy/settle-yield.d.ts +54 -0
- package/dist/jlpd-strategy/settle-yield.d.ts.map +1 -0
- package/dist/jlpd-strategy/settle-yield.js +103 -0
- package/dist/jlpd-strategy/settle-yield.js.map +1 -0
- package/dist/jlpd-strategy/swap-jlp.d.ts +151 -0
- package/dist/jlpd-strategy/swap-jlp.d.ts.map +1 -0
- package/dist/jlpd-strategy/swap-jlp.js +429 -0
- package/dist/jlpd-strategy/swap-jlp.js.map +1 -0
- package/dist/jlpd-strategy/types.d.ts +56 -0
- package/dist/jlpd-strategy/types.d.ts.map +1 -0
- package/dist/{jlp-strategy → jlpd-strategy}/types.js.map +1 -1
- package/dist/p-stv-core/accounts.d.ts +4 -1
- package/dist/p-stv-core/accounts.d.ts.map +1 -1
- package/dist/p-stv-core/accounts.js +59 -22
- package/dist/p-stv-core/accounts.js.map +1 -1
- package/dist/p-stv-core/constants.d.ts +12 -1
- package/dist/p-stv-core/constants.d.ts.map +1 -1
- package/dist/p-stv-core/constants.js +16 -2
- package/dist/p-stv-core/constants.js.map +1 -1
- package/dist/p-stv-core/events.d.ts.map +1 -1
- package/dist/p-stv-core/events.js +21 -9
- package/dist/p-stv-core/events.js.map +1 -1
- package/dist/p-stv-core/index.d.ts +4 -0
- package/dist/p-stv-core/index.d.ts.map +1 -1
- package/dist/p-stv-core/index.js +4 -0
- package/dist/p-stv-core/index.js.map +1 -1
- package/dist/p-stv-core/instructions.d.ts +58 -1
- package/dist/p-stv-core/instructions.d.ts.map +1 -1
- package/dist/p-stv-core/instructions.js +93 -9
- package/dist/p-stv-core/instructions.js.map +1 -1
- package/dist/p-stv-core/pda.d.ts +1 -0
- package/dist/p-stv-core/pda.d.ts.map +1 -1
- package/dist/p-stv-core/pda.js +4 -0
- package/dist/p-stv-core/pda.js.map +1 -1
- package/dist/p-stv-core/prices.d.ts +21 -0
- package/dist/p-stv-core/prices.d.ts.map +1 -0
- package/dist/p-stv-core/prices.js +78 -0
- package/dist/p-stv-core/prices.js.map +1 -0
- package/dist/p-stv-core/remaining-accounts.d.ts +99 -0
- package/dist/p-stv-core/remaining-accounts.d.ts.map +1 -0
- package/dist/p-stv-core/remaining-accounts.js +262 -0
- package/dist/p-stv-core/remaining-accounts.js.map +1 -0
- package/dist/p-stv-core/send-tx.d.ts +56 -0
- package/dist/p-stv-core/send-tx.d.ts.map +1 -0
- package/dist/p-stv-core/send-tx.js +299 -0
- package/dist/p-stv-core/send-tx.js.map +1 -0
- package/dist/p-stv-core/sol-wrap.d.ts +35 -0
- package/dist/p-stv-core/sol-wrap.d.ts.map +1 -0
- package/dist/p-stv-core/sol-wrap.js +95 -0
- package/dist/p-stv-core/sol-wrap.js.map +1 -0
- package/dist/p-stv-core/types.d.ts +35 -4
- package/dist/p-stv-core/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/jlp-strategy/accounts.d.ts +0 -11
- package/dist/jlp-strategy/accounts.d.ts.map +0 -1
- package/dist/jlp-strategy/accounts.js.map +0 -1
- package/dist/jlp-strategy/constants.d.ts +0 -36
- package/dist/jlp-strategy/constants.d.ts.map +0 -1
- package/dist/jlp-strategy/constants.js +0 -47
- package/dist/jlp-strategy/constants.js.map +0 -1
- package/dist/jlp-strategy/index.d.ts +0 -5
- package/dist/jlp-strategy/index.d.ts.map +0 -1
- package/dist/jlp-strategy/index.js.map +0 -1
- package/dist/jlp-strategy/pda.d.ts +0 -5
- package/dist/jlp-strategy/pda.d.ts.map +0 -1
- package/dist/jlp-strategy/pda.js.map +0 -1
- package/dist/jlp-strategy/types.d.ts +0 -25
- package/dist/jlp-strategy/types.d.ts.map +0 -1
- /package/dist/{jlp-strategy → jlpd-strategy}/types.js +0 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchJlpPoolDetails = fetchJlpPoolDetails;
|
|
4
|
+
exports.computeAddLiquidityFee = computeAddLiquidityFee;
|
|
5
|
+
exports.fetchJlpCustodyData = fetchJlpCustodyData;
|
|
6
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const CUSTODIES = [
|
|
9
|
+
{
|
|
10
|
+
name: "SOL",
|
|
11
|
+
address: new web3_js_1.PublicKey("7xS2gz2bTp3fwCC7knJvUWTEU9Tycczu6VhJYKgi1wdz"),
|
|
12
|
+
decimals: 9,
|
|
13
|
+
isStable: false,
|
|
14
|
+
mintAddress: "So11111111111111111111111111111111111111112",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "ETH",
|
|
18
|
+
address: new web3_js_1.PublicKey("AQCGyheWPLeo6Qp9WpYS9m3Qj479t7R636N9ey1rEjEn"),
|
|
19
|
+
decimals: 8,
|
|
20
|
+
isStable: false,
|
|
21
|
+
mintAddress: "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "WBTC",
|
|
25
|
+
address: new web3_js_1.PublicKey("5Pv3gM9JrFFH883SWAhvJC9RPYmo8UNxuFtv5bMMALkm"),
|
|
26
|
+
decimals: 8,
|
|
27
|
+
isStable: false,
|
|
28
|
+
mintAddress: "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "USDC",
|
|
32
|
+
address: new web3_js_1.PublicKey("G18jKKXQwBbrHeiK3C9MRXhkHsLHf7XgCSisykV46EZa"),
|
|
33
|
+
decimals: 6,
|
|
34
|
+
isStable: true,
|
|
35
|
+
mintAddress: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "USDT",
|
|
39
|
+
address: new web3_js_1.PublicKey("4vkNeXiYEUizLdrpdPS1eC2mccyM4NUPRtERrk6ZETkk"),
|
|
40
|
+
decimals: 6,
|
|
41
|
+
isStable: true,
|
|
42
|
+
mintAddress: "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Custody account byte offsets (Jupiter Perps on-chain layout)
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
const OFFSET_TARGET_RATIO_BPS = 206; // u64 LE, custody target weight (right before assets)
|
|
49
|
+
const OFFSET_ASSETS = 214;
|
|
50
|
+
const OFFSET_ASSETS_OWNED = OFFSET_ASSETS + 8;
|
|
51
|
+
const OFFSET_ASSETS_LOCKED = OFFSET_ASSETS + 16;
|
|
52
|
+
const OFFSET_ASSETS_GUARANTEED_USD = OFFSET_ASSETS + 24;
|
|
53
|
+
const OFFSET_ASSETS_GLOBAL_SHORT_SIZES = OFFSET_ASSETS + 32;
|
|
54
|
+
const OFFSET_ASSETS_GLOBAL_SHORT_AVG_PX = OFFSET_ASSETS + 40;
|
|
55
|
+
const OFFSET_DEBT = 1004;
|
|
56
|
+
const OFFSET_BORROW_LEND_INTERESTS_ACCRUED = 1020;
|
|
57
|
+
const SCALE_USD = 1e6;
|
|
58
|
+
const DEBT_MULTIPLIER = 1e9;
|
|
59
|
+
const JUPITER_PRICE_API = "https://lite-api.jup.ag/price/v3";
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Binary parsing helpers
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
function u64FromLE(buf, offset) {
|
|
64
|
+
let res = 0n;
|
|
65
|
+
for (let i = 0; i < 8; i++) {
|
|
66
|
+
res |= BigInt(buf[offset + i] ?? 0) << BigInt(8 * i);
|
|
67
|
+
}
|
|
68
|
+
return res;
|
|
69
|
+
}
|
|
70
|
+
function u128FromLE(buf, offset) {
|
|
71
|
+
let res = 0n;
|
|
72
|
+
for (let i = 0; i < 16; i++) {
|
|
73
|
+
res |= BigInt(buf[offset + i] ?? 0) << BigInt(8 * i);
|
|
74
|
+
}
|
|
75
|
+
return res;
|
|
76
|
+
}
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
// Data fetching
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
async function fetchAllCustodies(connection) {
|
|
81
|
+
const addresses = CUSTODIES.map((c) => c.address);
|
|
82
|
+
const infos = await connection.getMultipleAccountsInfo(addresses, "confirmed");
|
|
83
|
+
return CUSTODIES.map((cfg, i) => {
|
|
84
|
+
const info = infos[i];
|
|
85
|
+
if (!info || !info.data) {
|
|
86
|
+
throw new Error(`No account data for custody ${cfg.name}`);
|
|
87
|
+
}
|
|
88
|
+
const data = info.data;
|
|
89
|
+
// Read target ratio — validated post-parse by checking sum ≈ 10000
|
|
90
|
+
const targetRatio = data.length >= OFFSET_TARGET_RATIO_BPS + 8
|
|
91
|
+
? Number(u64FromLE(data, OFFSET_TARGET_RATIO_BPS))
|
|
92
|
+
: 0;
|
|
93
|
+
return {
|
|
94
|
+
cfg,
|
|
95
|
+
owned: u64FromLE(data, OFFSET_ASSETS_OWNED),
|
|
96
|
+
locked: u64FromLE(data, OFFSET_ASSETS_LOCKED),
|
|
97
|
+
guaranteedUsd: u64FromLE(data, OFFSET_ASSETS_GUARANTEED_USD),
|
|
98
|
+
globalShortSizes: u64FromLE(data, OFFSET_ASSETS_GLOBAL_SHORT_SIZES),
|
|
99
|
+
globalShortAveragePrices: u64FromLE(data, OFFSET_ASSETS_GLOBAL_SHORT_AVG_PX),
|
|
100
|
+
debt: u128FromLE(data, OFFSET_DEBT),
|
|
101
|
+
borrowLendInterestsAccrued: u128FromLE(data, OFFSET_BORROW_LEND_INTERESTS_ACCRUED),
|
|
102
|
+
targetRatioBps: targetRatio <= 10000 ? targetRatio : 0,
|
|
103
|
+
};
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
async function fetchPrices() {
|
|
107
|
+
const ids = CUSTODIES.map((c) => c.mintAddress).join(",");
|
|
108
|
+
const url = `${JUPITER_PRICE_API}?ids=${ids}`;
|
|
109
|
+
const response = await fetch(url);
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
throw new Error(`Jupiter Price API error: ${response.status}`);
|
|
112
|
+
}
|
|
113
|
+
const json = (await response.json());
|
|
114
|
+
const prices = {};
|
|
115
|
+
for (const [mint, data] of Object.entries(json)) {
|
|
116
|
+
prices[mint] = data.usdPrice;
|
|
117
|
+
}
|
|
118
|
+
return prices;
|
|
119
|
+
}
|
|
120
|
+
function calculateDebtTokens(raw) {
|
|
121
|
+
if (raw.debt <= raw.borrowLendInterestsAccrued)
|
|
122
|
+
return 0;
|
|
123
|
+
const netDebt = raw.debt - raw.borrowLendInterestsAccrued;
|
|
124
|
+
return Number(netDebt) / DEBT_MULTIPLIER / 10 ** raw.cfg.decimals;
|
|
125
|
+
}
|
|
126
|
+
function calculateCustodyAum(raw, priceUsd) {
|
|
127
|
+
const { cfg } = raw;
|
|
128
|
+
const tokScale = 10 ** cfg.decimals;
|
|
129
|
+
const ownedTokens = Number(raw.owned) / tokScale;
|
|
130
|
+
const lockedTokens = Number(raw.locked) / tokScale;
|
|
131
|
+
const debtTokens = calculateDebtTokens(raw);
|
|
132
|
+
const guaranteedUsd = Number(raw.guaranteedUsd) / SCALE_USD;
|
|
133
|
+
const shortSizeUsd = Number(raw.globalShortSizes) / SCALE_USD;
|
|
134
|
+
const shortAvgPxUsd = Number(raw.globalShortAveragePrices) / SCALE_USD;
|
|
135
|
+
// theoreticallyOwned = owned + debt (debt = lent-out tokens the pool still owns)
|
|
136
|
+
const theoreticallyOwned = ownedTokens + debtTokens;
|
|
137
|
+
const netAssetsTokens = Math.max(theoreticallyOwned - lockedTokens, 0);
|
|
138
|
+
const netAssetsUsd = netAssetsTokens * priceUsd;
|
|
139
|
+
// Short PnL from pool perspective (pool is counterparty)
|
|
140
|
+
let shortPnLUsd = 0;
|
|
141
|
+
if (shortSizeUsd > 0 && shortAvgPxUsd > 0 && priceUsd > 0) {
|
|
142
|
+
shortPnLUsd = (shortSizeUsd * (priceUsd - shortAvgPxUsd)) / shortAvgPxUsd;
|
|
143
|
+
}
|
|
144
|
+
let aumUsd = guaranteedUsd + netAssetsUsd + shortPnLUsd;
|
|
145
|
+
if (aumUsd < 0)
|
|
146
|
+
aumUsd = 0;
|
|
147
|
+
return {
|
|
148
|
+
name: cfg.name,
|
|
149
|
+
aumUsd,
|
|
150
|
+
weightBps: 0, // set in second pass
|
|
151
|
+
priceUsd,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
// Public API
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
/**
|
|
158
|
+
* Fetch JLP pool custody data and compute AUM breakdown with per-custody weights.
|
|
159
|
+
*
|
|
160
|
+
* Reads custody accounts on-chain and fetches prices from Jupiter's price API.
|
|
161
|
+
* Returns the total AUM in USD and per-custody breakdown including weight in basis points.
|
|
162
|
+
*/
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
// Pool Account Fee Parsing
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
/**
|
|
167
|
+
* Parse Pool account to extract aumUsd (u128) using the dynamic offset logic
|
|
168
|
+
* from oracle.rs. Returns the offset just past aumUsd and the parsed value.
|
|
169
|
+
*/
|
|
170
|
+
function parsePoolAumUsd(data) {
|
|
171
|
+
if (data.length < 28)
|
|
172
|
+
return null;
|
|
173
|
+
let offset = 8; // skip discriminator
|
|
174
|
+
// Skip name string (4-byte len + utf8)
|
|
175
|
+
if (data.length < offset + 4)
|
|
176
|
+
return null;
|
|
177
|
+
const nameLen = data.readUInt32LE(offset);
|
|
178
|
+
if (nameLen > 64)
|
|
179
|
+
return null;
|
|
180
|
+
offset += 4 + nameLen;
|
|
181
|
+
// Skip custodies vec (4-byte len + Pubkey[])
|
|
182
|
+
if (data.length < offset + 4)
|
|
183
|
+
return null;
|
|
184
|
+
const custodiesLen = data.readUInt32LE(offset);
|
|
185
|
+
if (custodiesLen > 16)
|
|
186
|
+
return null;
|
|
187
|
+
offset += 4 + custodiesLen * 32;
|
|
188
|
+
// Read aumUsd (u128)
|
|
189
|
+
if (data.length < offset + 16)
|
|
190
|
+
return null;
|
|
191
|
+
const aumUsd = u128FromLE(data, offset);
|
|
192
|
+
offset += 16;
|
|
193
|
+
return { aumUsd, afterAumOffset: offset };
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Try to parse the Fees struct from the Pool account data.
|
|
197
|
+
*
|
|
198
|
+
* After aumUsd, the Pool struct has a Limit struct followed by a Fees struct.
|
|
199
|
+
* The Limit struct size varies by program version, so we try multiple skip
|
|
200
|
+
* sizes and validate the parsed fee values.
|
|
201
|
+
*
|
|
202
|
+
* Fees layout (8 x u64):
|
|
203
|
+
* [0] increasePositionBps
|
|
204
|
+
* [1] decreasePositionBps
|
|
205
|
+
* [2] addRemoveLiquidityBps
|
|
206
|
+
* [3] swapBps
|
|
207
|
+
* [4] taxBps
|
|
208
|
+
* [5] stableSwapBps
|
|
209
|
+
* [6] stableSwapTaxBps
|
|
210
|
+
* [7] protocolShareBps
|
|
211
|
+
*/
|
|
212
|
+
function tryParsePoolFees(data, afterAumOffset) {
|
|
213
|
+
// Try different Limit struct sizes (2-5 u128 fields = 32-80 bytes)
|
|
214
|
+
for (const limitSize of [32, 48, 64, 80]) {
|
|
215
|
+
const feesStart = afterAumOffset + limitSize;
|
|
216
|
+
if (data.length < feesStart + 64)
|
|
217
|
+
continue;
|
|
218
|
+
const increasePos = Number(u64FromLE(data, feesStart));
|
|
219
|
+
const decreasePos = Number(u64FromLE(data, feesStart + 8));
|
|
220
|
+
const addRemLiq = Number(u64FromLE(data, feesStart + 16));
|
|
221
|
+
const swapBps = Number(u64FromLE(data, feesStart + 24));
|
|
222
|
+
const taxBps = Number(u64FromLE(data, feesStart + 32));
|
|
223
|
+
const stableSwap = Number(u64FromLE(data, feesStart + 40));
|
|
224
|
+
const stableSwapTax = Number(u64FromLE(data, feesStart + 48));
|
|
225
|
+
const protocolShare = Number(u64FromLE(data, feesStart + 56));
|
|
226
|
+
// All fee fields should be in [0, 1000] bps range
|
|
227
|
+
const allFees = [increasePos, decreasePos, addRemLiq, swapBps, taxBps,
|
|
228
|
+
stableSwap, stableSwapTax, protocolShare];
|
|
229
|
+
const allValid = allFees.every((f) => f >= 0 && f <= 1000);
|
|
230
|
+
// At least addRemLiq or swapBps should be non-zero
|
|
231
|
+
if (allValid && (addRemLiq > 0 || swapBps > 0)) {
|
|
232
|
+
return {
|
|
233
|
+
addRemoveLiquidityBps: addRemLiq,
|
|
234
|
+
swapBps,
|
|
235
|
+
taxBps,
|
|
236
|
+
stableSwapBps: stableSwap,
|
|
237
|
+
stableSwapTaxBps: stableSwapTax,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
// ---------------------------------------------------------------------------
|
|
244
|
+
// Public: fetchJlpPoolDetails
|
|
245
|
+
// ---------------------------------------------------------------------------
|
|
246
|
+
/**
|
|
247
|
+
* Fetch full JLP pool details: fee parameters, per-custody target/current
|
|
248
|
+
* weights, pool AUM, and JLP price.
|
|
249
|
+
*
|
|
250
|
+
* Reads the Pool account for fees and aumUsd, Custody accounts for per-asset
|
|
251
|
+
* data including target weights, and the JLP mint for total supply.
|
|
252
|
+
*/
|
|
253
|
+
async function fetchJlpPoolDetails(connection) {
|
|
254
|
+
const poolAddress = constants_1.JLP_POOL_ACCOUNT;
|
|
255
|
+
const jlpMintAddress = constants_1.JLP_MINT;
|
|
256
|
+
const custodyAddresses = CUSTODIES.map((c) => c.address);
|
|
257
|
+
// Fetch Pool, JLP Mint, all Custodies, and prices in parallel
|
|
258
|
+
const [poolInfo, mintInfo, custodyInfos, pricesByMint] = await Promise.all([
|
|
259
|
+
connection.getAccountInfo(poolAddress, "confirmed"),
|
|
260
|
+
connection.getAccountInfo(jlpMintAddress, "confirmed"),
|
|
261
|
+
connection.getMultipleAccountsInfo(custodyAddresses, "confirmed"),
|
|
262
|
+
fetchPrices(),
|
|
263
|
+
]);
|
|
264
|
+
// Parse Pool aumUsd
|
|
265
|
+
if (!poolInfo?.data)
|
|
266
|
+
throw new Error("Failed to fetch JLP Pool account");
|
|
267
|
+
const poolData = poolInfo.data;
|
|
268
|
+
const poolParsed = parsePoolAumUsd(poolData);
|
|
269
|
+
if (!poolParsed)
|
|
270
|
+
throw new Error("Failed to parse JLP Pool aumUsd");
|
|
271
|
+
// Parse Pool fees (best-effort — returns null if layout unknown)
|
|
272
|
+
const fees = tryParsePoolFees(poolData, poolParsed.afterAumOffset);
|
|
273
|
+
// Parse JLP supply from mint account (offset 36, u64)
|
|
274
|
+
if (!mintInfo?.data || mintInfo.data.length < 44)
|
|
275
|
+
throw new Error("Failed to fetch JLP mint");
|
|
276
|
+
const mintData = mintInfo.data;
|
|
277
|
+
const jlpSupplyRaw = u64FromLE(mintData, 36);
|
|
278
|
+
const jlpSupply = Number(jlpSupplyRaw) / 1e6; // JLP has 6 decimals
|
|
279
|
+
// Pool AUM in USD (u128 scaled to 6 decimals)
|
|
280
|
+
const poolAumUsd = Number(poolParsed.aumUsd) / SCALE_USD;
|
|
281
|
+
// JLP price
|
|
282
|
+
const jlpPrice = jlpSupply > 0 ? poolAumUsd / jlpSupply : 0;
|
|
283
|
+
// Parse custody data with prices
|
|
284
|
+
const prices = {};
|
|
285
|
+
for (const cfg of CUSTODIES) {
|
|
286
|
+
const p = pricesByMint[cfg.mintAddress];
|
|
287
|
+
prices[cfg.name] = p ?? (cfg.isStable ? 1 : 0);
|
|
288
|
+
if (!p && !cfg.isStable) {
|
|
289
|
+
throw new Error(`Missing price for ${cfg.name}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
const parsedCustodies = CUSTODIES.map((cfg, i) => {
|
|
293
|
+
const info = custodyInfos[i];
|
|
294
|
+
if (!info?.data)
|
|
295
|
+
throw new Error(`No account data for custody ${cfg.name}`);
|
|
296
|
+
const data = info.data;
|
|
297
|
+
return {
|
|
298
|
+
cfg,
|
|
299
|
+
owned: u64FromLE(data, OFFSET_ASSETS_OWNED),
|
|
300
|
+
locked: u64FromLE(data, OFFSET_ASSETS_LOCKED),
|
|
301
|
+
guaranteedUsd: u64FromLE(data, OFFSET_ASSETS_GUARANTEED_USD),
|
|
302
|
+
globalShortSizes: u64FromLE(data, OFFSET_ASSETS_GLOBAL_SHORT_SIZES),
|
|
303
|
+
globalShortAveragePrices: u64FromLE(data, OFFSET_ASSETS_GLOBAL_SHORT_AVG_PX),
|
|
304
|
+
debt: u128FromLE(data, OFFSET_DEBT),
|
|
305
|
+
borrowLendInterestsAccrued: u128FromLE(data, OFFSET_BORROW_LEND_INTERESTS_ACCRUED),
|
|
306
|
+
targetRatioBps: data.length >= OFFSET_TARGET_RATIO_BPS + 8
|
|
307
|
+
? Number(u64FromLE(data, OFFSET_TARGET_RATIO_BPS))
|
|
308
|
+
: 0,
|
|
309
|
+
};
|
|
310
|
+
});
|
|
311
|
+
// Compute per-custody AUM
|
|
312
|
+
const aumResults = parsedCustodies.map((raw) => calculateCustodyAum(raw, prices[raw.cfg.name] ?? 1));
|
|
313
|
+
const totalAum = aumResults.reduce((sum, r) => sum + r.aumUsd, 0);
|
|
314
|
+
// Validate target ratios — sum should be ~10000
|
|
315
|
+
const targetSum = parsedCustodies.reduce((sum, c) => sum + c.targetRatioBps, 0);
|
|
316
|
+
const targetRatiosValid = targetSum >= 9900 && targetSum <= 10100;
|
|
317
|
+
const custodies = parsedCustodies.map((raw, i) => ({
|
|
318
|
+
mint: new web3_js_1.PublicKey(raw.cfg.mintAddress),
|
|
319
|
+
name: raw.cfg.name,
|
|
320
|
+
targetRatioBps: targetRatiosValid ? raw.targetRatioBps : 0,
|
|
321
|
+
currentRatioBps: totalAum > 0 ? Math.round((aumResults[i].aumUsd / totalAum) * 10000) : 0,
|
|
322
|
+
aumUsd: aumResults[i].aumUsd,
|
|
323
|
+
isStable: raw.cfg.isStable,
|
|
324
|
+
}));
|
|
325
|
+
return { fees, custodies, poolAumUsd, jlpPrice, jlpSupply };
|
|
326
|
+
}
|
|
327
|
+
// ---------------------------------------------------------------------------
|
|
328
|
+
// Public: computeAddLiquidityFee
|
|
329
|
+
// ---------------------------------------------------------------------------
|
|
330
|
+
/**
|
|
331
|
+
* Estimate the addLiquidity fee for depositing into a specific JLP custody.
|
|
332
|
+
*
|
|
333
|
+
* Implements the Jupiter Perps fee formula:
|
|
334
|
+
* - If deposit moves custody weight TOWARD target: rebate (fee < baseFee)
|
|
335
|
+
* - If deposit moves custody weight AWAY from target: tax (fee > baseFee)
|
|
336
|
+
*
|
|
337
|
+
* Formula:
|
|
338
|
+
* initDiff = |currentRatio - targetRatio|
|
|
339
|
+
* finalDiff = |newRatio - targetRatio|
|
|
340
|
+
* avgDiff = (initDiff + finalDiff) / 2
|
|
341
|
+
* if improving: fee = max(baseFee - taxBps * avgDiff / 10000, 0)
|
|
342
|
+
* if worsening: fee = baseFee + taxBps * avgDiff / 10000
|
|
343
|
+
*/
|
|
344
|
+
function computeAddLiquidityFee(args) {
|
|
345
|
+
const { custodyAumUsd, poolAumUsd, targetRatioBps, depositUsd, fees, isStable } = args;
|
|
346
|
+
if (poolAumUsd <= 0 || targetRatioBps <= 0 || depositUsd <= 0) {
|
|
347
|
+
return { feeBps: fees.addRemoveLiquidityBps, isDiscount: false };
|
|
348
|
+
}
|
|
349
|
+
const baseFee = fees.addRemoveLiquidityBps;
|
|
350
|
+
const effectiveTaxBps = isStable ? fees.stableSwapTaxBps : fees.taxBps;
|
|
351
|
+
const currentRatio = (custodyAumUsd / poolAumUsd) * 10000;
|
|
352
|
+
const newCustodyAum = custodyAumUsd + depositUsd;
|
|
353
|
+
const newPoolAum = poolAumUsd + depositUsd;
|
|
354
|
+
const newRatio = (newCustodyAum / newPoolAum) * 10000;
|
|
355
|
+
const initDiff = Math.abs(currentRatio - targetRatioBps);
|
|
356
|
+
const finalDiff = Math.abs(newRatio - targetRatioBps);
|
|
357
|
+
const avgDiff = (initDiff + finalDiff) / 2;
|
|
358
|
+
if (finalDiff < initDiff) {
|
|
359
|
+
// Improving weight → rebate
|
|
360
|
+
const rebate = (effectiveTaxBps * avgDiff) / 10000;
|
|
361
|
+
return { feeBps: Math.max(baseFee - rebate, 0), isDiscount: true };
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
// Worsening weight → penalty
|
|
365
|
+
const penalty = (effectiveTaxBps * avgDiff) / 10000;
|
|
366
|
+
return { feeBps: baseFee + penalty, isDiscount: false };
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// ---------------------------------------------------------------------------
|
|
370
|
+
// Public: fetchJlpCustodyData (existing)
|
|
371
|
+
// ---------------------------------------------------------------------------
|
|
372
|
+
async function fetchJlpCustodyData(connection) {
|
|
373
|
+
const [custodies, pricesByMint] = await Promise.all([
|
|
374
|
+
fetchAllCustodies(connection),
|
|
375
|
+
fetchPrices(),
|
|
376
|
+
]);
|
|
377
|
+
// Build price lookup by custody name
|
|
378
|
+
const prices = {};
|
|
379
|
+
for (const cfg of CUSTODIES) {
|
|
380
|
+
const price = pricesByMint[cfg.mintAddress];
|
|
381
|
+
if (price === undefined || price === null) {
|
|
382
|
+
if (cfg.isStable) {
|
|
383
|
+
prices[cfg.name] = 1;
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
throw new Error(`Missing price for non-stable asset ${cfg.name} (mint: ${cfg.mintAddress})`);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
prices[cfg.name] = price;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// Calculate per-custody AUM
|
|
394
|
+
const results = custodies.map((raw) => calculateCustodyAum(raw, prices[raw.cfg.name] ?? 1));
|
|
395
|
+
const totalAumUsd = results.reduce((sum, r) => sum + r.aumUsd, 0);
|
|
396
|
+
// Set weights in basis points
|
|
397
|
+
for (const r of results) {
|
|
398
|
+
r.weightBps = totalAumUsd > 0 ? Math.round((r.aumUsd / totalAumUsd) * 10000) : 0;
|
|
399
|
+
}
|
|
400
|
+
return {
|
|
401
|
+
timestamp: new Date().toISOString(),
|
|
402
|
+
totalAumUsd,
|
|
403
|
+
custodies: results,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
//# sourceMappingURL=jlp-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jlp-data.js","sourceRoot":"","sources":["../../src/jlpd-strategy/jlp-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
|
2
|
+
export declare function findJlpdConfigPda(programId?: PublicKey): [PublicKey, number];
|
|
3
|
+
/** @deprecated Use findJlpdConfigPda instead */
|
|
4
|
+
export declare const findJlpVaultPda: typeof findJlpdConfigPda;
|
|
5
|
+
export declare function findManagerRolePda(config: PublicKey, manager: PublicKey, programId?: PublicKey): [PublicKey, number];
|
|
6
|
+
export declare function findStrategyStatePda(baseMint: PublicKey, programId?: PublicKey): [PublicKey, number];
|
|
7
|
+
export declare function findStvPositionPda(stv: PublicKey, programId?: PublicKey): [PublicKey, number];
|
|
8
|
+
//# sourceMappingURL=pda.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../../src/jlpd-strategy/pda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,wBAAgB,iBAAiB,CAC/B,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAErB;AAED,gDAAgD;AAChD,eAAO,MAAM,eAAe,0BAAoB,CAAC;AAEjD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,SAAS,EAClB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,EACnB,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,SAAS,GAAE,SAAsB,GAChC,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findJlpVaultPda =
|
|
3
|
+
exports.findJlpVaultPda = void 0;
|
|
4
|
+
exports.findJlpdConfigPda = findJlpdConfigPda;
|
|
5
|
+
exports.findManagerRolePda = findManagerRolePda;
|
|
4
6
|
exports.findStrategyStatePda = findStrategyStatePda;
|
|
5
7
|
exports.findStvPositionPda = findStvPositionPda;
|
|
6
8
|
const web3_js_1 = require("@solana/web3.js");
|
|
7
9
|
const constants_1 = require("./constants");
|
|
8
|
-
function
|
|
9
|
-
return web3_js_1.PublicKey.findProgramAddressSync([constants_1.
|
|
10
|
+
function findJlpdConfigPda(programId = constants_1.PROGRAM_ID) {
|
|
11
|
+
return web3_js_1.PublicKey.findProgramAddressSync([constants_1.CONFIG_SEED], programId);
|
|
12
|
+
}
|
|
13
|
+
/** @deprecated Use findJlpdConfigPda instead */
|
|
14
|
+
exports.findJlpVaultPda = findJlpdConfigPda;
|
|
15
|
+
function findManagerRolePda(config, manager, programId = constants_1.PROGRAM_ID) {
|
|
16
|
+
return web3_js_1.PublicKey.findProgramAddressSync([constants_1.MANAGER_SEED, config.toBuffer(), manager.toBuffer()], programId);
|
|
10
17
|
}
|
|
11
18
|
function findStrategyStatePda(baseMint, programId = constants_1.PROGRAM_ID) {
|
|
12
19
|
return web3_js_1.PublicKey.findProgramAddressSync([constants_1.STRATEGY_STATE_SEED, baseMint.toBuffer()], programId);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pda.js","sourceRoot":"","sources":["../../src/jlpd-strategy/pda.ts"],"names":[],"mappings":";;;AAGA,8CAIC;AAKD,gDASC;AAED,oDAQC;AAED,gDAQC;AAzCD,6CAA4C;AAC5C,2CAAwG;AAExG,SAAgB,iBAAiB,CAC/B,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CAAC,CAAC,uBAAW,CAAC,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC;AAED,gDAAgD;AACnC,QAAA,eAAe,GAAG,iBAAiB,CAAC;AAEjD,SAAgB,kBAAkB,CAChC,MAAiB,EACjB,OAAkB,EAClB,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,wBAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,EACrD,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAClC,QAAmB,EACnB,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,+BAAmB,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAC1C,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAChC,GAAc,EACd,YAAuB,sBAAU;IAEjC,OAAO,mBAAS,CAAC,sBAAsB,CACrC,CAAC,yBAAa,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,EAC/B,SAAS,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
/** Arguments for building a settle_yield instruction with explicit accounts */
|
|
3
|
+
export interface CreateSettleYieldIxArgs {
|
|
4
|
+
config: PublicKey;
|
|
5
|
+
managerRole: PublicKey;
|
|
6
|
+
vaultJlpAta: PublicKey;
|
|
7
|
+
stv0: PublicKey;
|
|
8
|
+
stv1: PublicKey;
|
|
9
|
+
stv2: PublicKey;
|
|
10
|
+
stv3: PublicKey;
|
|
11
|
+
stv4: PublicKey;
|
|
12
|
+
dovesBtcUsd: PublicKey;
|
|
13
|
+
dovesEthUsd: PublicKey;
|
|
14
|
+
dovesSolUsd: PublicKey;
|
|
15
|
+
jlpPool: PublicKey;
|
|
16
|
+
jlpMintAccount: PublicKey;
|
|
17
|
+
manager: PublicKey;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build the on-chain `settle_yield` instruction.
|
|
21
|
+
*
|
|
22
|
+
* settle_yield takes no params -- instruction data is just the 8-byte discriminator.
|
|
23
|
+
*
|
|
24
|
+
* Accounts (14 total):
|
|
25
|
+
* 0: config (JlpdConfig PDA)
|
|
26
|
+
* 1: manager_role (ManagerRole PDA)
|
|
27
|
+
* 2: vault_jlp_ata (JLP ATA owned by config)
|
|
28
|
+
* 3: stv_0 (BTC strategy_state, mut)
|
|
29
|
+
* 4: stv_1 (ETH strategy_state, mut)
|
|
30
|
+
* 5: stv_2 (SOL strategy_state, mut)
|
|
31
|
+
* 6: stv_3 (USDC strategy_state, mut)
|
|
32
|
+
* 7: stv_4 (JupUSD strategy_state, mut)
|
|
33
|
+
* 8: doves_btc_usd (oracle)
|
|
34
|
+
* 9: doves_eth_usd (oracle)
|
|
35
|
+
* 10: doves_sol_usd (oracle)
|
|
36
|
+
* 11: jlp_pool (Jupiter Perps Pool)
|
|
37
|
+
* 12: jlp_mint_account
|
|
38
|
+
* 13: manager (signer)
|
|
39
|
+
*/
|
|
40
|
+
export declare function createSettleYieldIx(args: CreateSettleYieldIxArgs, programId?: PublicKey): TransactionInstruction;
|
|
41
|
+
/**
|
|
42
|
+
* Build a settle_yield instruction with automatic PDA derivation.
|
|
43
|
+
*
|
|
44
|
+
* Requires the 5 base asset mints in order: [BTC, ETH, SOL, USDC, JupUSD].
|
|
45
|
+
* These must match the `base_asset_mints` array on the JlpdConfig account.
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildSettleYieldIx(args: {
|
|
48
|
+
manager: PublicKey;
|
|
49
|
+
baseAssetMints: [PublicKey, PublicKey, PublicKey, PublicKey, PublicKey];
|
|
50
|
+
jlpMint?: PublicKey;
|
|
51
|
+
tokenProgram?: PublicKey;
|
|
52
|
+
programId?: PublicKey;
|
|
53
|
+
}): TransactionInstruction;
|
|
54
|
+
//# sourceMappingURL=settle-yield.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settle-yield.d.ts","sourceRoot":"","sources":["../../src/jlpd-strategy/settle-yield.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAqBzB,+EAA+E;AAC/E,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;IACvB,WAAW,EAAE,SAAS,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,SAAS,CAAC;IACvB,WAAW,EAAE,SAAS,CAAC;IACvB,WAAW,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,SAAS,CAAC;IACnB,cAAc,EAAE,SAAS,CAAC;IAC1B,OAAO,EAAE,SAAS,CAAC;CACpB;AAmBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,uBAAuB,EAC7B,SAAS,GAAE,SAAsB,GAChC,sBAAsB,CAwCxB;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,SAAS,CAAC;IACnB,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACxE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,GAAG,sBAAsB,CA0CzB"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSettleYieldIx = createSettleYieldIx;
|
|
4
|
+
exports.buildSettleYieldIx = buildSettleYieldIx;
|
|
5
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const pda_1 = require("./pda");
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Helpers
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
/** Derive ATA address */
|
|
13
|
+
function findAta(mint, owner, tokenProgram) {
|
|
14
|
+
const [ata] = web3_js_1.PublicKey.findProgramAddressSync([owner.toBuffer(), tokenProgram.toBuffer(), mint.toBuffer()], spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID);
|
|
15
|
+
return ata;
|
|
16
|
+
}
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Low-level instruction builder
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/**
|
|
21
|
+
* Build the on-chain `settle_yield` instruction.
|
|
22
|
+
*
|
|
23
|
+
* settle_yield takes no params -- instruction data is just the 8-byte discriminator.
|
|
24
|
+
*
|
|
25
|
+
* Accounts (14 total):
|
|
26
|
+
* 0: config (JlpdConfig PDA)
|
|
27
|
+
* 1: manager_role (ManagerRole PDA)
|
|
28
|
+
* 2: vault_jlp_ata (JLP ATA owned by config)
|
|
29
|
+
* 3: stv_0 (BTC strategy_state, mut)
|
|
30
|
+
* 4: stv_1 (ETH strategy_state, mut)
|
|
31
|
+
* 5: stv_2 (SOL strategy_state, mut)
|
|
32
|
+
* 6: stv_3 (USDC strategy_state, mut)
|
|
33
|
+
* 7: stv_4 (JupUSD strategy_state, mut)
|
|
34
|
+
* 8: doves_btc_usd (oracle)
|
|
35
|
+
* 9: doves_eth_usd (oracle)
|
|
36
|
+
* 10: doves_sol_usd (oracle)
|
|
37
|
+
* 11: jlp_pool (Jupiter Perps Pool)
|
|
38
|
+
* 12: jlp_mint_account
|
|
39
|
+
* 13: manager (signer)
|
|
40
|
+
*/
|
|
41
|
+
function createSettleYieldIx(args, programId = constants_1.PROGRAM_ID) {
|
|
42
|
+
const { config, managerRole, vaultJlpAta, stv0, stv1, stv2, stv3, stv4, dovesBtcUsd, dovesEthUsd, dovesSolUsd, jlpPool, jlpMintAccount, manager, } = args;
|
|
43
|
+
// Instruction data: just the 8-byte discriminator (no params)
|
|
44
|
+
const data = Buffer.alloc(8);
|
|
45
|
+
constants_1.IX_SETTLE_YIELD.copy(data, 0);
|
|
46
|
+
const keys = [
|
|
47
|
+
{ pubkey: config, isSigner: false, isWritable: false },
|
|
48
|
+
{ pubkey: managerRole, isSigner: false, isWritable: false },
|
|
49
|
+
{ pubkey: vaultJlpAta, isSigner: false, isWritable: false },
|
|
50
|
+
{ pubkey: stv0, isSigner: false, isWritable: true },
|
|
51
|
+
{ pubkey: stv1, isSigner: false, isWritable: true },
|
|
52
|
+
{ pubkey: stv2, isSigner: false, isWritable: true },
|
|
53
|
+
{ pubkey: stv3, isSigner: false, isWritable: true },
|
|
54
|
+
{ pubkey: stv4, isSigner: false, isWritable: true },
|
|
55
|
+
{ pubkey: dovesBtcUsd, isSigner: false, isWritable: false },
|
|
56
|
+
{ pubkey: dovesEthUsd, isSigner: false, isWritable: false },
|
|
57
|
+
{ pubkey: dovesSolUsd, isSigner: false, isWritable: false },
|
|
58
|
+
{ pubkey: jlpPool, isSigner: false, isWritable: false },
|
|
59
|
+
{ pubkey: jlpMintAccount, isSigner: false, isWritable: false },
|
|
60
|
+
{ pubkey: manager, isSigner: true, isWritable: false },
|
|
61
|
+
];
|
|
62
|
+
return new web3_js_1.TransactionInstruction({ keys, programId, data });
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// High-level builder
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
/**
|
|
68
|
+
* Build a settle_yield instruction with automatic PDA derivation.
|
|
69
|
+
*
|
|
70
|
+
* Requires the 5 base asset mints in order: [BTC, ETH, SOL, USDC, JupUSD].
|
|
71
|
+
* These must match the `base_asset_mints` array on the JlpdConfig account.
|
|
72
|
+
*/
|
|
73
|
+
function buildSettleYieldIx(args) {
|
|
74
|
+
const { manager, baseAssetMints, jlpMint = constants_1.JLP_MINT, tokenProgram = spl_token_1.TOKEN_PROGRAM_ID, programId = constants_1.PROGRAM_ID, } = args;
|
|
75
|
+
// Derive PDAs
|
|
76
|
+
const [config] = (0, pda_1.findJlpdConfigPda)(programId);
|
|
77
|
+
const [managerRole] = (0, pda_1.findManagerRolePda)(config, manager, programId);
|
|
78
|
+
// Derive strategy_state PDAs for all 5 base assets
|
|
79
|
+
const [stv0] = (0, pda_1.findStrategyStatePda)(baseAssetMints[0], programId);
|
|
80
|
+
const [stv1] = (0, pda_1.findStrategyStatePda)(baseAssetMints[1], programId);
|
|
81
|
+
const [stv2] = (0, pda_1.findStrategyStatePda)(baseAssetMints[2], programId);
|
|
82
|
+
const [stv3] = (0, pda_1.findStrategyStatePda)(baseAssetMints[3], programId);
|
|
83
|
+
const [stv4] = (0, pda_1.findStrategyStatePda)(baseAssetMints[4], programId);
|
|
84
|
+
// Derive vault JLP ATA (owned by config PDA)
|
|
85
|
+
const vaultJlpAta = findAta(jlpMint, config, tokenProgram);
|
|
86
|
+
return createSettleYieldIx({
|
|
87
|
+
config,
|
|
88
|
+
managerRole,
|
|
89
|
+
vaultJlpAta,
|
|
90
|
+
stv0,
|
|
91
|
+
stv1,
|
|
92
|
+
stv2,
|
|
93
|
+
stv3,
|
|
94
|
+
stv4,
|
|
95
|
+
dovesBtcUsd: constants_1.DOVES_BTC_USD,
|
|
96
|
+
dovesEthUsd: constants_1.DOVES_ETH_USD,
|
|
97
|
+
dovesSolUsd: constants_1.DOVES_SOL_USD,
|
|
98
|
+
jlpPool: constants_1.JLP_POOL_ACCOUNT,
|
|
99
|
+
jlpMintAccount: jlpMint,
|
|
100
|
+
manager,
|
|
101
|
+
}, programId);
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=settle-yield.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settle-yield.js","sourceRoot":"","sources":["../../src/jlpd-strategy/settle-yield.ts"],"names":[],"mappings":"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"}
|