solana-meme-kit 0.3.0 → 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.
Files changed (57) hide show
  1. package/dist/core/MemeKit.d.ts +30 -0
  2. package/dist/core/MemeKit.d.ts.map +1 -0
  3. package/dist/core/MemeKit.js +193 -0
  4. package/dist/core/MemeKit.js.map +1 -0
  5. package/dist/core/utils.d.ts +16 -0
  6. package/dist/core/utils.d.ts.map +1 -0
  7. package/dist/core/utils.js +39 -0
  8. package/dist/core/utils.js.map +1 -0
  9. package/dist/index.d.ts +10 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +16 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/managers/JitoManager.d.ts +17 -0
  14. package/dist/managers/JitoManager.d.ts.map +1 -0
  15. package/dist/managers/JitoManager.js +64 -0
  16. package/dist/managers/JitoManager.js.map +1 -0
  17. package/dist/managers/LiquidityManager.d.ts +16 -0
  18. package/dist/managers/LiquidityManager.d.ts.map +1 -0
  19. package/dist/managers/LiquidityManager.js +121 -0
  20. package/dist/managers/LiquidityManager.js.map +1 -0
  21. package/dist/managers/MarketManager.d.ts +17 -0
  22. package/dist/managers/MarketManager.d.ts.map +1 -0
  23. package/dist/managers/MarketManager.js +182 -0
  24. package/dist/managers/MarketManager.js.map +1 -0
  25. package/dist/managers/TokenManager.d.ts +18 -0
  26. package/dist/managers/TokenManager.d.ts.map +1 -0
  27. package/dist/managers/TokenManager.js +64 -0
  28. package/dist/managers/TokenManager.js.map +1 -0
  29. package/dist/strategies/LiquidityStrategy.d.ts +33 -0
  30. package/dist/strategies/LiquidityStrategy.d.ts.map +1 -0
  31. package/dist/strategies/LiquidityStrategy.js +2 -0
  32. package/dist/strategies/LiquidityStrategy.js.map +1 -0
  33. package/dist/strategies/meteora/DLMMManager.d.ts +20 -0
  34. package/dist/strategies/meteora/DLMMManager.d.ts.map +1 -0
  35. package/dist/strategies/meteora/DLMMManager.js +82 -0
  36. package/dist/strategies/meteora/DLMMManager.js.map +1 -0
  37. package/dist/strategies/meteora/index.d.ts +2 -0
  38. package/dist/strategies/meteora/index.d.ts.map +1 -0
  39. package/dist/strategies/meteora/index.js +3 -0
  40. package/dist/strategies/meteora/index.js.map +1 -0
  41. package/dist/strategies/raydium/AMMManager.d.ts +20 -0
  42. package/dist/strategies/raydium/AMMManager.d.ts.map +1 -0
  43. package/dist/strategies/raydium/AMMManager.js +96 -0
  44. package/dist/strategies/raydium/AMMManager.js.map +1 -0
  45. package/dist/strategies/raydium/CPMMManager.d.ts +20 -0
  46. package/dist/strategies/raydium/CPMMManager.d.ts.map +1 -0
  47. package/dist/strategies/raydium/CPMMManager.js +121 -0
  48. package/dist/strategies/raydium/CPMMManager.js.map +1 -0
  49. package/dist/strategies/raydium/index.d.ts +3 -0
  50. package/dist/strategies/raydium/index.d.ts.map +1 -0
  51. package/dist/strategies/raydium/index.js +4 -0
  52. package/dist/strategies/raydium/index.js.map +1 -0
  53. package/dist/utils/jitoTools.d.ts +14 -0
  54. package/dist/utils/jitoTools.d.ts.map +1 -0
  55. package/dist/utils/jitoTools.js +78 -0
  56. package/dist/utils/jitoTools.js.map +1 -0
  57. package/package.json +5 -2
@@ -0,0 +1,182 @@
1
+ import { Connection, Keypair, PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';
2
+ import { Market, DexInstructions } from '@openbook-dex/openbook'; // Verify typescript support/exports
3
+ import { ACCOUNT_SIZE, createInitializeAccountInstruction, TOKEN_PROGRAM_ID } from '@solana/spl-token';
4
+ import { Logger } from '../core/utils';
5
+ import { BN } from 'bn.js';
6
+ // OpenBook Program ID (Mainnet)
7
+ // OpenBook Program ID (Mainnet) - V1 Official
8
+ export const OPENBOOK_PROGRAM_ID = new PublicKey('srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX');
9
+ export class MarketManager {
10
+ connection;
11
+ wallet;
12
+ cluster;
13
+ constructor(connection, wallet, cluster = 'mainnet-beta') {
14
+ this.connection = connection;
15
+ this.wallet = wallet;
16
+ this.cluster = cluster;
17
+ }
18
+ async createLowCostMarket(baseMint, quoteMint, baseDecimals, quoteDecimals,
19
+ // Defaults for "Low Cost"
20
+ eventQueueLength = 128, requestQueueLength = 63, orderbookLength = 201) {
21
+ Logger.info('Generating Low-Cost OpenBook Market...');
22
+ const marketKeypair = Keypair.generate();
23
+ const eventQueue = Keypair.generate();
24
+ const requestQueue = Keypair.generate();
25
+ const bids = Keypair.generate();
26
+ const asks = Keypair.generate();
27
+ const vaultSignerNonce = new BN(0); // This usually needs calculation or is found inside the instruction builder
28
+ const [vaultOwner, _vaultSignerNonce] = await PublicKey.findProgramAddress([
29
+ marketKeypair.publicKey.toBuffer(),
30
+ vaultSignerNonce.toArrayLike(Buffer, 'le', 8),
31
+ ], OPENBOOK_PROGRAM_ID);
32
+ // Calculate space and rent
33
+ // We need to look up exact sizes.
34
+ // Standard sizes:
35
+ // EventQ: 8 + 12 * length? Header + events?
36
+ // RequestQ: ...
37
+ // Orderbook: ...
38
+ // For simplicity, we'll try to use the Market.create helper if it allows options,
39
+ // OR manual calculation.
40
+ // The @openbook-dex/openbook package usually exposes `Market.getLayout(programId)` or similar.
41
+ // Let's assume standard low-cost sizes (in bytes) often used:
42
+ // Event Queue (128): 262144 (This is standard 2978 slots? No, 128 is tiny).
43
+ // Let's use specific calculations from v1 documentation/examples if available.
44
+ // PROVISIONAL: Using known valid sizes for "low cost"
45
+ // Event Queue (128 slots) -> ~11308 bytes?
46
+ // Request Queue (63 slots) -> ~5084 bytes?
47
+ // Bids/Asks (201 slots) -> ~14524 bytes?
48
+ // Better strategy: Calculate safely or over-provision slightly less than max.
49
+ // Length * SlotSize + Header
50
+ const EVENT_SLOT_SIZE = 88;
51
+ const REQUEST_SLOT_SIZE = 80;
52
+ const ORDER_SLOT_SIZE = 72;
53
+ const HEADER_SIZE = 32; // Approx, need exact layout
54
+ // Actually, let's use the layout from the SDK
55
+ const totalEventQueueSize = 376 + 128 * 88; // Header + slots
56
+ const totalRequestQueueSize = 332 + 63 * 80;
57
+ const totalOrderbookSize = 104 + 201 * 72;
58
+ Logger.info(`Calculated Sizes - Event: ${totalEventQueueSize}, Request: ${totalRequestQueueSize}, Orderbook: ${totalOrderbookSize}`);
59
+ const lamportsEventQueue = await this.connection.getMinimumBalanceForRentExemption(totalEventQueueSize);
60
+ const lamportsRequestQueue = await this.connection.getMinimumBalanceForRentExemption(totalRequestQueueSize);
61
+ const lamportsOrderbook = await this.connection.getMinimumBalanceForRentExemption(totalOrderbookSize);
62
+ const tx = new Transaction();
63
+ // Create Accounts
64
+ tx.add(SystemProgram.createAccount({
65
+ fromPubkey: this.wallet.publicKey,
66
+ newAccountPubkey: eventQueue.publicKey,
67
+ lamports: lamportsEventQueue,
68
+ space: totalEventQueueSize,
69
+ programId: OPENBOOK_PROGRAM_ID,
70
+ }), SystemProgram.createAccount({
71
+ fromPubkey: this.wallet.publicKey,
72
+ newAccountPubkey: requestQueue.publicKey,
73
+ lamports: lamportsRequestQueue,
74
+ space: totalRequestQueueSize,
75
+ programId: OPENBOOK_PROGRAM_ID,
76
+ }), SystemProgram.createAccount({
77
+ fromPubkey: this.wallet.publicKey,
78
+ newAccountPubkey: bids.publicKey,
79
+ lamports: lamportsOrderbook,
80
+ space: totalOrderbookSize,
81
+ programId: OPENBOOK_PROGRAM_ID,
82
+ }), SystemProgram.createAccount({
83
+ fromPubkey: this.wallet.publicKey,
84
+ newAccountPubkey: asks.publicKey,
85
+ lamports: lamportsOrderbook,
86
+ space: totalOrderbookSize,
87
+ programId: OPENBOOK_PROGRAM_ID,
88
+ }));
89
+ // Initialize Market
90
+ const marketLayoutSpan = Market.getLayout(OPENBOOK_PROGRAM_ID).span;
91
+ const lamportsMarket = await this.connection.getMinimumBalanceForRentExemption(marketLayoutSpan);
92
+ // Create Vaults
93
+ // Vaults are Token Accounts owned by the Market PDA (Vault Owner)
94
+ // We generate random keypairs for them, create the accounts, and init them with Owner = vaultOwner
95
+ const baseVault = Keypair.generate();
96
+ const quoteVault = Keypair.generate();
97
+ const vaultLamports = await this.connection.getMinimumBalanceForRentExemption(ACCOUNT_SIZE);
98
+ tx.add(
99
+ // Create Base Vault Account
100
+ SystemProgram.createAccount({
101
+ fromPubkey: this.wallet.publicKey,
102
+ newAccountPubkey: baseVault.publicKey,
103
+ lamports: vaultLamports,
104
+ space: ACCOUNT_SIZE,
105
+ programId: TOKEN_PROGRAM_ID,
106
+ }),
107
+ // Initialize Base Vault (Owned by Vault Owner PDA)
108
+ createInitializeAccountInstruction(baseVault.publicKey, baseMint, vaultOwner),
109
+ // Create Quote Vault Account
110
+ SystemProgram.createAccount({
111
+ fromPubkey: this.wallet.publicKey,
112
+ newAccountPubkey: quoteVault.publicKey,
113
+ lamports: vaultLamports,
114
+ space: ACCOUNT_SIZE,
115
+ programId: TOKEN_PROGRAM_ID,
116
+ }),
117
+ // Initialize Quote Vault (Owned by Vault Owner PDA)
118
+ createInitializeAccountInstruction(quoteVault.publicKey, quoteMint, vaultOwner));
119
+ tx.add(SystemProgram.createAccount({
120
+ fromPubkey: this.wallet.publicKey,
121
+ newAccountPubkey: marketKeypair.publicKey,
122
+ lamports: lamportsMarket,
123
+ space: marketLayoutSpan,
124
+ programId: OPENBOOK_PROGRAM_ID,
125
+ }), DexInstructions.initializeMarket({
126
+ market: marketKeypair.publicKey,
127
+ requestQueue: requestQueue.publicKey,
128
+ eventQueue: eventQueue.publicKey,
129
+ bids: bids.publicKey,
130
+ asks: asks.publicKey,
131
+ baseVault: baseVault.publicKey,
132
+ quoteVault: quoteVault.publicKey,
133
+ baseMint,
134
+ quoteMint,
135
+ baseLotSize: new BN(1), // Tunable?
136
+ quoteLotSize: new BN(1), // Tunable?
137
+ feeRateBps: 0,
138
+ vaultSignerNonce: _vaultSignerNonce,
139
+ programId: OPENBOOK_PROGRAM_ID,
140
+ quoteDustThreshold: new BN(100), // Standard dust threshold
141
+ // authority // deprecated/not used usually?
142
+ }));
143
+ Logger.info(`Sending Market Creation Transaction (Market ID: ${marketKeypair.publicKey.toString()})...`);
144
+ // Note: This transaction might be large.
145
+ // We strictly need to sign with all these keypairs.
146
+ const signers = [
147
+ this.wallet,
148
+ marketKeypair,
149
+ eventQueue,
150
+ requestQueue,
151
+ bids,
152
+ asks,
153
+ baseVault,
154
+ quoteVault
155
+ ];
156
+ // For now, return the instruction and signers to be sent, or send it here.
157
+ // The architecture says "MarketManager Handles interaction".
158
+ // Let's send it.
159
+ // Using sendTransaction helper from web3.js/connection
160
+ // We need to compile it or use sendTransaction (if passing Keypair as wallet).
161
+ // Let's assume standard behavior.
162
+ try {
163
+ const sig = await this.connection.sendTransaction(tx, signers);
164
+ await this.connection.confirmTransaction(sig);
165
+ Logger.info(`Market Created! Signature: ${sig}`);
166
+ }
167
+ catch (e) {
168
+ Logger.error('Failed to create market', e);
169
+ throw e;
170
+ }
171
+ return {
172
+ marketId: marketKeypair.publicKey.toString(),
173
+ marketState: {
174
+ baseVault: baseVault.publicKey,
175
+ quoteVault: quoteVault.publicKey,
176
+ eventQueue: eventQueue.publicKey,
177
+ // ...
178
+ }
179
+ };
180
+ }
181
+ }
182
+ //# sourceMappingURL=MarketManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarketManager.js","sourceRoot":"","sources":["../../src/managers/MarketManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Connection, Keypair, PublicKey } from '@solana/web3.js';
2
+ export interface TokenConfig {
3
+ name: string;
4
+ symbol: string;
5
+ uri: string;
6
+ decimals?: number;
7
+ initialSupply: number;
8
+ }
9
+ export declare class TokenManager {
10
+ private connection;
11
+ private umi;
12
+ constructor(connection: Connection, payer: Keypair);
13
+ createToken(config: TokenConfig): Promise<{
14
+ mint: Keypair;
15
+ }>;
16
+ revokeAuthorities(mint: PublicKey, payer: Keypair): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=TokenManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenManager.d.ts","sourceRoot":"","sources":["../../src/managers/TokenManager.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjE,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,YAAY;IAGT,OAAO,CAAC,UAAU;IAF9B,OAAO,CAAC,GAAG,CAAC;gBAEQ,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO;IAQpD,WAAW,CAAC,MAAM,EAAE,WAAW;;;IAmC/B,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO;CAyB1D"}
@@ -0,0 +1,64 @@
1
+ import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
2
+ import { createSignerFromKeypair, signerIdentity, generateSigner, percentAmount, keypairIdentity } from '@metaplex-foundation/umi';
3
+ import { createFungible, mintV1, TokenStandard, mplTokenMetadata } from '@metaplex-foundation/mpl-token-metadata';
4
+ import { fromWeb3JsKeypair, toWeb3JsKeypair } from '@metaplex-foundation/umi-web3js-adapters';
5
+ import { Connection, Keypair, PublicKey } from '@solana/web3.js';
6
+ import { setAuthority, AuthorityType } from '@solana/spl-token';
7
+ import { Logger } from '../core/utils';
8
+ export class TokenManager {
9
+ connection;
10
+ umi;
11
+ constructor(connection, payer) {
12
+ this.connection = connection;
13
+ this.umi = createUmi(connection.rpcEndpoint)
14
+ .use(mplTokenMetadata());
15
+ const keypair = fromWeb3JsKeypair(payer);
16
+ this.umi.use(keypairIdentity(keypair));
17
+ }
18
+ async createToken(config) {
19
+ Logger.info(`Creating token ${config.name} (${config.symbol})...`);
20
+ const mint = generateSigner(this.umi);
21
+ const supply = BigInt(config.initialSupply * (10 ** (config.decimals || 6)));
22
+ // Create the Fungible Token
23
+ // We use createFungible which inherently creates a mint with 0 decimals if not specified,
24
+ // but here we specify it. It defaults to 0 supply.
25
+ const builder = createFungible(this.umi, {
26
+ mint,
27
+ name: config.name,
28
+ symbol: config.symbol,
29
+ uri: config.uri,
30
+ sellerFeeBasisPoints: percentAmount(0),
31
+ decimals: config.decimals || 6,
32
+ });
33
+ await builder.sendAndConfirm(this.umi);
34
+ Logger.info(`Token Mint created: ${mint.publicKey.toString()}`);
35
+ // Mint initial supply to payer
36
+ Logger.info(`Minting ${config.initialSupply} tokens to payer...`);
37
+ await mintV1(this.umi, {
38
+ mint: mint.publicKey,
39
+ amount: supply,
40
+ tokenStandard: TokenStandard.Fungible,
41
+ }).sendAndConfirm(this.umi);
42
+ return {
43
+ mint: toWeb3JsKeypair(mint),
44
+ };
45
+ }
46
+ async revokeAuthorities(mint, payer) {
47
+ Logger.info(`Revoking Mint and Freeze authorities for ${mint.toString()}...`);
48
+ // Revoke Mint Authority
49
+ await setAuthority(this.connection, payer, // Payer
50
+ mint, // Account
51
+ payer, // Current authority
52
+ AuthorityType.MintTokens, null // Set new authority to null to revoke
53
+ );
54
+ Logger.info(`Mint authority revoked for ${mint.toString()}`);
55
+ // Revoke Freeze Authority
56
+ await setAuthority(this.connection, payer, // Payer
57
+ mint, // Account
58
+ payer, // Current authority
59
+ AuthorityType.FreezeAccount, null // Set new authority to null to revoke
60
+ );
61
+ Logger.info(`Freeze authority revoked for ${mint.toString()}`);
62
+ }
63
+ }
64
+ //# sourceMappingURL=TokenManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenManager.js","sourceRoot":"","sources":["../../src/managers/TokenManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { TransactionInstruction, PublicKey } from "@solana/web3.js";
2
+ import type { BlockEngineRegion } from "../utils/jitoTools";
3
+ export interface LaunchOptions {
4
+ name: string;
5
+ symbol: string;
6
+ description?: string;
7
+ image: string;
8
+ decimals?: number;
9
+ supply?: number;
10
+ solLiquidityAmount?: number;
11
+ tokenLiquidityAmount?: number;
12
+ liquidity?: {
13
+ solAmount: number;
14
+ tokenAmount: number;
15
+ };
16
+ dex?: "meteora:dlmm" | "raydium:cpmm" | "raydium:amm";
17
+ strategy?: "meteora" | "raydium-cpmm" | "raydium-amm";
18
+ devBuySolAmount?: number;
19
+ jitoTip?: number | "auto";
20
+ blockEngine?: BlockEngineRegion;
21
+ meteoraOptions?: {
22
+ activationPoint?: number;
23
+ activationType?: "timestamp" | "slot";
24
+ };
25
+ marketMode?: "low-cost" | "standard";
26
+ }
27
+ export interface LiquidityStrategy {
28
+ initialize(options: LaunchOptions, mint: PublicKey): Promise<{
29
+ poolId: PublicKey;
30
+ instructions: TransactionInstruction[];
31
+ }>;
32
+ }
33
+ //# sourceMappingURL=LiquidityStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiquidityStrategy.d.ts","sourceRoot":"","sources":["../../src/strategies/LiquidityStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EACtB,SAAS,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAGF,GAAG,CAAC,EAAE,cAAc,GAAG,cAAc,GAAG,aAAa,CAAC;IACtD,QAAQ,CAAC,EAAE,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;IAGtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;KACvC,CAAC;IAEF,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;CAGtC;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CACR,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC;QACT,MAAM,EAAE,SAAS,CAAC;QAClB,YAAY,EAAE,sBAAsB,EAAE,CAAC;KACxC,CAAC,CAAC;CACJ"}
@@ -0,0 +1,2 @@
1
+ import { Connection, Keypair, TransactionInstruction, PublicKey, } from "@solana/web3.js";
2
+ //# sourceMappingURL=LiquidityStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiquidityStrategy.js","sourceRoot":"","sources":["../../src/strategies/LiquidityStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EACP,sBAAsB,EACtB,SAAS,GACV,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Connection, Keypair, PublicKey, TransactionInstruction } from "@solana/web3.js";
2
+ import type { LiquidityStrategy, LaunchOptions } from "../LiquidityStrategy";
3
+ export declare class DLMMManager implements LiquidityStrategy {
4
+ private connection;
5
+ private wallet;
6
+ private cluster;
7
+ private static BIN_STEP;
8
+ private programId;
9
+ constructor(connection: Connection, wallet: Keypair, cluster?: "devnet" | "mainnet-beta");
10
+ /**
11
+ * Calculate the starting Bin ID from a price.
12
+ * Price = solAmount / tokenAmount (adjusted for decimals)
13
+ */
14
+ private calculateActiveBinId;
15
+ initialize(options: LaunchOptions, mint: PublicKey): Promise<{
16
+ poolId: PublicKey;
17
+ instructions: TransactionInstruction[];
18
+ }>;
19
+ }
20
+ //# sourceMappingURL=DLMMManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DLMMManager.d.ts","sourceRoot":"","sources":["../../../src/strategies/meteora/DLMMManager.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;AAK7E,qBAAa,WAAY,YAAW,iBAAiB;IAKjD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,SAAS,CAAY;gBAGnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,QAAQ,GAAG,cAA+B;IAK7D;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAkBtB,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;CAkF1E"}
@@ -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,2 @@
1
+ export * from './DLMMManager';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ // Meteora Protocol Strategies
2
+ export * from './DLMMManager';
3
+ //# sourceMappingURL=index.js.map
@@ -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"}