@coinbarrel/sdk 1.0.0 → 1.1.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 +91 -58
- package/dist/accounts.d.ts +1 -0
- package/dist/accounts.d.ts.map +1 -1
- package/dist/accounts.js +12 -5
- package/dist/accounts.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/curve.d.ts +5 -1
- package/dist/curve.d.ts.map +1 -1
- package/dist/curve.js +56 -28
- package/dist/curve.js.map +1 -1
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +113 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +247 -0
- package/dist/metadata.js.map +1 -0
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +16 -10
- package/dist/pool.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,8 +17,8 @@ import { CoinBarrel, solToLamports } from '@coinbarrel/sdk';
|
|
|
17
17
|
// Initialize SDK
|
|
18
18
|
const connection = new Connection('https://api.mainnet-beta.solana.com');
|
|
19
19
|
const sdk = new CoinBarrel({
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
connection,
|
|
21
|
+
network: 'mainnet', // or 'devnet'
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
// Token to trade
|
|
@@ -31,13 +31,13 @@ const tokenMint = new PublicKey('YOUR_TOKEN_MINT');
|
|
|
31
31
|
|
|
32
32
|
```typescript
|
|
33
33
|
const quote = await sdk.curve.getBuyQuote(
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
tokenMint,
|
|
35
|
+
solToLamports(0.1) // 0.1 SOL
|
|
36
36
|
);
|
|
37
37
|
|
|
38
38
|
if (quote) {
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
console.log(`Tokens out: ${quote.tokensOut}`);
|
|
40
|
+
console.log(`Price impact: ${quote.priceImpactBps / 100}%`);
|
|
41
41
|
}
|
|
42
42
|
```
|
|
43
43
|
|
|
@@ -47,9 +47,9 @@ if (quote) {
|
|
|
47
47
|
import { Transaction, sendAndConfirmTransaction } from '@solana/web3.js';
|
|
48
48
|
|
|
49
49
|
const instructions = await sdk.curve.buildBuyInstruction({
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
tokenMint,
|
|
51
|
+
buyer: wallet.publicKey,
|
|
52
|
+
lamportsIn: solToLamports(0.1),
|
|
53
53
|
});
|
|
54
54
|
|
|
55
55
|
const tx = new Transaction().add(...instructions);
|
|
@@ -60,15 +60,15 @@ const signature = await sendAndConfirmTransaction(connection, tx, [wallet]);
|
|
|
60
60
|
|
|
61
61
|
```typescript
|
|
62
62
|
const instructions = await sdk.curve.buildSellInstruction({
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
tokenMint,
|
|
64
|
+
seller: wallet.publicKey,
|
|
65
|
+
tokenAmount: BigInt(1_000_000), // 1 token (6 decimals)
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
// Or sell entire balance
|
|
69
69
|
const sellMaxIx = await sdk.curve.buildSellMaxInstruction({
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
tokenMint,
|
|
71
|
+
seller: wallet.publicKey,
|
|
72
72
|
});
|
|
73
73
|
```
|
|
74
74
|
|
|
@@ -78,13 +78,13 @@ const sellMaxIx = await sdk.curve.buildSellMaxInstruction({
|
|
|
78
78
|
|
|
79
79
|
```typescript
|
|
80
80
|
const quote = await sdk.pool.getSwapSolToTokenQuote(
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
tokenMint,
|
|
82
|
+
solToLamports(1.0) // 1 SOL
|
|
83
83
|
);
|
|
84
84
|
|
|
85
85
|
if (quote) {
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
console.log(`Tokens out: ${quote.amountOut}`);
|
|
87
|
+
console.log(`Fee: ${quote.fee} lamports`);
|
|
88
88
|
}
|
|
89
89
|
```
|
|
90
90
|
|
|
@@ -92,10 +92,10 @@ if (quote) {
|
|
|
92
92
|
|
|
93
93
|
```typescript
|
|
94
94
|
const instructions = await sdk.pool.buildSwapSolToTokenInstruction({
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
tokenMint,
|
|
96
|
+
user: wallet.publicKey,
|
|
97
|
+
lamportsIn: solToLamports(1.0),
|
|
98
|
+
minimumAmountOut: BigInt(900_000), // Slippage protection
|
|
99
99
|
});
|
|
100
100
|
```
|
|
101
101
|
|
|
@@ -103,16 +103,16 @@ const instructions = await sdk.pool.buildSwapSolToTokenInstruction({
|
|
|
103
103
|
|
|
104
104
|
```typescript
|
|
105
105
|
const instructions = await sdk.pool.buildSwapTokenToSolInstruction({
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
tokenMint,
|
|
107
|
+
user: wallet.publicKey,
|
|
108
|
+
amountIn: BigInt(1_000_000),
|
|
109
|
+
minimumLamportsOut: solToLamports(0.09),
|
|
110
110
|
});
|
|
111
111
|
|
|
112
112
|
// Or sell entire balance
|
|
113
113
|
const sellMaxIx = await sdk.pool.buildSwapTokenToSolMaxInstruction({
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
tokenMint,
|
|
115
|
+
user: wallet.publicKey,
|
|
116
116
|
});
|
|
117
117
|
```
|
|
118
118
|
|
|
@@ -124,10 +124,10 @@ const sellMaxIx = await sdk.pool.buildSwapTokenToSolMaxInstruction({
|
|
|
124
124
|
const info = await sdk.getMarketInfo(tokenMint);
|
|
125
125
|
|
|
126
126
|
if (info) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
127
|
+
console.log(`Phase: ${info.phase}`); // 'curve' or 'pool'
|
|
128
|
+
console.log(`Price: ${info.price} lamports/token`);
|
|
129
|
+
console.log(`Market Cap: ${info.marketCapSol} lamports`);
|
|
130
|
+
console.log(`Fee: ${info.feeBps / 100}%`);
|
|
131
131
|
}
|
|
132
132
|
```
|
|
133
133
|
|
|
@@ -135,9 +135,9 @@ if (info) {
|
|
|
135
135
|
|
|
136
136
|
```typescript
|
|
137
137
|
if (await sdk.isOnCurve(tokenMint)) {
|
|
138
|
-
|
|
138
|
+
// Use curve methods
|
|
139
139
|
} else if (await sdk.isOnPool(tokenMint)) {
|
|
140
|
-
|
|
140
|
+
// Use pool methods
|
|
141
141
|
}
|
|
142
142
|
```
|
|
143
143
|
|
|
@@ -148,36 +148,61 @@ The SDK supports both devnet and mainnet:
|
|
|
148
148
|
```typescript
|
|
149
149
|
// Devnet
|
|
150
150
|
const devnetSdk = new CoinBarrel({
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
connection: new Connection('https://api.devnet.solana.com'),
|
|
152
|
+
network: 'devnet',
|
|
153
153
|
});
|
|
154
154
|
|
|
155
155
|
// Mainnet
|
|
156
156
|
const mainnetSdk = new CoinBarrel({
|
|
157
|
-
|
|
158
|
-
|
|
157
|
+
connection: new Connection('https://api.mainnet-beta.solana.com'),
|
|
158
|
+
network: 'mainnet',
|
|
159
159
|
});
|
|
160
160
|
```
|
|
161
161
|
|
|
162
162
|
## Utility Functions
|
|
163
163
|
|
|
164
164
|
```typescript
|
|
165
|
-
import {
|
|
166
|
-
solToLamports,
|
|
167
|
-
lamportsToSol,
|
|
168
|
-
toRawAmount,
|
|
169
|
-
toUiAmount
|
|
170
|
-
} from '@coinbarrel/sdk';
|
|
165
|
+
import { solToLamports, lamportsToSol, toRawAmount, toUiAmount } from '@coinbarrel/sdk';
|
|
171
166
|
|
|
172
167
|
// SOL conversions
|
|
173
|
-
const lamports = solToLamports(1.5);
|
|
168
|
+
const lamports = solToLamports(1.5); // 1_500_000_000n
|
|
174
169
|
const sol = lamportsToSol(1_500_000_000n); // 1.5
|
|
175
170
|
|
|
176
171
|
// Token amount conversions (default 6 decimals)
|
|
177
|
-
const raw = toRawAmount(100);
|
|
172
|
+
const raw = toRawAmount(100); // 100_000_000n
|
|
178
173
|
const ui = toUiAmount(100_000_000n); // 100
|
|
179
174
|
```
|
|
180
175
|
|
|
176
|
+
## Token Metadata
|
|
177
|
+
|
|
178
|
+
Fetch token metadata from the Metaplex Token Metadata program:
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
// Get on-chain metadata (fast - just name, symbol, uri)
|
|
182
|
+
const metadata = await sdk.getTokenMetadata(tokenMint);
|
|
183
|
+
if (metadata) {
|
|
184
|
+
console.log(metadata.name); // "My Token"
|
|
185
|
+
console.log(metadata.symbol); // "MTK"
|
|
186
|
+
console.log(metadata.uri); // "https://..."
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Get full metadata including off-chain JSON (image, socials)
|
|
190
|
+
const fullMetadata = await sdk.getTokenMetadataJson(tokenMint);
|
|
191
|
+
if (fullMetadata) {
|
|
192
|
+
console.log(fullMetadata.image); // "https://..." or "ipfs://..."
|
|
193
|
+
console.log(fullMetadata.description); // "A cool token"
|
|
194
|
+
console.log(fullMetadata.twitter); // "@mytoken"
|
|
195
|
+
console.log(fullMetadata.website); // "https://..."
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Batch fetch for multiple tokens (more efficient)
|
|
199
|
+
const mints = [mint1, mint2, mint3];
|
|
200
|
+
const metadataMap = await sdk.batchGetTokenMetadata(mints);
|
|
201
|
+
for (const [mintStr, meta] of metadataMap) {
|
|
202
|
+
console.log(`${mintStr}: ${meta?.name}`);
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
181
206
|
## PDA Helpers
|
|
182
207
|
|
|
183
208
|
```typescript
|
|
@@ -185,6 +210,7 @@ const ui = toUiAmount(100_000_000n); // 100
|
|
|
185
210
|
const bondingCurve = sdk.getBondingCurvePda(tokenMint);
|
|
186
211
|
const pool = sdk.getPoolPda(tokenMint);
|
|
187
212
|
const holderReward = sdk.getHolderRewardPda(tokenMint, wallet.publicKey);
|
|
213
|
+
const metadataPda = sdk.getMetadataPda(tokenMint); // Metaplex metadata PDA
|
|
188
214
|
```
|
|
189
215
|
|
|
190
216
|
## Fee Structure
|
|
@@ -192,11 +218,17 @@ const holderReward = sdk.getHolderRewardPda(tokenMint, wallet.publicKey);
|
|
|
192
218
|
CoinBarrel fees are enforced at the program level and cannot be bypassed:
|
|
193
219
|
|
|
194
220
|
- **1% total fee** on all trades
|
|
195
|
-
- **
|
|
196
|
-
- **
|
|
197
|
-
- **
|
|
221
|
+
- **50%** goes to CoinBarrel (protocol) - fixed
|
|
222
|
+
- **25-40%** goes to holder rewards pool (of total fee, configured by token launcher via `trader_rewards_share_bps`)
|
|
223
|
+
- **10-25%** goes to token creator (remainder: 50% - holder%)
|
|
198
224
|
|
|
199
|
-
|
|
225
|
+
Example: If `trader_rewards_share_bps = 3000` (30%):
|
|
226
|
+
|
|
227
|
+
- Platform: 50% of fee
|
|
228
|
+
- Holders: 30% of fee
|
|
229
|
+
- Creator: 20% of fee
|
|
230
|
+
|
|
231
|
+
The split is set when the token is launched (`trader_rewards_share_bps` must be 2500-4000). The SDK reads fee recipients from on-chain state. Integrators cannot modify or bypass fees.
|
|
200
232
|
|
|
201
233
|
## TypeScript
|
|
202
234
|
|
|
@@ -204,17 +236,18 @@ The SDK is fully typed:
|
|
|
204
236
|
|
|
205
237
|
```typescript
|
|
206
238
|
import type {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
239
|
+
BondingCurveState,
|
|
240
|
+
PoolState,
|
|
241
|
+
MarketInfo,
|
|
242
|
+
BuyQuote,
|
|
243
|
+
SellQuote,
|
|
244
|
+
SwapQuote,
|
|
245
|
+
Network,
|
|
246
|
+
TokenMetadata,
|
|
247
|
+
TokenMetadataJson,
|
|
214
248
|
} from '@coinbarrel/sdk';
|
|
215
249
|
```
|
|
216
250
|
|
|
217
251
|
## License
|
|
218
252
|
|
|
219
253
|
MIT
|
|
220
|
-
|
package/dist/accounts.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare function getCurveSolBalance(connection: Connection, tokenMint: Pu
|
|
|
18
18
|
export declare function getPoolState(connection: Connection, tokenMint: PublicKey, programId: PublicKey): Promise<PoolState | null>;
|
|
19
19
|
/**
|
|
20
20
|
* Get pool vault balances
|
|
21
|
+
* Uses vault addresses stored in Pool state rather than deriving PDAs
|
|
21
22
|
*/
|
|
22
23
|
export declare function getPoolBalances(connection: Connection, tokenMint: PublicKey, programId: PublicKey): Promise<{
|
|
23
24
|
solBalance: bigint;
|
package/dist/accounts.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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,CA4BnC;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,CAgE5B;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
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { PublicKey } from '@solana/web3.js';
|
|
6
6
|
import { getAssociatedTokenAddressSync, getAccount } from '@solana/spl-token';
|
|
7
|
-
import { BONDING_CURVE_OFFSETS, POOL_OFFSETS, LAMPORTS_PER_SOL } from './constants.js';
|
|
8
|
-
import { getBondingCurvePda, getPoolPda, getSolEscrowPda
|
|
7
|
+
import { BONDING_CURVE_OFFSETS, POOL_OFFSETS, NATIVE_MINT, LAMPORTS_PER_SOL } from './constants.js';
|
|
8
|
+
import { getBondingCurvePda, getPoolPda, getSolEscrowPda } from './pda.js';
|
|
9
9
|
// ============= Buffer Helpers =============
|
|
10
10
|
function readU16LE(data, offset) {
|
|
11
11
|
return data.readUInt16LE(offset);
|
|
@@ -93,11 +93,18 @@ export async function getPoolState(connection, tokenMint, programId) {
|
|
|
93
93
|
}
|
|
94
94
|
/**
|
|
95
95
|
* Get pool vault balances
|
|
96
|
+
* Uses vault addresses stored in Pool state rather than deriving PDAs
|
|
96
97
|
*/
|
|
97
98
|
export async function getPoolBalances(connection, tokenMint, programId) {
|
|
98
|
-
|
|
99
|
-
const
|
|
100
|
-
|
|
99
|
+
// First fetch pool state to get stored vault addresses
|
|
100
|
+
const state = await getPoolState(connection, tokenMint, programId);
|
|
101
|
+
if (!state) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
// Determine which vault is WSOL and which is the token based on stored mints
|
|
105
|
+
const isTokenANative = state.tokenAMint.equals(NATIVE_MINT);
|
|
106
|
+
const wsolVault = isTokenANative ? state.tokenAVault : state.tokenBVault;
|
|
107
|
+
const tokenVault = isTokenANative ? state.tokenBVault : state.tokenAVault;
|
|
101
108
|
try {
|
|
102
109
|
const [wsolAccount, tokenAccount] = await Promise.all([
|
|
103
110
|
getAccount(connection, wsolVault),
|
package/dist/accounts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3E,6CAA6C;AAE7C,SAAS,SAAS,CAAC,IAAY,EAAE,MAAc;IAC9C,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,MAAc;IAC9C,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,MAAc;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,MAAc;IAC/C,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,MAAc;IAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,4CAA4C;AAE5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,UAAsB,EACtB,SAAoB,EACpB,SAAoB;IAEpB,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAElE,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC9B,MAAM,CAAC,GAAG,qBAAqB,CAAC;IAEhC,OAAO;QACN,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC;QACzC,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC;QAC3C,iBAAiB,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,mBAAmB,CAAC;QAC1D,mBAAmB,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,qBAAqB,CAAC;QAC9D,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;QAClC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QACxB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAClB,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;QACnC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;QAC/B,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;QAClC,qBAAqB,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,wBAAwB,CAAC;QAClE,wBAAwB,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC;QACtD,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC;QACzC,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC;QACzC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;KAChC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,UAAsB,EACtB,SAAoB,EACpB,SAAoB;IAEpB,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAED,uCAAuC;AAEvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,UAAsB,EACtB,SAAoB,EACpB,SAAoB;IAEpB,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC9B,MAAM,CAAC,GAAG,YAAY,CAAC;IAEvB,OAAO;QACN,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC;QAC5C,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC;QAC5C,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC;QAC9C,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC;QAC9C,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;QACnC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC;QACpC,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC;QACxC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAClB,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC;QACrC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3B,qBAAqB,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,wBAAwB,CAAC;QAClE,iBAAiB,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,mBAAmB,CAAC;QAC1D,mBAAmB,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,qBAAqB,CAAC;KAC9D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,UAAsB,EACtB,SAAoB,EACpB,SAAoB;IAEpB,uDAAuD;IACvD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACb,CAAC;IAED,6EAA6E;IAC7E,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IACzE,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IAE1E,IAAI,CAAC;QACJ,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC;YACjC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC;SAClC,CAAC,CAAC;QAEH,OAAO;YACN,UAAU,EAAE,WAAW,CAAC,MAAM;YAC9B,YAAY,EAAE,YAAY,CAAC,MAAM;SACjC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,0CAA0C;AAE1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,UAAsB,EACtB,SAAoB,EACpB,SAAoB;IAEpB,0BAA0B;IAC1B,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAEhF,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACtC,8EAA8E;QAC9E,IAAI,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;YACjD,yBAAyB;YACzB,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAE9E,+DAA+D;YAC/D,MAAM,KAAK,GACV,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,gBAAgB,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAExF,0CAA0C;YAC1C,MAAM,YAAY,GACjB,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAEpF,OAAO;gBACN,SAAS;gBACT,KAAK,EAAE,OAAO;gBACd,KAAK;gBACL,UAAU,EAAE,UAAU;gBACtB,YAAY,EAAE,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS;gBACzD,YAAY;gBACZ,iBAAiB,EAAE,UAAU,CAAC,SAAS;gBACvC,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,MAAM,EAAE,UAAU,CAAC,MAAM;aACzB,CAAC;QACH,CAAC;IACF,CAAC;IAED,eAAe;IACf,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEhG,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;QAC/B,mEAAmE;QACnE,MAAM,KAAK,GACV,YAAY,CAAC,YAAY,GAAG,EAAE;YAC7B,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,gBAAgB,CAAC,GAAG,YAAY,CAAC,YAAY;YAC1E,CAAC,CAAC,EAAE,CAAC;QAEP,uDAAuD;QACvD,6DAA6D;QAC7D,MAAM,YAAY,GACjB,YAAY,CAAC,YAAY,GAAG,EAAE;YAC7B,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,EAAE,CAAC,kCAAkC;YACjE,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACN,SAAS;YACT,KAAK,EAAE,MAAM;YACb,KAAK;YACL,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,YAAY,EAAE,YAAY,CAAC,YAAY;YACvC,YAAY;YACZ,iBAAiB,EAAE,EAAE,EAAE,gCAAgC;YACvD,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;YACjC,MAAM,EAAE,KAAK;SACb,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,UAAsB,EACtB,SAAoB,EACpB,IAAe;IAEf,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,6BAA6B,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,MAAM,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export type Network = 'devnet' | 'mainnet';
|
|
|
7
7
|
export declare const PROGRAM_IDS: Record<Network, PublicKey>;
|
|
8
8
|
export declare const ADMIN_FEE_RECIPIENTS: Record<Network, PublicKey>;
|
|
9
9
|
export declare const NATIVE_MINT: PublicKey;
|
|
10
|
+
export declare const TOKEN_METADATA_PROGRAM_ID: PublicKey;
|
|
10
11
|
export declare const SEEDS: {
|
|
11
12
|
readonly BONDING: Buffer<ArrayBuffer>;
|
|
12
13
|
readonly BONDING_AUTHORITY: Buffer<ArrayBuffer>;
|
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;
|
|
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;;;;;;;;;;;;;;;;;;;CA0BjB,CAAC;AAKX,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;CAiBxB,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
|
@@ -14,6 +14,8 @@ export const ADMIN_FEE_RECIPIENTS = {
|
|
|
14
14
|
};
|
|
15
15
|
// WSOL mint (same on all networks)
|
|
16
16
|
export const NATIVE_MINT = new PublicKey('So11111111111111111111111111111111111111112');
|
|
17
|
+
// Metaplex Token Metadata Program ID (same on all networks)
|
|
18
|
+
export const TOKEN_METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
|
|
17
19
|
// ============= PDA Seeds =============
|
|
18
20
|
export const SEEDS = {
|
|
19
21
|
BONDING: Buffer.from('bonding'),
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/curve.d.ts
CHANGED
|
@@ -6,11 +6,13 @@ import { Connection, PublicKey, TransactionInstruction } from '@solana/web3.js';
|
|
|
6
6
|
import type { BuyOnCurveParams, SellOnCurveParams, SellMaxOnCurveParams, BuyQuote, SellQuote } from './types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Calculate buy quote for bonding curve
|
|
9
|
-
* Uses constant product formula
|
|
9
|
+
* Uses amplified constant product formula matching the program:
|
|
10
|
+
* k = vSol_eff * vToken_eff where _eff = base * amp_bps / 10000
|
|
10
11
|
*/
|
|
11
12
|
export declare function getBuyQuote(connection: Connection, tokenMint: PublicKey, solIn: bigint, programId: PublicKey): Promise<BuyQuote | null>;
|
|
12
13
|
/**
|
|
13
14
|
* Calculate sell quote for bonding curve
|
|
15
|
+
* Uses amplified constant product formula matching the program
|
|
14
16
|
*/
|
|
15
17
|
export declare function getSellQuote(connection: Connection, tokenMint: PublicKey, tokensIn: bigint, programId: PublicKey): Promise<SellQuote | null>;
|
|
16
18
|
/**
|
|
@@ -24,10 +26,12 @@ export declare function buildBuyOnCurveInstruction(connection: Connection, param
|
|
|
24
26
|
* Build sell_on_curve instruction
|
|
25
27
|
*
|
|
26
28
|
* IMPORTANT: Fee recipients are read from on-chain state and cannot be modified.
|
|
29
|
+
* Includes holder reward account in remaining_accounts for auto-payout.
|
|
27
30
|
*/
|
|
28
31
|
export declare function buildSellOnCurveInstruction(connection: Connection, params: SellOnCurveParams, programId: PublicKey): Promise<TransactionInstruction[]>;
|
|
29
32
|
/**
|
|
30
33
|
* Build sell_max_on_curve instruction (sell entire balance)
|
|
34
|
+
* Includes holder reward account in remaining_accounts for auto-payout.
|
|
31
35
|
*/
|
|
32
36
|
export declare function buildSellMaxOnCurveInstruction(connection: Connection, params: SellMaxOnCurveParams, programId: PublicKey): Promise<TransactionInstruction[]>;
|
|
33
37
|
//# 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;AAe/F,OAAO,KAAK,EACX,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,SAAS,EACT,MAAM,YAAY,CAAC;AAYpB
|
|
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;AAe/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;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC/C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAmDnC;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAChD,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAwCnC;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CACnD,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAwCnC"}
|
package/dist/curve.js
CHANGED
|
@@ -16,7 +16,8 @@ function writeU64LE(n) {
|
|
|
16
16
|
// ============= Quote Calculations =============
|
|
17
17
|
/**
|
|
18
18
|
* Calculate buy quote for bonding curve
|
|
19
|
-
* Uses constant product formula
|
|
19
|
+
* Uses amplified constant product formula matching the program:
|
|
20
|
+
* k = vSol_eff * vToken_eff where _eff = base * amp_bps / 10000
|
|
20
21
|
*/
|
|
21
22
|
export async function getBuyQuote(connection, tokenMint, solIn, programId) {
|
|
22
23
|
const state = await getBondingCurveState(connection, tokenMint, programId);
|
|
@@ -24,19 +25,29 @@ export async function getBuyQuote(connection, tokenMint, solIn, programId) {
|
|
|
24
25
|
return null;
|
|
25
26
|
const feeBps = BigInt(state.feeBps);
|
|
26
27
|
const totalFee = (solIn * feeBps) / 10000n;
|
|
27
|
-
// Fee
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
const
|
|
28
|
+
// Fee split matches program: Platform 50%, Holders 25-40%, Creator 10-25% (of TOTAL fee)
|
|
29
|
+
// trader_rewards_share_bps represents holder % of TOTAL fee (2500 = 25%, 4000 = 40%)
|
|
30
|
+
const adminFee = totalFee / 2n; // 50% to platform
|
|
31
|
+
const holderShareBps = BigInt(state.traderRewardsShareBps);
|
|
32
|
+
const holderRewards = (totalFee * holderShareBps) / 10000n; // holder % of TOTAL
|
|
33
|
+
const creatorFee = totalFee - adminFee - holderRewards; // remainder to creator
|
|
34
|
+
const netCost = solIn - totalFee;
|
|
35
|
+
// Amplified constant product formula (matches program)
|
|
36
|
+
const ampBps = BigInt(state.ampBps);
|
|
37
|
+
const vTokenEff = (state.vToken * ampBps) / 10000n;
|
|
38
|
+
const vSolEff = (state.vSol * ampBps) / 10000n;
|
|
39
|
+
const k = vTokenEff * vSolEff;
|
|
40
|
+
const denominator = vSolEff + netCost;
|
|
41
|
+
const kDiv = k / denominator;
|
|
42
|
+
const deltaTokensEff = vTokenEff - kDiv;
|
|
43
|
+
// Convert effective tokens back to base units
|
|
44
|
+
const tokensOut = (deltaTokensEff * 10000n) / ampBps;
|
|
45
|
+
// Calculate new effective reserves for price impact
|
|
46
|
+
const newVSolEff = vSolEff + netCost;
|
|
47
|
+
const newVTokenEff = kDiv;
|
|
37
48
|
// Price impact
|
|
38
|
-
const priceBeforeLamports =
|
|
39
|
-
const priceAfterLamports =
|
|
49
|
+
const priceBeforeLamports = vTokenEff > 0n ? (vSolEff * LAMPORTS_PER_SOL) / vTokenEff : 0n;
|
|
50
|
+
const priceAfterLamports = newVTokenEff > 0n ? (newVSolEff * LAMPORTS_PER_SOL) / newVTokenEff : 0n;
|
|
40
51
|
const priceImpactBps = priceBeforeLamports > 0n
|
|
41
52
|
? Number(((priceAfterLamports - priceBeforeLamports) * 10000n) / priceBeforeLamports)
|
|
42
53
|
: 0;
|
|
@@ -52,36 +63,45 @@ export async function getBuyQuote(connection, tokenMint, solIn, programId) {
|
|
|
52
63
|
}
|
|
53
64
|
/**
|
|
54
65
|
* Calculate sell quote for bonding curve
|
|
66
|
+
* Uses amplified constant product formula matching the program
|
|
55
67
|
*/
|
|
56
68
|
export async function getSellQuote(connection, tokenMint, tokensIn, programId) {
|
|
57
69
|
const state = await getBondingCurveState(connection, tokenMint, programId);
|
|
58
70
|
if (!state || state.paused)
|
|
59
71
|
return null;
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
const
|
|
72
|
+
// Amplified constant product formula (matches program)
|
|
73
|
+
// SOL out (gross) = vSOL_eff - k/(vTOKEN_eff + delta_eff)
|
|
74
|
+
const ampBps = BigInt(state.ampBps);
|
|
75
|
+
const vTokenEff = (state.vToken * ampBps) / 10000n;
|
|
76
|
+
const vSolEff = (state.vSol * ampBps) / 10000n;
|
|
77
|
+
const k = vTokenEff * vSolEff;
|
|
78
|
+
const denominator = vTokenEff + tokensIn; // tokensIn is the delta
|
|
79
|
+
const kDiv = k / denominator;
|
|
80
|
+
const solOutGrossEff = vSolEff - kDiv;
|
|
65
81
|
const feeBps = BigInt(state.feeBps);
|
|
66
|
-
const totalFee = (
|
|
67
|
-
// Fee
|
|
68
|
-
const adminFee =
|
|
69
|
-
const
|
|
70
|
-
const holderRewards = totalFee
|
|
71
|
-
const
|
|
82
|
+
const totalFee = (solOutGrossEff * feeBps) / 10000n;
|
|
83
|
+
// Fee split matches program: Platform 50%, Holders 25-40%, Creator 10-25% (of TOTAL fee)
|
|
84
|
+
const adminFee = totalFee / 2n; // 50% to platform
|
|
85
|
+
const holderShareBps = BigInt(state.traderRewardsShareBps);
|
|
86
|
+
const holderRewards = (totalFee * holderShareBps) / 10000n; // holder % of TOTAL
|
|
87
|
+
const creatorFee = totalFee - adminFee - holderRewards; // remainder to creator
|
|
88
|
+
const solOutNetEff = solOutGrossEff - totalFee;
|
|
89
|
+
// Calculate new effective reserves for price impact
|
|
90
|
+
const newVTokenEff = denominator;
|
|
91
|
+
const newVSolEff = kDiv;
|
|
72
92
|
// Price impact
|
|
73
|
-
const priceBeforeLamports =
|
|
74
|
-
const priceAfterLamports =
|
|
93
|
+
const priceBeforeLamports = vTokenEff > 0n ? (vSolEff * LAMPORTS_PER_SOL) / vTokenEff : 0n;
|
|
94
|
+
const priceAfterLamports = newVTokenEff > 0n ? (newVSolEff * LAMPORTS_PER_SOL) / newVTokenEff : 0n;
|
|
75
95
|
const priceImpactBps = priceBeforeLamports > 0n
|
|
76
96
|
? Number(((priceBeforeLamports - priceAfterLamports) * 10000n) / priceBeforeLamports)
|
|
77
97
|
: 0;
|
|
78
98
|
return {
|
|
79
99
|
tokensIn,
|
|
80
|
-
solOut,
|
|
100
|
+
solOut: solOutNetEff,
|
|
81
101
|
adminFee,
|
|
82
102
|
creatorFee,
|
|
83
103
|
holderRewards,
|
|
84
|
-
pricePerToken: tokensIn > 0n ? (
|
|
104
|
+
pricePerToken: tokensIn > 0n ? (solOutNetEff * TOKEN_DECIMALS_MULTIPLIER) / tokensIn : 0n,
|
|
85
105
|
priceImpactBps,
|
|
86
106
|
};
|
|
87
107
|
}
|
|
@@ -143,6 +163,7 @@ export async function buildBuyOnCurveInstruction(connection, params, programId)
|
|
|
143
163
|
* Build sell_on_curve instruction
|
|
144
164
|
*
|
|
145
165
|
* IMPORTANT: Fee recipients are read from on-chain state and cannot be modified.
|
|
166
|
+
* Includes holder reward account in remaining_accounts for auto-payout.
|
|
146
167
|
*/
|
|
147
168
|
export async function buildSellOnCurveInstruction(connection, params, programId) {
|
|
148
169
|
const { tokenMint, seller, tokenAmount } = params;
|
|
@@ -158,6 +179,7 @@ export async function buildSellOnCurveInstruction(connection, params, programId)
|
|
|
158
179
|
const bondingAuthority = getBondingAuthorityPda(bondingCurve, programId);
|
|
159
180
|
const solEscrow = getSolEscrowPda(bondingCurve, programId);
|
|
160
181
|
const sellerAta = getAssociatedTokenAddressSync(tokenMint, seller);
|
|
182
|
+
const holderRewardAccount = getHolderRewardPda(tokenMint, seller, programId);
|
|
161
183
|
const sellIx = new TransactionInstruction({
|
|
162
184
|
programId,
|
|
163
185
|
keys: [
|
|
@@ -173,6 +195,8 @@ export async function buildSellOnCurveInstruction(connection, params, programId)
|
|
|
173
195
|
{ pubkey: state.creatorFeeRecipient, isWritable: true, isSigner: false },
|
|
174
196
|
{ pubkey: TOKEN_PROGRAM_ID, isWritable: false, isSigner: false },
|
|
175
197
|
{ pubkey: SystemProgram.programId, isWritable: false, isSigner: false },
|
|
198
|
+
// Holder reward account in remaining_accounts for auto-payout
|
|
199
|
+
{ pubkey: holderRewardAccount, isWritable: true, isSigner: false },
|
|
176
200
|
],
|
|
177
201
|
data: Buffer.concat([DISCRIMINATORS.sell_on_curve, writeU64LE(tokenAmount)]),
|
|
178
202
|
});
|
|
@@ -180,6 +204,7 @@ export async function buildSellOnCurveInstruction(connection, params, programId)
|
|
|
180
204
|
}
|
|
181
205
|
/**
|
|
182
206
|
* Build sell_max_on_curve instruction (sell entire balance)
|
|
207
|
+
* Includes holder reward account in remaining_accounts for auto-payout.
|
|
183
208
|
*/
|
|
184
209
|
export async function buildSellMaxOnCurveInstruction(connection, params, programId) {
|
|
185
210
|
const { tokenMint, seller } = params;
|
|
@@ -195,6 +220,7 @@ export async function buildSellMaxOnCurveInstruction(connection, params, program
|
|
|
195
220
|
const bondingAuthority = getBondingAuthorityPda(bondingCurve, programId);
|
|
196
221
|
const solEscrow = getSolEscrowPda(bondingCurve, programId);
|
|
197
222
|
const sellerAta = getAssociatedTokenAddressSync(tokenMint, seller);
|
|
223
|
+
const holderRewardAccount = getHolderRewardPda(tokenMint, seller, programId);
|
|
198
224
|
const sellMaxIx = new TransactionInstruction({
|
|
199
225
|
programId,
|
|
200
226
|
keys: [
|
|
@@ -210,6 +236,8 @@ export async function buildSellMaxOnCurveInstruction(connection, params, program
|
|
|
210
236
|
{ pubkey: state.creatorFeeRecipient, isWritable: true, isSigner: false },
|
|
211
237
|
{ pubkey: TOKEN_PROGRAM_ID, isWritable: false, isSigner: false },
|
|
212
238
|
{ pubkey: SystemProgram.programId, isWritable: false, isSigner: false },
|
|
239
|
+
// Holder reward account in remaining_accounts for auto-payout
|
|
240
|
+
{ pubkey: holderRewardAccount, isWritable: true, isSigner: false },
|
|
213
241
|
],
|
|
214
242
|
data: DISCRIMINATORS.sell_max_on_curve,
|
|
215
243
|
});
|