Simulation Network Spec

Regtest Simulation Environment

An architectural overview of Satolink's local multi-chain regtest, Next.js control node, mining triggers, and test asset faucet.

1. Sandbox & Simulation Philosophy

Before launching mainnet transactions, developers and automated suites need a predictable, zero-cost sandbox. Satolink integrates a local Regtest Environment based on the Breez Liquid SDK's specification. This simulates the full transaction cycle—including Bitcoin on-chain, off-chain Lightning routing, Liquid swaps, and asset issuance—under complete developer control.

💡 Pro-Tip for Integration:The regtest network mirrors mainnet protocols exactly, but allows block generation on demand. This enables developers to test complex atomic swaps and socket re-connections in seconds rather than waiting for public block times.

2. Multi-Chain Node Orchestration

To recreate a realistic payment corridor, the Satolink regtest system coordinates four distinct local nodes. These run inside Docker sandboxes and communicate via RPC and WebSocket APIs.

Regtest Node Orchestration Topology
Satolink Control NodeNext.js Panel (Port 3101)Bitcoin Core Daemonbitcoin-cli-sim-clientLND Node (Lightning)lncli-sim-clientElements Daemon (Liquid)elements-cli-sim-clientBoltz Swap Gatewayswapproxy (Liquid ⇄ LN)Fedpeg peg-in/out

Bitcoin Core (Regtest)

Simulates the main Bitcoin blockchain. Generates base mining block rewards and anchors the Lightning and Liquid sidechains.

LND (Lightning Node)

Maintains Lightning payment channels, route paths, and settles instant swap invoices off-chain.

💧

Elements Core (Liquid)

Implements the Liquid sidechain. Provides fast block times, Confidential Transactions (CT), and issued assets capabilities.

🔄

Boltz Swap Proxy

Acts as the trustless atomic swap proxy, resolving on-chain Liquid transactions into off-chain Lightning payments.


3. The Satolink Control Panel (Next.js Application)

To manage this multi-chain stack efficiently, the development team built a central administrative tool: the Satolink Control Panel (running locally on port 3101).

The control panel exposes a Next.js interface that queries internal API endpoints to display real-time balances, monitor block heights, and manage node operations:

// Panel Configuration (config.json)
{
  "mining": {
    "enabled": true,
    "intervalSeconds": 60,
    "blocksPerInterval": 1
  },
  "commands": {
    "bitcoin": "bitcoin-cli-sim-client",
    "lightning": "lncli-sim-client",
    "liquid": "elements-cli-sim-client"
  }
}
  • On-chain Balances: Real-time balances of the simulation nodes across Bitcoin (on-chain), LND local channels (sats), Liquid (L-BTC), and Liquid USDT.
  • Blockchain Info: Monitors active blocks, chain versions, difficulty states, and best block hashes for debugging peg-ins.
  • Command Executions: Provides direct web hooks to trigger command-line utilities (like lncli or elements-cli) on the active sandboxes.

4. Auto-Mining & Manual Block Settlement

Transactions on both Bitcoin and Liquid networks require block confirmations to finalize. Because the regtest network does not have public miners, Satolink implements an automated miner scheduler.

Auto-Mining Scheduler

The control panel runs an interval timer (configured to 60 seconds) that automatically executes mining commands:bitcoin-cli-sim-client -generate 1 and elements-cli-sim-client -generate 1. This guarantees that all transactions and swaps are confirmed within a maximum of 60 seconds.

Manual Generation Triggers

For immediate test results, developers can trigger manual block generation through the dashboard (e.g., mine 10 blocks instantly). This forces instant confirmations, triggering swap resolutions and WebSocket notification pushes immediately.


5. The Satolink Faucet

To allow new users and developers to test the payment application immediately, Satolink operates a dedicated **L-BTC & USDT Faucet** interface directly in the application.

Satolink Faucet Interface
Figure 1. Satolink Faucet dashboard providing mock USDT and L-BTC tokens for sandbox testing.

Quota & Fair Use Policies

To prevent spam attacks that would deplete the regtest nodes' wallets, the Faucet API enforces strict quota rules:

Quota ParameterValueDescription
Maximum Single Request100 USDT / 0.001 L-BTCThe maximum amount sent per individual faucet trigger.
User Daily Quota500 USDTThe cumulative maximum a single address/user handle can request per 24 hours.
Global Daily Quota5,000 USDTThe total maximum amount the faucet node will distribute per day.
Request Frequency Limit3 requests per address / 5 requests per IP per hourPrevents rapid bot spamming of the elements-cli send transaction.
Spam Penalty1-hour banExceeding the request frequency triggers an automatic 1-hour ban on both the IP and wallet address.

6. Issued Assets on Liquid (Mock USDT)

One of the key features of the Liquid Network is the support for Issued Assets. This allows anyone to issue tokens representing fiat currencies, securities, or utility points with the same transaction confidentiality as L-BTC.

SatoLink utilizes this capability to support Tether (USDT). For the Regtest Network, a mock USDT token was minted with the following properties:

Asset Name:Tether USD (Test)
Ticker Symbol:USDT
Precision:8 decimal places
Regtest Asset ID:e53db25bfcb876b353118ea592d757abd8150593a61a159b99462768cebe8fd6
⚠️ CRITICAL WARNING:The asset ID above and the tokens distributed by the faucet exist exclusively within SatoLink's isolated Regtest environment. They have **no real-world monetary value**, cannot be converted to mainnet USDT, and cannot be transferred to public exchanges.

7. Technical Glossary

Regtest (Regression Test)

An isolated local network setup for Bitcoin and Elements where blocks are mined on-demand rather than through public competition, permitting zero-cost sandbox testing.

Issued Assets

A native Liquid Network feature that allows the creation and distribution of customized tokens (e.g. fiat stablecoins, loyalty points) on the Liquid blockchain.

Auto-Mining

A background routine that periodically issues a block generation command to verify pending transactions, simulating block times without manual user input.

Peg-in / Peg-out

The mechanism used to lock Bitcoin on the mainnet to release L-BTC on Liquid (peg-in), or burn L-BTC on Liquid to release Bitcoin on the mainnet (peg-out).