@pump-fun/pump-sdk 1.18.7 → 1.18.9
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/dist/esm/index.js +88 -111
- package/dist/index.d.mts +1 -18
- package/dist/index.d.ts +1 -18
- package/dist/index.js +88 -111
- package/package.json +1 -1
- package/src/bondingCurve.ts +7 -4
- package/src/fees.ts +0 -25
- package/src/index.ts +0 -4
package/dist/esm/index.js
CHANGED
|
@@ -6526,22 +6526,88 @@ var pump_default = {
|
|
|
6526
6526
|
]
|
|
6527
6527
|
};
|
|
6528
6528
|
|
|
6529
|
-
// src/
|
|
6529
|
+
// src/bondingCurve.ts
|
|
6530
6530
|
import BN2 from "bn.js";
|
|
6531
6531
|
import { PublicKey as PublicKey2 } from "@solana/web3.js";
|
|
6532
6532
|
|
|
6533
|
-
// src/
|
|
6533
|
+
// src/fees.ts
|
|
6534
6534
|
import BN from "bn.js";
|
|
6535
6535
|
import { PublicKey } from "@solana/web3.js";
|
|
6536
|
+
function getFee({
|
|
6537
|
+
global,
|
|
6538
|
+
feeConfig,
|
|
6539
|
+
mintSupply,
|
|
6540
|
+
bondingCurve,
|
|
6541
|
+
amount,
|
|
6542
|
+
isNewBondingCurve
|
|
6543
|
+
}) {
|
|
6544
|
+
const { virtualSolReserves, virtualTokenReserves } = bondingCurve;
|
|
6545
|
+
const { protocolFeeBps, creatorFeeBps } = computeFeesBps({
|
|
6546
|
+
global,
|
|
6547
|
+
feeConfig,
|
|
6548
|
+
mintSupply,
|
|
6549
|
+
virtualSolReserves,
|
|
6550
|
+
virtualTokenReserves
|
|
6551
|
+
});
|
|
6552
|
+
return fee(amount, protocolFeeBps).add(
|
|
6553
|
+
isNewBondingCurve || !PublicKey.default.equals(bondingCurve.creator) ? fee(amount, creatorFeeBps) : new BN(0)
|
|
6554
|
+
);
|
|
6555
|
+
}
|
|
6556
|
+
function computeFeesBps({
|
|
6557
|
+
global,
|
|
6558
|
+
feeConfig,
|
|
6559
|
+
mintSupply,
|
|
6560
|
+
virtualSolReserves,
|
|
6561
|
+
virtualTokenReserves
|
|
6562
|
+
}) {
|
|
6563
|
+
if (feeConfig != null) {
|
|
6564
|
+
const marketCap = bondingCurveMarketCap({
|
|
6565
|
+
mintSupply,
|
|
6566
|
+
virtualSolReserves,
|
|
6567
|
+
virtualTokenReserves
|
|
6568
|
+
});
|
|
6569
|
+
return calculateFeeTier({
|
|
6570
|
+
feeTiers: feeConfig.feeTiers,
|
|
6571
|
+
marketCap
|
|
6572
|
+
});
|
|
6573
|
+
}
|
|
6574
|
+
return {
|
|
6575
|
+
protocolFeeBps: global.feeBasisPoints,
|
|
6576
|
+
creatorFeeBps: global.creatorFeeBasisPoints
|
|
6577
|
+
};
|
|
6578
|
+
}
|
|
6579
|
+
function calculateFeeTier({
|
|
6580
|
+
feeTiers,
|
|
6581
|
+
marketCap
|
|
6582
|
+
}) {
|
|
6583
|
+
const firstTier = feeTiers[0];
|
|
6584
|
+
if (marketCap.lt(firstTier.marketCapLamportsThreshold)) {
|
|
6585
|
+
return firstTier.fees;
|
|
6586
|
+
}
|
|
6587
|
+
for (const tier of feeTiers.slice().reverse()) {
|
|
6588
|
+
if (marketCap.gte(tier.marketCapLamportsThreshold)) {
|
|
6589
|
+
return tier.fees;
|
|
6590
|
+
}
|
|
6591
|
+
}
|
|
6592
|
+
return firstTier.fees;
|
|
6593
|
+
}
|
|
6594
|
+
function fee(amount, feeBasisPoints) {
|
|
6595
|
+
return ceilDiv(amount.mul(feeBasisPoints), new BN(1e4));
|
|
6596
|
+
}
|
|
6597
|
+
function ceilDiv(a, b) {
|
|
6598
|
+
return a.add(b.subn(1)).div(b);
|
|
6599
|
+
}
|
|
6600
|
+
|
|
6601
|
+
// src/bondingCurve.ts
|
|
6536
6602
|
function newBondingCurve(global) {
|
|
6537
6603
|
return {
|
|
6538
6604
|
virtualTokenReserves: global.initialVirtualTokenReserves,
|
|
6539
6605
|
virtualSolReserves: global.initialVirtualSolReserves,
|
|
6540
6606
|
realTokenReserves: global.initialRealTokenReserves,
|
|
6541
|
-
realSolReserves: new
|
|
6607
|
+
realSolReserves: new BN2(0),
|
|
6542
6608
|
tokenTotalSupply: global.tokenTotalSupply,
|
|
6543
6609
|
complete: false,
|
|
6544
|
-
creator:
|
|
6610
|
+
creator: PublicKey2.default
|
|
6545
6611
|
};
|
|
6546
6612
|
}
|
|
6547
6613
|
function getBuySolAmountFromTokenAmountQuote({
|
|
@@ -6549,7 +6615,7 @@ function getBuySolAmountFromTokenAmountQuote({
|
|
|
6549
6615
|
virtualTokenReserves,
|
|
6550
6616
|
virtualSolReserves
|
|
6551
6617
|
}) {
|
|
6552
|
-
return minAmount.mul(virtualSolReserves).div(virtualTokenReserves.sub(minAmount)).add(new
|
|
6618
|
+
return minAmount.mul(virtualSolReserves).div(virtualTokenReserves.sub(minAmount)).add(new BN2(1));
|
|
6553
6619
|
}
|
|
6554
6620
|
function getBuyTokenAmountFromSolAmountQuote({
|
|
6555
6621
|
inputAmount,
|
|
@@ -6572,8 +6638,8 @@ function getBuyTokenAmountFromSolAmount({
|
|
|
6572
6638
|
bondingCurve,
|
|
6573
6639
|
amount
|
|
6574
6640
|
}) {
|
|
6575
|
-
if (amount.eq(new
|
|
6576
|
-
return new
|
|
6641
|
+
if (amount.eq(new BN2(0))) {
|
|
6642
|
+
return new BN2(0);
|
|
6577
6643
|
}
|
|
6578
6644
|
let isNewBondingCurve = false;
|
|
6579
6645
|
if (bondingCurve === null || mintSupply === null) {
|
|
@@ -6581,8 +6647,8 @@ function getBuyTokenAmountFromSolAmount({
|
|
|
6581
6647
|
mintSupply = global.tokenTotalSupply;
|
|
6582
6648
|
isNewBondingCurve = true;
|
|
6583
6649
|
}
|
|
6584
|
-
if (bondingCurve.virtualTokenReserves.eq(new
|
|
6585
|
-
return new
|
|
6650
|
+
if (bondingCurve.virtualTokenReserves.eq(new BN2(0))) {
|
|
6651
|
+
return new BN2(0);
|
|
6586
6652
|
}
|
|
6587
6653
|
const { virtualSolReserves, virtualTokenReserves } = bondingCurve;
|
|
6588
6654
|
const { protocolFeeBps, creatorFeeBps } = computeFeesBps({
|
|
@@ -6593,15 +6659,15 @@ function getBuyTokenAmountFromSolAmount({
|
|
|
6593
6659
|
virtualTokenReserves
|
|
6594
6660
|
});
|
|
6595
6661
|
const totalFeeBasisPoints = protocolFeeBps.add(
|
|
6596
|
-
isNewBondingCurve || !
|
|
6662
|
+
isNewBondingCurve || !PublicKey2.default.equals(bondingCurve.creator) ? creatorFeeBps : new BN2(0)
|
|
6597
6663
|
);
|
|
6598
|
-
const inputAmount = amount.muln(1e4).div(totalFeeBasisPoints.addn(1e4));
|
|
6664
|
+
const inputAmount = amount.subn(1).muln(1e4).div(totalFeeBasisPoints.addn(1e4));
|
|
6599
6665
|
const tokensReceived = getBuyTokenAmountFromSolAmountQuote({
|
|
6600
6666
|
inputAmount,
|
|
6601
6667
|
virtualTokenReserves: bondingCurve.virtualTokenReserves,
|
|
6602
6668
|
virtualSolReserves: bondingCurve.virtualSolReserves
|
|
6603
6669
|
});
|
|
6604
|
-
return
|
|
6670
|
+
return BN2.min(tokensReceived, bondingCurve.realTokenReserves);
|
|
6605
6671
|
}
|
|
6606
6672
|
function getBuySolAmountFromTokenAmount({
|
|
6607
6673
|
global,
|
|
@@ -6610,8 +6676,8 @@ function getBuySolAmountFromTokenAmount({
|
|
|
6610
6676
|
bondingCurve,
|
|
6611
6677
|
amount
|
|
6612
6678
|
}) {
|
|
6613
|
-
if (amount.eq(new
|
|
6614
|
-
return new
|
|
6679
|
+
if (amount.eq(new BN2(0))) {
|
|
6680
|
+
return new BN2(0);
|
|
6615
6681
|
}
|
|
6616
6682
|
let isNewBondingCurve = false;
|
|
6617
6683
|
if (bondingCurve === null || mintSupply === null) {
|
|
@@ -6619,10 +6685,10 @@ function getBuySolAmountFromTokenAmount({
|
|
|
6619
6685
|
mintSupply = global.tokenTotalSupply;
|
|
6620
6686
|
isNewBondingCurve = true;
|
|
6621
6687
|
}
|
|
6622
|
-
if (bondingCurve.virtualTokenReserves.eq(new
|
|
6623
|
-
return new
|
|
6688
|
+
if (bondingCurve.virtualTokenReserves.eq(new BN2(0))) {
|
|
6689
|
+
return new BN2(0);
|
|
6624
6690
|
}
|
|
6625
|
-
const minAmount =
|
|
6691
|
+
const minAmount = BN2.min(amount, bondingCurve.realTokenReserves);
|
|
6626
6692
|
const solCost = getBuySolAmountFromTokenAmountQuote({
|
|
6627
6693
|
minAmount,
|
|
6628
6694
|
virtualTokenReserves: bondingCurve.virtualTokenReserves,
|
|
@@ -6646,11 +6712,11 @@ function getSellSolAmountFromTokenAmount({
|
|
|
6646
6712
|
bondingCurve,
|
|
6647
6713
|
amount
|
|
6648
6714
|
}) {
|
|
6649
|
-
if (amount.eq(new
|
|
6650
|
-
return new
|
|
6715
|
+
if (amount.eq(new BN2(0))) {
|
|
6716
|
+
return new BN2(0);
|
|
6651
6717
|
}
|
|
6652
|
-
if (bondingCurve.virtualTokenReserves.eq(new
|
|
6653
|
-
return new
|
|
6718
|
+
if (bondingCurve.virtualTokenReserves.eq(new BN2(0))) {
|
|
6719
|
+
return new BN2(0);
|
|
6654
6720
|
}
|
|
6655
6721
|
const solCost = getSellSolAmountFromTokenAmountQuote({
|
|
6656
6722
|
inputAmount: amount,
|
|
@@ -6670,7 +6736,7 @@ function getSellSolAmountFromTokenAmount({
|
|
|
6670
6736
|
}
|
|
6671
6737
|
function getStaticRandomFeeRecipient() {
|
|
6672
6738
|
const randomIndex = Math.floor(Math.random() * CURRENT_FEE_RECIPIENTS.length);
|
|
6673
|
-
return new
|
|
6739
|
+
return new PublicKey2(CURRENT_FEE_RECIPIENTS[randomIndex]);
|
|
6674
6740
|
}
|
|
6675
6741
|
var CURRENT_FEE_RECIPIENTS = [
|
|
6676
6742
|
"62qc2CNXwrYqQScmEdiZFFAnJR262PxWEuNQtxfafNgV",
|
|
@@ -6693,91 +6759,6 @@ function bondingCurveMarketCap({
|
|
|
6693
6759
|
return virtualSolReserves.mul(mintSupply).div(virtualTokenReserves);
|
|
6694
6760
|
}
|
|
6695
6761
|
|
|
6696
|
-
// src/fees.ts
|
|
6697
|
-
function createFeeConfigFromGlobalConfig(globalConfig) {
|
|
6698
|
-
let fees = {
|
|
6699
|
-
lpFeeBps: new BN2(0),
|
|
6700
|
-
// unused for pump
|
|
6701
|
-
protocolFeeBps: globalConfig.feeBasisPoints,
|
|
6702
|
-
creatorFeeBps: globalConfig.creatorFeeBasisPoints
|
|
6703
|
-
};
|
|
6704
|
-
return {
|
|
6705
|
-
admin: globalConfig.authority,
|
|
6706
|
-
flatFees: fees,
|
|
6707
|
-
feeTiers: [
|
|
6708
|
-
{
|
|
6709
|
-
marketCapLamportsThreshold: new BN2(0),
|
|
6710
|
-
// unused for pump
|
|
6711
|
-
fees
|
|
6712
|
-
}
|
|
6713
|
-
]
|
|
6714
|
-
};
|
|
6715
|
-
}
|
|
6716
|
-
function getFee({
|
|
6717
|
-
global,
|
|
6718
|
-
feeConfig,
|
|
6719
|
-
mintSupply,
|
|
6720
|
-
bondingCurve,
|
|
6721
|
-
amount,
|
|
6722
|
-
isNewBondingCurve
|
|
6723
|
-
}) {
|
|
6724
|
-
const { virtualSolReserves, virtualTokenReserves } = bondingCurve;
|
|
6725
|
-
const { protocolFeeBps, creatorFeeBps } = computeFeesBps({
|
|
6726
|
-
global,
|
|
6727
|
-
feeConfig,
|
|
6728
|
-
mintSupply,
|
|
6729
|
-
virtualSolReserves,
|
|
6730
|
-
virtualTokenReserves
|
|
6731
|
-
});
|
|
6732
|
-
return fee(amount, protocolFeeBps).add(
|
|
6733
|
-
isNewBondingCurve || !PublicKey2.default.equals(bondingCurve.creator) ? fee(amount, creatorFeeBps) : new BN2(0)
|
|
6734
|
-
);
|
|
6735
|
-
}
|
|
6736
|
-
function computeFeesBps({
|
|
6737
|
-
global,
|
|
6738
|
-
feeConfig,
|
|
6739
|
-
mintSupply,
|
|
6740
|
-
virtualSolReserves,
|
|
6741
|
-
virtualTokenReserves
|
|
6742
|
-
}) {
|
|
6743
|
-
if (feeConfig != null) {
|
|
6744
|
-
const marketCap = bondingCurveMarketCap({
|
|
6745
|
-
mintSupply,
|
|
6746
|
-
virtualSolReserves,
|
|
6747
|
-
virtualTokenReserves
|
|
6748
|
-
});
|
|
6749
|
-
return calculateFeeTier({
|
|
6750
|
-
feeTiers: feeConfig.feeTiers,
|
|
6751
|
-
marketCap
|
|
6752
|
-
});
|
|
6753
|
-
}
|
|
6754
|
-
return {
|
|
6755
|
-
protocolFeeBps: global.feeBasisPoints,
|
|
6756
|
-
creatorFeeBps: global.creatorFeeBasisPoints
|
|
6757
|
-
};
|
|
6758
|
-
}
|
|
6759
|
-
function calculateFeeTier({
|
|
6760
|
-
feeTiers,
|
|
6761
|
-
marketCap
|
|
6762
|
-
}) {
|
|
6763
|
-
const firstTier = feeTiers[0];
|
|
6764
|
-
if (marketCap.lt(firstTier.marketCapLamportsThreshold)) {
|
|
6765
|
-
return firstTier.fees;
|
|
6766
|
-
}
|
|
6767
|
-
for (const tier of feeTiers.slice().reverse()) {
|
|
6768
|
-
if (marketCap.gte(tier.marketCapLamportsThreshold)) {
|
|
6769
|
-
return tier.fees;
|
|
6770
|
-
}
|
|
6771
|
-
}
|
|
6772
|
-
return firstTier.fees;
|
|
6773
|
-
}
|
|
6774
|
-
function fee(amount, feeBasisPoints) {
|
|
6775
|
-
return ceilDiv(amount.mul(feeBasisPoints), new BN2(1e4));
|
|
6776
|
-
}
|
|
6777
|
-
function ceilDiv(a, b) {
|
|
6778
|
-
return a.add(b.subn(1)).div(b);
|
|
6779
|
-
}
|
|
6780
|
-
|
|
6781
6762
|
// src/pda.ts
|
|
6782
6763
|
import { PublicKey as PublicKey5 } from "@solana/web3.js";
|
|
6783
6764
|
import { NATIVE_MINT as NATIVE_MINT2 } from "@solana/spl-token";
|
|
@@ -7540,16 +7521,12 @@ export {
|
|
|
7540
7521
|
bondingCurveMarketCap,
|
|
7541
7522
|
bondingCurvePda,
|
|
7542
7523
|
canonicalPumpPoolPda,
|
|
7543
|
-
createFeeConfigFromGlobalConfig,
|
|
7544
7524
|
creatorVaultPda,
|
|
7545
7525
|
currentDayTokens,
|
|
7546
7526
|
getBuySolAmountFromTokenAmount,
|
|
7547
|
-
getBuySolAmountFromTokenAmountQuote,
|
|
7548
7527
|
getBuyTokenAmountFromSolAmount,
|
|
7549
|
-
getBuyTokenAmountFromSolAmountQuote,
|
|
7550
7528
|
getPumpProgram,
|
|
7551
7529
|
getSellSolAmountFromTokenAmount,
|
|
7552
|
-
getSellSolAmountFromTokenAmountQuote,
|
|
7553
7530
|
newBondingCurve,
|
|
7554
7531
|
pump_default as pumpIdl,
|
|
7555
7532
|
pumpPoolAuthorityPda,
|
package/dist/index.d.mts
CHANGED
|
@@ -9537,24 +9537,7 @@ interface Fees {
|
|
|
9537
9537
|
creatorFeeBps: BN;
|
|
9538
9538
|
}
|
|
9539
9539
|
|
|
9540
|
-
declare function createFeeConfigFromGlobalConfig(globalConfig: Global): FeeConfig;
|
|
9541
|
-
|
|
9542
9540
|
declare function newBondingCurve(global: Global): BondingCurve;
|
|
9543
|
-
declare function getBuySolAmountFromTokenAmountQuote({ minAmount, virtualTokenReserves, virtualSolReserves, }: {
|
|
9544
|
-
minAmount: BN;
|
|
9545
|
-
virtualTokenReserves: BN;
|
|
9546
|
-
virtualSolReserves: BN;
|
|
9547
|
-
}): BN;
|
|
9548
|
-
declare function getBuyTokenAmountFromSolAmountQuote({ inputAmount, virtualTokenReserves, virtualSolReserves, }: {
|
|
9549
|
-
inputAmount: BN;
|
|
9550
|
-
virtualTokenReserves: BN;
|
|
9551
|
-
virtualSolReserves: BN;
|
|
9552
|
-
}): BN;
|
|
9553
|
-
declare function getSellSolAmountFromTokenAmountQuote({ inputAmount, virtualTokenReserves, virtualSolReserves, }: {
|
|
9554
|
-
inputAmount: BN;
|
|
9555
|
-
virtualTokenReserves: BN;
|
|
9556
|
-
virtualSolReserves: BN;
|
|
9557
|
-
}): BN;
|
|
9558
9541
|
declare function getBuyTokenAmountFromSolAmount({ global, feeConfig, mintSupply, bondingCurve, amount, }: {
|
|
9559
9542
|
global: Global;
|
|
9560
9543
|
feeConfig: FeeConfig | null;
|
|
@@ -9729,4 +9712,4 @@ declare class OnlinePumpSdk {
|
|
|
9729
9712
|
declare function totalUnclaimedTokens(globalVolumeAccumulator: GlobalVolumeAccumulator, userVolumeAccumulator: UserVolumeAccumulator, currentTimestamp?: number): BN;
|
|
9730
9713
|
declare function currentDayTokens(globalVolumeAccumulator: GlobalVolumeAccumulator, userVolumeAccumulator: UserVolumeAccumulator, currentTimestamp?: number): BN;
|
|
9731
9714
|
|
|
9732
|
-
export { BONDING_CURVE_NEW_SIZE, type BondingCurve, CANONICAL_POOL_INDEX, type FeeConfig, GLOBAL_PDA, GLOBAL_VOLUME_ACCUMULATOR_PDA, type Global, type GlobalVolumeAccumulator, OnlinePumpSdk, PUMP_AMM_PROGRAM_ID, PUMP_FEE_CONFIG_PDA, PUMP_PROGRAM_ID, PUMP_SDK, type Pump, PumpSdk, type UserVolumeAccumulator, type UserVolumeAccumulatorTotalStats, bondingCurveMarketCap, bondingCurvePda, canonicalPumpPoolPda,
|
|
9715
|
+
export { BONDING_CURVE_NEW_SIZE, type BondingCurve, CANONICAL_POOL_INDEX, type FeeConfig, GLOBAL_PDA, GLOBAL_VOLUME_ACCUMULATOR_PDA, type Global, type GlobalVolumeAccumulator, OnlinePumpSdk, PUMP_AMM_PROGRAM_ID, PUMP_FEE_CONFIG_PDA, PUMP_PROGRAM_ID, PUMP_SDK, type Pump, PumpSdk, type UserVolumeAccumulator, type UserVolumeAccumulatorTotalStats, bondingCurveMarketCap, bondingCurvePda, canonicalPumpPoolPda, creatorVaultPda, currentDayTokens, getBuySolAmountFromTokenAmount, getBuyTokenAmountFromSolAmount, getPumpProgram, getSellSolAmountFromTokenAmount, newBondingCurve, pump as pumpIdl, pumpPoolAuthorityPda, totalUnclaimedTokens, userVolumeAccumulatorPda };
|
package/dist/index.d.ts
CHANGED
|
@@ -9537,24 +9537,7 @@ interface Fees {
|
|
|
9537
9537
|
creatorFeeBps: BN;
|
|
9538
9538
|
}
|
|
9539
9539
|
|
|
9540
|
-
declare function createFeeConfigFromGlobalConfig(globalConfig: Global): FeeConfig;
|
|
9541
|
-
|
|
9542
9540
|
declare function newBondingCurve(global: Global): BondingCurve;
|
|
9543
|
-
declare function getBuySolAmountFromTokenAmountQuote({ minAmount, virtualTokenReserves, virtualSolReserves, }: {
|
|
9544
|
-
minAmount: BN;
|
|
9545
|
-
virtualTokenReserves: BN;
|
|
9546
|
-
virtualSolReserves: BN;
|
|
9547
|
-
}): BN;
|
|
9548
|
-
declare function getBuyTokenAmountFromSolAmountQuote({ inputAmount, virtualTokenReserves, virtualSolReserves, }: {
|
|
9549
|
-
inputAmount: BN;
|
|
9550
|
-
virtualTokenReserves: BN;
|
|
9551
|
-
virtualSolReserves: BN;
|
|
9552
|
-
}): BN;
|
|
9553
|
-
declare function getSellSolAmountFromTokenAmountQuote({ inputAmount, virtualTokenReserves, virtualSolReserves, }: {
|
|
9554
|
-
inputAmount: BN;
|
|
9555
|
-
virtualTokenReserves: BN;
|
|
9556
|
-
virtualSolReserves: BN;
|
|
9557
|
-
}): BN;
|
|
9558
9541
|
declare function getBuyTokenAmountFromSolAmount({ global, feeConfig, mintSupply, bondingCurve, amount, }: {
|
|
9559
9542
|
global: Global;
|
|
9560
9543
|
feeConfig: FeeConfig | null;
|
|
@@ -9729,4 +9712,4 @@ declare class OnlinePumpSdk {
|
|
|
9729
9712
|
declare function totalUnclaimedTokens(globalVolumeAccumulator: GlobalVolumeAccumulator, userVolumeAccumulator: UserVolumeAccumulator, currentTimestamp?: number): BN;
|
|
9730
9713
|
declare function currentDayTokens(globalVolumeAccumulator: GlobalVolumeAccumulator, userVolumeAccumulator: UserVolumeAccumulator, currentTimestamp?: number): BN;
|
|
9731
9714
|
|
|
9732
|
-
export { BONDING_CURVE_NEW_SIZE, type BondingCurve, CANONICAL_POOL_INDEX, type FeeConfig, GLOBAL_PDA, GLOBAL_VOLUME_ACCUMULATOR_PDA, type Global, type GlobalVolumeAccumulator, OnlinePumpSdk, PUMP_AMM_PROGRAM_ID, PUMP_FEE_CONFIG_PDA, PUMP_PROGRAM_ID, PUMP_SDK, type Pump, PumpSdk, type UserVolumeAccumulator, type UserVolumeAccumulatorTotalStats, bondingCurveMarketCap, bondingCurvePda, canonicalPumpPoolPda,
|
|
9715
|
+
export { BONDING_CURVE_NEW_SIZE, type BondingCurve, CANONICAL_POOL_INDEX, type FeeConfig, GLOBAL_PDA, GLOBAL_VOLUME_ACCUMULATOR_PDA, type Global, type GlobalVolumeAccumulator, OnlinePumpSdk, PUMP_AMM_PROGRAM_ID, PUMP_FEE_CONFIG_PDA, PUMP_PROGRAM_ID, PUMP_SDK, type Pump, PumpSdk, type UserVolumeAccumulator, type UserVolumeAccumulatorTotalStats, bondingCurveMarketCap, bondingCurvePda, canonicalPumpPoolPda, creatorVaultPda, currentDayTokens, getBuySolAmountFromTokenAmount, getBuyTokenAmountFromSolAmount, getPumpProgram, getSellSolAmountFromTokenAmount, newBondingCurve, pump as pumpIdl, pumpPoolAuthorityPda, totalUnclaimedTokens, userVolumeAccumulatorPda };
|
package/dist/index.js
CHANGED
|
@@ -1823,16 +1823,12 @@ __export(index_exports, {
|
|
|
1823
1823
|
bondingCurveMarketCap: () => bondingCurveMarketCap,
|
|
1824
1824
|
bondingCurvePda: () => bondingCurvePda,
|
|
1825
1825
|
canonicalPumpPoolPda: () => canonicalPumpPoolPda,
|
|
1826
|
-
createFeeConfigFromGlobalConfig: () => createFeeConfigFromGlobalConfig,
|
|
1827
1826
|
creatorVaultPda: () => creatorVaultPda,
|
|
1828
1827
|
currentDayTokens: () => currentDayTokens,
|
|
1829
1828
|
getBuySolAmountFromTokenAmount: () => getBuySolAmountFromTokenAmount,
|
|
1830
|
-
getBuySolAmountFromTokenAmountQuote: () => getBuySolAmountFromTokenAmountQuote,
|
|
1831
1829
|
getBuyTokenAmountFromSolAmount: () => getBuyTokenAmountFromSolAmount,
|
|
1832
|
-
getBuyTokenAmountFromSolAmountQuote: () => getBuyTokenAmountFromSolAmountQuote,
|
|
1833
1830
|
getPumpProgram: () => getPumpProgram,
|
|
1834
1831
|
getSellSolAmountFromTokenAmount: () => getSellSolAmountFromTokenAmount,
|
|
1835
|
-
getSellSolAmountFromTokenAmountQuote: () => getSellSolAmountFromTokenAmountQuote,
|
|
1836
1832
|
newBondingCurve: () => newBondingCurve,
|
|
1837
1833
|
pumpIdl: () => pump_default,
|
|
1838
1834
|
pumpPoolAuthorityPda: () => pumpPoolAuthorityPda,
|
|
@@ -6566,22 +6562,88 @@ var pump_default = {
|
|
|
6566
6562
|
]
|
|
6567
6563
|
};
|
|
6568
6564
|
|
|
6569
|
-
// src/
|
|
6565
|
+
// src/bondingCurve.ts
|
|
6570
6566
|
var import_bn2 = __toESM(require("bn.js"));
|
|
6571
6567
|
var import_web32 = require("@solana/web3.js");
|
|
6572
6568
|
|
|
6573
|
-
// src/
|
|
6569
|
+
// src/fees.ts
|
|
6574
6570
|
var import_bn = __toESM(require("bn.js"));
|
|
6575
6571
|
var import_web3 = require("@solana/web3.js");
|
|
6572
|
+
function getFee({
|
|
6573
|
+
global,
|
|
6574
|
+
feeConfig,
|
|
6575
|
+
mintSupply,
|
|
6576
|
+
bondingCurve,
|
|
6577
|
+
amount,
|
|
6578
|
+
isNewBondingCurve
|
|
6579
|
+
}) {
|
|
6580
|
+
const { virtualSolReserves, virtualTokenReserves } = bondingCurve;
|
|
6581
|
+
const { protocolFeeBps, creatorFeeBps } = computeFeesBps({
|
|
6582
|
+
global,
|
|
6583
|
+
feeConfig,
|
|
6584
|
+
mintSupply,
|
|
6585
|
+
virtualSolReserves,
|
|
6586
|
+
virtualTokenReserves
|
|
6587
|
+
});
|
|
6588
|
+
return fee(amount, protocolFeeBps).add(
|
|
6589
|
+
isNewBondingCurve || !import_web3.PublicKey.default.equals(bondingCurve.creator) ? fee(amount, creatorFeeBps) : new import_bn.default(0)
|
|
6590
|
+
);
|
|
6591
|
+
}
|
|
6592
|
+
function computeFeesBps({
|
|
6593
|
+
global,
|
|
6594
|
+
feeConfig,
|
|
6595
|
+
mintSupply,
|
|
6596
|
+
virtualSolReserves,
|
|
6597
|
+
virtualTokenReserves
|
|
6598
|
+
}) {
|
|
6599
|
+
if (feeConfig != null) {
|
|
6600
|
+
const marketCap = bondingCurveMarketCap({
|
|
6601
|
+
mintSupply,
|
|
6602
|
+
virtualSolReserves,
|
|
6603
|
+
virtualTokenReserves
|
|
6604
|
+
});
|
|
6605
|
+
return calculateFeeTier({
|
|
6606
|
+
feeTiers: feeConfig.feeTiers,
|
|
6607
|
+
marketCap
|
|
6608
|
+
});
|
|
6609
|
+
}
|
|
6610
|
+
return {
|
|
6611
|
+
protocolFeeBps: global.feeBasisPoints,
|
|
6612
|
+
creatorFeeBps: global.creatorFeeBasisPoints
|
|
6613
|
+
};
|
|
6614
|
+
}
|
|
6615
|
+
function calculateFeeTier({
|
|
6616
|
+
feeTiers,
|
|
6617
|
+
marketCap
|
|
6618
|
+
}) {
|
|
6619
|
+
const firstTier = feeTiers[0];
|
|
6620
|
+
if (marketCap.lt(firstTier.marketCapLamportsThreshold)) {
|
|
6621
|
+
return firstTier.fees;
|
|
6622
|
+
}
|
|
6623
|
+
for (const tier of feeTiers.slice().reverse()) {
|
|
6624
|
+
if (marketCap.gte(tier.marketCapLamportsThreshold)) {
|
|
6625
|
+
return tier.fees;
|
|
6626
|
+
}
|
|
6627
|
+
}
|
|
6628
|
+
return firstTier.fees;
|
|
6629
|
+
}
|
|
6630
|
+
function fee(amount, feeBasisPoints) {
|
|
6631
|
+
return ceilDiv(amount.mul(feeBasisPoints), new import_bn.default(1e4));
|
|
6632
|
+
}
|
|
6633
|
+
function ceilDiv(a, b) {
|
|
6634
|
+
return a.add(b.subn(1)).div(b);
|
|
6635
|
+
}
|
|
6636
|
+
|
|
6637
|
+
// src/bondingCurve.ts
|
|
6576
6638
|
function newBondingCurve(global) {
|
|
6577
6639
|
return {
|
|
6578
6640
|
virtualTokenReserves: global.initialVirtualTokenReserves,
|
|
6579
6641
|
virtualSolReserves: global.initialVirtualSolReserves,
|
|
6580
6642
|
realTokenReserves: global.initialRealTokenReserves,
|
|
6581
|
-
realSolReserves: new
|
|
6643
|
+
realSolReserves: new import_bn2.default(0),
|
|
6582
6644
|
tokenTotalSupply: global.tokenTotalSupply,
|
|
6583
6645
|
complete: false,
|
|
6584
|
-
creator:
|
|
6646
|
+
creator: import_web32.PublicKey.default
|
|
6585
6647
|
};
|
|
6586
6648
|
}
|
|
6587
6649
|
function getBuySolAmountFromTokenAmountQuote({
|
|
@@ -6589,7 +6651,7 @@ function getBuySolAmountFromTokenAmountQuote({
|
|
|
6589
6651
|
virtualTokenReserves,
|
|
6590
6652
|
virtualSolReserves
|
|
6591
6653
|
}) {
|
|
6592
|
-
return minAmount.mul(virtualSolReserves).div(virtualTokenReserves.sub(minAmount)).add(new
|
|
6654
|
+
return minAmount.mul(virtualSolReserves).div(virtualTokenReserves.sub(minAmount)).add(new import_bn2.default(1));
|
|
6593
6655
|
}
|
|
6594
6656
|
function getBuyTokenAmountFromSolAmountQuote({
|
|
6595
6657
|
inputAmount,
|
|
@@ -6612,8 +6674,8 @@ function getBuyTokenAmountFromSolAmount({
|
|
|
6612
6674
|
bondingCurve,
|
|
6613
6675
|
amount
|
|
6614
6676
|
}) {
|
|
6615
|
-
if (amount.eq(new
|
|
6616
|
-
return new
|
|
6677
|
+
if (amount.eq(new import_bn2.default(0))) {
|
|
6678
|
+
return new import_bn2.default(0);
|
|
6617
6679
|
}
|
|
6618
6680
|
let isNewBondingCurve = false;
|
|
6619
6681
|
if (bondingCurve === null || mintSupply === null) {
|
|
@@ -6621,8 +6683,8 @@ function getBuyTokenAmountFromSolAmount({
|
|
|
6621
6683
|
mintSupply = global.tokenTotalSupply;
|
|
6622
6684
|
isNewBondingCurve = true;
|
|
6623
6685
|
}
|
|
6624
|
-
if (bondingCurve.virtualTokenReserves.eq(new
|
|
6625
|
-
return new
|
|
6686
|
+
if (bondingCurve.virtualTokenReserves.eq(new import_bn2.default(0))) {
|
|
6687
|
+
return new import_bn2.default(0);
|
|
6626
6688
|
}
|
|
6627
6689
|
const { virtualSolReserves, virtualTokenReserves } = bondingCurve;
|
|
6628
6690
|
const { protocolFeeBps, creatorFeeBps } = computeFeesBps({
|
|
@@ -6633,15 +6695,15 @@ function getBuyTokenAmountFromSolAmount({
|
|
|
6633
6695
|
virtualTokenReserves
|
|
6634
6696
|
});
|
|
6635
6697
|
const totalFeeBasisPoints = protocolFeeBps.add(
|
|
6636
|
-
isNewBondingCurve || !
|
|
6698
|
+
isNewBondingCurve || !import_web32.PublicKey.default.equals(bondingCurve.creator) ? creatorFeeBps : new import_bn2.default(0)
|
|
6637
6699
|
);
|
|
6638
|
-
const inputAmount = amount.muln(1e4).div(totalFeeBasisPoints.addn(1e4));
|
|
6700
|
+
const inputAmount = amount.subn(1).muln(1e4).div(totalFeeBasisPoints.addn(1e4));
|
|
6639
6701
|
const tokensReceived = getBuyTokenAmountFromSolAmountQuote({
|
|
6640
6702
|
inputAmount,
|
|
6641
6703
|
virtualTokenReserves: bondingCurve.virtualTokenReserves,
|
|
6642
6704
|
virtualSolReserves: bondingCurve.virtualSolReserves
|
|
6643
6705
|
});
|
|
6644
|
-
return
|
|
6706
|
+
return import_bn2.default.min(tokensReceived, bondingCurve.realTokenReserves);
|
|
6645
6707
|
}
|
|
6646
6708
|
function getBuySolAmountFromTokenAmount({
|
|
6647
6709
|
global,
|
|
@@ -6650,8 +6712,8 @@ function getBuySolAmountFromTokenAmount({
|
|
|
6650
6712
|
bondingCurve,
|
|
6651
6713
|
amount
|
|
6652
6714
|
}) {
|
|
6653
|
-
if (amount.eq(new
|
|
6654
|
-
return new
|
|
6715
|
+
if (amount.eq(new import_bn2.default(0))) {
|
|
6716
|
+
return new import_bn2.default(0);
|
|
6655
6717
|
}
|
|
6656
6718
|
let isNewBondingCurve = false;
|
|
6657
6719
|
if (bondingCurve === null || mintSupply === null) {
|
|
@@ -6659,10 +6721,10 @@ function getBuySolAmountFromTokenAmount({
|
|
|
6659
6721
|
mintSupply = global.tokenTotalSupply;
|
|
6660
6722
|
isNewBondingCurve = true;
|
|
6661
6723
|
}
|
|
6662
|
-
if (bondingCurve.virtualTokenReserves.eq(new
|
|
6663
|
-
return new
|
|
6724
|
+
if (bondingCurve.virtualTokenReserves.eq(new import_bn2.default(0))) {
|
|
6725
|
+
return new import_bn2.default(0);
|
|
6664
6726
|
}
|
|
6665
|
-
const minAmount =
|
|
6727
|
+
const minAmount = import_bn2.default.min(amount, bondingCurve.realTokenReserves);
|
|
6666
6728
|
const solCost = getBuySolAmountFromTokenAmountQuote({
|
|
6667
6729
|
minAmount,
|
|
6668
6730
|
virtualTokenReserves: bondingCurve.virtualTokenReserves,
|
|
@@ -6686,11 +6748,11 @@ function getSellSolAmountFromTokenAmount({
|
|
|
6686
6748
|
bondingCurve,
|
|
6687
6749
|
amount
|
|
6688
6750
|
}) {
|
|
6689
|
-
if (amount.eq(new
|
|
6690
|
-
return new
|
|
6751
|
+
if (amount.eq(new import_bn2.default(0))) {
|
|
6752
|
+
return new import_bn2.default(0);
|
|
6691
6753
|
}
|
|
6692
|
-
if (bondingCurve.virtualTokenReserves.eq(new
|
|
6693
|
-
return new
|
|
6754
|
+
if (bondingCurve.virtualTokenReserves.eq(new import_bn2.default(0))) {
|
|
6755
|
+
return new import_bn2.default(0);
|
|
6694
6756
|
}
|
|
6695
6757
|
const solCost = getSellSolAmountFromTokenAmountQuote({
|
|
6696
6758
|
inputAmount: amount,
|
|
@@ -6710,7 +6772,7 @@ function getSellSolAmountFromTokenAmount({
|
|
|
6710
6772
|
}
|
|
6711
6773
|
function getStaticRandomFeeRecipient() {
|
|
6712
6774
|
const randomIndex = Math.floor(Math.random() * CURRENT_FEE_RECIPIENTS.length);
|
|
6713
|
-
return new
|
|
6775
|
+
return new import_web32.PublicKey(CURRENT_FEE_RECIPIENTS[randomIndex]);
|
|
6714
6776
|
}
|
|
6715
6777
|
var CURRENT_FEE_RECIPIENTS = [
|
|
6716
6778
|
"62qc2CNXwrYqQScmEdiZFFAnJR262PxWEuNQtxfafNgV",
|
|
@@ -6733,91 +6795,6 @@ function bondingCurveMarketCap({
|
|
|
6733
6795
|
return virtualSolReserves.mul(mintSupply).div(virtualTokenReserves);
|
|
6734
6796
|
}
|
|
6735
6797
|
|
|
6736
|
-
// src/fees.ts
|
|
6737
|
-
function createFeeConfigFromGlobalConfig(globalConfig) {
|
|
6738
|
-
let fees = {
|
|
6739
|
-
lpFeeBps: new import_bn2.default(0),
|
|
6740
|
-
// unused for pump
|
|
6741
|
-
protocolFeeBps: globalConfig.feeBasisPoints,
|
|
6742
|
-
creatorFeeBps: globalConfig.creatorFeeBasisPoints
|
|
6743
|
-
};
|
|
6744
|
-
return {
|
|
6745
|
-
admin: globalConfig.authority,
|
|
6746
|
-
flatFees: fees,
|
|
6747
|
-
feeTiers: [
|
|
6748
|
-
{
|
|
6749
|
-
marketCapLamportsThreshold: new import_bn2.default(0),
|
|
6750
|
-
// unused for pump
|
|
6751
|
-
fees
|
|
6752
|
-
}
|
|
6753
|
-
]
|
|
6754
|
-
};
|
|
6755
|
-
}
|
|
6756
|
-
function getFee({
|
|
6757
|
-
global,
|
|
6758
|
-
feeConfig,
|
|
6759
|
-
mintSupply,
|
|
6760
|
-
bondingCurve,
|
|
6761
|
-
amount,
|
|
6762
|
-
isNewBondingCurve
|
|
6763
|
-
}) {
|
|
6764
|
-
const { virtualSolReserves, virtualTokenReserves } = bondingCurve;
|
|
6765
|
-
const { protocolFeeBps, creatorFeeBps } = computeFeesBps({
|
|
6766
|
-
global,
|
|
6767
|
-
feeConfig,
|
|
6768
|
-
mintSupply,
|
|
6769
|
-
virtualSolReserves,
|
|
6770
|
-
virtualTokenReserves
|
|
6771
|
-
});
|
|
6772
|
-
return fee(amount, protocolFeeBps).add(
|
|
6773
|
-
isNewBondingCurve || !import_web32.PublicKey.default.equals(bondingCurve.creator) ? fee(amount, creatorFeeBps) : new import_bn2.default(0)
|
|
6774
|
-
);
|
|
6775
|
-
}
|
|
6776
|
-
function computeFeesBps({
|
|
6777
|
-
global,
|
|
6778
|
-
feeConfig,
|
|
6779
|
-
mintSupply,
|
|
6780
|
-
virtualSolReserves,
|
|
6781
|
-
virtualTokenReserves
|
|
6782
|
-
}) {
|
|
6783
|
-
if (feeConfig != null) {
|
|
6784
|
-
const marketCap = bondingCurveMarketCap({
|
|
6785
|
-
mintSupply,
|
|
6786
|
-
virtualSolReserves,
|
|
6787
|
-
virtualTokenReserves
|
|
6788
|
-
});
|
|
6789
|
-
return calculateFeeTier({
|
|
6790
|
-
feeTiers: feeConfig.feeTiers,
|
|
6791
|
-
marketCap
|
|
6792
|
-
});
|
|
6793
|
-
}
|
|
6794
|
-
return {
|
|
6795
|
-
protocolFeeBps: global.feeBasisPoints,
|
|
6796
|
-
creatorFeeBps: global.creatorFeeBasisPoints
|
|
6797
|
-
};
|
|
6798
|
-
}
|
|
6799
|
-
function calculateFeeTier({
|
|
6800
|
-
feeTiers,
|
|
6801
|
-
marketCap
|
|
6802
|
-
}) {
|
|
6803
|
-
const firstTier = feeTiers[0];
|
|
6804
|
-
if (marketCap.lt(firstTier.marketCapLamportsThreshold)) {
|
|
6805
|
-
return firstTier.fees;
|
|
6806
|
-
}
|
|
6807
|
-
for (const tier of feeTiers.slice().reverse()) {
|
|
6808
|
-
if (marketCap.gte(tier.marketCapLamportsThreshold)) {
|
|
6809
|
-
return tier.fees;
|
|
6810
|
-
}
|
|
6811
|
-
}
|
|
6812
|
-
return firstTier.fees;
|
|
6813
|
-
}
|
|
6814
|
-
function fee(amount, feeBasisPoints) {
|
|
6815
|
-
return ceilDiv(amount.mul(feeBasisPoints), new import_bn2.default(1e4));
|
|
6816
|
-
}
|
|
6817
|
-
function ceilDiv(a, b) {
|
|
6818
|
-
return a.add(b.subn(1)).div(b);
|
|
6819
|
-
}
|
|
6820
|
-
|
|
6821
6798
|
// src/pda.ts
|
|
6822
6799
|
var import_web35 = require("@solana/web3.js");
|
|
6823
6800
|
var import_spl_token3 = require("@solana/spl-token");
|
package/package.json
CHANGED
package/src/bondingCurve.ts
CHANGED
|
@@ -15,7 +15,7 @@ export function newBondingCurve(global: Global): BondingCurve {
|
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
function getBuySolAmountFromTokenAmountQuote({
|
|
19
19
|
minAmount,
|
|
20
20
|
virtualTokenReserves,
|
|
21
21
|
virtualSolReserves,
|
|
@@ -30,7 +30,7 @@ export function getBuySolAmountFromTokenAmountQuote({
|
|
|
30
30
|
.add(new BN(1));
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
function getBuyTokenAmountFromSolAmountQuote({
|
|
34
34
|
inputAmount,
|
|
35
35
|
virtualTokenReserves,
|
|
36
36
|
virtualSolReserves,
|
|
@@ -44,7 +44,7 @@ export function getBuyTokenAmountFromSolAmountQuote({
|
|
|
44
44
|
.div(virtualSolReserves.add(inputAmount));
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
function getSellSolAmountFromTokenAmountQuote({
|
|
48
48
|
inputAmount,
|
|
49
49
|
virtualTokenReserves,
|
|
50
50
|
virtualSolReserves,
|
|
@@ -103,7 +103,10 @@ export function getBuyTokenAmountFromSolAmount({
|
|
|
103
103
|
: new BN(0),
|
|
104
104
|
);
|
|
105
105
|
|
|
106
|
-
const inputAmount = amount
|
|
106
|
+
const inputAmount = amount
|
|
107
|
+
.subn(1)
|
|
108
|
+
.muln(10_000)
|
|
109
|
+
.div(totalFeeBasisPoints.addn(10_000));
|
|
107
110
|
|
|
108
111
|
const tokensReceived = getBuyTokenAmountFromSolAmountQuote({
|
|
109
112
|
inputAmount,
|
package/src/fees.ts
CHANGED
|
@@ -8,31 +8,6 @@ export interface CalculatedFeesBps {
|
|
|
8
8
|
creatorFeeBps: BN;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
export interface CalculatedFees {
|
|
12
|
-
protocolFee: BN;
|
|
13
|
-
creatorFee: BN;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function createFeeConfigFromGlobalConfig(
|
|
17
|
-
globalConfig: Global,
|
|
18
|
-
): FeeConfig {
|
|
19
|
-
let fees: Fees = {
|
|
20
|
-
lpFeeBps: new BN(0), // unused for pump
|
|
21
|
-
protocolFeeBps: globalConfig.feeBasisPoints,
|
|
22
|
-
creatorFeeBps: globalConfig.creatorFeeBasisPoints,
|
|
23
|
-
};
|
|
24
|
-
return {
|
|
25
|
-
admin: globalConfig.authority,
|
|
26
|
-
flatFees: fees,
|
|
27
|
-
feeTiers: [
|
|
28
|
-
{
|
|
29
|
-
marketCapLamportsThreshold: new BN(0), // unused for pump
|
|
30
|
-
fees,
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
11
|
export function getFee({
|
|
37
12
|
global,
|
|
38
13
|
feeConfig,
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
export { Pump } from "./idl/pump";
|
|
2
2
|
export { default as pumpIdl } from "./idl/pump.json";
|
|
3
|
-
export { createFeeConfigFromGlobalConfig } from "./fees";
|
|
4
3
|
export {
|
|
5
4
|
getBuyTokenAmountFromSolAmount,
|
|
6
|
-
getBuySolAmountFromTokenAmountQuote,
|
|
7
|
-
getBuyTokenAmountFromSolAmountQuote,
|
|
8
|
-
getSellSolAmountFromTokenAmountQuote,
|
|
9
5
|
getBuySolAmountFromTokenAmount,
|
|
10
6
|
getSellSolAmountFromTokenAmount,
|
|
11
7
|
newBondingCurve,
|