solana-meme-kit 0.2.4 → 0.3.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/README.md +154 -80
- package/dist/core/MemeKit.d.ts +30 -0
- package/dist/core/MemeKit.d.ts.map +1 -0
- package/dist/core/MemeKit.js +193 -0
- package/dist/core/MemeKit.js.map +1 -0
- package/dist/core/utils.d.ts +16 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +39 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/JitoManager.d.ts +17 -0
- package/dist/managers/JitoManager.d.ts.map +1 -0
- package/dist/managers/JitoManager.js +64 -0
- package/dist/managers/JitoManager.js.map +1 -0
- package/dist/managers/LiquidityManager.d.ts +16 -0
- package/dist/managers/LiquidityManager.d.ts.map +1 -0
- package/dist/managers/LiquidityManager.js +121 -0
- package/dist/managers/LiquidityManager.js.map +1 -0
- package/dist/managers/MarketManager.d.ts +17 -0
- package/dist/managers/MarketManager.d.ts.map +1 -0
- package/dist/managers/MarketManager.js +182 -0
- package/dist/managers/MarketManager.js.map +1 -0
- package/dist/managers/TokenManager.d.ts +18 -0
- package/dist/managers/TokenManager.d.ts.map +1 -0
- package/dist/managers/TokenManager.js +64 -0
- package/dist/managers/TokenManager.js.map +1 -0
- package/dist/strategies/LiquidityStrategy.d.ts +33 -0
- package/dist/strategies/LiquidityStrategy.d.ts.map +1 -0
- package/dist/strategies/LiquidityStrategy.js +2 -0
- package/dist/strategies/LiquidityStrategy.js.map +1 -0
- package/dist/strategies/meteora/DLMMManager.d.ts +20 -0
- package/dist/strategies/meteora/DLMMManager.d.ts.map +1 -0
- package/dist/strategies/meteora/DLMMManager.js +82 -0
- package/dist/strategies/meteora/DLMMManager.js.map +1 -0
- package/dist/strategies/meteora/index.d.ts +2 -0
- package/dist/strategies/meteora/index.d.ts.map +1 -0
- package/dist/strategies/meteora/index.js +3 -0
- package/dist/strategies/meteora/index.js.map +1 -0
- package/dist/strategies/raydium/AMMManager.d.ts +20 -0
- package/dist/strategies/raydium/AMMManager.d.ts.map +1 -0
- package/dist/strategies/raydium/AMMManager.js +96 -0
- package/dist/strategies/raydium/AMMManager.js.map +1 -0
- package/dist/strategies/raydium/CPMMManager.d.ts +20 -0
- package/dist/strategies/raydium/CPMMManager.d.ts.map +1 -0
- package/dist/strategies/raydium/CPMMManager.js +121 -0
- package/dist/strategies/raydium/CPMMManager.js.map +1 -0
- package/dist/strategies/raydium/index.d.ts +3 -0
- package/dist/strategies/raydium/index.d.ts.map +1 -0
- package/dist/strategies/raydium/index.js +4 -0
- package/dist/strategies/raydium/index.js.map +1 -0
- package/dist/utils/jitoTools.d.ts +14 -0
- package/dist/utils/jitoTools.d.ts.map +1 -0
- package/dist/utils/jitoTools.js +78 -0
- package/dist/utils/jitoTools.js.map +1 -0
- package/package.json +5 -2
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, TransactionInstruction, Transaction, } from "@solana/web3.js";
|
|
2
|
+
import DLMM, { deriveLbPair, LBCLMM_PROGRAM_IDS } from "@meteora-ag/dlmm";
|
|
3
|
+
import { BN } from "bn.js";
|
|
4
|
+
import { Logger } from "../../core/utils";
|
|
5
|
+
export class DLMMManager {
|
|
6
|
+
connection;
|
|
7
|
+
wallet;
|
|
8
|
+
cluster;
|
|
9
|
+
static BIN_STEP = new BN(100); // Volatility setting for memecoins (100 is standard)
|
|
10
|
+
programId;
|
|
11
|
+
constructor(connection, wallet, cluster = "mainnet-beta") {
|
|
12
|
+
this.connection = connection;
|
|
13
|
+
this.wallet = wallet;
|
|
14
|
+
this.cluster = cluster;
|
|
15
|
+
this.programId = new PublicKey(LBCLMM_PROGRAM_IDS[this.cluster]);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Calculate the starting Bin ID from a price.
|
|
19
|
+
* Price = solAmount / tokenAmount (adjusted for decimals)
|
|
20
|
+
*/
|
|
21
|
+
calculateActiveBinId(solAmount, tokenAmount, tokenDecimals = 6) {
|
|
22
|
+
const solDecimals = 9;
|
|
23
|
+
const adjustedPrice = (solAmount * Math.pow(10, tokenDecimals)) /
|
|
24
|
+
(tokenAmount * Math.pow(10, solDecimals));
|
|
25
|
+
const binStep = DLMMManager.BIN_STEP.toNumber();
|
|
26
|
+
const base = 1 + binStep / 10000;
|
|
27
|
+
const activeId = Math.round(Math.log(adjustedPrice) / Math.log(base));
|
|
28
|
+
Logger.info(`Calculated Active Bin ID: ${activeId} for price ${adjustedPrice}`);
|
|
29
|
+
return activeId;
|
|
30
|
+
}
|
|
31
|
+
async initialize(options, mint) {
|
|
32
|
+
Logger.info("Initializing Meteora DLMM Strategy...");
|
|
33
|
+
const NATIVE_MINT = new PublicKey("So11111111111111111111111111111111111111112"); // WSOL
|
|
34
|
+
// Token ordering
|
|
35
|
+
const [tokenX, tokenY] = mint.toBuffer().compare(NATIVE_MINT.toBuffer()) < 0
|
|
36
|
+
? [mint, NATIVE_MINT]
|
|
37
|
+
: [NATIVE_MINT, mint];
|
|
38
|
+
Logger.info(`Token Order: X=${tokenX.toBase58().slice(0, 8)}..., Y=${tokenY
|
|
39
|
+
.toBase58()
|
|
40
|
+
.slice(0, 8)}...`);
|
|
41
|
+
const solLiquidityAmount = options.liquidity?.solAmount ?? options.solLiquidityAmount ?? 0;
|
|
42
|
+
const tokenLiquidityAmount = options.liquidity?.tokenAmount ?? options.tokenLiquidityAmount ?? 0;
|
|
43
|
+
// Calculate Active Bin ID
|
|
44
|
+
const activeId = this.calculateActiveBinId(solLiquidityAmount, tokenLiquidityAmount, options.decimals);
|
|
45
|
+
// Derive Pool Address
|
|
46
|
+
const [poolPubkey, _] = deriveLbPair(tokenX, tokenY, DLMMManager.BIN_STEP, this.programId);
|
|
47
|
+
Logger.info(`Derived Pool Address: ${poolPubkey.toBase58()}`);
|
|
48
|
+
// Create Pool Transaction using SDK
|
|
49
|
+
// We use createCustomizablePermissionlessLbPair for anti-sniper features (activationPoint)
|
|
50
|
+
const createTx = await DLMM.createCustomizablePermissionlessLbPair(this.connection, new BN(DLMMManager.BIN_STEP), tokenX, tokenY, new BN(activeId), new BN(100), // 1% base fee
|
|
51
|
+
options.meteoraOptions?.activationType === "slot" ? 1 : 0, // 0 for Timestamp, 1 for Slot
|
|
52
|
+
false, // hasAlphaVault (deferred)
|
|
53
|
+
this.wallet.publicKey, options.meteoraOptions?.activationPoint
|
|
54
|
+
? new BN(options.meteoraOptions.activationPoint)
|
|
55
|
+
: undefined);
|
|
56
|
+
// Extract instructions from Transaction
|
|
57
|
+
let instructions = [];
|
|
58
|
+
if (createTx instanceof Transaction) {
|
|
59
|
+
instructions = createTx.instructions;
|
|
60
|
+
}
|
|
61
|
+
else if (createTx.message) {
|
|
62
|
+
// Probably a VersionedTransaction
|
|
63
|
+
Logger.info("Detected VersionedTransaction from Meteora SDK");
|
|
64
|
+
// This is tricky because we can't easily extract "TransactionInstruction" objects from a compiled message
|
|
65
|
+
// without the account keys buffer. However, for bundling, we might need the whole transaction
|
|
66
|
+
// or we might need to use a different SDK method that returns instructions.
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
Logger.warn("Unknown transaction type returned from Meteora SDK");
|
|
70
|
+
console.log(createTx);
|
|
71
|
+
}
|
|
72
|
+
// Add Liquidity Instructions (Placeholder for now as SDK requires active DLMM instance)
|
|
73
|
+
// In a real launch, we would use a Jito bundle to ensure Tx1 (Create) and Tx2 (Add Liquidity)
|
|
74
|
+
// execute together. For this SDK, we provide the creation instructions.
|
|
75
|
+
// Users can then use LiquidityManager or similar to add liquidity once pool exists.
|
|
76
|
+
return {
|
|
77
|
+
poolId: poolPubkey,
|
|
78
|
+
instructions,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=DLMMManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DLMMManager.js","sourceRoot":"","sources":["../../../src/strategies/meteora/DLMMManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/strategies/meteora/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/strategies/meteora/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
import type { LiquidityStrategy, LaunchOptions } from "../LiquidityStrategy";
|
|
3
|
+
import { MarketManager } from "../../managers/MarketManager";
|
|
4
|
+
/**
|
|
5
|
+
* Raydium AMM (Legacy V4) Strategy
|
|
6
|
+
*/
|
|
7
|
+
export declare class AMMManager implements LiquidityStrategy {
|
|
8
|
+
private connection;
|
|
9
|
+
private wallet;
|
|
10
|
+
private marketManager;
|
|
11
|
+
private cluster;
|
|
12
|
+
private raydium;
|
|
13
|
+
constructor(connection: Connection, wallet: Keypair, marketManager: MarketManager, cluster?: "mainnet-beta" | "devnet");
|
|
14
|
+
private loadSdk;
|
|
15
|
+
initialize(options: LaunchOptions, mint: PublicKey): Promise<{
|
|
16
|
+
poolId: PublicKey;
|
|
17
|
+
instructions: TransactionInstruction[];
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=AMMManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AMMManager.d.ts","sourceRoot":"","sources":["../../../src/strategies/raydium/AMMManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM7D;;GAEG;AACH,qBAAa,UAAW,YAAW,iBAAiB;IAIhD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,OAAO,CAAwB;gBAG7B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,OAAO,EACf,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,cAAc,GAAG,QAAyB;YAG/C,OAAO;IAYf,UAAU,CACd,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,YAAY,EAAE,sBAAsB,EAAE,CAAA;KAAE,CAAC;CAwF1E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, TransactionInstruction, Transaction, } from "@solana/web3.js";
|
|
2
|
+
import { Logger } from "../../core/utils";
|
|
3
|
+
import { MarketManager } from "../../managers/MarketManager";
|
|
4
|
+
import { Raydium, TxVersion } from "@raydium-io/raydium-sdk-v2";
|
|
5
|
+
import { BN } from "bn.js";
|
|
6
|
+
const WSOL = new PublicKey("So11111111111111111111111111111111111111112");
|
|
7
|
+
/**
|
|
8
|
+
* Raydium AMM (Legacy V4) Strategy
|
|
9
|
+
*/
|
|
10
|
+
export class AMMManager {
|
|
11
|
+
connection;
|
|
12
|
+
wallet;
|
|
13
|
+
marketManager;
|
|
14
|
+
cluster;
|
|
15
|
+
raydium = null;
|
|
16
|
+
constructor(connection, wallet, marketManager, cluster = "mainnet-beta") {
|
|
17
|
+
this.connection = connection;
|
|
18
|
+
this.wallet = wallet;
|
|
19
|
+
this.marketManager = marketManager;
|
|
20
|
+
this.cluster = cluster;
|
|
21
|
+
}
|
|
22
|
+
async loadSdk() {
|
|
23
|
+
if (!this.raydium) {
|
|
24
|
+
this.raydium = await Raydium.load({
|
|
25
|
+
connection: this.connection,
|
|
26
|
+
owner: this.wallet,
|
|
27
|
+
cluster: this.cluster === "mainnet-beta" ? "mainnet" : this.cluster,
|
|
28
|
+
disableLoadToken: true,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return this.raydium;
|
|
32
|
+
}
|
|
33
|
+
async initialize(options, mint) {
|
|
34
|
+
Logger.info("Initializing Raydium AMM (Legacy V4) Strategy...");
|
|
35
|
+
try {
|
|
36
|
+
// 1. Create OpenBook Market
|
|
37
|
+
Logger.info("Step 1: Creating OpenBook Market...");
|
|
38
|
+
const marketRes = await this.marketManager.createLowCostMarket(mint, WSOL, options.decimals || 6, 9);
|
|
39
|
+
const marketId = new PublicKey(marketRes.marketId);
|
|
40
|
+
Logger.info(`OpenBook Market Created: ${marketId.toBase58()}`);
|
|
41
|
+
// 2. Load Raydium SDK
|
|
42
|
+
const raydium = await this.loadSdk();
|
|
43
|
+
const solLiquidityAmount = options.liquidity?.solAmount ?? options.solLiquidityAmount ?? 0;
|
|
44
|
+
const tokenLiquidityAmount = options.liquidity?.tokenAmount ?? options.tokenLiquidityAmount ?? 0;
|
|
45
|
+
// Token amounts with proper decimals
|
|
46
|
+
const baseAmount = new BN(tokenLiquidityAmount * Math.pow(10, options.decimals || 6));
|
|
47
|
+
const quoteAmount = new BN(solLiquidityAmount * Math.pow(10, 9));
|
|
48
|
+
Logger.info(`Creating AMM Pool for Market: ${marketId.toBase58().slice(0, 8)}...`);
|
|
49
|
+
// 3. Create AMM Pool using Raydium SDK V2
|
|
50
|
+
const { execute, extInfo } = await raydium.liquidity.createPoolV4({
|
|
51
|
+
programId: raydium.cluster === "devnet"
|
|
52
|
+
? new PublicKey("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8")
|
|
53
|
+
: new PublicKey("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
|
|
54
|
+
marketId,
|
|
55
|
+
baseMintInfo: {
|
|
56
|
+
mint,
|
|
57
|
+
decimals: options.decimals || 6,
|
|
58
|
+
},
|
|
59
|
+
quoteMintInfo: {
|
|
60
|
+
mint: WSOL,
|
|
61
|
+
decimals: 9,
|
|
62
|
+
},
|
|
63
|
+
baseAmount,
|
|
64
|
+
quoteAmount,
|
|
65
|
+
startTime: new BN(0),
|
|
66
|
+
ownerInfo: {
|
|
67
|
+
useSOLBalance: true,
|
|
68
|
+
},
|
|
69
|
+
associatedOnly: false,
|
|
70
|
+
txVersion: TxVersion.LEGACY,
|
|
71
|
+
feePayer: this.wallet.publicKey,
|
|
72
|
+
});
|
|
73
|
+
const poolId = new PublicKey(extInfo.address.ammId || extInfo.address.poolId);
|
|
74
|
+
Logger.info(`AMM Pool ID: ${poolId.toBase58()}`);
|
|
75
|
+
const txres = await execute({ sendAndConfirm: false });
|
|
76
|
+
let instructions = [];
|
|
77
|
+
const signedTx = txres.signedTx;
|
|
78
|
+
if (signedTx instanceof Transaction) {
|
|
79
|
+
instructions = signedTx.instructions;
|
|
80
|
+
}
|
|
81
|
+
Logger.info(`AMM Pool Creation: ${instructions.length} instructions generated.`);
|
|
82
|
+
return {
|
|
83
|
+
poolId,
|
|
84
|
+
instructions,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
Logger.warn(`AMM error: ${error.message}`);
|
|
89
|
+
return {
|
|
90
|
+
poolId: PublicKey.default,
|
|
91
|
+
instructions: [],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=AMMManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AMMManager.js","sourceRoot":"","sources":["../../../src/strategies/raydium/AMMManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
import type { LiquidityStrategy, LaunchOptions } from "../LiquidityStrategy";
|
|
3
|
+
/**
|
|
4
|
+
* Raydium CPMM (Constant Product Market Maker) Strategy
|
|
5
|
+
* Uses the newer CP-Swap program - no OpenBook market required
|
|
6
|
+
* Cost: ~0.15 SOL
|
|
7
|
+
*/
|
|
8
|
+
export declare class CPMMManager implements LiquidityStrategy {
|
|
9
|
+
private connection;
|
|
10
|
+
private wallet;
|
|
11
|
+
private cluster;
|
|
12
|
+
private raydium;
|
|
13
|
+
constructor(connection: Connection, wallet: Keypair, cluster?: "mainnet-beta" | "devnet");
|
|
14
|
+
private loadSdk;
|
|
15
|
+
initialize(options: LaunchOptions, mint: PublicKey): Promise<{
|
|
16
|
+
poolId: PublicKey;
|
|
17
|
+
instructions: TransactionInstruction[];
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=CPMMManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CPMMManager.d.ts","sourceRoot":"","sources":["../../../src/strategies/raydium/CPMMManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAY7E;;;;GAIG;AACH,qBAAa,WAAY,YAAW,iBAAiB;IAIjD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IALjB,OAAO,CAAC,OAAO,CAAwB;gBAG7B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,cAAc,GAAG,QAAyB;YAG/C,OAAO;IAcf,UAAU,CACd,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,YAAY,EAAE,sBAAsB,EAAE,CAAA;KAAE,CAAC;CA+G1E"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { Connection, Keypair, PublicKey, TransactionInstruction, Transaction, } from "@solana/web3.js";
|
|
2
|
+
import { Logger } from "../../core/utils";
|
|
3
|
+
import { Raydium, TxVersion, getCpmmPdaPoolId, CREATE_CPMM_POOL_PROGRAM, } from "@raydium-io/raydium-sdk-v2";
|
|
4
|
+
import { BN } from "bn.js";
|
|
5
|
+
const WSOL = new PublicKey("So11111111111111111111111111111111111111112");
|
|
6
|
+
/**
|
|
7
|
+
* Raydium CPMM (Constant Product Market Maker) Strategy
|
|
8
|
+
* Uses the newer CP-Swap program - no OpenBook market required
|
|
9
|
+
* Cost: ~0.15 SOL
|
|
10
|
+
*/
|
|
11
|
+
export class CPMMManager {
|
|
12
|
+
connection;
|
|
13
|
+
wallet;
|
|
14
|
+
cluster;
|
|
15
|
+
raydium = null;
|
|
16
|
+
constructor(connection, wallet, cluster = "mainnet-beta") {
|
|
17
|
+
this.connection = connection;
|
|
18
|
+
this.wallet = wallet;
|
|
19
|
+
this.cluster = cluster;
|
|
20
|
+
}
|
|
21
|
+
async loadSdk() {
|
|
22
|
+
if (!this.raydium) {
|
|
23
|
+
Logger.info("Loading Raydium SDK...");
|
|
24
|
+
this.raydium = await Raydium.load({
|
|
25
|
+
connection: this.connection,
|
|
26
|
+
owner: this.wallet,
|
|
27
|
+
cluster: this.cluster === "mainnet-beta" ? "mainnet" : this.cluster,
|
|
28
|
+
disableLoadToken: true,
|
|
29
|
+
});
|
|
30
|
+
Logger.info(`Raydium SDK loaded for cluster: ${this.cluster}`);
|
|
31
|
+
}
|
|
32
|
+
return this.raydium;
|
|
33
|
+
}
|
|
34
|
+
async initialize(options, mint) {
|
|
35
|
+
Logger.info("Initializing Raydium CPMM Strategy...");
|
|
36
|
+
// Load SDK to verify it works
|
|
37
|
+
const raydium = await this.loadSdk();
|
|
38
|
+
const solLiquidityAmount = options.liquidity?.solAmount ?? options.solLiquidityAmount ?? 0;
|
|
39
|
+
const tokenLiquidityAmount = options.liquidity?.tokenAmount ?? options.tokenLiquidityAmount ?? 0;
|
|
40
|
+
// Token amounts with proper decimals
|
|
41
|
+
const mintAAmount = new BN(tokenLiquidityAmount * Math.pow(10, options.decimals || 6));
|
|
42
|
+
const mintBAmount = new BN(solLiquidityAmount * Math.pow(10, 9));
|
|
43
|
+
Logger.info(`CPMM Pool Config:`);
|
|
44
|
+
Logger.info(` Token: ${mint.toBase58().slice(0, 8)}...`);
|
|
45
|
+
Logger.info(` Quote: WSOL`);
|
|
46
|
+
Logger.info(` Token Amount: ${tokenLiquidityAmount}`);
|
|
47
|
+
Logger.info(` SOL Amount: ${solLiquidityAmount}`);
|
|
48
|
+
Logger.info(` Cluster: ${this.cluster}`);
|
|
49
|
+
// Derive pool ID (deterministic from mints and config)
|
|
50
|
+
const programId = this.cluster === "devnet"
|
|
51
|
+
? new PublicKey("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW")
|
|
52
|
+
: CREATE_CPMM_POOL_PROGRAM;
|
|
53
|
+
// Get default config ID for the program
|
|
54
|
+
// In production, this would use the actual SDK createPool method
|
|
55
|
+
// For dry-run testing, we demonstrate the SDK loads and can derive addresses
|
|
56
|
+
try {
|
|
57
|
+
// Create pool using Raydium SDK V2
|
|
58
|
+
const { execute, extInfo } = await raydium.cpmm.createPool({
|
|
59
|
+
programId: raydium.cluster === "devnet"
|
|
60
|
+
? new PublicKey("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW")
|
|
61
|
+
: new PublicKey("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),
|
|
62
|
+
poolFeeAccount: raydium.cluster === "devnet"
|
|
63
|
+
? new PublicKey("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2") // Devnet fee account
|
|
64
|
+
: new PublicKey("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyGHZot1r29vn"), // Mainnet fee account
|
|
65
|
+
mintA: {
|
|
66
|
+
address: mint.toBase58(),
|
|
67
|
+
decimals: options.decimals || 6,
|
|
68
|
+
programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
|
|
69
|
+
},
|
|
70
|
+
mintB: {
|
|
71
|
+
address: WSOL.toBase58(),
|
|
72
|
+
decimals: 9,
|
|
73
|
+
programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
|
|
74
|
+
},
|
|
75
|
+
mintAAmount,
|
|
76
|
+
mintBAmount,
|
|
77
|
+
startTime: new BN(0),
|
|
78
|
+
ownerInfo: {
|
|
79
|
+
useSOLBalance: true,
|
|
80
|
+
},
|
|
81
|
+
associatedOnly: false,
|
|
82
|
+
txVersion: TxVersion.LEGACY,
|
|
83
|
+
feeConfig: {
|
|
84
|
+
id: raydium.cluster === "devnet"
|
|
85
|
+
? new PublicKey("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW").toBase58() // Placeholder or fetch
|
|
86
|
+
: new PublicKey("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C").toBase58(),
|
|
87
|
+
index: 0,
|
|
88
|
+
tradeFeeRate: 25,
|
|
89
|
+
protocolFeeRate: 10000,
|
|
90
|
+
fundFeeRate: 0,
|
|
91
|
+
createPoolFee: "0",
|
|
92
|
+
creatorFeeRate: 0,
|
|
93
|
+
}, // Cast to any to bypass strict SDK V2 internal interface mismatch if needed
|
|
94
|
+
});
|
|
95
|
+
const poolId = new PublicKey(extInfo.address.poolId);
|
|
96
|
+
Logger.info(`CPMM Pool ID: ${poolId.toBase58()}`);
|
|
97
|
+
// Get transaction data
|
|
98
|
+
const txres = await execute({ sendAndConfirm: false });
|
|
99
|
+
// Extract instructions from transaction
|
|
100
|
+
let instructions = [];
|
|
101
|
+
// Handle multiple potential return types from SDK V2 execute
|
|
102
|
+
const signedTx = txres.signedTx;
|
|
103
|
+
if (signedTx instanceof Transaction) {
|
|
104
|
+
instructions = signedTx.instructions;
|
|
105
|
+
}
|
|
106
|
+
Logger.info(`CPMM Pool Creation: ${instructions.length} instructions generated.`);
|
|
107
|
+
return {
|
|
108
|
+
poolId,
|
|
109
|
+
instructions,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
Logger.warn(`CPMM error: ${error.message}`);
|
|
114
|
+
return {
|
|
115
|
+
poolId: PublicKey.default,
|
|
116
|
+
instructions: [],
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=CPMMManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CPMMManager.js","sourceRoot":"","sources":["../../../src/strategies/raydium/CPMMManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/strategies/raydium/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/strategies/raydium/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
|
2
|
+
export type BlockEngineRegion = "default" | "ny" | "amsterdam" | "frankfurt" | "tokyo" | "slc";
|
|
3
|
+
export declare const JITO_TIP_ACCOUNT_STRINGS: string[];
|
|
4
|
+
export declare const JITO_TIP_ACCOUNTS: PublicKey[];
|
|
5
|
+
export declare function getRandomTipAccount(): PublicKey;
|
|
6
|
+
export declare function getBlockEngineHost(cluster: "mainnet-beta" | "devnet", region?: BlockEngineRegion): string;
|
|
7
|
+
export type JitoTipFloorPercentile = 25 | 50 | 75 | 95 | 99;
|
|
8
|
+
export interface GetJitoTipFloorOptions {
|
|
9
|
+
percentile?: JitoTipFloorPercentile;
|
|
10
|
+
fallbackSol?: number;
|
|
11
|
+
timeoutMs?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function getJitoTipFloor(options?: GetJitoTipFloorOptions): Promise<number>;
|
|
14
|
+
//# sourceMappingURL=jitoTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jitoTools.d.ts","sourceRoot":"","sources":["../../src/utils/jitoTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,IAAI,GACJ,WAAW,GACX,WAAW,GACX,OAAO,GACP,KAAK,CAAC;AAEV,eAAO,MAAM,wBAAwB,UASpC,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAE7B,CAAC;AAEF,wBAAgB,mBAAmB,IAAI,SAAS,CAI/C;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,GAAG,QAAQ,EAClC,MAAM,GAAE,iBAA6B,GACpC,MAAM,CAoBR;AAED,MAAM,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAE5D,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAsB,eAAe,CACnC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
|
2
|
+
export const JITO_TIP_ACCOUNT_STRINGS = [
|
|
3
|
+
"96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5",
|
|
4
|
+
"HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe",
|
|
5
|
+
"Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY",
|
|
6
|
+
"ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt",
|
|
7
|
+
"DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh",
|
|
8
|
+
"DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL",
|
|
9
|
+
"ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49",
|
|
10
|
+
"3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT",
|
|
11
|
+
];
|
|
12
|
+
export const JITO_TIP_ACCOUNTS = JITO_TIP_ACCOUNT_STRINGS.map((a) => new PublicKey(a));
|
|
13
|
+
export function getRandomTipAccount() {
|
|
14
|
+
return JITO_TIP_ACCOUNTS[Math.floor(Math.random() * JITO_TIP_ACCOUNTS.length)];
|
|
15
|
+
}
|
|
16
|
+
export function getBlockEngineHost(cluster, region = "default") {
|
|
17
|
+
if (cluster === "devnet") {
|
|
18
|
+
return "ny.devnet.block-engine.jito.wtf";
|
|
19
|
+
}
|
|
20
|
+
switch (region) {
|
|
21
|
+
case "ny":
|
|
22
|
+
return "ny.mainnet.block-engine.jito.wtf";
|
|
23
|
+
case "amsterdam":
|
|
24
|
+
return "amsterdam.mainnet.block-engine.jito.wtf";
|
|
25
|
+
case "frankfurt":
|
|
26
|
+
return "frankfurt.mainnet.block-engine.jito.wtf";
|
|
27
|
+
case "tokyo":
|
|
28
|
+
return "tokyo.mainnet.block-engine.jito.wtf";
|
|
29
|
+
case "slc":
|
|
30
|
+
return "slc.mainnet.block-engine.jito.wtf";
|
|
31
|
+
case "default":
|
|
32
|
+
default:
|
|
33
|
+
return "mainnet.block-engine.jito.wtf";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function normalizeTipToSol(value) {
|
|
37
|
+
if (!Number.isFinite(value))
|
|
38
|
+
return NaN;
|
|
39
|
+
if (value <= 1)
|
|
40
|
+
return value;
|
|
41
|
+
if (value > 1e11)
|
|
42
|
+
return value / 1e15;
|
|
43
|
+
return value / 1e9;
|
|
44
|
+
}
|
|
45
|
+
export async function getJitoTipFloor(options = {}) {
|
|
46
|
+
const percentile = options.percentile ?? 95;
|
|
47
|
+
const fallbackSol = options.fallbackSol ?? 0.001;
|
|
48
|
+
const timeoutMs = options.timeoutMs ?? 2500;
|
|
49
|
+
const controller = new AbortController();
|
|
50
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
51
|
+
try {
|
|
52
|
+
const res = await fetch("https://bundles.jito.wtf/api/v1/bundles/tip_floor", {
|
|
53
|
+
signal: controller.signal,
|
|
54
|
+
});
|
|
55
|
+
if (!res.ok) {
|
|
56
|
+
throw new Error(`tip_floor failed: ${res.status} ${res.statusText}`);
|
|
57
|
+
}
|
|
58
|
+
const json = await res.json();
|
|
59
|
+
const row = Array.isArray(json) ? json[0] : json;
|
|
60
|
+
const key = `landed_tips_${percentile}th_percentile`;
|
|
61
|
+
const raw = row?.[key];
|
|
62
|
+
if (typeof raw !== "number") {
|
|
63
|
+
throw new Error(`tip_floor missing field: ${key}`);
|
|
64
|
+
}
|
|
65
|
+
const sol = normalizeTipToSol(raw);
|
|
66
|
+
if (!Number.isFinite(sol) || sol <= 0) {
|
|
67
|
+
throw new Error("tip_floor returned invalid value");
|
|
68
|
+
}
|
|
69
|
+
return sol;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return fallbackSol;
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
clearTimeout(timeout);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=jitoTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jitoTools.js","sourceRoot":"","sources":["../../src/utils/jitoTools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "solana-meme-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "The abstracted shovel for launching professional Solana tokens. Automated Low-Cost OpenBook Markets and Jito Bundles.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
5
7
|
"module": "dist/index.js",
|
|
6
8
|
"types": "dist/index.d.ts",
|
|
7
9
|
"files": [
|
|
8
10
|
"dist"
|
|
9
11
|
],
|
|
10
12
|
"scripts": {
|
|
11
|
-
"build": "tsc",
|
|
13
|
+
"build": "tsc -p tsconfig.build.json",
|
|
14
|
+
"prepublishOnly": "bun run build",
|
|
12
15
|
"test": "bun test"
|
|
13
16
|
},
|
|
14
17
|
"license": "MIT",
|