Conviction Pool Management
Creating Conviction Pool
1. Set During Token Creation
// Create conviction pool simultaneously when creating token
const createParams = {
insurance_amt: 1000000000, // Conviction amount (lamports)
insurance_px: 500000000, // Trigger price (lamports)
name: "My Token",
symbol: "MTK",
uri: "ipfs://metadata_hash",
user_pubkey: "user_wallet_public_key",
network: "mainnet",
platform: "meteora",
};
2. Create Conviction Pool Separately
// Create Conviction pool for existing token
const convictionParams = {
mint: "token_address",
insuranceAmt: 1000000000, // Conviction amount
insurancePx: 500000000, // Trigger price
userPubkey: "user_address",
};
// Call on-chain Conviction pool initialization
const convictionIx = await program.methods
.initInsurance({
amt: new BN(insuranceParams.insuranceAmt),
startPrice: new BN(insuranceParams.insurancePx),
creator: userPublicKey,
mint: mintPubkey,
name: tokenName,
symbol: tokenSymbol,
uri: "",
poolId,
})
.instruction();
Query Conviction Pool Information
Endpoint: POST /api/token/conviction_pool/{token_address}
Request Headers:
Authorization: Bearer your_jwt_token
Content-Type: application/json
Response Example:
{
"code": 200,
"data": {
"token_address": "token_address",
"creator": "creator_address",
"insurance_amt": 1000000000,
"insurance_activation_price": 500000000,
"insurance_status": "reserved",
"has_deployed_insurance": true,
"can_redeem_insurance": false,
"deposit_time": "2024-01-01T00:00:00Z",
"activation_time": null,
"refund_time": null
}
}
Conviction Pool Status
Status Types
reserved: Reserved, not triggered
deployed: Triggered, tokens swapped
redeemed: SOL redeemed
Status Determination Logic
// Calculate Conviction pool status
const computeInsuranceStatus = (token) => {
if (!token.has_deployed_insurance) {
return "none";
}
if (token.can_redeem_insurance) {
return "redeemable";
}
if (token.insurance_status === "deployed") {
return "deployed";
}
return "reserved";
};
Redeem Conviction Pool
Redemption Conditions
Token price has not fallen below protection price
Beyond lock period (usually a few days)
User is the conviction pool creator
Redemption Process
// Check redemption conditions
if (!tokenData.can_redeem_insurance) {
throw new Error("Redemption conditions not met");
}
// Call redemption function
const refundParams = {
mint: tokenAddress,
userPubkey: userAddress,
};
const signature = await refundInsurance(connection, refundParams, wallet);
On-chain Redemption Transaction
// Build redemption transaction
const refundIx = await program.methods
.refundInsurance()
.accounts({
dish: dishPDA,
insuranceVault: insuranceVaultPDA,
user: userPublicKey,
systemProgram: SystemProgram.programId,
})
.instruction();
Conviction Pool Trigger Mechanism
Auto-trigger Conditions
Current token price β€ set protection price
Meets minimum trigger time interval
Pool has sufficient liquidity
Post-trigger Processing
Automatically swap tokens for SOL
Update conviction pool status to "deployed"
User can no longer redeem original SOL
Time Lock Mechanism
Lock Period Calculation
// Check if redemption is possible (time lock)
const canRedeem = (depositTime, currentTime) => {
const lockPeriod = 3 * 24 * 60 * 60 * 1000; // 3 days
return currentTime - depositTime > lockPeriod;
};
Countdown Display
// Calculate remaining lock time
const getRemainingTime = (depositTime) => {
const lockPeriod = 3 * 24 * 60 * 60 * 1000;
const elapsed = Date.now() - depositTime;
const remaining = Math.max(0, lockPeriod - elapsed);
return {
days: Math.floor(remaining / (24 * 60 * 60 * 1000)),
hours: Math.floor((remaining % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000)),
minutes: Math.floor((remaining % (60 * 60 * 1000)) / (60 * 1000)),
seconds: Math.floor((remaining % (60 * 1000)) / 1000),
};
};
Key Points
Conviction pool requires locking real SOL
Protection price setting needs to be careful, too high easily triggers
Time lock mechanism prevents frequent operations
Cannot be reversed after triggering, SOL will be swapped
Supports querying historical conviction pool records
Each token can only have one conviction pool
Last updated