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