Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Sending your first transaction

This tutorial continues from Wallet setup: it assumes zallet start is running and you have generated a mnemonic. You will create an account, receive funds, and send them onward.

All commands below use zallet rpc. Remember its quoting rule: parameters must be valid JSON, so strings need shell-quoted double quotes ('"like this"').

1. Wait for sync

$ zallet rpc getwalletstatus

Compare wallet_tip with node_tip — they should match (and keep matching) before you rely on balances.

2. Create an account

$ zallet rpc z_getnewaccount '"main"'

The string is the account’s name. The response includes the account’s UUID — copy it, as it identifies the account in the other commands. (If your wallet has more than one mnemonic, you must also pass the seed fingerprint as a second parameter.)

3. Derive an address

$ zallet rpc z_getaddressforaccount '"<account-uuid>"'

This returns a Unified Address for the account. You can derive as many addresses as you like — see Accounts and keys for how they relate.

4. Receive funds

Send ZEC to the address from another wallet (on testnet, a faucet works). Once the funding transaction is mined, it appears in:

$ zallet rpc z_listunspent

Note that received funds are not spendable immediately: outputs received from other parties are spendable after 10 confirmations by default. See Notes, confirmations, and fees.

5. Check the balance

$ zallet rpc z_getbalanceforaccount '"<account-uuid>"'

6. Send

$ zallet rpc z_sendmany '"<your-unified-address>"' \
    '[{"address": "<recipient-address>", "amount": 0.001}]'

The first parameter selects whose funds to spend (an address of your account); the second is the list of payments. Fees are set automatically (ZIP 317); there is nothing to configure.

By default Zallet only builds fully-shielded transactions. If the recipient address is transparent, the call fails with a privacy-policy error telling you which privacy_policy value to pass to accept the trade-off — see Troubleshooting.

z_sendmany does not block: it returns an operation id (opid-…) immediately while the wallet builds and proves the transaction in the background.

7. Track the operation

$ zallet rpc z_getoperationstatus '["opid-…"]'

Poll until the status is no longer executing, then collect the result (this also removes the finished operation):

$ zallet rpc z_getoperationresult '["opid-…"]'

On success the result contains the transaction id(s). See Asynchronous operations for the lifecycle.

8. Inspect the transaction

$ zallet rpc z_viewtransaction '"<txid>"'

This shows the transaction as your wallet sees it, including decrypted shielded outputs, the accounts involved, and the fee.