Integration Guides

Step-by-step guides for common integration scenarios.

User Wallet Integration

Add a wallet to your app to let users manage their gems:

javascript
// 1. Get user balance
const balance = await client.balance.get(userId);

// 2. Display balance
console.log(`MGEM: ${balance.mgem}, USDG: ${balance.usdg}`);

// 3. Handle transactions
const tx = await client.transactions.submit({
  from: userId,
  to: recipientId,
  amount: 100,
  token: 'MGEM'
});

// 4. Track transaction status
const status = await client.transactions.get(tx.tx_hash);

Reward System

Reward users for actions in your app:

javascript
// When user completes action
const reward = await client.transactions.submit({
  from: 'system',
  to: userId,
  amount: 50,
  token: 'MGEM',
  type: 'reward',
  metadata: {
    action: 'post_created',
    postId: '12345'
  }
});

Trading System

Enable users to trade gems:

javascript
// User buys MGEM with USDG
const buyTx = await client.transactions.submit({
  from: userId,
  to: 'treasury',
  amount: 10, // $10 USDG
  token: 'USDG',
  type: 'buy',
  metadata: { mgem_amount: 667 } // ~0.015 per MGEM
});

// User sells MGEM for USDG
const sellTx = await client.transactions.submit({
  from: userId,
  to: 'treasury',
  amount: 667,
  token: 'MGEM',
  type: 'sell',
  metadata: { usdg_amount: 10 }
});

Error Handling

javascript
try {
  const tx = await client.transactions.submit({
    from: userId,
    to: recipientId,
    amount: 100,
    token: 'MGEM'
  });
} catch (error) {
  if (error.code === 'INSUFFICIENT_BALANCE') {
    console.error('User has insufficient balance');
  } else if (error.code === 'RATE_LIMIT') {
    console.error('Rate limit exceeded, retry later');
  } else {
    console.error('Transaction failed:', error.message);
  }
}

Caching Best Practices

javascript
// Cache balance for 5 seconds
const balanceCache = new Map();

async function getBalance(userId) {
  const cached = balanceCache.get(userId);
  if (cached && Date.now() - cached.time < 5000) {
    return cached.data;
  }

  const balance = await client.balance.get(userId);
  balanceCache.set(userId, { data: balance, time: Date.now() });
  return balance;
}

Webhook Setup

Receive real-time transaction notifications:

bash
POST /api/webhooks/register
{
  "url": "https://yourapp.com/webhooks/memenchain",
  "events": ["transaction.confirmed", "transaction.failed"]
}

# Your webhook will receive:
{
  "event": "transaction.confirmed",
  "tx_hash": "0x...",
  "from": "user123",
  "to": "user456",
  "amount": 100,
  "token": "MGEM",
  "timestamp": 1234567890
}