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

Method index: zecd vs bitcoind vs zcashd

Every RPC method zecd dispatches (58 methods as of 0.8.0, the ALL_METHODS table in src/rpc/mod.rs), compared against Bitcoin Core master and zcashd. Each method name links to its full reference entry.

Column legend:

  • Bitcoin Core: ✓ = exists in current master with the semantics zecd mirrors; removed = no longer exists in current bitcoind (zecd keeps it for older clients); n/a = never existed there.
  • zcashd: ✓ = same method name, compatible semantics; same name, differs = the name exists but the semantics diverge (usually transparent-only in zcashd, with a z_* method for shielded); n/a = no such method (nearest equivalent in parentheses). On chain and network rows a ✓ means zcashd serves the method with bitcoind's full-node semantics; zecd's wallet-scoped view (scanned heights, one Zebra "peer") is in the zecd column.

An [rpc] allowed_methods safelist, when set, answers -32601 for any method off the list, indistinguishable from a method that does not exist. Multiwallet routing (/wallet/<name>) is covered in Conventions & wire format.

MethodBitcoin Corezcashdzecd
Control
stop✓same name, differs (stops any network)Regtest only; mainnet/testnet answer -32601. Stop a live node with SIGINT/SIGTERM
uptime✓n/aSeconds since the daemon started
help✓✓Static one-line summary; the method argument is ignored (see below)
getrpcinfo✓n/aactive_commands with elapsed microseconds; logpath empty (logs go to stderr)
Network
getnetworkinfo✓✓zecd version/subversion; connections is 0 or 1 (the Zebra upstream is the only "peer")
getconnectioncount✓✓0 or 1
getpeerinfo✓✓At most one entry, describing the Zebra upstream, plus conn_state/syncing extensions
ping✓✓No-op success; there is no P2P ping to measure
Blockchain
getblockchaininfo✓✓blocks = fully scanned height, headers = tip; initialblockdownload true while scanning or enhancing
getblockcount✓✓Fully scanned height, so getblockhash(getblockcount()) always answers
getbestblockhash✓✓Hash at the fully scanned height
getblockhash✓✓From the wallet's scanned blocks; pre-birthday or beyond-tip heights answer -8
getblockheader✓✓Verbose only, compact-block fields; verbose=false answers -8
waitfornewblock✓✓Blocks until the fully-scanned height advances; timeout in ms, 0 = indefinite; timing out is not an error
waitforblock✓✓Blocks until the named hash is the scanned tip
waitforblockheight✓✓Blocks until the scanned height reaches N; the correct "has the wallet caught up?" primitive
waitforsyncn/an/azecd extension (0.7.0). Blocks until the scan and the enhancement backlog are done; reports chain_tip, pending_enhancements and enhanced_through; timing out is not an error
Utility
validateaddress✓same name, differs (transparent-only; shielded via z_validateaddress)Validates every Zcash address kind; adds isvalid_orchard and receiver_types extension fields
z_validateaddressn/asame name, differs (shielded and unified only, with key material)Every address kind, with address_type, ismine, and receivers for a UA; no key material. New in 0.8.0
z_listunifiedreceiversn/a✓A UA split into per-receiver strings, the strings history reports. Key-free. New in 0.8.0
settxfeeremovedsame name, differs (functional in zcashd)Always -8: fees are ZIP-317, never client-settable
estimatesmartfee✓n/aInert stub: conventional ZIP-317 rate (0.00001) plus a blocks echo
estimatefeeremovedn/a (removed in zcashd 5.6.0)Same stub rate, kept for old clients
getmempoolinfo✓✓Fixed shape with empty-mempool numbers (zecd holds no mempool of its own)
Raw transactions
getrawtransaction✓ (verbose JSON differs)✓Hex, or verbose JSON in zcashd's shape with shielded bundles; blockhash param rejected
sendrawtransaction✓✓Broadcasts caller-built bytes through Zebra; maxfeerate ignored
Wallet: reads
getbalance✓same name, differs (transparent-only; z_getbalanceforaccount for shielded)Spendable balance under the ZIP-315 confirmations policy; explicit minconf overrides it per call
getbalances✓n/a (z_getbalanceforaccount, z_gettotalbalance)mine.trusted/untrusted_pending/immature plus a mine.coinbase extension (mature transparent coinbase, a subset of trusted) and lastprocessedblock; no watchonly object
getunconfirmedbalanceremovedsame name, differs (transparent-only)Incoming funds below the confirmations policy, including 0-conf via the mempool stream
getwalletinfo✓✓bitcoind shape; scanning progress, unlocked_until when encrypted, private_keys_enabled:false when watch-only
getaddressinfo✓n/a (validateaddress / z_validateaddress)ismine is cryptographic (viewing-key attribution); diversifier_index on own addresses; labels always []; iswatchonly always false, as in Core master
listtransactions✓same name, differs (transparent history only)Core categories and fields; adds memo/memoStr; outgoing address is the single receiver actually paid
z_listtransactionsn/an/a (no equivalent; listtransactions is transparent-only)zcashd-style per-output history vocabulary (no account arg)
listsinceblock✓same name, differs (transparent history only)Cursor pattern; removed always []; a malformed cursor answers -5, a reorged-away cursor re-lists from the earliest scanned block
gettransaction✓same name, differs (z_viewtransaction for shielded detail)amount/fee/confirmations/details/hex; foreign tx hex fetched from Zebra on demand
listunspent✓same name, differs (transparent UTXOs; z_listunspent for notes)One entry per unspent note; synthesized txid/vout; address empty for change; transparent entries carry zcashd's generated flag and immature coinbase is omitted
getreceivedbyaddress✓same name, differs (transparent; z_listreceivedbyaddress for shielded)Totals over diversified receiving addresses; change never counted
listreceivedbyaddress✓same name, differs (transparent)listreceivedbyaddress 0 true enumerates every generated address; each entry's label is ""
listwallets✓n/a (single wallet)Names from [wallets.<name>] config, plus loaded fleet wallets
listwalletdir✓n/aConfigured wallets plus fleet manifests; a warnings extension names unreadable manifests. New in 0.8.0
createwallet✓n/aFleet only, experimental: a watch-only wallet from a ufvk and birthday in the options object; spending-wallet flags refused. New in 0.8.0
loadwallet✓n/aFleet only, experimental: serve a provisioned fleet wallet. New in 0.8.0
unloadwallet✓n/aFleet only, experimental: stop serving a fleet wallet; deletes nothing, and the shard keeps scanning it. New in 0.8.0
Wallet: writes
getnewaddress✓same name, differs (deprecated, transparent-only; z_getaddressforaccount for UAs)Fresh diversified UA; a label arg is rejected -8; address_type selects receivers within the enabled pools
sendtoaddress✓same name, differs (transparent-only)Synchronous shielded send returning a txid; ZIP-317 fee; subtractfeefromamount/fee_rate answer -8; extra trailing memo param
sendmany✓same name, differs (transparent-only)Same, multi-recipient; dummy "" first arg as in Core
walletpassphrase✓✓Unlock with a timeout (capped at 100,000,000 seconds, as in Core); wrong passphrase -14, unencrypted wallet -15
walletlock✓✓Zeroizes the seed immediately, even mid-proof; unencrypted wallet -15
signmessage✓same name, differs (transparent-only, same scheme)Signs with an own transparent address's key; shielded addresses answer -3
verifymessage✓✓Recovers the signer's pubkey and compares the address; needs no wallet
Async operations
z_sendmanyn/a✓Async: returns an opid, proves/broadcasts in the background; fromaddress selects the funding source and must be the wallet's own (or ANY_TADDR); explicit fee answers -8
z_shieldcoinbasen/a✓Async: sweeps mature transparent coinbase into one shielded output, no change in any pool; toaddress must have a shielded receiver; explicit fee answers -8; nothing mature to shield answers -6
z_mergetoaddressn/a✓Async (0.7.0): consolidates many UTXOs or many notes into one output, no amount argument and no change; one source class per call, so a mixed t+z merge is -8; adds an ANY_ORCHARD wildcard; explicit fee answers -8
z_getoperationstatusn/a✓Non-destructive status objects; wallet-scoped
z_waitforoperationn/an/azecd extension. Blocks until one operation finishes; adds a finished flag; timeout in seconds (default 120, clamped to 3600); non-destructive
z_getoperationresultn/a✓Finished operations only; destructive one-shot reap, matching zcashd
z_listoperationidsn/a✓The wallet's operation ids; optional status filter
Address derivation
z_getaddressforaccountn/a✓Derive a UA for the wallet's single account (account must be 0); shielded receiver types only; optional exact diversifier_index

Deliberately absent method families

These answer method-not-found (-32601), the same as any unknown method.

  • Label methods (setlabel, getaddressesbylabel, listlabels, getreceivedbylabel, listreceivedbylabel): zecd keeps no off-chain label store, by the statelessness invariant. Embedded label/labels fields on other methods remain, always ""/[].
  • Key import/export (dumpprivkey, importprivkey, importaddress, importpubkey, z_exportkey, z_importkey, z_exportviewingkey, z_importviewingkey): each wallet is one ZIP-32 account from one mnemonic; key material moves only through the CLI (zecd init, zecd export-ufvk), never over the RPC channel. See key custody and watch-only wallets.
  • dumpwallet / backupwallet / importwallet: the backup is the mnemonic; everything else is rebuilt from seed plus chain, so there is no wallet file worth dumping.
  • Wallet encryption RPCs (encryptwallet, walletpassphrasechange): at-rest encryption is set once at zecd init --encrypt, so the passphrase never crosses the network.
  • Raw transaction construction (createrawtransaction, fundrawtransaction, signrawtransaction, decoderawtransaction, decodescript): shielded transactions cannot be assembled from public outpoints. sendrawtransaction still broadcasts externally built bytes.
  • Mining (getblocktemplate, submitblock, generate, getmininginfo): zecd is a wallet server, not a validator; mine against the Zebra node.
  • P2P management (addnode, disconnectnode, setban, listbanned, getnettotals, getaddednodeinfo): zecd has no P2P stack; its only peer is one Zebra node over JSON-RPC.

The help introspection gap

help <method> ignores its argument and returns a static one-line blurb naming only a few methods. bitcoind lists every command and returns per-method usage for help <method>, so tooling that introspects via help gets nothing useful from zecd today. Use this index and the per-category reference pages instead. (The blurb ends by pointing at the README for the full list, which is now a stub that points here; treat this index as the list it means.)