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.move

Example 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>;
}