@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
package/README.md
CHANGED
|
@@ -25,22 +25,69 @@ WAIaaS is a local daemon that sits between your AI agent and the blockchain:
|
|
|
25
25
|
|
|
26
26
|
See [Security Model](docs/security-model.md) for full details.
|
|
27
27
|
|
|
28
|
+
## Architecture
|
|
29
|
+
|
|
30
|
+
```mermaid
|
|
31
|
+
graph LR
|
|
32
|
+
subgraph Interfaces
|
|
33
|
+
SDK["TypeScript SDK"]
|
|
34
|
+
MCP["MCP Server"]
|
|
35
|
+
CLI["CLI"]
|
|
36
|
+
Admin["Admin UI"]
|
|
37
|
+
Skills["Skill Files"]
|
|
38
|
+
WalletSDK["Wallet SDK"]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
subgraph Daemon
|
|
42
|
+
API["API Layer<br>(Hono + Middleware)"]
|
|
43
|
+
Services["Service Layer<br>(Policy, Notifications, Kill Switch)"]
|
|
44
|
+
Pipeline["Transaction Pipeline<br>(6-stage + 8-state)"]
|
|
45
|
+
Infra["Infrastructure<br>(SQLite, Keystore, Config)"]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
subgraph Blockchain
|
|
49
|
+
Solana["Solana"]
|
|
50
|
+
EVM["EVM Chains"]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
SDK & MCP & CLI & Admin & Skills & WalletSDK --> API
|
|
54
|
+
API --> Services --> Pipeline --> Infra
|
|
55
|
+
Infra --> Solana & EVM
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**12 packages** in a monorepo:
|
|
59
|
+
|
|
60
|
+
- **@waiaas/core** — Shared types, Zod schemas, enums, and interfaces
|
|
61
|
+
- **@waiaas/daemon** — Self-hosted wallet daemon (Hono HTTP server)
|
|
62
|
+
- **@waiaas/adapter-solana** — Solana chain adapter (SPL / Token-2022)
|
|
63
|
+
- **@waiaas/adapter-evm** — EVM chain adapter (ERC-20 via viem)
|
|
64
|
+
- **@waiaas/actions** — DeFi Action Providers (Jupiter, 0x, LI.FI, Lido, Jito)
|
|
65
|
+
- **@waiaas/sdk** — TypeScript client library
|
|
66
|
+
- **@waiaas/mcp** — Model Context Protocol server for AI agents
|
|
67
|
+
- **@waiaas/cli** — Command-line interface
|
|
68
|
+
- **@waiaas/admin** — Preact-based Admin Web UI
|
|
69
|
+
- **@waiaas/wallet-sdk** — Wallet Signing SDK for wallet app integration
|
|
70
|
+
- **@waiaas/push-relay** — Push Relay Server (ntfy → push services)
|
|
71
|
+
- **@waiaas/skills** — Pre-built `.skill.md` instruction files for AI agents
|
|
72
|
+
|
|
73
|
+
See [Architecture](docs/architecture.md) for the full technical deep-dive.
|
|
74
|
+
|
|
28
75
|
## Quick Start
|
|
29
76
|
|
|
30
77
|
```bash
|
|
31
78
|
npm install -g @waiaas/cli
|
|
32
79
|
waiaas init # Create data directory + config.toml
|
|
33
80
|
waiaas start # Start daemon (sets master password on first run)
|
|
34
|
-
waiaas quickset --mode
|
|
81
|
+
waiaas quickset --mode mainnet # Create wallets + MCP sessions in one step
|
|
35
82
|
```
|
|
36
83
|
|
|
37
84
|
The `quickset` command does everything you need to get started:
|
|
38
85
|
|
|
39
|
-
1. Creates **Solana
|
|
86
|
+
1. Creates **Solana Mainnet + EVM Ethereum Mainnet** wallets automatically
|
|
40
87
|
2. Issues **MCP session tokens** for each wallet
|
|
41
88
|
3. Outputs a **Claude Desktop MCP config** snippet -- just copy and paste
|
|
42
89
|
|
|
43
|
-
>
|
|
90
|
+
> We recommend configuring spending limits and registering an owner wallet for high-value transaction approval. For testing, use `waiaas quickset --mode testnet` to create Solana Devnet + EVM Sepolia wallets instead.
|
|
44
91
|
|
|
45
92
|
### Admin UI
|
|
46
93
|
|
|
@@ -143,6 +190,7 @@ Enabled by default (`admin_ui = true` in config.toml).
|
|
|
143
190
|
|
|
144
191
|
| Document | Description |
|
|
145
192
|
|----------|-------------|
|
|
193
|
+
| [Architecture](docs/architecture.md) | System overview, package structure, pipeline, chain adapters |
|
|
146
194
|
| [Security Model](docs/security-model.md) | Authentication, policy engine, Kill Switch, AutoStop |
|
|
147
195
|
| [Deployment Guide](docs/deployment.md) | Docker, npm, configuration reference |
|
|
148
196
|
| [API Reference](docs/api-reference.md) | REST API endpoints and authentication |
|
package/dist/index.d.ts
CHANGED
|
@@ -16,6 +16,14 @@ export { LIFI_DEFAULTS, LIFI_CHAIN_MAP, getLiFiChainId } from './providers/lifi/
|
|
|
16
16
|
export type { LiFiConfig } from './providers/lifi/config.js';
|
|
17
17
|
export { LiFiApiClient } from './providers/lifi/lifi-api-client.js';
|
|
18
18
|
export { BridgeStatusTracker, BridgeMonitoringTracker } from './providers/lifi/bridge-status-tracker.js';
|
|
19
|
+
export { LidoStakingActionProvider } from './providers/lido-staking/index.js';
|
|
20
|
+
export { LIDO_STAKING_DEFAULTS, LIDO_MAINNET_ADDRESSES, LIDO_TESTNET_ADDRESSES, getLidoAddresses } from './providers/lido-staking/config.js';
|
|
21
|
+
export type { LidoStakingConfig } from './providers/lido-staking/config.js';
|
|
22
|
+
export { LidoWithdrawalTracker } from './providers/lido-staking/withdrawal-tracker.js';
|
|
23
|
+
export { JitoStakingActionProvider } from './providers/jito-staking/index.js';
|
|
24
|
+
export { JITO_STAKING_DEFAULTS, JITO_MAINNET_ADDRESSES, getJitoAddresses } from './providers/jito-staking/config.js';
|
|
25
|
+
export type { JitoStakingConfig } from './providers/jito-staking/config.js';
|
|
26
|
+
export { JitoEpochTracker } from './providers/jito-staking/epoch-tracker.js';
|
|
19
27
|
export { ActionApiClient } from './common/action-api-client.js';
|
|
20
28
|
export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
|
|
21
29
|
export type { SlippageBps, SlippagePct } from './common/slippage.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,cAAc,CAAC;AAWjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC/F,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC5I,YAAY,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC3F,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAEzG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC7I,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAEvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACrH,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAG7E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1F,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGrE,OAAO,EACL,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,GACb,MAAM,kCAAkC,CAAC;AAM1C,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,gBAAgB,EAC1B,cAAc,EAAE,cAAc,GAC7B;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAsHzC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
import { deriveEnvironment } from '@waiaas/core';
|
|
1
2
|
import { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
|
|
2
3
|
import { ZeroExSwapActionProvider } from './providers/zerox-swap/index.js';
|
|
3
4
|
import { LiFiActionProvider } from './providers/lifi/index.js';
|
|
5
|
+
import { LidoStakingActionProvider } from './providers/lido-staking/index.js';
|
|
6
|
+
import { getLidoAddresses } from './providers/lido-staking/config.js';
|
|
7
|
+
import { JitoStakingActionProvider } from './providers/jito-staking/index.js';
|
|
8
|
+
import { getJitoAddresses } from './providers/jito-staking/config.js';
|
|
4
9
|
// Re-export provider classes
|
|
5
10
|
export { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
|
|
6
11
|
export { JUPITER_PROGRAM_ID, JUPITER_SWAP_DEFAULTS } from './providers/jupiter-swap/config.js';
|
|
@@ -10,6 +15,12 @@ export { LiFiActionProvider } from './providers/lifi/index.js';
|
|
|
10
15
|
export { LIFI_DEFAULTS, LIFI_CHAIN_MAP, getLiFiChainId } from './providers/lifi/config.js';
|
|
11
16
|
export { LiFiApiClient } from './providers/lifi/lifi-api-client.js';
|
|
12
17
|
export { BridgeStatusTracker, BridgeMonitoringTracker } from './providers/lifi/bridge-status-tracker.js';
|
|
18
|
+
export { LidoStakingActionProvider } from './providers/lido-staking/index.js';
|
|
19
|
+
export { LIDO_STAKING_DEFAULTS, LIDO_MAINNET_ADDRESSES, LIDO_TESTNET_ADDRESSES, getLidoAddresses } from './providers/lido-staking/config.js';
|
|
20
|
+
export { LidoWithdrawalTracker } from './providers/lido-staking/withdrawal-tracker.js';
|
|
21
|
+
export { JitoStakingActionProvider } from './providers/jito-staking/index.js';
|
|
22
|
+
export { JITO_STAKING_DEFAULTS, JITO_MAINNET_ADDRESSES, getJitoAddresses } from './providers/jito-staking/config.js';
|
|
23
|
+
export { JitoEpochTracker } from './providers/jito-staking/epoch-tracker.js';
|
|
13
24
|
// Re-export common utilities
|
|
14
25
|
export { ActionApiClient } from './common/action-api-client.js';
|
|
15
26
|
export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
|
|
@@ -71,6 +82,43 @@ export function registerBuiltInProviders(registry, settingsReader) {
|
|
|
71
82
|
return new LiFiActionProvider(config);
|
|
72
83
|
},
|
|
73
84
|
},
|
|
85
|
+
{
|
|
86
|
+
key: 'lido_staking',
|
|
87
|
+
enabledKey: 'actions.lido_staking_enabled',
|
|
88
|
+
factory: () => {
|
|
89
|
+
// Resolve environment from registered rpc.evm_default_network setting
|
|
90
|
+
const evmNetwork = settingsReader.get('rpc.evm_default_network') || 'ethereum-mainnet';
|
|
91
|
+
const isTestnet = deriveEnvironment(evmNetwork) === 'testnet';
|
|
92
|
+
const addresses = getLidoAddresses(isTestnet ? 'testnet' : 'mainnet');
|
|
93
|
+
// Admin Settings overrides individual addresses; empty string falls back to environment default
|
|
94
|
+
const stethOverride = settingsReader.get('actions.lido_staking_steth_address');
|
|
95
|
+
const withdrawalOverride = settingsReader.get('actions.lido_staking_withdrawal_queue_address');
|
|
96
|
+
const config = {
|
|
97
|
+
enabled: true,
|
|
98
|
+
stethAddress: stethOverride || addresses.stethAddress,
|
|
99
|
+
withdrawalQueueAddress: withdrawalOverride || addresses.withdrawalQueueAddress,
|
|
100
|
+
};
|
|
101
|
+
return new LidoStakingActionProvider(config);
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
key: 'jito_staking',
|
|
106
|
+
enabledKey: 'actions.jito_staking_enabled',
|
|
107
|
+
factory: () => {
|
|
108
|
+
// Jito is mainnet-only -- no testnet pool exists.
|
|
109
|
+
// Read admin override addresses; empty string falls back to mainnet defaults.
|
|
110
|
+
const stakePoolOverride = settingsReader.get('actions.jito_staking_stake_pool_address');
|
|
111
|
+
const jitosolMintOverride = settingsReader.get('actions.jito_staking_jitosol_mint');
|
|
112
|
+
const addresses = getJitoAddresses('mainnet');
|
|
113
|
+
const config = {
|
|
114
|
+
enabled: true,
|
|
115
|
+
stakePoolAddress: stakePoolOverride || addresses.stakePoolAddress,
|
|
116
|
+
jitosolMint: jitosolMintOverride || addresses.jitosolMint,
|
|
117
|
+
stakePoolProgram: addresses.stakePoolProgram,
|
|
118
|
+
};
|
|
119
|
+
return new JitoStakingActionProvider(config);
|
|
120
|
+
},
|
|
121
|
+
},
|
|
74
122
|
];
|
|
75
123
|
for (const { key, enabledKey, factory } of providers) {
|
|
76
124
|
if (settingsReader.get(enabledKey) === 'true') {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jito Staking configuration type, defaults, and address maps.
|
|
3
|
+
*
|
|
4
|
+
* Supports Solana mainnet only (Jito has no official devnet/testnet deployment).
|
|
5
|
+
* See: https://www.jito.network/
|
|
6
|
+
*/
|
|
7
|
+
export interface JitoStakingConfig {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
stakePoolAddress: string;
|
|
10
|
+
jitosolMint: string;
|
|
11
|
+
stakePoolProgram: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const JITO_MAINNET_ADDRESSES: {
|
|
14
|
+
readonly stakePoolAddress: "Jito4APyf642JPZPx3hGc6WWJ8zPKtRbRs4P815Awbb";
|
|
15
|
+
readonly jitosolMint: "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn";
|
|
16
|
+
readonly stakePoolProgram: "SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy";
|
|
17
|
+
};
|
|
18
|
+
/** Stake Pool withdraw authority (PDA derived from stake pool address). */
|
|
19
|
+
export declare const JITO_WITHDRAW_AUTHORITY = "6iQKfEyhr3bZMotVkW6beNZz5CPAkiwvgV2CTje9pVSS";
|
|
20
|
+
/** Reserve stake account for the Jito Stake Pool. */
|
|
21
|
+
export declare const JITO_RESERVE_STAKE = "BgKUXdS2jFbByBaPQRf6eSCjMH3mRLDPH1MCVLhEAD3c";
|
|
22
|
+
/** Manager fee account for the Jito Stake Pool. */
|
|
23
|
+
export declare const JITO_MANAGER_FEE = "B1aLzaNMeFVAyQ6f3XbbUyKcH2YPHu2fqiEagmiF23VR";
|
|
24
|
+
/** SPL Token Program. */
|
|
25
|
+
export declare const SPL_TOKEN_PROGRAM = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
|
|
26
|
+
/** System Program. */
|
|
27
|
+
export declare const SYSTEM_PROGRAM = "11111111111111111111111111111111";
|
|
28
|
+
export declare const JITO_STAKING_DEFAULTS: JitoStakingConfig;
|
|
29
|
+
/**
|
|
30
|
+
* Get Jito addresses for a given environment type.
|
|
31
|
+
*
|
|
32
|
+
* Jito Stake Pool is mainnet-only. Testnet falls back to mainnet addresses.
|
|
33
|
+
*
|
|
34
|
+
* @param environment - 'mainnet' or 'testnet'
|
|
35
|
+
*/
|
|
36
|
+
export declare function getJitoAddresses(environment: 'mainnet' | 'testnet'): {
|
|
37
|
+
stakePoolAddress: string;
|
|
38
|
+
jitosolMint: string;
|
|
39
|
+
stakePoolProgram: string;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/providers/jito-staking/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAMD,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAMX,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,iDAAiD,CAAC;AAEtF,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,iDAAiD,CAAC;AAEjF,mDAAmD;AACnD,eAAO,MAAM,gBAAgB,iDAAiD,CAAC;AAE/E,yBAAyB;AACzB,eAAO,MAAM,iBAAiB,gDAAgD,CAAC;AAE/E,sBAAsB;AACtB,eAAO,MAAM,cAAc,qCAAqC,CAAC;AAMjE,eAAO,MAAM,qBAAqB,EAAE,iBAGnC,CAAC;AAMF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,SAAS,GAAG,SAAS,GACjC;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAI7E"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jito Staking configuration type, defaults, and address maps.
|
|
3
|
+
*
|
|
4
|
+
* Supports Solana mainnet only (Jito has no official devnet/testnet deployment).
|
|
5
|
+
* See: https://www.jito.network/
|
|
6
|
+
*/
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Mainnet addresses (Solana)
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
export const JITO_MAINNET_ADDRESSES = {
|
|
11
|
+
stakePoolAddress: 'Jito4APyf642JPZPx3hGc6WWJ8zPKtRbRs4P815Awbb',
|
|
12
|
+
jitosolMint: 'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn',
|
|
13
|
+
stakePoolProgram: 'SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy',
|
|
14
|
+
};
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Well-known PDA and program addresses
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/** Stake Pool withdraw authority (PDA derived from stake pool address). */
|
|
19
|
+
export const JITO_WITHDRAW_AUTHORITY = '6iQKfEyhr3bZMotVkW6beNZz5CPAkiwvgV2CTje9pVSS';
|
|
20
|
+
/** Reserve stake account for the Jito Stake Pool. */
|
|
21
|
+
export const JITO_RESERVE_STAKE = 'BgKUXdS2jFbByBaPQRf6eSCjMH3mRLDPH1MCVLhEAD3c';
|
|
22
|
+
/** Manager fee account for the Jito Stake Pool. */
|
|
23
|
+
export const JITO_MANAGER_FEE = 'B1aLzaNMeFVAyQ6f3XbbUyKcH2YPHu2fqiEagmiF23VR';
|
|
24
|
+
/** SPL Token Program. */
|
|
25
|
+
export const SPL_TOKEN_PROGRAM = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';
|
|
26
|
+
/** System Program. */
|
|
27
|
+
export const SYSTEM_PROGRAM = '11111111111111111111111111111111';
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Defaults (disabled, mainnet addresses)
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
export const JITO_STAKING_DEFAULTS = {
|
|
32
|
+
enabled: false,
|
|
33
|
+
...JITO_MAINNET_ADDRESSES,
|
|
34
|
+
};
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Helper to select addresses by environment
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Get Jito addresses for a given environment type.
|
|
40
|
+
*
|
|
41
|
+
* Jito Stake Pool is mainnet-only. Testnet falls back to mainnet addresses.
|
|
42
|
+
*
|
|
43
|
+
* @param environment - 'mainnet' or 'testnet'
|
|
44
|
+
*/
|
|
45
|
+
export function getJitoAddresses(environment) {
|
|
46
|
+
// Jito Stake Pool is mainnet-only. Testnet falls back to mainnet addresses.
|
|
47
|
+
void environment;
|
|
48
|
+
return { ...JITO_MAINNET_ADDRESSES };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/jito-staking/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,gBAAgB,EAAE,6CAA6C;IAC/D,WAAW,EAAE,8CAA8C;IAC3D,gBAAgB,EAAE,6CAA6C;CACvD,CAAC;AAEX,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,8CAA8C,CAAC;AAEtF,qDAAqD;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,8CAA8C,CAAC;AAEjF,mDAAmD;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,8CAA8C,CAAC;AAE/E,yBAAyB;AACzB,MAAM,CAAC,MAAM,iBAAiB,GAAG,6CAA6C,CAAC;AAE/E,sBAAsB;AACtB,MAAM,CAAC,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAEjE,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;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAkC;IAElC,4EAA4E;IAC5E,KAAK,WAAW,CAAC;IACjB,OAAO,EAAE,GAAG,sBAAsB,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JitoEpochTracker - IAsyncStatusTracker for Jito SOL unstake epoch boundary.
|
|
3
|
+
*
|
|
4
|
+
* Tracks Jito unstake requests via metadata-based polling (v1 implementation).
|
|
5
|
+
* Active polling: 30s x 240 = 2 hours, then TIMEOUT (terminal).
|
|
6
|
+
*
|
|
7
|
+
* Solana epoch boundaries occur every ~2-3 days. Jito unstake deactivates
|
|
8
|
+
* the stake account, and cooldown completes at the next epoch boundary.
|
|
9
|
+
* This tracker monitors metadata state and emits STAKING_UNSTAKE_COMPLETED
|
|
10
|
+
* or STAKING_UNSTAKE_TIMEOUT notifications.
|
|
11
|
+
*
|
|
12
|
+
* @see packages/actions/src/common/async-status-tracker.ts
|
|
13
|
+
*/
|
|
14
|
+
import type { IAsyncStatusTracker, AsyncTrackingResult } from '../../common/async-status-tracker.js';
|
|
15
|
+
export declare class JitoEpochTracker implements IAsyncStatusTracker {
|
|
16
|
+
readonly name = "jito-epoch";
|
|
17
|
+
readonly maxAttempts = 240;
|
|
18
|
+
readonly pollIntervalMs = 30000;
|
|
19
|
+
readonly timeoutTransition: "TIMEOUT";
|
|
20
|
+
checkStatus(_txId: string, metadata: Record<string, unknown>): Promise<AsyncTrackingResult>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=epoch-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epoch-tracker.d.ts","sourceRoot":"","sources":["../../../src/providers/jito-staking/epoch-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAKrG,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,OAAO;IAC3B,QAAQ,CAAC,cAAc,SAAU;IACjC,QAAQ,CAAC,iBAAiB,EAAG,SAAS,CAAU;IAE1C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA4BlG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JitoEpochTracker - IAsyncStatusTracker for Jito SOL unstake epoch boundary.
|
|
3
|
+
*
|
|
4
|
+
* Tracks Jito unstake requests via metadata-based polling (v1 implementation).
|
|
5
|
+
* Active polling: 30s x 240 = 2 hours, then TIMEOUT (terminal).
|
|
6
|
+
*
|
|
7
|
+
* Solana epoch boundaries occur every ~2-3 days. Jito unstake deactivates
|
|
8
|
+
* the stake account, and cooldown completes at the next epoch boundary.
|
|
9
|
+
* This tracker monitors metadata state and emits STAKING_UNSTAKE_COMPLETED
|
|
10
|
+
* or STAKING_UNSTAKE_TIMEOUT notifications.
|
|
11
|
+
*
|
|
12
|
+
* @see packages/actions/src/common/async-status-tracker.ts
|
|
13
|
+
*/
|
|
14
|
+
/** Expected days for Solana epoch boundary (~2-3 days). */
|
|
15
|
+
const JITO_EXPECTED_DAYS = 3;
|
|
16
|
+
export class JitoEpochTracker {
|
|
17
|
+
name = 'jito-epoch';
|
|
18
|
+
maxAttempts = 240; // 240 x 30s = 2 hours active polling
|
|
19
|
+
pollIntervalMs = 30_000; // 30 seconds
|
|
20
|
+
timeoutTransition = 'TIMEOUT';
|
|
21
|
+
async checkStatus(_txId, metadata) {
|
|
22
|
+
// If metadata.status is 'deactivated', unstake is complete
|
|
23
|
+
if (metadata.status === 'deactivated') {
|
|
24
|
+
return {
|
|
25
|
+
state: 'COMPLETED',
|
|
26
|
+
details: {
|
|
27
|
+
completedAt: Date.now(),
|
|
28
|
+
protocol: 'jito',
|
|
29
|
+
notificationEvent: 'STAKING_UNSTAKE_COMPLETED',
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Calculate estimated days remaining based on unstake request time
|
|
34
|
+
const requestedAt = metadata.unstakeRequestedAt;
|
|
35
|
+
const estimatedDaysRemaining = requestedAt
|
|
36
|
+
? Math.max(0, JITO_EXPECTED_DAYS - (Date.now() - requestedAt) / (1000 * 60 * 60 * 24))
|
|
37
|
+
: JITO_EXPECTED_DAYS;
|
|
38
|
+
return {
|
|
39
|
+
state: 'PENDING',
|
|
40
|
+
details: {
|
|
41
|
+
estimatedDaysRemaining: Math.round(estimatedDaysRemaining * 10) / 10,
|
|
42
|
+
protocol: 'jito',
|
|
43
|
+
targetEpoch: metadata.targetEpoch ?? null,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=epoch-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epoch-tracker.js","sourceRoot":"","sources":["../../../src/providers/jito-staking/epoch-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,2DAA2D;AAC3D,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,YAAY,CAAC;IACpB,WAAW,GAAG,GAAG,CAAC,CAAU,qCAAqC;IACjE,cAAc,GAAG,MAAM,CAAC,CAAI,aAAa;IACzC,iBAAiB,GAAG,SAAkB,CAAC;IAEhD,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,QAAiC;QAChE,2DAA2D;QAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACtC,OAAO;gBACL,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE;oBACP,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;oBACvB,QAAQ,EAAE,MAAM;oBAChB,iBAAiB,EAAE,2BAA2B;iBAC/C;aACF,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,MAAM,WAAW,GAAG,QAAQ,CAAC,kBAAwC,CAAC;QACtE,MAAM,sBAAsB,GAAG,WAAW;YACxC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACtF,CAAC,CAAC,kBAAkB,CAAC;QAEvB,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE;gBACP,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,GAAG,EAAE;gBACpE,QAAQ,EAAE,MAAM;gBAChB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;aAC1C;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IActionProvider, ActionProviderMetadata, ActionDefinition, ActionContext, ContractCallRequest } from '@waiaas/core';
|
|
2
|
+
import { type JitoStakingConfig } from './config.js';
|
|
3
|
+
export declare class JitoStakingActionProvider implements IActionProvider {
|
|
4
|
+
readonly metadata: ActionProviderMetadata;
|
|
5
|
+
readonly actions: readonly ActionDefinition[];
|
|
6
|
+
private readonly config;
|
|
7
|
+
constructor(config?: Partial<JitoStakingConfig>);
|
|
8
|
+
resolve(actionName: string, params: Record<string, unknown>, context: ActionContext): Promise<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/jito-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;AAuB5E,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,CAAC;YAkBjB,YAAY;YAcZ,cAAc;CAS7B"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jito Staking Action Provider.
|
|
3
|
+
*
|
|
4
|
+
* Implements IActionProvider to resolve Jito liquid staking requests
|
|
5
|
+
* into ContractCallRequest objects for the sequential pipeline.
|
|
6
|
+
*
|
|
7
|
+
* Actions:
|
|
8
|
+
* - stake: SOL -> JitoSOL via SPL Stake Pool depositSol
|
|
9
|
+
* - unstake: JitoSOL -> SOL via SPL Stake Pool withdrawSol
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { ChainError } from '@waiaas/core';
|
|
13
|
+
import { JITO_STAKING_DEFAULTS } from './config.js';
|
|
14
|
+
import { buildDepositSolRequest, buildWithdrawSolRequest, parseSolAmount, } from './jito-stake-pool.js';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Input schemas (Zod SSoT)
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
const JitoStakeInputSchema = z.object({
|
|
19
|
+
amount: z.string().min(1, 'amount is required (SOL, e.g. "1.0")'),
|
|
20
|
+
});
|
|
21
|
+
const JitoUnstakeInputSchema = z.object({
|
|
22
|
+
amount: z.string().min(1, 'amount is required (JitoSOL, e.g. "1.0")'),
|
|
23
|
+
});
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Provider implementation
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
export class JitoStakingActionProvider {
|
|
28
|
+
metadata;
|
|
29
|
+
actions;
|
|
30
|
+
config;
|
|
31
|
+
constructor(config) {
|
|
32
|
+
this.config = { ...JITO_STAKING_DEFAULTS, ...config };
|
|
33
|
+
this.metadata = {
|
|
34
|
+
name: 'jito_staking',
|
|
35
|
+
description: 'Jito liquid staking protocol for SOL to JitoSOL conversion via SPL Stake Pool',
|
|
36
|
+
version: '1.0.0',
|
|
37
|
+
chains: ['solana'],
|
|
38
|
+
mcpExpose: true,
|
|
39
|
+
requiresApiKey: false,
|
|
40
|
+
requiredApis: [],
|
|
41
|
+
};
|
|
42
|
+
this.actions = [
|
|
43
|
+
{
|
|
44
|
+
name: 'stake',
|
|
45
|
+
description: 'Stake SOL to receive JitoSOL via Jito Stake Pool (DepositSol). Immediate, no lock-up.',
|
|
46
|
+
chain: 'solana',
|
|
47
|
+
inputSchema: JitoStakeInputSchema,
|
|
48
|
+
riskLevel: 'medium',
|
|
49
|
+
defaultTier: 'DELAY',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'unstake',
|
|
53
|
+
description: 'Withdraw SOL from Jito Stake Pool by burning JitoSOL (WithdrawSol). Epoch boundary delay.',
|
|
54
|
+
chain: 'solana',
|
|
55
|
+
inputSchema: JitoUnstakeInputSchema,
|
|
56
|
+
riskLevel: 'medium',
|
|
57
|
+
defaultTier: 'DELAY',
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
async resolve(actionName, params, context) {
|
|
62
|
+
if (actionName === 'stake') {
|
|
63
|
+
return this.resolveStake(params, context);
|
|
64
|
+
}
|
|
65
|
+
if (actionName === 'unstake') {
|
|
66
|
+
return this.resolveUnstake(params, context);
|
|
67
|
+
}
|
|
68
|
+
throw new ChainError('INVALID_INSTRUCTION', 'solana', {
|
|
69
|
+
message: `Unknown action: ${actionName}`,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// -------------------------------------------------------------------------
|
|
73
|
+
// Stake: SOL -> JitoSOL via DepositSol
|
|
74
|
+
// -------------------------------------------------------------------------
|
|
75
|
+
async resolveStake(params, context) {
|
|
76
|
+
const input = JitoStakeInputSchema.parse(params);
|
|
77
|
+
const amountLamports = await parseSolAmount(input.amount);
|
|
78
|
+
return buildDepositSolRequest(this.config, amountLamports, context.walletAddress);
|
|
79
|
+
}
|
|
80
|
+
// -------------------------------------------------------------------------
|
|
81
|
+
// Unstake: JitoSOL -> SOL via WithdrawSol
|
|
82
|
+
// -------------------------------------------------------------------------
|
|
83
|
+
async resolveUnstake(params, context) {
|
|
84
|
+
const input = JitoUnstakeInputSchema.parse(params);
|
|
85
|
+
const amountLamports = await parseSolAmount(input.amount);
|
|
86
|
+
return buildWithdrawSolRequest(this.config, amountLamports, context.walletAddress);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/jito-staking/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { type JitoStakingConfig } from './config.js';
|
|
2
|
+
/**
|
|
3
|
+
* Decode a base58 string to bytes.
|
|
4
|
+
*/
|
|
5
|
+
export declare function base58Decode(str: string): Uint8Array;
|
|
6
|
+
/**
|
|
7
|
+
* Encode bytes to a base58 string.
|
|
8
|
+
*/
|
|
9
|
+
export declare function base58Encode(bytes: Uint8Array): string;
|
|
10
|
+
/**
|
|
11
|
+
* Find a program-derived address (PDA) for the given seeds and program ID.
|
|
12
|
+
*
|
|
13
|
+
* @param seeds - Array of seed buffers
|
|
14
|
+
* @param programId - Program ID as bytes (32 bytes)
|
|
15
|
+
* @returns [address_bytes (32), bump (number)]
|
|
16
|
+
*/
|
|
17
|
+
export declare function findProgramAddress(seeds: Uint8Array[], programId: Uint8Array): Promise<[Uint8Array, number]>;
|
|
18
|
+
/**
|
|
19
|
+
* Derive the Associated Token Address (ATA) for a wallet and mint.
|
|
20
|
+
*
|
|
21
|
+
* @param wallet - Wallet public key (base58)
|
|
22
|
+
* @param mint - Token mint address (base58)
|
|
23
|
+
* @param tokenProgram - Token program ID (base58), defaults to SPL Token
|
|
24
|
+
* @returns ATA public key as base58 string
|
|
25
|
+
*/
|
|
26
|
+
export declare function getAssociatedTokenAddress(wallet: string, mint: string, tokenProgram?: string): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Encode DepositSol instruction data (index 14 + LE u64 amount).
|
|
29
|
+
* @returns base64-encoded instruction data
|
|
30
|
+
*/
|
|
31
|
+
export declare function encodeDepositSolData(amountLamports: bigint): string;
|
|
32
|
+
/**
|
|
33
|
+
* Encode WithdrawSol instruction data (index 16 + LE u64 amount).
|
|
34
|
+
* @returns base64-encoded instruction data
|
|
35
|
+
*/
|
|
36
|
+
export declare function encodeWithdrawSolData(amountLamports: bigint): string;
|
|
37
|
+
/**
|
|
38
|
+
* Parse a human-readable SOL amount string to lamports (bigint).
|
|
39
|
+
* SOL has 9 decimals (not 18 like ETH).
|
|
40
|
+
*
|
|
41
|
+
* "1.5" -> 1500000000n (1.5 SOL in lamports)
|
|
42
|
+
*
|
|
43
|
+
* @throws ChainError if amount is zero or negative
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseSolAmount(amount: string): Promise<bigint>;
|
|
46
|
+
/** Account meta for Solana instruction accounts. */
|
|
47
|
+
interface AccountMeta {
|
|
48
|
+
pubkey: string;
|
|
49
|
+
isSigner: boolean;
|
|
50
|
+
isWritable: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Build a ContractCallRequest for SPL Stake Pool DepositSol.
|
|
54
|
+
*
|
|
55
|
+
* SPL Stake Pool DepositSol accounts (in order):
|
|
56
|
+
* 0. stakePool (writable)
|
|
57
|
+
* 1. withdrawAuthority (PDA, read-only)
|
|
58
|
+
* 2. reserveStake (writable)
|
|
59
|
+
* 3. fundingAccount (signer, writable) = wallet
|
|
60
|
+
* 4. destTokenAccount (writable) = wallet's JitoSOL ATA
|
|
61
|
+
* 5. managerFeeAccount (writable)
|
|
62
|
+
* 6. referralFeeAccount (writable) = same as managerFeeAccount (no referral)
|
|
63
|
+
* 7. poolMint (writable) = JitoSOL mint
|
|
64
|
+
* 8. systemProgram (read-only)
|
|
65
|
+
* 9. tokenProgram (read-only)
|
|
66
|
+
*/
|
|
67
|
+
export declare function buildDepositSolRequest(config: JitoStakingConfig, amountLamports: bigint, walletAddress: string): Promise<{
|
|
68
|
+
type: 'CONTRACT_CALL';
|
|
69
|
+
to: string;
|
|
70
|
+
programId: string;
|
|
71
|
+
instructionData: string;
|
|
72
|
+
accounts: AccountMeta[];
|
|
73
|
+
value: string;
|
|
74
|
+
}>;
|
|
75
|
+
/**
|
|
76
|
+
* Build a ContractCallRequest for SPL Stake Pool WithdrawSol.
|
|
77
|
+
*
|
|
78
|
+
* SPL Stake Pool WithdrawSol accounts (in order):
|
|
79
|
+
* 0. stakePool (writable)
|
|
80
|
+
* 1. withdrawAuthority (PDA, read-only)
|
|
81
|
+
* 2. userTransferAuthority (signer) = wallet
|
|
82
|
+
* 3. sourceTokenAccount (writable) = wallet's JitoSOL ATA
|
|
83
|
+
* 4. reserveStake (writable)
|
|
84
|
+
* 5. destSolAccount (writable) = wallet (receives SOL)
|
|
85
|
+
* 6. managerFeeAccount (writable)
|
|
86
|
+
* 7. poolMint (writable) = JitoSOL mint
|
|
87
|
+
* 8. clock (read-only)
|
|
88
|
+
* 9. stakeHistory (read-only)
|
|
89
|
+
* 10. stakeProgram (read-only)
|
|
90
|
+
* 11. tokenProgram (read-only)
|
|
91
|
+
*/
|
|
92
|
+
export declare function buildWithdrawSolRequest(config: JitoStakingConfig, amountLamports: bigint, walletAddress: string): Promise<{
|
|
93
|
+
type: 'CONTRACT_CALL';
|
|
94
|
+
to: string;
|
|
95
|
+
programId: string;
|
|
96
|
+
instructionData: string;
|
|
97
|
+
accounts: AccountMeta[];
|
|
98
|
+
}>;
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=jito-stake-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jito-stake-pool.d.ts","sourceRoot":"","sources":["../../../src/providers/jito-staking/jito-stake-pool.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,KAAK,iBAAiB,EAMvB,MAAM,aAAa,CAAC;AAsBrB;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAiCpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CA8BtD;AA6ED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,EAAE,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CA8B/B;AASD;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,GAAE,MAA0B,GACvC,OAAO,CAAC,MAAM,CAAC,CAYjB;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAMpE;AAMD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAcpE;AAcD,oDAAoD;AACpD,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IACT,IAAI,EAAE,eAAe,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CA4BD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IACT,IAAI,EAAE,eAAe,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB,CAAC,CA6BD"}
|