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.