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:
| Parameter | Value |
|---|---|
| Network Name | Specter Testnet |
| RPC URL | https://testnet.specterchain.com |
| Chain ID | 5446 |
| Currency Symbol | GHOST |
| Decimals | 18 |
| Block Explorer | (leave blank or use testnet explorer if available) |
Manual Configuration
- Open MetaMask and click the network dropdown at the top.
- Select Add Network (or Add a network manually).
- Enter the values from the table above.
- Click Save.
MetaMask should now show your GHOST balance on the Specter Testnet (initially 0).
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)
- Navigate to the Specter webapp and connect your wallet.
- Go to the Vanish screen.
- Select the token you want to commit (e.g., GHOST).
- Enter the amount.
- 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.
- Confirm the transaction in MetaMask. The webapp calls
commit()on theCommitRevealVaultcontract (0x908aA11Dc9F2e2C3F69892acaDE112e831c0a14a). - 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)
- Go to the Summon screen.
- Import your phantom key (paste JSON, scan QR, or tap NFC card).
- The webapp generates a Groth16 proof client-side using
snarkjs. This takes a few seconds. - Choose a recipient address (can be your own wallet or a different address).
- Confirm the reveal transaction. The webapp calls
reveal()on theCommitRevealVault, 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).
- Verifies the Groth16 proof on-chain via
- 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
- Deploy a Privacy Token — create your own GhostERC20 token that works with the commit/reveal system.
- Create a Custom Policy — enforce compliance rules at reveal time.
- Integrate Phantom Keys — programmatically generate and manage phantom keys.
- Client-Side Proofs — generate ZK proofs in your own application.