@waiaas/actions 2.6.0-rc.9 → 2.6.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/README.md +51 -3
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/jito-staking/config.d.ts +41 -0
- package/dist/providers/jito-staking/config.d.ts.map +1 -0
- package/dist/providers/jito-staking/config.js +50 -0
- package/dist/providers/jito-staking/config.js.map +1 -0
- package/dist/providers/jito-staking/epoch-tracker.d.ts +22 -0
- package/dist/providers/jito-staking/epoch-tracker.d.ts.map +1 -0
- package/dist/providers/jito-staking/epoch-tracker.js +48 -0
- package/dist/providers/jito-staking/epoch-tracker.js.map +1 -0
- package/dist/providers/jito-staking/index.d.ts +12 -0
- package/dist/providers/jito-staking/index.d.ts.map +1 -0
- package/dist/providers/jito-staking/index.js +89 -0
- package/dist/providers/jito-staking/index.js.map +1 -0
- package/dist/providers/jito-staking/jito-stake-pool.d.ts +100 -0
- package/dist/providers/jito-staking/jito-stake-pool.d.ts.map +1 -0
- package/dist/providers/jito-staking/jito-stake-pool.js +355 -0
- package/dist/providers/jito-staking/jito-stake-pool.js.map +1 -0
- package/dist/providers/lido-staking/config.d.ts +29 -0
- package/dist/providers/lido-staking/config.d.ts.map +1 -0
- package/dist/providers/lido-staking/config.js +40 -0
- package/dist/providers/lido-staking/config.js.map +1 -0
- package/dist/providers/lido-staking/index.d.ts +12 -0
- package/dist/providers/lido-staking/index.d.ts.map +1 -0
- package/dist/providers/lido-staking/index.js +129 -0
- package/dist/providers/lido-staking/index.js.map +1 -0
- package/dist/providers/lido-staking/lido-contract.d.ts +43 -0
- package/dist/providers/lido-staking/lido-contract.d.ts.map +1 -0
- package/dist/providers/lido-staking/lido-contract.js +83 -0
- package/dist/providers/lido-staking/lido-contract.js.map +1 -0
- package/dist/providers/lido-staking/withdrawal-tracker.d.ts +21 -0
- package/dist/providers/lido-staking/withdrawal-tracker.d.ts.map +1 -0
- package/dist/providers/lido-staking/withdrawal-tracker.js +46 -0
- package/dist/providers/lido-staking/withdrawal-tracker.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPL Stake Pool instruction encoding for Jito.
|
|
3
|
+
*
|
|
4
|
+
* Builds DepositSol and WithdrawSol instructions locally using zero external
|
|
5
|
+
* Solana SDK dependencies. Uses Node.js `node:crypto` for PDA derivation.
|
|
6
|
+
*
|
|
7
|
+
* The SolanaAdapter reconstructs TransactionInstructions from `programId`,
|
|
8
|
+
* `instructionData` (base64), and `accounts` -- so the provider must supply
|
|
9
|
+
* all resolved addresses.
|
|
10
|
+
*
|
|
11
|
+
* SPL Stake Pool instruction indices:
|
|
12
|
+
* - DepositSol = 14
|
|
13
|
+
* - WithdrawSol = 16
|
|
14
|
+
*/
|
|
15
|
+
import { createHash } from 'node:crypto';
|
|
16
|
+
import { JITO_WITHDRAW_AUTHORITY, JITO_RESERVE_STAKE, JITO_MANAGER_FEE, SPL_TOKEN_PROGRAM, SYSTEM_PROGRAM, } from './config.js';
|
|
17
|
+
// Re-export ChainError dynamically to avoid circular issues
|
|
18
|
+
let _ChainError;
|
|
19
|
+
async function getChainError() {
|
|
20
|
+
if (!_ChainError) {
|
|
21
|
+
const mod = await import('@waiaas/core');
|
|
22
|
+
_ChainError = mod.ChainError;
|
|
23
|
+
}
|
|
24
|
+
return _ChainError;
|
|
25
|
+
}
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Base58 encoder/decoder (Bitcoin alphabet)
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
30
|
+
const BASE58_MAP = new Uint8Array(128);
|
|
31
|
+
for (let i = 0; i < 128; i++)
|
|
32
|
+
BASE58_MAP[i] = 255;
|
|
33
|
+
for (let i = 0; i < 58; i++)
|
|
34
|
+
BASE58_MAP[BASE58_ALPHABET.charCodeAt(i)] = i;
|
|
35
|
+
/**
|
|
36
|
+
* Decode a base58 string to bytes.
|
|
37
|
+
*/
|
|
38
|
+
export function base58Decode(str) {
|
|
39
|
+
if (str.length === 0)
|
|
40
|
+
return new Uint8Array(0);
|
|
41
|
+
// Count leading '1's (they represent leading zero bytes)
|
|
42
|
+
let leadingZeros = 0;
|
|
43
|
+
for (let i = 0; i < str.length && str[i] === '1'; i++)
|
|
44
|
+
leadingZeros++;
|
|
45
|
+
// Allocate enough space (base58 is ~log(256)/log(58) ratio)
|
|
46
|
+
const size = Math.ceil((str.length * 733) / 1000) + 1;
|
|
47
|
+
const b256 = new Uint8Array(size);
|
|
48
|
+
for (let i = leadingZeros; i < str.length; i++) {
|
|
49
|
+
const ch = str.charCodeAt(i);
|
|
50
|
+
const digit = ch < 128 ? BASE58_MAP[ch] : 255;
|
|
51
|
+
if (digit === 255)
|
|
52
|
+
throw new Error(`Invalid base58 character: ${str[i]}`);
|
|
53
|
+
let carry = digit;
|
|
54
|
+
for (let j = size - 1; j >= 0; j--) {
|
|
55
|
+
carry += 58 * b256[j];
|
|
56
|
+
b256[j] = carry % 256;
|
|
57
|
+
carry = Math.floor(carry / 256);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Skip leading zeros in b256 that are not part of the result
|
|
61
|
+
let start = 0;
|
|
62
|
+
while (start < size && b256[start] === 0)
|
|
63
|
+
start++;
|
|
64
|
+
const result = new Uint8Array(leadingZeros + (size - start));
|
|
65
|
+
for (let i = 0; i < leadingZeros; i++)
|
|
66
|
+
result[i] = 0;
|
|
67
|
+
for (let i = start; i < size; i++)
|
|
68
|
+
result[leadingZeros + i - start] = b256[i];
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Encode bytes to a base58 string.
|
|
73
|
+
*/
|
|
74
|
+
export function base58Encode(bytes) {
|
|
75
|
+
if (bytes.length === 0)
|
|
76
|
+
return '';
|
|
77
|
+
// Count leading zeros
|
|
78
|
+
let leadingZeros = 0;
|
|
79
|
+
for (let i = 0; i < bytes.length && bytes[i] === 0; i++)
|
|
80
|
+
leadingZeros++;
|
|
81
|
+
// Allocate enough space
|
|
82
|
+
const size = Math.ceil((bytes.length * 138) / 100) + 1;
|
|
83
|
+
const b58 = new Uint8Array(size);
|
|
84
|
+
for (let i = leadingZeros; i < bytes.length; i++) {
|
|
85
|
+
let carry = bytes[i];
|
|
86
|
+
for (let j = size - 1; j >= 0; j--) {
|
|
87
|
+
carry += 256 * b58[j];
|
|
88
|
+
b58[j] = carry % 58;
|
|
89
|
+
carry = Math.floor(carry / 58);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Skip leading zeros in b58
|
|
93
|
+
let start = 0;
|
|
94
|
+
while (start < size && b58[start] === 0)
|
|
95
|
+
start++;
|
|
96
|
+
let result = '1'.repeat(leadingZeros);
|
|
97
|
+
for (let i = start; i < size; i++) {
|
|
98
|
+
result += BASE58_ALPHABET[b58[i]];
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// Ed25519 on-curve check + PDA derivation
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Ed25519 prime: p = 2^255 - 19
|
|
106
|
+
const ED25519_P = (1n << 255n) - 19n;
|
|
107
|
+
// Ed25519 curve constant d = -121665/121666 mod p
|
|
108
|
+
// d = -121665 * modInverse(121666, p) mod p
|
|
109
|
+
const ED25519_D = 37095705934669439343138083508754565189542113879843219016388785533085940283555n;
|
|
110
|
+
/**
|
|
111
|
+
* Modular exponentiation: base^exp mod m using square-and-multiply.
|
|
112
|
+
*/
|
|
113
|
+
function modPow(base, exp, m) {
|
|
114
|
+
let result = 1n;
|
|
115
|
+
base = ((base % m) + m) % m;
|
|
116
|
+
while (exp > 0n) {
|
|
117
|
+
if (exp & 1n)
|
|
118
|
+
result = (result * base) % m;
|
|
119
|
+
exp >>= 1n;
|
|
120
|
+
base = (base * base) % m;
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if a 32-byte compressed Ed25519 point represents a valid curve point.
|
|
126
|
+
*
|
|
127
|
+
* Ed25519 encoding: 32 bytes, little-endian y-coordinate, high bit of last byte = sign of x.
|
|
128
|
+
* A point is on curve if we can recover x from y using: x^2 = (y^2 - 1) / (d*y^2 + 1) mod p
|
|
129
|
+
* and the square root exists.
|
|
130
|
+
*/
|
|
131
|
+
function isOnCurve(point) {
|
|
132
|
+
if (point.length !== 32)
|
|
133
|
+
return false;
|
|
134
|
+
// Decode y from little-endian bytes (clear the sign bit from the last byte)
|
|
135
|
+
const lastByte = point[31];
|
|
136
|
+
const yBytes = new Uint8Array(point);
|
|
137
|
+
yBytes[31] = lastByte & 0x7f; // clear sign bit
|
|
138
|
+
let y = 0n;
|
|
139
|
+
for (let i = 0; i < 32; i++) {
|
|
140
|
+
y |= BigInt(yBytes[i]) << BigInt(i * 8);
|
|
141
|
+
}
|
|
142
|
+
// y must be < p
|
|
143
|
+
if (y >= ED25519_P)
|
|
144
|
+
return false;
|
|
145
|
+
// Compute x^2 = (y^2 - 1) / (d*y^2 + 1) mod p
|
|
146
|
+
const y2 = (y * y) % ED25519_P;
|
|
147
|
+
const numerator = ((y2 - 1n) % ED25519_P + ED25519_P) % ED25519_P;
|
|
148
|
+
const denominator = ((ED25519_D * y2 + 1n) % ED25519_P + ED25519_P) % ED25519_P;
|
|
149
|
+
// denominator inverse: denom^(p-2) mod p (Fermat's little theorem)
|
|
150
|
+
const denomInv = modPow(denominator, ED25519_P - 2n, ED25519_P);
|
|
151
|
+
const x2 = (numerator * denomInv) % ED25519_P;
|
|
152
|
+
if (x2 === 0n) {
|
|
153
|
+
// x = 0, valid if sign bit is 0
|
|
154
|
+
return (lastByte & 0x80) === 0;
|
|
155
|
+
}
|
|
156
|
+
// Check if x^2 has a square root mod p
|
|
157
|
+
// x = x2^((p+3)/8) mod p (since p ≡ 5 mod 8)
|
|
158
|
+
const x = modPow(x2, (ED25519_P + 3n) / 8n, ED25519_P);
|
|
159
|
+
if ((x * x) % ED25519_P === x2)
|
|
160
|
+
return true;
|
|
161
|
+
// Try x * sqrt(-1): sqrt(-1) = 2^((p-1)/4) mod p
|
|
162
|
+
const sqrtM1 = modPow(2n, (ED25519_P - 1n) / 4n, ED25519_P);
|
|
163
|
+
const x2Alt = (x * sqrtM1) % ED25519_P;
|
|
164
|
+
return (x2Alt * x2Alt) % ED25519_P === x2;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Find a program-derived address (PDA) for the given seeds and program ID.
|
|
168
|
+
*
|
|
169
|
+
* @param seeds - Array of seed buffers
|
|
170
|
+
* @param programId - Program ID as bytes (32 bytes)
|
|
171
|
+
* @returns [address_bytes (32), bump (number)]
|
|
172
|
+
*/
|
|
173
|
+
export async function findProgramAddress(seeds, programId) {
|
|
174
|
+
const PDA_MARKER = new TextEncoder().encode('ProgramDerivedAddress');
|
|
175
|
+
for (let bump = 255; bump >= 0; bump--) {
|
|
176
|
+
const hashInput = [
|
|
177
|
+
...seeds,
|
|
178
|
+
new Uint8Array([bump]),
|
|
179
|
+
programId,
|
|
180
|
+
PDA_MARKER,
|
|
181
|
+
];
|
|
182
|
+
// Concatenate all parts
|
|
183
|
+
let totalLen = 0;
|
|
184
|
+
for (const part of hashInput)
|
|
185
|
+
totalLen += part.length;
|
|
186
|
+
const buffer = new Uint8Array(totalLen);
|
|
187
|
+
let offset = 0;
|
|
188
|
+
for (const part of hashInput) {
|
|
189
|
+
buffer.set(part, offset);
|
|
190
|
+
offset += part.length;
|
|
191
|
+
}
|
|
192
|
+
const hash = createHash('sha256').update(buffer).digest();
|
|
193
|
+
const hashBytes = new Uint8Array(hash);
|
|
194
|
+
if (!isOnCurve(hashBytes)) {
|
|
195
|
+
return [hashBytes, bump];
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
throw new Error('Could not find a valid PDA');
|
|
199
|
+
}
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
// Associated Token Address derivation
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
/** Associated Token Account Program ID. */
|
|
204
|
+
const ATA_PROGRAM_ID = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';
|
|
205
|
+
/**
|
|
206
|
+
* Derive the Associated Token Address (ATA) for a wallet and mint.
|
|
207
|
+
*
|
|
208
|
+
* @param wallet - Wallet public key (base58)
|
|
209
|
+
* @param mint - Token mint address (base58)
|
|
210
|
+
* @param tokenProgram - Token program ID (base58), defaults to SPL Token
|
|
211
|
+
* @returns ATA public key as base58 string
|
|
212
|
+
*/
|
|
213
|
+
export async function getAssociatedTokenAddress(wallet, mint, tokenProgram = SPL_TOKEN_PROGRAM) {
|
|
214
|
+
const walletBytes = base58Decode(wallet);
|
|
215
|
+
const mintBytes = base58Decode(mint);
|
|
216
|
+
const tokenProgramBytes = base58Decode(tokenProgram);
|
|
217
|
+
const ataProgramBytes = base58Decode(ATA_PROGRAM_ID);
|
|
218
|
+
const [address] = await findProgramAddress([walletBytes, tokenProgramBytes, mintBytes], ataProgramBytes);
|
|
219
|
+
return base58Encode(address);
|
|
220
|
+
}
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
// Instruction data encoding
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
/**
|
|
225
|
+
* Encode DepositSol instruction data (index 14 + LE u64 amount).
|
|
226
|
+
* @returns base64-encoded instruction data
|
|
227
|
+
*/
|
|
228
|
+
export function encodeDepositSolData(amountLamports) {
|
|
229
|
+
const buffer = new Uint8Array(9); // 1 byte index + 8 bytes u64
|
|
230
|
+
buffer[0] = 14; // DepositSol instruction index
|
|
231
|
+
const view = new DataView(buffer.buffer);
|
|
232
|
+
view.setBigUint64(1, amountLamports, true); // little-endian
|
|
233
|
+
return Buffer.from(buffer).toString('base64');
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Encode WithdrawSol instruction data (index 16 + LE u64 amount).
|
|
237
|
+
* @returns base64-encoded instruction data
|
|
238
|
+
*/
|
|
239
|
+
export function encodeWithdrawSolData(amountLamports) {
|
|
240
|
+
const buffer = new Uint8Array(9); // 1 byte index + 8 bytes u64
|
|
241
|
+
buffer[0] = 16; // WithdrawSol instruction index
|
|
242
|
+
const view = new DataView(buffer.buffer);
|
|
243
|
+
view.setBigUint64(1, amountLamports, true); // little-endian
|
|
244
|
+
return Buffer.from(buffer).toString('base64');
|
|
245
|
+
}
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
// Amount parsing
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
/**
|
|
250
|
+
* Parse a human-readable SOL amount string to lamports (bigint).
|
|
251
|
+
* SOL has 9 decimals (not 18 like ETH).
|
|
252
|
+
*
|
|
253
|
+
* "1.5" -> 1500000000n (1.5 SOL in lamports)
|
|
254
|
+
*
|
|
255
|
+
* @throws ChainError if amount is zero or negative
|
|
256
|
+
*/
|
|
257
|
+
export async function parseSolAmount(amount) {
|
|
258
|
+
const parts = amount.split('.');
|
|
259
|
+
const whole = BigInt(parts[0] || '0');
|
|
260
|
+
const decimals = (parts[1] || '').padEnd(9, '0').slice(0, 9);
|
|
261
|
+
const result = whole * 10n ** 9n + BigInt(decimals);
|
|
262
|
+
if (result <= 0n) {
|
|
263
|
+
const ChainError = await getChainError();
|
|
264
|
+
throw new ChainError('INVALID_INSTRUCTION', 'solana', {
|
|
265
|
+
message: 'Amount must be greater than 0',
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
return result;
|
|
269
|
+
}
|
|
270
|
+
// ---------------------------------------------------------------------------
|
|
271
|
+
// Sysvar and program addresses for WithdrawSol
|
|
272
|
+
// ---------------------------------------------------------------------------
|
|
273
|
+
const CLOCK_SYSVAR = 'SysvarC1ock11111111111111111111111111111111';
|
|
274
|
+
const STAKE_HISTORY_SYSVAR = 'SysvarStakeHistory1111111111111111111111111';
|
|
275
|
+
const STAKE_PROGRAM = 'Stake11111111111111111111111111111111111111';
|
|
276
|
+
/**
|
|
277
|
+
* Build a ContractCallRequest for SPL Stake Pool DepositSol.
|
|
278
|
+
*
|
|
279
|
+
* SPL Stake Pool DepositSol accounts (in order):
|
|
280
|
+
* 0. stakePool (writable)
|
|
281
|
+
* 1. withdrawAuthority (PDA, read-only)
|
|
282
|
+
* 2. reserveStake (writable)
|
|
283
|
+
* 3. fundingAccount (signer, writable) = wallet
|
|
284
|
+
* 4. destTokenAccount (writable) = wallet's JitoSOL ATA
|
|
285
|
+
* 5. managerFeeAccount (writable)
|
|
286
|
+
* 6. referralFeeAccount (writable) = same as managerFeeAccount (no referral)
|
|
287
|
+
* 7. poolMint (writable) = JitoSOL mint
|
|
288
|
+
* 8. systemProgram (read-only)
|
|
289
|
+
* 9. tokenProgram (read-only)
|
|
290
|
+
*/
|
|
291
|
+
export async function buildDepositSolRequest(config, amountLamports, walletAddress) {
|
|
292
|
+
const destTokenAccount = await getAssociatedTokenAddress(walletAddress, config.jitosolMint, SPL_TOKEN_PROGRAM);
|
|
293
|
+
const accounts = [
|
|
294
|
+
{ pubkey: config.stakePoolAddress, isSigner: false, isWritable: true },
|
|
295
|
+
{ pubkey: JITO_WITHDRAW_AUTHORITY, isSigner: false, isWritable: false },
|
|
296
|
+
{ pubkey: JITO_RESERVE_STAKE, isSigner: false, isWritable: true },
|
|
297
|
+
{ pubkey: walletAddress, isSigner: true, isWritable: true },
|
|
298
|
+
{ pubkey: destTokenAccount, isSigner: false, isWritable: true },
|
|
299
|
+
{ pubkey: JITO_MANAGER_FEE, isSigner: false, isWritable: true },
|
|
300
|
+
{ pubkey: JITO_MANAGER_FEE, isSigner: false, isWritable: true }, // referral = manager (no referral)
|
|
301
|
+
{ pubkey: config.jitosolMint, isSigner: false, isWritable: true },
|
|
302
|
+
{ pubkey: SYSTEM_PROGRAM, isSigner: false, isWritable: false },
|
|
303
|
+
{ pubkey: SPL_TOKEN_PROGRAM, isSigner: false, isWritable: false },
|
|
304
|
+
];
|
|
305
|
+
return {
|
|
306
|
+
type: 'CONTRACT_CALL',
|
|
307
|
+
to: config.stakePoolAddress,
|
|
308
|
+
programId: config.stakePoolProgram,
|
|
309
|
+
instructionData: encodeDepositSolData(amountLamports),
|
|
310
|
+
accounts,
|
|
311
|
+
value: amountLamports.toString(),
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Build a ContractCallRequest for SPL Stake Pool WithdrawSol.
|
|
316
|
+
*
|
|
317
|
+
* SPL Stake Pool WithdrawSol accounts (in order):
|
|
318
|
+
* 0. stakePool (writable)
|
|
319
|
+
* 1. withdrawAuthority (PDA, read-only)
|
|
320
|
+
* 2. userTransferAuthority (signer) = wallet
|
|
321
|
+
* 3. sourceTokenAccount (writable) = wallet's JitoSOL ATA
|
|
322
|
+
* 4. reserveStake (writable)
|
|
323
|
+
* 5. destSolAccount (writable) = wallet (receives SOL)
|
|
324
|
+
* 6. managerFeeAccount (writable)
|
|
325
|
+
* 7. poolMint (writable) = JitoSOL mint
|
|
326
|
+
* 8. clock (read-only)
|
|
327
|
+
* 9. stakeHistory (read-only)
|
|
328
|
+
* 10. stakeProgram (read-only)
|
|
329
|
+
* 11. tokenProgram (read-only)
|
|
330
|
+
*/
|
|
331
|
+
export async function buildWithdrawSolRequest(config, amountLamports, walletAddress) {
|
|
332
|
+
const sourceTokenAccount = await getAssociatedTokenAddress(walletAddress, config.jitosolMint, SPL_TOKEN_PROGRAM);
|
|
333
|
+
const accounts = [
|
|
334
|
+
{ pubkey: config.stakePoolAddress, isSigner: false, isWritable: true },
|
|
335
|
+
{ pubkey: JITO_WITHDRAW_AUTHORITY, isSigner: false, isWritable: false },
|
|
336
|
+
{ pubkey: walletAddress, isSigner: true, isWritable: false },
|
|
337
|
+
{ pubkey: sourceTokenAccount, isSigner: false, isWritable: true },
|
|
338
|
+
{ pubkey: JITO_RESERVE_STAKE, isSigner: false, isWritable: true },
|
|
339
|
+
{ pubkey: walletAddress, isSigner: false, isWritable: true },
|
|
340
|
+
{ pubkey: JITO_MANAGER_FEE, isSigner: false, isWritable: true },
|
|
341
|
+
{ pubkey: config.jitosolMint, isSigner: false, isWritable: true },
|
|
342
|
+
{ pubkey: CLOCK_SYSVAR, isSigner: false, isWritable: false },
|
|
343
|
+
{ pubkey: STAKE_HISTORY_SYSVAR, isSigner: false, isWritable: false },
|
|
344
|
+
{ pubkey: STAKE_PROGRAM, isSigner: false, isWritable: false },
|
|
345
|
+
{ pubkey: SPL_TOKEN_PROGRAM, isSigner: false, isWritable: false },
|
|
346
|
+
];
|
|
347
|
+
return {
|
|
348
|
+
type: 'CONTRACT_CALL',
|
|
349
|
+
to: config.stakePoolAddress,
|
|
350
|
+
programId: config.stakePoolProgram,
|
|
351
|
+
instructionData: encodeWithdrawSolData(amountLamports),
|
|
352
|
+
accounts,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=jito-stake-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jito-stake-pool.js","sourceRoot":"","sources":["../../../src/providers/jito-staking/jito-stake-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lido Staking configuration type, defaults, and contract address maps.
|
|
3
|
+
*
|
|
4
|
+
* Supports Ethereum mainnet and Holesky testnet.
|
|
5
|
+
* See: https://docs.lido.fi/deployed-contracts/
|
|
6
|
+
*/
|
|
7
|
+
export interface LidoStakingConfig {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
stethAddress: string;
|
|
10
|
+
withdrawalQueueAddress: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const LIDO_MAINNET_ADDRESSES: {
|
|
13
|
+
readonly stethAddress: "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84";
|
|
14
|
+
readonly withdrawalQueueAddress: "0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1";
|
|
15
|
+
};
|
|
16
|
+
export declare const LIDO_TESTNET_ADDRESSES: {
|
|
17
|
+
readonly stethAddress: "0x3F1c547b21f65e10480dE3ad8E19fAAC46C95034";
|
|
18
|
+
readonly withdrawalQueueAddress: "0xc7cc160b58F8Bb0baC94b80847E2CF2800565C50";
|
|
19
|
+
};
|
|
20
|
+
export declare const LIDO_STAKING_DEFAULTS: LidoStakingConfig;
|
|
21
|
+
/**
|
|
22
|
+
* Get Lido contract addresses for a given environment type.
|
|
23
|
+
* @param environment - 'mainnet' or 'testnet'
|
|
24
|
+
*/
|
|
25
|
+
export declare function getLidoAddresses(environment: 'mainnet' | 'testnet'): {
|
|
26
|
+
stethAddress: string;
|
|
27
|
+
withdrawalQueueAddress: string;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/providers/lido-staking/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAMD,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAMX,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAMX,eAAO,MAAM,qBAAqB,EAAE,iBAGnC,CAAC;AAMF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,SAAS,GAAG,SAAS,GACjC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,sBAAsB,EAAE,MAAM,CAAA;CAAE,CAI1D"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lido Staking configuration type, defaults, and contract address maps.
|
|
3
|
+
*
|
|
4
|
+
* Supports Ethereum mainnet and Holesky testnet.
|
|
5
|
+
* See: https://docs.lido.fi/deployed-contracts/
|
|
6
|
+
*/
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Mainnet addresses (Ethereum)
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
export const LIDO_MAINNET_ADDRESSES = {
|
|
11
|
+
stethAddress: '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84',
|
|
12
|
+
withdrawalQueueAddress: '0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1',
|
|
13
|
+
};
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Testnet addresses (Holesky -- Lido has no official Sepolia deployment)
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
export const LIDO_TESTNET_ADDRESSES = {
|
|
18
|
+
stethAddress: '0x3F1c547b21f65e10480dE3ad8E19fAAC46C95034',
|
|
19
|
+
withdrawalQueueAddress: '0xc7cc160b58F8Bb0baC94b80847E2CF2800565C50',
|
|
20
|
+
};
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Defaults (disabled, mainnet addresses)
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
export const LIDO_STAKING_DEFAULTS = {
|
|
25
|
+
enabled: false,
|
|
26
|
+
...LIDO_MAINNET_ADDRESSES,
|
|
27
|
+
};
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Helper to select addresses by environment
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/**
|
|
32
|
+
* Get Lido contract addresses for a given environment type.
|
|
33
|
+
* @param environment - 'mainnet' or 'testnet'
|
|
34
|
+
*/
|
|
35
|
+
export function getLidoAddresses(environment) {
|
|
36
|
+
return environment === 'testnet'
|
|
37
|
+
? { ...LIDO_TESTNET_ADDRESSES }
|
|
38
|
+
: { ...LIDO_MAINNET_ADDRESSES };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/lido-staking/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,4CAA4C;IAC1D,sBAAsB,EAAE,4CAA4C;CAC5D,CAAC;AAEX,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY,EAAE,4CAA4C;IAC1D,sBAAsB,EAAE,4CAA4C;CAC5D,CAAC;AAEX,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,OAAO,EAAE,KAAK;IACd,GAAG,sBAAsB;CAC1B,CAAC;AAEF,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAkC;IAElC,OAAO,WAAW,KAAK,SAAS;QAC9B,CAAC,CAAC,EAAE,GAAG,sBAAsB,EAAE;QAC/B,CAAC,CAAC,EAAE,GAAG,sBAAsB,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IActionProvider, ActionProviderMetadata, ActionDefinition, ActionContext, ContractCallRequest } from '@waiaas/core';
|
|
2
|
+
import { type LidoStakingConfig } from './config.js';
|
|
3
|
+
export declare class LidoStakingActionProvider implements IActionProvider {
|
|
4
|
+
readonly metadata: ActionProviderMetadata;
|
|
5
|
+
readonly actions: readonly ActionDefinition[];
|
|
6
|
+
private readonly config;
|
|
7
|
+
constructor(config?: Partial<LidoStakingConfig>);
|
|
8
|
+
resolve(actionName: string, params: Record<string, unknown>, context: ActionContext): Promise<ContractCallRequest | ContractCallRequest[]>;
|
|
9
|
+
private resolveStake;
|
|
10
|
+
private resolveUnstake;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/lido-staking/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,iBAAiB,EAAyB,MAAM,aAAa,CAAC;AAgD5E,qBAAa,yBAA0B,YAAW,eAAe;IAC/D,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAE9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAiCzC,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;IAkBvD,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,cAAc;CA+BvB"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lido Staking Action Provider.
|
|
3
|
+
*
|
|
4
|
+
* Implements IActionProvider to resolve Lido liquid staking requests
|
|
5
|
+
* into ContractCallRequest arrays for the sequential pipeline.
|
|
6
|
+
*
|
|
7
|
+
* Actions:
|
|
8
|
+
* - stake: ETH -> stETH via Lido submit() (single element)
|
|
9
|
+
* - unstake: stETH -> ETH via WithdrawalQueue (2 elements: approve + requestWithdrawals)
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { ChainError } from '@waiaas/core';
|
|
13
|
+
import { LIDO_STAKING_DEFAULTS } from './config.js';
|
|
14
|
+
import { encodeSubmitCalldata, encodeRequestWithdrawalsCalldata, encodeApproveCalldata, } from './lido-contract.js';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Input schemas (Zod SSoT)
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
const LidoStakeInputSchema = z.object({
|
|
19
|
+
amount: z.string().min(1, 'amount is required (ETH, e.g. "1.0")'),
|
|
20
|
+
});
|
|
21
|
+
const LidoUnstakeInputSchema = z.object({
|
|
22
|
+
amount: z.string().min(1, 'amount is required (stETH, e.g. "1.0")'),
|
|
23
|
+
});
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Amount parsing helper
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* Parse a human-readable ETH/stETH amount string to wei (bigint).
|
|
29
|
+
* Handles decimal amounts like "1.5" -> 1500000000000000000n.
|
|
30
|
+
*
|
|
31
|
+
* @throws ChainError if amount is zero or negative
|
|
32
|
+
*/
|
|
33
|
+
function parseEthAmount(amount) {
|
|
34
|
+
const parts = amount.split('.');
|
|
35
|
+
const whole = BigInt(parts[0] || '0');
|
|
36
|
+
const decimals = (parts[1] || '').padEnd(18, '0').slice(0, 18);
|
|
37
|
+
const result = whole * 10n ** 18n + BigInt(decimals);
|
|
38
|
+
if (result <= 0n) {
|
|
39
|
+
throw new ChainError('INVALID_INSTRUCTION', 'ethereum', {
|
|
40
|
+
message: 'Amount must be greater than 0',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Provider implementation
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
export class LidoStakingActionProvider {
|
|
49
|
+
metadata;
|
|
50
|
+
actions;
|
|
51
|
+
config;
|
|
52
|
+
constructor(config) {
|
|
53
|
+
this.config = { ...LIDO_STAKING_DEFAULTS, ...config };
|
|
54
|
+
this.metadata = {
|
|
55
|
+
name: 'lido_staking',
|
|
56
|
+
description: 'Lido liquid staking protocol for ETH to stETH conversion with withdrawal support',
|
|
57
|
+
version: '1.0.0',
|
|
58
|
+
chains: ['ethereum'],
|
|
59
|
+
mcpExpose: true,
|
|
60
|
+
requiresApiKey: false,
|
|
61
|
+
requiredApis: [],
|
|
62
|
+
};
|
|
63
|
+
this.actions = [
|
|
64
|
+
{
|
|
65
|
+
name: 'stake',
|
|
66
|
+
description: 'Stake ETH to receive stETH via Lido protocol (submit). Immediate, no lock-up.',
|
|
67
|
+
chain: 'ethereum',
|
|
68
|
+
inputSchema: LidoStakeInputSchema,
|
|
69
|
+
riskLevel: 'medium',
|
|
70
|
+
defaultTier: 'DELAY',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'unstake',
|
|
74
|
+
description: 'Request stETH to ETH withdrawal via Lido Withdrawal Queue. Takes 1-5 days to finalize.',
|
|
75
|
+
chain: 'ethereum',
|
|
76
|
+
inputSchema: LidoUnstakeInputSchema,
|
|
77
|
+
riskLevel: 'medium',
|
|
78
|
+
defaultTier: 'DELAY',
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
}
|
|
82
|
+
async resolve(actionName, params, context) {
|
|
83
|
+
if (actionName === 'stake') {
|
|
84
|
+
return this.resolveStake(params);
|
|
85
|
+
}
|
|
86
|
+
if (actionName === 'unstake') {
|
|
87
|
+
return this.resolveUnstake(params, context);
|
|
88
|
+
}
|
|
89
|
+
throw new ChainError('INVALID_INSTRUCTION', 'ethereum', {
|
|
90
|
+
message: `Unknown action: ${actionName}`,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
// -------------------------------------------------------------------------
|
|
94
|
+
// Stake: ETH -> stETH via submit()
|
|
95
|
+
// -------------------------------------------------------------------------
|
|
96
|
+
resolveStake(params) {
|
|
97
|
+
const input = LidoStakeInputSchema.parse(params);
|
|
98
|
+
const amountWei = parseEthAmount(input.amount);
|
|
99
|
+
return {
|
|
100
|
+
type: 'CONTRACT_CALL',
|
|
101
|
+
to: this.config.stethAddress,
|
|
102
|
+
calldata: encodeSubmitCalldata(), // submit(address(0)) referral
|
|
103
|
+
value: amountWei.toString(), // ETH value sent with tx
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// -------------------------------------------------------------------------
|
|
107
|
+
// Unstake: stETH -> ETH via WithdrawalQueue (approve + requestWithdrawals)
|
|
108
|
+
// -------------------------------------------------------------------------
|
|
109
|
+
resolveUnstake(params, context) {
|
|
110
|
+
const input = LidoUnstakeInputSchema.parse(params);
|
|
111
|
+
const amountWei = parseEthAmount(input.amount);
|
|
112
|
+
// Step 1: Approve stETH to WithdrawalQueue
|
|
113
|
+
const approveRequest = {
|
|
114
|
+
type: 'CONTRACT_CALL',
|
|
115
|
+
to: this.config.stethAddress,
|
|
116
|
+
calldata: encodeApproveCalldata(this.config.withdrawalQueueAddress, amountWei),
|
|
117
|
+
value: '0',
|
|
118
|
+
};
|
|
119
|
+
// Step 2: Request withdrawal from WithdrawalQueue
|
|
120
|
+
const withdrawRequest = {
|
|
121
|
+
type: 'CONTRACT_CALL',
|
|
122
|
+
to: this.config.withdrawalQueueAddress,
|
|
123
|
+
calldata: encodeRequestWithdrawalsCalldata([amountWei], context.walletAddress),
|
|
124
|
+
value: '0',
|
|
125
|
+
};
|
|
126
|
+
return [approveRequest, withdrawRequest];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/lido-staking/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lido contract ABI encoding helpers.
|
|
3
|
+
*
|
|
4
|
+
* Manual ABI encoding (no viem dependency) for:
|
|
5
|
+
* - stETH submit(address _referral)
|
|
6
|
+
* - WithdrawalQueue requestWithdrawals(uint256[] _amounts, address _owner)
|
|
7
|
+
* - ERC-20 approve(address spender, uint256 amount)
|
|
8
|
+
*
|
|
9
|
+
* Function selectors are hardcoded hex constants derived from keccak256 of function signatures.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Encode Lido stETH submit(address _referral) calldata.
|
|
13
|
+
* ETH value is sent as transaction value, not encoded in calldata.
|
|
14
|
+
*
|
|
15
|
+
* @param referral - Referral address (defaults to zero address)
|
|
16
|
+
* @returns ABI-encoded calldata with 0x prefix
|
|
17
|
+
*/
|
|
18
|
+
export declare function encodeSubmitCalldata(referral?: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Encode Lido WithdrawalQueue requestWithdrawals(uint256[], address) calldata.
|
|
21
|
+
*
|
|
22
|
+
* ABI layout:
|
|
23
|
+
* selector (4 bytes)
|
|
24
|
+
* offset to amounts array (32 bytes) = 0x40 (64 decimal)
|
|
25
|
+
* owner address (32 bytes)
|
|
26
|
+
* array length (32 bytes)
|
|
27
|
+
* array element 0 (32 bytes)
|
|
28
|
+
* ... array element N (32 bytes)
|
|
29
|
+
*
|
|
30
|
+
* @param amounts - Array of stETH withdrawal amounts in wei
|
|
31
|
+
* @param owner - Address to receive the withdrawal NFT
|
|
32
|
+
* @returns ABI-encoded calldata with 0x prefix
|
|
33
|
+
*/
|
|
34
|
+
export declare function encodeRequestWithdrawalsCalldata(amounts: bigint[], owner: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Encode ERC-20 approve(address spender, uint256 amount) calldata.
|
|
37
|
+
*
|
|
38
|
+
* @param spender - Spender address to approve
|
|
39
|
+
* @param amount - Amount to approve in wei
|
|
40
|
+
* @returns ABI-encoded calldata with 0x prefix
|
|
41
|
+
*/
|
|
42
|
+
export declare function encodeApproveCalldata(spender: string, amount: bigint): string;
|
|
43
|
+
//# sourceMappingURL=lido-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lido-contract.d.ts","sourceRoot":"","sources":["../../../src/providers/lido-staking/lido-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuBH;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,GAAE,MAAqD,GAC9D,MAAM,CAIR;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,GACZ,MAAM,CAUR;AAMD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK7E"}
|