Localnet testing is a crucial step in ensuring your Garden SDK integration works as intended before deploying it to a testnet or mainnet. To support your testing, we provide Merry, an in-house tool designed for comprehensive cross-chain testing in a local environment.

Merry is a CLI tool that leverages Docker to set up a multi-chain testing environment with a single command. It includes:

  • Bitcoin regtest node: A local Bitcoin testnet environment.
  • EVM localnet nodes: Local Ethereum and Arbitrum test environments. Simply add the localnet details to your EVM wallet to detect and interact.
  • Filler bot: Simulates the behavior of a live solver based on predefined strategies.
  • Orderbook: Local version of the order book to test how intents are matched and fulfilled.
  • Faucet: Generate unlimited test funds for seamless testing.
  • Electrum services: Lightweight wallet support for interacting with Bitcoin network.

Merry eliminates block mining delays, provides a complete environment for multi-chain workflows, and allows developers to test integrations independently of external services. It’s customizable, fast, and supports iterative testing with features like local service replacement.

Installation

Prerequisites: Ensure Docker is installed and running. Download Docker from docker.com.

Merry supports arm64 and amd64 architectures. For Windows, use Windows Subsystem for Linux (WSL).

Run these scripts based on your environment.

# Run the following command to install Merry:
curl https://get.merry.dev | bash

Merry stores its configuration and other data in a .merry directory on your system.

Commands

Merry provides a variety of commands to manage your testing environment.

Start Merry

Start all services with:

merry go

Stop Merry

Stops all running services:

merry stop

Use --delete or -d to remove data:

merry stop -d

List all commands

Display all available commands:

merry --help

Get logs

Access logs for specific services:

merry logs -s <service>

Replace <service> with the specific service (e.g., filler, orderbook) to view its logs.

# Example: Get EVM logs
merry logs -s evm

Replace a service with local version

Replace a service with your local development version:

merry replace <service>

Make sure you’re in the directory containing the local service’s Dockerfile. You can only replace filler, orderbook, and EVM chain services.

Interact with Bitcoin RPC

Run Bitcoin RPC commands directly:

merry rpc <method> <params>

Example - get blockchain info:

merry rpc getblockchaininfo

Fund accounts

Use the faucet to fund Bitcoin or Ethereum addresses for testing:

merry faucet --to <address>

Update Docker images

Keep your environment up-to-date by pulling the latest Docker images:

merry update

Generate auto-completion scripts

Generate scripts for your shell (bash, zsh, fish, powershell):

merry completion <shell>

Get version info

Check the version of Merry installed:

merry version

Supported services

The following services are available when running Merry. Use these ports to connect your applications and tools.

ServicePortDescription
Bitcoin regtest nodelocalhost:18443 & 18444Local Bitcoin test network
Bitcoin esplora frontendlocalhost:5050Bitcoin blockchain explorer UI
Bitcoin esplora electrs indexerlocalhost:50000 & 30000Bitcoin transaction indexer
Ethereum localnodelocalhost:8545Local Ethereum test network
Ethereum otterscanlocalhost:5100Ethereum blockchain explorer
Arbitrum localnodelocalhost:8546Local Arbitrum test network
Arbitrum otterscanlocalhost:5101Arbitrum blockchain explorer
Postgreslocalhost:5432Database for order storage
Redislocalhost:6379Cache and session storage
Orderbooklocalhost:8080Garden orderbook API
Filler-Background solver simulation

Next steps