Back to Integration
Code Examples
Integration Examples
Real-world examples of integrating SUI Lab Factory into various protocols
Download Complete Move Example
Full Move module demonstrating launchpad integration with pool creation:
Download pool_integration_example.moveExample 1: Automated Launchpad
Create DEX pools when tokens graduate from bonding curve:
public entry fun create_dex_pool<T>(
launchpad_token: &mut LaunchpadToken<T>,
factory: &mut Factory,
payment: Coin<SUI>,
clock: &Clock,
ctx: &mut TxContext
) {
// Calculate liquidity amounts
let sui_for_liquidity = calculate_sui_liquidity(launchpad_token);
let tokens_for_liquidity = calculate_token_liquidity(launchpad_token);
// Prepare coins
let sui_coin = extract_sui(launchpad_token, sui_for_liquidity, ctx);
let token_coin = mint_tokens(launchpad_token, tokens_for_liquidity, ctx);
// Create pool
let (pool_id, lp_tokens) = factory::create_pool_from_contract<T, SUI>(
factory,
payment,
token_coin,
sui_coin,
clock,
ctx
);
// Burn 90% of LP tokens for permanent liquidity
let lp_to_burn = (coin::value(&lp_tokens) * 90) / 100;
let burn_lp = coin::split(&mut lp_tokens, lp_to_burn, ctx);
transfer::public_transfer(burn_lp, @0x0);
// Send remaining 10% to protocol
transfer::public_transfer(lp_tokens, protocol_wallet());
}Example 2: DAO Treasury
DAO votes to create liquidity pool for governance token:
public entry fun dao_create_pool<GOV>(
dao: &DAO,
proposal_id: ID,
factory: &mut Factory,
gov_tokens: Coin<GOV>,
sui_tokens: Coin<SUI>,
payment: Coin<SUI>,
clock: &Clock,
ctx: &mut TxContext
) {
// Verify proposal passed
assert!(dao::proposal_passed(dao, proposal_id), E_PROPOSAL_NOT_PASSED);
// Create pool
let (pool_id, lp_tokens) = factory::create_pool_from_contract<GOV, SUI>(
factory,
payment,
gov_tokens,
sui_tokens,
clock,
ctx
);
// Transfer LP tokens to DAO treasury
transfer::public_transfer(lp_tokens, dao::treasury_address(dao));
// Record in DAO
dao::record_pool_creation(dao, pool_id);
}Example 3: TypeScript dApp
Create pool from web application:
import { SuiLabFactorySDK, parseSUI } from './suilab-factory-sdk';
import { useSignAndExecuteTransaction } from '@mysten/dapp-kit';
function CreatePoolButton() {
const { mutate: signAndExecute } = useSignAndExecuteTransaction();
const handleCreatePool = async () => {
const client = new SuiClient({ url: 'https://fullnode.mainnet.sui.io:443' });
const sdk = new SuiLabFactorySDK(client, 'MAINNET');
// Build transaction
const txb = sdk.createPoolTransaction({
tokenAType: '0x2::sui::SUI',
tokenBType: myTokenType,
tokenAAmount: parseSUI(100),
tokenBAmount: BigInt(1000000000000),
senderAddress: currentAddress,
});
// Sign and execute
signAndExecute(
{ transaction: txb },
{
onSuccess: (result) => {
console.log('Pool created!', result);
},
}
);
};
return <button onClick={handleCreatePool}>Create Pool</button>;
}