Method index: zecd vs bitcoind vs zcashd
Every RPC method zecd dispatches (43 methods, 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.
| Method | Bitcoin Core | zcashd | zecd |
|---|---|---|---|
| Control | |||
| stop | ✓ | same name, differs (stops any network) | Regtest only; mainnet/testnet answer -32601. Stop a live node with SIGINT/SIGTERM |
| uptime | ✓ | n/a | Seconds since the daemon started |
| help | ✓ | ✓ | Static one-line summary; the method argument is ignored (see below) |
| getrpcinfo | ✓ | n/a | active_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 |
| Utility | |||
| validateaddress | ✓ | same name, differs (transparent-only; shielded via z_validateaddress) | Validates every Zcash address kind; adds isvalid_orchard and receiver_types extension fields |
| settxfee | removed | same name, differs (functional in zcashd) | Always -8: fees are ZIP-317, never client-settable |
| estimatesmartfee | ✓ | n/a | Inert stub: conventional ZIP-317 rate (0.00001) plus a blocks echo |
| estimatefee | removed | n/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 lastprocessedblock; no watchonly object |
| getunconfirmedbalance | removed | same 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); 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_listtransactions | n/a | n/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 |
| 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 |
| 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 |
| Async operations | |||
| z_sendmany | n/a | ✓ | Async: returns an opid, proves/broadcasts in the background; fromaddress must be the wallet's own (ANY_TADDR rejected -5); explicit fee answers -8 |
| z_getoperationstatus | n/a | ✓ | Non-destructive status objects; wallet-scoped |
| z_getoperationresult | n/a | ✓ | Finished operations only; destructive one-shot reap, matching zcashd |
| z_listoperationids | n/a | ✓ | The wallet's operation ids; optional status filter |
| Address derivation | |||
| z_getaddressforaccount | n/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. Embeddedlabel/labelsfields 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 atzecd 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.sendrawtransactionstill 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.