Skip to main content
Version: 2.0.4

Testing

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.

What is Merry?

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 here.
  • Merry supports arm64 and amd64 architectures. For Windows, use Windows Subsystem for Linux (WSL).

Run these srcipts 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

Optional flags:

  • --bare: Starts multi-chain services only (Bitcoin and Ethereum nodes with explorers) without Garden services.

  • --headless: Starts all services without frontend interfaces for server environments.

Stop Merry

Stops all running services with:

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 using:

merry logs -s <service>

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

merry logs -s evm

Replace a service with local version

Replace a service with your local development version using:

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>

Here's an example to 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

ServicePort
Bitcoin regtest nodelocalhost:18443 & 18444
Bitcoin esplora frontendlocalhost:5050
Bitcoin esplora electrs indexerlocalhost:50000 & 30000
Ethereum localnodelocalhost:8545
Ethereum otterscanlocalhost:5100
Arbitrum localnodelocalhost:8546
Arbitrum otterscanlocalhost:5101
Postgreslocalhost:5432
Redislocalhost:6379
Orderbooklocalhost:8080
Filler-