@coinbarrel/sdk 1.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.
- package/README.md +220 -0
- package/dist/accounts.d.ts +35 -0
- package/dist/accounts.d.ts.map +1 -0
- package/dist/accounts.js +185 -0
- package/dist/accounts.js.map +1 -0
- package/dist/constants.d.ts +79 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +96 -0
- package/dist/constants.js.map +1 -0
- package/dist/curve.d.ts +33 -0
- package/dist/curve.d.ts.map +1 -0
- package/dist/curve.js +218 -0
- package/dist/curve.js.map +1 -0
- package/dist/index.d.ts +184 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +254 -0
- package/dist/index.js.map +1 -0
- package/dist/pda.d.ts +51 -0
- package/dist/pda.d.ts.map +1 -0
- package/dist/pda.js +86 -0
- package/dist/pda.js.map +1 -0
- package/dist/pool.d.ts +32 -0
- package/dist/pool.d.ts.map +1 -0
- package/dist/pool.js +242 -0
- package/dist/pool.js.map +1 -0
- package/dist/types.d.ts +162 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CoinBarrel SDK
|
|
3
|
+
*
|
|
4
|
+
* SDK for integrating with CoinBarrel AMM - bonding curves and liquidity pools on Solana.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { CoinBarrel } from '@coinbarrel/sdk';
|
|
9
|
+
*
|
|
10
|
+
* // Initialize SDK
|
|
11
|
+
* const sdk = new CoinBarrel({
|
|
12
|
+
* connection: new Connection('https://api.mainnet-beta.solana.com'),
|
|
13
|
+
* network: 'mainnet'
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* // Get a buy quote
|
|
17
|
+
* const quote = await sdk.curve.getBuyQuote(tokenMint, solAmount);
|
|
18
|
+
*
|
|
19
|
+
* // Build buy instruction
|
|
20
|
+
* const instructions = await sdk.curve.buildBuyInstruction({
|
|
21
|
+
* tokenMint,
|
|
22
|
+
* buyer: userWallet.publicKey,
|
|
23
|
+
* lamportsIn: BigInt(0.1 * 1e9) // 0.1 SOL
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @packageDocumentation
|
|
28
|
+
*/
|
|
29
|
+
import { PROGRAM_IDS, ADMIN_FEE_RECIPIENTS, LAMPORTS_PER_SOL } from "./constants.js";
|
|
30
|
+
import * as pda from "./pda.js";
|
|
31
|
+
import * as accounts from "./accounts.js";
|
|
32
|
+
import * as curve from "./curve.js";
|
|
33
|
+
import * as pool from "./pool.js";
|
|
34
|
+
// ============= Re-exports =============
|
|
35
|
+
export * from "./constants.js";
|
|
36
|
+
export * from "./types.js";
|
|
37
|
+
export * from "./pda.js";
|
|
38
|
+
export { getBondingCurveState, getPoolState, getMarketInfo, getUserTokenBalance } from "./accounts.js";
|
|
39
|
+
export { getBuyQuote, getSellQuote } from "./curve.js";
|
|
40
|
+
export { getSwapSolToTokenQuote, getSwapTokenToSolQuote } from "./pool.js";
|
|
41
|
+
// ============= SDK Class =============
|
|
42
|
+
/**
|
|
43
|
+
* CoinBarrel SDK - Main entry point
|
|
44
|
+
*
|
|
45
|
+
* Provides easy access to all CoinBarrel AMM functionality:
|
|
46
|
+
* - Bonding curve trading (pre-graduation)
|
|
47
|
+
* - AMM pool trading (post-graduation)
|
|
48
|
+
* - Market data and quotes
|
|
49
|
+
*
|
|
50
|
+
* @remarks
|
|
51
|
+
* Fee recipients are read from on-chain state and cannot be modified.
|
|
52
|
+
* The program enforces that all fees go to the correct recipients.
|
|
53
|
+
*/
|
|
54
|
+
export class CoinBarrel {
|
|
55
|
+
/** Solana RPC connection */
|
|
56
|
+
connection;
|
|
57
|
+
/** Network (devnet or mainnet) */
|
|
58
|
+
network;
|
|
59
|
+
/** Program ID for the current network */
|
|
60
|
+
programId;
|
|
61
|
+
/** Admin fee recipient for the current network */
|
|
62
|
+
adminFeeRecipient;
|
|
63
|
+
/** Bonding curve operations */
|
|
64
|
+
curve;
|
|
65
|
+
/** AMM pool operations */
|
|
66
|
+
pool;
|
|
67
|
+
constructor(config) {
|
|
68
|
+
this.connection = config.connection;
|
|
69
|
+
this.network = config.network;
|
|
70
|
+
this.programId = PROGRAM_IDS[config.network];
|
|
71
|
+
this.adminFeeRecipient = ADMIN_FEE_RECIPIENTS[config.network];
|
|
72
|
+
this.curve = new CurveModule(this);
|
|
73
|
+
this.pool = new PoolModule(this);
|
|
74
|
+
}
|
|
75
|
+
// ============= Market Info =============
|
|
76
|
+
/**
|
|
77
|
+
* Get comprehensive market info for a token
|
|
78
|
+
* Automatically detects if on bonding curve or AMM pool
|
|
79
|
+
*/
|
|
80
|
+
async getMarketInfo(tokenMint) {
|
|
81
|
+
return accounts.getMarketInfo(this.connection, tokenMint, this.programId);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get user's token balance
|
|
85
|
+
*/
|
|
86
|
+
async getUserBalance(tokenMint, user) {
|
|
87
|
+
return accounts.getUserTokenBalance(this.connection, tokenMint, user);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Check if a token is on bonding curve (not yet graduated)
|
|
91
|
+
*/
|
|
92
|
+
async isOnCurve(tokenMint) {
|
|
93
|
+
const curveState = await accounts.getBondingCurveState(this.connection, tokenMint, this.programId);
|
|
94
|
+
if (!curveState)
|
|
95
|
+
return false;
|
|
96
|
+
// If paused or max supply reached, it's graduated
|
|
97
|
+
return !curveState.paused && curveState.totalSold < curveState.maxSupply;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if a token has graduated to AMM pool
|
|
101
|
+
*/
|
|
102
|
+
async isOnPool(tokenMint) {
|
|
103
|
+
const poolState = await accounts.getPoolState(this.connection, tokenMint, this.programId);
|
|
104
|
+
return poolState !== null;
|
|
105
|
+
}
|
|
106
|
+
// ============= PDA Helpers =============
|
|
107
|
+
/** Get bonding curve PDA for a token */
|
|
108
|
+
getBondingCurvePda(tokenMint) {
|
|
109
|
+
return pda.getBondingCurvePda(tokenMint, this.programId);
|
|
110
|
+
}
|
|
111
|
+
/** Get pool PDA for a token */
|
|
112
|
+
getPoolPda(tokenMint) {
|
|
113
|
+
return pda.getPoolPda(tokenMint, this.programId);
|
|
114
|
+
}
|
|
115
|
+
/** Get holder reward PDA for a user + token */
|
|
116
|
+
getHolderRewardPda(tokenMint, holder) {
|
|
117
|
+
return pda.getHolderRewardPda(tokenMint, holder, this.programId);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// ============= Curve Module =============
|
|
121
|
+
/**
|
|
122
|
+
* Bonding Curve Operations
|
|
123
|
+
* For trading tokens that haven't graduated yet
|
|
124
|
+
*/
|
|
125
|
+
class CurveModule {
|
|
126
|
+
sdk;
|
|
127
|
+
constructor(sdk) {
|
|
128
|
+
this.sdk = sdk;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get bonding curve state
|
|
132
|
+
*/
|
|
133
|
+
async getState(tokenMint) {
|
|
134
|
+
return accounts.getBondingCurveState(this.sdk.connection, tokenMint, this.sdk.programId);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get buy quote - how many tokens for X SOL
|
|
138
|
+
* @param tokenMint Token to buy
|
|
139
|
+
* @param solAmount SOL amount in lamports
|
|
140
|
+
*/
|
|
141
|
+
async getBuyQuote(tokenMint, solAmount) {
|
|
142
|
+
return curve.getBuyQuote(this.sdk.connection, tokenMint, solAmount, this.sdk.programId);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get sell quote - how much SOL for X tokens
|
|
146
|
+
* @param tokenMint Token to sell
|
|
147
|
+
* @param tokenAmount Token amount (raw, with decimals)
|
|
148
|
+
*/
|
|
149
|
+
async getSellQuote(tokenMint, tokenAmount) {
|
|
150
|
+
return curve.getSellQuote(this.sdk.connection, tokenMint, tokenAmount, this.sdk.programId);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Build buy instruction
|
|
154
|
+
*
|
|
155
|
+
* @remarks Fee recipients are read from on-chain and cannot be modified.
|
|
156
|
+
* The program enforces fees go to the correct recipients.
|
|
157
|
+
*/
|
|
158
|
+
async buildBuyInstruction(params) {
|
|
159
|
+
return curve.buildBuyOnCurveInstruction(this.sdk.connection, params, this.sdk.programId);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Build sell instruction
|
|
163
|
+
*/
|
|
164
|
+
async buildSellInstruction(params) {
|
|
165
|
+
return curve.buildSellOnCurveInstruction(this.sdk.connection, params, this.sdk.programId);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Build sell max instruction (sell entire balance)
|
|
169
|
+
*/
|
|
170
|
+
async buildSellMaxInstruction(params) {
|
|
171
|
+
return curve.buildSellMaxOnCurveInstruction(this.sdk.connection, params, this.sdk.programId);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// ============= Pool Module =============
|
|
175
|
+
/**
|
|
176
|
+
* AMM Pool Operations
|
|
177
|
+
* For trading tokens that have graduated to the AMM
|
|
178
|
+
*/
|
|
179
|
+
class PoolModule {
|
|
180
|
+
sdk;
|
|
181
|
+
constructor(sdk) {
|
|
182
|
+
this.sdk = sdk;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get pool state
|
|
186
|
+
*/
|
|
187
|
+
async getState(tokenMint) {
|
|
188
|
+
return accounts.getPoolState(this.sdk.connection, tokenMint, this.sdk.programId);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get pool balances
|
|
192
|
+
*/
|
|
193
|
+
async getBalances(tokenMint) {
|
|
194
|
+
return accounts.getPoolBalances(this.sdk.connection, tokenMint, this.sdk.programId);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get swap quote for SOL -> Token
|
|
198
|
+
*/
|
|
199
|
+
async getSwapSolToTokenQuote(tokenMint, solAmount) {
|
|
200
|
+
return pool.getSwapSolToTokenQuote(this.sdk.connection, tokenMint, solAmount, this.sdk.programId);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get swap quote for Token -> SOL
|
|
204
|
+
*/
|
|
205
|
+
async getSwapTokenToSolQuote(tokenMint, tokenAmount) {
|
|
206
|
+
return pool.getSwapTokenToSolQuote(this.sdk.connection, tokenMint, tokenAmount, this.sdk.programId);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Build swap SOL to token instruction
|
|
210
|
+
*
|
|
211
|
+
* @remarks Fee recipients are read from on-chain and cannot be modified.
|
|
212
|
+
*/
|
|
213
|
+
async buildSwapSolToTokenInstruction(params) {
|
|
214
|
+
return pool.buildSwapSolToTokenInstruction(this.sdk.connection, params, this.sdk.programId);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Build swap token to SOL instruction
|
|
218
|
+
*/
|
|
219
|
+
async buildSwapTokenToSolInstruction(params) {
|
|
220
|
+
return pool.buildSwapTokenToSolInstruction(this.sdk.connection, params, this.sdk.programId);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Build swap token to SOL max instruction (sell entire balance)
|
|
224
|
+
*/
|
|
225
|
+
async buildSwapTokenToSolMaxInstruction(params) {
|
|
226
|
+
return pool.buildSwapTokenToSolMaxInstruction(this.sdk.connection, params, this.sdk.programId);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// ============= Utility Functions =============
|
|
230
|
+
/**
|
|
231
|
+
* Convert SOL to lamports
|
|
232
|
+
*/
|
|
233
|
+
export function solToLamports(sol) {
|
|
234
|
+
return BigInt(Math.floor(sol * Number(LAMPORTS_PER_SOL)));
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Convert lamports to SOL
|
|
238
|
+
*/
|
|
239
|
+
export function lamportsToSol(lamports) {
|
|
240
|
+
return Number(lamports) / Number(LAMPORTS_PER_SOL);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Convert token amount to raw (with decimals)
|
|
244
|
+
*/
|
|
245
|
+
export function toRawAmount(amount, decimals = 6) {
|
|
246
|
+
return BigInt(Math.floor(amount * 10 ** decimals));
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Convert raw amount to UI (without decimals)
|
|
250
|
+
*/
|
|
251
|
+
export function toUiAmount(rawAmount, decimals = 6) {
|
|
252
|
+
return Number(rawAmount) / 10 ** decimals;
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/pda.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDA Derivation Helpers
|
|
3
|
+
* All Program Derived Addresses for CoinBarrel AMM
|
|
4
|
+
*/
|
|
5
|
+
import { PublicKey } from '@solana/web3.js';
|
|
6
|
+
/**
|
|
7
|
+
* Derive bonding curve PDA for a token mint
|
|
8
|
+
*/
|
|
9
|
+
export declare function getBondingCurvePda(mint: PublicKey, programId: PublicKey): PublicKey;
|
|
10
|
+
/**
|
|
11
|
+
* Derive bonding authority PDA (signs transfers from curve)
|
|
12
|
+
*/
|
|
13
|
+
export declare function getBondingAuthorityPda(bondingCurve: PublicKey, programId: PublicKey): PublicKey;
|
|
14
|
+
/**
|
|
15
|
+
* Derive SOL escrow PDA for bonding curve
|
|
16
|
+
*/
|
|
17
|
+
export declare function getSolEscrowPda(bondingCurve: PublicKey, programId: PublicKey): PublicKey;
|
|
18
|
+
/**
|
|
19
|
+
* Derive pool PDA for a WSOL <-> Token pair
|
|
20
|
+
*/
|
|
21
|
+
export declare function getPoolPda(tokenMint: PublicKey, programId: PublicKey): PublicKey;
|
|
22
|
+
/**
|
|
23
|
+
* Derive pool authority PDA (signs transfers from pool vaults)
|
|
24
|
+
*/
|
|
25
|
+
export declare function getPoolAuthorityPda(pool: PublicKey, programId: PublicKey): PublicKey;
|
|
26
|
+
/**
|
|
27
|
+
* Derive vault PDA for a pool + mint
|
|
28
|
+
*/
|
|
29
|
+
export declare function getVaultPda(pool: PublicKey, mint: PublicKey, programId: PublicKey): PublicKey;
|
|
30
|
+
/**
|
|
31
|
+
* Derive WSOL vault PDA for a pool
|
|
32
|
+
*/
|
|
33
|
+
export declare function getPoolWsolVaultPda(pool: PublicKey, programId: PublicKey): PublicKey;
|
|
34
|
+
/**
|
|
35
|
+
* Derive token vault PDA for a pool
|
|
36
|
+
*/
|
|
37
|
+
export declare function getPoolTokenVaultPda(pool: PublicKey, tokenMint: PublicKey, programId: PublicKey): PublicKey;
|
|
38
|
+
/**
|
|
39
|
+
* Derive LP mint PDA for a pool
|
|
40
|
+
*/
|
|
41
|
+
export declare function getLpMintPda(pool: PublicKey, programId: PublicKey): PublicKey;
|
|
42
|
+
/**
|
|
43
|
+
* Derive LP vault PDA (holds burned/locked LP tokens)
|
|
44
|
+
*/
|
|
45
|
+
export declare function getLpVaultPda(pool: PublicKey, programId: PublicKey): PublicKey;
|
|
46
|
+
/**
|
|
47
|
+
* Derive holder reward account PDA for a user + token
|
|
48
|
+
* Used for tracking holder rewards across buys/sells
|
|
49
|
+
*/
|
|
50
|
+
export declare function getHolderRewardPda(tokenMint: PublicKey, holder: PublicKey, programId: PublicKey): PublicKey;
|
|
51
|
+
//# sourceMappingURL=pda.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../src/pda.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAGnF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAM/F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAMxF;AAID;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAMhF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAGpF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAM7F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAEpF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,GAClB,SAAS,CAEX;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAG7E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAG9E;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CACjC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,SAAS,GAClB,SAAS,CAMX"}
|
package/dist/pda.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDA Derivation Helpers
|
|
3
|
+
* All Program Derived Addresses for CoinBarrel AMM
|
|
4
|
+
*/
|
|
5
|
+
import { PublicKey } from '@solana/web3.js';
|
|
6
|
+
import { SEEDS, NATIVE_MINT } from './constants.js';
|
|
7
|
+
// ============= Bonding Curve PDAs =============
|
|
8
|
+
/**
|
|
9
|
+
* Derive bonding curve PDA for a token mint
|
|
10
|
+
*/
|
|
11
|
+
export function getBondingCurvePda(mint, programId) {
|
|
12
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.BONDING, mint.toBuffer()], programId);
|
|
13
|
+
return pda;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Derive bonding authority PDA (signs transfers from curve)
|
|
17
|
+
*/
|
|
18
|
+
export function getBondingAuthorityPda(bondingCurve, programId) {
|
|
19
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.BONDING_AUTHORITY, bondingCurve.toBuffer()], programId);
|
|
20
|
+
return pda;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Derive SOL escrow PDA for bonding curve
|
|
24
|
+
*/
|
|
25
|
+
export function getSolEscrowPda(bondingCurve, programId) {
|
|
26
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.BONDING_SOL, bondingCurve.toBuffer()], programId);
|
|
27
|
+
return pda;
|
|
28
|
+
}
|
|
29
|
+
// ============= AMM Pool PDAs =============
|
|
30
|
+
/**
|
|
31
|
+
* Derive pool PDA for a WSOL <-> Token pair
|
|
32
|
+
*/
|
|
33
|
+
export function getPoolPda(tokenMint, programId) {
|
|
34
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.POOL, NATIVE_MINT.toBuffer(), tokenMint.toBuffer()], programId);
|
|
35
|
+
return pda;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Derive pool authority PDA (signs transfers from pool vaults)
|
|
39
|
+
*/
|
|
40
|
+
export function getPoolAuthorityPda(pool, programId) {
|
|
41
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.AUTHORITY, pool.toBuffer()], programId);
|
|
42
|
+
return pda;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Derive vault PDA for a pool + mint
|
|
46
|
+
*/
|
|
47
|
+
export function getVaultPda(pool, mint, programId) {
|
|
48
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.VAULT, pool.toBuffer(), mint.toBuffer()], programId);
|
|
49
|
+
return pda;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Derive WSOL vault PDA for a pool
|
|
53
|
+
*/
|
|
54
|
+
export function getPoolWsolVaultPda(pool, programId) {
|
|
55
|
+
return getVaultPda(pool, NATIVE_MINT, programId);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Derive token vault PDA for a pool
|
|
59
|
+
*/
|
|
60
|
+
export function getPoolTokenVaultPda(pool, tokenMint, programId) {
|
|
61
|
+
return getVaultPda(pool, tokenMint, programId);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Derive LP mint PDA for a pool
|
|
65
|
+
*/
|
|
66
|
+
export function getLpMintPda(pool, programId) {
|
|
67
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.LP_MINT, pool.toBuffer()], programId);
|
|
68
|
+
return pda;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Derive LP vault PDA (holds burned/locked LP tokens)
|
|
72
|
+
*/
|
|
73
|
+
export function getLpVaultPda(pool, programId) {
|
|
74
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.LP_VAULT, pool.toBuffer()], programId);
|
|
75
|
+
return pda;
|
|
76
|
+
}
|
|
77
|
+
// ============= Holder Reward PDAs =============
|
|
78
|
+
/**
|
|
79
|
+
* Derive holder reward account PDA for a user + token
|
|
80
|
+
* Used for tracking holder rewards across buys/sells
|
|
81
|
+
*/
|
|
82
|
+
export function getHolderRewardPda(tokenMint, holder, programId) {
|
|
83
|
+
const [pda] = PublicKey.findProgramAddressSync([SEEDS.HOLDER_REWARD, tokenMint.toBuffer(), holder.toBuffer()], programId);
|
|
84
|
+
return pda;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=pda.js.map
|
package/dist/pda.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pda.js","sourceRoot":"","sources":["../src/pda.ts"],"names":[],"mappings":"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"}
|
package/dist/pool.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AMM Pool Operations
|
|
3
|
+
* Swap tokens on graduated AMM pools
|
|
4
|
+
*/
|
|
5
|
+
import { Connection, PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
6
|
+
import type { SwapSolToTokenParams, SwapTokenToSolParams, SwapTokenToSolMaxParams, SwapQuote } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Calculate swap quote for SOL -> Token
|
|
9
|
+
*/
|
|
10
|
+
export declare function getSwapSolToTokenQuote(connection: Connection, tokenMint: PublicKey, solIn: bigint, programId: PublicKey): Promise<SwapQuote | null>;
|
|
11
|
+
/**
|
|
12
|
+
* Calculate swap quote for Token -> SOL
|
|
13
|
+
*/
|
|
14
|
+
export declare function getSwapTokenToSolQuote(connection: Connection, tokenMint: PublicKey, tokensIn: bigint, programId: PublicKey): Promise<SwapQuote | null>;
|
|
15
|
+
/**
|
|
16
|
+
* Build swap_sol_to_token instruction
|
|
17
|
+
*
|
|
18
|
+
* IMPORTANT: Fee recipients are read from on-chain state and cannot be modified.
|
|
19
|
+
* The program enforces that fees go to the correct recipients.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildSwapSolToTokenInstruction(connection: Connection, params: SwapSolToTokenParams, programId: PublicKey): Promise<TransactionInstruction[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Build swap_token_to_sol instruction
|
|
24
|
+
*
|
|
25
|
+
* IMPORTANT: Fee recipients are read from on-chain state and cannot be modified.
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildSwapTokenToSolInstruction(connection: Connection, params: SwapTokenToSolParams, programId: PublicKey): Promise<TransactionInstruction[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Build swap_token_to_sol_max instruction (sell entire balance)
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildSwapTokenToSolMaxInstruction(connection: Connection, params: SwapTokenToSolMaxParams, programId: PublicKey): Promise<TransactionInstruction[]>;
|
|
32
|
+
//# sourceMappingURL=pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EACV,SAAS,EAET,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAmBzB,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,EACV,MAAM,YAAY,CAAC;AAYpB;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA+B3B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAgC3B;AAID;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAsDnC;AAED;;;;GAIG;AACH,wBAAsB,8BAA8B,CAClD,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA8DnC;AAED;;GAEG;AACH,wBAAsB,iCAAiC,CACrD,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,uBAAuB,EAC/B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA0DnC"}
|