Quickstart ~10 minutes · testnet · no prior chain experience needed

Zero to first transaction.

Install the CLI, generate a quantum-safe wallet, claim testnet VLD from the faucet, send a transaction, and (optionally) deploy a smart contract — in roughly ten minutes. Nothing in this guide costs real money.

Prerequisites. A Unix-like terminal (macOS, Linux, or WSL on Windows). Node.js 20+ if you want to run the contract step. Nothing else.
1

Install the CLI

The Valdium CLI is a single static binary. Install it via the official script — it pins to the latest stable release and verifies the signature before running.

$ curl -sSL https://get.valdium.xyz | sh

Verify the install:

$ valdium --version
valdium-cli 1.10.0  # testnet build, Dilithium3 enabled
2

Create a wallet

Generate a fresh ML-DSA-65 keypair. The seed is shown once — write it down or copy it to a password manager before pressing enter.

$ valdium wallet create

Generating ML-DSA-65 (Dilithium3) keypair...
Seed:    0xa1ae94e345bf...d33790c06610
Address: 0x209d8683a6b7b990820221aAD2eeCbf40C800fdf
PubKey:  0x0c13cce08ee6bc55...f535d0a9ce79bd32  (1,952 bytes)

# ⚠ The seed is shown only once. Lose it = lose the wallet.
Why is the pubkey so large? Dilithium3 public keys are ~1.95 KB and signatures are ~3.3 KB. That's the post-quantum tax. We engineered the block format around it from genesis — see the thesis for the trade-off discussion.
3

Claim testnet VLD from the faucet

The faucet hands out 100 VLD per request on testnet. Cooldown is one hour per address.

$ valdium faucet --amount 100

Requesting 100 VLD from testnet faucet...
✓ Funded in block #14,127
Tx: 0x2d5224c9...2eb055a3
Explorer Link ›

Check the balance:

$ valdium balance
100.000 VLD
4

Send your first transaction

Transfer some VLD to a friend or a burner address. The CLI signs with ML-DSA-65 by default — there's no "legacy mode" because the chain has no legacy.

$ valdium send 0x685a7c7a...2950724b 10 VLD

Signing with ML-DSA-65...
Broadcasting transaction...
✓ Confirmed in block #14,131
Tx: 0x57f7...515d6   Gas: 0.001 VLD

Transactions finalise in two blocks — about four seconds wall clock from broadcast.

5

Deploy a JavaScript contract (optional)

Valdium contracts are plain JavaScript files. Create a token contract — note the absence of constructors, modifiers, or anything that doesn't look like ordinary JS.

// token.js
function init() {
  storage.name = 'DemoToken';
  storage.totalSupply = '1000';
  storage.balances = { [msg.sender]: '1000' };
}

function transfer(to, amount) {
  const b = storage.balances;
  assert(+b[msg.sender] >= +amount, 'insuf.');
  b[msg.sender] = String(+b[msg.sender] - +amount);
  b[to] = String(+(b[to] || '0') + +amount);
  emit('Transfer', { from: msg.sender, to, amount });
}

Deploy it:

$ valdium deploy token.js

Deploying contract (518 bytes)...
Signing with ML-DSA-65...
✓ Deployed in block #14,138
Contract: 0x3644006ba60f097f1bca3d38715cf6687f6b69dd

Call the transfer function:

$ valdium call transfer 0x685a7c7a...2950724b 250

✓ Confirmed in block #14,141

Read the balance:

$ valdium view balanceOf 0x685a7c7a...2950724b
250

What's next

Everything above ran against testnet. The same commands work against mainnet once it launches — there is no separate "production" workflow.

Stuck? Most issues at this stage are install-path or Node-version related. Drop a message in Telegram with the exact command and the error — the founder reads everything personally on testnet.
Previous The Team