Your first transaction
Let us send something for real — on a test network, to your own second address, so there is genuinely nothing to lose. It assumes you finished the Quickstart and wallet is your alias.
Let us send something for real — on a test network, to your own second address, so there is genuinely nothing to lose. It assumes you finished the Quickstart and wallet is your alias.
Here is the honest map of what is coming. The wallet needs two approvers, and you have one, so we add a second first. That part is one-time. Then it is just: switch network, get some free test coins, and walk propose → approve → send.
0 · One-time: give yourself a second approver#
Your wallet requires two approvals per transaction, one of them human, and right now there is only you. So register a second approver. Your full-access token can do this directly — no ceremony — because it is the admin.
If you are on your own, you will simply hold both tokens. If you have a co-signer, this second token is theirs.
# make a secret for the second approver and lock the file down
openssl rand -hex 24 > ~/.canonical/signer-2.token
chmod 600 ~/.canonical/signer-2.token
# register it as a second human approver
wallet client register \
--label signer-2 \
--principal-kind human_operator \
--client-token-file ~/.canonical/signer-2.token \
--capability view_proposal \
--capability approve_proposal \
--capability reject_proposal \
--jsonGive the second approver its own shortcut:
alias wallet2='canonicalwallet --token-file ~/.canonical/signer-2.token'
wallet2 me # should show a human approverThat is it — you now have two humans who can approve. You will not do this again; every future transaction reuses them.
1 · Get onto a test network with free money#
Your wallet still points at the placeholder Chunknet. Move to Sepolia (a free test network), and make a second address to send to:
wallet chains switch --chain-id 0xaa36a7 # Sepolia
wallet wallet derive-account # a second address, same recovery phrase
wallet accounts # jot down both addressesNow get some test ETH into your first address from a public "Sepolia faucet" (search that; they are free). The transfer below moves a sliver of it to your second address — your money, going from your own left pocket to your own right pocket.
2 · Draft it#
wallet proposal tx \
--chain-id 11155111 \
--from <your-first-address> \
--to <your-second-address> \
--value-wei 1000000000000000 \
--rationale "first transfer, docs walkthrough"That is 0.001 test ETH. All four of --chain-id, --from, --to, and --value-wei are required — leave one out and it will complain. Nothing is signed yet; this hands you back an id. Copy it — every step below uses it as <id>.
3 · Look at what you drafted#
wallet proposal review --id <id>The wallet decoded and simulated your transfer. Check three things with your own eyes: the destination is your second address, the amount is right, and it is not flagged as blocked. Your approval will lock onto exactly this — if anything changes later, it is void.
4 · Approve it — twice#
First, as yourself:
wallet proposal approve --id <id>It is still waiting — one approval is not two. Ask it what is missing:
wallet proposal why-not-executable --id <id>
# → needs one more approvalNow approve as your second signer:
wallet2 proposal approve --id <id>Two approvals in, one of them human. It flips to approved.
5 · Send it#
wallet proposal execute --id <id>The wallet takes one last look to make sure nothing drifted since you approved, checks both approvals, then signs and broadcasts. It hands back a transaction hash. See it land:
wallet activity list # the readable version
wallet audit list # the exact record of every stepYou can also drop that hash into sepolia.etherscan.io and watch it confirm.
That is the whole product, right there#
A request became a draft. The draft was reviewed and frozen. Two people signed off. A last-second safety check passed. Only then did money move — and every step is written down where it cannot be quietly changed. A payroll run or an agent-drafted trade takes the exact same path; only the amounts and the number of signers differ.
Doing this solo, forever?#
Holding two tokens yourself works, but it is a bit clumsy. Your realistic options:
- Keep the two tokens — simplest; you approve twice.
- Add real co-signers — register their tokens as approvers and the two approvals are genuinely split across people. See Multisig & policy.
- Drop to one approval — possible, but on purpose not easy: loosening the rule itself takes two approvals, so you need a second signer to get there in the first place. Same page explains why.