Wallet and transfers
A wallet is one encrypted file. Everything below can be done from the console, which previews what it is about to sign before it signs it.
Make one
./baklava
> /keygen alice.json alice
> /open alice.jsonThe second argument files the address in this console's address book under a name, so later commands can say alice instead of forty-two characters. The book is a convenience of the console and the chain has never heard of it.
The same thing without the console:
./baklava keygen -keystore alice.jsonThere is no recovery
The keystore is encrypted with the passphrase you type and nothing else. Lose it and the account is gone — no reset, no support, no second copy anywhere. On this testnet that costs you nothing, which is exactly why it is the right place to build the habit.
Get some tokens
The faucet sends 1 BKLV to any address, once a day. It is a wallet with money in it signing an ordinary transfer — nothing is minted, because the supply is fixed at genesis, so it runs out and is refilled by hand.
curl -X POST https://faucet.baklava.network/v1/request \
-H 'Content-Type: application/json' \
-d '{"address":"bkx1..."}'Send a transfer
> /connect https://rpc.baklava.network
> /transfer 1 BKLV aliceThe console shows three numbers before anything is signed: what leaves your account, the fee, and what arrives. They are not the same number, and which one you meant is a real question.
All-in, or on top
The chain debits Amount + Fee from the sender and credits Amount to the recipient. So “send 1 BKLV” has two honest readings, and the console names the one it is using:
- All-in (the default) — exactly what you typed leaves your account, and the recipient gets slightly less.
- On top (
--on-top, or/set fee.mode) — the recipient gets exactly what you typed and you pay a little more.
This is a wallet convention, not a chain rule. The transaction that comes out is an ordinary transaction under both.
Units
1 BKLV = 1,000,000 Krumb. A bare number means BKLV and Krumb has to be asked for by name. Nothing is ever parsed as a floating-point number — the two halves are integers and are combined with integer arithmetic. A comma is refused rather than guessed at, because a Turkish keyboard means the opposite by it than this parser would.
Verify what happened
A transaction is not a block. Yours goes into the next one a committee votes on, along with anything else waiting, in nonce order.
> /receipt <transaction id>A receipt is about a kilobyte and it proves itself: the transaction, a Merkle proof, and the signed header. This chain keeps no history — users carry their own receipts — so it is worth keeping the ones that matter.
A wallet has to count its own nonce
A node answers about committed state, so an account's nonce comes back unchanged until the block carrying your last transfer lands. Signing the next one against that answer signs the same nonce twice, and the mempool refuses the second.
The console tracks this for you, which is why the balance it shows already has anything queued taken off it. Opening a wallet starts the run over.