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?
Top comments (0)