parent
							
								
									a33e2154d4
								
							
						
					
					
						commit
						a13e26d6e9
					
				
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								@ -1,383 +0,0 @@
 | 
				
			|||||||
# $swarms Token Integration Guide
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Overview
 | 
					 | 
				
			||||||
This guide covers the integration of $swarms token (74SBV4zDXxTRgv1pEMoECskKBkZHc2yGPnc7GYVepump) payments into your platform using Solana and Phantom wallet. The $swarms token offers numerous benefits on the Solana blockchain, including high transaction per second (TPS) capabilities, low transaction fees, and more.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Table of Contents
 | 
					 | 
				
			||||||
- [Prerequisites](#prerequisites)
 | 
					 | 
				
			||||||
- [Installation](#installation)
 | 
					 | 
				
			||||||
- [Architecture Overview](#architecture-overview)
 | 
					 | 
				
			||||||
- [Setup Guide](#setup-guide)
 | 
					 | 
				
			||||||
- [Integration Examples](#integration-examples)
 | 
					 | 
				
			||||||
- [One-Click Payment Implementation](#one-click-payment-implementation)
 | 
					 | 
				
			||||||
- [Security Considerations](#security-considerations)
 | 
					 | 
				
			||||||
- [Troubleshooting](#troubleshooting)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Prerequisites
 | 
					 | 
				
			||||||
- Node.js v16.x or higher
 | 
					 | 
				
			||||||
- TypeScript 4.x or higher
 | 
					 | 
				
			||||||
- Phantom Wallet browser extension
 | 
					 | 
				
			||||||
- Solana development environment
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Installation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
npm install @solana/web3.js @solana/spl-token @project-serum/anchor @solana/wallet-adapter-react @solana/wallet-adapter-phantom
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Architecture Overview
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```mermaid
 | 
					 | 
				
			||||||
flowchart TB
 | 
					 | 
				
			||||||
    A[User Interface] -->|Trigger Payment| B[Payment Handler]
 | 
					 | 
				
			||||||
    B --> C{Phantom Wallet}
 | 
					 | 
				
			||||||
    C -->|Sign Transaction| D[Solana Network]
 | 
					 | 
				
			||||||
    D -->|Execute Transfer| E[$swarms Token Contract]
 | 
					 | 
				
			||||||
    E -->|Confirm Transaction| F[Payment Confirmation]
 | 
					 | 
				
			||||||
    F -->|Update UI| A
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Setup Guide
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 1. Initialize Solana Connection
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
import { Connection, clusterApiUrl } from '@solana/web3.js';
 | 
					 | 
				
			||||||
import { PhantomWalletAdapter } from '@solana/wallet-adapter-phantom';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const connection = new Connection(clusterApiUrl('mainnet-beta'));
 | 
					 | 
				
			||||||
const wallet = new PhantomWalletAdapter();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Initialize wallet connection
 | 
					 | 
				
			||||||
await wallet.connect();
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 2. Configure Token Parameters
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
const SWARMS_TOKEN_ADDRESS = '74SBV4zDXxTRgv1pEMoECskKBkZHc2yGPnc7GYVepump';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface TokenConfig {
 | 
					 | 
				
			||||||
  mint: PublicKey;
 | 
					 | 
				
			||||||
  decimals: number;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const swarmTokenConfig: TokenConfig = {
 | 
					 | 
				
			||||||
  mint: new PublicKey(SWARMS_TOKEN_ADDRESS),
 | 
					 | 
				
			||||||
  decimals: 9
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 3. Create Payment Handler
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
export class SwarmPaymentHandler {
 | 
					 | 
				
			||||||
  private connection: Connection;
 | 
					 | 
				
			||||||
  private wallet: PhantomWalletAdapter;
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  constructor(connection: Connection, wallet: PhantomWalletAdapter) {
 | 
					 | 
				
			||||||
    this.connection = connection;
 | 
					 | 
				
			||||||
    this.wallet = wallet;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  async createTransferTransaction(
 | 
					 | 
				
			||||||
    amount: number,
 | 
					 | 
				
			||||||
    recipientAddress: string
 | 
					 | 
				
			||||||
  ): Promise<Transaction> {
 | 
					 | 
				
			||||||
    const transaction = new Transaction();
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    const transferInstruction = createTransferInstruction(
 | 
					 | 
				
			||||||
      await getAssociatedTokenAddress(swarmTokenConfig.mint, this.wallet.publicKey),
 | 
					 | 
				
			||||||
      await getAssociatedTokenAddress(swarmTokenConfig.mint, new PublicKey(recipientAddress)),
 | 
					 | 
				
			||||||
      this.wallet.publicKey,
 | 
					 | 
				
			||||||
      amount * Math.pow(10, swarmTokenConfig.decimals)
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    transaction.add(transferInstruction);
 | 
					 | 
				
			||||||
    return transaction;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## One-Click Payment Implementation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### React Component Example
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
import React, { useState } from 'react';
 | 
					 | 
				
			||||||
import { useWallet } from '@solana/wallet-adapter-react';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const SwarmPaymentButton: React.FC<{
 | 
					 | 
				
			||||||
  amount: number;
 | 
					 | 
				
			||||||
  recipientAddress: string;
 | 
					 | 
				
			||||||
}> = ({ amount, recipientAddress }) => {
 | 
					 | 
				
			||||||
  const [loading, setLoading] = useState(false);
 | 
					 | 
				
			||||||
  const wallet = useWallet();
 | 
					 | 
				
			||||||
  const paymentHandler = new SwarmPaymentHandler(connection, wallet);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const handlePayment = async () => {
 | 
					 | 
				
			||||||
    try {
 | 
					 | 
				
			||||||
      setLoading(true);
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      const transaction = await paymentHandler.createTransferTransaction(
 | 
					 | 
				
			||||||
        amount,
 | 
					 | 
				
			||||||
        recipientAddress
 | 
					 | 
				
			||||||
      );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      const signature = await wallet.sendTransaction(transaction, connection);
 | 
					 | 
				
			||||||
      await connection.confirmTransaction(signature);
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      // Handle success
 | 
					 | 
				
			||||||
      console.log('Payment successful:', signature);
 | 
					 | 
				
			||||||
    } catch (error) {
 | 
					 | 
				
			||||||
      console.error('Payment failed:', error);
 | 
					 | 
				
			||||||
    } finally {
 | 
					 | 
				
			||||||
      setLoading(false);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return (
 | 
					 | 
				
			||||||
    <button 
 | 
					 | 
				
			||||||
      onClick={handlePayment}
 | 
					 | 
				
			||||||
      disabled={loading || !wallet.connected}
 | 
					 | 
				
			||||||
      className="payment-button"
 | 
					 | 
				
			||||||
    >
 | 
					 | 
				
			||||||
      {loading ? 'Processing...' : `Pay ${amount} $swarms`}
 | 
					 | 
				
			||||||
    </button>
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Payment Flow Sequence
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```mermaid
 | 
					 | 
				
			||||||
sequenceDiagram
 | 
					 | 
				
			||||||
    participant User
 | 
					 | 
				
			||||||
    participant UI
 | 
					 | 
				
			||||||
    participant PaymentHandler
 | 
					 | 
				
			||||||
    participant PhantomWallet
 | 
					 | 
				
			||||||
    participant Solana
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    User->>UI: Click Pay Button
 | 
					 | 
				
			||||||
    UI->>PaymentHandler: Create Transaction
 | 
					 | 
				
			||||||
    PaymentHandler->>PhantomWallet: Request Signature
 | 
					 | 
				
			||||||
    PhantomWallet->>User: Prompt for Approval
 | 
					 | 
				
			||||||
    User->>PhantomWallet: Approve Transaction
 | 
					 | 
				
			||||||
    PhantomWallet->>Solana: Submit Transaction
 | 
					 | 
				
			||||||
    Solana->>PaymentHandler: Confirm Transaction
 | 
					 | 
				
			||||||
    PaymentHandler->>UI: Update Status
 | 
					 | 
				
			||||||
    UI->>User: Show Confirmation
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Security Considerations
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Transaction Validation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
function validateTransaction(
 | 
					 | 
				
			||||||
  transaction: Transaction,
 | 
					 | 
				
			||||||
  expectedAmount: number,
 | 
					 | 
				
			||||||
  expectedRecipient: PublicKey
 | 
					 | 
				
			||||||
): boolean {
 | 
					 | 
				
			||||||
  try {
 | 
					 | 
				
			||||||
    const instruction = transaction.instructions[0];
 | 
					 | 
				
			||||||
    const decodedData = TOKEN_PROGRAM_ID.decode(instruction.data);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    return (
 | 
					 | 
				
			||||||
      decodedData.amount === expectedAmount &&
 | 
					 | 
				
			||||||
      instruction.keys[1].pubkey.equals(expectedRecipient)
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  } catch (error) {
 | 
					 | 
				
			||||||
    console.error('Transaction validation failed:', error);
 | 
					 | 
				
			||||||
    return false;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Error Handling
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
class PaymentError extends Error {
 | 
					 | 
				
			||||||
  constructor(
 | 
					 | 
				
			||||||
    message: string,
 | 
					 | 
				
			||||||
    public code: string,
 | 
					 | 
				
			||||||
    public transaction?: string
 | 
					 | 
				
			||||||
  ) {
 | 
					 | 
				
			||||||
    super(message);
 | 
					 | 
				
			||||||
    this.name = 'PaymentError';
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async function handlePaymentError(error: any): Promise<void> {
 | 
					 | 
				
			||||||
  if (error instanceof WalletError) {
 | 
					 | 
				
			||||||
    // Handle wallet-specific errors
 | 
					 | 
				
			||||||
    throw new PaymentError(
 | 
					 | 
				
			||||||
      'Wallet error occurred',
 | 
					 | 
				
			||||||
      'WALLET_ERROR',
 | 
					 | 
				
			||||||
      error.message
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  } else if (error.code === 'TransactionError') {
 | 
					 | 
				
			||||||
    // Handle Solana transaction errors
 | 
					 | 
				
			||||||
    throw new PaymentError(
 | 
					 | 
				
			||||||
      'Transaction failed',
 | 
					 | 
				
			||||||
      'TRANSACTION_ERROR',
 | 
					 | 
				
			||||||
      error.txid
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  // Handle other errors...
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Testing
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Unit Test Example
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
import { expect } from 'chai';
 | 
					 | 
				
			||||||
import { SwarmPaymentHandler } from './payment-handler';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
describe('SwarmPaymentHandler', () => {
 | 
					 | 
				
			||||||
  let paymentHandler: SwarmPaymentHandler;
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  beforeEach(() => {
 | 
					 | 
				
			||||||
    // Setup test environment
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  it('should create valid transfer transaction', async () => {
 | 
					 | 
				
			||||||
    const amount = 100;
 | 
					 | 
				
			||||||
    const recipientAddress = 'recipient_address';
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    const transaction = await paymentHandler.createTransferTransaction(
 | 
					 | 
				
			||||||
      amount,
 | 
					 | 
				
			||||||
      recipientAddress
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    expect(transaction.instructions).to.have.lengthOf(1);
 | 
					 | 
				
			||||||
    // Add more assertions...
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Troubleshooting
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Common Issues and Solutions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. **Insufficient Balance**
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
async function checkBalance(
 | 
					 | 
				
			||||||
  connection: Connection,
 | 
					 | 
				
			||||||
  walletAddress: PublicKey
 | 
					 | 
				
			||||||
): Promise<boolean> {
 | 
					 | 
				
			||||||
  const balance = await connection.getTokenAccountBalance(
 | 
					 | 
				
			||||||
    await getAssociatedTokenAddress(swarmTokenConfig.mint, walletAddress)
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  return parseInt(balance.value.amount) > 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
2. **Transaction Timeout**
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
async function submitWithRetry(
 | 
					 | 
				
			||||||
  transaction: Transaction,
 | 
					 | 
				
			||||||
  maxRetries = 3
 | 
					 | 
				
			||||||
): Promise<string> {
 | 
					 | 
				
			||||||
  let attempt = 0;
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  while (attempt < maxRetries) {
 | 
					 | 
				
			||||||
    try {
 | 
					 | 
				
			||||||
      const signature = await wallet.sendTransaction(transaction, connection);
 | 
					 | 
				
			||||||
      const confirmation = await connection.confirmTransaction(signature);
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      if (confirmation.value.err) {
 | 
					 | 
				
			||||||
        throw new Error('Transaction failed');
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      return signature;
 | 
					 | 
				
			||||||
    } catch (error) {
 | 
					 | 
				
			||||||
      attempt++;
 | 
					 | 
				
			||||||
      if (attempt === maxRetries) throw error;
 | 
					 | 
				
			||||||
      await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Monitoring and Analytics
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Transaction Monitoring
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
interface TransactionMetrics {
 | 
					 | 
				
			||||||
  timestamp: number;
 | 
					 | 
				
			||||||
  amount: number;
 | 
					 | 
				
			||||||
  success: boolean;
 | 
					 | 
				
			||||||
  duration: number;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TransactionMonitor {
 | 
					 | 
				
			||||||
  private metrics: TransactionMetrics[] = [];
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  logTransaction(metric: TransactionMetrics): void {
 | 
					 | 
				
			||||||
    this.metrics.push(metric);
 | 
					 | 
				
			||||||
    // Add your analytics implementation
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  getAverageSuccessRate(): number {
 | 
					 | 
				
			||||||
    return (
 | 
					 | 
				
			||||||
      this.metrics.filter(m => m.success).length / this.metrics.length * 100
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Advanced Features
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Batch Payments
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
async function createBatchPayment(
 | 
					 | 
				
			||||||
  recipients: Array<{ address: string; amount: number }>
 | 
					 | 
				
			||||||
): Promise<Transaction> {
 | 
					 | 
				
			||||||
  const transaction = new Transaction();
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  for (const recipient of recipients) {
 | 
					 | 
				
			||||||
    const transferInstruction = createTransferInstruction(/* ... */);
 | 
					 | 
				
			||||||
    transaction.add(transferInstruction);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  return transaction;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Subscription Payments
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```typescript
 | 
					 | 
				
			||||||
class SubscriptionManager {
 | 
					 | 
				
			||||||
  async createSubscription(
 | 
					 | 
				
			||||||
    amount: number,
 | 
					 | 
				
			||||||
    interval: number,
 | 
					 | 
				
			||||||
    recipientAddress: string
 | 
					 | 
				
			||||||
  ): Promise<string> {
 | 
					 | 
				
			||||||
    // Implementation for recurring payments
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  async cancelSubscription(subscriptionId: string): Promise<void> {
 | 
					 | 
				
			||||||
    // Implementation for cancellation
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Support and Resources
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For additional support:
 | 
					 | 
				
			||||||
- Solana Documentation: https://docs.solana.com
 | 
					 | 
				
			||||||
- Phantom Wallet Docs: https://docs.phantom.app
 | 
					 | 
				
			||||||
- $swarms Token Contract: 74SBV4zDXxTRgv1pEMoECskKBkZHc2yGPnc7GYVepump
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Version History
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- v1.0.0 - Initial release
 | 
					 | 
				
			||||||
- v1.0.1 - Added batch payment support
 | 
					 | 
				
			||||||
- v1.0.2 - Enhanced error handling
 | 
					 | 
				
			||||||
- v1.0.3 - Added subscription payment feature
 | 
					 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue