Skip to content

Your First Transaction

Generate a quantum-safe wallet, fund it, and broadcast a real transaction on stagenet. All in the browser, under 60 seconds.

Stagenet only

These are throwaway keys on the staging network. No real value, just a developer preview.


1. Open the playground

Go to soqu.org/playground. Everything runs client-side. Your private key never leaves the browser.

2. Generate a wallet

Click Generate throwaway wallet. The playground calls SoqOnchain.mlDsaKeygen() to create an ML-DSA-44 (Dilithium) keypair locally, then derives a Bech32m address:

address = bech32m("ssq", 1, SHA256(pubkey₁₃₁₂))

Your address will start with ssq1p.... The keypair is stored in localStorage, so it persists across page reloads but is discarded if you clear site data.

3. Fund from the faucet

Click Request faucet SOQ. The playground calls:

POST https://gateway.soqu.org/v1/faucet
{ "address": "ssq1p..." }

The faucet sends ~10 SOQ (1,000,000,000 shors). Wait ~60 seconds for the block to confirm, then click Refresh to see your balance.

4. Send a transaction

Enter a recipient address and amount, then click Send. Under the hood:

  1. Fetch UTXOs: GET /v1/address/{address}/utxos
  2. Get fee rate: GET /v1/feerate
  3. Build + sign: SoqOnchain.buildSignedSend() assembles the transaction and signs it with ML-DSA-44 (2,420-byte signature)
  4. Broadcast: POST /v1/tx with { "rawtx": "..." }

The node validates the witness-v1 format:

witness = [ sig₂₄₂₀ ‖ 0x01,        // SIGHASH_ALL
            0x00 ‖ pubkey₁₃₁₂ ]     // FIPS-204 form

sighash = BIP143, empty-context ML-DSA

Confirmation takes ~60 seconds (one block).


What just happened

You signed a real transaction with a NIST FIPS 204 lattice-based signature, the same standard the U.S. federal government mandates for post-quantum digital signatures. The private key never left your browser. The gateway assembled UTXO data; your browser did the signing.

Next steps