@coinbarrel/sdk 1.3.0 → 2.0.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 +305 -305
- package/dist/accounts.d.ts.map +1 -1
- package/dist/accounts.js +48 -62
- package/dist/accounts.js.map +1 -1
- package/dist/constants.d.ts +2 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +20 -21
- package/dist/constants.js.map +1 -1
- package/dist/create.js +18 -21
- package/dist/create.js.map +1 -1
- package/dist/curve.d.ts +25 -2
- package/dist/curve.d.ts.map +1 -1
- package/dist/curve.js +121 -73
- package/dist/curve.js.map +1 -1
- package/dist/index.d.ts +22 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -92
- package/dist/index.js.map +1 -1
- package/dist/metadata.js +8 -15
- package/dist/metadata.js.map +1 -1
- package/dist/pda.d.ts +18 -0
- package/dist/pda.d.ts.map +1 -1
- package/dist/pda.js +54 -36
- package/dist/pda.js.map +1 -1
- package/dist/pool.js +54 -61
- package/dist/pool.js.map +1 -1
- package/dist/rewards.js +28 -32
- package/dist/rewards.js.map +1 -1
- package/dist/types.d.ts +2 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/dist/types.js.map +1 -1
- package/package.json +45 -44
package/dist/accounts.js
CHANGED
|
@@ -1,19 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Account Fetching and Parsing
|
|
4
3
|
* Read on-chain account data for bonding curves and pools
|
|
5
4
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
exports.getPoolBalances = getPoolBalances;
|
|
11
|
-
exports.getMarketInfo = getMarketInfo;
|
|
12
|
-
exports.getUserTokenBalance = getUserTokenBalance;
|
|
13
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
14
|
-
const spl_token_1 = require("@solana/spl-token");
|
|
15
|
-
const constants_js_1 = require("./constants.js");
|
|
16
|
-
const pda_js_1 = require("./pda.js");
|
|
5
|
+
import { PublicKey } from '@solana/web3.js';
|
|
6
|
+
import { getAssociatedTokenAddressSync, getAccount } from '@solana/spl-token';
|
|
7
|
+
import { BONDING_CURVE_OFFSETS, POOL_OFFSETS, NATIVE_MINT, LAMPORTS_PER_SOL } from './constants.js';
|
|
8
|
+
import { getBondingCurvePda, getPoolPda, getSolEscrowPda } from './pda.js';
|
|
17
9
|
// ============= Buffer Helpers =============
|
|
18
10
|
function readU16LE(data, offset) {
|
|
19
11
|
return data.readUInt16LE(offset);
|
|
@@ -27,7 +19,7 @@ function readU128LE(data, offset) {
|
|
|
27
19
|
return low + (high << 64n);
|
|
28
20
|
}
|
|
29
21
|
function readPubkey(data, offset) {
|
|
30
|
-
return new
|
|
22
|
+
return new PublicKey(data.subarray(offset, offset + 32));
|
|
31
23
|
}
|
|
32
24
|
function readBool(data, offset) {
|
|
33
25
|
return data[offset] !== 0;
|
|
@@ -36,14 +28,15 @@ function readBool(data, offset) {
|
|
|
36
28
|
/**
|
|
37
29
|
* Fetch and parse bonding curve state
|
|
38
30
|
*/
|
|
39
|
-
async function getBondingCurveState(connection, tokenMint, programId) {
|
|
40
|
-
const bondingCurve =
|
|
31
|
+
export async function getBondingCurveState(connection, tokenMint, programId) {
|
|
32
|
+
const bondingCurve = getBondingCurvePda(tokenMint, programId);
|
|
41
33
|
const accountInfo = await connection.getAccountInfo(bondingCurve);
|
|
42
|
-
|
|
34
|
+
// 8 (discriminator) + 232 (struct) = 240 bytes minimum
|
|
35
|
+
if (!accountInfo || accountInfo.data.length < 240) {
|
|
43
36
|
return null;
|
|
44
37
|
}
|
|
45
38
|
const data = accountInfo.data;
|
|
46
|
-
const O =
|
|
39
|
+
const O = BONDING_CURVE_OFFSETS;
|
|
47
40
|
return {
|
|
48
41
|
tokenMint: readPubkey(data, O.TOKEN_MINT),
|
|
49
42
|
tokenVault: readPubkey(data, O.TOKEN_VAULT),
|
|
@@ -59,15 +52,16 @@ async function getBondingCurveState(connection, tokenMint, programId) {
|
|
|
59
52
|
minPriceLamportsPerToken: readU64LE(data, O.MIN_PRICE),
|
|
60
53
|
maxSupply: readU128LE(data, O.MAX_SUPPLY),
|
|
61
54
|
totalSold: readU128LE(data, O.TOTAL_SOLD),
|
|
62
|
-
|
|
55
|
+
accumulatedHolderRewardsSol: readU64LE(data, O.ACCUMULATED_HOLDER_REWARDS_SOL),
|
|
56
|
+
rewardPerTokenStored: readU128LE(data, O.REWARD_PER_TOKEN_STORED),
|
|
63
57
|
};
|
|
64
58
|
}
|
|
65
59
|
/**
|
|
66
60
|
* Get SOL balance in bonding curve escrow
|
|
67
61
|
*/
|
|
68
|
-
async function getCurveSolBalance(connection, tokenMint, programId) {
|
|
69
|
-
const bondingCurve =
|
|
70
|
-
const solEscrow =
|
|
62
|
+
export async function getCurveSolBalance(connection, tokenMint, programId) {
|
|
63
|
+
const bondingCurve = getBondingCurvePda(tokenMint, programId);
|
|
64
|
+
const solEscrow = getSolEscrowPda(bondingCurve, programId);
|
|
71
65
|
const balance = await connection.getBalance(solEscrow);
|
|
72
66
|
return BigInt(balance);
|
|
73
67
|
}
|
|
@@ -75,14 +69,14 @@ async function getCurveSolBalance(connection, tokenMint, programId) {
|
|
|
75
69
|
/**
|
|
76
70
|
* Fetch and parse pool state
|
|
77
71
|
*/
|
|
78
|
-
async function getPoolState(connection, tokenMint, programId) {
|
|
79
|
-
const pool =
|
|
72
|
+
export async function getPoolState(connection, tokenMint, programId) {
|
|
73
|
+
const pool = getPoolPda(tokenMint, programId);
|
|
80
74
|
const accountInfo = await connection.getAccountInfo(pool);
|
|
81
75
|
if (!accountInfo || accountInfo.data.length < 269) {
|
|
82
76
|
return null;
|
|
83
77
|
}
|
|
84
78
|
const data = accountInfo.data;
|
|
85
|
-
const O =
|
|
79
|
+
const O = POOL_OFFSETS;
|
|
86
80
|
return {
|
|
87
81
|
tokenAMint: readPubkey(data, O.TOKEN_A_MINT),
|
|
88
82
|
tokenBMint: readPubkey(data, O.TOKEN_B_MINT),
|
|
@@ -103,20 +97,20 @@ async function getPoolState(connection, tokenMint, programId) {
|
|
|
103
97
|
* Get pool vault balances
|
|
104
98
|
* Uses vault addresses stored in Pool state rather than deriving PDAs
|
|
105
99
|
*/
|
|
106
|
-
async function getPoolBalances(connection, tokenMint, programId) {
|
|
100
|
+
export async function getPoolBalances(connection, tokenMint, programId) {
|
|
107
101
|
// First fetch pool state to get stored vault addresses
|
|
108
102
|
const state = await getPoolState(connection, tokenMint, programId);
|
|
109
103
|
if (!state) {
|
|
110
104
|
return null;
|
|
111
105
|
}
|
|
112
106
|
// Determine which vault is WSOL and which is the token based on stored mints
|
|
113
|
-
const isTokenANative = state.tokenAMint.equals(
|
|
107
|
+
const isTokenANative = state.tokenAMint.equals(NATIVE_MINT);
|
|
114
108
|
const wsolVault = isTokenANative ? state.tokenAVault : state.tokenBVault;
|
|
115
109
|
const tokenVault = isTokenANative ? state.tokenBVault : state.tokenAVault;
|
|
116
110
|
try {
|
|
117
111
|
const [wsolAccount, tokenAccount] = await Promise.all([
|
|
118
|
-
|
|
119
|
-
|
|
112
|
+
getAccount(connection, wsolVault),
|
|
113
|
+
getAccount(connection, tokenVault),
|
|
120
114
|
]);
|
|
121
115
|
return {
|
|
122
116
|
solBalance: wsolAccount.amount,
|
|
@@ -132,41 +126,15 @@ async function getPoolBalances(connection, tokenMint, programId) {
|
|
|
132
126
|
* Get comprehensive market info for a token
|
|
133
127
|
* Automatically detects if on bonding curve or AMM pool
|
|
134
128
|
*/
|
|
135
|
-
async function getMarketInfo(connection, tokenMint, programId) {
|
|
136
|
-
//
|
|
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
|
|
129
|
+
export async function getMarketInfo(connection, tokenMint, programId) {
|
|
130
|
+
// Check if pool exists first (token has graduated)
|
|
161
131
|
const poolState = await getPoolState(connection, tokenMint, programId);
|
|
162
132
|
const poolBalances = poolState ? await getPoolBalances(connection, tokenMint, programId) : null;
|
|
163
133
|
if (poolState && poolBalances) {
|
|
164
|
-
//
|
|
134
|
+
// Token is on AMM pool (graduated)
|
|
165
135
|
const price = poolBalances.tokenBalance > 0n
|
|
166
|
-
? (poolBalances.solBalance *
|
|
136
|
+
? (poolBalances.solBalance * LAMPORTS_PER_SOL) / poolBalances.tokenBalance
|
|
167
137
|
: 0n;
|
|
168
|
-
// For pool, circulating = total supply - vault balance
|
|
169
|
-
// We'd need to fetch total supply, for now use a placeholder
|
|
170
138
|
const marketCapSol = poolBalances.tokenBalance > 0n
|
|
171
139
|
? poolBalances.solBalance * 2n // Approximate: 2x the SOL in pool
|
|
172
140
|
: 0n;
|
|
@@ -179,7 +147,25 @@ async function getMarketInfo(connection, tokenMint, programId) {
|
|
|
179
147
|
marketCapSol,
|
|
180
148
|
circulatingSupply: 0n, // Would need total supply query
|
|
181
149
|
feeBps: Number(poolState.feeRate),
|
|
182
|
-
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// Try bonding curve (not yet graduated)
|
|
153
|
+
const curveState = await getBondingCurveState(connection, tokenMint, programId);
|
|
154
|
+
if (curveState) {
|
|
155
|
+
const solBalance = await getCurveSolBalance(connection, tokenMint, programId);
|
|
156
|
+
// Calculate price from virtual reserves: price = vSol / vToken
|
|
157
|
+
const price = curveState.vToken > 0n ? (curveState.vSol * LAMPORTS_PER_SOL) / curveState.vToken : 0n;
|
|
158
|
+
// Market cap = circulating supply * price
|
|
159
|
+
const marketCapSol = curveState.totalSold > 0n ? (curveState.totalSold * price) / LAMPORTS_PER_SOL : 0n;
|
|
160
|
+
return {
|
|
161
|
+
tokenMint,
|
|
162
|
+
phase: 'curve',
|
|
163
|
+
price,
|
|
164
|
+
solReserve: solBalance,
|
|
165
|
+
tokenReserve: curveState.maxSupply - curveState.totalSold,
|
|
166
|
+
marketCapSol,
|
|
167
|
+
circulatingSupply: curveState.totalSold,
|
|
168
|
+
feeBps: curveState.feeBps,
|
|
183
169
|
};
|
|
184
170
|
}
|
|
185
171
|
return null;
|
|
@@ -187,10 +173,10 @@ async function getMarketInfo(connection, tokenMint, programId) {
|
|
|
187
173
|
/**
|
|
188
174
|
* Get user's token balance
|
|
189
175
|
*/
|
|
190
|
-
async function getUserTokenBalance(connection, tokenMint, user) {
|
|
176
|
+
export async function getUserTokenBalance(connection, tokenMint, user) {
|
|
191
177
|
try {
|
|
192
|
-
const ata =
|
|
193
|
-
const account = await
|
|
178
|
+
const ata = getAssociatedTokenAddressSync(tokenMint, user);
|
|
179
|
+
const account = await getAccount(connection, ata);
|
|
194
180
|
return account.amount;
|
|
195
181
|
}
|
|
196
182
|
catch {
|
package/dist/accounts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -56,7 +56,8 @@ export declare const BONDING_CURVE_OFFSETS: {
|
|
|
56
56
|
readonly MIN_PRICE: number;
|
|
57
57
|
readonly MAX_SUPPLY: number;
|
|
58
58
|
readonly TOTAL_SOLD: number;
|
|
59
|
-
readonly
|
|
59
|
+
readonly ACCUMULATED_HOLDER_REWARDS_SOL: number;
|
|
60
|
+
readonly REWARD_PER_TOKEN_STORED: number;
|
|
60
61
|
};
|
|
61
62
|
export declare const POOL_OFFSETS: {
|
|
62
63
|
readonly DISCRIMINATOR: 0;
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +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
|
|
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
|
@@ -1,26 +1,23 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* CoinBarrel SDK Constants
|
|
4
3
|
* Network-specific program IDs and configuration
|
|
5
4
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
devnet: new web3_js_1.PublicKey('AhfARnaxxX61YotZw3mZWLLUFpF8UV6pZmWJBEZCbVC4'),
|
|
11
|
-
mainnet: new web3_js_1.PublicKey('7HxbxHnTUBaUfWjVPbPLs8gqqScmjmBWjRnETBjS9DMj'),
|
|
5
|
+
import { PublicKey } from '@solana/web3.js';
|
|
6
|
+
export const PROGRAM_IDS = {
|
|
7
|
+
devnet: new PublicKey('AhfARnaxxX61YotZw3mZWLLUFpF8UV6pZmWJBEZCbVC4'),
|
|
8
|
+
mainnet: new PublicKey('7HxbxHnTUBaUfWjVPbPLs8gqqScmjmBWjRnETBjS9DMj'),
|
|
12
9
|
};
|
|
13
10
|
// Admin fee recipient (CoinBarrel protocol fee wallet)
|
|
14
|
-
|
|
15
|
-
devnet: new
|
|
16
|
-
mainnet: new
|
|
11
|
+
export const ADMIN_FEE_RECIPIENTS = {
|
|
12
|
+
devnet: new PublicKey('4Uw8XhtqVBEXEkjZfWb7agyrhxbSmfDSGWEdxbWonhwu'),
|
|
13
|
+
mainnet: new PublicKey('4Uw8XhtqVBEXEkjZfWb7agyrhxbSmfDSGWEdxbWonhwu'),
|
|
17
14
|
};
|
|
18
15
|
// WSOL mint (same on all networks)
|
|
19
|
-
|
|
16
|
+
export const NATIVE_MINT = new PublicKey('So11111111111111111111111111111111111111112');
|
|
20
17
|
// Metaplex Token Metadata Program ID (same on all networks)
|
|
21
|
-
|
|
18
|
+
export const TOKEN_METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
|
|
22
19
|
// ============= PDA Seeds =============
|
|
23
|
-
|
|
20
|
+
export const SEEDS = {
|
|
24
21
|
BONDING: Buffer.from('bonding'),
|
|
25
22
|
BONDING_AUTHORITY: Buffer.from('bonding_authority'),
|
|
26
23
|
BONDING_SOL: Buffer.from('bonding_sol'),
|
|
@@ -33,7 +30,7 @@ exports.SEEDS = {
|
|
|
33
30
|
};
|
|
34
31
|
// ============= Instruction Discriminators =============
|
|
35
32
|
// Pre-computed Anchor discriminators (first 8 bytes of sha256("global:<instruction_name>"))
|
|
36
|
-
|
|
33
|
+
export const DISCRIMINATORS = {
|
|
37
34
|
// Bonding curve
|
|
38
35
|
initialize_barrel_curve: Buffer.from([158, 16, 141, 14, 53, 250, 33, 42]),
|
|
39
36
|
create_barrel_token: Buffer.from([88, 190, 74, 163, 144, 5, 73, 246]),
|
|
@@ -60,7 +57,7 @@ exports.DISCRIMINATORS = {
|
|
|
60
57
|
};
|
|
61
58
|
// ============= Account Data Offsets =============
|
|
62
59
|
// For parsing on-chain account data
|
|
63
|
-
|
|
60
|
+
export const BONDING_CURVE_OFFSETS = {
|
|
64
61
|
DISCRIMINATOR: 0,
|
|
65
62
|
TOKEN_MINT: 8,
|
|
66
63
|
TOKEN_VAULT: 8 + 32,
|
|
@@ -76,9 +73,11 @@ exports.BONDING_CURVE_OFFSETS = {
|
|
|
76
73
|
MIN_PRICE: 8 + 168,
|
|
77
74
|
MAX_SUPPLY: 8 + 176,
|
|
78
75
|
TOTAL_SOLD: 8 + 192,
|
|
79
|
-
|
|
76
|
+
// paused field removed - migration is instant, no pause needed
|
|
77
|
+
ACCUMULATED_HOLDER_REWARDS_SOL: 8 + 208,
|
|
78
|
+
REWARD_PER_TOKEN_STORED: 8 + 216,
|
|
80
79
|
};
|
|
81
|
-
|
|
80
|
+
export const POOL_OFFSETS = {
|
|
82
81
|
DISCRIMINATOR: 0,
|
|
83
82
|
TOKEN_A_MINT: 8,
|
|
84
83
|
TOKEN_B_MINT: 8 + 32,
|
|
@@ -95,8 +94,8 @@ exports.POOL_OFFSETS = {
|
|
|
95
94
|
CREATOR_FEE_RECIPIENT: 8 + 237,
|
|
96
95
|
};
|
|
97
96
|
// ============= Defaults =============
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
97
|
+
export const DEFAULT_DECIMALS = 6;
|
|
98
|
+
export const DEFAULT_SLIPPAGE_BPS = 100; // 1%
|
|
99
|
+
export const LAMPORTS_PER_SOL = 1000000000n;
|
|
100
|
+
export const TOKEN_DECIMALS_MULTIPLIER = 1000000n; // 10^6 for 6 decimals
|
|
102
101
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/create.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Token Creation
|
|
4
3
|
* Create new barrel tokens with atomically revoked mint/freeze authority
|
|
5
4
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const pda_js_1 = require("./pda.js");
|
|
12
|
-
const metadata_js_1 = require("./metadata.js");
|
|
5
|
+
import { Keypair, PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY, TransactionInstruction, } from '@solana/web3.js';
|
|
6
|
+
import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
|
|
7
|
+
import { DISCRIMINATORS, TOKEN_METADATA_PROGRAM_ID, ADMIN_FEE_RECIPIENTS, } from './constants.js';
|
|
8
|
+
import { getBondingCurvePda, getBondingAuthorityPda } from './pda.js';
|
|
9
|
+
import { getMetadataPda } from './metadata.js';
|
|
13
10
|
// ============= Buffer Helpers =============
|
|
14
11
|
function writeU8(n) {
|
|
15
12
|
const b = Buffer.alloc(1);
|
|
@@ -32,7 +29,7 @@ function writeString(s) {
|
|
|
32
29
|
}
|
|
33
30
|
// ============= Token Vault PDA =============
|
|
34
31
|
function getTokenVaultPda(bondingCurve, programId) {
|
|
35
|
-
const [pda] =
|
|
32
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from('token_vault'), bondingCurve.toBuffer()], programId);
|
|
36
33
|
return pda;
|
|
37
34
|
}
|
|
38
35
|
// ============= Instruction Builder =============
|
|
@@ -50,24 +47,24 @@ function getTokenVaultPda(bondingCurve, programId) {
|
|
|
50
47
|
* @param network - Network for admin fee recipient
|
|
51
48
|
* @returns Object containing instruction and mint keypair (must sign transaction)
|
|
52
49
|
*/
|
|
53
|
-
function buildCreateBarrelTokenInstruction(params, programId, network) {
|
|
50
|
+
export function buildCreateBarrelTokenInstruction(params, programId, network) {
|
|
54
51
|
const { payer, name, symbol, uri, decimals = 6, variant = 0, creatorFeeRecipient, traderRewardsShareBps = 2500, // 25% of fees to holders
|
|
55
52
|
} = params;
|
|
56
53
|
// Generate new mint keypair
|
|
57
|
-
const mintKeypair =
|
|
54
|
+
const mintKeypair = Keypair.generate();
|
|
58
55
|
const tokenMint = mintKeypair.publicKey;
|
|
59
56
|
// Derive PDAs
|
|
60
|
-
const bondingCurve =
|
|
61
|
-
const bondingAuthority =
|
|
57
|
+
const bondingCurve = getBondingCurvePda(tokenMint, programId);
|
|
58
|
+
const bondingAuthority = getBondingAuthorityPda(bondingCurve, programId);
|
|
62
59
|
const tokenVault = getTokenVaultPda(bondingCurve, programId);
|
|
63
|
-
const metadata =
|
|
60
|
+
const metadata = getMetadataPda(tokenMint);
|
|
64
61
|
// Admin fee recipient from network config
|
|
65
|
-
const adminFeeRecipient =
|
|
62
|
+
const adminFeeRecipient = ADMIN_FEE_RECIPIENTS[network];
|
|
66
63
|
// Build instruction data
|
|
67
64
|
// Discriminator + decimals(u8) + variant(u8) + admin_fee_recipient(Pubkey) + creator_fee_recipient(Pubkey)
|
|
68
65
|
// + trader_rewards_share_bps(u16) + name(String) + symbol(String) + uri(String)
|
|
69
66
|
const data = Buffer.concat([
|
|
70
|
-
|
|
67
|
+
DISCRIMINATORS.create_barrel_token,
|
|
71
68
|
writeU8(decimals),
|
|
72
69
|
writeU8(variant),
|
|
73
70
|
writePubkey(adminFeeRecipient),
|
|
@@ -77,7 +74,7 @@ function buildCreateBarrelTokenInstruction(params, programId, network) {
|
|
|
77
74
|
writeString(symbol),
|
|
78
75
|
writeString(uri),
|
|
79
76
|
]);
|
|
80
|
-
const createIx = new
|
|
77
|
+
const createIx = new TransactionInstruction({
|
|
81
78
|
programId,
|
|
82
79
|
keys: [
|
|
83
80
|
{ pubkey: tokenMint, isWritable: true, isSigner: true },
|
|
@@ -85,11 +82,11 @@ function buildCreateBarrelTokenInstruction(params, programId, network) {
|
|
|
85
82
|
{ pubkey: tokenVault, isWritable: true, isSigner: false },
|
|
86
83
|
{ pubkey: bondingAuthority, isWritable: false, isSigner: false },
|
|
87
84
|
{ pubkey: metadata, isWritable: true, isSigner: false },
|
|
88
|
-
{ pubkey:
|
|
85
|
+
{ pubkey: TOKEN_METADATA_PROGRAM_ID, isWritable: false, isSigner: false },
|
|
89
86
|
{ pubkey: payer, isWritable: true, isSigner: true },
|
|
90
|
-
{ pubkey:
|
|
91
|
-
{ pubkey:
|
|
92
|
-
{ pubkey:
|
|
87
|
+
{ pubkey: SystemProgram.programId, isWritable: false, isSigner: false },
|
|
88
|
+
{ pubkey: TOKEN_PROGRAM_ID, isWritable: false, isSigner: false },
|
|
89
|
+
{ pubkey: SYSVAR_RENT_PUBKEY, isWritable: false, isSigner: false },
|
|
93
90
|
],
|
|
94
91
|
data,
|
|
95
92
|
});
|
package/dist/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
package/dist/curve.d.ts
CHANGED
|
@@ -18,8 +18,11 @@ export declare function getSellQuote(connection: Connection, tokenMint: PublicKe
|
|
|
18
18
|
/**
|
|
19
19
|
* Build buy_on_curve instruction
|
|
20
20
|
*
|
|
21
|
-
* IMPORTANT:
|
|
22
|
-
*
|
|
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.
|
|
23
26
|
*/
|
|
24
27
|
export declare function buildBuyOnCurveInstruction(connection: Connection, params: BuyOnCurveParams, programId: PublicKey): Promise<TransactionInstruction[]>;
|
|
25
28
|
/**
|
|
@@ -34,4 +37,24 @@ export declare function buildSellOnCurveInstruction(connection: Connection, para
|
|
|
34
37
|
* Includes holder reward account in remaining_accounts for auto-payout.
|
|
35
38
|
*/
|
|
36
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;
|
|
37
60
|
//# sourceMappingURL=curve.d.ts.map
|
package/dist/curve.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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"}
|