Run Ghostlist locally.
Five steps. Two terminals. A real ZK proof minted against Midnight Preprod.
Clone the repository
Get the source and install the workspace dependencies. This installs both the root tooling and the frontend.
git clone https://github.com/MayurK-cmd/GhostList.git
cd GhostList
npm install
cd frontend && npm install && cd ..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.
docker pull midnightnetwork/proof-server
docker run -p 6300:6300 midnightnetwork/proof-serverInstall and fund Lace
Lace is the only wallet Ghostlist supports. It holds your secret, builds the witness, and signs the mint transaction.
- 1Download the Lace Midnight build from the Lace GitHub releases page.
- 2Open the extension, create a new account, and save the seed phrase somewhere safe.
- 3Use the network selector to switch to Midnight Preprod.
- 4Paste your unshielded address into the Preprod faucet and claim tNight.
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.
cd frontend
npm run devMint 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.
- 1If the proof server is offline you will see Proof server unreachable. Start the container in step 2 and try again.
- 2If your entry has already been spent, Ghostlist advances to the next unspent entry automatically.
- 3The transaction hash on success is verifiable on the Midnight Explorer.
Troubleshooting
Common issuesIssue
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).