Local Development

Run Ghostlist locally.

Five steps. Two terminals. A real ZK proof minted against Midnight Preprod.

Node v22+
Docker
Lace Wallet
tNight tokens
01

Clone the repository

Get the source and install the workspace dependencies. This installs both the root tooling and the frontend.

terminal
git clone https://github.com/MayurK-cmd/GhostList.git
cd GhostList
npm install
cd frontend && npm install && cd ..
02

Start the Midnight proof server

Ghostlist generates real ZK proofs locally. The proof server has to be reachable on port 6300 for the circuit witness to compile.

terminal
docker pull midnightnetwork/proof-server
docker run -p 6300:6300 midnightnetwork/proof-server
okProof server listening on http://0.0.0.0:6300
03

Install and fund Lace

Lace is the only wallet Ghostlist supports. It holds your secret, builds the witness, and signs the mint transaction.

  1. 1Download the Lace Midnight build from the Lace GitHub releases page.
  2. 2Open the extension, create a new account, and save the seed phrase somewhere safe.
  3. 3Use the network selector to switch to Midnight Preprod.
  4. 4Paste your unshielded address into the Preprod faucet and claim tNight.
04

Start the frontend dev server

In a second terminal, keep the proof server running and boot the Vite dev server. The UI will be on localhost:8080 by default.

terminal
cd frontend
npm run dev
okLocal: http://localhost:8080/
05

Mint a Ghost

Open the app, click Connect Lace, approve the connection, then click Mint Ghost. Your wallet builds the proof and the chain records only the nullifier.

  1. 1If the proof server is offline you will see Proof server unreachable. Start the container in step 2 and try again.
  2. 2If your entry has already been spent, Ghostlist advances to the next unspent entry automatically.
  3. 3The transaction hash on success is verifiable on the Midnight Explorer.

Troubleshooting

Common issues

Issue

Proof server unreachable

Docker is not running, or the proof-server container exited. Verify with docker ps, then re-run the docker run command from step 2.

Issue

Wallet won't connect

Lace must be the Midnight build and on the Preprod network. Hard-refresh the page after switching networks.

Issue

DUST not visible

DUST accrues one or two minutes after a faucet claim. Check the Midnight Explorer to confirm the funding transaction has finalized.

Issue

Already minted

The nullifier for that entry is already spent. Ghostlist advances the pointer and tries the next entry. If every entry is spent, the allowlist is exhausted.

Issue

Proof generation fails

Restart the proof server, free port 6300, and clear the browser cache. A stale prover can cache a failed witness.

Issue

Mint transaction reverts

Check the browser console for the underlying error. The most common cause is a stale Merkle tree; redeploy the contract against the latest tree and retry.

Need a hand?

Open an issue on the Ghostlist repository with the failing step, the proof server logs, and your wallet address (it is safe to share — nothing on-chain links it to your identity).