zkmoney CLI
zkmoney is the command-line client for zk.money: private DAI on Aztec, with exits to Ethereum and other chains. It is experimental and moves real funds on mainnet. The installer and releases live in aztec-labs-eng/zkmoney-cli.
gh release download -R aztec-labs-eng/zkmoney-cli -p install.sh -O - | sh
Installation
macOS or Linux, x64 or arm64. Requires Node.js 22+ and a signed-in gh.
gh release download -R aztec-labs-eng/zkmoney-cli -p install.sh -O - | sh # latest
gh release download -R aztec-labs-eng/zkmoney-cli -p install.sh -O - | sh -s -- 0.3.2 # pinned
Installs to ~/.local/share/zkmoney-cli and links ~/.local/bin/zkmoney, after checking SHA256SUMS. Rerun to upgrade.
Configuration
zkmoney config show
zkmoney config set <key> <value>
zkmoney config unset <key>
Resolution order: flag, environment, ~/.zkmoney/<network>/config.json, ~/.zkmoney/config.json, profile. profile is stored for the home; every other key per network.
| Key | Environment | Description |
|---|---|---|
profile |
ZKMONEY_PROFILE |
mainnet (default), staging / testnet |
profileUrl |
ZKMONEY_PROFILE_URL |
Config profile document |
node.url |
ZKMONEY_NODE_URL |
Aztec node |
node.apiKey |
ZKMONEY_NODE_API_KEY |
Key for the profile's node gateway |
l1.rpc |
ZKMONEY_L1_RPC |
Ethereum RPC; must serve historical logs |
accountService.url |
ZKMONEY_ACCOUNT_SERVICE_URL |
Account service |
addresses.registry |
ZKMONEY_REGISTRY |
Contract override |
addresses.portal |
ZKMONEY_PORTAL |
Contract override |
addresses.token |
ZKMONEY_TOKEN |
Contract override |
addresses.claimFpc |
ZKMONEY_CLAIM_FPC |
Contract override |
addresses.sUSDSPortal |
ZKMONEY_SUSDS_PORTAL |
Sky savings deployment |
addresses.skyEscrowFactory |
ZKMONEY_SKY_ESCROW_FACTORY |
Savings escrow factory |
addresses.acrossBridgeEscrowFactory |
ZKMONEY_ACROSS_BRIDGE_ESCROW_FACTORY |
Across escrow factory |
addresses.cctpBridgeEscrowFactory |
ZKMONEY_CCTP_BRIDGE_ESCROW_FACTORY |
CCTP escrow factory |
defaults.asset |
ZKMONEY_ASSET |
Deposit asset: DAI, USDC, USDT |
defaults.withdrawAsset |
ZKMONEY_WITHDRAW_ASSET |
Withdrawal asset: DAI, USDC, USDT, ETH |
Global options
| Option | Description |
|---|---|
--home <dir> |
Account, settings and store. Default ~/.zkmoney |
--profile <name> |
Network for this command |
--node-url <url> |
Aztec node for this command |
--l1-rpc <url> |
Ethereum RPC for this command |
-V, --version |
Print the version |
account
zkmoney account init [options]
Creates the account's passkey. A key file is sealed with ZKMONEY_PASSPHRASE.
| Option | Description |
|---|---|
--key <kind> |
security-key, file or auto (default) |
--name <name> |
Label for a security-key credential. Default zk.money CLI |
zkmoney account show [--full]
Prints the account's addresses and passkey.
zkmoney account sync
Derives the account's addresses and looks up its tag.
register
zkmoney register <tag> [options]
Claims a tag. Prints a deposit address and amount (15 DAI on mainnet), payable in DAI, USDC or USDT within the 7-day hold.
| Option | Description |
|---|---|
--fund |
Send the deposit from ZKMONEY_L1_PRIVATE_KEY |
--wait |
Poll until the name is registered |
--timeout <minutes> |
How long --wait polls. Default 60 |
--idempotency-key <key> |
Returns this registration on retry |
--full |
Full addresses |
zkmoney register status [--full]
Pending registration: phase, deposit address, amount received, registry state.
deposits
zkmoney deposits create [options]
Creates a deposit address for one transfer of DAI, USDC or USDT from Ethereum, credited as private DAI.
| Option | Description |
|---|---|
--asset <symbol> |
Token to request. Default defaults.asset |
--amount <n> |
Amount to request, in that token |
--idempotency-key <key> |
Reuses the address this key created |
--full |
Full addresses and hashes |
zkmoney deposits get <address> [--full]
zkmoney deposits list [--all] [--full]
--all includes settled deposits.
balance, txs, watch
zkmoney balance
Syncs once and prints the private balance. A sync also claims swept deposits and finished savings moves.
zkmoney txs [options]
| Option | Description |
|---|---|
-n, --limit <count> |
Rows. Default 20 |
--sent |
Sends only |
--received |
Receives only |
--full |
Full addresses and hashes |
zkmoney watch [options]
| Option | Description |
|---|---|
--interval <seconds> |
Seconds between syncs. Default 15 |
--once |
Sync once, print changes, exit |
--full |
Full addresses and hashes |
send, payments
zkmoney send <amount> [asset] --to <recipient> [options]
Pays from the private balance. asset is DAI.
| Option | Description |
|---|---|
--to <recipient> |
Tag, saved contact, or 0x L2 address |
--memo <text> |
Note the recipient sees |
--idempotency-key <key> |
Returns the same payment on retry; also its id |
--full |
Full addresses and hashes |
zkmoney payments get <id> [--full]
Status: pending, mined or failed.
zkmoney payments list [-n <count>] [--full]
withdraw, withdrawals
zkmoney withdraw <amount> --to <recipient> [options]
Burns to an Ethereum address; the amount includes fees. USDC, USDT and ETH swap on arrival (mainnet). With ZKMONEY_PREDICATE_* set, the recipient is screened before the burn.
| Option | Description |
|---|---|
--to <recipient> |
Ethereum address or saved Ethereum contact |
--asset <asset> |
DAI, USDC, USDT, ETH. Default defaults.withdrawAsset |
--faster |
Pay a DAI prover tip for a proof before the epoch ends |
--wait |
Follow until paid on Ethereum |
--interval <seconds> |
Seconds between checks with --wait. Default 20 |
--idempotency-key <key> |
Returns the same withdrawal on retry |
--full |
Full addresses and hashes |
zkmoney withdrawals get <id> [--full]
id is the idempotency key, local id or L2 tx hash.
zkmoney withdrawals list [-n <count>] [--full]
bridge, bridges
zkmoney bridge <amount> --to <address> --chain <chain> [options]
Burns DAI into an escrow on Ethereum that swaps it on Curve's 3pool and delivers USDC or USDT through Across or CCTP. Mainnet; the amount includes fees.
| Option | Description |
|---|---|
--to <recipient> |
Destination address or saved Ethereum contact; on hyperCore, the Hyperliquid account |
--chain <chain> |
Destination; see Bridge routes |
--asset <asset> |
USDC or USDT. Default USDC where routed |
--via <bridge> |
across or cctp. Default: highest minimum delivered |
--faster |
Pay a DAI prover tip for a proof before the epoch ends |
--wait |
Follow until it arrives |
--interval <seconds> |
Seconds between checks with --wait. Default 20 |
--idempotency-key <key> |
Returns the same bridge on retry |
--full |
Full addresses and hashes |
If the network's manifest lists no escrow factories, set them (mainnet):
zkmoney config set addresses.acrossBridgeEscrowFactory 0x0aacb86083fb4c17c92c95f9b718f711b63d1987
zkmoney config set addresses.cctpBridgeEscrowFactory 0x9beedf5117bdb9f3cd9d45f56a873ec87ab13b0d
zkmoney bridges quote <amount> --to <address> --chain <chain> [options]
Prices a bridge as bridge would and sends nothing. Read-only: no passphrase or account required. bridge requotes on submit.
| Option | Description |
|---|---|
--to <address> |
Destination address |
--chain <chain> |
Destination |
--asset <asset> |
USDC or USDT |
--via <bridge> |
across or cctp |
--faster |
Include the DAI prover tip |
--full |
Full addresses |
$ zkmoney bridges quote 25 --to 0x0000…dEaD --chain arbitrum
Quoted 2026-10-08 20:36:59 UTC
Route USDC to arbitrum through Across
To 0x0000…dEaD on arbitrum
Spend 25.0000 DAI, fees included
Release tip 0.1000 DAI withdrawal fee, to the relayer that releases the burn
Portal cut 0.1000 DAI withdrawal fee, the portal's funding cut
Escrow run 0.3391 DAI to whoever runs the escrow on Ethereum
Swapped 24.4608 DAI to USDC on Curve, at most 1% under 1:1
Bridge fee 0.0168 USDC to Across
Activation fee 0.0000 USDC arbitrum charges none
Expected 24.4439 USDC at 1:1
Minimum 24.1993 USDC at the swap's floor
Proof about 31 min; 4 min with --faster, for a 0.4000 DAI prover tip
zkmoney bridges routes
Lists each chain and what Across and CCTP deliver there.
zkmoney bridges get <id> [--full]
Follows a bridge from burn to arrival.
zkmoney bridges list [-n <count>] [--full]
zkmoney bridges recover <id> [--to <recipient>]
Runs an escrow no relayer ran, or with --to sends its funds, including an Across refund, to an Ethereum address. Gas is paid from ZKMONEY_L1_PRIVATE_KEY.
savings
zkmoney savings
Prints the sUSDS position in USDS, shares, Sky's rate and moves in flight.
zkmoney savings add <amount> [options]
Moves DAI from the main balance into sUSDS; the amount includes fees.
| Option | Description |
|---|---|
--key <key> |
Idempotency key |
--faster |
Pay a DAI prover tip for an early proof |
zkmoney savings to-main <amount> [--key <key>]
Moves amount USDS of savings back to the main balance as DAI.
zkmoney savings recover <move> [--to <recipient>]
Runs a move's escrow, or with --to sends its funds to an Ethereum address. Gas is paid from ZKMONEY_L1_PRIVATE_KEY.
paylink
zkmoney paylink create <amount> [options]
| Option | Description |
|---|---|
--memo <text> |
Note the claimer sees |
--expires <days> |
Days the link stays claimable. Default 30 |
--no-voucher |
No sponsored claim; the claimer needs a tag |
--idempotency-key <key> |
Returns the same link on retry |
--full |
Full hashes |
zkmoney paylink status <id-or-link> [--full]
zkmoney paylink claim <link> [--full]
zkmoney paylink cancel <id-or-link> [--full]
Refunds an unclaimed link.
contacts
zkmoney contacts add <name> [options]
| Option | Description |
|---|---|
--tag <tag> |
Registered tag, resolved now |
--eth <address> |
Ethereum address |
--l2 <address> |
0x L2 address |
zkmoney contacts list [--full]
zkmoney contacts remove <name>
Bridge routes
| Chain | Across | CCTP |
|---|---|---|
arbitrum |
USDC, USDT | USDC |
arc |
USDC | USDC |
avalanche |
USDC, USDT | USDC |
base |
USDC, USDT | USDC |
bnb |
USDC, USDT (18 decimals) | none |
codex |
none | USDC |
edge |
none | USDC |
hyperCore |
none | USDC (spot; 1 USDC activation on a new account) |
hyperEvm |
USDC, USDT | USDC |
ink |
USDC, USDT | USDC |
linea |
USDC, USDT | USDC |
monad |
USDC, USDT | USDC |
opMainnet |
USDC, USDT | USDC |
plasma |
USDT | none |
plume |
none | USDC |
polygon |
USDC, USDT | USDC |
sei |
none | USDC |
sonic |
none | USDC |
unichain |
USDC, USDT | USDC |
worldChain |
USDC | USDC |
xdc |
none | USDC |
Names match in any case. Aliases: optimism, op, bsc, hyperliquid.
Environment
| Variable | Description |
|---|---|
ZKMONEY_HOME |
Home directory. Default ~/.zkmoney |
ZKMONEY_PASSPHRASE |
Seals and opens a key-file account |
ZKMONEY_L1_PRIVATE_KEY |
Ethereum key for register --fund and recovery gas |
ZKMONEY_PREDICATE_VERIFICATION_HASH |
Recipient screening; set all three or none |
ZKMONEY_PREDICATE_CHAIN |
Recipient screening |
ZKMONEY_PREDICATE_API_KEY |
Recipient screening |
ZKMONEY_PREDICATE_BASE_URL |
Screening API base URL |
ZKMONEY_PROFILE_VERSION |
Pins a config profile version |
ZKMONEY_DEBUG |
SDK logs and stack traces |
ZKMONEY_NODE |
Node.js binary for the launcher |
ZKMONEY_INSTALL_DIR, ZKMONEY_BIN_DIR |
Installer paths |
Output
Plain text on stdout; no JSON mode. On failure the exit code is non-zero and stderr gets error: <message>, optionally followed by a hint line. Advisory lines start with note: and go to stderr. Amount arguments are decimals with at most two places; --full prints addresses and hashes unshortened.