The Problem
Every crypto payment integration follows the same painful pattern:
- Read blockchain docs for each chain
- Implement RPC calls
- Handle WebSocket reconnections
- Parse transaction data
- Calculate correct decimals (looking at you, BSC USDT with 18 decimals while everyone else uses 6)
- Build block explorer URLs
- Write confirmation logic
And that's just one chain. What about the other 8 your client wants?
The Solution: payx3
const { watchAll } = require("payx3");
await watchAll({
btcAddress: "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
evmAddress: "0xb2C65C9C98C2216099A37AF7FE12A93b8A37AFBd",
solAddress: "CbWki5xkrnde7TYj11jDWNEJ3h7bRTmk5Q22uANNfEt",
infuraKey: "YOUR_KEY",
onPayment: (payment) => {
console.log(`${payment.amount} ${payment.symbol} received on ${payment.chain}`);
// Fires for EVERYTHING: BTC, ETH, BNB, SOL, USDT, USDC...
},
});
One call. All chains. All tokens. Real-time.
What You Get
🔑 Wallet Generation
Generate a BIP-39 mnemonic and derive addresses for all supported chains simultaneously:
const { generateMnemonic, deriveAll } = require("payx3");
const mnemonic = generateMnemonic(128); // 12 words
const wallet = await deriveAll(mnemonic);
console.log(wallet.bitcoin[2].address); // bc1... Native SegWit
console.log(wallet.evm.address); // 0x... For ETH, BNB, MATIC, AVAX, ARB, OP
console.log(wallet.solana.address); // Solana address
👁️ Real-time Payment Watching
| Chain | Native Token | Supported Tokens |
|---|---|---|
| Bitcoin | BTC | — |
| Ethereum | ETH | USDT, USDC, DAI, WBTC, WETH, LINK, UNI, AAVE, SHIB |
| BNB Chain | BNB | USDT, USDC, DAI, LINK |
| Polygon | MATIC | USDT, USDC, DAI, WBTC, WETH, LINK, UNI, AAVE |
| Avalanche | AVAX | USDT, USDC, DAI, WBTC, WETH, LINK, AAVE |
| Arbitrum | ETH | USDT, USDC, DAI, WBTC, WETH, LINK, UNI |
| Optimism | ETH | USDT, USDC, DAI, WBTC, WETH, LINK |
| Solana | SOL | Any SPL token |
🎯 Watch Any Custom ERC-20
const { watchToken } = require("payx3");
watchToken({
address: "0x...",
infuraKey: "YOUR_KEY",
chain: "ETH",
contractAddress: "0x6982508145454Ce325dDbE47a25d4ec3d2311933", // PEPE
decimals: 18,
symbol: "PEPE",
name: "Pepe",
onPayment: (p) => console.log(`${p.amount} PEPE received!`),
});
Payment Object
Every callback receives a consistent object regardless of chain:
{
chain: "Ethereum",
chainSymbol: "ETH",
symbol: "USDT",
name: "Tether USD",
amount: "100.50",
txHash: "0xa1b2c3...",
status: "unconfirmed", // or "confirmed"
explorerUrl: "https://etherscan.io/tx/0xa1b2c3...",
contract: "0xdAC17F...", // null for native coins
timestamp: 1715000000000,
blockNumber: 19500000 // onConfirmed only
}
CLI Tool
No code? No problem. Install globally:
npm install -g payx3
Generate a wallet:
payx3 generate
Watch for payments using config.json:
{
"infuraKey": "YOUR_INFURA_KEY",
"addresses": {
"BTC": "bc1q...",
"EVM": "0x...",
"SOL": "CbWk..."
}
}
payx3 watch
Or watch specific addresses inline:
payx3 watch --btc bc1q... --evm 0x... --sol CbWk... --key YOUR_INFURA_KEY
REST API Server
Run as a full API server:
node examples/server.js
# Server running on http://localhost:3000
Endpoints
| Method | Endpoint | Description |
|---|---|---|
POST |
/wallet/create |
Generate wallet + addresses |
POST |
/watch/btc |
Watch BTC address |
POST |
/watch/eth |
Watch ETH |
POST |
/watch/bnb |
Watch BNB |
POST |
/watch/polygon |
Watch MATIC |
POST |
/watch/avalanche |
Watch AVAX |
POST |
/watch/arbitrum |
Watch ETH on Arbitrum |
POST |
/watch/optimism |
Watch ETH on Optimism |
POST |
/watch/sol |
Watch SOL + SPL tokens |
POST |
/watch/usdt |
Watch USDT (any chain) |
POST |
/watch/usdc |
Watch USDC (any chain) |
POST |
/watch/token |
Watch any ERC-20 |
POST |
/watch/all |
Watch everything at once |
GET |
/payments |
List all received payments |
DELETE |
/watch/:id |
Stop a watcher |
Real-World Examples
E-commerce Checkout
const { generateMnemonic, deriveAll, watchAll } = require("payx3");
async function createPaymentSession(orderId, amountUSD) {
// Generate a fresh wallet for this order
const mnemonic = generateMnemonic(128);
const wallet = await deriveAll(mnemonic);
// Store mnemonic temporarily (in DB with orderId)
await db.saveOrderWallet(orderId, mnemonic);
// Start watching
watchAll({
btcAddress: wallet.bitcoin[2].address,
evmAddress: wallet.evm.address,
solAddress: wallet.solana.address,
infuraKey: process.env.INFURA_KEY,
onPayment: async (payment) => {
// Mark order as paid
await db.updateOrderStatus(orderId, "paid", payment);
// Send confirmation email
await email.send(orderEmail, `Payment received: ${payment.amount} ${payment.symbol}`);
// Trigger fulfillment webhook
await axios.post(fulfillmentUrl, { orderId, payment });
},
});
return {
addresses: {
BTC: wallet.bitcoin[2].address,
EVM: wallet.evm.address,
SOL: wallet.solana.address,
},
};
}
Subscription Payments
const { watchUSDC } = require("payx3");
// Watch for $50 USDC monthly subscription payments
watchUSDC({
address: companyWallet,
infuraKey: process.env.INFURA_KEY,
chain: "ETH",
onPayment: async (payment) => {
if (parseFloat(payment.amount) >= 50) {
// Find user by transaction sender
const user = await db.findUserByAddress(payment.from);
if (user) {
// Extend subscription by 30 days
await db.extendSubscription(user.id, 30);
// Send receipt
await email.send(user.email, `Subscription renewed — ${payment.amount} USDC`);
}
}
},
});
Why payx3?
✅ No Private Keys Needed
You never share private keys. The library only reads blockchain data. Your funds stay where they belong.
✅ Automatic Decimal Handling
USDT has 6 decimals on Ethereum but 18 on BNB Chain. payx3 handles this automatically. You always get human-readable amounts.
✅ Built-in Reconnection
WebSockets disconnect? payx3 reconnects automatically. Your payment detection never stops.
✅ 0→1 in 5 Minutes
From npm install to watching payments on 8 chains. No blockchain experience required.
Installation
npm install payx3
Get a free Infura key: https://app.infura.io/register
GitHub & Documentation
- Full API documentation
- Examples for every chain and token
- REST API server example
- MIT license — free for commercial use
Support the Project
If payx3 saves you development time, consider:
⭐ Starring the repo on GitHub
🐛 Reporting issues you find
🔧 Submitting PRs for new chains or tokens
💬 Sharing with other developers
About the Author
I'm Susheel, a blockchain developer available for freelance and full-time work.
Need a custom integration? Multi-chain payment system? Web3 infrastructure?
United States
NORTH AMERICA
Related News
How Braze’s CTO is rethinking engineering for the agentic area
10h ago
Amazon Employees Are 'Tokenmaxxing' Due To Pressure To Use AI Tools
21h ago

Implementing Multicloud Data Sharding with Hexagonal Storage Adapters
15h ago

DeepMind’s CEO Says AGI May Be ~4 Years Away. The Last Three Missing Pieces Are Not What Most People Think.
15h ago

CCSnapshot - A Claude Code Configs Transfer Tool
21h ago