Skip to main content

Getting Started

This guide walks you through connecting to the Specter Testnet, obtaining testnet GHOST tokens, and performing your first commit/reveal cycle using the Specter webapp.

Prerequisites

  • MetaMask (or any EVM-compatible wallet) installed in your browser
  • A modern browser (Chrome, Firefox, Brave, or Edge)
  • Basic familiarity with EVM transactions

Step 1: Connect MetaMask to Specter Testnet

Add the Specter Testnet as a custom network in MetaMask with the following parameters:

ParameterValue
Network NameSpecter Testnet
RPC URLhttps://testnet.specterchain.com
Chain ID5446
Currency SymbolGHOST
Decimals18
Block Explorer(leave blank or use testnet explorer if available)

Manual Configuration

  1. Open MetaMask and click the network dropdown at the top.
  2. Select Add Network (or Add a network manually).
  3. Enter the values from the table above.
  4. Click Save.

MetaMask should now show your GHOST balance on the Specter Testnet (initially 0).

Chain ID Must Be 5446

An older Avalanche L1 deployment used Chain ID 47474. That chain is deprecated. If your balance shows 0 after receiving tokens, verify that your wallet is configured with Chain ID 5446, not 47474.

Step 2: Get Testnet GHOST from the Faucet

The Specter faucet distributes 100 GHOST per request with a 24-hour cooldown per address.

Using the Faucet API

Send a POST request to the faucet endpoint with your wallet address:

curl -X POST https://faucet.specterchain.com/api/drip \
-H "Content-Type: application/json" \
-d '{"address": "0xYourWalletAddressHere"}'

A successful response returns the transaction hash:

{
"status": "ok",
"txHash": "0xabc123...",
"amount": "100000000000000000000",
"cooldownEnds": "2026-03-17T12:00:00Z"
}

If you request again before the 24-hour cooldown expires, you will receive an error:

{
"status": "error",
"message": "Cooldown active. Next drip available at 2026-03-17T12:00:00Z"
}

Using the Webapp Faucet

Alternatively, the Specter webapp includes a built-in faucet UI. Connect your wallet and navigate to the faucet page to request tokens with a single click.

Verifying Your Balance

After the faucet transaction confirms, verify your balance in MetaMask or via RPC:

curl -X POST https://testnet.specterchain.com \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": ["0xYourWalletAddressHere", "latest"],
"id": 1
}'

The result will be your balance in aghost (the smallest unit, 18 decimals), encoded as a hex string. 100 GHOST = 0x56BC75E2D63100000.

Step 3: Make Your First Commit

A commit is the first phase of Ghost Protocol. You lock tokens (or data) into a cryptographic commitment that is stored in the on-chain Merkle tree. Once committed, the tokens leave your address and cannot be traced back to you.

Using the Webapp (Vanish Screen)

  1. Navigate to the Specter webapp and connect your wallet.
  2. Go to the Vanish screen.
  3. Select the token you want to commit (e.g., GHOST).
  4. Enter the amount.
  5. The webapp generates a phantom key — a JSON blob containing your secret, nullifier secret, blinding factor, and commitment. Save this key securely. Without it, you cannot reveal your tokens.
  6. Confirm the transaction in MetaMask. The webapp calls commit() on the CommitRevealVault contract (0x908aA11Dc9F2e2C3F69892acaDE112e831c0a14a).
  7. Once the transaction confirms, your commitment is inserted into the CommitmentTree (0xE29DD14998f6FE8e7862571c883090d14FE29475).

Your tokens are now committed. The phantom key is your only proof of ownership.

Step 4: Reveal Your Tokens

A reveal is the second phase. You prove knowledge of a valid commitment in the Merkle tree using a zero-knowledge proof, without revealing which commitment is yours. Fresh tokens are minted to the recipient address.

Using the Webapp (Summon Screen)

  1. Go to the Summon screen.
  2. Import your phantom key (paste JSON, scan QR, or tap NFC card).
  3. The webapp generates a Groth16 proof client-side using snarkjs. This takes a few seconds.
  4. Choose a recipient address (can be your own wallet or a different address).
  5. Confirm the reveal transaction. The webapp calls reveal() on the CommitRevealVault, which:
    • Verifies the Groth16 proof on-chain via GhostRedemptionVerifier (0xc0A9BcF60A6E4Aabf5Dd3e195b99DE2b9fac3Dee).
    • Checks the nullifier has not been used before via NullifierRegistry (0xaadb9c3394835B450023daA91Ad5a46beA6e43a1).
    • Mints fresh tokens to the recipient via NativeAssetHandler (0xA0bA5389b07BAdDAaE89B8560849774Bf015acc3).
  6. The recipient receives unlinkable tokens at their address.

Step 5: Verify the Privacy Guarantee

After completing a commit and reveal:

  • The commit transaction shows tokens leaving your address into the vault. An observer knows someone committed.
  • The reveal transaction shows tokens arriving at the recipient from the vault. An observer knows someone revealed.
  • There is no on-chain link between the two transactions. The zero-knowledge proof proves membership in the Merkle tree without revealing which leaf.

What's Next