Waxseal
Preprod testnet

Testnet guide

Try Waxseal on Midnight Preprod

Everything here uses test tokens with no value. In about twenty minutes you will install a wallet, get test funds, place a sealed bid and create a tender of your own. Nothing to download apart from the wallet extension: proofs are generated in your wallet or in your browser.

0. Before you start

What you need:

  • A desktop browser: Chrome, Edge or Firefox (Brave works if you disable Shields for waxseal.xyz).
  • About 20 minutes, plus waiting time for DUST to accumulate the first time.
  • A passphrase you will not forget. It encrypts your bid vault on this device. Nobody can reset it.

Preprod is a test network. tNIGHT, DUST and tSEAL have no value. Waxseal is not audited yet; do not use real funds anywhere in this flow.

1. Install the 1AM wallet

We recommend 1AM, a Midnight-native wallet that generates zero-knowledge proofs inside the extension, so you need no other software. Lace also works (see section 10).

  1. Install the 1AM extension for Chrome or Firefox from 1am.xyz.

    Create a new wallet and write down the recovery phrase on paper. Never type it into any website, including this one.

  2. In the wallet, switch the network to Preprod.

    Waxseal only talks to Preprod for now; a wallet on another network will be refused at connect time.

  3. Copy your unshielded address. It starts with mn_addr_preprod1….

    You will paste it into the faucet in the next step. Shielded (mn_shield-addr…) and DUST addresses are not accepted by the faucet.

2. Get tNIGHT and DUST

Every Midnight transaction consumes DUST, a fee resource that you cannot buy or transfer: it is generated over time by NIGHT you hold and have registered. So the order is: get test NIGHT from the faucet, register it, wait for DUST.

2a. Request tNIGHT from the faucet

  1. In the wallet, copy your unshielded address (mn_addr_preprod1…). Copy only the address, with no spaces around it.

    The faucet rejects shielded (mn_shield-addr…) and DUST (mn_dust…) addresses.

  2. Open the Preprod faucet: midnight-tmnight-preprod.nethermind.dev (alternative: faucet.preprod.midnight.network).
  3. Paste the address, solve the captcha and click Request tokens. The page confirms with a transaction id:
    Transaction submitted. You will shortly receive 1000 tNight in your wallet.

    1,000 tNIGHT shows up in the wallet's unshielded balance within a couple of minutes. The faucet is rate limited per address; one request is plenty for testing.

2b. Generate tDUST (register your tNIGHT)

Holding NIGHT alone generates nothing. A one-time registration transaction links your NIGHT to your DUST address and starts the generation.

  1. 1AM: open the DUST section of the wallet and start generation for your tNIGHT (the wallet shows the DUST address it will use and a live regeneration gauge). Approve the transaction.
    Lace: in the Midnight wallet view click Generate tDUST; your tDUST address is filled in automatically. Click Review transaction, then Confirm.

    This registration is itself a transaction, but it is the one transaction that needs no DUST.

  2. Wait. DUST accrues linearly from zero toward a cap of about 5 DUST per registered NIGHT (the cap is reached in roughly a week). Usable amounts appear much earlier: usually within minutes, on a fresh wallet on the live network sometimes hours. The wallet shows the balance (Lace: the "tDUST tank") rising.
  3. Before you continue, make sure the wallet shows a DUST balance above zero and that enough time has passed for a spendable DUST coin to exist (a minute or two after the balance turns positive). Every Waxseal action costs a small amount of DUST; it regenerates after spending.

DUST stuck at zero for hours? Registration is not retroactive to NIGHT that arrived under a key with no DUST address yet. Fix without a new wallet: keep the registration, then send a small amount of tNIGHT to your own address; the fresh NIGHT output generates normally. Also check that the wallet is on Preprod (Preview has separate balances), and that you are not looking at the shielded balance.

3. Connect and unlock your vault

  1. Open waxseal.xyz/tenders and click Connect wallet in the header. If several wallets are installed, choose 1AM. Approve the connection in the wallet (choose Always to skip the prompt next time).
  2. Open any tender and, under Your participation, set a vault passphrase (16+ characters, three kinds of characters) and click Unlock vault.

    The vault is an encrypted store in this browser. It holds the two secrets that make you you on Waxseal and every sealed bid you place. Lose the passphrase or clear the browser's site data and you can no longer claim a win or refund a deposit. Write the passphrase down.

  3. Leave Where proofs are generated on In my wallet for 1AM. With Lace it defaults to In this browser, which needs nothing installed but takes one to three minutes per action.

4. Get tSEAL test tokens

Tenders that require a deposit lock a shielded token with each bid. NIGHT cannot be shielded on Midnight, so Preprod uses a free test token, tSEAL, minted by a faucet contract.

  1. Open your Profile (header button). The Wallet & test tokens box shows your tNIGHT, DUST and tSEAL balances.
  2. Click Get 10,000 tSEAL (free) and approve the transaction in the wallet.

    The wallet needs DUST for the fee. The proof is generated in the wallet (or in your browser); once the transaction is confirmed the balance shows 10,000 tSEAL. Claim again whenever you run low. The same button also appears on every tender that requires a deposit.

5. Bid on a tender

  1. Pick a tender in Accepting sealed bids state. Read its public parameters: bid range, winner rule (lowest or highest wins), deposit, closing time and the clock (how much the price moves per round and how long a round lasts).
  2. Under Your participation, type your bid inside the range and click Commit sealed bid (or Commit sealed bid + lock 50 deposit). Approve in the wallet.

    Your bid is hashed with a random salt on your device; only the commitment and a proof that the bid is valid go on chain. The deposit is a shielded coin the contract receives in the same transaction.

  3. After confirmation the page shows Commitment confirmed on chain, your sealed bid (read from your vault, visible only to you) and the round in which you qualify: the first round whose clock price reaches your bid.
  4. Under Proof of your sealed bid, click Check my bid against the chain. Your device recomputes the commitment from your vault and compares it with the one on chain, then offers a receipt (tender, commitment, block and time, no bid value) you can keep or share.

    Export opening… creates a file that also contains your bid, for someone you choose to show it to, such as your auditor. It is made on your device and Waxseal never receives it. Anyone holding it can check it with the Python verifier, without Waxseal.

One bid per tender per vault. The number of sealed bids is public; their values are not, and Waxseal never has them.

6. The price clock: claim, refund

When bidding closes, a public price clock starts. With lowest bid wins it starts at the minimum and rises by one step per round; with highest bid wins it starts at the maximum and falls.

  1. Come back in your qualifying round (the page shows when it starts; use the countdown). The button Claim at … now appears only during that round. Click it and approve.

    A bid can be claimed only in its own round, so nobody can wait for a better price. The first valid claim settles the tender at the round price. If someone with a better bid claimed in an earlier round, the tender is already settled and you did not win.

  2. If you did not win, click Refund my deposit once the tender is settled or expired. The contract returns your shielded deposit to your wallet.

    A bidder whose bid was better than the winner's but who stayed silent cannot refund: silence forfeits the deposit. This is what makes the clock result reliable.

  3. If nobody claims before the clock ends, anyone can click Mark tender expired; then every bidder can refund.

Want to watch a full cycle quickly? Create your own tender with a short close time and 2-minute rounds (next section), bid from one browser profile, and claim.

7. Create your own tender

  1. Go to Create. Fill in Basics: title, organiser, category, description. All of this is public and its hash is written into the contract, so it cannot be edited afterwards.
  2. Choose Clock mode, the winner rule and the bid range (whole units, for example 100 to 1,000).
  3. Set the deposit in tSEAL (for example 50) or leave it empty. Without a deposit a silent better bidder is not penalised, so results are only as good as bidders' honesty.
  4. Pick when bidding closes (use +1 hour for a quick test), the clock step (for example 100) and the round length in minutes (10 is the minimum: proving a claim in the browser takes one to two minutes, and a bid can only be claimed inside its own round). The form shows how many rounds that makes.
  5. Click Review public parameters, check the summary, then Deploy tender on Preprod and approve in the wallet. Deploying is a contract creation; it costs DUST like any transaction.

    After confirmation you land on the tender page and its link appears in the public list. Share the link; anyone with a funded wallet can bid.

As the organiser you see nothing more than everyone else while bidding is open: the number of sealed bids, never their values. After settlement the winner's deposit stays locked as the performance bond, which the organiser can collect once the refund window has passed (through the SDK today; an organiser page is coming).

8. Committee mode (optional)

Committee mode is for evaluated procurement: bids are also encrypted to a committee key, the committee decrypts them off chain and proves the winner against every commitment. It needs the committee CLI from the repository:

export COMMITTEE_VAULT_PASSWORD='a strong passphrase'   # encrypts the key files at rest
pnpm --filter @waxseal/committee committee keygen --out ./committee --threshold 2 --shares 3
# writes public-key.json (paste it into the Create form) and 3 key shares
pnpm --filter @waxseal/committee committee view <tender> --shares ./committee/share-1.json,./committee/share-2.json
pnpm --filter @waxseal/committee committee reveal <tender> --shares ./committee/share-1.json,./committee/share-2.json

In the Create form choose Committee mode, paste public-key.json, name the committee and its members, and set the reveal window. Bidders use the same flow as above; their bids are encrypted inside the proof. Full details are in the whitepaper, section 4.4.

9. Profile and history

  1. Click Sign in in the header. With 1AM or Lace, choose Sign in with my bid-vault key: a key derived from your vault signs a short message. No password, no transaction.
  2. Capability profile: name, organisation, sectors, certificates. For a certificate you can attach the file: only its SHA-256 fingerprint is stored, the file stays on your computer. Tick Publish to get a public link.
  3. Participation history: the tenders you bid on and organise, with outcomes. It is computed on your device from your vault and never uploaded.

10. Check a tender yourself

You do not have to trust this website about how a tender ran. Every tender page has a Verify independently button, and /verify accepts any tender address. No wallet or account is needed.

  1. Your browser reads the contract's complete history from Midnight's public indexer, not from Waxseal.
  2. It checks that the contract is a published Waxseal release, that its rules are frozen and never changed, that every sealed bid was recorded before the deadline and never replaced, that the result follows the rules and that deposits add up.
  3. It checks the independent time stamps too: signed by DigiCert and Sectigo shortly after each transaction, they prove the tender's state and its sealed bids existed no later than the time shown, without relying on the network's clocks. Each one can be downloaded and checked with OpenSSL.
  4. Download report saves the findings with a digest. Anyone running the check at the same block gets the same findings. The command-line version and the notes for counsel explain what the record proves, and what it does not.

Tenders created from 25 September 2026 give up their upgrade key at creation, so nobody, including the organiser and Waxseal, can change their rules. The verifier shows this as Rules frozen.

11. Using Lace instead

Lace (Chrome/Edge) works with Waxseal, with one difference: Lace does not generate proofs itself, so it needs a proof server on your computer for its own part of each transaction (fees and coin spends). Waxseal's own proofs are generated in your browser. To run the proof server (Docker required):

docker run -p 6300:6300 midnightntwrk/proof-server:8.1.0 -- midnight-proof-server --network preprod

Then set the proof server URL in Lace's settings to http://127.0.0.1:6300, switch Lace to Preprod and follow the same steps from section 2. On Brave, disable Shields for waxseal.xyz; Safari does not allow websites to reach a local server.

12. Troubleshooting

What you seeWhat to do
Header shows Get 1AM / Get Lace although a wallet is installedReload the page; extensions inject a moment after load. On Brave, disable Shields for this site.
Connection refused or wrong networkSwitch the wallet to Preprod and connect again.
Transaction rejected for fees, or "insufficient DUST"Wait for DUST to accumulate (section 2). Each action costs a little DUST.
"not enough for the deposit"Claim tSEAL on your Profile page (or with the button on the tender page) and wait for the balance to update.
"Proving and submitting…" for a long timeNormal with in-browser proving (1–3 minutes per action; the progress box lists each proof). Keep the tab open.
Your bid or "You qualify in round…" is missing after a reloadUnlock the vault with the same passphrase in the same browser profile. Bids live only in that vault.
Forgot the vault passphraseThere is no recovery. Bids already committed cannot be claimed or refunded from another vault; deposits of unrefunded losers can be collected by the organiser after the refund window.

Useful links: block explorer, faucet, Midnight guide to funding a wallet, test tenders #4 (50 tSEAL deposit, open until 7 October) and the finished #3 for its history and verification report.