Skip to main content
This guide spins up a fully self-contained dev environment: one Quantum Chain node sealing blocks every 5 seconds, a local Qustody API talking to it, and a pre-funded address you can transact with. By the end you will have:
  • A dev chain at http://127.0.0.1:8545
  • A Qustody API at http://127.0.0.1:8080
  • A pre-funded wallet registered with Qustody

Prerequisites

  • geth and keygenerator from make all — see Installation
  • qc-custody binary, also built by make all
  • PostgreSQL 16 running locally (or via Docker)

Step 1. Generate a sealer keypair

Step 2. Build the genesis file

extraData encodes the sealer set: 32 vanity bytes + each sealer’s 20-byte address + 65 zero bytes for the signature placeholder.

Step 3. Initialize and start the node

Confirm blocks are advancing:
The result hex should increment every 5 seconds.

Step 4. Start PostgreSQL

Step 5. Start a local signer (callback mode)

For development you can run a minimal callback-mode signer. Create a file local-signer.go that reads pending transactions from Qustody, signs with your local keystore, and POSTs back. See External signing for the payload contract. For end-to-end tests, the simpler path is to use callback mode with a script that polls every 2 seconds. Or use the reference signer service qustody-signer if you have it built locally.

Step 6. Start the Qustody API

Once /readyz returns 200:

Step 7. Register a wallet and transact

You will see SUBMITTED → APPROVED → PENDING_SIGNATURE. Your local signer fulfils the signing payload, then the transaction transitions to BROADCAST → CONFIRMED.

Tear down

Where to go next