# Essential Web3 Libraries
npm install ethers@^6.0.0
npm install web3@^4.0.0
npm install @binance-chain/bsc-connector
# BNB Chain Specific Tools
npm install @pancakeswap/sdk
npm install @binance-chain/javascript-sdk
# Security & Analysis Tools
npm install axios
npm install lodash
npm install moment
# AI/ML Libraries for Security Analysis
npm install @tensorflow/tfjs
npm install ml-matrix
npm install simple-statistics
# Development Dependencies
npm install --save-dev @types/lodash
npm install --save-dev @types/nodeCreate/Update .env.local:
# BNB Chain RPC Endpoints
NEXT_PUBLIC_BSC_MAINNET_RPC=https://bsc-dataseed1.binance.org/
NEXT_PUBLIC_BSC_TESTNET_RPC=https://data-seed-prebsc-1-s1.binance.org:8545/
# BSCScan API (Essential for contract verification and transaction data)
BSCSCAN_API_KEY=your_bscscan_api_key
NEXT_PUBLIC_BSCSCAN_API_URL=https://api.bscscan.com/api
# PancakeSwap API for DeFi Security Analysis
PANCAKESWAP_SUBGRAPH_URL=https://api.thegraph.com/subgraphs/name/pancakeswap/exchange
# Security Analysis APIs
CHAINANALYSIS_API_KEY=your_chainanalysis_key
CERTIK_API_KEY=your_certik_key
# AI/ML Services
OPENAI_API_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key
# Database for Threat Intelligence
DATABASE_URL=your_database_url
REDIS_URL=your_redis_url// lib/bnb-chain-provider.ts
import { ethers } from 'ethers';
import Web3 from 'web3';
export class BNBChainProvider {
private provider: ethers.JsonRpcProvider;
private web3: Web3;
constructor() {
this.provider = new ethers.JsonRpcProvider(
process.env.NEXT_PUBLIC_BSC_MAINNET_RPC
);
this.web3 = new Web3(process.env.NEXT_PUBLIC_BSC_MAINNET_RPC);
}
// Get BNB balance
async getBNBBalance(address: string): Promise<string> {
const balance = await this.provider.getBalance(address);
return ethers.formatEther(balance);
}
// Get BEP-20 token balance
async getTokenBalance(walletAddress: string, tokenAddress: string): Promise<string> {
const abi = ['function balanceOf(address) view returns (uint256)'];
const contract = new ethers.Contract(tokenAddress, abi, this.provider);
const balance = await contract.balanceOf(walletAddress);
return balance.toString();
}
// Get transaction details
async getTransaction(txHash: string) {
return await this.provider.getTransaction(txHash);
}
// Get contract code
async getContractCode(address: string): Promise<string> {
return await this.provider.getCode(address);
}
}// lib/bscscan-api.ts
import axios from 'axios';
export class BSCScanAPI {
private apiKey: string;
private baseUrl: string;
constructor() {
this.apiKey = process.env.BSCSCAN_API_KEY!;
this.baseUrl = process.env.NEXT_PUBLIC_BSCSCAN_API_URL!;
}
// Get contract source code and verification status
async getContractSource(address: string) {
const response = await axios.get(this.baseUrl, {
params: {
module: 'contract',
action: 'getsourcecode',
address: address,
apikey: this.apiKey
}
});
return response.data.result[0];
}
// Get normal transactions
async getTransactions(address: string, startblock = 0, endblock = 99999999, page = 1, offset = 10) {
const response = await axios.get(this.baseUrl, {
params: {
module: 'account',
action: 'txlist',
address: address,
startblock,
endblock,
page,
offset,
sort: 'desc',
apikey: this.apiKey
}
});
return response.data.result;
}
// Get BEP-20 token transfers
async getTokenTransfers(address: string, contractaddress?: string) {
const response = await axios.get(this.baseUrl, {
params: {
module: 'account',
action: 'tokentx',
address: address,
contractaddress,
sort: 'desc',
apikey: this.apiKey
}
});
return response.data.result;
}
// Get contract ABI
async getContractABI(address: string) {
const response = await axios.get(this.baseUrl, {
params: {
module: 'contract',
action: 'getabi',
address: address,
apikey: this.apiKey
}
});
return JSON.parse(response.data.result);
}
}// lib/bnb-security-analyzer.ts
import { BNBChainProvider } from './bnb-chain-provider';
import { BSCScanAPI } from './bscscan-api';
export class BNBSecurityAnalyzer {
private provider: BNBChainProvider;
private bscscan: BSCScanAPI;
// Known malicious addresses on BSC
private blacklistedAddresses = new Set([
// Add known scam addresses
'0x...',
]);
// Known legitimate addresses (PancakeSwap, Venus, etc.)
private whitelistedAddresses = new Set([
'0x10ED43C718714eb63d5aA57B78B54704E256024E', // PancakeSwap Router
'0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73', // PancakeSwap Factory
'0xfb6115445Bff7b52FeB98650C87f44907E58f802', // Venus Protocol
// Add more legitimate BSC contracts
]);
constructor() {
this.provider = new BNBChainProvider();
this.bscscan = new BSCScanAPI();
}
// Analyze wallet security on BSC
async analyzeWallet(address: string) {
const analysis = {
address,
riskScore: 0,
threats: [] as string[],
recommendations: [] as string[],
bnbBalance: '0',
tokenCount: 0,
transactionCount: 0,
suspiciousActivity: false
};
try {
// Get BNB balance
analysis.bnbBalance = await this.provider.getBNBBalance(address);
// Get recent transactions
const transactions = await this.bscscan.getTransactions(address, 0, 99999999, 1, 100);
analysis.transactionCount = transactions.length;
// Analyze transaction patterns
const riskFactors = await this.analyzeTransactionPatterns(transactions);
analysis.threats.push(...riskFactors.threats);
analysis.riskScore += riskFactors.riskScore;
// Check for interactions with known malicious contracts
const maliciousInteractions = this.checkMaliciousInteractions(transactions);
if (maliciousInteractions.length > 0) {
analysis.threats.push(`Interactions with ${maliciousInteractions.length} flagged addresses`);
analysis.riskScore += 40;
analysis.suspiciousActivity = true;
}
// Analyze DeFi protocol interactions
const defiRisks = await this.analyzeDeFiInteractions(transactions);
analysis.threats.push(...defiRisks.threats);
analysis.riskScore += defiRisks.riskScore;
// Generate BNB-specific recommendations
analysis.recommendations = this.generateBNBRecommendations(analysis);
return analysis;
} catch (error) {
console.error('BNB wallet analysis failed:', error);
throw error;
}
}
// Analyze BEP-20 smart contracts
async analyzeContract(address: string) {
const analysis = {
address,
riskScore: 0,
threats: [] as string[],
recommendations: [] as string[],
contractDetails: {
isVerified: false,
isProxy: false,
hasOwner: false,
canMint: false,
canPause: false,
hasBlacklist: false,
isHoneypot: false
}
};
try {
// Get contract source code
const sourceData = await this.bscscan.getContractSource(address);
analysis.contractDetails.isVerified = sourceData.SourceCode !== '';
if (!analysis.contractDetails.isVerified) {
analysis.threats.push('Contract source code not verified');
analysis.riskScore += 30;
}
// Analyze contract code for common vulnerabilities
if (sourceData.SourceCode) {
const codeAnalysis = this.analyzeContractCode(sourceData.SourceCode);
analysis.contractDetails = { ...analysis.contractDetails, ...codeAnalysis };
// Calculate risk based on code analysis
if (codeAnalysis.canMint) {
analysis.threats.push('Contract can mint new tokens');
analysis.riskScore += 15;
}
if (codeAnalysis.hasOwner) {
analysis.threats.push('Contract has owner privileges');
analysis.riskScore += 10;
}
if (codeAnalysis.canPause) {
analysis.threats.push('Contract can be paused');
analysis.riskScore += 10;
}
if (codeAnalysis.hasBlacklist) {
analysis.threats.push('Contract can blacklist addresses');
analysis.riskScore += 20;
}
}
// Check for honeypot characteristics
const honeypotCheck = await this.checkHoneypot(address);
if (honeypotCheck.isHoneypot) {
analysis.contractDetails.isHoneypot = true;
analysis.threats.push('Potential honeypot contract detected');
analysis.riskScore += 50;
}
analysis.recommendations = this.generateContractRecommendations(analysis);
return analysis;
} catch (error) {
console.error('BNB contract analysis failed:', error);
throw error;
}
}
// Analyze transaction patterns for suspicious activity
private async analyzeTransactionPatterns(transactions: any[]) {
const threats: string[] = [];
let riskScore = 0;
// Check for high-frequency trading (potential bot activity)
const recentTxs = transactions.filter(tx =>
Date.now() - (parseInt(tx.timeStamp) * 1000) < 24 * 60 * 60 * 1000
);
if (recentTxs.length > 100) {
threats.push('High-frequency transaction activity detected');
riskScore += 20;
}
// Check for failed transaction patterns
const failedTxs = transactions.filter(tx => tx.isError === '1');
if (failedTxs.length > transactions.length * 0.3) {
threats.push('High failed transaction rate');
riskScore += 15;
}
// Check for MEV/frontrunning patterns
const mevPatterns = this.detectMEVPatterns(transactions);
if (mevPatterns.detected) {
threats.push('Potential MEV/frontrunning activity');
riskScore += 25;
}
return { threats, riskScore };
}
// Check interactions with known malicious addresses
private checkMaliciousInteractions(transactions: any[]): string[] {
const maliciousInteractions: string[] = [];
transactions.forEach(tx => {
if (this.blacklistedAddresses.has(tx.to.toLowerCase()) ||
this.blacklistedAddresses.has(tx.from.toLowerCase())) {
maliciousInteractions.push(tx.to);
}
});
return [...new Set(maliciousInteractions)];
}
// Analyze DeFi protocol interactions
private async analyzeDeFiInteractions(transactions: any[]) {
const threats: string[] = [];
let riskScore = 0;
// Check for interactions with unverified DeFi protocols
const defiInteractions = transactions.filter(tx =>
parseInt(tx.value) === 0 && tx.input !== '0x' // Likely contract interactions
);
for (const tx of defiInteractions.slice(0, 10)) { // Check last 10 DeFi interactions
try {
const contractData = await this.bscscan.getContractSource(tx.to);
if (!contractData.SourceCode) {
threats.push('Interaction with unverified DeFi contract');
riskScore += 10;
}
} catch (error) {
// Continue analysis even if some contracts can't be verified
}
}
return { threats, riskScore };
}
// Analyze contract source code for vulnerabilities
private analyzeContractCode(sourceCode: string) {
const analysis = {
isProxy: false,
hasOwner: false,
canMint: false,
canPause: false,
hasBlacklist: false
};
// Check for proxy patterns
if (sourceCode.includes('delegatecall') || sourceCode.includes('Proxy')) {
analysis.isProxy = true;
}
// Check for owner functionality
if (sourceCode.includes('onlyOwner') || sourceCode.includes('Ownable')) {
analysis.hasOwner = true;
}
// Check for mint functionality
if (sourceCode.includes('function mint') || sourceCode.includes('_mint')) {
analysis.canMint = true;
}
// Check for pause functionality
if (sourceCode.includes('Pausable') || sourceCode.includes('pause')) {
analysis.canPause = true;
}
// Check for blacklist functionality
if (sourceCode.includes('blacklist') || sourceCode.includes('blocked')) {
analysis.hasBlacklist = true;
}
return analysis;
}
// Check if contract is a honeypot
private async checkHoneypot(address: string): Promise<{ isHoneypot: boolean; reason?: string }> {
try {
// Simulate a small buy/sell transaction to detect honeypots
// This is a simplified check - in production, use specialized honeypot detection services
const contractCode = await this.provider.getContractCode(address);
// Basic honeypot indicators
if (contractCode.includes('revert') && contractCode.includes('transfer')) {
return { isHoneypot: true, reason: 'Suspicious transfer restrictions' };
}
return { isHoneypot: false };
} catch (error) {
return { isHoneypot: false };
}
}
// Detect MEV/frontrunning patterns
private detectMEVPatterns(transactions: any[]): { detected: boolean; patterns: string[] } {
const patterns: string[] = [];
// Check for sandwich attacks (buy -> target tx -> sell pattern)
// Check for high gas prices during volatile periods
// Check for identical function calls in quick succession
const highGasTxs = transactions.filter(tx =>
parseInt(tx.gasPrice) > 20000000000 // > 20 gwei
);
if (highGasTxs.length > transactions.length * 0.5) {
patterns.push('Frequent high gas price transactions');
}
return { detected: patterns.length > 0, patterns };
}
// Generate BNB-specific recommendations
private generateBNBRecommendations(analysis: any): string[] {
const recommendations: string[] = [
'Use a hardware wallet for large BNB amounts',
'Regularly review and revoke token approvals',
'Be cautious with new DeFi protocols on BSC',
'Monitor for unusual transaction patterns'
];
if (parseFloat(analysis.bnbBalance) > 10) {
recommendations.push('Consider using a multi-sig wallet for large holdings');
}
if (analysis.suspiciousActivity) {
recommendations.unshift('Immediately review recent transactions for unauthorized activity');
}
return recommendations;
}
// Generate contract-specific recommendations
private generateContractRecommendations(analysis: any): string[] {
const recommendations: string[] = [];
if (!analysis.contractDetails.isVerified) {
recommendations.push('Verify contract source code before interaction');
}
if (analysis.contractDetails.hasOwner) {
recommendations.push('Research the contract owner and their reputation');
}
if (analysis.contractDetails.canMint) {
recommendations.push('Be aware of potential token supply inflation');
}
if (analysis.contractDetails.isHoneypot) {
recommendations.push('AVOID: This appears to be a honeypot contract');
}
recommendations.push('Check for recent security audits');
recommendations.push('Start with small test transactions');
return recommendations;
}
}// lib/pancakeswap-analyzer.ts
import axios from 'axios';
export class PancakeSwapAnalyzer {
private subgraphUrl: string;
constructor() {
this.subgraphUrl = process.env.PANCAKESWAP_SUBGRAPH_URL!;
}
// Check token liquidity and trading volume
async analyzeTokenLiquidity(tokenAddress: string) {
const query = `
{
tokens(where: { id: "${tokenAddress.toLowerCase()}" }) {
id
symbol
name
decimals
totalLiquidity
totalLiquidityUSD
tradeVolumeUSD
txCount
}
}
`;
const response = await axios.post(this.subgraphUrl, { query });
return response.data.data.tokens[0];
}
// Detect potential rug pull indicators
async detectRugPullRisk(tokenAddress: string) {
const tokenData = await this.analyzeTokenLiquidity(tokenAddress);
const risks: string[] = [];
let riskScore = 0;
if (parseFloat(tokenData?.totalLiquidityUSD || '0') < 1000) {
risks.push('Very low liquidity - high price impact risk');
riskScore += 30;
}
if (parseInt(tokenData?.txCount || '0') < 100) {
risks.push('Low trading activity - potential low adoption');
riskScore += 20;
}
return { risks, riskScore, liquidityData: tokenData };
}
}// lib/price-monitor.ts
export class BNBPriceMonitor {
// Monitor for sudden price changes that might indicate manipulation
async monitorPriceAnomalies(tokenAddress: string) {
// Implementation for real-time price monitoring
// Integrate with BSC price feeds or DEX APIs
}
// Detect flash loan attacks
async detectFlashLoanAttacks(txHash: string) {
// Analyze transaction logs for flash loan patterns
}
}// lib/bnb-threat-database.ts
export const BNB_THREAT_DATABASE = {
// Known scam tokens
SCAM_TOKENS: [
'0x...', // Add known scam token addresses
],
// Known malicious contracts
MALICIOUS_CONTRACTS: [
'0x...', // Add known malicious contract addresses
],
// Phishing sites targeting BSC users
PHISHING_DOMAINS: [
'fake-pancakeswap.com',
// Add known phishing domains
],
// Common attack patterns on BSC
ATTACK_PATTERNS: {
HONEYPOT_INDICATORS: [
'unusual transfer restrictions',
'hidden sell taxes',
'ownership concentration'
],
RUG_PULL_INDICATORS: [
'unlocked liquidity',
'excessive owner privileges',
'no audit history'
]
}
};// components/bnb-analytics-dashboard.tsx
export function BNBAnalyticsDashboard() {
// Real-time BSC network stats
// Gas price trends
// Popular tokens/contracts
// Security incident reports
// DeFi protocol rankings by security score
}- Rate Limiting: BSCScan API has rate limits (5 calls/second)
- Caching: Implement Redis for caching contract analysis results
- Database: Store threat intelligence and user scan history
- WebSocket: Real-time transaction monitoring using BSC WebSocket
- CDN: Fast global access for security database updates
// lib/performance-optimizations.ts
export class BSCPerformanceOptimizer {
// Batch multiple API calls
async batchAnalyzeContracts(addresses: string[]) {
// Implement batch processing for multiple contract analysis
}
// Cache frequently accessed data
async getCachedContractData(address: string) {
// Implement Redis caching for contract analysis results
}
// Optimize blockchain calls
async optimizedTransactionAnalysis(txHashes: string[]) {
// Implement parallel processing for transaction analysis
}
}This comprehensive guide provides everything you need to build a production-ready AI Security Scanner specifically for BNB Chain, including real blockchain integration, threat detection, and performance optimization.