tools · midnight

Lace — the Midnight wallet.

Lace is the official browser extension wallet for Midnight. It connects to DApps, holds your shielded and public addresses, and signs transactions without ever exposing your private witness data. Built by the same team behind the Midnight network.

01

Browser Extension

Install in Chrome, Brave, or Edge. One click to connect any Midnight DApp. No desktop binary required.

02

Hardware Wallet Support

Pair with Ledger for cold-storage signing. Keys stay on the device; only proofs cross the wire.

03

Selective Privacy

Choose what to reveal. Every transaction can be fully shielded, fully transparent, or somewhere in between — you control the dial.

04

DApp Connection

Standard injection pattern. Any Lovable build that targets Midnight can request accounts, sign proofs, and submit transactions through Lace.

glacier drop

NIGHT Token Community Allocation

The Glacier Drop is Midnight's community allocation programme for the NIGHT token. Eligible participants — including early testnet contributors, hackathon builders, and ecosystem partners — may qualify for a distribution. Lace is the wallet you will use to receive and manage the allocation when the programme goes live.

setup walkthrough · lace v2

Create your Midnight wallet in ten taps.

Screens below are from the current Lace release with Midnight support enabled. Steps 09–10 show where to grab the address the faucet needs, and how to switch on tDUST.

  1. Open Lace → Add wallet
    01 · account centerOpen Lace → Add walletLaunch the Lace extension and click the purple Add wallet button at the top of the Account Center.
  2. Create a new Lace wallet
    02 · add walletCreate a new Lace walletChoose Create a new Lace wallet. Import existing or Hardware Wallet stay for later.
  3. Name it and enable Midnight
    03 · choose midnightName it and enable MidnightGive the wallet a name, toggle Midnight on (Cardano and Bitcoin optional), then Create Wallet.
  4. Enter your admin password
    04 · passwordEnter your admin passwordConfirm with your Lace admin password to authorise wallet creation.
  5. Wallet created
    05 · all doneWallet createdYou'll see All done! — click View Wallet to jump straight in.
  6. Midnight account
    06 · wallet viewMidnight accountThe new Midnight #N account loads. The 0 / 0 tDUST · tDUST Tank Empty badge is expected — that's what the faucet fixes.
  7. Wallet tab selected
    07 · wallet tabWallet tab selectedThe wallet icon on the far left of the bottom bar is your current view — nothing to click yet, just orientation.
  8. Tap the center circle
    08 · center menuTap the center circleClick the large circle icon in the middle of the bottom bar to open the Lace quick menu (Receive, Accounts, Contacts, Support).
  9. Click Receive
    09 · receive · shieldedClick ReceiveChoose Receive. The default tab is Shielded (mn_shield-addr_…) — useful for private transfers.
  10. Switch to Unshielded → copy
    10 · receive · unshieldedSwitch to Unshielded → copySwitch to Unshielded, scroll down and copy the mn_addr_… address. Paste it into the faucet, then use the D icon next to Receive to convert tNIGHT → tDUST.
  11. Address on the clipboard
    11 · address copiedAddress on the clipboardLace confirms Address copied to clipboard. You now have the mn_addr_preview… / preprod… string ready for the faucet.

Screenshots captured from the Lace browser extension. Wallet UX and additional context: Midnight Docs — Acquire tokens ↗.

faucet · request tnight

Fund the wallet from the faucet.

Two faucets, one per network. Paste the unshielded address you just copied, solve the Cloudflare check, and click Request tokens. You can pick the network from the switcher at the top-right of the faucet page too.

  1. Open the matching faucet
    01 · paste addressOpen the matching faucetGo to the preview or preprod faucet, paste your unshielded address, solve the Cloudflare check, then click Request tokens.
  2. Transaction submitted
    02 · processingTransaction submittedThe button flips to Processing request… and Your transaction is being submitted. tNIGHT usually lands within a block or two.
lace · switch network

Point Lace at Preview or Preprod.

Make sure Lace is on the same Midnight network as the faucet you used. Open Settings from the cogwheel on the bottom bar, choose Network, and confirm.

Heads up — Lace UI bug: on small laptop screens the Network modal can truncate and hide the Midnight options. If you only see Cardano and Bitcoin, resize the window — or, better, switch Lace to Expanded view mode so it opens in a full browser tab with room for the whole modal.
fix · expanded view mode

Partial fix: run Lace expanded.

Cogwheel → Default View ModeExpanded → Confirm. Lace opens in a full browser tab from now on, which fixes most clipped panels.

  1. Cogwheel → Default View Mode
    01 · settingsCogwheel → Default View ModeOpen Settings from the cogwheel and scroll to Default View Mode at the bottom of the list.
  2. Choose Expanded → Confirm
    02 · pick expandedChoose Expanded → ConfirmSwitch from Side panel (recommended) to Expanded, then Confirm. Lace now opens in a full browser tab.
  3. No more truncation
    03 · full canvasNo more truncationIn Expanded mode the Network modal (and every other panel) has room to render — all three Midnight options stay visible.
Still truncated in Expanded? The Network modal's scroll region can still hide the Midnight options (Undeployed / Preview / Preprod) below the fold, even in a full browser tab. Workaround: click into the modal, then press Tab repeatedly to walk the focus through the hidden radio options — press Space to select, then click Confirm.
  1. Open Settings → Network
    01 · settingsOpen Settings → NetworkBack in Lace, tap the cogwheel on the bottom bar to open Settings, then choose Network.
  2. Testnet → Preprod / Preview
    02 · pick testnetTestnet → Preprod / PreviewSelect Testnet. Cardano offers Preprod or Preview — pick the one that matches the Midnight network you want.
  3. Modal can truncate
    03 · small-screen bugModal can truncateHeads up: on a small laptop screen the Network modal cuts off before the Midnight section. If you only see Cardano and Bitcoin, resize the window.
  4. Full modal — 3 Midnight options
    04 · midnight optionsFull modal — 3 Midnight optionsOn a larger viewport the modal scrolls to reveal Midnight has 3 options: Undeployed, Preview, Preprod. Pick one and Confirm.
  5. Quick switch from the top bar
    05 · top-bar switchQuick switch from the top barOnce configured, the Network pill in the top-right lets you flip between Preview and Preprod without reopening Settings.
lace · midnight settings

Point Lace at your proof server.

Settings → Midnight opens the Midnight-specific config. Two things live here: Proof Server (where ZK proofs are generated) and Node address (the RPC Lace queries).

Lace Midnight Settings — Proof Server (Remote/Local) and Node address
proof server · remote

Default. Uses https://proof-server.<network>.midnight.network. Fastest for casual signing — a trusted remote generates the proof for you. Fine for most DApp interactions.

proof server · local

http://localhost:6300 — this is the Docker proof server you run for the deploy script. Most private (proofs never leave your machine) and required if you want Lace signing to hit the same prover the script uses. Start it with:

docker run -d -p 6300:6300 midnightntwrk/proof-server:latest midnight-proof-server -v
node address

Leave as https://rpc.<network>.midnight.network unless you're running your own Midnight node. This is the RPC Lace uses to read state and submit txs.

Click Save configuration after any change — Lace re-syncs against the new endpoints immediately.

generate tdust · tnight → tdust

Turn tNIGHT into tDUST.

The faucet only drips tNIGHT. Deploys and shielded txs spend tDUST — so you have to designate your tNIGHT once. In your wallet, click the D icon next to Receive, click Send twice, and enter your admin password.

  1. Tap the D icon next to Receive
    01 · tank emptyTap the D icon next to ReceiveWith tNIGHT in the wallet but 0 / 0 tDUST, click the small D icon to the right of Receive to open Generate tDUST.
  2. Send #1 — designate wallet
    02 · generate tdustSend #1 — designate walletThe Generate tDUST sheet shows your Dust Address and full tNIGHT balance. Click Send to designate it for tDUST generation.
  3. Send #2 — review & confirm
    03 · reviewSend #2 — review & confirmReview Transaction confirms you're designating 1,000 tNIGHT. Click Send again to submit.
  4. Enter your admin password
    04 · passwordEnter your admin passwordConfirm the transaction with your Lace admin password, then Confirm.
  5. Generating the ZK proof
    05 · processingGenerating the ZK proofProcessing transaction, generating zero-knowledge proof. Give it a minute — tDUST starts flowing once designation completes.
  6. tDUST tank refilling
    06 · refillingtDUST tank refillingBack on the wallet home the badge flips to Refilling (154h7min) and your tDUST balance climbs — e.g. 420 / 5,000 tDUST. You're ready to deploy.
deploy · script wallet ≠ lace wallet

Reuse your Lace seed in the deploy script.

scripts/deploy-midnight.mjs generates its own 24-word BIP-39 mnemonic on first run and stores it at .midnight-wallet.local. That wallet is not your Lace Mac Local wallet — so tDUST you generated in Lace is invisible to the script and the deploy exits with Not enough tDUST.

option A · fund the script walletImport script seed into Lace

Open .midnight-wallet.local, copy the 24 words, and import them as a new wallet in Lace. Faucet tNIGHT to that wallet's unshielded address, generate tDUST, then re-run the script.

option B · reuse an existing lace walletPaste Lace seed into the script file

In Lace: Settings → Show Recovery Phrase for Mac Local (enter admin password). Copy the 24 words as one line, then on your machine:

echo "word1 word2 ... word24" > .midnight-wallet.local
chmod 600 .midnight-wallet.local
bun scripts/deploy-midnight.mjs
Treat the recovery phrase like a password. .midnight-wallet.local is already gitignored and created with 0600 permissions — don't commit it, don't share it, don't paste it into chat.
Same seed, same addresses. The deploy script now uses the same HD derivation as Lace (WalletSeeds.fromMnemonic from @midnight-ntwrk/testkit-js), so Option B produces the exact addresses Lace shows. Verify before deploying:
MIDNIGHT_WALLET_SEED="$(cat .midnight-wallet.local)" \
  bun scripts/derive-unshielded-address.mjs --network=preprod
The printed shielded + unshielded addresses must match the ones in Lace. If they don't, you pasted the wrong seed.
testnet

Faucets & Addresses

Once Lace is installed, switch to the network you are building on and copy your address to request test tokens. Preprod is the default for hackathon demos; Preview is for bleeding-edge SDK features.

Read more about the differences between networks in the Quantum Primer →