Inside a Crypto Payment Gateway's Architecture | Zeno Bank
Skip to content
Live Demo
Get Started
Home
About
Docs
Support
Live Demo
Get the plugin
Terms & Conditions
Privacy Policy
The Architecture Behind a Multi-Million Dollar Crypto Payment Gateway
Hugo Pino
June 10, 2026 •
· min read
In this article, we’ll break down how our crypto payment gateway, which processes millions of dollars a month, works .
We’ll reveal the exact trick we use to process unlimited payments on the Lightning Network without touching a single node or rebalancing channels .
We’ll also dive into how we enable a gasless wallet on EVM networks to move several tokens in a single transaction, explain concepts about the Solana blockchain that very few people know, and how we manage to save up to 70% on fees on the Tron blockchain, a blockchain with a very controversial founder that went from being one of the cheapest on the market to one of the most expensive.
A crypto payment looks simple from the user’s side: select a token, send funds, and wait for confirmation. Behind that flow, our payment gateway has to coordinate pricing, wallet allocation, blockchain monitoring, and fund movement across multiple chains.
At Zeno Bank, we process thousands of payments every day across networks like Ethereum, Solana, Tron, and Bitcoin. This article breaks down the architecture behind that system and how payments move from checkout creation to final fund distribution.
Checkout Creation
Every payment starts when a merchant creates a checkout through the Zeno Bank API (POST /api/v1/checkouts), sending us the fiat amount and their own orderId.
That orderId is what ties Zeno Bank to the merchant’s system. Every webhook we send back includes it, so the store can match up payments, update order statuses, and keep track of everything on their side.
Merchants can create a checkout either by interacting directly with our API or by using our plug-and-play integrations, such as our WooCommerce Plugin and PrestaShop Module, which handle the API communication internally
When a checkout is created, our system also fetches live crypto prices and saves a snapshot of these rates in the database. This unique rate is tied directly to the newly created checkout and will be used to handle all token conversions.
For example, if a store creates a checkout for 100 USD and the customer wants to pay in Bitcoin, we use this saved rate to calculate the exact amount of BTC required.
Because crypto prices are volatile, we refresh this rate every hour for checkouts that are currently open. Without these regular updates, stale rates create a major vulnerability. For instance, if Bitcoin’s market price drops significantly below the checkout rate, a user could exploit the difference by paying with cheaper tokens bought elsewhere, causing a substantial financial loss for the store.
Stablecoin prices against fiat are rarely a perfect 1:1 ratio due to minor market fluctuations.
To ensure a more user-friendly experience, if a stablecoin fluctuates by less than 1% from its peg, our system automatically rounds the exchange rate to a flat 1:1.
For example, in this screenshot, even though USDT is at $0.9995, our system automatically rounds its price to $1.
Token Selection and Intermediary Wallet Assignment
After picking a payment token and network, the user clicks Next , and the gateway shows the destination wallet address and the exact amount to send.
To calculate how many tokens the user needs to send and show it to them, we convert the payment amount using the exchange-rate snapshot saved for that checkout
The wallet address is where crypto differs from a normal payment gateway.
Unlike traditional gateways, where every transaction ties back to a specific identity or bank account, the blockchain is pseudonymous , when a payment lands, all you see is a wallet address and an amount. Nothing reveals who actually sent the funds .
That creates a problem: if several customers pay into the same merchant wallet, there’s no built-in way to tell their transactions apart. So our system needed a reliable way to match each incoming payment to the checkout it belongs to.
In the early versions of our crypto payment gateway, every purchase from a store went to one shared wallet. To tell them apart, we gave each customer a slightly different total.
Say a store sold tickets to a crypto event for $120. Every buyer sent tokens to the same wallet, but with a unique decimal amount: one checkout might show 120.0343 USDT, the next 120.041 USDT. The backend used those tiny differences to tell which payment belonged to which checkout.
Since all funds arrived at the exact same wallet, we didn’t have to worry about moving them around or managing separate wallet addresses. This approach allowed us to launch much faster.
But users frequently sent the wrong amount, rounded decimals incorrectly, or ignored the exact value shown on the checkout page. Even small mismatches prevent...