Panda Factory
The core factory contract for deploying and managing Panda tokens and pools.
Deployment Functions
deployPandaToken
function deployPandaToken(
address implementation,
PandaPoolParams calldata pp,
string calldata name,
string calldata symbol,
uint16 deployerSupplyBps
) external nonReentrant returns (address pandaToken)
Deploys a new PandaToken with optional deployer buy.
Parameters:
implementation
: Address of the implementation contractpp
: PandaPoolParams struct containing:baseToken
: Address of the base tokensqrtPa
: Lower bound sqrt pricesqrtPb
: Upper bound sqrt pricevestingPeriod
: Vesting duration for deployer incentives
name
: Token namesymbol
: Token symboldeployerSupplyBps
: Basis points of supply for deployer (max 5000)
Returns:
pandaToken
: Address of the deployed token
Emits: PandaDeployed
Errors:
PandaFactory: INVALID_DEPLOYER_BUY
- When deployerSupplyBps > 5000PandaFactory: INVALID_IMPLEMENTATION
- When implementation not whitelistedPandaFactory: INVALID_BASE
- When base token not configuredPandaFactory: PRICES_TOO_CLOSE
- When price range too narrowPandaFactory: PRICES_TOO_FAR
- When price range too widePandaFactory: RAISE_TOO_LOW
- When minimum raise not met
deployPandaTokenWithBera
function deployPandaTokenWithBera(
address implementation,
PandaPoolParams calldata pp,
string calldata name,
string calldata symbol,
uint16 deployerSupplyBps
) external payable nonReentrant returns (address pandaToken)
Deploys a new PandaToken using native BERA with optional deployer buy.
Parameters:
implementation
: Address of the implementation contractpp
: PandaPoolParams struct containing:baseToken
: Must be WBERA addresssqrtPa
: Lower bound sqrt pricesqrtPb
: Upper bound sqrt pricevestingPeriod
: Vesting duration for deployer incentives
name
: Token namesymbol
: Token symboldeployerSupplyBps
: Basis points of supply for deployer (max 5000)
Returns:
pandaToken
: Address of the deployed token
Errors:
PandaFactory: INVALID_BERA
- When baseToken is not WBERAAll errors from deployPandaToken
deployPandaPool
function deployPandaPool(
address implementation,
IPandaFactory.PandaPoolParams calldata pp,
uint256 totalTokens,
address pandaToken,
bytes calldata data
) external nonReentrant returns (address)
Deploy a standalone PandaPool implementation.
Parameters:
implementation
: Address of the pool implementationpp
: PandaPoolParams struct (see above)totalTokens
: Total tokens to be managed by poolpandaToken
: Address of existing Panda tokendata
: Additional initialization data
Returns:
Address of the deployed pool
Errors:
PandaFactory: INVALID_IMPLEMENTATION
- When implementation not whitelistedPandaFactory: IS_PANDATOKEN
- When implementation is a token typePandaFactory: INVALID_PANDATOKEN
- When token address is zero
Incentive Functions
claimIncentive
claimIncentive(
address _pandaPool
) external
Claims deployment incentives after pool graduation.
Parameters:
_pandaPool
: Address of the graduated pool
Errors:
PandaFactory: Invalid pool
- When pool not deployed by factoryPandaFactory: Incentive already claimed
- When incentive already claimedPandaFactory: Pool not graduated
- When pool hasn't graduated
View Functions
predictPoolAddress
predictPoolAddress(
address implementation,
address deployer
) external view returns (address)
Predicts pool address before deployment.
Parameters:
implementation
: Implementation contract addressdeployer
: Address of the deployer
Returns:
Predicted address of the pool
getSqrtP
getSqrtP(
uint256 scaledPrice
) external pure returns (uint256)
Converts price to square root format.
Parameters:
scaledPrice
: Price to convert (scaled by 1e18)
Returns:
Square root price in correct scale
getPoolFees
getPoolFees()
external view returns (PandaFees memory)
Get current fee configuration.
Returns:
PandaFees struct containing:
buyFee
: Fee for buying tokenssellFee
: Fee for selling tokensgraduationFee
: Fee taken at graduationdeployerFeeShare
: Share of graduation fee for deployer
isLegitPool
isLegitPool(
address _pandaPool
) public view returns (bool)
Verify if pool was deployed by factory.
Parameters:
_pandaPool
: Address to check
Returns:
true
if pool was deployed by factory
allPoolsLength
allPoolsLength() external view returns (uint)
Get total number of deployed pools.
Returns:
Count of all deployed pools
Constants
public constant MIN_TOKENSINPOOL_SHARE = 5000; // 50%
uint256 public constant MAX_TOKENSINPOOL_SHARE = 9000; // 90%
uint256 public constant MIN_SQRTP_MULTIPLE = 11_000; // 1.1x
uint256 public constant MAX_SQRTP_MULTIPLE = 10*10_000; // 10x
uint256 public constant TOKEN_SUPPLY = 1_000_000_000 * 1e18;
uint16 public constant DEPLOYER_MAX_BPS = 5000; // 50%
Events
PandaDeployed(
address indexed pandaPool,
address indexed implementation
)
Emitted when new pool is deployed.
IncentiveClaimed(
address indexed pandaPool,
uint256 amount
)
Emitted when deployment incentive is claimed.
Last updated