@elizaos/plugin-wallet 2.0.0-beta.1
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/LICENSE +21 -0
- package/README.md +64 -0
- package/auto-enable.ts +76 -0
- package/dist/LpManagementService-BWrQ5-cO.mjs +353 -0
- package/dist/MockLpService-D_Apn4Fd.mjs +99 -0
- package/dist/aerodrome-CfnESC32.mjs +890 -0
- package/dist/chunk-hT5z_Zn9.mjs +35 -0
- package/dist/index.d.mts +34727 -0
- package/dist/index.mjs +21590 -0
- package/dist/lib/server-wallet-trade.d.mts +34 -0
- package/dist/lib/server-wallet-trade.mjs +306 -0
- package/dist/meteora-BPX39hZo.mjs +22640 -0
- package/dist/orca-Bybp1HXO.mjs +249 -0
- package/dist/pancakeswp-CkEXlXti.mjs +604 -0
- package/dist/plugin-ZO_MTyd0.mjs +529 -0
- package/dist/raydium-rfaM9yEf.mjs +539 -0
- package/dist/sdk/index.d.mts +32492 -0
- package/dist/sdk/index.mjs +6415 -0
- package/dist/types-D5252NZk.mjs +487 -0
- package/dist/uniswap-CReXgXVN.mjs +573 -0
- package/dist/wallet-action.d.mts +6 -0
- package/dist/wallet-action.mjs +820 -0
- package/package.json +152 -0
- package/src/actions/failure-codes.ts +79 -0
- package/src/actions/index.ts +1 -0
- package/src/analytics/birdeye/actions/wallet-search-address.ts +9 -0
- package/src/analytics/birdeye/birdeye-task.ts +175 -0
- package/src/analytics/birdeye/birdeye.ts +813 -0
- package/src/analytics/birdeye/constants.ts +74 -0
- package/src/analytics/birdeye/providers/agent-portfolio-provider.ts +18 -0
- package/src/analytics/birdeye/providers/market.ts +227 -0
- package/src/analytics/birdeye/providers/portfolio-factory.test.ts +138 -0
- package/src/analytics/birdeye/providers/portfolio-factory.ts +252 -0
- package/src/analytics/birdeye/providers/trending.ts +365 -0
- package/src/analytics/birdeye/providers/wallet.ts +14 -0
- package/src/analytics/birdeye/search-category.test.ts +207 -0
- package/src/analytics/birdeye/search-category.ts +506 -0
- package/src/analytics/birdeye/service.ts +992 -0
- package/src/analytics/birdeye/tasks/birdeye.ts +232 -0
- package/src/analytics/birdeye/types/api/common.ts +305 -0
- package/src/analytics/birdeye/types/api/defi.ts +220 -0
- package/src/analytics/birdeye/types/api/pair.ts +200 -0
- package/src/analytics/birdeye/types/api/search.ts +86 -0
- package/src/analytics/birdeye/types/api/token.ts +635 -0
- package/src/analytics/birdeye/types/api/trader.ts +76 -0
- package/src/analytics/birdeye/types/api/wallet.ts +181 -0
- package/src/analytics/birdeye/types/shared.ts +106 -0
- package/src/analytics/birdeye/utils.ts +700 -0
- package/src/analytics/dexscreener/errors.ts +28 -0
- package/src/analytics/dexscreener/index.ts +3 -0
- package/src/analytics/dexscreener/search-category.test.ts +49 -0
- package/src/analytics/dexscreener/search-category.ts +42 -0
- package/src/analytics/dexscreener/service.ts +595 -0
- package/src/analytics/dexscreener/types.ts +128 -0
- package/src/analytics/lpinfo/index.d.ts +7 -0
- package/src/analytics/lpinfo/index.ts +52 -0
- package/src/analytics/lpinfo/kamino/README.md +102 -0
- package/src/analytics/lpinfo/kamino/index.ts +24 -0
- package/src/analytics/lpinfo/kamino/providers/kaminoLiquidityProvider.ts +422 -0
- package/src/analytics/lpinfo/kamino/providers/kaminoPoolProvider.ts +365 -0
- package/src/analytics/lpinfo/kamino/providers/kaminoProvider.ts +496 -0
- package/src/analytics/lpinfo/kamino/services/kaminoLiquidityService.ts +1123 -0
- package/src/analytics/lpinfo/kamino/services/kaminoService.ts +758 -0
- package/src/analytics/lpinfo/steer/README.md +169 -0
- package/src/analytics/lpinfo/steer/index.ts +23 -0
- package/src/analytics/lpinfo/steer/providers/steerLiquidityProvider.ts +544 -0
- package/src/analytics/lpinfo/steer/services/steerLiquidityService.ts +1690 -0
- package/src/analytics/lpinfo/steer/steer-display-types.ts +99 -0
- package/src/analytics/news/index.ts +52 -0
- package/src/analytics/news/interfaces/types.ts +222 -0
- package/src/analytics/news/providers/defiNewsProvider.ts +734 -0
- package/src/analytics/news/services/newsDataService.ts +332 -0
- package/src/analytics/news/utils/formatters.ts +151 -0
- package/src/analytics/token-info/action.ts +240 -0
- package/src/analytics/token-info/index.ts +3 -0
- package/src/analytics/token-info/params.ts +215 -0
- package/src/analytics/token-info/providers.ts +681 -0
- package/src/analytics/token-info/service.ts +168 -0
- package/src/analytics/token-info/types.ts +74 -0
- package/src/audit/audit-log.ts +45 -0
- package/src/browser-shim/build-shim.ts +123 -0
- package/src/browser-shim/index.ts +5 -0
- package/src/browser-shim/shim.template.js +563 -0
- package/src/chains/evm/.github/workflows/npm-deploy.yml +112 -0
- package/src/chains/evm/LICENSE +21 -0
- package/src/chains/evm/README.md +106 -0
- package/src/chains/evm/actions/helpers.ts +147 -0
- package/src/chains/evm/actions/swap.ts +839 -0
- package/src/chains/evm/actions/transfer.ts +254 -0
- package/src/chains/evm/biome.json +61 -0
- package/src/chains/evm/bridge-router.ts +660 -0
- package/src/chains/evm/build.ts +89 -0
- package/src/chains/evm/chain-handler.ts +416 -0
- package/src/chains/evm/constants.ts +23 -0
- package/src/chains/evm/contracts/artifacts/OZGovernor.json +1707 -0
- package/src/chains/evm/contracts/artifacts/TimelockController.json +1007 -0
- package/src/chains/evm/contracts/artifacts/VoteToken.json +895 -0
- package/src/chains/evm/dex/aerodrome/index.ts +34 -0
- package/src/chains/evm/dex/aerodrome/services/AerodromeLpService.ts +558 -0
- package/src/chains/evm/dex/aerodrome/types.ts +318 -0
- package/src/chains/evm/dex/pancakeswp/index.ts +35 -0
- package/src/chains/evm/dex/pancakeswp/services/PancakeSwapV3LpService.ts +743 -0
- package/src/chains/evm/dex/pancakeswp/types.ts +65 -0
- package/src/chains/evm/dex/uniswap/index.ts +35 -0
- package/src/chains/evm/dex/uniswap/services/UniswapV3LpService.ts +759 -0
- package/src/chains/evm/dex/uniswap/types.ts +390 -0
- package/src/chains/evm/generated/specs/spec-helpers.ts +73 -0
- package/src/chains/evm/generated/specs/specs.ts +151 -0
- package/src/chains/evm/gov-router.ts +250 -0
- package/src/chains/evm/index.browser.ts +16 -0
- package/src/chains/evm/index.ts +31 -0
- package/src/chains/evm/prompts.ts +193 -0
- package/src/chains/evm/providers/get-balance.ts +123 -0
- package/src/chains/evm/providers/wallet.ts +715 -0
- package/src/chains/evm/routes/sign.ts +333 -0
- package/src/chains/evm/rpc-providers.ts +410 -0
- package/src/chains/evm/service.ts +140 -0
- package/src/chains/evm/templates/index.ts +10 -0
- package/src/chains/evm/types/index.ts +432 -0
- package/src/chains/evm/vitest.config.ts +18 -0
- package/src/chains/registry.ts +668 -0
- package/src/chains/solana/README.md +367 -0
- package/src/chains/wallet-action.ts +533 -0
- package/src/chains/wallet-router.test.ts +296 -0
- package/src/contracts.ts +65 -0
- package/src/core-augmentation.ts +10 -0
- package/src/index.ts +71 -0
- package/src/lib/server-wallet-trade.ts +192 -0
- package/src/lib/wallet-export-guard.ts +330 -0
- package/src/lp/actions/liquidity.ts +827 -0
- package/src/lp/e2e/real-token-tests.ts +428 -0
- package/src/lp/e2e/scenarios.ts +470 -0
- package/src/lp/e2e/test-utils.ts +145 -0
- package/src/lp/lp-manager-entry.ts +303 -0
- package/src/lp/services/ConcentratedLiquidityService.ts +120 -0
- package/src/lp/services/DexInteractionService.ts +226 -0
- package/src/lp/services/LpManagementService.test.ts +148 -0
- package/src/lp/services/LpManagementService.ts +632 -0
- package/src/lp/services/UserLpProfileService.ts +163 -0
- package/src/lp/services/VaultService.ts +153 -0
- package/src/lp/services/YieldOptimizationService.ts +344 -0
- package/src/lp/services/__tests__/MockLpService.ts +146 -0
- package/src/lp/tasks/LpAutoRebalanceTask.ts +117 -0
- package/src/lp/tasks/__tests__/LpAutoRebalanceTask.test.ts +370 -0
- package/src/lp/types.ts +582 -0
- package/src/lp/utils/solanaClient.ts +143 -0
- package/src/plugin.ts +125 -0
- package/src/policy/policy.ts +19 -0
- package/src/providers/canonical-provider.ts +27 -0
- package/src/providers/unified-wallet-provider.ts +79 -0
- package/src/register-routes.ts +11 -0
- package/src/routes/plugin.ts +47 -0
- package/src/routes/wallet-market-overview-route.ts +869 -0
- package/src/sdk/abi.ts +258 -0
- package/src/sdk/bridge/abis.ts +126 -0
- package/src/sdk/bridge/client.ts +518 -0
- package/src/sdk/bridge/index.ts +56 -0
- package/src/sdk/bridge/solana.ts +604 -0
- package/src/sdk/bridge/types.ts +202 -0
- package/src/sdk/convenience.ts +347 -0
- package/src/sdk/escrow/MutualStakeEscrow.ts +480 -0
- package/src/sdk/escrow/types.ts +64 -0
- package/src/sdk/escrow/verifiers.ts +73 -0
- package/src/sdk/identity/erc8004.ts +692 -0
- package/src/sdk/identity/reputation.ts +449 -0
- package/src/sdk/identity/uaid.ts +497 -0
- package/src/sdk/identity/validation.ts +372 -0
- package/src/sdk/index.ts +763 -0
- package/src/sdk/policy/SpendingPolicy.ts +260 -0
- package/src/sdk/policy/UptoBillingPolicy.ts +320 -0
- package/src/sdk/router/PaymentRouter.ts +215 -0
- package/src/sdk/router/index.ts +8 -0
- package/src/sdk/swap/SwapModule.ts +310 -0
- package/src/sdk/swap/abi.ts +117 -0
- package/src/sdk/swap/index.ts +34 -0
- package/src/sdk/swap/types.ts +135 -0
- package/src/sdk/tokens/decimals.ts +140 -0
- package/src/sdk/tokens/registry.ts +911 -0
- package/src/sdk/tokens/solana.ts +419 -0
- package/src/sdk/tokens/transfers.ts +327 -0
- package/src/sdk/types.ts +158 -0
- package/src/sdk/wallet-core.ts +115 -0
- package/src/sdk/x402/budget.ts +168 -0
- package/src/sdk/x402/chains/abstract/index.ts +280 -0
- package/src/sdk/x402/client.ts +320 -0
- package/src/sdk/x402/index.ts +46 -0
- package/src/sdk/x402/middleware.ts +92 -0
- package/src/sdk/x402/multi-asset.ts +144 -0
- package/src/sdk/x402/types.ts +156 -0
- package/src/services/wallet-backend-service.ts +328 -0
- package/src/types/wallet-router.ts +227 -0
- package/src/utils/intent-trajectory.ts +106 -0
- package/src/wallet/backend.ts +62 -0
- package/src/wallet/errors.ts +49 -0
- package/src/wallet/index.ts +27 -0
- package/src/wallet/local-eoa-backend.ts +201 -0
- package/src/wallet/pending.ts +60 -0
- package/src/wallet/select-backend.ts +47 -0
- package/src/wallet/steward-backend.ts +161 -0
- package/src/wallet-action.ts +1 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { n as __exportAll } from "./chunk-hT5z_Zn9.mjs";
|
|
2
|
+
import { i as createSolanaLpProtocolProvider, o as registerLpProtocolProvider } from "./LpManagementService-BWrQ5-cO.mjs";
|
|
3
|
+
import { Service, logger, validateActionKeywords, validateActionRegex } from "@elizaos/core";
|
|
4
|
+
import { getMint } from "@solana/spl-token";
|
|
5
|
+
import { Connection, Keypair, PublicKey, clusterApiUrl } from "@solana/web3.js";
|
|
6
|
+
import bs58 from "bs58";
|
|
7
|
+
import { PoolUtil, buildWhirlpoolClient } from "@orca-so/whirlpools-sdk";
|
|
8
|
+
//#region src/lp/utils/solanaClient.ts
|
|
9
|
+
const DEFAULT_ENDPOINT = clusterApiUrl("mainnet-beta");
|
|
10
|
+
const DEFAULT_COMMITMENT = "confirmed";
|
|
11
|
+
/**
|
|
12
|
+
* Gets a Solana RPC connection configured from runtime settings
|
|
13
|
+
*/
|
|
14
|
+
function getConnection(runtime) {
|
|
15
|
+
const rpcUrl = runtime.getSetting("SOLANA_RPC_URL") || runtime.getSetting("RPC_URL") || DEFAULT_ENDPOINT;
|
|
16
|
+
const commitmentRaw = runtime.getSetting("SOLANA_COMMITMENT") || DEFAULT_COMMITMENT;
|
|
17
|
+
return new Connection(rpcUrl, typeof commitmentRaw === "string" ? commitmentRaw : DEFAULT_COMMITMENT);
|
|
18
|
+
}
|
|
19
|
+
function getWalletPublicKey(runtime) {
|
|
20
|
+
const pubKey = runtime.getSetting("SOLANA_PUBLIC_KEY");
|
|
21
|
+
return pubKey && typeof pubKey === "string" ? pubKey : null;
|
|
22
|
+
}
|
|
23
|
+
function getWalletPrivateKey(runtime) {
|
|
24
|
+
const privKey = runtime.getSetting("SOLANA_PRIVATE_KEY");
|
|
25
|
+
return privKey && typeof privKey === "string" ? privKey : null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Loads a Solana wallet from runtime settings
|
|
29
|
+
* @param runtime The agent runtime
|
|
30
|
+
* @param requirePrivateKey Whether to require a full keypair (true) or just public key (false)
|
|
31
|
+
* @returns WalletResult containing either keypair or public key
|
|
32
|
+
*/
|
|
33
|
+
async function loadWallet(runtime, requirePrivateKey = true) {
|
|
34
|
+
if (requirePrivateKey) {
|
|
35
|
+
const privateKeyString = getWalletPrivateKey(runtime);
|
|
36
|
+
if (!privateKeyString) throw new Error("SOLANA_PRIVATE_KEY not found in settings");
|
|
37
|
+
try {
|
|
38
|
+
const secretKey = bs58.decode(privateKeyString);
|
|
39
|
+
const signer = Keypair.fromSecretKey(secretKey);
|
|
40
|
+
return {
|
|
41
|
+
signer,
|
|
42
|
+
address: signer.publicKey
|
|
43
|
+
};
|
|
44
|
+
} catch (_e) {
|
|
45
|
+
logger.debug("Error decoding base58 private key, trying base64...");
|
|
46
|
+
try {
|
|
47
|
+
const secretKey = Uint8Array.from(Buffer.from(privateKeyString, "base64"));
|
|
48
|
+
const signer = Keypair.fromSecretKey(secretKey);
|
|
49
|
+
return {
|
|
50
|
+
signer,
|
|
51
|
+
address: signer.publicKey
|
|
52
|
+
};
|
|
53
|
+
} catch (e2) {
|
|
54
|
+
logger.error("Error decoding private key:", e2);
|
|
55
|
+
throw new Error("Invalid private key format - must be base58 or base64 encoded");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
} else {
|
|
59
|
+
const privateKeyString = getWalletPrivateKey(runtime);
|
|
60
|
+
if (privateKeyString) try {
|
|
61
|
+
const secretKey = bs58.decode(privateKeyString);
|
|
62
|
+
return { address: Keypair.fromSecretKey(secretKey).publicKey };
|
|
63
|
+
} catch {}
|
|
64
|
+
const publicKeyString = getWalletPublicKey(runtime);
|
|
65
|
+
if (!publicKeyString) throw new Error("SOLANA_PUBLIC_KEY or SOLANA_PRIVATE_KEY not found in settings");
|
|
66
|
+
return { address: new PublicKey(publicKeyString) };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
//#region src/chains/solana/dex/orca/providers/positionProvider.ts
|
|
71
|
+
const POSITION_LIMIT = 20;
|
|
72
|
+
const positionProvider = {
|
|
73
|
+
name: "orca-lp-position-provider",
|
|
74
|
+
description: "Provides Orca LP position status.",
|
|
75
|
+
descriptionCompressed: "Orca LP positions status.",
|
|
76
|
+
dynamic: true,
|
|
77
|
+
contexts: [
|
|
78
|
+
"finance",
|
|
79
|
+
"crypto",
|
|
80
|
+
"wallet"
|
|
81
|
+
],
|
|
82
|
+
contextGate: { anyOf: [
|
|
83
|
+
"finance",
|
|
84
|
+
"crypto",
|
|
85
|
+
"wallet"
|
|
86
|
+
] },
|
|
87
|
+
cacheStable: false,
|
|
88
|
+
cacheScope: "turn",
|
|
89
|
+
roleGate: { minRole: "OWNER" },
|
|
90
|
+
relevanceKeywords: [
|
|
91
|
+
"orca",
|
|
92
|
+
"position",
|
|
93
|
+
"positionprovider",
|
|
94
|
+
"plugin",
|
|
95
|
+
"manager",
|
|
96
|
+
"status",
|
|
97
|
+
"state",
|
|
98
|
+
"context",
|
|
99
|
+
"info",
|
|
100
|
+
"details",
|
|
101
|
+
"chat",
|
|
102
|
+
"conversation",
|
|
103
|
+
"agent",
|
|
104
|
+
"room"
|
|
105
|
+
],
|
|
106
|
+
get: async (runtime, message, state) => {
|
|
107
|
+
const __providerKeywords = [
|
|
108
|
+
"orca",
|
|
109
|
+
"position",
|
|
110
|
+
"positionprovider",
|
|
111
|
+
"plugin",
|
|
112
|
+
"manager",
|
|
113
|
+
"status",
|
|
114
|
+
"state",
|
|
115
|
+
"context",
|
|
116
|
+
"info",
|
|
117
|
+
"details",
|
|
118
|
+
"chat",
|
|
119
|
+
"conversation",
|
|
120
|
+
"agent",
|
|
121
|
+
"room"
|
|
122
|
+
];
|
|
123
|
+
const __providerRegex = new RegExp(`\\b(${__providerKeywords.join("|")})\\b`, "i");
|
|
124
|
+
const __recentMessages = state?.recentMessagesData || [];
|
|
125
|
+
if (!(validateActionKeywords(message, __recentMessages, __providerKeywords) || validateActionRegex(message, __recentMessages, __providerRegex))) return { text: "" };
|
|
126
|
+
if (!state) state = await runtime.composeState(message);
|
|
127
|
+
else state = await runtime.updateRecentMessageState(state);
|
|
128
|
+
try {
|
|
129
|
+
const { address: ownerAddress } = await loadWallet(runtime, false);
|
|
130
|
+
const positions = await fetchPositions(new Connection(runtime.getSetting("SOLANA_RPC_URL") || "https://api.mainnet-beta.solana.com"), ownerAddress);
|
|
131
|
+
return {
|
|
132
|
+
text: formatPositionsForPrompt(positions.slice(0, POSITION_LIMIT)),
|
|
133
|
+
data: { positions: positions.slice(0, POSITION_LIMIT) }
|
|
134
|
+
};
|
|
135
|
+
} catch (error) {
|
|
136
|
+
logger.error("Error in Orca position provider:", error);
|
|
137
|
+
return {
|
|
138
|
+
text: "Orca LP positions unavailable.",
|
|
139
|
+
data: {
|
|
140
|
+
positions: [],
|
|
141
|
+
error: error instanceof Error ? error.message : String(error)
|
|
142
|
+
},
|
|
143
|
+
values: {
|
|
144
|
+
positionCount: 0,
|
|
145
|
+
hasPositions: false
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
function formatPositionsForPrompt(positions) {
|
|
152
|
+
if (positions.length === 0) return "Orca LP positions:\npositions:";
|
|
153
|
+
const lines = ["Orca LP positions:"];
|
|
154
|
+
positions.forEach((position, index) => {
|
|
155
|
+
lines.push(`positions[${index}]{whirlpoolAddress,positionMint,inRange,distanceCenterPositionFromPoolPriceBps,positionWidthBps}: ${position.whirlpoolAddress.toString()},${position.positionMint.toString()},${position.inRange},${position.distanceCenterPositionFromPoolPriceBps},${position.positionWidthBps}`);
|
|
156
|
+
});
|
|
157
|
+
return lines.join("\n");
|
|
158
|
+
}
|
|
159
|
+
const fetchPositions = async (connection, ownerAddress) => {
|
|
160
|
+
try {
|
|
161
|
+
const client = buildWhirlpoolClient(connection);
|
|
162
|
+
const positions = await client.getUserPositions(ownerAddress);
|
|
163
|
+
const fetchedWhirlpools = /* @__PURE__ */ new Map();
|
|
164
|
+
const fetchedMints = /* @__PURE__ */ new Map();
|
|
165
|
+
return await Promise.all(positions.map(async (position) => {
|
|
166
|
+
const positionData = position.getData();
|
|
167
|
+
const positionMint = position.getAddress();
|
|
168
|
+
const whirlpoolAddress = position.getWhirlpoolAddress();
|
|
169
|
+
if (!fetchedWhirlpools.has(whirlpoolAddress.toString())) {
|
|
170
|
+
const whirlpool = await client.getWhirlpool(whirlpoolAddress);
|
|
171
|
+
if (whirlpool) fetchedWhirlpools.set(whirlpoolAddress.toString(), whirlpool);
|
|
172
|
+
}
|
|
173
|
+
const whirlpool = fetchedWhirlpools.get(whirlpoolAddress.toString());
|
|
174
|
+
const tokenMintA = whirlpool.getTokenAMint();
|
|
175
|
+
const tokenMintB = whirlpool.getTokenBMint();
|
|
176
|
+
if (!fetchedMints.has(tokenMintA.toString())) {
|
|
177
|
+
const mintA = await getMint(connection, tokenMintA);
|
|
178
|
+
fetchedMints.set(tokenMintA.toString(), mintA);
|
|
179
|
+
}
|
|
180
|
+
if (!fetchedMints.has(tokenMintB.toString())) {
|
|
181
|
+
const mintB = await getMint(connection, tokenMintB);
|
|
182
|
+
fetchedMints.set(tokenMintB.toString(), mintB);
|
|
183
|
+
}
|
|
184
|
+
const mintA = fetchedMints.get(tokenMintA.toString());
|
|
185
|
+
const mintB = fetchedMints.get(tokenMintB.toString());
|
|
186
|
+
const currentPrice = PoolUtil.sqrtPriceX64ToPrice(whirlpool.getData().sqrtPrice, mintA.decimals, mintB.decimals);
|
|
187
|
+
const positionLowerPrice = PoolUtil.tickIndexToPrice(positionData.tickLowerIndex, mintA.decimals, mintB.decimals);
|
|
188
|
+
const positionUpperPrice = PoolUtil.tickIndexToPrice(positionData.tickUpperIndex, mintA.decimals, mintB.decimals);
|
|
189
|
+
const currentTick = whirlpool.getData().tickCurrentIndex;
|
|
190
|
+
const inRange = currentTick >= positionData.tickLowerIndex && currentTick <= positionData.tickUpperIndex;
|
|
191
|
+
const positionCenterPrice = (positionLowerPrice + positionUpperPrice) / 2;
|
|
192
|
+
return {
|
|
193
|
+
whirlpoolAddress,
|
|
194
|
+
positionMint,
|
|
195
|
+
inRange,
|
|
196
|
+
distanceCenterPositionFromPoolPriceBps: Math.abs(currentPrice - positionCenterPrice) / currentPrice * 1e4,
|
|
197
|
+
positionWidthBps: (positionUpperPrice - positionLowerPrice) / positionCenterPrice * 1e4 / 2
|
|
198
|
+
};
|
|
199
|
+
}));
|
|
200
|
+
} catch (_error) {
|
|
201
|
+
throw new Error("Error during fetching positions");
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
//#endregion
|
|
205
|
+
//#region src/chains/solana/dex/orca/services/srv_orca.ts
|
|
206
|
+
var OrcaService = class OrcaService extends Service {
|
|
207
|
+
static serviceType = "ORCA_SERVICE";
|
|
208
|
+
capabilityDescription = "Provides Orca DEX integration for LP management";
|
|
209
|
+
constructor(runtime) {
|
|
210
|
+
super(runtime);
|
|
211
|
+
console.log("ORCA_SERVICE cstr");
|
|
212
|
+
}
|
|
213
|
+
static async start(runtime) {
|
|
214
|
+
console.log("ORCA_SERVICE trying to start");
|
|
215
|
+
const service = new OrcaService(runtime);
|
|
216
|
+
await service.start();
|
|
217
|
+
return service;
|
|
218
|
+
}
|
|
219
|
+
async start() {
|
|
220
|
+
console.log("ORCA_SERVICE trying to start");
|
|
221
|
+
}
|
|
222
|
+
async stop() {
|
|
223
|
+
console.log("ORCA_SERVICE trying to stop");
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
//#endregion
|
|
227
|
+
//#region src/chains/solana/dex/orca/index.ts
|
|
228
|
+
var orca_exports = /* @__PURE__ */ __exportAll({
|
|
229
|
+
OrcaService: () => OrcaService,
|
|
230
|
+
default: () => orcaPlugin,
|
|
231
|
+
orcaPlugin: () => orcaPlugin
|
|
232
|
+
});
|
|
233
|
+
const orcaPlugin = {
|
|
234
|
+
name: "@elizaos/plugin-lp-manager/orca",
|
|
235
|
+
description: "Orca Whirlpool LP management plugin for Solana",
|
|
236
|
+
providers: [positionProvider],
|
|
237
|
+
actions: [],
|
|
238
|
+
services: [OrcaService],
|
|
239
|
+
init: async (_config, runtime) => {
|
|
240
|
+
console.info("Orca Plugin initialized");
|
|
241
|
+
await registerLpProtocolProvider(runtime, createSolanaLpProtocolProvider({
|
|
242
|
+
dex: "orca",
|
|
243
|
+
label: "Orca",
|
|
244
|
+
service: runtime.getService(OrcaService.serviceType) ?? await OrcaService.start(runtime)
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
//#endregion
|
|
249
|
+
export { orca_exports as n, getConnection as r, orcaPlugin as t };
|