On Chain Payments
In a traditional bank, a payment comes with information that helps identify who made it. In crypto, blockchain transactions are public and verifiable, but they are tied to a wallet address, and in most cases you cannot know who owns that wallet. That is why, to match each payment to the correct order, the checkout needs a way to identify it. In practice, there are two common approaches: using a different address per order, or using a unique amount (with decimals).
Generate a Different Wallet per Order
With this approach, the system creates a new address for each cart and associates that address with the order. When a payment arrives to that address, the system immediately knows which order it belongs to. After that, a sweep is performed to consolidate funds into a single wallet. Since these “temporary” wallets only received tokens (for example, USDC), they first need a bit of gas (ETH on Ethereum, SOL on Solana) to pay network fees. With that gas, each wallet can sign and send the transfer, moving funds into the main wallet (the master wallet). Payments never get mixed because there is one address per order, and the customer pays a simple amount, for example 50 USDC. The trade off is more technical and operational complexity, plus network fees to send gas and move funds into the master wallet.Example
Imagine you sell a product for 50 USDC and three customers try to pay at the same time.- The system creates three different addresses and assigns one to each order:
Wallet 1, Wallet 2, and Wallet 3 - Each customer pays 50 USDC to their assigned address:
Customer A to Wallet 1
Customer B to Wallet 2
Customer C to Wallet 3 - The system sends a bit of gas to each wallet so it can move the funds:
ETH on Ethereum, SOL on Solana - With that gas, Wallet 1, 2, and 3 transfer the 50 USDC to the master wallet
- In the end, everything is consolidated in the master wallet, but some of it was spent on network fees
Identify the Payment by Decimals
With this approach, all payments are received into the same master wallet. To match each payment to the correct order, the customer is asked to pay an amount slightly above or below the original price. For example, if the order is 50 USDC, the customer might be asked to pay 50.01 USDC or 49.997 USDC. When the payment arrives, the system compares the exact amount received and, thanks to those decimals, automatically identifies which order it belongs to. Funds arrive directly to the master wallet, so no sweeps are needed, and there are savings on gas fees because funds do not have to be moved from temporary wallets. The trade off is that the customer must send the exact amount, otherwise the payment may require manual review.Example
Imagine you sell a product for 50 USDC and three customers try to pay at the same time.- The system assigns a unique amount to each order using 6 decimals:
Order A: 50.000123 USDC
Order B: 50.000456 USDC
Order C: 50.000789 USDC - Everyone pays to the same wallet (the master wallet), but with their exact amount:
Customer A sends 50.000123 USDC
Customer B sends 50.000456 USDC
Customer C sends 50.000789 USDC - When payments arrive, the system compares the received amount and matches it to the correct order
- Result: the money is in the master wallet from the start, with no sweeps
System Used by Zeno Bank
Zeno Bank uses the second method: we identify payments with unique amounts per checkout. We know paying with decimals is not the best customer experience, so the goal is to use them as little as possible. How we do it: If there is only one open checkout for 50 USDC, we display exactly 50 USDC. There is no need to vary the amount, because that value alone is enough to identify the payment. Each checkout expires after 15 minutes. If the customer does not pay in that time, that exact amount becomes available again and can be reused for another order without conflicts. When there are multiple open checkouts at the same time with the same price, we differentiate payments with small, simple variations. For example, if three customers are paying 50 USDC at the same time: • Customer 1: 50 USDC• Customer 2: 49.99 USDC
• Customer 3: 50.01 USDC In extreme cases, if there were many simultaneous payments within that window (for example, 100 checkouts in 15 minutes for the same amount), then we would use more decimals so every payment remains unique and the system can still identify each one. The key point is this: in practice, it is rare to need many decimals. Even in higher volume stores, it is not common to have many orders with the exact same amount happening at the same time within only 15 minutes. So we can almost always keep amounts simple while still identifying each payment automatically. This approach allowed us to build and launch faster, because we do not need to generate a different wallet per order or run sweeps.
Binance Pay Payments
Binance Pay is a payment system inside Binance. The buyer pays from their Binance account, and the merchant receives the payment in their Binance account. To integrate Binance Pay in Zeno Bank, see Binance Pay Integration.
Binance Pay Merchant
To accept Binance Pay in an online store, the standard approach is to use a Binance Pay Merchant account.
Problems with Binance Pay Merchant
But in practice, Binance Pay Merchant comes with two main issues:- Requirements and verification: Most store owners do not meet the requirements to open a Merchant account, or Binance rejects the application.
- 0.80% fees: Read more: https://www.binance.com/en/support/faq/detail/6ff1944867e54b9a9576bce3109c7f7a

