Skip to main content

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). On Chain Payments

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.
  1. The system creates three different addresses and assigns one to each order:
    Wallet 1, Wallet 2, and Wallet 3
  2. Each customer pays 50 USDC to their assigned address:
    Customer A to Wallet 1
    Customer B to Wallet 2
    Customer C to Wallet 3
  3. The system sends a bit of gas to each wallet so it can move the funds:
    ETH on Ethereum, SOL on Solana
  4. With that gas, Wallet 1, 2, and 3 transfer the 50 USDC to the master wallet
  5. 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.
  1. 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
  2. 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
  3. When payments arrive, the system compares the received amount and matches it to the correct order
  4. 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

Binance Pay Merchant

To accept Binance Pay in an online store, the standard approach is to use a Binance Pay Merchant account. Binance Pay Merchant Merchant accounts give access to the Merchant Binance Pay API, which is very useful for integrations.

Problems with Binance Pay Merchant

But in practice, Binance Pay Merchant comes with two main issues:
  1. Requirements and verification: Most store owners do not meet the requirements to open a Merchant account, or Binance rejects the application.
  2. 0.80% fees: Read more: https://www.binance.com/en/support/faq/detail/6ff1944867e54b9a9576bce3109c7f7a
The main problem is that most stores do not have a Binance Pay Merchant account, but they do have a normal Binance account.

Alternative to Binance Pay Merchant

At Zeno Bank, we adopted an alternative so any store can accept Binance Pay: we use the API of a normal Binance account. That API is more limited than the Merchant API, but it is enough to receive and detect payments. We apply the same logic as on chain payments: identify each payment using a unique amount. Because we do not use a Merchant account, Binance does not apply the Merchant fee: it is 0%, and any store can accept Binance Pay with a normal Binance account.