@meteora-ag/dynamic-bonding-curve-sdk 1.5.13-rc.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -7
- package/dist/{chunk-TJJ6OBO5.cjs → chunk-IRVDOLO7.cjs} +2 -1
- package/dist/chunk-IRVDOLO7.cjs.map +1 -0
- package/dist/{chunk-FEVAE222.js → chunk-P4K4GKFH.js} +2 -1
- package/dist/chunk-P4K4GKFH.js.map +1 -0
- package/dist/index.cjs +256 -259
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -17
- package/dist/index.js.map +1 -1
- package/dist/math.cjs +2 -2
- package/dist/math.d.cts +1 -0
- package/dist/math.d.ts +1 -0
- package/dist/math.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-FEVAE222.js.map +0 -1
- package/dist/chunk-TJJ6OBO5.cjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -28,7 +28,7 @@ Syncs the SDK with dynamic-bonding-curve 0.2.2 (audited release, program commit
|
|
|
28
28
|
- `MigratedCollectFeeMode.Compounding` allows `compoundingFeeBps` of `0`.
|
|
29
29
|
- Configs created by program 0.2.2 have `PoolConfig.version` 1 and `transferFeeFlag`. Swap quotes read the base transfer fee from that flag unless `baseMint` or `baseTransferFeeBasisPoints` is passed. A transfer fee is zero when its basis points are 0 or its maximum fee is 0.
|
|
30
30
|
- A legacy config (`version` 0) cannot initialize a pool on a quote mint with a non-zero transfer fee or a live transfer fee config authority, and `migrateToDammV2` rejects it when the quote mint's current transfer fee is non-zero. Transfer-hook pool initialization rejects those quote mints at any version.
|
|
31
|
-
- Compounding migration deposits round the scaled base up and the quote down.
|
|
31
|
+
- Compounding migration deposits round the scaled base up and the quote down.
|
|
32
32
|
- Partial-fill quotes throw `Required input amount exceeds the provided amount in` when the reconstructed input is larger than `amountIn`.
|
|
33
33
|
- `withdrawLeftover` makes `leftoverReceiver` a signer when the leftover charges a transfer fee.
|
|
34
34
|
- Curve builders reserve the program migration base, `ceil(migrationQuoteThreshold * (100 - migrationFee.feePercentage) / 100)`. `buildCurveWithLiquidityWeights` and `buildCurveWithCustomSqrtPrices` use constant product for `Compounding` and concentrated liquidity otherwise, and the last segment of `buildCurveWithLiquidityWeights` now ends exactly at the migration sqrt price. `buildCurveWithTwoSegments` and `buildCurveWithMidPrice` keep a fractional `percentageSupplyOnMigration`.
|
|
@@ -41,11 +41,11 @@ Syncs the SDK with dynamic-bonding-curve 0.2.2 (audited release, program commit
|
|
|
41
41
|
- `client.state.getPoolConfigsByOwner` filters on the config's fee claimer. It filtered on the leftover receiver since 1.0.
|
|
42
42
|
- `getCurveBreakdown` consumes only the remaining threshold on each segment and stops at exact cumulative completion (PR #120, snuff12).
|
|
43
43
|
- `getBaseTokenForSwap`, `getMigrationThresholdPrice`, `getSwapAmountWithBuffer`, `getCurveBreakdown` and `getQuoteReserveFromNextSqrtPrice` stop at the first zero point of a stored curve, like the program. `client.state.getPoolBaseTokenCurveProgress` threw `Math operation overflow` once the price reached the last curve point, and at any time for a config whose last point is the migration price.
|
|
44
|
-
- `getBaseTokenForSwap` and `
|
|
44
|
+
- `getBaseTokenForSwap`, `getMigrationThresholdPrice` and `getCurveBreakdown` accumulate without a `u64` bound. `getSwapAmountWithBuffer` casts only the amount it keeps, and `validateConfigParameters` casts the swap base with `Type cast error` before it computes the migration amounts.
|
|
45
45
|
- The first-buy builders pass the instructions sysvar only when the config enables the first swap with the minimum fee.
|
|
46
46
|
- `client.state.getDammV1MigrationMetadata` returns `null` instead of throwing when the account does not exist.
|
|
47
47
|
- `client.state.getPoolMetadata(pool)` and `client.state.getPartnerMetadata(feeClaimer)` fetch the metadata PDA and return the account, or `null` when none was created, instead of an array.
|
|
48
|
-
- `getTokenType`
|
|
48
|
+
- `getTokenType` takes an optional commitment.
|
|
49
49
|
- Synced the DAMM v2 IDL and `cp_amm.so` fixture to cp_amm 0.2.5.
|
|
50
50
|
- `docs.md` and `CHANGELOG.md` ship in the package.
|
|
51
51
|
|
|
@@ -56,7 +56,7 @@ Syncs the SDK with dynamic-bonding-curve 0.2.2 (audited release, program commit
|
|
|
56
56
|
|
|
57
57
|
### Removed
|
|
58
58
|
|
|
59
|
-
- Helpers nothing referenced: `getAccountData`, `getAccountCreationTimestamp`, `getAccountCreationTimestamps`, `prepareTokenAccountTx`, `cleanUpTokenAccountTx`, `checkRateLimiterApplied`, `validateBalance`, `validateBaseTokenType`, `validateQuoteMintBasic`, `deriveDammV1EventAuthority`, `deriveDammV1PoolAuthority`, `deriveDammV2LockEscrowAddress`, `findAssociatedTokenAddress`, `deriveVaultAddress`, `deriveTokenVaultKey`, `deriveVaultLpMintAddress`, `
|
|
59
|
+
- Helpers nothing referenced: `getAccountData`, `getAccountCreationTimestamp`, `getAccountCreationTimestamps`, `prepareTokenAccountTx`, `cleanUpTokenAccountTx`, `checkRateLimiterApplied`, `validateBalance`, `validateBaseTokenType`, `validateQuoteMintBasic`, `deriveDammV1EventAuthority`, `deriveDammV1PoolAuthority`, `deriveDammV2LockEscrowAddress`, `findAssociatedTokenAddress`, `deriveVaultAddress`, `deriveTokenVaultKey`, `deriveVaultLpMintAddress`, `convertDecimalToBN` (use `fromDecimalToBN`), `mulShr`, `SafeMath.mod`, `getFeeSchedulerMaxBaseFeeNumerator`, `getRateLimiterMinBaseFeeNumerator`, `getDeltaAmountBaseUnsignedUnchecked` and `getDeltaAmountQuoteUnsignedUnchecked` (the `256` variants are the unbounded ones), `BaseFeeHandler.validate`, `getProgram()` on the services (use `program`), and `DynamicBondingCurveClient.create` (the constructor defaults `commitment` to `confirmed`).
|
|
60
60
|
- Types nothing used: `SwapQuoteConfig`, `DynamicCurveProgram`, `CreateConfigAccounts`, `InitializeSplPoolAccounts`, `InitializeToken2022PoolAccounts`, `InitializePoolParameters`, `LockEscrow`, `FeeResult`, `ClaimCreatorTradingFeeWithQuoteMintNotSolParams` and `ClaimCreatorTradingFeeWithQuoteMintSolParams`.
|
|
61
61
|
- The `jito-ts` dev dependency.
|
|
62
62
|
|
|
@@ -65,15 +65,13 @@ Syncs the SDK with dynamic-bonding-curve 0.2.2 (audited release, program commit
|
|
|
65
65
|
- Import from `@meteora-ag/dynamic-bonding-curve-sdk` or `@meteora-ag/dynamic-bonding-curve-sdk/math`. The package root is an explicit export list and the `exports` map exposes only those two entries. The curve, fee, transfer fee and swap math moved to `./math` (57 functions, among them `calculateBaseToQuoteFromAmountIn`, `getFeeMode`, `getIncludedFeeAmount`, `getFeeNumeratorFromIncludedAmount`, `getSwapResult`, the `getDeltaAmount*` and `getNextSqrtPrice*` functions, `SafeMath`, `mulDiv` and `pow`). `swapQuoteExactIn`, `swapQuoteExactOut`, `swapQuotePartialFill` and `DynamicBondingCurveProgram` are not exported; `swapQuote` stays on the root. Internal helpers such as `getOrCreateATAInstruction`, `unwrapSOLInstruction`, `wrapSOLInstruction`, `deriveMintMetadata`, `derivePositionAddress`, `createDammV1Program`, `getFirstCurve`, `getTwoCurve`, `isDefaultLockedVesting` and the `validate*` building blocks are no longer exported.
|
|
66
66
|
- Construct the services through `DynamicBondingCurveClient`. `new PoolService(connection, commitment)` and the same constructor on the other services are no longer supported.
|
|
67
67
|
- `CreateConfigParams`, `CreateConfig2Params` and `CreateConfigWithTransferHookParams` declare `config`, `feeClaimer`, `leftoverReceiver`, `quoteMint` and `payer` as required `PublicKey`s.
|
|
68
|
-
-
|
|
68
|
+
- Swap quotes for a Token-2022 quote mint require `quoteMint` and `currentEpoch`.
|
|
69
69
|
- `getFeeOnAmount` and `splitFees` no longer take `poolFees`. `calculateBaseToQuoteFromAmountOut` and `calculateQuoteToBaseFromAmountOut` return `{ amountIn, nextSqrtPrice }`.
|
|
70
|
-
- `getOrCreateATAInstruction(connection, mint, owner, payer, tokenProgram, commitment?)`: the `allowOwnerOffCurve` argument is gone and always on. `unwrapSOLInstruction` always returns an instruction.
|
|
71
70
|
- `createDbcProgram` returns the `Program` instead of `{ program }`. `deriveEscrow` is `deriveLockerEscrowAddress`.
|
|
72
71
|
- `getMigratedPoolFeeParams` throws for `MigrationFeeOption.Customizable` when `migratedPoolFee.poolFeeBps` is not set.
|
|
73
72
|
- `swap`, `swap2`, `claimPartnerTradingFee`, `claimPartnerTradingFeeToReceiver`, `claimCreatorTradingFee` and `claimCreatorTradingFeeToReceiver` reject transfer-hook pools. Use `swap2WithTransferHook`, `claimPartnerTradingFee2` and `claimCreatorTradingFee2`. Standard pool creation rejects a transfer-hook config, and transfer-hook pool creation rejects a standard config.
|
|
74
73
|
- `transferPoolCreator` rejects a `newCreator` equal to `creator`.
|
|
75
74
|
- `tempWSolAcc` is gone from `claimPartnerTradingFee` and `claimCreatorTradingFee`. With a native SOL quote the fee is wrapped into the fee claimer's or creator's token account and unwrapped to `receiver`, so only the claimer signs.
|
|
76
|
-
- `validateSwapAmount` returns nothing and throws `Amount is zero`.
|
|
77
75
|
|
|
78
76
|
## [1.5.13] - 2026-09-24
|
|
79
77
|
|
|
@@ -240,6 +240,7 @@ var ProgramError = {
|
|
|
240
240
|
InvalidMigrationOption: "Invalid migration option",
|
|
241
241
|
InvalidTokenDecimals: "Invalid token decimals",
|
|
242
242
|
InvalidTokenType: "Invalid token type",
|
|
243
|
+
InvalidQuoteThreshold: "Invalid quote threshold",
|
|
243
244
|
InvalidTokenSupply: "Invalid token supply",
|
|
244
245
|
InvalidCurve: "Invalid curve",
|
|
245
246
|
InvalidVestingParameters: "Invalid vesting parameters",
|
|
@@ -2020,4 +2021,4 @@ function swapQuoteExactOut(virtualPool, config, swapBaseForQuote, outAmount, sli
|
|
|
2020
2021
|
|
|
2021
2022
|
|
|
2022
2023
|
exports.ActivationType = ActivationType; exports.TokenType = TokenType; exports.CollectFeeMode = CollectFeeMode; exports.MigratedCollectFeeMode = MigratedCollectFeeMode; exports.DammV2DynamicFeeMode = DammV2DynamicFeeMode; exports.DammV2BaseFeeMode = DammV2BaseFeeMode; exports.MigrationOption = MigrationOption; exports.BaseFeeMode = BaseFeeMode; exports.MigrationFeeOption = MigrationFeeOption; exports.TokenDecimal = TokenDecimal; exports.TradeDirection = TradeDirection; exports.Rounding = Rounding; exports.TokenAuthorityOption = TokenAuthorityOption; exports.SwapMode = SwapMode; exports.TransferFeeWithheldAuthority = TransferFeeWithheldAuthority; exports.MigratedTransferFeeAuthorityOption = MigratedTransferFeeAuthorityOption; exports.AccountsType = AccountsType; exports.MAX_CURVE_POINT = MAX_CURVE_POINT; exports.RESOLUTION = RESOLUTION; exports.ONE_Q64 = ONE_Q64; exports.FEE_DENOMINATOR = FEE_DENOMINATOR; exports.MAX_BASIS_POINT = MAX_BASIS_POINT; exports.MAX_BASE_TRANSFER_FEE_BPS = MAX_BASE_TRANSFER_FEE_BPS; exports.LEGACY_CONFIG_VERSION = LEGACY_CONFIG_VERSION; exports.U16_MAX = U16_MAX; exports.U24_MAX = U24_MAX; exports.U64_MAX = U64_MAX; exports.U128_MAX = U128_MAX; exports.MIN_SQRT_PRICE = MIN_SQRT_PRICE; exports.MAX_SQRT_PRICE = MAX_SQRT_PRICE; exports.MIN_FEE_BPS = MIN_FEE_BPS; exports.MAX_FEE_BPS = MAX_FEE_BPS; exports.MIN_FEE_NUMERATOR = MIN_FEE_NUMERATOR; exports.MAX_FEE_NUMERATOR = MAX_FEE_NUMERATOR; exports.MAX_RATE_LIMITER_DURATION_IN_SECONDS = MAX_RATE_LIMITER_DURATION_IN_SECONDS; exports.MAX_RATE_LIMITER_DURATION_IN_SLOTS = MAX_RATE_LIMITER_DURATION_IN_SLOTS; exports.DYNAMIC_FEE_FILTER_PERIOD_DEFAULT = DYNAMIC_FEE_FILTER_PERIOD_DEFAULT; exports.DYNAMIC_FEE_DECAY_PERIOD_DEFAULT = DYNAMIC_FEE_DECAY_PERIOD_DEFAULT; exports.DYNAMIC_FEE_REDUCTION_FACTOR_DEFAULT = DYNAMIC_FEE_REDUCTION_FACTOR_DEFAULT; exports.DYNAMIC_FEE_SCALING_FACTOR = DYNAMIC_FEE_SCALING_FACTOR; exports.DYNAMIC_FEE_ROUNDING_OFFSET = DYNAMIC_FEE_ROUNDING_OFFSET; exports.BIN_STEP_BPS_DEFAULT = BIN_STEP_BPS_DEFAULT; exports.BIN_STEP_BPS_U128_DEFAULT = BIN_STEP_BPS_U128_DEFAULT; exports.MAX_PRICE_CHANGE_BPS_DEFAULT = MAX_PRICE_CHANGE_BPS_DEFAULT; exports.MAX_DYNAMIC_FEE_PERCENT = MAX_DYNAMIC_FEE_PERCENT; exports.PROTOCOL_FEE_PERCENT = PROTOCOL_FEE_PERCENT; exports.PARTNER_AND_CREATOR_SURPLUS_SHARE = PARTNER_AND_CREATOR_SURPLUS_SHARE; exports.HOST_FEE_PERCENT = HOST_FEE_PERCENT; exports.SWAP_BUFFER_PERCENTAGE = SWAP_BUFFER_PERCENTAGE; exports.PROTOCOL_LIQUIDITY_MIGRATION_FEE_BPS = PROTOCOL_LIQUIDITY_MIGRATION_FEE_BPS; exports.DAMM_V2_COMPOUNDING_DEAD_LIQUIDITY = DAMM_V2_COMPOUNDING_DEAD_LIQUIDITY; exports.MAX_MIGRATION_FEE_PERCENTAGE = MAX_MIGRATION_FEE_PERCENTAGE; exports.MAX_CREATOR_MIGRATION_FEE_PERCENTAGE = MAX_CREATOR_MIGRATION_FEE_PERCENTAGE; exports.MIN_LOCKED_LIQUIDITY_BPS = MIN_LOCKED_LIQUIDITY_BPS; exports.SECONDS_PER_DAY = SECONDS_PER_DAY; exports.MAX_LOCK_DURATION_IN_SECONDS = MAX_LOCK_DURATION_IN_SECONDS; exports.PROTOCOL_POOL_CREATION_FEE_PERCENT = PROTOCOL_POOL_CREATION_FEE_PERCENT; exports.MIN_POOL_CREATION_FEE = MIN_POOL_CREATION_FEE; exports.MAX_POOL_CREATION_FEE = MAX_POOL_CREATION_FEE; exports.MIN_MIGRATED_POOL_FEE_BPS = MIN_MIGRATED_POOL_FEE_BPS; exports.MAX_MIGRATED_POOL_FEE_BPS = MAX_MIGRATED_POOL_FEE_BPS; exports.DYNAMIC_BONDING_CURVE_PROGRAM_ID = DYNAMIC_BONDING_CURVE_PROGRAM_ID; exports.METAPLEX_PROGRAM_ID = METAPLEX_PROGRAM_ID; exports.DAMM_V1_PROGRAM_ID = DAMM_V1_PROGRAM_ID; exports.DAMM_V2_PROGRAM_ID = DAMM_V2_PROGRAM_ID; exports.VAULT_PROGRAM_ID = VAULT_PROGRAM_ID; exports.LOCKER_PROGRAM_ID = LOCKER_PROGRAM_ID; exports.BASE_ADDRESS = BASE_ADDRESS; exports.DAMM_V1_MIGRATION_FEE_ADDRESS = DAMM_V1_MIGRATION_FEE_ADDRESS; exports.DAMM_V2_MIGRATION_FEE_ADDRESS = DAMM_V2_MIGRATION_FEE_ADDRESS; exports.DEFAULT_MIGRATED_POOL_FEE_PARAMS = DEFAULT_MIGRATED_POOL_FEE_PARAMS; exports.DEFAULT_LIQUIDITY_VESTING_INFO_PARAMS = DEFAULT_LIQUIDITY_VESTING_INFO_PARAMS; exports.DEFAULT_MIGRATED_POOL_MARKET_CAP_FEE_SCHEDULER_PARAMS = DEFAULT_MIGRATED_POOL_MARKET_CAP_FEE_SCHEDULER_PARAMS; exports.ProgramError = ProgramError; exports.SafeMath = SafeMath; exports.pow = pow; exports.mulDiv = mulDiv; exports.toNumerator = toNumerator; exports.sqrt = sqrt; exports.getInitialLiquidityFromDeltaQuote = getInitialLiquidityFromDeltaQuote; exports.getInitialLiquidityFromDeltaBase = getInitialLiquidityFromDeltaBase; exports.getDeltaAmountBaseUnsigned = getDeltaAmountBaseUnsigned; exports.getDeltaAmountBaseUnsigned256 = getDeltaAmountBaseUnsigned256; exports.getDeltaAmountQuoteUnsigned = getDeltaAmountQuoteUnsigned; exports.getDeltaAmountQuoteUnsigned256 = getDeltaAmountQuoteUnsigned256; exports.getNextSqrtPriceFromInput = getNextSqrtPriceFromInput; exports.getNextSqrtPriceFromOutput = getNextSqrtPriceFromOutput; exports.getNextSqrtPriceFromQuoteAmountOutRoundingDown = getNextSqrtPriceFromQuoteAmountOutRoundingDown; exports.getNextSqrtPriceFromBaseAmountOutRoundingUp = getNextSqrtPriceFromBaseAmountOutRoundingUp; exports.getNextSqrtPriceFromBaseAmountInRoundingUp = getNextSqrtPriceFromBaseAmountInRoundingUp; exports.getNextSqrtPriceFromQuoteAmountInRoundingDown = getNextSqrtPriceFromQuoteAmountInRoundingDown; exports.liveCurve = liveCurve; exports.isZeroTransferFee = isZeroTransferFee; exports.getBaseTransferFee = getBaseTransferFee; exports.getEpochTransferFee = getEpochTransferFee; exports.resolveSwapTransferFees = resolveSwapTransferFees; exports.calculateTransferFeeExcludedAmount = calculateTransferFeeExcludedAmount; exports.calculateTransferFeeIncludedAmount = calculateTransferFeeIncludedAmount; exports.getFeeSchedulerMinBaseFeeNumerator = getFeeSchedulerMinBaseFeeNumerator; exports.getBaseFeeNumeratorByPeriod = getBaseFeeNumeratorByPeriod; exports.getFeeNumeratorOnLinearFeeScheduler = getFeeNumeratorOnLinearFeeScheduler; exports.getFeeNumeratorOnExponentialFeeScheduler = getFeeNumeratorOnExponentialFeeScheduler; exports.getBaseFeeNumerator = getBaseFeeNumerator; exports.getExcludedFeeAmount = getExcludedFeeAmount; exports.getIncludedFeeAmount = getIncludedFeeAmount; exports.isRateLimiterApplied = isRateLimiterApplied; exports.isZeroRateLimiter = isZeroRateLimiter; exports.isNonZeroRateLimiter = isNonZeroRateLimiter; exports.getMaxIndex = getMaxIndex; exports.getCheckedAmounts = getCheckedAmounts; exports.getFeeNumeratorFromExcludedAmount = getFeeNumeratorFromExcludedAmount; exports.getRateLimiterExcludedFeeAmount = getRateLimiterExcludedFeeAmount; exports.getMaxOutAmountWithMinBaseFee = getMaxOutAmountWithMinBaseFee; exports.getFeeNumeratorFromIncludedAmount = getFeeNumeratorFromIncludedAmount; exports.FeeRateLimiter = FeeRateLimiter; exports.FeeScheduler = FeeScheduler; exports.getBaseFeeHandler = getBaseFeeHandler; exports.isDynamicFeeEnabled = isDynamicFeeEnabled; exports.getVariableFeeNumerator = getVariableFeeNumerator; exports.getFeeMode = getFeeMode; exports.getTotalFeeNumeratorFromIncludedFeeAmount = getTotalFeeNumeratorFromIncludedFeeAmount; exports.getTotalFeeNumeratorFromExcludedFeeAmount = getTotalFeeNumeratorFromExcludedFeeAmount; exports.getTotalFeeNumerator = getTotalFeeNumerator; exports.getFeeOnAmount = getFeeOnAmount; exports.splitFees = splitFees; exports.getSwapResultFromExactInput = getSwapResultFromExactInput; exports.getSwapResult = getSwapResult; exports.getSwapResultFromPartialInput = getSwapResultFromPartialInput; exports.getSwapResultFromExactOutput = getSwapResultFromExactOutput; exports.calculateBaseToQuoteFromAmountIn = calculateBaseToQuoteFromAmountIn; exports.calculateQuoteToBaseFromAmountIn = calculateQuoteToBaseFromAmountIn; exports.calculateBaseToQuoteFromAmountOut = calculateBaseToQuoteFromAmountOut; exports.calculateQuoteToBaseFromAmountOut = calculateQuoteToBaseFromAmountOut; exports.swapQuote = swapQuote; exports.swapQuoteExactIn = swapQuoteExactIn; exports.swapQuotePartialFill = swapQuotePartialFill; exports.swapQuoteExactOut = swapQuoteExactOut;
|
|
2023
|
-
//# sourceMappingURL=chunk-
|
|
2024
|
+
//# sourceMappingURL=chunk-IRVDOLO7.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/dann/Documents/github/dynamic-bonding-curve-sdk/packages/dynamic-bonding-curve/dist/chunk-IRVDOLO7.cjs","../src/types.ts","../src/constants.ts","../src/math/errors.ts","../src/math/safeMath.ts","../src/math/utilsMath.ts","../src/math/curve.ts","../src/math/transferFee.ts","../src/math/poolFees/feeScheduler.ts","../src/math/feeAmount.ts","../src/math/poolFees/rateLimiter.ts","../src/math/poolFees/baseFee.ts","../src/math/poolFees/dynamicFee.ts","../src/math/feeMath.ts","../src/math/swapQuote.ts"],"names":["ActivationType","TokenType","CollectFeeMode","MigratedCollectFeeMode","DammV2DynamicFeeMode","DammV2BaseFeeMode","MigrationOption","BaseFeeMode","MigrationFeeOption","TokenDecimal","TradeDirection","Rounding","TokenAuthorityOption","SwapMode","TransferFeeWithheldAuthority","MigratedTransferFeeAuthorityOption","BN","tradeFeeNumerator","ZERO"],"mappings":"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A;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACJ,EAAA;AACJ;AAOI;AAOmD,EAAA;AAC/C,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACJ,EAAA;AACyB,EAAA;AACrB,IAAA;AACA,IAAA;AACF,EAAA;AAC6B,EAAA;AACc,IAAA;AAC7C,EAAA;AAEe,EAAA;AACX,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACI,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACJ,IAAA;AACJ,EAAA;AAGM,EAAA;AACI,IAAA;AACO,IAAA;AACT,EAAA;AAE2B,EAAA;AACiB,IAAA;AACpD,EAAA;AAC0B,EAAA;AACtB,IAAA;AACO,IAAA;AACT,EAAA;AAEK,EAAA;AACA,IAAA;AACe,IAAA;AACd,MAAA;AACA,MAAA;AACJ,IAAA;AAC6B,IAAA;AACC,IAAA;AAClC,EAAA;AACJ;AAOI;AAOmD,EAAA;AAC/C,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACJ,EAAA;AAC0B,EAAA;AACtB,IAAA;AACA,IAAA;AACF,EAAA;AAC8B,EAAA;AACa,IAAA;AAC7C,EAAA;AAEe,EAAA;AACX,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACI,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACJ,IAAA;AACJ,EAAA;AACyB,EAAA;AACrB,IAAA;AACO,IAAA;AACT,EAAA;AAEK,EAAA;AACA,IAAA;AACc,IAAA;AACb,MAAA;AACA,MAAA;AACJ,IAAA;AAC6B,IAAA;AACC,IAAA;AAClC,EAAA;AACJ;Adi1ByE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/dann/Documents/github/dynamic-bonding-curve-sdk/packages/dynamic-bonding-curve/dist/chunk-IRVDOLO7.cjs","sourcesContent":[null,"import type { Accounts, BN, IdlAccounts, IdlTypes } from '@coral-xyz/anchor'\nimport type { DynamicBondingCurve } from './idl/dynamic-bonding-curve/idl'\nimport type { Mint } from '@solana/spl-token'\nimport type {\n AccountMeta,\n Keypair,\n PublicKey,\n Transaction,\n} from '@solana/web3.js'\n\ntype DbcInstruction<\n TName extends DynamicBondingCurve['instructions'][number]['name'],\n> = Extract<DynamicBondingCurve['instructions'][number], { name: TName }>\n\nexport type CreateDammV1MigrationMetadataAccounts = Accounts<\n DbcInstruction<'migrationMeteoraDammCreateMetadata'>\n>['migrationMeteoraDammCreateMetadata']\n\nexport type ConfigParameters = IdlTypes<DynamicBondingCurve>['configParameters']\nexport type LockedVestingParameters =\n IdlTypes<DynamicBondingCurve>['lockedVestingParams']\n\nexport type PoolFeeParameters =\n IdlTypes<DynamicBondingCurve>['poolFeeParameters']\n\nexport type DynamicFeeParameters =\n IdlTypes<DynamicBondingCurve>['dynamicFeeParameters']\n\nexport type LiquidityDistributionParameters =\n IdlTypes<DynamicBondingCurve>['liquidityDistributionParameters']\n\nexport type MigratedPoolMarketCapFeeSchedulerParameters =\n IdlTypes<DynamicBondingCurve>['migratedPoolMarketCapFeeSchedulerParams']\n\nexport type LiquidityVestingInfoParameters =\n IdlTypes<DynamicBondingCurve>['liquidityVestingInfoParams']\n\nexport type CreateVirtualPoolMetadataParameters =\n IdlTypes<DynamicBondingCurve>['createVirtualPoolMetadataParameters']\n\nexport type CreatePartnerMetadataParameters =\n IdlTypes<DynamicBondingCurve>['createPartnerMetadataParameters']\n\nexport type PoolFeesConfig = IdlTypes<DynamicBondingCurve>['poolFeesConfig']\n\nexport type BaseFeeConfig = IdlTypes<DynamicBondingCurve>['baseFeeConfig']\n\nexport type DynamicFeeConfig = IdlTypes<DynamicBondingCurve>['dynamicFeeConfig']\n\nexport type MigratedPoolFee = IdlTypes<DynamicBondingCurve>['migratedPoolFee']\n\nexport type SwapResult = IdlTypes<DynamicBondingCurve>['swapResult']\n\nexport type SwapResult2 = IdlTypes<DynamicBondingCurve>['swapResult2']\n\nexport type TransferFeeParameters =\n IdlTypes<DynamicBondingCurve>['transferFeeParameters']\n\nexport type TransferHookAccountsInfo =\n IdlTypes<DynamicBondingCurve>['transferHookAccountsInfo']\n\nexport type VolatilityTracker =\n IdlTypes<DynamicBondingCurve>['volatilityTracker']\n\nexport type PoolConfig = IdlAccounts<DynamicBondingCurve>['poolConfig']\n\nexport type ConfigWithTransferHook =\n IdlAccounts<DynamicBondingCurve>['configWithTransferHook']\n\nexport type VirtualPool = IdlAccounts<DynamicBondingCurve>['virtualPool']\n\n// The fields the quote math reads. A PoolConfig and a VirtualPool satisfy\n// them, and so does a buildCurve result before the accounts exist.\nexport type QuoteDynamicFee = Pick<\n DynamicFeeConfig,\n 'initialized' | 'binStep' | 'variableFeeControl'\n>\nexport type QuotePoolFees = {\n baseFee: Pick<\n BaseFeeConfig,\n | 'cliffFeeNumerator'\n | 'firstFactor'\n | 'secondFactor'\n | 'thirdFactor'\n | 'baseFeeMode'\n >\n dynamicFee: QuoteDynamicFee\n}\nexport type QuoteVolatilityTracker = Pick<\n VolatilityTracker,\n 'volatilityAccumulator'\n>\nexport type QuotePoolConfig = Pick<\n PoolConfig,\n | 'collectFeeMode'\n | 'sqrtStartPrice'\n | 'migrationQuoteThreshold'\n | 'migrationSqrtPrice'\n | 'curve'\n | 'enableFirstSwapWithMinFee'\n | 'quoteTokenFlag'\n | 'transferFeeFlag'\n | 'transferFeeBasisPoints'\n> & { poolFees: QuotePoolFees; quoteMint?: PublicKey }\nexport type QuoteVirtualPool = {\n poolState: Pick<\n VirtualPool['poolState'],\n 'sqrtPrice' | 'quoteReserve' | 'activationPoint' | 'hasSwap'\n > & { volatilityTracker: QuoteVolatilityTracker }\n}\n\nexport type TransferHookPool =\n IdlAccounts<DynamicBondingCurve>['transferHookPool']\n\nexport type MeteoraDammMigrationMetadata =\n IdlAccounts<DynamicBondingCurve>['meteoraDammMigrationMetadata']\n\nexport type PartnerMetadata =\n IdlAccounts<DynamicBondingCurve>['partnerMetadata']\n\nexport type VirtualPoolMetadata =\n IdlAccounts<DynamicBondingCurve>['virtualPoolMetadata']\n\nexport type TokenBadge = IdlAccounts<DynamicBondingCurve>['tokenBadge']\n\nexport enum ActivationType {\n Slot = 0,\n Timestamp = 1,\n}\n\nexport enum TokenType {\n SPLToken = 0,\n Token2022 = 1,\n}\n\nexport enum CollectFeeMode {\n QuoteToken = 0,\n OutputToken = 1,\n}\n\nexport enum MigratedCollectFeeMode {\n QuoteToken = 0,\n OutputToken = 1,\n Compounding = 2,\n}\n\nexport enum DammV2DynamicFeeMode {\n Disabled = 0,\n Enabled = 1,\n}\n\nexport enum DammV2BaseFeeMode {\n // fee = cliff_fee_numerator - passed_period * reduction_factor\n // passed_period = (current_point - activation_point) / period_frequency\n FeeTimeSchedulerLinear = 0,\n // fee = cliff_fee_numerator * (1-reduction_factor/10_000)^passed_period\n FeeTimeSchedulerExponential = 1,\n // rate limiter\n RateLimiter = 2,\n // fee = cliff_fee_numerator - passed_period * reduction_factor\n // passed_period = changed_price / sqrt_price_step_bps\n // passed_period = (current_sqrt_price - init_sqrt_price) * 10_000 / init_sqrt_price / sqrt_price_step_bps\n FeeMarketCapSchedulerLinear = 3,\n // fee = cliff_fee_numerator * (1-reduction_factor/10_000)^passed_period\n FeeMarketCapSchedulerExponential = 4,\n}\n\nexport enum MigrationOption {\n /** @deprecated New configs and pools cannot use DAMM v1 migration. Existing pools can still migrate. */\n MET_DAMM = 0,\n MET_DAMM_V2 = 1,\n}\n\nexport enum BaseFeeMode {\n FeeSchedulerLinear = 0,\n FeeSchedulerExponential = 1,\n /** @deprecated New configs and pools cannot use RateLimiter. Existing pools are unaffected. */\n RateLimiter = 2,\n}\n\nexport enum MigrationFeeOption {\n FixedBps25 = 0,\n FixedBps30 = 1,\n FixedBps100 = 2,\n FixedBps200 = 3,\n FixedBps400 = 4,\n FixedBps600 = 5,\n Customizable = 6, // only for DAMM v2\n}\n\nexport enum TokenDecimal {\n SIX = 6,\n SEVEN = 7,\n EIGHT = 8,\n NINE = 9,\n}\n\nexport enum TradeDirection {\n BaseToQuote = 0,\n QuoteToBase = 1,\n}\n\nexport enum Rounding {\n Up,\n Down,\n}\n\nexport enum TokenAuthorityOption {\n // Creator has permission to update update_authority\n CreatorUpdateAuthority = 0,\n // No one has permission to update the authority\n Immutable = 1,\n // Partner has permission to update update_authority\n PartnerUpdateAuthority = 2,\n // Creator has permission as mint_authority and update_authority\n CreatorUpdateAndMintAuthority = 3,\n // Partner has permission as mint_authority and update_authority\n PartnerUpdateAndMintAuthority = 4,\n}\n\nexport enum SwapMode {\n ExactIn = 0,\n PartialFill = 1,\n ExactOut = 2,\n}\n\nexport enum TransferFeeWithheldAuthority {\n Partner = 0,\n Creator = 1,\n}\n\nexport enum MigratedTransferFeeAuthorityOption {\n Immutable = 0,\n RevokeZeroFee = 1,\n Creator = 2,\n Partner = 3,\n}\n\nexport const AccountsType = {\n TransferHookBase: {\n transferHookBase: {},\n },\n TransferHookBaseReferral: {\n transferHookBaseReferral: {},\n },\n} as const\n\nexport type CreateConfigParams = ConfigParameters & {\n config: PublicKey\n feeClaimer: PublicKey\n leftoverReceiver: PublicKey\n quoteMint: PublicKey\n payer: PublicKey\n /**\n * The DBC token badge of the quote mint, required when the mint is not\n * permissionless-supported (a Token-2022 mint with other extensions).\n */\n tokenBadge?: PublicKey\n}\n\nexport type CreateConfig2Params = CreateConfigParams & {\n transferFeeParameters?: TransferFeeParameters | null\n}\n\nexport type CreateConfigWithTransferHookParams = CreateConfigParams & {\n transferHookProgram: PublicKey\n}\n\nexport type CreateDammV1MigrationMetadataParams = Omit<\n CreateDammV1MigrationMetadataAccounts,\n 'program' | 'eventAuthority' | 'systemProgram' | 'migrationMetadata'\n>\n\n// firstFactor - feeScheduler: numberOfPeriod, rateLimiter: feeIncrementBps\n// secondFactor - feeScheduler: periodFrequency, rateLimiter: maxLimiterDuration\n// thirdFactor - feeScheduler: reductionFactor, rateLimiter: referenceAmount\n// baseFeeMode - BaseFeeMode\nexport type BaseFee = Omit<BaseFeeConfig, 'padding0'>\n\nexport type TokenConfig = {\n tokenType: TokenType\n tokenBaseDecimal: TokenDecimal\n tokenQuoteDecimal: number\n tokenAuthorityOption: TokenAuthorityOption\n totalTokenSupply: number\n leftover: number\n}\n\nexport type FeeSchedulerParams = {\n startingFeeBps: number\n endingFeeBps: number\n numberOfPeriod: number\n totalDuration: number\n}\n\nexport type RateLimiterParams = {\n baseFeeBps: number\n feeIncrementBps: number\n referenceAmount: number\n maxLimiterDuration: number\n}\n\nexport type BaseFeeParams =\n | {\n baseFeeMode:\n | BaseFeeMode.FeeSchedulerLinear\n | BaseFeeMode.FeeSchedulerExponential\n feeSchedulerParam: FeeSchedulerParams\n }\n | {\n baseFeeMode: BaseFeeMode.RateLimiter\n rateLimiterParam: RateLimiterParams\n }\n\nexport type FeeConfig = {\n baseFeeParams: BaseFeeParams\n dynamicFeeEnabled: boolean\n collectFeeMode: CollectFeeMode\n creatorTradingFeePercentage: number\n poolCreationFee: number\n enableFirstSwapWithMinFee: boolean\n}\n\nexport type MigrationFee = {\n feePercentage: number\n creatorFeePercentage: number\n}\n\nexport type MigratedPoolFeeConfig = {\n collectFeeMode: MigratedCollectFeeMode\n dynamicFee: DammV2DynamicFeeMode\n poolFeeBps: number\n compoundingFeeBps?: number\n baseFeeMode?: DammV2BaseFeeMode\n marketCapFeeSchedulerParams?: MigratedPoolMarketCapFeeSchedulerParams\n}\n\nexport type MigratedPoolMarketCapFeeSchedulerParams = {\n endingBaseFeeBps: number\n numberOfPeriod: number\n priceMultiple: number\n schedulerExpirationDuration: number\n}\n\nexport type MigrationConfig = {\n migrationOption: MigrationOption\n migrationFeeOption: MigrationFeeOption\n migrationFee: MigrationFee\n migratedPoolFee?: MigratedPoolFeeConfig\n}\n\nexport type LiquidityVestingInfoParams = {\n vestingPercentage: number\n bpsPerPeriod: number\n numberOfPeriods: number\n cliffDurationFromMigrationTime: number\n totalDuration: number\n}\n\nexport type LiquidityDistributionConfig = {\n partnerPermanentLockedLiquidityPercentage: number\n partnerLiquidityPercentage: number\n partnerLiquidityVestingInfoParams?: LiquidityVestingInfoParams\n creatorPermanentLockedLiquidityPercentage: number\n creatorLiquidityPercentage: number\n creatorLiquidityVestingInfoParams?: LiquidityVestingInfoParams\n}\n\nexport type LockedVestingParams = {\n totalLockedVestingAmount: number\n numberOfVestingPeriod: number\n cliffUnlockAmount: number\n totalVestingDuration: number\n cliffDurationFromMigrationTime: number\n}\n\nexport type BuildCurveBaseParams = {\n token: TokenConfig\n fee: FeeConfig\n migration: MigrationConfig\n liquidityDistribution: LiquidityDistributionConfig\n lockedVesting: LockedVestingParams\n activationType: ActivationType\n}\n\nexport type BuildCurveParams = BuildCurveBaseParams & {\n percentageSupplyOnMigration: number\n migrationQuoteThreshold: number\n}\n\nexport type BuildCurveWithMarketCapParams = BuildCurveBaseParams & {\n initialMarketCap: number\n migrationMarketCap: number\n}\n\nexport type BuildCurveWithTwoSegmentsParams = BuildCurveBaseParams & {\n initialMarketCap: number\n migrationMarketCap: number\n percentageSupplyOnMigration: number\n}\n\nexport type BuildCurveWithMidPriceParams = BuildCurveBaseParams & {\n initialMarketCap: number\n migrationMarketCap: number\n midPrice: number\n percentageSupplyOnMigration: number\n}\n\nexport type BuildCurveWithLiquidityWeightsParams = BuildCurveBaseParams & {\n initialMarketCap: number\n migrationMarketCap: number\n liquidityWeights: number[]\n}\n\nexport type BuildCurveWithCustomSqrtPricesParams = BuildCurveBaseParams & {\n sqrtPrices: BN[] // Array of custom sqrt prices (must be in ascending order)\n liquidityWeights?: number[] // Optional weights for each segment. If not provided, liquidity is distributed evenly\n}\n\nexport type InitializePoolBaseParams = {\n name: string\n symbol: string\n uri: string\n pool: PublicKey\n config: PublicKey\n payer: PublicKey\n poolCreator: PublicKey\n baseMint: PublicKey\n baseVault: PublicKey\n quoteVault: PublicKey\n quoteMint: PublicKey\n tokenBadge?: PublicKey\n}\n\nexport type CreatePoolParams = {\n name: string\n symbol: string\n uri: string\n payer: PublicKey\n poolCreator: PublicKey\n config: PublicKey\n baseMint: PublicKey\n tokenBadge?: PublicKey\n}\n\nexport type CreatePoolWithTransferHookParams = CreatePoolParams & {\n transferHookProgram: PublicKey\n}\n\nexport type CreateConfigAndPoolParams = CreateConfigParams & {\n preCreatePoolParam: CreatePoolBaseParams\n transferFeeParameters?: TransferFeeParameters | null\n}\n\nexport type CreateConfigAndPoolWithFirstBuyParams =\n CreateConfigAndPoolParams & {\n firstBuyParam?: FirstBuyParams\n }\n\nexport type CreateConfigAndPoolWithTransferHookParams =\n CreateConfigWithTransferHookParams & {\n preCreatePoolParam: CreatePoolBaseParams\n }\n\nexport type CreateConfigAndPoolWithFirstBuyWithTransferHookParams =\n CreateConfigAndPoolWithTransferHookParams & {\n firstBuyParam?: FirstBuyWithTransferHookParams\n }\n\nexport type CreatePoolWithFirstBuyParams = {\n createPoolParam: CreatePoolParams\n firstBuyParam?: FirstBuyParams\n}\n\nexport type CreatePoolWithFirstBuyWithTransferHookParams = {\n createPoolParam: CreatePoolWithTransferHookParams\n firstBuyParam?: FirstBuyWithTransferHookParams\n}\n\nexport type CreatePoolWithPartnerAndCreatorFirstBuyParams = {\n createPoolParam: CreatePoolParams\n partnerFirstBuyParam?: PartnerFirstBuyParams\n creatorFirstBuyParam?: CreatorFirstBuyParams\n}\n\nexport type CreatePoolWithPartnerAndCreatorFirstBuyWithTransferHookParams = {\n createPoolParam: CreatePoolWithTransferHookParams\n partnerFirstBuyParam?: PartnerFirstBuyWithTransferHookParams\n creatorFirstBuyParam?: CreatorFirstBuyWithTransferHookParams\n}\n\nexport type CreatePoolBaseParams = {\n name: string\n symbol: string\n uri: string\n poolCreator: PublicKey\n baseMint: PublicKey\n}\n\nexport type FirstBuyParams = {\n buyer: PublicKey\n receiver?: PublicKey\n buyAmount: BN\n minimumAmountOut: BN\n referralTokenAccount: PublicKey | null\n}\n\nexport type TransferHookRemainingAccounts = {\n transferHookAccountsInfo: TransferHookAccountsInfo\n transferHookAccounts: AccountMeta[]\n}\n\nexport type FirstBuyWithTransferHookParams = FirstBuyParams &\n Partial<TransferHookRemainingAccounts>\n\nexport type PartnerFirstBuyParams = {\n partner: PublicKey\n receiver: PublicKey\n buyAmount: BN\n minimumAmountOut: BN\n referralTokenAccount: PublicKey | null\n}\n\nexport type PartnerFirstBuyWithTransferHookParams = PartnerFirstBuyParams &\n Partial<TransferHookRemainingAccounts>\n\nexport type CreatorFirstBuyParams = {\n creator: PublicKey\n receiver: PublicKey\n buyAmount: BN\n minimumAmountOut: BN\n referralTokenAccount: PublicKey | null\n}\n\nexport type CreatorFirstBuyWithTransferHookParams = CreatorFirstBuyParams &\n Partial<TransferHookRemainingAccounts>\n\nexport type SwapParams = {\n owner: PublicKey\n pool: PublicKey\n amountIn: BN\n minimumAmountOut: BN\n swapBaseForQuote: boolean\n referralTokenAccount: PublicKey | null\n /** Pays for token account creation; owner signs the swap itself. */\n payer?: PublicKey\n}\n\nexport type Swap2Params = {\n owner: PublicKey\n pool: PublicKey\n swapBaseForQuote: boolean\n referralTokenAccount: PublicKey | null\n /** Pays for token account creation; owner signs the swap itself. */\n payer?: PublicKey\n} & (\n | {\n swapMode: SwapMode.ExactIn\n amountIn: BN\n minimumAmountOut: BN\n }\n | {\n swapMode: SwapMode.PartialFill\n amountIn: BN\n minimumAmountOut: BN\n }\n | {\n swapMode: SwapMode.ExactOut\n amountOut: BN\n maximumAmountIn: BN\n }\n)\n\nexport type SwapQuoteParams = {\n virtualPool: VirtualPool\n config: PoolConfig\n swapBaseForQuote: boolean\n amountIn: BN\n slippageBps?: number\n hasReferral: boolean\n eligibleForFirstSwapWithMinFee: boolean // only for creator to bundle swap in initialize pool instruction to avoid anti sniper suite fee\n currentPoint: BN\n} & QuoteTransferFees\n\nexport type QuoteTransferFees = {\n currentEpoch?: number\n baseMint?: Mint\n quoteMint?: Mint\n baseTransferFeeBasisPoints?: number\n}\n\nexport type SwapQuote2Params = {\n virtualPool: VirtualPool\n config: PoolConfig\n swapBaseForQuote: boolean\n hasReferral: boolean\n eligibleForFirstSwapWithMinFee: boolean // only for creator to bundle swap in initialize pool instruction to avoid anti sniper suite fee\n currentPoint: BN\n slippageBps?: number\n} & (\n | {\n swapMode: SwapMode.ExactIn\n amountIn: BN\n }\n | {\n swapMode: SwapMode.PartialFill\n amountIn: BN\n }\n | {\n swapMode: SwapMode.ExactOut\n amountOut: BN\n }\n) &\n QuoteTransferFees\n\nexport type SimulatedQuoteBaseParams = {\n config: ConfigParameters\n swapBaseForQuote: boolean\n slippageBps?: number\n hasReferral?: boolean\n currentPoint?: BN\n eligibleForFirstSwapWithMinFee?: boolean\n quoteTokenFlag?: number\n} & QuoteTransferFees\n\nexport type SimulatedQuoteFromInputAmountParams = SimulatedQuoteBaseParams & {\n amountIn: BN\n swapMode?: SwapMode.ExactIn | SwapMode.PartialFill\n}\n\nexport type SimulatedQuoteFromOutputAmountParams = SimulatedQuoteBaseParams & {\n amountOut: BN\n}\n\nexport type MigrateToDammV1Params = {\n payer: PublicKey\n pool: PublicKey\n dammConfig: PublicKey\n}\n\nexport type MigrateToDammV2Params = MigrateToDammV1Params\n\nexport type MigrateToDammV2Response = {\n transaction: Transaction\n firstPositionNftKeypair: Keypair\n secondPositionNftKeypair: Keypair\n}\n\nexport type DammLpTokenParams = {\n payer: PublicKey\n pool: PublicKey\n dammConfig: PublicKey\n isPartner: boolean\n}\n\nexport type CreateLockerParams = {\n payer: PublicKey\n pool: PublicKey\n}\n\nexport type ClaimPartnerTradingFeeParams = {\n feeClaimer: PublicKey\n payer: PublicKey\n pool: PublicKey\n maxBaseAmount: BN\n maxQuoteAmount: BN\n receiver?: PublicKey\n}\n\nexport type ClaimPartnerTradingFeeToReceiverParams = {\n feeClaimer: PublicKey\n payer: PublicKey\n pool: PublicKey\n maxBaseAmount: BN\n maxQuoteAmount: BN\n receiver: PublicKey\n}\n\nexport type ClaimCreatorTradingFeeParams = {\n creator: PublicKey\n payer: PublicKey\n pool: PublicKey\n maxBaseAmount: BN\n maxQuoteAmount: BN\n receiver?: PublicKey\n}\n\nexport type ClaimCreatorTradingFeeToReceiverParams = {\n creator: PublicKey\n payer: PublicKey\n pool: PublicKey\n maxBaseAmount: BN\n maxQuoteAmount: BN\n receiver: PublicKey\n}\n\nexport type PartnerWithdrawSurplusParams = {\n feeClaimer: PublicKey\n pool: PublicKey\n}\n\nexport type CreatorWithdrawSurplusParams = {\n creator: PublicKey\n pool: PublicKey\n}\n\nexport type WithdrawLeftoverParams = {\n payer: PublicKey\n pool: PublicKey\n}\n\nexport type CreateVirtualPoolMetadataParams = {\n virtualPool: PublicKey\n name: string\n website: string\n logo: string\n creator: PublicKey\n payer: PublicKey\n}\n\nexport type CreatePartnerMetadataParams = {\n name: string\n website: string\n logo: string\n feeClaimer: PublicKey\n payer: PublicKey\n}\n\nexport type TransferPoolCreatorParams = {\n pool: PublicKey\n creator: PublicKey\n newCreator: PublicKey\n}\n\nexport type WithdrawMigrationFeeParams = {\n pool: PublicKey\n sender: PublicKey // sender is creator or partner\n}\n\nexport type ClaimPartnerPoolCreationFeeParams = {\n pool: PublicKey\n feeReceiver: PublicKey\n}\n\nexport type MigratedPoolFeeResult = {\n migratedPoolFee: {\n collectFeeMode: MigratedCollectFeeMode\n dynamicFee: DammV2DynamicFeeMode\n poolFeeBps: number\n }\n migratedPoolBaseFeeMode: DammV2BaseFeeMode\n migratedPoolMarketCapFeeSchedulerParams: MigratedPoolMarketCapFeeSchedulerParameters\n migrationFeeOption: MigrationFeeOption\n compoundingFeeBps: number\n}\n\nexport interface BaseFeeHandler {\n getMinBaseFeeNumerator(): BN\n getBaseFeeNumeratorFromIncludedFeeAmount(\n currentPoint: BN,\n activationPoint: BN,\n tradeDirection: TradeDirection,\n includedFeeAmount: BN\n ): BN\n getBaseFeeNumeratorFromExcludedFeeAmount(\n currentPoint: BN,\n activationPoint: BN,\n tradeDirection: TradeDirection,\n excludedFeeAmount: BN\n ): BN\n}\n\nexport interface FeeMode {\n feesOnInput: boolean\n feesOnBaseToken: boolean\n hasReferral: boolean\n}\n\nexport interface SwapQuoteResult extends SwapResult {\n minimumAmountOut: BN\n includedTransferFeeAmountIn: BN\n excludedTransferFeeAmountOut: BN\n}\n\nexport interface SwapQuote2Result extends SwapResult2 {\n minimumAmountOut?: BN\n maximumAmountIn?: BN\n includedTransferFeeAmountIn: BN\n excludedTransferFeeAmountOut: BN\n}\n\nexport interface FeeOnAmountResult {\n amount: BN\n protocolFee: BN\n tradingFee: BN\n referralFee: BN\n}\n\nexport interface PrepareSwapParams {\n inputMint: PublicKey\n outputMint: PublicKey\n inputTokenProgram: PublicKey\n outputTokenProgram: PublicKey\n}\n\nexport interface SwapAmount {\n outputAmount: BN\n nextSqrtPrice: BN\n amountLeft: BN\n}\n","import BN from 'bn.js'\nimport { PublicKey } from '@solana/web3.js'\nimport {\n LiquidityVestingInfoParams,\n MigratedPoolMarketCapFeeSchedulerParameters,\n} from './types'\n\nexport const MAX_CURVE_POINT = 16\n\nexport const RESOLUTION = 64\nexport const ONE_Q64 = new BN(1).shln(RESOLUTION)\n\nexport const FEE_DENOMINATOR = 1_000_000_000\nexport const MAX_BASIS_POINT = 10_000\nexport const MAX_BASE_TRANSFER_FEE_BPS = 1_000\n\nexport const LEGACY_CONFIG_VERSION = 0\n\nexport const U16_MAX = 65_535\nexport const U24_MAX = 16_777_215\nexport const U64_MAX = new BN('18446744073709551615')\nexport const U128_MAX = new BN('340282366920938463463374607431768211455')\n\nexport const MIN_SQRT_PRICE = new BN('4295048016')\nexport const MAX_SQRT_PRICE = new BN('79226673521066979257578248091')\n\n// Base Fee\nexport const MIN_FEE_BPS = 25 // 0.25% // previously 0.01%\nexport const MAX_FEE_BPS = 9900 // 99%\nexport const MIN_FEE_NUMERATOR = 2_500_000 // 0.25% // previously 100_000 (0.01%)\nexport const MAX_FEE_NUMERATOR = 990_000_000 // 99%\n\n// Base Fee - Rate Limiter\nexport const MAX_RATE_LIMITER_DURATION_IN_SECONDS = 43_200 // 12 hours\nexport const MAX_RATE_LIMITER_DURATION_IN_SLOTS = 108_000 // 12 hours\n\n// Dynamic Fee\nexport const DYNAMIC_FEE_FILTER_PERIOD_DEFAULT = 10 // 10 seconds\nexport const DYNAMIC_FEE_DECAY_PERIOD_DEFAULT = 120 // 120 seconds\nexport const DYNAMIC_FEE_REDUCTION_FACTOR_DEFAULT = 5000 // 50%\nexport const DYNAMIC_FEE_SCALING_FACTOR = new BN(100_000_000_000)\nexport const DYNAMIC_FEE_ROUNDING_OFFSET = new BN(99_999_999_999)\nexport const BIN_STEP_BPS_DEFAULT = 1\n// bin_step << 64 / MAX_BASIS_POINT\nexport const BIN_STEP_BPS_U128_DEFAULT = new BN('1844674407370955')\nexport const MAX_PRICE_CHANGE_BPS_DEFAULT = 1500 // 15%\nexport const MAX_DYNAMIC_FEE_PERCENT = 20 // of the base fee\n\n// Protocol Fee\nexport const PROTOCOL_FEE_PERCENT = 20 // 20%\nexport const PARTNER_AND_CREATOR_SURPLUS_SHARE = 80 // 80%\n\n// Referral Fee\nexport const HOST_FEE_PERCENT = 20 // 20%\n\n// Swap Buffer\nexport const SWAP_BUFFER_PERCENTAGE = 25 // 25%\n\n// Protocol liquidity migration fee\nexport const PROTOCOL_LIQUIDITY_MIGRATION_FEE_BPS = 20 // 0.2%\n\n// DAMM v2 locks this liquidity in a compounding pool\nexport const DAMM_V2_COMPOUNDING_DEAD_LIQUIDITY = new BN(100).shln(64)\n\n// Migration Fee\nexport const MAX_MIGRATION_FEE_PERCENTAGE = 99 // 99% // previously 50%\nexport const MAX_CREATOR_MIGRATION_FEE_PERCENTAGE = 100 // 100%\n\n// Migrated Pool Locked Liquidity\nexport const MIN_LOCKED_LIQUIDITY_BPS = 1000 // 10%\nexport const SECONDS_PER_DAY = 86400\n// Max lock duration must less than or equals to https://github.com/MeteoraAg/damm-v2/blob/689a3264484799d833c505523f4ff4e4990690aa/programs/cp-amm/src/constants.rs#L72\n// We reduce to 2 years because cliff_point is relative and depend on time when token is migrated\nexport const MAX_LOCK_DURATION_IN_SECONDS = 63_072_000 // 2 years\n\n// Pool Creation Fee\nexport const PROTOCOL_POOL_CREATION_FEE_PERCENT = 10 // 10%\nexport const MIN_POOL_CREATION_FEE = 1_000_000\nexport const MAX_POOL_CREATION_FEE = 100_000_000_000\n\n// Migrated Pool Fee\nexport const MIN_MIGRATED_POOL_FEE_BPS = 10 // 0.1%\nexport const MAX_MIGRATED_POOL_FEE_BPS = 1000 // 10%\n\nexport const DYNAMIC_BONDING_CURVE_PROGRAM_ID = new PublicKey(\n 'dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN'\n)\nexport const METAPLEX_PROGRAM_ID = new PublicKey(\n 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s'\n)\nexport const DAMM_V1_PROGRAM_ID = new PublicKey(\n 'Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB'\n)\nexport const DAMM_V2_PROGRAM_ID = new PublicKey(\n 'cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG'\n)\nexport const VAULT_PROGRAM_ID = new PublicKey(\n '24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi'\n)\nexport const LOCKER_PROGRAM_ID = new PublicKey(\n 'LocpQgucEQHbqNABEYvBvwoxCPsSbG91A1QaQhQQqjn'\n)\nexport const BASE_ADDRESS = new PublicKey(\n 'HWzXGcGHy4tcpYfaRDCyLNzXqBTv3E6BttpCH2vJxArv'\n)\n\n// DAMM V1 Migration Fee Options\nexport const DAMM_V1_MIGRATION_FEE_ADDRESS = [\n new PublicKey('8f848CEy8eY6PhJ3VcemtBDzPPSD4Vq7aJczLZ3o8MmX'), // FixedBps25\n new PublicKey('HBxB8Lf14Yj8pqeJ8C4qDb5ryHL7xwpuykz31BLNYr7S'), // FixedBps30\n new PublicKey('7v5vBdUQHTNeqk1HnduiXcgbvCyVEZ612HLmYkQoAkik'), // FixedBps100\n new PublicKey('EkvP7d5yKxovj884d2DwmBQbrHUWRLGK6bympzrkXGja'), // FixedBps200\n new PublicKey('9EZYAJrcqNWNQzP2trzZesP7XKMHA1jEomHzbRsdX8R2'), // FixedBps400\n new PublicKey('8cdKo87jZU2R12KY1BUjjRPwyjgdNjLGqSGQyrDshhud'), // FixedBps600\n]\n\n// DAMM V2 Migration Fee Options\nexport const DAMM_V2_MIGRATION_FEE_ADDRESS = [\n new PublicKey('7F6dnUcRuyM2TwR8myT1dYypFXpPSxqwKNSFNkxyNESd'), // FixedBps25\n new PublicKey('2nHK1kju6XjphBLbNxpM5XRGFj7p9U8vvNzyZiha1z6k'), // FixedBps30\n new PublicKey('Hv8Lmzmnju6m7kcokVKvwqz7QPmdX9XfKjJsXz8RXcjp'), // FixedBps100\n new PublicKey('2c4cYd4reUYVRAB9kUUkrq55VPyy2FNQ3FDL4o12JXmq'), // FixedBps200\n new PublicKey('AkmQWebAwFvWk55wBoCr5D62C6VVDTzi84NJuD9H7cFD'), // FixedBps400\n new PublicKey('DbCRBj8McvPYHJG1ukj8RE15h2dCNUdTAESG49XpQ44u'), // FixedBps600\n new PublicKey('A8gMrEPJkacWkcb3DGwtJwTe16HktSEfvwtuDh2MCtck'), // Customizable\n]\n\nexport const DEFAULT_MIGRATED_POOL_FEE_PARAMS = {\n collectFeeMode: 0,\n dynamicFee: 0,\n poolFeeBps: 0,\n} as const\n\nexport const DEFAULT_LIQUIDITY_VESTING_INFO_PARAMS: LiquidityVestingInfoParams =\n {\n vestingPercentage: 0,\n bpsPerPeriod: 0,\n numberOfPeriods: 0,\n cliffDurationFromMigrationTime: 0,\n totalDuration: 0,\n }\n\nexport const DEFAULT_MIGRATED_POOL_MARKET_CAP_FEE_SCHEDULER_PARAMS: MigratedPoolMarketCapFeeSchedulerParameters =\n {\n numberOfPeriod: 0,\n sqrtPriceStepBps: 0,\n schedulerExpirationDuration: 0,\n reductionFactor: new BN(0),\n }\n","// Error text of the program's `PoolError` variants (programs/dynamic-bonding-curve/src/error.rs)\n// that the SDK reproduces client-side.\nexport const ProgramError = {\n MathOverflow: 'Math operation overflow',\n ExceededSlippage: 'Exceeded slippage tolerance',\n ExceedMaxFeeBps: 'Exceeded max fee bps',\n AmountIsZero: 'Amount is zero',\n TypeCastFailed: 'Type cast error',\n InvalidActivationType: 'Invalid activation type',\n InvalidQuoteMint: 'Invalid quote mint',\n InvalidCollectFeeMode: 'Invalid collect fee mode',\n InvalidMigrationFeeOption: 'Invalid migration fee option',\n InvalidInput: 'Invalid input',\n NotEnoughLiquidity: 'Not enough liquidity',\n PoolIsCompleted: 'Pool is completed',\n InvalidMigrationOption: 'Invalid migration option',\n InvalidTokenDecimals: 'Invalid token decimals',\n InvalidTokenType: 'Invalid token type',\n InvalidQuoteThreshold: 'Invalid quote threshold',\n InvalidTokenSupply: 'Invalid token supply',\n InvalidCurve: 'Invalid curve',\n InvalidVestingParameters: 'Invalid vesting parameters',\n InsufficientLiquidity: 'Liquidity in bonding curve is insufficient',\n InvalidFeeScheduler: 'Invalid fee scheduler',\n InvalidCreatorTradingFeePercentage:\n 'Invalid creator trading fee percentage',\n InvalidBaseFeeMode: 'Invalid base fee mode',\n InvalidFeeRateLimiter: 'Invalid fee rate limiter',\n InvalidMigratedPoolFee: 'Invalid migrated pool fee params',\n // the program spells this \"Undertermined error\"\n UndeterminedError: 'Undetermined error',\n AmountLeftIsNotZero: 'Amount left is not zero',\n InvalidPoolCreationFee: 'Invalid pool creation fee',\n InvalidFeeMarketCapScheduler: 'Invalid fee market cap scheduler',\n DeprecatedBaseFeeMode: 'Deprecated base fee mode',\n QuoteMintHasNonZeroTransferFee:\n 'Quote mint has a non zero transfer fee or a live transfer fee config authority',\n DeprecatedMigrationOption: 'Deprecated migration option',\n FeeInverseIsIncorrect: 'Transfer fee inverse calculation is incorrect',\n InvalidTransferFeeParameters: 'Invalid transfer fee parameters',\n ExceededInputAmount: 'Required input amount exceeds the provided amount in',\n InvalidFeeClaimer: 'Invalid fee claimer',\n} as const\n","import BN from 'bn.js'\nimport { RESOLUTION, U128_MAX } from '../constants'\nimport { ProgramError } from './errors'\n\n/**\n * The program's safe_math on BN. BN is arbitrary precision, so only\n * subtraction and division can fail here; the u64 and u128 bounds are\n * checked by the callers.\n */\nexport class SafeMath {\n static add(a: BN, b: BN): BN {\n return a.add(b)\n }\n\n static sub(a: BN, b: BN): BN {\n if (b.gt(a)) {\n throw new Error(ProgramError.MathOverflow)\n }\n return a.sub(b)\n }\n\n static mul(a: BN, b: BN): BN {\n return a.mul(b)\n }\n\n static div(a: BN, b: BN): BN {\n if (b.isZero()) {\n throw new Error(ProgramError.MathOverflow)\n }\n return a.div(b)\n }\n\n static shl(a: BN, b: number): BN {\n return a.shln(b)\n }\n\n static shr(a: BN, b: number): BN {\n return a.shrn(b)\n }\n}\n\nconst MAX_EXPONENTIAL = 0x80000\nconst I32_MIN = new BN('-2147483648')\n\nfunction mulQ64(left: BN, right: BN): BN {\n const product = left.mul(right)\n if (product.gt(U128_MAX)) {\n throw new Error(ProgramError.MathOverflow)\n }\n return product.shrn(RESOLUTION)\n}\n\n/**\n * Q64 power, matching the program. A base at or above 1 is inverted through\n * u128::MAX so each multiplication stays inside u128.\n */\nexport function pow(base: BN, exponent: BN, scaling: boolean = true): BN {\n const one = new BN(1).shln(RESOLUTION)\n\n if (exponent.eq(I32_MIN) || base.isNeg() || base.gt(U128_MAX)) {\n throw new Error(ProgramError.MathOverflow)\n }\n if (exponent.isZero()) {\n return one\n }\n\n let invert = exponent.isNeg()\n const exp = invert ? exponent.neg() : exponent\n if (exp.gte(new BN(MAX_EXPONENTIAL))) {\n throw new Error(ProgramError.MathOverflow)\n }\n\n let squaredBase = base\n let result = one\n if (squaredBase.gte(result)) {\n squaredBase = U128_MAX.div(squaredBase)\n invert = !invert\n }\n\n let remaining = exp\n while (!remaining.isZero()) {\n if (remaining.isOdd()) {\n result = mulQ64(result, squaredBase)\n }\n squaredBase = mulQ64(squaredBase, squaredBase)\n remaining = remaining.shrn(1)\n }\n\n if (result.isZero()) {\n throw new Error(ProgramError.MathOverflow)\n }\n if (invert) {\n result = U128_MAX.div(result)\n }\n\n return scaling ? result : result.shrn(RESOLUTION)\n}\n","import BN from 'bn.js'\nimport { Rounding } from '../types'\nimport { MAX_BASIS_POINT } from '../constants'\nimport { ProgramError } from './errors'\n\n/** (x * y) / denominator with the given rounding; the program's mul_div. */\nexport function mulDiv(x: BN, y: BN, denominator: BN, rounding: Rounding): BN {\n if (denominator.isZero()) {\n throw new Error(ProgramError.MathOverflow)\n }\n const prod = x.mul(y)\n if (rounding === Rounding.Up) {\n return prod.add(denominator.subn(1)).div(denominator)\n }\n return prod.div(denominator)\n}\n\n/** bps * feeDenominator / 10_000, rounded down; the program's to_numerator. */\nexport function toNumerator(bps: BN, feeDenominator: BN): BN {\n return mulDiv(bps, feeDenominator, new BN(MAX_BASIS_POINT), Rounding.Down)\n}\n\n/** Integer square root by Newton's method, rounded down; the program's sqrt_u256. */\nexport function sqrt(value: BN): BN {\n if (value.lten(1)) {\n return value\n }\n let x = value\n let y = value.addn(1).divn(2)\n while (y.lt(x)) {\n x = y\n y = x.add(value.div(x)).divn(2)\n }\n return x\n}\n","import BN from 'bn.js'\nimport { SafeMath } from './safeMath'\nimport { mulDiv } from './utilsMath'\nimport { RESOLUTION, U128_MAX, U64_MAX } from '../constants'\nimport { Rounding } from '../types'\nimport { ProgramError } from './errors'\n\nfunction requireU64(value: BN): BN {\n if (value.gt(U64_MAX)) {\n throw new Error(ProgramError.MathOverflow)\n }\n return value\n}\n\nfunction requireU128(value: BN): BN {\n if (value.gt(U128_MAX)) {\n throw new Error(ProgramError.MathOverflow)\n }\n return value\n}\n\n/** L = Δb / (√P_upper - √P_lower), rounded down, bounded by u128. */\nexport function getInitialLiquidityFromDeltaQuote(\n quoteAmount: BN,\n sqrtMinPrice: BN,\n sqrtPrice: BN\n): BN {\n const priceDelta = SafeMath.sub(sqrtPrice, sqrtMinPrice)\n return requireU128(SafeMath.div(SafeMath.shl(quoteAmount, 128), priceDelta))\n}\n\n/** L = Δa * √P_lower * √P_upper / (√P_upper - √P_lower), rounded down. */\nexport function getInitialLiquidityFromDeltaBase(\n baseAmount: BN,\n sqrtMaxPrice: BN,\n sqrtPrice: BN\n): BN {\n const priceDelta = SafeMath.sub(sqrtMaxPrice, sqrtPrice)\n const prod = SafeMath.mul(SafeMath.mul(baseAmount, sqrtPrice), sqrtMaxPrice)\n return SafeMath.div(prod, priceDelta)\n}\n\n/** Δa = L * (√P_upper - √P_lower) / (√P_upper * √P_lower), bounded by u64. */\nexport function getDeltaAmountBaseUnsigned(\n lowerSqrtPrice: BN,\n upperSqrtPrice: BN,\n liquidity: BN,\n round: Rounding\n): BN {\n return requireU64(\n getDeltaAmountBaseUnsigned256(\n lowerSqrtPrice,\n upperSqrtPrice,\n liquidity,\n round\n )\n )\n}\n\n/** Δa = L * (√P_upper - √P_lower) / (√P_upper * √P_lower), unbounded. */\nexport function getDeltaAmountBaseUnsigned256(\n lowerSqrtPrice: BN,\n upperSqrtPrice: BN,\n liquidity: BN,\n round: Rounding\n): BN {\n const numerator = SafeMath.sub(upperSqrtPrice, lowerSqrtPrice)\n const denominator = SafeMath.mul(lowerSqrtPrice, upperSqrtPrice)\n return mulDiv(liquidity, numerator, denominator, round)\n}\n\n/** Δb = L * (√P_upper - √P_lower), bounded by u64. */\nexport function getDeltaAmountQuoteUnsigned(\n lowerSqrtPrice: BN,\n upperSqrtPrice: BN,\n liquidity: BN,\n round: Rounding\n): BN {\n return requireU64(\n getDeltaAmountQuoteUnsigned256(\n lowerSqrtPrice,\n upperSqrtPrice,\n liquidity,\n round\n )\n )\n}\n\n/** Δb = L * (√P_upper - √P_lower), unbounded. */\nexport function getDeltaAmountQuoteUnsigned256(\n lowerSqrtPrice: BN,\n upperSqrtPrice: BN,\n liquidity: BN,\n round: Rounding\n): BN {\n const prod = SafeMath.mul(\n liquidity,\n SafeMath.sub(upperSqrtPrice, lowerSqrtPrice)\n )\n if (round === Rounding.Up) {\n const denominator = new BN(1).shln(RESOLUTION * 2)\n return SafeMath.div(\n SafeMath.add(prod, denominator.subn(1)),\n denominator\n )\n }\n return SafeMath.shr(prod, RESOLUTION * 2)\n}\n\nfunction requireSwapInputs(sqrtPrice: BN, liquidity: BN, amount: BN): void {\n requireU128(sqrtPrice)\n requireU128(liquidity)\n requireU64(amount)\n if (sqrtPrice.isZero()) {\n throw new Error('sqrt_price must be greater than 0')\n }\n if (liquidity.isZero()) {\n throw new Error('liquidity must be greater than 0')\n }\n}\n\n/** Next sqrt price after amountIn of base (baseForQuote) or quote enters the segment. */\nexport function getNextSqrtPriceFromInput(\n sqrtPrice: BN,\n liquidity: BN,\n amountIn: BN,\n baseForQuote: boolean\n): BN {\n requireSwapInputs(sqrtPrice, liquidity, amountIn)\n // round so the target price is not passed\n return baseForQuote\n ? getNextSqrtPriceFromBaseAmountInRoundingUp(\n sqrtPrice,\n liquidity,\n amountIn\n )\n : getNextSqrtPriceFromQuoteAmountInRoundingDown(\n sqrtPrice,\n liquidity,\n amountIn\n )\n}\n\n/** Next sqrt price after amountOut of quote (baseForQuote) or base leaves the segment. */\nexport function getNextSqrtPriceFromOutput(\n sqrtPrice: BN,\n liquidity: BN,\n amountOut: BN,\n baseForQuote: boolean\n): BN {\n requireSwapInputs(sqrtPrice, liquidity, amountOut)\n return baseForQuote\n ? getNextSqrtPriceFromQuoteAmountOutRoundingDown(\n sqrtPrice,\n liquidity,\n amountOut\n )\n : getNextSqrtPriceFromBaseAmountOutRoundingUp(\n sqrtPrice,\n liquidity,\n amountOut\n )\n}\n\n/** √P' = √P - ceil(Δy / L) */\nexport function getNextSqrtPriceFromQuoteAmountOutRoundingDown(\n sqrtPrice: BN,\n liquidity: BN,\n amount: BN\n): BN {\n const qAmount = SafeMath.shl(amount, 128)\n const quotient = SafeMath.div(\n SafeMath.add(qAmount, SafeMath.sub(liquidity, new BN(1))),\n liquidity\n )\n return requireU128(SafeMath.sub(sqrtPrice, quotient))\n}\n\n/** √P' = √P * L / (L - Δx * √P), rounded up */\nexport function getNextSqrtPriceFromBaseAmountOutRoundingUp(\n sqrtPrice: BN,\n liquidity: BN,\n amount: BN\n): BN {\n if (amount.isZero()) {\n return sqrtPrice\n }\n const denominator = SafeMath.sub(liquidity, SafeMath.mul(amount, sqrtPrice))\n if (denominator.isZero()) {\n throw new Error(ProgramError.TypeCastFailed)\n }\n return requireU128(mulDiv(liquidity, sqrtPrice, denominator, Rounding.Up))\n}\n\n/**\n * √P' = √P * L / (L + Δx * √P), rounded up so an exact output is met and an\n * exact input does not move the price further than necessary.\n */\nexport function getNextSqrtPriceFromBaseAmountInRoundingUp(\n sqrtPrice: BN,\n liquidity: BN,\n amount: BN\n): BN {\n if (amount.isZero()) {\n return sqrtPrice\n }\n const denominator = SafeMath.add(liquidity, SafeMath.mul(amount, sqrtPrice))\n return requireU128(mulDiv(liquidity, sqrtPrice, denominator, Rounding.Up))\n}\n\n/**\n * √P' = √P + Δy / L, rounded down so an exact output is met and an exact\n * input does not move the price further than necessary.\n */\nexport function getNextSqrtPriceFromQuoteAmountInRoundingDown(\n sqrtPrice: BN,\n liquidity: BN,\n amount: BN\n): BN {\n const quotient = SafeMath.div(\n SafeMath.shl(amount, RESOLUTION * 2),\n liquidity\n )\n return requireU128(SafeMath.add(sqrtPrice, quotient))\n}\n\n/**\n * The points of a stored curve up to the first zero point. PoolConfig.curve\n * holds MAX_CURVE_POINT entries and the unused ones are zero; the program\n * stops at the first of them.\n */\nexport function liveCurve<T extends { sqrtPrice: BN; liquidity: BN }>(\n curve: T[]\n): T[] {\n const end = curve.findIndex(\n (point) => point.sqrtPrice.isZero() || point.liquidity.isZero()\n )\n return end === -1 ? curve : curve.slice(0, end)\n}\n","import {\n calculateFee,\n getEpochFee,\n getTransferFeeConfig,\n MAX_FEE_BASIS_POINTS,\n type Mint,\n} from '@solana/spl-token'\nimport BN from 'bn.js'\nimport { U64_MAX } from '../constants'\nimport {\n type QuotePoolConfig,\n type QuoteTransferFees,\n TokenType,\n} from '../types'\nimport { ProgramError } from './errors'\n\nexport type EpochTransferFee = {\n transferFeeBasisPoints: number\n maximumFee: BN\n}\n\nexport type TransferFeeAmount = {\n amount: BN\n transferFee: BN\n}\n\nconst ZERO = new BN(0)\n\nfunction toSplTransferFee(transferFee: EpochTransferFee) {\n return {\n epoch: BigInt(0),\n maximumFee: BigInt(transferFee.maximumFee.toString()),\n transferFeeBasisPoints: transferFee.transferFeeBasisPoints,\n }\n}\n\n/** Token-2022 charges min(amount * bps / 10_000, maximumFee), so either being zero means no fee. */\nexport function isZeroTransferFee(\n transferFee: {\n transferFeeBasisPoints: number\n maximumFee: BN | bigint\n } | null\n): boolean {\n if (!transferFee || transferFee.transferFeeBasisPoints === 0) {\n return true\n }\n const maximumFee = transferFee.maximumFee\n return typeof maximumFee === 'bigint'\n ? maximumFee === BigInt(0)\n : maximumFee.isZero()\n}\n\n/** A DBC base mint's fee has no cap, so the config only stores the basis points. */\nexport function getBaseTransferFee(\n transferFeeBasisPoints: number\n): EpochTransferFee | null {\n if (!transferFeeBasisPoints) {\n return null\n }\n return {\n transferFeeBasisPoints,\n maximumFee: U64_MAX,\n }\n}\n\n/** Flag 1 is a TransferFeeConfig, including at 0 basis points. */\nfunction getConfigBaseTransferFee(\n config: Pick<QuotePoolConfig, 'transferFeeFlag' | 'transferFeeBasisPoints'>\n): EpochTransferFee | null {\n if (config.transferFeeFlag !== 1) {\n return null\n }\n return {\n transferFeeBasisPoints: config.transferFeeBasisPoints,\n maximumFee: U64_MAX,\n }\n}\n\n/** The mint's transfer fee in currentEpoch, or null when the mint has no TransferFeeConfig. */\nexport function getEpochTransferFee(\n mint: Mint,\n currentEpoch: number\n): EpochTransferFee | null {\n const transferFeeConfig = getTransferFeeConfig(mint)\n if (!transferFeeConfig) {\n return null\n }\n const epochFee = getEpochFee(transferFeeConfig, BigInt(currentEpoch))\n return {\n transferFeeBasisPoints: epochFee.transferFeeBasisPoints,\n maximumFee: new BN(epochFee.maximumFee.toString()),\n }\n}\n\n/**\n * The transfer fees on the input and output side of a swap. The base fee\n * comes from baseMint, then baseTransferFeeBasisPoints, then the config; the\n * quote fee has to come from the quote mint account.\n */\nexport function resolveSwapTransferFees(\n config: Pick<\n QuotePoolConfig,\n | 'quoteTokenFlag'\n | 'quoteMint'\n | 'transferFeeFlag'\n | 'transferFeeBasisPoints'\n >,\n swapBaseForQuote: boolean,\n transferFees?: QuoteTransferFees\n): { input: EpochTransferFee | null; output: EpochTransferFee | null } {\n let base: EpochTransferFee | null\n if (transferFees?.baseMint) {\n if (transferFees.currentEpoch === undefined) {\n throw new Error('currentEpoch is required to quote a transfer fee')\n }\n base = getEpochTransferFee(\n transferFees.baseMint,\n transferFees.currentEpoch\n )\n } else if (transferFees?.baseTransferFeeBasisPoints !== undefined) {\n base = getBaseTransferFee(transferFees.baseTransferFeeBasisPoints)\n } else {\n base = getConfigBaseTransferFee(config)\n }\n\n let quote: EpochTransferFee | null = null\n if (transferFees?.quoteMint) {\n if (\n config.quoteMint &&\n !transferFees.quoteMint.address.equals(config.quoteMint)\n ) {\n throw new Error('quoteMint does not match config.quoteMint')\n }\n if (transferFees.currentEpoch === undefined) {\n throw new Error('currentEpoch is required to quote a transfer fee')\n }\n quote = getEpochTransferFee(\n transferFees.quoteMint,\n transferFees.currentEpoch\n )\n } else if (config.quoteTokenFlag === TokenType.Token2022) {\n throw new Error(\n 'quoteMint and currentEpoch are required for a Token-2022 quote mint, use getSwapQuoteTransferFees'\n )\n }\n\n return swapBaseForQuote\n ? { input: base, output: quote }\n : { input: quote, output: base }\n}\n\n/** The amount received after the transfer fee and the fee; spl-token-2022's calculate_fee. */\nexport function calculateTransferFeeExcludedAmount(\n transferFee: EpochTransferFee | null,\n includedAmount: BN\n): TransferFeeAmount {\n if (\n !transferFee ||\n isZeroTransferFee(transferFee) ||\n includedAmount.isZero()\n ) {\n return { amount: includedAmount, transferFee: ZERO }\n }\n\n const fee = new BN(\n calculateFee(\n toSplTransferFee(transferFee),\n BigInt(includedAmount.toString())\n ).toString()\n )\n return {\n amount: includedAmount.sub(fee),\n transferFee: fee,\n }\n}\n\n// spl-token-2022's calculate_pre_fee_amount\nfunction calculatePreFeeAmount(\n transferFee: EpochTransferFee,\n excludedAmount: BN\n): BN {\n if (excludedAmount.isZero() || isZeroTransferFee(transferFee)) {\n return excludedAmount\n }\n if (transferFee.transferFeeBasisPoints === MAX_FEE_BASIS_POINTS) {\n return excludedAmount.add(transferFee.maximumFee)\n }\n\n const oneInBasisPoints = new BN(MAX_FEE_BASIS_POINTS)\n const denominator = oneInBasisPoints.subn(\n transferFee.transferFeeBasisPoints\n )\n const rawPreFeeAmount = excludedAmount\n .mul(oneInBasisPoints)\n .add(denominator)\n .subn(1)\n .div(denominator)\n if (rawPreFeeAmount.sub(excludedAmount).gte(transferFee.maximumFee)) {\n return excludedAmount.add(transferFee.maximumFee)\n }\n return rawPreFeeAmount\n}\n\n/**\n * The amount to send so that excludedAmount arrives after the transfer fee,\n * and the fee; the program's calculate_transfer_fee_included_amount.\n */\nexport function calculateTransferFeeIncludedAmount(\n transferFee: EpochTransferFee | null,\n excludedAmount: BN\n): TransferFeeAmount {\n if (excludedAmount.isZero()) {\n return { amount: ZERO, transferFee: ZERO }\n }\n if (!transferFee || isZeroTransferFee(transferFee)) {\n return { amount: excludedAmount, transferFee: ZERO }\n }\n\n const preFeeAmount = calculatePreFeeAmount(transferFee, excludedAmount)\n if (preFeeAmount.gt(U64_MAX)) {\n throw new Error(ProgramError.MathOverflow)\n }\n const fee = calculateTransferFeeExcludedAmount(\n transferFee,\n preFeeAmount\n ).transferFee\n const includedAmount = excludedAmount.add(fee)\n const verification = calculateTransferFeeExcludedAmount(\n transferFee,\n includedAmount\n ).transferFee\n if (!fee.eq(verification)) {\n throw new Error(ProgramError.FeeInverseIsIncorrect)\n }\n\n return { amount: includedAmount, transferFee: fee }\n}\n","import BN from 'bn.js'\nimport { MAX_BASIS_POINT, ONE_Q64, U16_MAX } from '../../constants'\nimport { pow, SafeMath } from '../safeMath'\nimport { BaseFeeMode } from '../../types'\nimport { ProgramError } from '../errors'\n\n/** The fee after every period has elapsed. */\nexport function getFeeSchedulerMinBaseFeeNumerator(\n cliffFeeNumerator: BN,\n numberOfPeriod: number,\n reductionFactor: BN,\n feeSchedulerMode: BaseFeeMode\n): BN {\n return getBaseFeeNumeratorByPeriod(\n cliffFeeNumerator,\n numberOfPeriod,\n new BN(numberOfPeriod),\n reductionFactor,\n feeSchedulerMode\n )\n}\n\n/** The fee in a period, which stops decaying after numberOfPeriod. */\nexport function getBaseFeeNumeratorByPeriod(\n cliffFeeNumerator: BN,\n numberOfPeriod: number,\n period: BN,\n reductionFactor: BN,\n feeSchedulerMode: BaseFeeMode\n): BN {\n const periodNumber = BN.min(period, new BN(numberOfPeriod)).toNumber()\n if (periodNumber > U16_MAX) {\n throw new Error(ProgramError.MathOverflow)\n }\n\n switch (feeSchedulerMode) {\n case BaseFeeMode.FeeSchedulerLinear:\n return getFeeNumeratorOnLinearFeeScheduler(\n cliffFeeNumerator,\n reductionFactor,\n periodNumber\n )\n case BaseFeeMode.FeeSchedulerExponential:\n return getFeeNumeratorOnExponentialFeeScheduler(\n cliffFeeNumerator,\n reductionFactor,\n periodNumber\n )\n default:\n throw new Error(ProgramError.InvalidBaseFeeMode)\n }\n}\n\n/** fee = cliff_fee_numerator - period * reduction_factor */\nexport function getFeeNumeratorOnLinearFeeScheduler(\n cliffFeeNumerator: BN,\n reductionFactor: BN,\n period: number\n): BN {\n return SafeMath.sub(\n cliffFeeNumerator,\n SafeMath.mul(new BN(period), reductionFactor)\n )\n}\n\n/** fee = cliff_fee_numerator * (1 - reduction_factor / 10_000)^period in Q64 */\nexport function getFeeNumeratorOnExponentialFeeScheduler(\n cliffFeeNumerator: BN,\n reductionFactor: BN,\n period: number\n): BN {\n if (period === 0) {\n return cliffFeeNumerator\n }\n const bps = SafeMath.div(\n SafeMath.shl(reductionFactor, 64),\n new BN(MAX_BASIS_POINT)\n )\n const base = SafeMath.sub(ONE_Q64, bps)\n const result = pow(base, new BN(period))\n return SafeMath.div(SafeMath.mul(cliffFeeNumerator, result), ONE_Q64)\n}\n\n/** The fee at currentPoint, with period = (currentPoint - activationPoint) / periodFrequency. */\nexport function getBaseFeeNumerator(\n cliffFeeNumerator: BN,\n numberOfPeriod: number,\n periodFrequency: BN,\n reductionFactor: BN,\n feeSchedulerMode: BaseFeeMode,\n currentPoint: BN,\n activationPoint: BN\n): BN {\n if (periodFrequency.isZero()) {\n return cliffFeeNumerator\n }\n const period = SafeMath.div(\n SafeMath.sub(currentPoint, activationPoint),\n periodFrequency\n )\n return getBaseFeeNumeratorByPeriod(\n cliffFeeNumerator,\n numberOfPeriod,\n period,\n reductionFactor,\n feeSchedulerMode\n )\n}\n","import BN from 'bn.js'\nimport { FEE_DENOMINATOR, U64_MAX } from '../constants'\nimport { Rounding } from '../types'\nimport { mulDiv } from './utilsMath'\nimport { SafeMath } from './safeMath'\nimport { ProgramError } from './errors'\n\n/**\n * [amount after the fee, fee], with the fee rounded up;\n * the program's PoolFeesConfig::get_excluded_fee_amount.\n */\nexport function getExcludedFeeAmount(\n tradeFeeNumerator: BN,\n includedFeeAmount: BN\n): [BN, BN] {\n const tradingFee = mulDiv(\n includedFeeAmount,\n tradeFeeNumerator,\n new BN(FEE_DENOMINATOR),\n Rounding.Up\n )\n return [SafeMath.sub(includedFeeAmount, tradingFee), tradingFee]\n}\n\n/**\n * [amount before the fee, fee], rounded up and bounded by u64;\n * the program's PoolFeesConfig::get_included_fee_amount.\n */\nexport function getIncludedFeeAmount(\n tradeFeeNumerator: BN,\n excludedFeeAmount: BN\n): [BN, BN] {\n const includedFeeAmount = mulDiv(\n excludedFeeAmount,\n new BN(FEE_DENOMINATOR),\n SafeMath.sub(new BN(FEE_DENOMINATOR), tradeFeeNumerator),\n Rounding.Up\n )\n if (includedFeeAmount.gt(U64_MAX)) {\n throw new Error(ProgramError.TypeCastFailed)\n }\n return [\n includedFeeAmount,\n SafeMath.sub(includedFeeAmount, excludedFeeAmount),\n ]\n}\n","import BN from 'bn.js'\nimport { mulDiv, sqrt, toNumerator } from '../utilsMath'\nimport { SafeMath } from '../safeMath'\nimport { FEE_DENOMINATOR, MAX_FEE_NUMERATOR, U64_MAX } from '../../constants'\nimport { Rounding, TradeDirection } from '../../types'\nimport { ProgramError } from '../errors'\nimport { getExcludedFeeAmount, getIncludedFeeAmount } from '../feeAmount'\n\n/** The rate limiter only applies to quote-to-base swaps inside maxLimiterDuration after activation. */\nexport function isRateLimiterApplied(\n currentPoint: BN,\n activationPoint: BN,\n tradeDirection: TradeDirection,\n maxLimiterDuration: BN,\n referenceAmount: BN,\n feeIncrementBps: BN\n): boolean {\n if (\n isZeroRateLimiter(referenceAmount, maxLimiterDuration, feeIncrementBps)\n ) {\n return false\n }\n if (tradeDirection === TradeDirection.BaseToQuote) {\n return false\n }\n return currentPoint.lte(activationPoint.add(maxLimiterDuration))\n}\n\nexport function isZeroRateLimiter(\n referenceAmount: BN,\n maxLimiterDuration: BN,\n feeIncrementBps: BN\n): boolean {\n return (\n referenceAmount.isZero() &&\n maxLimiterDuration.isZero() &&\n feeIncrementBps.isZero()\n )\n}\n\nexport function isNonZeroRateLimiter(\n referenceAmount: BN,\n maxLimiterDuration: BN,\n feeIncrementBps: BN\n): boolean {\n return (\n !referenceAmount.isZero() &&\n !maxLimiterDuration.isZero() &&\n !feeIncrementBps.isZero()\n )\n}\n\n/** Number of fee increments between the cliff fee and MAX_FEE_NUMERATOR. */\nexport function getMaxIndex(cliffFeeNumerator: BN, feeIncrementBps: BN): BN {\n const deltaNumerator = SafeMath.sub(\n new BN(MAX_FEE_NUMERATOR),\n cliffFeeNumerator\n )\n return SafeMath.div(\n deltaNumerator,\n toNumerator(feeIncrementBps, new BN(FEE_DENOMINATOR))\n )\n}\n\n/**\n * The amounts at which the fee reaches its maximum:\n * [excluded fee amount, included fee amount, whether the included amount overflowed u64].\n */\nexport function getCheckedAmounts(\n cliffFeeNumerator: BN,\n referenceAmount: BN,\n feeIncrementBps: BN\n): [BN, BN, boolean] {\n const maxIndex = getMaxIndex(cliffFeeNumerator, feeIncrementBps)\n const maxIndexInputAmount = maxIndex.addn(1).mul(referenceAmount)\n const isOverflow = maxIndexInputAmount.gt(U64_MAX)\n const checkedIncludedFeeAmount = isOverflow ? U64_MAX : maxIndexInputAmount\n const checkedExcludedFeeAmount = getRateLimiterExcludedFeeAmount(\n cliffFeeNumerator,\n referenceAmount,\n feeIncrementBps,\n checkedIncludedFeeAmount\n )\n return [checkedExcludedFeeAmount, checkedIncludedFeeAmount, isOverflow]\n}\n\n/**\n * Fee numerator for an amount that excludes the fee. The included amount is\n * recovered from the excluded one, so this is not exact; the program only\n * requires the result to be at or above the cliff fee, and it leaves out the\n * dynamic fee.\n */\nexport function getFeeNumeratorFromExcludedAmount(\n cliffFeeNumerator: BN,\n referenceAmount: BN,\n feeIncrementBps: BN,\n excludedFeeAmount: BN\n): BN {\n const excludedFeeReferenceAmount = getRateLimiterExcludedFeeAmount(\n cliffFeeNumerator,\n referenceAmount,\n feeIncrementBps,\n referenceAmount\n )\n if (excludedFeeAmount.lte(excludedFeeReferenceAmount)) {\n return cliffFeeNumerator\n }\n\n const [checkedExcludedFeeAmount, checkedIncludedFeeAmount, isOverflow] =\n getCheckedAmounts(cliffFeeNumerator, referenceAmount, feeIncrementBps)\n\n if (excludedFeeAmount.eq(checkedExcludedFeeAmount)) {\n return getFeeNumeratorFromIncludedAmount(\n cliffFeeNumerator,\n referenceAmount,\n feeIncrementBps,\n checkedIncludedFeeAmount\n )\n }\n\n let includedFeeAmount: BN\n if (excludedFeeAmount.lt(checkedExcludedFeeAmount)) {\n // With x0 the reference amount, c the cliff fee, i the fee increment,\n // d the fee denominator and input_amount = x0 * (a + 1):\n // fee = input_amount * (c + i * (input_amount / x0 - 1) / 2) / d\n // ex = input_amount - fee\n // which rearranges to the quadratic\n // i * input_amount^2 - (2*d*x0 + i*x0 - 2*c*x0) * input_amount + 2*ex*d*x0 = 0\n // The smaller root is the input amount, because the larger one lies\n // past x0 * (max_index + 1), where the fee is already capped.\n const two = new BN(2)\n const i = toNumerator(feeIncrementBps, new BN(FEE_DENOMINATOR))\n const x0 = referenceAmount\n const d = new BN(FEE_DENOMINATOR)\n const c = cliffFeeNumerator\n const y = two.mul(d).mul(x0).add(i.mul(x0)).sub(two.mul(c).mul(x0))\n const z = two.mul(excludedFeeAmount).mul(d).mul(x0)\n const discriminant = y.mul(y).sub(new BN(4).mul(i).mul(z))\n const wholePeriodsInput = y.sub(sqrt(discriminant)).div(two.mul(i))\n\n // the integer root falls short of ex; the remainder pays the fee of the next tier\n const aPlusOne = wholePeriodsInput.div(x0)\n const excludedFeeRemainingAmount = SafeMath.sub(\n excludedFeeAmount,\n getRateLimiterExcludedFeeAmount(\n cliffFeeNumerator,\n referenceAmount,\n feeIncrementBps,\n wholePeriodsInput\n )\n )\n const [includedFeeRemainingAmount] = getIncludedFeeAmount(\n c.add(i.mul(aPlusOne)),\n excludedFeeRemainingAmount\n )\n includedFeeAmount = wholePeriodsInput.add(includedFeeRemainingAmount)\n } else {\n if (isOverflow) {\n throw new Error(ProgramError.MathOverflow)\n }\n // past the checked amount every unit pays the maximum fee\n const excludedFeeRemainingAmount = SafeMath.sub(\n excludedFeeAmount,\n checkedExcludedFeeAmount\n )\n const [includedFeeRemainingAmount] = getIncludedFeeAmount(\n new BN(MAX_FEE_NUMERATOR),\n excludedFeeRemainingAmount\n )\n includedFeeAmount = checkedIncludedFeeAmount.add(\n includedFeeRemainingAmount\n )\n }\n\n const tradingFee = SafeMath.sub(includedFeeAmount, excludedFeeAmount)\n const feeNumerator = mulDiv(\n tradingFee,\n new BN(FEE_DENOMINATOR),\n includedFeeAmount,\n Rounding.Up\n )\n if (feeNumerator.lt(cliffFeeNumerator)) {\n throw new Error(ProgramError.UndeterminedError)\n }\n return feeNumerator\n}\n\n/** Amount after the rate limiter fee for an amount that includes it. */\nexport function getRateLimiterExcludedFeeAmount(\n cliffFeeNumerator: BN,\n referenceAmount: BN,\n feeIncrementBps: BN,\n includedFeeAmount: BN\n): BN {\n const feeNumerator = getFeeNumeratorFromIncludedAmount(\n cliffFeeNumerator,\n referenceAmount,\n feeIncrementBps,\n includedFeeAmount\n )\n return getExcludedFeeAmount(feeNumerator, includedFeeAmount)[0]\n}\n\n/** The output of a swap of exactly the reference amount, which pays the cliff fee. */\nexport function getMaxOutAmountWithMinBaseFee(\n cliffFeeNumerator: BN,\n referenceAmount: BN,\n feeIncrementBps: BN\n): BN {\n return getRateLimiterExcludedFeeAmount(\n cliffFeeNumerator,\n referenceAmount,\n feeIncrementBps,\n referenceAmount\n )\n}\n\n/**\n * Fee numerator for an amount that includes the fee. Each whole reference\n * amount above the first pays one more fee increment, up to the maximum fee.\n */\nexport function getFeeNumeratorFromIncludedAmount(\n cliffFeeNumerator: BN,\n referenceAmount: BN,\n feeIncrementBps: BN,\n includedFeeAmount: BN\n): BN {\n if (includedFeeAmount.lte(referenceAmount)) {\n return cliffFeeNumerator\n }\n\n const c = cliffFeeNumerator\n const diff = includedFeeAmount.sub(referenceAmount)\n const a = diff.div(referenceAmount)\n const b = diff.mod(referenceAmount)\n const maxIndex = getMaxIndex(cliffFeeNumerator, feeIncrementBps)\n const i = toNumerator(feeIncrementBps, new BN(FEE_DENOMINATOR))\n const x0 = referenceAmount\n const one = new BN(1)\n const two = new BN(2)\n\n let tradingFeeNumerator: BN\n if (a.lt(maxIndex)) {\n const numerator1 = c\n .add(c.mul(a))\n .add(i.mul(a).mul(a.add(one)).div(two))\n const numerator2 = c.add(i.mul(a.add(one)))\n tradingFeeNumerator = x0.mul(numerator1).add(b.mul(numerator2))\n } else {\n const numerator1 = c\n .add(c.mul(maxIndex))\n .add(i.mul(maxIndex).mul(maxIndex.add(one)).div(two))\n const leftAmount = a.sub(maxIndex).mul(x0).add(b)\n tradingFeeNumerator = x0\n .mul(numerator1)\n .add(leftAmount.mul(new BN(MAX_FEE_NUMERATOR)))\n }\n\n const denominator = new BN(FEE_DENOMINATOR)\n const tradingFee = tradingFeeNumerator\n .add(denominator)\n .sub(one)\n .div(denominator)\n\n // numerator = trading_fee * FEE_DENOMINATOR / input_amount, rounded up\n return mulDiv(\n tradingFee,\n new BN(FEE_DENOMINATOR),\n includedFeeAmount,\n Rounding.Up\n )\n}\n","import BN from 'bn.js'\nimport { TradeDirection, BaseFeeMode, type BaseFeeHandler } from '../../types'\nimport {\n getFeeNumeratorFromIncludedAmount,\n getFeeNumeratorFromExcludedAmount,\n isRateLimiterApplied,\n} from './rateLimiter'\nimport {\n getBaseFeeNumerator,\n getFeeSchedulerMinBaseFeeNumerator,\n} from './feeScheduler'\nimport { ProgramError } from '../errors'\n\nexport class FeeRateLimiter implements BaseFeeHandler {\n constructor(\n public cliffFeeNumerator: BN,\n public feeIncrementBps: number,\n public maxLimiterDuration: BN,\n public referenceAmount: BN\n ) {}\n\n getMinBaseFeeNumerator(): BN {\n return this.cliffFeeNumerator\n }\n\n private isApplied(\n currentPoint: BN,\n activationPoint: BN,\n tradeDirection: TradeDirection\n ): boolean {\n return isRateLimiterApplied(\n currentPoint,\n activationPoint,\n tradeDirection,\n this.maxLimiterDuration,\n this.referenceAmount,\n new BN(this.feeIncrementBps)\n )\n }\n\n getBaseFeeNumeratorFromIncludedFeeAmount(\n currentPoint: BN,\n activationPoint: BN,\n tradeDirection: TradeDirection,\n includedFeeAmount: BN\n ): BN {\n if (!this.isApplied(currentPoint, activationPoint, tradeDirection)) {\n return this.cliffFeeNumerator\n }\n return getFeeNumeratorFromIncludedAmount(\n this.cliffFeeNumerator,\n this.referenceAmount,\n new BN(this.feeIncrementBps),\n includedFeeAmount\n )\n }\n\n getBaseFeeNumeratorFromExcludedFeeAmount(\n currentPoint: BN,\n activationPoint: BN,\n tradeDirection: TradeDirection,\n excludedFeeAmount: BN\n ): BN {\n if (!this.isApplied(currentPoint, activationPoint, tradeDirection)) {\n return this.cliffFeeNumerator\n }\n return getFeeNumeratorFromExcludedAmount(\n this.cliffFeeNumerator,\n this.referenceAmount,\n new BN(this.feeIncrementBps),\n excludedFeeAmount\n )\n }\n}\n\nexport class FeeScheduler implements BaseFeeHandler {\n constructor(\n public cliffFeeNumerator: BN,\n public numberOfPeriod: number,\n public periodFrequency: BN,\n public reductionFactor: BN,\n public feeSchedulerMode: BaseFeeMode\n ) {}\n\n getMinBaseFeeNumerator(): BN {\n return getFeeSchedulerMinBaseFeeNumerator(\n this.cliffFeeNumerator,\n this.numberOfPeriod,\n this.reductionFactor,\n this.feeSchedulerMode\n )\n }\n\n // a scheduler's fee depends on the point, not on the amount\n getBaseFeeNumeratorFromIncludedFeeAmount(\n currentPoint: BN,\n activationPoint: BN\n ): BN {\n return getBaseFeeNumerator(\n this.cliffFeeNumerator,\n this.numberOfPeriod,\n this.periodFrequency,\n this.reductionFactor,\n this.feeSchedulerMode,\n currentPoint,\n activationPoint\n )\n }\n\n getBaseFeeNumeratorFromExcludedFeeAmount(\n currentPoint: BN,\n activationPoint: BN\n ): BN {\n return this.getBaseFeeNumeratorFromIncludedFeeAmount(\n currentPoint,\n activationPoint\n )\n }\n}\n\n/**\n * The handler for a base fee config. The factors are the scheduler's\n * numberOfPeriod, periodFrequency and reductionFactor, or the rate limiter's\n * feeIncrementBps, maxLimiterDuration and referenceAmount.\n */\nexport function getBaseFeeHandler(\n cliffFeeNumerator: BN,\n firstFactor: number,\n secondFactor: BN,\n thirdFactor: BN,\n baseFeeMode: BaseFeeMode\n): BaseFeeHandler {\n switch (baseFeeMode) {\n case BaseFeeMode.FeeSchedulerLinear:\n case BaseFeeMode.FeeSchedulerExponential:\n return new FeeScheduler(\n cliffFeeNumerator,\n firstFactor,\n secondFactor,\n thirdFactor,\n baseFeeMode\n )\n case BaseFeeMode.RateLimiter:\n return new FeeRateLimiter(\n cliffFeeNumerator,\n firstFactor,\n secondFactor,\n thirdFactor\n )\n default:\n throw new Error(ProgramError.InvalidBaseFeeMode)\n }\n}\n","import {\n DYNAMIC_FEE_ROUNDING_OFFSET,\n DYNAMIC_FEE_SCALING_FACTOR,\n} from '../../constants'\nimport type { QuoteDynamicFee, QuoteVolatilityTracker } from '../../types'\nimport { SafeMath } from '../safeMath'\nimport BN from 'bn.js'\n\nexport function isDynamicFeeEnabled(dynamicFee: QuoteDynamicFee): boolean {\n return dynamicFee.initialized !== 0\n}\n\n/**\n * ((volatility_accumulator * bin_step)^2 * variable_fee_control + 99_999_999_999) / 100_000_000_000,\n * or 0 when the dynamic fee is not initialized.\n */\nexport function getVariableFeeNumerator(\n dynamicFee: QuoteDynamicFee,\n volatilityTracker: QuoteVolatilityTracker\n): BN {\n if (!isDynamicFeeEnabled(dynamicFee)) {\n return new BN(0)\n }\n const volatilityTimesBinStep = SafeMath.mul(\n volatilityTracker.volatilityAccumulator,\n new BN(dynamicFee.binStep)\n )\n const vFee = SafeMath.mul(\n SafeMath.mul(volatilityTimesBinStep, volatilityTimesBinStep),\n new BN(dynamicFee.variableFeeControl)\n )\n return SafeMath.div(\n SafeMath.add(vFee, DYNAMIC_FEE_ROUNDING_OFFSET),\n DYNAMIC_FEE_SCALING_FACTOR\n )\n}\n","import BN from 'bn.js'\nimport { SafeMath } from './safeMath'\nimport { mulDiv } from './utilsMath'\nimport {\n HOST_FEE_PERCENT,\n MAX_FEE_NUMERATOR,\n PROTOCOL_FEE_PERCENT,\n} from '../constants'\nimport {\n CollectFeeMode,\n Rounding,\n TradeDirection,\n type FeeMode,\n type FeeOnAmountResult,\n type QuoteDynamicFee,\n type QuotePoolFees,\n type QuoteVolatilityTracker,\n} from '../types'\nimport { getBaseFeeHandler } from './poolFees/baseFee'\nimport { getVariableFeeNumerator } from './poolFees/dynamicFee'\nimport { ProgramError } from './errors'\nimport { getExcludedFeeAmount } from './feeAmount'\n\nexport { getExcludedFeeAmount, getIncludedFeeAmount } from './feeAmount'\n\n// (collect fee mode, trade direction) -> [fees on input, fees on base token]\nconst FEE_MODES: Partial<\n Record<CollectFeeMode, Partial<Record<TradeDirection, [boolean, boolean]>>>\n> = {\n [CollectFeeMode.QuoteToken]: {\n [TradeDirection.BaseToQuote]: [false, false],\n [TradeDirection.QuoteToBase]: [true, false],\n },\n [CollectFeeMode.OutputToken]: {\n [TradeDirection.BaseToQuote]: [false, false],\n [TradeDirection.QuoteToBase]: [false, true],\n },\n}\n\n/** Which side of a swap the fee is taken from; the program's FeeMode::get_fee_mode. */\nexport function getFeeMode(\n collectFeeMode: CollectFeeMode,\n tradeDirection: TradeDirection,\n hasReferral: boolean\n): FeeMode {\n const mode = FEE_MODES[collectFeeMode]?.[tradeDirection]\n if (!mode) {\n throw new Error(ProgramError.InvalidCollectFeeMode)\n }\n const [feesOnInput, feesOnBaseToken] = mode\n return { feesOnInput, feesOnBaseToken, hasReferral }\n}\n\nfunction baseFeeHandlerOf(poolFees: QuotePoolFees) {\n const { baseFee } = poolFees\n return getBaseFeeHandler(\n baseFee.cliffFeeNumerator,\n baseFee.firstFactor,\n baseFee.secondFactor,\n baseFee.thirdFactor,\n baseFee.baseFeeMode\n )\n}\n\n/** Base plus dynamic fee numerator for an amount that includes the fee. */\nexport function getTotalFeeNumeratorFromIncludedFeeAmount(\n poolFees: QuotePoolFees,\n volatilityTracker: QuoteVolatilityTracker,\n currentPoint: BN,\n activationPoint: BN,\n includedFeeAmount: BN,\n tradeDirection: TradeDirection\n): BN {\n const baseFeeNumerator = baseFeeHandlerOf(\n poolFees\n ).getBaseFeeNumeratorFromIncludedFeeAmount(\n currentPoint,\n activationPoint,\n tradeDirection,\n includedFeeAmount\n )\n return getTotalFeeNumerator(\n baseFeeNumerator,\n poolFees.dynamicFee,\n volatilityTracker\n )\n}\n\n/** Base plus dynamic fee numerator for an amount that excludes the fee. */\nexport function getTotalFeeNumeratorFromExcludedFeeAmount(\n poolFees: QuotePoolFees,\n volatilityTracker: QuoteVolatilityTracker,\n currentPoint: BN,\n activationPoint: BN,\n excludedFeeAmount: BN,\n tradeDirection: TradeDirection\n): BN {\n const baseFeeNumerator = baseFeeHandlerOf(\n poolFees\n ).getBaseFeeNumeratorFromExcludedFeeAmount(\n currentPoint,\n activationPoint,\n tradeDirection,\n excludedFeeAmount\n )\n return getTotalFeeNumerator(\n baseFeeNumerator,\n poolFees.dynamicFee,\n volatilityTracker\n )\n}\n\n/** Base plus dynamic fee numerator, capped at MAX_FEE_NUMERATOR. */\nexport function getTotalFeeNumerator(\n baseFeeNumerator: BN,\n dynamicFee: QuoteDynamicFee,\n volatilityTracker: QuoteVolatilityTracker\n): BN {\n return BN.min(\n SafeMath.add(\n getVariableFeeNumerator(dynamicFee, volatilityTracker),\n baseFeeNumerator\n ),\n new BN(MAX_FEE_NUMERATOR)\n )\n}\n\n/** Take the fee out of an amount and split it; the program's get_fee_on_amount. */\nexport function getFeeOnAmount(\n tradeFeeNumerator: BN,\n amount: BN,\n hasReferral: boolean\n): FeeOnAmountResult {\n const [amountAfterFee, feeAmount] = getExcludedFeeAmount(\n tradeFeeNumerator,\n amount\n )\n const [tradingFee, protocolFee, referralFee] = splitFees(\n feeAmount,\n hasReferral\n )\n return { amount: amountAfterFee, tradingFee, protocolFee, referralFee }\n}\n\n/**\n * [trading fee, protocol fee, referral fee]: the protocol takes\n * PROTOCOL_FEE_PERCENT of the fee and the referrer HOST_FEE_PERCENT of that,\n * both rounded down.\n */\nexport function splitFees(feeAmount: BN, hasReferral: boolean): [BN, BN, BN] {\n const protocolFee = mulDiv(\n feeAmount,\n new BN(PROTOCOL_FEE_PERCENT),\n new BN(100),\n Rounding.Down\n )\n const tradingFee = SafeMath.sub(feeAmount, protocolFee)\n const referralFee = hasReferral\n ? mulDiv(\n protocolFee,\n new BN(HOST_FEE_PERCENT),\n new BN(100),\n Rounding.Down\n )\n : new BN(0)\n return [tradingFee, SafeMath.sub(protocolFee, referralFee), referralFee]\n}\n","import BN from 'bn.js'\nimport { SafeMath } from './safeMath'\nimport {\n getDeltaAmountBaseUnsigned,\n getDeltaAmountBaseUnsigned256,\n getDeltaAmountQuoteUnsigned,\n getDeltaAmountQuoteUnsigned256,\n getNextSqrtPriceFromInput,\n getNextSqrtPriceFromOutput,\n} from './curve'\nimport {\n getTotalFeeNumeratorFromIncludedFeeAmount,\n getTotalFeeNumeratorFromExcludedFeeAmount,\n getIncludedFeeAmount,\n splitFees,\n getFeeOnAmount,\n getFeeMode,\n} from './feeMath'\nimport { getBaseFeeHandler } from './poolFees/baseFee'\nimport {\n Rounding,\n TradeDirection,\n type FeeMode,\n type QuotePoolConfig,\n type QuoteTransferFees,\n type QuoteVirtualPool,\n type SwapAmount,\n type SwapQuote2Result,\n type SwapQuoteResult,\n type SwapResult,\n type SwapResult2,\n} from '../types'\nimport {\n calculateTransferFeeExcludedAmount,\n calculateTransferFeeIncludedAmount,\n resolveSwapTransferFees,\n} from './transferFee'\nimport { MAX_BASIS_POINT, U64_MAX } from '../constants'\nimport { ProgramError } from './errors'\n\nexport type SwapAmountFromOutput = {\n amountIn: BN\n nextSqrtPrice: BN\n}\n\ntype SwapFees = {\n tradingFee: BN\n protocolFee: BN\n referralFee: BN\n}\n\ntype Curve = Pick<QuotePoolConfig, 'curve' | 'sqrtStartPrice'>\n\nconst ZERO = new BN(0)\nconst NO_FEES: SwapFees = {\n tradingFee: ZERO,\n protocolFee: ZERO,\n referralFee: ZERO,\n}\n\nfunction addU64(total: BN, amount: BN): BN {\n const sum = total.add(amount)\n if (sum.gt(U64_MAX)) {\n throw new Error(ProgramError.MathOverflow)\n }\n return sum\n}\n\nfunction u64(amount: BN): BN {\n if (amount.gt(U64_MAX)) {\n throw new Error(ProgramError.MathOverflow)\n }\n return amount\n}\n\nfunction assertSlippageBps(slippageBps: number): void {\n if (slippageBps < 0 || slippageBps > MAX_BASIS_POINT) {\n throw new Error(`slippageBps must be between 0 and ${MAX_BASIS_POINT}`)\n }\n}\n\nfunction minimumAmountOutWithSlippage(amount: BN, slippageBps: number): BN {\n assertSlippageBps(slippageBps)\n return amount.muln(MAX_BASIS_POINT - slippageBps).divn(MAX_BASIS_POINT)\n}\n\nfunction maximumAmountInWithSlippage(amount: BN, slippageBps: number): BN {\n assertSlippageBps(slippageBps)\n return amount.muln(MAX_BASIS_POINT + slippageBps).divn(MAX_BASIS_POINT)\n}\n\n// the caller still has to bundle the swap after initialize pool in the same transaction, without CPI\nfunction isFirstSwapWithMinFee(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n hasReferral: boolean,\n eligibleForFirstSwapWithMinFee: boolean\n): boolean {\n return (\n eligibleForFirstSwapWithMinFee &&\n !hasReferral &&\n config.enableFirstSwapWithMinFee === 1 &&\n virtualPool.poolState.hasSwap === 0\n )\n}\n\nfunction beginSwapQuote(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n swapBaseForQuote: boolean,\n amount: BN,\n hasReferral: boolean,\n transferFees?: QuoteTransferFees\n) {\n if (amount.isZero()) {\n throw new Error(ProgramError.AmountIsZero)\n }\n if (\n virtualPool.poolState.quoteReserve.gte(config.migrationQuoteThreshold)\n ) {\n throw new Error(ProgramError.PoolIsCompleted)\n }\n\n const tradeDirection = swapBaseForQuote\n ? TradeDirection.BaseToQuote\n : TradeDirection.QuoteToBase\n\n return {\n tradeDirection,\n feeMode: getFeeMode(config.collectFeeMode, tradeDirection, hasReferral),\n ...resolveSwapTransferFees(config, swapBaseForQuote, transferFees),\n }\n}\n\n/** The total fee numerator for a swap, or the minimum base fee for an eligible first swap. */\nfunction tradeFeeNumerator(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n currentPoint: BN,\n tradeDirection: TradeDirection,\n amount: BN,\n amountExcludesFee: boolean,\n eligibleForFirstSwapWithMinFee: boolean\n): BN {\n if (eligibleForFirstSwapWithMinFee) {\n const { baseFee } = config.poolFees\n return getBaseFeeHandler(\n baseFee.cliffFeeNumerator,\n baseFee.firstFactor,\n baseFee.secondFactor,\n baseFee.thirdFactor,\n baseFee.baseFeeMode\n ).getMinBaseFeeNumerator()\n }\n const totalFeeNumerator = amountExcludesFee\n ? getTotalFeeNumeratorFromExcludedFeeAmount\n : getTotalFeeNumeratorFromIncludedFeeAmount\n return totalFeeNumerator(\n config.poolFees,\n virtualPool.poolState.volatilityTracker,\n currentPoint,\n virtualPool.poolState.activationPoint,\n amount,\n tradeDirection\n )\n}\n\nfunction takeFee(\n feeNumerator: BN,\n includedFeeAmount: BN,\n hasReferral: boolean\n): { amount: BN; fees: SwapFees } {\n const { amount, ...fees } = getFeeOnAmount(\n feeNumerator,\n includedFeeAmount,\n hasReferral\n )\n return { amount, fees }\n}\n\nfunction addFee(\n feeNumerator: BN,\n excludedFeeAmount: BN,\n hasReferral: boolean\n): { amount: BN; fees: SwapFees } {\n const [amount, feeAmount] = getIncludedFeeAmount(\n feeNumerator,\n excludedFeeAmount\n )\n const [tradingFee, protocolFee, referralFee] = splitFees(\n feeAmount,\n hasReferral\n )\n return { amount, fees: { tradingFee, protocolFee, referralFee } }\n}\n\nfunction swapFromInput(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n tradeDirection: TradeDirection,\n amountIn: BN\n): SwapAmount {\n return tradeDirection === TradeDirection.BaseToQuote\n ? calculateBaseToQuoteFromAmountIn(\n config,\n virtualPool.poolState.sqrtPrice,\n amountIn\n )\n : calculateQuoteToBaseFromAmountIn(\n config,\n virtualPool.poolState.sqrtPrice,\n amountIn,\n config.migrationSqrtPrice\n )\n}\n\n/** The program's get_swap_result_from_exact_input. */\nexport function getSwapResultFromExactInput(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n amountIn: BN,\n feeMode: FeeMode,\n tradeDirection: TradeDirection,\n currentPoint: BN,\n eligibleForFirstSwapWithMinFee: boolean\n): SwapResult2 {\n const feeNumerator = tradeFeeNumerator(\n virtualPool,\n config,\n currentPoint,\n tradeDirection,\n amountIn,\n false,\n eligibleForFirstSwapWithMinFee\n )\n\n let fees = NO_FEES\n let actualAmountIn = amountIn\n if (feeMode.feesOnInput) {\n ;({ amount: actualAmountIn, fees } = takeFee(\n feeNumerator,\n amountIn,\n feeMode.hasReferral\n ))\n }\n\n const { outputAmount, nextSqrtPrice, amountLeft } = swapFromInput(\n virtualPool,\n config,\n tradeDirection,\n actualAmountIn\n )\n if (!amountLeft.isZero()) {\n throw new Error(ProgramError.InsufficientLiquidity)\n }\n\n let actualAmountOut = outputAmount\n if (!feeMode.feesOnInput) {\n ;({ amount: actualAmountOut, fees } = takeFee(\n feeNumerator,\n outputAmount,\n feeMode.hasReferral\n ))\n }\n\n return {\n amountLeft,\n includedFeeInputAmount: amountIn,\n excludedFeeInputAmount: actualAmountIn,\n outputAmount: actualAmountOut,\n nextSqrtPrice,\n ...fees,\n }\n}\n\n/** The legacy swap result shape, derived like the program's SwapResult2::get_swap_result. */\nexport function getSwapResult(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n amountIn: BN,\n feeMode: FeeMode,\n tradeDirection: TradeDirection,\n currentPoint: BN,\n eligibleForFirstSwapWithMinFee: boolean\n): SwapResult {\n const result = getSwapResultFromExactInput(\n virtualPool,\n config,\n amountIn,\n feeMode,\n tradeDirection,\n currentPoint,\n eligibleForFirstSwapWithMinFee\n )\n return {\n actualInputAmount: result.excludedFeeInputAmount,\n outputAmount: result.outputAmount,\n nextSqrtPrice: result.nextSqrtPrice,\n tradingFee: result.tradingFee,\n protocolFee: result.protocolFee,\n referralFee: result.referralFee,\n }\n}\n\n/** The program's get_swap_result_from_partial_input. */\nexport function getSwapResultFromPartialInput(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n amountIn: BN,\n feeMode: FeeMode,\n tradeDirection: TradeDirection,\n currentPoint: BN,\n eligibleForFirstSwapWithMinFee: boolean\n): SwapResult2 {\n const feeNumerator = tradeFeeNumerator(\n virtualPool,\n config,\n currentPoint,\n tradeDirection,\n amountIn,\n false,\n eligibleForFirstSwapWithMinFee\n )\n\n let fees = NO_FEES\n let actualAmountIn = amountIn\n if (feeMode.feesOnInput) {\n ;({ amount: actualAmountIn, fees } = takeFee(\n feeNumerator,\n amountIn,\n feeMode.hasReferral\n ))\n }\n\n const { outputAmount, nextSqrtPrice, amountLeft } = swapFromInput(\n virtualPool,\n config,\n tradeDirection,\n actualAmountIn\n )\n\n // when the curve runs out, the fee is recomputed on the part that was swapped\n let includedFeeInputAmount = amountIn\n if (!amountLeft.isZero()) {\n actualAmountIn = SafeMath.sub(actualAmountIn, amountLeft)\n if (feeMode.feesOnInput) {\n const partialFeeNumerator = tradeFeeNumerator(\n virtualPool,\n config,\n currentPoint,\n tradeDirection,\n actualAmountIn,\n true,\n eligibleForFirstSwapWithMinFee\n )\n ;({ amount: includedFeeInputAmount, fees } = addFee(\n partialFeeNumerator,\n actualAmountIn,\n feeMode.hasReferral\n ))\n } else {\n includedFeeInputAmount = actualAmountIn\n }\n }\n\n let actualAmountOut = outputAmount\n if (!feeMode.feesOnInput) {\n ;({ amount: actualAmountOut, fees } = takeFee(\n feeNumerator,\n outputAmount,\n feeMode.hasReferral\n ))\n }\n\n return {\n amountLeft,\n includedFeeInputAmount,\n excludedFeeInputAmount: actualAmountIn,\n outputAmount: actualAmountOut,\n nextSqrtPrice,\n ...fees,\n }\n}\n\n/** The program's get_swap_result_from_exact_output. */\nexport function getSwapResultFromExactOutput(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n amountOut: BN,\n feeMode: FeeMode,\n tradeDirection: TradeDirection,\n currentPoint: BN,\n eligibleForFirstSwapWithMinFee: boolean\n): SwapResult2 {\n let fees = NO_FEES\n let includedFeeOutAmount = amountOut\n if (!feeMode.feesOnInput) {\n const feeNumerator = tradeFeeNumerator(\n virtualPool,\n config,\n currentPoint,\n tradeDirection,\n amountOut,\n true,\n eligibleForFirstSwapWithMinFee\n )\n ;({ amount: includedFeeOutAmount, fees } = addFee(\n feeNumerator,\n amountOut,\n feeMode.hasReferral\n ))\n }\n\n const { amountIn, nextSqrtPrice } =\n tradeDirection === TradeDirection.BaseToQuote\n ? calculateBaseToQuoteFromAmountOut(\n config,\n virtualPool.poolState.sqrtPrice,\n includedFeeOutAmount\n )\n : calculateQuoteToBaseFromAmountOut(\n config,\n virtualPool.poolState.sqrtPrice,\n includedFeeOutAmount\n )\n if (nextSqrtPrice.gt(config.migrationSqrtPrice)) {\n throw new Error(ProgramError.InsufficientLiquidity)\n }\n\n let includedFeeInputAmount = amountIn\n if (feeMode.feesOnInput) {\n const feeNumerator = tradeFeeNumerator(\n virtualPool,\n config,\n currentPoint,\n tradeDirection,\n amountIn,\n true,\n eligibleForFirstSwapWithMinFee\n )\n ;({ amount: includedFeeInputAmount, fees } = addFee(\n feeNumerator,\n amountIn,\n feeMode.hasReferral\n ))\n }\n\n return {\n amountLeft: ZERO,\n includedFeeInputAmount,\n excludedFeeInputAmount: amountIn,\n outputAmount: amountOut,\n nextSqrtPrice,\n ...fees,\n }\n}\n\n// The curve array keeps 20 points for pools created before the 16-point\n// limit; unused points are zero and skipped.\n\n/** Quote received for amountIn base, walking the curve down from currentSqrtPrice. */\nexport function calculateBaseToQuoteFromAmountIn(\n configState: Curve,\n currentSqrtPrice: BN,\n amountIn: BN\n): SwapAmount {\n let totalOutputAmount = ZERO\n let sqrtPrice = currentSqrtPrice\n let amountLeft = amountIn\n\n for (let i = configState.curve.length - 2; i >= 0; i--) {\n const point = configState.curve[i]\n const liquidity = configState.curve[i + 1].liquidity\n if (point.sqrtPrice.isZero() || point.liquidity.isZero()) {\n continue\n }\n if (!point.sqrtPrice.lt(sqrtPrice)) {\n continue\n }\n\n const maxAmountIn = getDeltaAmountBaseUnsigned256(\n point.sqrtPrice,\n sqrtPrice,\n liquidity,\n Rounding.Up\n )\n if (amountLeft.lt(maxAmountIn)) {\n const nextSqrtPrice = getNextSqrtPriceFromInput(\n sqrtPrice,\n liquidity,\n amountLeft,\n true\n )\n totalOutputAmount = addU64(\n totalOutputAmount,\n getDeltaAmountQuoteUnsigned(\n nextSqrtPrice,\n sqrtPrice,\n liquidity,\n Rounding.Down\n )\n )\n sqrtPrice = nextSqrtPrice\n amountLeft = ZERO\n break\n }\n\n totalOutputAmount = addU64(\n totalOutputAmount,\n getDeltaAmountQuoteUnsigned(\n point.sqrtPrice,\n sqrtPrice,\n liquidity,\n Rounding.Down\n )\n )\n sqrtPrice = point.sqrtPrice\n amountLeft = SafeMath.sub(amountLeft, u64(maxAmountIn))\n }\n\n // the first segment runs down to sqrtStartPrice\n if (!amountLeft.isZero()) {\n const liquidity = configState.curve[0].liquidity\n let nextSqrtPrice = getNextSqrtPriceFromInput(\n sqrtPrice,\n liquidity,\n amountLeft,\n true\n )\n if (nextSqrtPrice.lt(configState.sqrtStartPrice)) {\n nextSqrtPrice = configState.sqrtStartPrice\n amountLeft = SafeMath.sub(\n amountLeft,\n getDeltaAmountBaseUnsigned(\n nextSqrtPrice,\n sqrtPrice,\n liquidity,\n Rounding.Up\n )\n )\n } else {\n amountLeft = ZERO\n }\n totalOutputAmount = addU64(\n totalOutputAmount,\n getDeltaAmountQuoteUnsigned(\n nextSqrtPrice,\n sqrtPrice,\n liquidity,\n Rounding.Down\n )\n )\n sqrtPrice = nextSqrtPrice\n }\n\n return {\n amountLeft,\n outputAmount: totalOutputAmount,\n nextSqrtPrice: sqrtPrice,\n }\n}\n\n/** Base received for amountIn quote, walking the curve up to stopSqrtPrice. */\nexport function calculateQuoteToBaseFromAmountIn(\n configState: Pick<QuotePoolConfig, 'curve'>,\n currentSqrtPrice: BN,\n amountIn: BN,\n stopSqrtPrice: BN\n): SwapAmount {\n let totalOutputAmount = ZERO\n let sqrtPrice = currentSqrtPrice\n let amountLeft = amountIn\n\n for (const point of configState.curve) {\n if (point.sqrtPrice.isZero() || point.liquidity.isZero()) {\n break\n }\n const referenceSqrtPrice = BN.min(stopSqrtPrice, point.sqrtPrice)\n if (!referenceSqrtPrice.gt(sqrtPrice)) {\n continue\n }\n\n const maxAmountIn = getDeltaAmountQuoteUnsigned256(\n sqrtPrice,\n referenceSqrtPrice,\n point.liquidity,\n Rounding.Up\n )\n if (amountLeft.lt(maxAmountIn)) {\n const nextSqrtPrice = getNextSqrtPriceFromInput(\n sqrtPrice,\n point.liquidity,\n amountLeft,\n false\n )\n totalOutputAmount = addU64(\n totalOutputAmount,\n getDeltaAmountBaseUnsigned(\n sqrtPrice,\n nextSqrtPrice,\n point.liquidity,\n Rounding.Down\n )\n )\n sqrtPrice = nextSqrtPrice\n amountLeft = ZERO\n break\n }\n\n totalOutputAmount = addU64(\n totalOutputAmount,\n getDeltaAmountBaseUnsigned(\n sqrtPrice,\n referenceSqrtPrice,\n point.liquidity,\n Rounding.Down\n )\n )\n sqrtPrice = referenceSqrtPrice\n amountLeft = SafeMath.sub(amountLeft, u64(maxAmountIn))\n if (sqrtPrice.eq(stopSqrtPrice)) {\n break\n }\n }\n\n return {\n outputAmount: totalOutputAmount,\n nextSqrtPrice: sqrtPrice,\n amountLeft,\n }\n}\n\n/** Base needed for outAmount quote, walking the curve down from currentSqrtPrice. */\nexport function calculateBaseToQuoteFromAmountOut(\n configState: Curve,\n currentSqrtPrice: BN,\n outAmount: BN\n): SwapAmountFromOutput {\n let sqrtPrice = currentSqrtPrice\n let amountLeft = outAmount\n let totalAmountIn = ZERO\n\n for (let i = configState.curve.length - 2; i >= 0; i--) {\n const point = configState.curve[i]\n const liquidity = configState.curve[i + 1].liquidity\n if (point.sqrtPrice.isZero() || point.liquidity.isZero()) {\n continue\n }\n if (!point.sqrtPrice.lt(sqrtPrice)) {\n continue\n }\n\n const maxAmountOut = getDeltaAmountQuoteUnsigned256(\n point.sqrtPrice,\n sqrtPrice,\n liquidity,\n Rounding.Down\n )\n if (amountLeft.lt(maxAmountOut)) {\n const nextSqrtPrice = getNextSqrtPriceFromOutput(\n sqrtPrice,\n liquidity,\n amountLeft,\n true\n )\n totalAmountIn = addU64(\n totalAmountIn,\n getDeltaAmountBaseUnsigned(\n nextSqrtPrice,\n sqrtPrice,\n liquidity,\n Rounding.Up\n )\n )\n sqrtPrice = nextSqrtPrice\n amountLeft = ZERO\n break\n }\n\n totalAmountIn = addU64(\n totalAmountIn,\n getDeltaAmountBaseUnsigned(\n point.sqrtPrice,\n sqrtPrice,\n liquidity,\n Rounding.Up\n )\n )\n sqrtPrice = point.sqrtPrice\n amountLeft = SafeMath.sub(amountLeft, u64(maxAmountOut))\n }\n\n if (!amountLeft.isZero()) {\n const liquidity = configState.curve[0].liquidity\n const maxAmountOut = getDeltaAmountQuoteUnsigned256(\n configState.sqrtStartPrice,\n sqrtPrice,\n liquidity,\n Rounding.Down\n )\n if (amountLeft.gt(maxAmountOut)) {\n throw new Error(ProgramError.InsufficientLiquidity)\n }\n const nextSqrtPrice = getNextSqrtPriceFromOutput(\n sqrtPrice,\n liquidity,\n amountLeft,\n true\n )\n if (nextSqrtPrice.lt(configState.sqrtStartPrice)) {\n throw new Error(ProgramError.InsufficientLiquidity)\n }\n totalAmountIn = addU64(\n totalAmountIn,\n getDeltaAmountBaseUnsigned(\n nextSqrtPrice,\n sqrtPrice,\n liquidity,\n Rounding.Up\n )\n )\n sqrtPrice = nextSqrtPrice\n }\n\n return { amountIn: totalAmountIn, nextSqrtPrice: sqrtPrice }\n}\n\n/** Quote needed for outAmount base, walking the curve up from currentSqrtPrice. */\nexport function calculateQuoteToBaseFromAmountOut(\n configState: Pick<QuotePoolConfig, 'curve'>,\n currentSqrtPrice: BN,\n outAmount: BN\n): SwapAmountFromOutput {\n let totalInAmount = ZERO\n let sqrtPrice = currentSqrtPrice\n let amountLeft = outAmount\n\n for (const point of configState.curve) {\n if (point.sqrtPrice.isZero() || point.liquidity.isZero()) {\n break\n }\n if (!point.sqrtPrice.gt(sqrtPrice)) {\n continue\n }\n\n const maxAmountOut = getDeltaAmountBaseUnsigned256(\n sqrtPrice,\n point.sqrtPrice,\n point.liquidity,\n Rounding.Down\n )\n if (amountLeft.lt(maxAmountOut)) {\n const nextSqrtPrice = getNextSqrtPriceFromOutput(\n sqrtPrice,\n point.liquidity,\n amountLeft,\n false\n )\n totalInAmount = addU64(\n totalInAmount,\n getDeltaAmountQuoteUnsigned(\n sqrtPrice,\n nextSqrtPrice,\n point.liquidity,\n Rounding.Up\n )\n )\n sqrtPrice = nextSqrtPrice\n amountLeft = ZERO\n break\n }\n\n totalInAmount = addU64(\n totalInAmount,\n getDeltaAmountQuoteUnsigned(\n sqrtPrice,\n point.sqrtPrice,\n point.liquidity,\n Rounding.Up\n )\n )\n sqrtPrice = point.sqrtPrice\n amountLeft = SafeMath.sub(amountLeft, u64(maxAmountOut))\n }\n\n if (!amountLeft.isZero()) {\n throw new Error(ProgramError.AmountLeftIsNotZero)\n }\n\n return { amountIn: totalInAmount, nextSqrtPrice: sqrtPrice }\n}\n\nfunction quoteExactIn(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n swapBaseForQuote: boolean,\n amountIn: BN,\n slippageBps: number,\n hasReferral: boolean,\n currentPoint: BN,\n eligibleForFirstSwapWithMinFee: boolean,\n transferFees?: QuoteTransferFees\n): SwapQuote2Result & { minimumAmountOut: BN } {\n const { tradeDirection, feeMode, input, output } = beginSwapQuote(\n virtualPool,\n config,\n swapBaseForQuote,\n amountIn,\n hasReferral,\n transferFees\n )\n const excludedAmountIn = calculateTransferFeeExcludedAmount(\n input,\n amountIn\n ).amount\n if (excludedAmountIn.isZero()) {\n throw new Error(ProgramError.AmountIsZero)\n }\n\n const result = getSwapResultFromExactInput(\n virtualPool,\n config,\n excludedAmountIn,\n feeMode,\n tradeDirection,\n currentPoint,\n isFirstSwapWithMinFee(\n virtualPool,\n config,\n hasReferral,\n eligibleForFirstSwapWithMinFee\n )\n )\n const excludedAmountOut = calculateTransferFeeExcludedAmount(\n output,\n result.outputAmount\n ).amount\n\n return {\n ...result,\n minimumAmountOut: minimumAmountOutWithSlippage(\n excludedAmountOut,\n slippageBps\n ),\n includedTransferFeeAmountIn: amountIn,\n excludedTransferFeeAmountOut: excludedAmountOut,\n }\n}\n\n/** Exact-in quote in the legacy SwapResult shape. */\nexport function swapQuote(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n swapBaseForQuote: boolean,\n amountIn: BN,\n slippageBps: number = 0,\n hasReferral: boolean,\n currentPoint: BN,\n eligibleForFirstSwapWithMinFee: boolean,\n transferFees?: QuoteTransferFees\n): SwapQuoteResult {\n const result = quoteExactIn(\n virtualPool,\n config,\n swapBaseForQuote,\n amountIn,\n slippageBps,\n hasReferral,\n currentPoint,\n eligibleForFirstSwapWithMinFee,\n transferFees\n )\n return {\n actualInputAmount: result.excludedFeeInputAmount,\n outputAmount: result.outputAmount,\n nextSqrtPrice: result.nextSqrtPrice,\n tradingFee: result.tradingFee,\n protocolFee: result.protocolFee,\n referralFee: result.referralFee,\n minimumAmountOut: result.minimumAmountOut,\n includedTransferFeeAmountIn: result.includedTransferFeeAmountIn,\n excludedTransferFeeAmountOut: result.excludedTransferFeeAmountOut,\n }\n}\n\n/** Exact-in quote; amountIn includes any transfer fee on the input mint. */\nexport function swapQuoteExactIn(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n swapBaseForQuote: boolean,\n amountIn: BN,\n slippageBps: number = 0,\n hasReferral: boolean,\n currentPoint: BN,\n eligibleForFirstSwapWithMinFee: boolean,\n transferFees?: QuoteTransferFees\n): SwapQuote2Result {\n return quoteExactIn(\n virtualPool,\n config,\n swapBaseForQuote,\n amountIn,\n slippageBps,\n hasReferral,\n currentPoint,\n eligibleForFirstSwapWithMinFee,\n transferFees\n )\n}\n\n/** Partial-fill quote; the input the pool can take is reported in includedTransferFeeAmountIn. */\nexport function swapQuotePartialFill(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n swapBaseForQuote: boolean,\n amountIn: BN,\n slippageBps: number = 0,\n hasReferral: boolean,\n currentPoint: BN,\n eligibleForFirstSwapWithMinFee: boolean,\n transferFees?: QuoteTransferFees\n): SwapQuote2Result {\n const { tradeDirection, feeMode, input, output } = beginSwapQuote(\n virtualPool,\n config,\n swapBaseForQuote,\n amountIn,\n hasReferral,\n transferFees\n )\n const excludedAmountIn = calculateTransferFeeExcludedAmount(\n input,\n amountIn\n ).amount\n if (excludedAmountIn.isZero()) {\n throw new Error(ProgramError.AmountIsZero)\n }\n\n const result = getSwapResultFromPartialInput(\n virtualPool,\n config,\n excludedAmountIn,\n feeMode,\n tradeDirection,\n currentPoint,\n isFirstSwapWithMinFee(\n virtualPool,\n config,\n hasReferral,\n eligibleForFirstSwapWithMinFee\n )\n )\n const includedAmountIn = result.amountLeft.isZero()\n ? amountIn\n : calculateTransferFeeIncludedAmount(\n input,\n result.includedFeeInputAmount\n ).amount\n // a partial fill under an active rate limiter can reconstruct an input above amountIn\n if (includedAmountIn.gt(amountIn)) {\n throw new Error(ProgramError.ExceededInputAmount)\n }\n const excludedAmountOut = calculateTransferFeeExcludedAmount(\n output,\n result.outputAmount\n ).amount\n\n return {\n ...result,\n minimumAmountOut: minimumAmountOutWithSlippage(\n excludedAmountOut,\n slippageBps\n ),\n includedTransferFeeAmountIn: includedAmountIn,\n excludedTransferFeeAmountOut: excludedAmountOut,\n }\n}\n\n/** Exact-out quote; outAmount is what the user receives after any transfer fee on the output mint. */\nexport function swapQuoteExactOut(\n virtualPool: QuoteVirtualPool,\n config: QuotePoolConfig,\n swapBaseForQuote: boolean,\n outAmount: BN,\n slippageBps: number = 0,\n hasReferral: boolean,\n currentPoint: BN,\n eligibleForFirstSwapWithMinFee: boolean,\n transferFees?: QuoteTransferFees\n): SwapQuote2Result {\n const { tradeDirection, feeMode, input, output } = beginSwapQuote(\n virtualPool,\n config,\n swapBaseForQuote,\n outAmount,\n hasReferral,\n transferFees\n )\n const includedAmountOut = calculateTransferFeeIncludedAmount(\n output,\n outAmount\n ).amount\n if (includedAmountOut.isZero()) {\n throw new Error(ProgramError.AmountIsZero)\n }\n\n const result = getSwapResultFromExactOutput(\n virtualPool,\n config,\n includedAmountOut,\n feeMode,\n tradeDirection,\n currentPoint,\n isFirstSwapWithMinFee(\n virtualPool,\n config,\n hasReferral,\n eligibleForFirstSwapWithMinFee\n )\n )\n const includedAmountIn = calculateTransferFeeIncludedAmount(\n input,\n result.includedFeeInputAmount\n ).amount\n\n return {\n ...result,\n maximumAmountIn: maximumAmountInWithSlippage(\n includedAmountIn,\n slippageBps\n ),\n includedTransferFeeAmountIn: includedAmountIn,\n excludedTransferFeeAmountOut: outAmount,\n }\n}\n"]}
|
|
@@ -240,6 +240,7 @@ var ProgramError = {
|
|
|
240
240
|
InvalidMigrationOption: "Invalid migration option",
|
|
241
241
|
InvalidTokenDecimals: "Invalid token decimals",
|
|
242
242
|
InvalidTokenType: "Invalid token type",
|
|
243
|
+
InvalidQuoteThreshold: "Invalid quote threshold",
|
|
243
244
|
InvalidTokenSupply: "Invalid token supply",
|
|
244
245
|
InvalidCurve: "Invalid curve",
|
|
245
246
|
InvalidVestingParameters: "Invalid vesting parameters",
|
|
@@ -2020,4 +2021,4 @@ export {
|
|
|
2020
2021
|
swapQuotePartialFill,
|
|
2021
2022
|
swapQuoteExactOut
|
|
2022
2023
|
};
|
|
2023
|
-
//# sourceMappingURL=chunk-
|
|
2024
|
+
//# sourceMappingURL=chunk-P4K4GKFH.js.map
|