@coinbarrel/sdk 1.2.0 → 2.0.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.
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Account Fetching and Parsing
3
+ * Read on-chain account data for bonding curves and pools
4
+ */
5
+ import { Connection, PublicKey } from '@solana/web3.js';
6
+ import type { BondingCurveState, PoolState, MarketInfo } from './types.js';
7
+ /**
8
+ * Fetch and parse bonding curve state
9
+ */
10
+ export declare function getBondingCurveState(connection: Connection, tokenMint: PublicKey, programId: PublicKey): Promise<BondingCurveState | null>;
11
+ /**
12
+ * Get SOL balance in bonding curve escrow
13
+ */
14
+ export declare function getCurveSolBalance(connection: Connection, tokenMint: PublicKey, programId: PublicKey): Promise<bigint>;
15
+ /**
16
+ * Fetch and parse pool state
17
+ */
18
+ export declare function getPoolState(connection: Connection, tokenMint: PublicKey, programId: PublicKey): Promise<PoolState | null>;
19
+ /**
20
+ * Get pool vault balances
21
+ * Uses vault addresses stored in Pool state rather than deriving PDAs
22
+ */
23
+ export declare function getPoolBalances(connection: Connection, tokenMint: PublicKey, programId: PublicKey): Promise<{
24
+ solBalance: bigint;
25
+ tokenBalance: bigint;
26
+ } | null>;
27
+ /**
28
+ * Get comprehensive market info for a token
29
+ * Automatically detects if on bonding curve or AMM pool
30
+ */
31
+ export declare function getMarketInfo(connection: Connection, tokenMint: PublicKey, programId: PublicKey): Promise<MarketInfo | null>;
32
+ /**
33
+ * Get user's token balance
34
+ */
35
+ export declare function getUserTokenBalance(connection: Connection, tokenMint: PublicKey, user: PublicKey): Promise<bigint>;
36
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA4B3E;;GAEG;AACH,wBAAsB,oBAAoB,CACzC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CA8BnC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAID;;GAEG;AACH,wBAAsB,YAAY,CACjC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA0B3B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACpC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAyB9D;AAID;;;GAGG;AACH,wBAAsB,aAAa,CAClC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAwD5B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACxC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,GACb,OAAO,CAAC,MAAM,CAAC,CAQjB"}
package/dist/accounts.js CHANGED
@@ -39,7 +39,8 @@ function readBool(data, offset) {
39
39
  async function getBondingCurveState(connection, tokenMint, programId) {
40
40
  const bondingCurve = (0, pda_js_1.getBondingCurvePda)(tokenMint, programId);
41
41
  const accountInfo = await connection.getAccountInfo(bondingCurve);
42
- if (!accountInfo || accountInfo.data.length < 209) {
42
+ // 8 (discriminator) + 232 (struct) = 240 bytes minimum
43
+ if (!accountInfo || accountInfo.data.length < 240) {
43
44
  return null;
44
45
  }
45
46
  const data = accountInfo.data;
@@ -59,7 +60,8 @@ async function getBondingCurveState(connection, tokenMint, programId) {
59
60
  minPriceLamportsPerToken: readU64LE(data, O.MIN_PRICE),
60
61
  maxSupply: readU128LE(data, O.MAX_SUPPLY),
61
62
  totalSold: readU128LE(data, O.TOTAL_SOLD),
62
- paused: readBool(data, O.PAUSED),
63
+ accumulatedHolderRewardsSol: readU64LE(data, O.ACCUMULATED_HOLDER_REWARDS_SOL),
64
+ rewardPerTokenStored: readU128LE(data, O.REWARD_PER_TOKEN_STORED),
63
65
  };
64
66
  }
65
67
  /**
@@ -133,40 +135,14 @@ async function getPoolBalances(connection, tokenMint, programId) {
133
135
  * Automatically detects if on bonding curve or AMM pool
134
136
  */
135
137
  async function getMarketInfo(connection, tokenMint, programId) {
136
- // Try bonding curve first
137
- const curveState = await getBondingCurveState(connection, tokenMint, programId);
138
- if (curveState && !curveState.paused) {
139
- // Check if curve has been migrated (total_sold >= max_supply means graduated)
140
- if (curveState.totalSold < curveState.maxSupply) {
141
- // Still on bonding curve
142
- const solBalance = await getCurveSolBalance(connection, tokenMint, programId);
143
- // Calculate price from virtual reserves: price = vSol / vToken
144
- const price = curveState.vToken > 0n ? (curveState.vSol * constants_js_1.LAMPORTS_PER_SOL) / curveState.vToken : 0n;
145
- // Market cap = circulating supply * price
146
- const marketCapSol = curveState.totalSold > 0n ? (curveState.totalSold * price) / constants_js_1.LAMPORTS_PER_SOL : 0n;
147
- return {
148
- tokenMint,
149
- phase: 'curve',
150
- price,
151
- solReserve: solBalance,
152
- tokenReserve: curveState.maxSupply - curveState.totalSold,
153
- marketCapSol,
154
- circulatingSupply: curveState.totalSold,
155
- feeBps: curveState.feeBps,
156
- paused: curveState.paused,
157
- };
158
- }
159
- }
160
- // Try AMM pool
138
+ // Check if pool exists first (token has graduated)
161
139
  const poolState = await getPoolState(connection, tokenMint, programId);
162
140
  const poolBalances = poolState ? await getPoolBalances(connection, tokenMint, programId) : null;
163
141
  if (poolState && poolBalances) {
164
- // Calculate price from reserves: price = solReserve / tokenReserve
142
+ // Token is on AMM pool (graduated)
165
143
  const price = poolBalances.tokenBalance > 0n
166
144
  ? (poolBalances.solBalance * constants_js_1.LAMPORTS_PER_SOL) / poolBalances.tokenBalance
167
145
  : 0n;
168
- // For pool, circulating = total supply - vault balance
169
- // We'd need to fetch total supply, for now use a placeholder
170
146
  const marketCapSol = poolBalances.tokenBalance > 0n
171
147
  ? poolBalances.solBalance * 2n // Approximate: 2x the SOL in pool
172
148
  : 0n;
@@ -179,7 +155,25 @@ async function getMarketInfo(connection, tokenMint, programId) {
179
155
  marketCapSol,
180
156
  circulatingSupply: 0n, // Would need total supply query
181
157
  feeBps: Number(poolState.feeRate),
182
- paused: false,
158
+ };
159
+ }
160
+ // Try bonding curve (not yet graduated)
161
+ const curveState = await getBondingCurveState(connection, tokenMint, programId);
162
+ if (curveState) {
163
+ const solBalance = await getCurveSolBalance(connection, tokenMint, programId);
164
+ // Calculate price from virtual reserves: price = vSol / vToken
165
+ const price = curveState.vToken > 0n ? (curveState.vSol * constants_js_1.LAMPORTS_PER_SOL) / curveState.vToken : 0n;
166
+ // Market cap = circulating supply * price
167
+ const marketCapSol = curveState.totalSold > 0n ? (curveState.totalSold * price) / constants_js_1.LAMPORTS_PER_SOL : 0n;
168
+ return {
169
+ tokenMint,
170
+ phase: 'curve',
171
+ price,
172
+ solReserve: solBalance,
173
+ tokenReserve: curveState.maxSupply - curveState.totalSold,
174
+ marketCapSol,
175
+ circulatingSupply: curveState.totalSold,
176
+ feeBps: curveState.feeBps,
183
177
  };
184
178
  }
185
179
  return null;
@@ -197,3 +191,4 @@ async function getUserTokenBalance(connection, tokenMint, user) {
197
191
  return 0n;
198
192
  }
199
193
  }
194
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * CoinBarrel SDK Constants
3
+ * Network-specific program IDs and configuration
4
+ */
5
+ import { PublicKey } from '@solana/web3.js';
6
+ export type Network = 'devnet' | 'mainnet';
7
+ export declare const PROGRAM_IDS: Record<Network, PublicKey>;
8
+ export declare const ADMIN_FEE_RECIPIENTS: Record<Network, PublicKey>;
9
+ export declare const NATIVE_MINT: PublicKey;
10
+ export declare const TOKEN_METADATA_PROGRAM_ID: PublicKey;
11
+ export declare const SEEDS: {
12
+ readonly BONDING: Buffer<ArrayBuffer>;
13
+ readonly BONDING_AUTHORITY: Buffer<ArrayBuffer>;
14
+ readonly BONDING_SOL: Buffer<ArrayBuffer>;
15
+ readonly POOL: Buffer<ArrayBuffer>;
16
+ readonly AUTHORITY: Buffer<ArrayBuffer>;
17
+ readonly VAULT: Buffer<ArrayBuffer>;
18
+ readonly LP_MINT: Buffer<ArrayBuffer>;
19
+ readonly LP_VAULT: Buffer<ArrayBuffer>;
20
+ readonly HOLDER_REWARD: Buffer<ArrayBuffer>;
21
+ };
22
+ export declare const DISCRIMINATORS: {
23
+ readonly initialize_barrel_curve: Buffer<ArrayBuffer>;
24
+ readonly create_barrel_token: Buffer<ArrayBuffer>;
25
+ readonly buy_on_curve: Buffer<ArrayBuffer>;
26
+ readonly sell_on_curve: Buffer<ArrayBuffer>;
27
+ readonly sell_max_on_curve: Buffer<ArrayBuffer>;
28
+ readonly configure_bonding_fees: Buffer<ArrayBuffer>;
29
+ readonly configure_virtual_curve: Buffer<ArrayBuffer>;
30
+ readonly initialize_pool: Buffer<ArrayBuffer>;
31
+ readonly swap_sol_to_token: Buffer<ArrayBuffer>;
32
+ readonly swap_token_to_sol: Buffer<ArrayBuffer>;
33
+ readonly swap_token_to_sol_max: Buffer<ArrayBuffer>;
34
+ readonly swap: Buffer<ArrayBuffer>;
35
+ readonly add_liquidity: Buffer<ArrayBuffer>;
36
+ readonly remove_liquidity: Buffer<ArrayBuffer>;
37
+ readonly migrate_barrel: Buffer<ArrayBuffer>;
38
+ readonly claim_holder_rewards: Buffer<ArrayBuffer>;
39
+ readonly claim_holder_rewards_curve: Buffer<ArrayBuffer>;
40
+ readonly init_holder_reward_account_curve: Buffer<ArrayBuffer>;
41
+ readonly init_holder_reward_account_pool: Buffer<ArrayBuffer>;
42
+ };
43
+ export declare const BONDING_CURVE_OFFSETS: {
44
+ readonly DISCRIMINATOR: 0;
45
+ readonly TOKEN_MINT: 8;
46
+ readonly TOKEN_VAULT: number;
47
+ readonly ADMIN_FEE_RECIPIENT: number;
48
+ readonly CREATOR_FEE_RECIPIENT: number;
49
+ readonly FEE_BPS: number;
50
+ readonly VARIANT: number;
51
+ readonly BUMP: number;
52
+ readonly V_TOKEN: number;
53
+ readonly V_SOL: number;
54
+ readonly AMP_BPS: number;
55
+ readonly TRADER_REWARDS_SHARE_BPS: number;
56
+ readonly MIN_PRICE: number;
57
+ readonly MAX_SUPPLY: number;
58
+ readonly TOTAL_SOLD: number;
59
+ readonly ACCUMULATED_HOLDER_REWARDS_SOL: number;
60
+ readonly REWARD_PER_TOKEN_STORED: number;
61
+ };
62
+ export declare const POOL_OFFSETS: {
63
+ readonly DISCRIMINATOR: 0;
64
+ readonly TOKEN_A_MINT: 8;
65
+ readonly TOKEN_B_MINT: number;
66
+ readonly TOKEN_A_VAULT: number;
67
+ readonly TOKEN_B_VAULT: number;
68
+ readonly LP_MINT: number;
69
+ readonly FEE_RATE: number;
70
+ readonly AUTHORITY: number;
71
+ readonly BUMP: number;
72
+ readonly IS_LOCKED: number;
73
+ readonly POOL_TYPE: number;
74
+ readonly TRADER_REWARDS_SHARE_BPS: number;
75
+ readonly ADMIN_FEE_RECIPIENT: number;
76
+ readonly CREATOR_FEE_RECIPIENT: number;
77
+ };
78
+ export declare const DEFAULT_DECIMALS = 6;
79
+ export declare const DEFAULT_SLIPPAGE_BPS = 100;
80
+ export declare const LAMPORTS_PER_SOL = 1000000000n;
81
+ export declare const TOKEN_DECIMALS_MULTIPLIER = 1000000n;
82
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,CAGlD,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,CAG3D,CAAC;AAGF,eAAO,MAAM,WAAW,WAA+D,CAAC;AAGxF,eAAO,MAAM,yBAAyB,WAErC,CAAC;AAIF,eAAO,MAAM,KAAK;;;;;;;;;;CAUR,CAAC;AAKX,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;CA2BjB,CAAC;AAKX,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;CAmBxB,CAAC;AAEX,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;CAef,CAAC;AAIX,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,gBAAgB,cAAiB,CAAC;AAC/C,eAAO,MAAM,yBAAyB,WAAa,CAAC"}
package/dist/constants.js CHANGED
@@ -76,7 +76,9 @@ exports.BONDING_CURVE_OFFSETS = {
76
76
  MIN_PRICE: 8 + 168,
77
77
  MAX_SUPPLY: 8 + 176,
78
78
  TOTAL_SOLD: 8 + 192,
79
- PAUSED: 8 + 208,
79
+ // paused field removed - migration is instant, no pause needed
80
+ ACCUMULATED_HOLDER_REWARDS_SOL: 8 + 208,
81
+ REWARD_PER_TOKEN_STORED: 8 + 216,
80
82
  };
81
83
  exports.POOL_OFFSETS = {
82
84
  DISCRIMINATOR: 0,
@@ -99,3 +101,4 @@ exports.DEFAULT_DECIMALS = 6;
99
101
  exports.DEFAULT_SLIPPAGE_BPS = 100; // 1%
100
102
  exports.LAMPORTS_PER_SOL = 1000000000n;
101
103
  exports.TOKEN_DECIMALS_MULTIPLIER = 1000000n; // 10^6 for 6 decimals
104
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Token Creation
3
+ * Create new barrel tokens with atomically revoked mint/freeze authority
4
+ */
5
+ import { Keypair, PublicKey, TransactionInstruction } from '@solana/web3.js';
6
+ import { type Network } from './constants.js';
7
+ import type { CreateBarrelTokenParams } from './types.js';
8
+ /**
9
+ * Build create_barrel_token instruction
10
+ *
11
+ * Creates a new token with:
12
+ * - Mint authority: revoked immediately after minting 1B tokens
13
+ * - Freeze authority: null from creation
14
+ * - 1B total supply minted to bonding curve vault
15
+ * - Metadata created via Metaplex CPI
16
+ *
17
+ * @param params - Token creation parameters
18
+ * @param programId - CoinBarrel program ID
19
+ * @param network - Network for admin fee recipient
20
+ * @returns Object containing instruction and mint keypair (must sign transaction)
21
+ */
22
+ export declare function buildCreateBarrelTokenInstruction(params: CreateBarrelTokenParams, programId: PublicKey, network: Network): {
23
+ instructions: TransactionInstruction[];
24
+ mintKeypair: Keypair;
25
+ };
26
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEN,OAAO,EACP,SAAS,EAGT,sBAAsB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAIN,KAAK,OAAO,EACZ,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAuC1D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iCAAiC,CAChD,MAAM,EAAE,uBAAuB,EAC/B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,GACd;IAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CA6DlE"}
package/dist/create.js CHANGED
@@ -98,3 +98,4 @@ function buildCreateBarrelTokenInstruction(params, programId, network) {
98
98
  mintKeypair,
99
99
  };
100
100
  }
101
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Bonding Curve Operations
3
+ * Buy and sell tokens on the bonding curve
4
+ */
5
+ import { Connection, PublicKey, TransactionInstruction } from '@solana/web3.js';
6
+ import type { BuyOnCurveParams, SellOnCurveParams, SellMaxOnCurveParams, BuyQuote, SellQuote } from './types.js';
7
+ /**
8
+ * Calculate buy quote for bonding curve
9
+ * Uses amplified constant product formula matching the program:
10
+ * k = vSol_eff * vToken_eff where _eff = base * amp_bps / 10000
11
+ */
12
+ export declare function getBuyQuote(connection: Connection, tokenMint: PublicKey, solIn: bigint, programId: PublicKey): Promise<BuyQuote | null>;
13
+ /**
14
+ * Calculate sell quote for bonding curve
15
+ * Uses amplified constant product formula matching the program
16
+ */
17
+ export declare function getSellQuote(connection: Connection, tokenMint: PublicKey, tokensIn: bigint, programId: PublicKey): Promise<SellQuote | null>;
18
+ /**
19
+ * Build buy_on_curve instruction
20
+ *
21
+ * IMPORTANT: This instruction ALWAYS includes migration accounts in remaining_accounts.
22
+ * Migration accounts are required by the program - if the buy triggers the threshold,
23
+ * the program will atomically create the pool and migrate liquidity.
24
+ *
25
+ * Fee recipients are read from on-chain state and cannot be modified.
26
+ */
27
+ export declare function buildBuyOnCurveInstruction(connection: Connection, params: BuyOnCurveParams, programId: PublicKey): Promise<TransactionInstruction[]>;
28
+ /**
29
+ * Build sell_on_curve instruction
30
+ *
31
+ * IMPORTANT: Fee recipients are read from on-chain state and cannot be modified.
32
+ * Includes holder reward account in remaining_accounts for auto-payout.
33
+ */
34
+ export declare function buildSellOnCurveInstruction(connection: Connection, params: SellOnCurveParams, programId: PublicKey): Promise<TransactionInstruction[]>;
35
+ /**
36
+ * Build sell_max_on_curve instruction (sell entire balance)
37
+ * Includes holder reward account in remaining_accounts for auto-payout.
38
+ */
39
+ export declare function buildSellMaxOnCurveInstruction(connection: Connection, params: SellMaxOnCurveParams, programId: PublicKey): Promise<TransactionInstruction[]>;
40
+ /**
41
+ * Migration thresholds by variant (in lamports)
42
+ * Variant 0: 90 SOL
43
+ * Variant 1: 120 SOL
44
+ */
45
+ export declare const MIGRATION_THRESHOLDS: Record<number, bigint>;
46
+ /**
47
+ * Check if a buy will trigger migration threshold
48
+ *
49
+ * @param connection - Solana RPC connection
50
+ * @param tokenMint - Token mint address
51
+ * @param lamportsIn - Amount of SOL (lamports) being spent
52
+ * @param programId - CoinBarrel program ID
53
+ * @returns true if this buy will push the escrow past migration threshold
54
+ */
55
+ export declare function willTriggerMigration(connection: Connection, tokenMint: PublicKey, lamportsIn: bigint, programId: PublicKey): Promise<boolean>;
56
+ /**
57
+ * @deprecated Use buildBuyOnCurveInstruction instead - it now always includes migration accounts
58
+ */
59
+ export declare const buildBuyOnCurveWithMigrationInstruction: typeof buildBuyOnCurveInstruction;
60
+ //# sourceMappingURL=curve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curve.d.ts","sourceRoot":"","sources":["../src/curve.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAiB,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAiB/F,OAAO,KAAK,EACX,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,SAAS,EACT,MAAM,YAAY,CAAC;AAYpB;;;;GAIG;AACH,wBAAsB,WAAW,CAChC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAiD1B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CACjC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA+C3B;AAID;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAC/C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAoEnC;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAChD,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAqCnC;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CACnD,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAqCnC;AAID;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGvD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACzC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED;;GAEG;AACH,eAAO,MAAM,uCAAuC,mCAA6B,CAAC"}
package/dist/curve.js CHANGED
@@ -4,14 +4,17 @@
4
4
  * Buy and sell tokens on the bonding curve
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.buildBuyOnCurveWithMigrationInstruction = exports.MIGRATION_THRESHOLDS = void 0;
7
8
  exports.getBuyQuote = getBuyQuote;
8
9
  exports.getSellQuote = getSellQuote;
9
10
  exports.buildBuyOnCurveInstruction = buildBuyOnCurveInstruction;
10
11
  exports.buildSellOnCurveInstruction = buildSellOnCurveInstruction;
11
12
  exports.buildSellMaxOnCurveInstruction = buildSellMaxOnCurveInstruction;
13
+ exports.willTriggerMigration = willTriggerMigration;
12
14
  const web3_js_1 = require("@solana/web3.js");
13
15
  const spl_token_1 = require("@solana/spl-token");
14
16
  const constants_js_1 = require("./constants.js");
17
+ const web3_js_2 = require("@solana/web3.js");
15
18
  const pda_js_1 = require("./pda.js");
16
19
  const accounts_js_1 = require("./accounts.js");
17
20
  // ============= Buffer Helpers =============
@@ -28,7 +31,7 @@ function writeU64LE(n) {
28
31
  */
29
32
  async function getBuyQuote(connection, tokenMint, solIn, programId) {
30
33
  const state = await (0, accounts_js_1.getBondingCurveState)(connection, tokenMint, programId);
31
- if (!state || state.paused)
34
+ if (!state)
32
35
  return null;
33
36
  const feeBps = BigInt(state.feeBps);
34
37
  const totalFee = (solIn * feeBps) / 10000n;
@@ -74,7 +77,7 @@ async function getBuyQuote(connection, tokenMint, solIn, programId) {
74
77
  */
75
78
  async function getSellQuote(connection, tokenMint, tokensIn, programId) {
76
79
  const state = await (0, accounts_js_1.getBondingCurveState)(connection, tokenMint, programId);
77
- if (!state || state.paused)
80
+ if (!state)
78
81
  return null;
79
82
  // Amplified constant product formula (matches program)
80
83
  // SOL out (gross) = vSOL_eff - k/(vTOKEN_eff + delta_eff)
@@ -116,8 +119,11 @@ async function getSellQuote(connection, tokenMint, tokensIn, programId) {
116
119
  /**
117
120
  * Build buy_on_curve instruction
118
121
  *
119
- * IMPORTANT: Fee recipients are read from on-chain state and cannot be modified.
120
- * The program enforces that fees go to the correct recipients.
122
+ * IMPORTANT: This instruction ALWAYS includes migration accounts in remaining_accounts.
123
+ * Migration accounts are required by the program - if the buy triggers the threshold,
124
+ * the program will atomically create the pool and migrate liquidity.
125
+ *
126
+ * Fee recipients are read from on-chain state and cannot be modified.
121
127
  */
122
128
  async function buildBuyOnCurveInstruction(connection, params, programId) {
123
129
  const { tokenMint, buyer, lamportsIn } = params;
@@ -126,14 +132,13 @@ async function buildBuyOnCurveInstruction(connection, params, programId) {
126
132
  if (!state) {
127
133
  throw new Error('Bonding curve not found for this token');
128
134
  }
129
- if (state.paused) {
130
- throw new Error('Bonding curve is paused');
131
- }
132
135
  const bondingCurve = (0, pda_js_1.getBondingCurvePda)(tokenMint, programId);
133
136
  const bondingAuthority = (0, pda_js_1.getBondingAuthorityPda)(bondingCurve, programId);
134
137
  const solEscrow = (0, pda_js_1.getSolEscrowPda)(bondingCurve, programId);
135
138
  const buyerAta = (0, spl_token_1.getAssociatedTokenAddressSync)(tokenMint, buyer);
136
139
  const holderRewardAccount = (0, pda_js_1.getHolderRewardPda)(tokenMint, buyer, programId);
140
+ // Always derive migration PDAs - program requires them
141
+ const migrationPDAs = (0, pda_js_1.getMigrationPDAs)(tokenMint, programId);
137
142
  const instructions = [];
138
143
  // Check if buyer's ATA exists, create if needed
139
144
  try {
@@ -142,10 +147,14 @@ async function buildBuyOnCurveInstruction(connection, params, programId) {
142
147
  catch {
143
148
  instructions.push((0, spl_token_1.createAssociatedTokenAccountInstruction)(buyer, buyerAta, buyer, tokenMint));
144
149
  }
145
- // Build buy instruction with fee recipients from on-chain state
150
+ // Build buy instruction with migration accounts in remaining_accounts
151
+ // Layout for inline_migrate (remaining_accounts indices 1-14, index 0 is holder_reward_account which is formal):
152
+ // [1] pool, [2] wsol_mint, [3] token_a_vault, [4] token_b_vault, [5] lp_mint, [6] lp_vault, [7] pool_authority, [8] rent
153
+ // [9] token_vault (bonding), [10] sol_escrow, [11] bonding_authority, [12] creator_fee_recipient, [13] buyer, [14] system_program
146
154
  const buyIx = new web3_js_1.TransactionInstruction({
147
155
  programId,
148
156
  keys: [
157
+ // Formal accounts (match BuyOnCurve struct)
149
158
  { pubkey: bondingCurve, isWritable: true, isSigner: false },
150
159
  { pubkey: state.tokenVault, isWritable: true, isSigner: false },
151
160
  { pubkey: tokenMint, isWritable: false, isSigner: false },
@@ -153,13 +162,26 @@ async function buildBuyOnCurveInstruction(connection, params, programId) {
153
162
  { pubkey: bondingAuthority, isWritable: false, isSigner: false },
154
163
  { pubkey: buyerAta, isWritable: true, isSigner: false },
155
164
  { pubkey: buyer, isWritable: true, isSigner: true },
156
- // Fee recipients - read from on-chain state, cannot be modified
157
165
  { pubkey: state.adminFeeRecipient, isWritable: true, isSigner: false },
158
166
  { pubkey: state.creatorFeeRecipient, isWritable: true, isSigner: false },
159
- // Holder reward account - auto-initialized by program
160
167
  { pubkey: holderRewardAccount, isWritable: true, isSigner: false },
161
168
  { pubkey: spl_token_1.TOKEN_PROGRAM_ID, isWritable: false, isSigner: false },
162
169
  { pubkey: web3_js_1.SystemProgram.programId, isWritable: false, isSigner: false },
170
+ // Migration accounts (remaining_accounts[1-14])
171
+ { pubkey: migrationPDAs.poolPda, isWritable: true, isSigner: false },
172
+ { pubkey: constants_js_1.NATIVE_MINT, isWritable: false, isSigner: false },
173
+ { pubkey: migrationPDAs.tokenAVaultPda, isWritable: true, isSigner: false },
174
+ { pubkey: migrationPDAs.tokenBVaultPda, isWritable: true, isSigner: false },
175
+ { pubkey: migrationPDAs.lpMintPda, isWritable: true, isSigner: false },
176
+ { pubkey: migrationPDAs.lpVaultPda, isWritable: true, isSigner: false },
177
+ { pubkey: migrationPDAs.poolAuthorityPda, isWritable: false, isSigner: false },
178
+ { pubkey: web3_js_2.SYSVAR_RENT_PUBKEY, isWritable: false, isSigner: false },
179
+ { pubkey: state.tokenVault, isWritable: true, isSigner: false },
180
+ { pubkey: solEscrow, isWritable: true, isSigner: false },
181
+ { pubkey: bondingAuthority, isWritable: false, isSigner: false },
182
+ { pubkey: state.creatorFeeRecipient, isWritable: true, isSigner: false },
183
+ { pubkey: buyer, isWritable: true, isSigner: false },
184
+ { pubkey: web3_js_1.SystemProgram.programId, isWritable: false, isSigner: false },
163
185
  ],
164
186
  data: Buffer.concat([constants_js_1.DISCRIMINATORS.buy_on_curve, writeU64LE(lamportsIn)]),
165
187
  });
@@ -179,9 +201,6 @@ async function buildSellOnCurveInstruction(connection, params, programId) {
179
201
  if (!state) {
180
202
  throw new Error('Bonding curve not found for this token');
181
203
  }
182
- if (state.paused) {
183
- throw new Error('Bonding curve is paused');
184
- }
185
204
  const bondingCurve = (0, pda_js_1.getBondingCurvePda)(tokenMint, programId);
186
205
  const bondingAuthority = (0, pda_js_1.getBondingAuthorityPda)(bondingCurve, programId);
187
206
  const solEscrow = (0, pda_js_1.getSolEscrowPda)(bondingCurve, programId);
@@ -220,9 +239,6 @@ async function buildSellMaxOnCurveInstruction(connection, params, programId) {
220
239
  if (!state) {
221
240
  throw new Error('Bonding curve not found for this token');
222
241
  }
223
- if (state.paused) {
224
- throw new Error('Bonding curve is paused');
225
- }
226
242
  const bondingCurve = (0, pda_js_1.getBondingCurvePda)(tokenMint, programId);
227
243
  const bondingAuthority = (0, pda_js_1.getBondingAuthorityPda)(bondingCurve, programId);
228
244
  const solEscrow = (0, pda_js_1.getSolEscrowPda)(bondingCurve, programId);
@@ -250,3 +266,45 @@ async function buildSellMaxOnCurveInstruction(connection, params, programId) {
250
266
  });
251
267
  return [sellMaxIx];
252
268
  }
269
+ // ============= Migration Helpers =============
270
+ /**
271
+ * Migration thresholds by variant (in lamports)
272
+ * Variant 0: 90 SOL
273
+ * Variant 1: 120 SOL
274
+ */
275
+ exports.MIGRATION_THRESHOLDS = {
276
+ 0: 90000000000n, // 90 SOL
277
+ 1: 120000000000n, // 120 SOL
278
+ };
279
+ /**
280
+ * Check if a buy will trigger migration threshold
281
+ *
282
+ * @param connection - Solana RPC connection
283
+ * @param tokenMint - Token mint address
284
+ * @param lamportsIn - Amount of SOL (lamports) being spent
285
+ * @param programId - CoinBarrel program ID
286
+ * @returns true if this buy will push the escrow past migration threshold
287
+ */
288
+ async function willTriggerMigration(connection, tokenMint, lamportsIn, programId) {
289
+ const state = await (0, accounts_js_1.getBondingCurveState)(connection, tokenMint, programId);
290
+ if (!state)
291
+ return false;
292
+ const bondingCurve = (0, pda_js_1.getBondingCurvePda)(tokenMint, programId);
293
+ const solEscrow = (0, pda_js_1.getSolEscrowPda)(bondingCurve, programId);
294
+ // Get current escrow balance
295
+ const escrowInfo = await connection.getAccountInfo(solEscrow);
296
+ const currentEscrow = BigInt(escrowInfo ? escrowInfo.lamports : 0);
297
+ // Calculate approximate net SOL that will be added to escrow
298
+ // Net = lamportsIn * (1 - feeBps/10000)
299
+ const feeBps = BigInt(state.feeBps);
300
+ const approxNetToEscrow = (lamportsIn * (10000n - feeBps)) / 10000n;
301
+ const postBuyEscrow = currentEscrow + approxNetToEscrow;
302
+ // Get threshold for this variant
303
+ const threshold = exports.MIGRATION_THRESHOLDS[state.variant] ?? exports.MIGRATION_THRESHOLDS[0];
304
+ return postBuyEscrow >= threshold;
305
+ }
306
+ /**
307
+ * @deprecated Use buildBuyOnCurveInstruction instead - it now always includes migration accounts
308
+ */
309
+ exports.buildBuyOnCurveWithMigrationInstruction = buildBuyOnCurveInstruction;
310
+ //# sourceMappingURL=curve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curve.js","sourceRoot":"","sources":["../src/curve.ts"],"names":[],"mappings":"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"}