Documentation Index Fetch the complete documentation index at: https://docs.rekthub.io/llms.txt
Use this file to discover all available pages before exploring further.
Overview
RektHub uses optimized libraries for bonding curve calculations. These utilities handle the constant product math that powers price discovery and trading.
For Integrators: You typically don’t need to use these libraries
directly—the BondingCurve contract handles all calculations. This reference is
useful if you’re building off-chain quoters, simulators, or custom trading
algorithms.
BondingCurveMath
The core library for constant product (x × y = k) bonding curve calculations.
Location: contracts/libraries/BondingCurveMath.sol
Purpose
Calculate token outputs for buy orders
Calculate native outputs for sell orders
Calculate fees as percentages (basis points)
Pure functions—no state modifications
Functions
calculateBuyReturn
Calculate how many tokens a buyer will receive for a given native token input.
function calculateBuyReturn (
uint256 nativeAmount ,
uint256 virtualNativeReserves ,
uint256 virtualTokenReserves
) internal pure returns ( uint256 tokensOut );
Parameters:
nativeAmount (uint256): Amount of native tokens to spend (after fees)
virtualNativeReserves (uint256): Current virtual native reserves in the curve
virtualTokenReserves (uint256): Current virtual token reserves in the curve
Returns:
tokensOut: Amount of tokens the buyer will receive
Formula:
tokensOut = (nativeAmount * virtualTokenReserves) / (virtualNativeReserves + nativeAmount)
This implements the constant product formula: x * y = k
Example Usage:
// Off-chain calculation (JavaScript)
function calculateBuyReturn (
nativeAmount ,
virtualNativeReserves ,
virtualTokenReserves
) {
return (
( nativeAmount * virtualTokenReserves ) / ( virtualNativeReserves + nativeAmount )
);
}
// Example
const nativeIn = ethers . parseEther ( '0.1' );
const virtualNative = ethers . parseEther ( '30' );
const virtualTokens = ethers . parseEther ( '1073000000' );
const tokensOut = calculateBuyReturn ( nativeIn , virtualNative , virtualTokens );
console . log ( 'Will receive:' , ethers . formatEther ( tokensOut ), 'tokens' );
Important: This calculates the raw output before considering real reserve
limits. The BondingCurve contract takes the minimum of this calculation and
available real tokens.
calculateSellReturn
Calculate how many native tokens a seller will receive for selling tokens.
function calculateSellReturn (
uint256 tokenAmount ,
uint256 virtualNativeReserves ,
uint256 virtualTokenReserves
) internal pure returns ( uint256 nativeOut );
Parameters:
tokenAmount (uint256): Amount of tokens to sell
virtualNativeReserves (uint256): Current virtual native reserves in the curve
virtualTokenReserves (uint256): Current virtual token reserves in the curve
Returns:
nativeOut: Amount of native tokens the seller will receive (before fees)
Formula:
nativeOut = (tokenAmount * virtualNativeReserves) / (virtualTokenReserves + tokenAmount)
Example Usage:
// Off-chain calculation (JavaScript)
function calculateSellReturn (
tokenAmount ,
virtualNativeReserves ,
virtualTokenReserves
) {
return (
( tokenAmount * virtualNativeReserves ) / ( virtualTokenReserves + tokenAmount )
);
}
// Example
const tokensToSell = ethers . parseEther ( '1000000' );
const virtualNative = ethers . parseEther ( '30' );
const virtualTokens = ethers . parseEther ( '1073000000' );
const grossNativeOut = calculateSellReturn (
tokensToSell ,
virtualNative ,
virtualTokens
);
console . log ( 'Gross output:' , ethers . formatEther ( grossNativeOut ));
// Apply 1% fee
const fee = ( grossNativeOut * 100 n ) / 10000 n ;
const netNativeOut = grossNativeOut - fee ;
console . log ( 'Net after fees:' , ethers . formatEther ( netNativeOut ));
Fee Deduction: calculateSellReturn returns the gross amount before fees.
Always subtract the protocol fee (1%) to get the net amount users receive.
calculateFee
Calculate a fee as a percentage using basis points.
function calculateFee (
uint256 amount ,
uint256 feeBasisPoints
) internal pure returns ( uint256 fee );
Parameters:
amount (uint256): Amount to calculate fee on
feeBasisPoints (uint256): Fee in basis points (100 = 1%, 10000 = 100%)
Returns:
fee: Calculated fee amount
Formula:
fee = (amount * feeBasisPoints) / 10000
Example Usage:
// Off-chain calculation
function calculateFee ( amount , bps ) {
return ( amount * bps ) / 10000 n ;
}
// Examples
const amount = ethers . parseEther ( '100' );
const onePercent = calculateFee ( amount , 100 );
console . log ( '1% fee:' , ethers . formatEther ( onePercent ));
const thirtyPercent = calculateFee ( onePercent , 3000 );
console . log ( '30% of fee:' , ethers . formatEther ( thirtyPercent ));
Basis Points: 1 basis point = 0.01%. Common values: 1% = 100 bps, 5% = 500
bps, 10% = 1000 bps, 100% = 10000 bps
Next Steps
Bonding Curves Explained Understand the economics
Bonding Curve Contract See how it’s implemented
Events Reference Track trades with events
Interfaces Contract interfaces and ABIs