Custom Multi-Crypto Payment Gateway Setup

We design and develop full-cycle blockchain solutions: from smart contract architecture to launching DeFi protocols, NFT marketplaces and crypto exchanges. Security audits, tokenomics, integration with existing infrastructure.
Showing 1 of 1All 1305 services
Custom Multi-Crypto Payment Gateway Setup
Medium
~1-2 weeks
Frequently Asked Questions

Blockchain Development Services

Blockchain Development Stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1378
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1257
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    966
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1209
  • image_logo-advance_0.webp
    B2B Advance company logo design
    668
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    957

Solving Multi-Cryptocurrency Payment Challenges

When a business decides to accept cryptocurrencies, they often imagine a simple "Pay with BTC" button. Reality is more complex: the system must handle Bitcoin's UTXO model, EVM's account-based model with ERC-20 tokens, and Solana's SPL standard — all without losing funds. An architectural mistake can lead to lost transactions or compliance issues. Based on over 50 projects, we have developed a universal scheme covering 90% of needs. We solve the problem of multi-cryptocurrency payments by supporting Bitcoin payments, Ethereum payments, USDT TRC20 (and ERC-20), Solana USDC, and other tokens. Our custom crypto payment gateway gives full control over fees, confirmation times, and security. In a recent case, we integrated 7 networks in 10 business days with end-to-end real-time payment visibility. We use Foundry for smart contract compilation and viem for EVM network monitoring. Each integration includes confirmation settings: Bitcoin minimum 3, EVM 12 blocks, Solana finalized slot. This reduced erroneous credits to zero. Our architecture prioritizes crypto payment security through private key encryption and automatic sweeps. The typical custom integration investment is recouped within 3–6 months for businesses processing over $50,000 monthly; an average project costs between $10,000 and $30,000 depending on network count.

How Much Does a Custom Integration Cost?

Architectural Options by Transaction Volume

The choice boils down to three options. Custom integration pays back 1.5–2 times faster than a ready-made provider with monthly volumes above $50,000 — commission savings can be significant. For example, at $100,000/month, saving 0.5% means $500/month.

Criteria Ready Provider Custom Integration Hybrid Approach
Time to launch 1–2 days 2–4 weeks 1–2 weeks
Transaction fee 0.5–1% 0% (only network gas) 0% for EVM, ~0.5% for BTC
UX control Limited Full High
Vendor lock-in Yes No Partial
Payback at volume >$50k/month Not payback 3–6 months 6–12 months

With monthly volumes above $50,000, custom integration pays back in 3–6 months, saving from $1,500 in commissions compared to ready providers.

Generating Addresses for All Networks from One Seed (HD Wallet BIP44)

As per BIP-44 (BIP44), the hierarchy is: m / purpose' / coin_type' / account' / change / address_index. For each new payment, a new address is generated by incrementing address_index. One master seed — addresses for all networks. Hierarchical deterministic derivation ensures that each address is derived from the same seed using elliptic curve cryptography, maintaining security and portability.

from hdwallet import HDWallet

def derive_address(master_seed: str, coin_type: int, index: int) -> str:
    wallet = HDWallet()
    wallet.from_mnemonic(master_seed)
    # BTC: coin_type=0, ETH: coin_type=60, SOL: coin_type=501
    wallet.from_path(f"m/44'/{coin_type}'/0'/0/{index}")
    return wallet.p2pkh_address()  # for BTC
    # wallet.address() for ETH
Address generation example

For Bitcoin use coin_type=0, for Ethereum coin_type=60, for Solana coin_type=501. Store address_index in the database and monotonically increase it. Never reuse addresses.

Important: address_index must monotonically increase and be stored in DB. Never reuse addresses — that violates privacy and complicates reconciliation.

Integration by Network

EVM Networks (Ethereum, Polygon, BSC, Arbitrum, Base)

One codebase abstracts multiple RPC endpoints leveraging chain-specific providers and transport layers. Monitor Transfer events of ERC-20 + native ETH/MATIC transfers using an asynchronous event-driven architecture.

import { createPublicClient, http, parseAbi } from 'viem';
import { mainnet, polygon, arbitrum } from 'viem/chains';

const chains = [
  { chain: mainnet, rpc: process.env.ETH_RPC, tokens: ETH_TOKENS },
  { chain: polygon, rpc: process.env.POLY_RPC, tokens: POLY_TOKENS },
  { chain: arbitrum, rpc: process.env.ARB_RPC, tokens: ARB_TOKENS },
];

// Unified handler for all EVM networks
async function watchEVMPayment(client, tokenAddress, recipientAddress, orderId) {
    return client.watchContractEvent({
        address: tokenAddress,
        abi: ERC20_ABI,
        eventName: 'Transfer',
        args: { to: recipientAddress },
        onLogs: (logs) => handlePayment(logs, orderId),
    });
}

Bitcoin: Recommended Fulcrum Node

For Bitcoin payments, we recommend Fulcrum. Bitcoin UTXO model — no "balance", only unspent outputs. An address is considered paid when UTXOs with the required amount arrive. Integration options: Electrum Protocol (ElectrumX/Fulcrum) — blockchain.scripthash.subscribe for address change subscription; BlockCypher/Mempool.space API — without own infrastructure; Bitcoin Core + ZMQ — full node with ZeroMQ notifications. For production we recommend Fulcrum (fast SPV-compatible node) + own Bitcoin Core in pruned mode. Bitcoin confirmations: 1 confirmation (~10 minutes) for small amounts, 3+ as standard, 6 for large payments.

TRON (USDT TRC20)

TRON is a special case due to USDT TRC20 popularity in CIS and Asia. API via TronGrid (HTTP) or own node. Addresses in Base58Check format (start with T).

import tronpy

client = tronpy.Tron(network='mainnet')

def check_trc20_payment(address: str, contract: str, min_amount: int) -> list:
    txns = client.get_token_trc20_transfers(
        contract_address=contract,
        to_address=address,
        min_timestamp=int((time.time() - 3600) * 1000)
    )
    return [tx for tx in txns if tx['value'] >= min_amount]

Solana: USDC and SPL Tokens

According to Solana documentation (Solana Token Documentation), each token has its own Associated Token Account (ATA) for each wallet. The receiving address for USDC is not the wallet itself, but its ATA for USDC.

import { getAssociatedTokenAddress } from '@solana/spl-token';

const usdcMint = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');
const paymentATA = await getAssociatedTokenAddress(usdcMint, paymentKeypair.publicKey);

Solana finality: using commitment level finalized — ~32 slots (~13 seconds).

How Do We Ensure Payment Finality?

Regardless of network, payments progress through states: pending_payment -> mempool_detected -> confirmed (N conf) -> settled. Our PostgreSQL schema tracks these states.

CREATE TABLE payment_orders (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    order_id VARCHAR(100) UNIQUE NOT NULL,
    currency VARCHAR(20) NOT NULL,
    network VARCHAR(20) NOT NULL,
    payment_address VARCHAR(200) NOT NULL,
    expected_amount NUMERIC(30, 8) NOT NULL,
    received_amount NUMERIC(30, 8) DEFAULT 0,
    tx_hash VARCHAR(200),
    confirmations INTEGER DEFAULT 0,
    required_confirmations INTEGER NOT NULL,
    status VARCHAR(30) DEFAULT 'pending',
    expires_at TIMESTAMPTZ NOT NULL,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    INDEX idx_payment_address (payment_address),
    INDEX idx_status_expires (status, expires_at)
);

Recommended confirmation counts:

Network Recommended Confirmations Block Time
Bitcoin 3-6 ~10 minutes
Ethereum 12 ~12 seconds
Solana (finalized) 1 ~13 seconds
Tron 19 ~3 seconds

Rates and Tolerance: Protecting Against Volatility

The user sees "Pay 0.001523 BTC" — the rate is fixed for 15–30 minutes. During that time, the rate may fluctuate by 1–2%. We need tolerance: 0.1% for stablecoins, 1% for BTC, 1.5% for ETH. For a $10,000 transaction, a 1% tolerance covers $100. Rates with minimal delay: CoinGecko API (free, 60s cache) or Binance WebSocket (real-time, for high-frequency).

Security: What We Guarantee

  • Private keys never on the web server. HD wallet seed in HSM or at least in encrypted storage (AWS KMS, HashiCorp Vault).
  • Sweep transactions — automatic transfer of received funds to cold wallet on schedule or threshold. For example, sweep when balance exceeds $50,000.
  • Double-spend protection — for BTC and ETH, do not confirm payment based on first unconfirmed. Set required_confirmations appropriately for the amount.
  • Address validation — address passes checksum validation (EIP-55 for ETH, Base58Check for BTC) before saving. Address error = loss of funds.

With a transaction value of $100, Ethereum network fee is ~$2, but with a custom gateway you control gas and can reduce it to $0.50. For 1000 transactions per month, savings amount to $1,500. Our multi-signature and threshold signature schemes can further enhance security for enterprise deployments.

Deliverables

  • Architecture documentation and transaction flow diagrams.
  • Source code for each network integration (EVM, Bitcoin, Tron, Solana).
  • Infrastructure scripts for deploying RPC nodes or configuring providers.
  • Operational and recovery instructions.
  • Training for your team on using the system.
  • First month of support after launch.

All deliverables are provided as source code with documentation.

Implementation Process

  1. Analysis (1–2 days): determine required currencies, volumes, geography (TRON popular in CIS/Asia), confirmation requirements.
  2. Infrastructure (2–4 days): configure RPC providers or own nodes, integrate HD wallet, design DB schema.
  3. Monitoring (3–4 days): develop workers for each network, confirmation logic, webhook notifications.
  4. Testing (1–2 days): testnet for EVM and Solana, Bitcoin testnet, edge cases (underpayment, overpayment, expired order, reorg).

Total 1–2 weeks depending on the number of networks. Contact us for an accurate timeline estimate for your project.

Our multi-network payment solution covers all major blockchains with a unified API.

Blockchain Infrastructure Deployment: Nodes, RPC, Indexing

Subgraph fell at 3:47 AM. By morning users saw outdated balances, transactions "hung" in the UI, support received 47 tickets in an hour. Cause: the handler in the subgraph failed on a transaction with a non-standard event log — and the entire index stopped. We have encountered such situations dozens of times. Our experience shows: blockchain infrastructure does not forgive gaps in observability. Guaranteeing uptime without multi-layered monitoring and fault-tolerant architecture is impossible. Over 8 years working with Ethereum, Polygon, and Solana, we have developed an approach that allows predictable deployment of infrastructure of any scale — from a single node to a multichain grid with dozens of subgraphs.

RPC Layer Architecture

Every dApp interaction with the blockchain goes through RPC — the JSON-RPC API provided by a node. Three options:

Managed providers — Alchemy, QuickNode, Infura, Ankr. Minimal operational costs, SLA, built-in monitoring. Limits: rate limits (Alchemy Free: 300 RU/sec), vendor lock, potential downtime during provider incidents. For most projects — the right choice at the start.

Self-owned nodes — full control, no rate limits, no third-party dependence. Cost: archive Ethereum node requires 2.5–3TB SSD, a strong server, and DevOps support. Sync from scratch on Ethereum via Geth/Nethermind — 3–7 days. Justified under high load or latency requirements.

Hybrid — self-owned node as primary, managed provider as fallback. Standard for protocols with high TVL. Proper load balancing can reduce costs by 20–30% compared to pure managed setup. Under high monthly request volume, hybrid saves significantly.

Provider Strength Limitation
Alchemy Supernode, Enhanced APIs, webhooks Expensive on high-volume
QuickNode Low latency, multi-chain More expensive than Alchemy on basic plan
Infura Historical reliability Rate limits on free, one major incident halted half of DeFi
Ankr Cheap, 40+ chains Less stable

How to Set Up an RPC Layer Without a Single Point of Failure?

At least two providers, DNS round-robin with health check every 5 seconds, automatic fallback when latency >500 ms. In practice, this gives 99.99% availability during any provider failure. For protocols with high TVL, we recommend a custom HA-proxy (nginx or Envoy) in front of two managed providers.

Why Is a Hybrid RPC Scheme More Cost-Effective Than Pure Managed?

At high request volumes, managed providers can be very expensive; a hybrid using a self-owned node as primary and a managed fallback cuts costs significantly without losing SLA.

Ethereum Node Clients

Execution clients: Geth (most used), Nethermind (C#, fast sync), Besu (Java, enterprise), Erigon (fastest sync, efficient archive mode ~2TB instead of 3TB).

Consensus clients (post-Merge): Lighthouse (Rust), Prysm (Go), Teku (Java), Nimbus (Nim). Each node after The Merge requires a pair of execution + consensus clients.

For DevOps: eth-docker — Docker Compose configurations for all client combinations. Setting up monitoring via Grafana + Prometheus is mandatory; a standard dashboard is available in each client's repository.

The Graph: Event Indexing

The Graph Protocol — decentralized indexing. A subgraph describes which events from which contracts to index and how to transform them into a GraphQL schema.

Subgraph structure:

  • subgraph.yaml — manifest: contract addresses, startBlock, events to handle
  • schema.graphql — GraphQL schema of entities
  • src/mapping.ts — AssemblyScript event handlers
dataSources:
  - kind: ethereum
    name: UniswapV3Pool
    network: mainnet
    source:
      address: "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640"
      abi: UniswapV3Pool
      startBlock: 12370624
    mapping:
      eventHandlers:
        - event: Swap(indexed address,indexed address,int256,int256,uint160,uint128,int24)
          handler: handleSwap

AssemblyScript handlers — not TypeScript. No nullable types, no closures, no many standard APIs. An error in the handler stops the subgraph indexing on that transaction. Important: add try-catch for operations that can fail (e.g., store.get() for an entity that may not exist).

How to Avoid Subgraph Indexing Stops?

Graph Node logs are monitored in real-time; on hasIndexingErrors = true an alert fires and an automatic node restart (via systemd or Kubernetes). Typical downtime on error — 150–300 seconds to recover. Additionally, for production we set up a watchdog that restarts Graph Node if subgraph lag exceeds 50 blocks.

Choosing Between Hosted Service and Decentralized Network

Graph Hosted Service (free, centralized) is deprecated in favor of Subgraph Studio + Graph Network. For production: deploy on Graph Network with GRT curation signal — the subgraph gets indexers proportional to curation.

Alternatives to The Graph: Ponder (TypeScript, self-hosted, easier to debug), Envio (ultra-fast indexer, supports EVM + non-EVM), Subsquid (TypeScript, own network), Moralis Streams (managed, webhook-based). Our experience shows: for high-load projects with unique logic, Ponder or Envio are more effective — they give full control over the process and do not require GRT tokenomics.

Webhooks and Real-Time Notifications

Alchemy Webhooks and QuickNode Streams allow receiving events in real-time via HTTP webhook or WebSocket. For monitoring addresses, new transactions, mints — this is faster than polling RPC.

Tenderly — platform for monitoring and alerts. You can set up an alert for a specific contract event, balance change, function call with certain parameters. Transaction simulation via Tenderly API is invaluable for debugging.

Monitoring and Observability

Minimum monitoring stack for a protocol:

On-chain: OpenZeppelin Defender Sentinel — watches contract events, triggers webhook or Autotask when conditions are met. Forta Network — community-maintained bots detect anomalies (large withdrawals, flash loans, governance attacks).

Infrastructure: Grafana + Prometheus for nodes, Datadog or Grafana Cloud for managed metrics. Alerts on: node is 10+ blocks behind, RPC latency >500ms, subgraph lag >100 blocks.

Uptime: Better Uptime or PagerDuty on RPC endpoint and subgraph health endpoint (The Graph provides _meta { hasIndexingErrors, block { number } }).

Why Is Monitoring Without Tenderly Insufficient?

Tenderly provides transaction simulation and detailed traces — critical for debugging subgraph and smart contract errors. Forta focuses on network anomalies, not your infrastructure. The combination of Tenderly plus a custom Grafana dashboard covers 90% of incident scenarios.

Multichain Infrastructure

A protocol on 5 chains = 5 separate RPC endpoints, 5 subgraphs, 5 monitoring configs. Manageable but requires deployment automation.

For subgraph multi-network deployment: graph deploy --network mainnet, graph deploy --network arbitrum-one etc. with a unified codebase and network-specific addresses in separate config files.

Chainlink CCIP and LayerZero for cross-chain messaging require monitoring of both chains and transactions on intermediate relayers. A reorg on the source chain after a confirmed mint on the target chain is a classic bridge problem. Solution: wait for finality (on Ethereum ~15 minutes after Merge for economic finality) before confirming on the target chain.

Infrastructure Setup Process

  1. Audit current stack — determine chains, request volume, latency and availability requirements.
  2. Architecture design — select providers, load balancing, redundancy.
  3. Subgraph development — manifest → schema → handlers → testing on local Graph Node → deploy to testnet → mainnet.
  4. Monitoring configuration — Tenderly alerts, Grafana dashboard, PagerDuty integration.
  5. Documentation and runbook — what to do when: subgraph falls behind, RPC downtime, node desync.
  6. Handover to operations — team training, access transfer, first month support.

What's Included

  • Deployment of managed or self-hosted Ethereum, Polygon, BNB Chain nodes
  • RPC layer setup with primary/fallback and load balancing
  • Subgraph development and deployment for your protocol
  • Monitoring connection (Tenderly, Grafana, alerts)
  • Runbook and operations documentation
  • Team training (up to 4 hours online)
  • 30-day support after delivery

Timeline

Task Duration
RPC and basic monitoring setup 1–2 weeks
Subgraph for one protocol 2–4 weeks
Self-hosted node with monitoring 2–3 weeks
Full infrastructure (multi-chain, monitoring, runbooks) 6–10 weeks

All projects are managed in a GitHub/GitLab repository with CI/CD; configuration code stays with you. Order infrastructure deployment — we'll show how to cut costs by 20–30% without losing reliability. Get a consultation — we'll demonstrate how we deployed infrastructure for a protocol with large TVL on Ethereum and Arbitrum. Contact us.