zcashd is retired. For every public API method it exposes, an operator
migrating away from it needs one question answered: who owns this now?
This page is that record. For each of the 135 RPC methods zcashd 6.20.0
registers, plus its ZMQ topics, REST interface, and notification hooks, it
names the component that owns the API method now, the method that replaces it,
or the reason it was retired.
It is a statement of ownership, not a feature comparison. “Zebra owns
getblockchaininfo” means Zebra is where that API method lives from now on; it
does not promise byte-identical responses. Where Zebra diverges from
zcashd, the Notes column says how.
This page describes Zebra 7.0.0-rc.0 and Zallet 0.1.0-beta.3. Zallet releases after
0.1.0-beta.3 read chain data only from Zebra; see
Running Zallet with Zebra for what that requires of zebrad.
Links go to the zcashd RPC reference.
Methods the generated reference omits are unlinked: the hidden methods, and the
wallet-encryption methods, which zcashd only lists in help for an encrypted
wallet.
No owner: the method is retired, or its disposition is still open.
Owner names the component that implements the API method. Zallet also serves
a few node-level methods, such as getrawtransaction, validateaddress, and
z_listunifiedreceivers; where Zebra implements the method too, the row says
Zebra.
A marker on the owner records what the zcashd-compat
sidecar does with the method during a migration. The sidecar
is a temporary bridge, not an owner: an unmarked row buys migration time, it
does not remove the need to move to the owner named in the column.
Marker
Meaning
(none)
The sidecar serves it with stock zcashd semantics.
†
The sidecar serves it but rejects some inputs — Ironwood always, and Orchard from NU6.3 on. See Wallet shielded-pool support.
*
zcashd registers it, but the sidecar build does not. The miner RPCs and addnode are removed so a misconfigured miner or peer setup fails loudly.
Whether the API method is available from the owner named in the previous
column — not from zcashd.
Status
Meaning
Done
The owner implements it and treats it as a supported API method.
Partial
Implemented, but diverges from zcashd. The Notes column says how.
Stub
Registered and returns success, but does nothing.
Replaced
The owner provides a different method or mechanism for the same job; Notes names it.
Planned
The owner has decided to provide it; not shipped yet.
Deferred
Owner assigned; waits on other work named in Notes.
Undecided
Whether the owner will provide it is still open.
Retired
Not provided by anyone; it goes away with zcashd. Notes says why.
Note
The table might be outdated. If a method is listed as Planned, Deferred, or
Undecided and you need it, check the owner’s current release before concluding
it is unavailable.
The dispositions of the zcashd node and utility methods Zebra does not
implement are recorded in #11022. Where an older issue
decided a row, the Notes column links it. Open questions are tracked in:
#11033: unresolved
differences in methods Zebra does implement.
Any PR that adds, removes, or intentionally changes a zcashd-compatible
method, field, notification, or integration point updates this page in the
same PR. Before each Zebra stable release, the page is checked against the
owners’ current releases and the version line at the top is updated.
No authdataroot, chainhistoryroot, chainwork, or anchor. The verbosity argument must be a number, where zcashd also accepts a bool. Adds nTx and an ironwood entry in trees. Also accepts verbosity 3, which zcashd rejects: it adds a prevout to each transparent input and a fee to each non-coinbase transaction.
Computed from the high 128 bits of the expanded difficulty instead of zcashd’s f64 division; the two agree to f64 precision. Errors where zcashd returns 1.0 on a chain too short to measure.
Returns only null, duplicate, or rejected. zcashd also returns duplicate-invalid, duplicate-inconclusive, inconclusive, and the specific BIP-22 reject reason in place of a bare rejected.
Intentional (#11028): Zebra already pings every peer about once a minute, so getpeerinfo’s pingtime and pingwait stay current without an explicit ping.
vout omits valueSat, and the -spentindex fields (spentTxId, spentIndex, spentHeight) are absent. P2PK outputs have an empty addresses list (#9671). Adds ironwood.
Emits address_type but not zcashd’s deprecated type alias. No diversifier or diversifiedtransmissionkey (Sapling), or payingkey or transmissionkey (Sprout). ismine is always false.
API methods Zebra adds that zcashd never had. Listed so this page describes the
whole RPC boundary, not only a zcashd subset. None of them exist in zcashd
or the sidecar.
Method
Owner
Status
Notes
getbestblockheightandhash
Zebra
Done
Tip height and hash in one call, so a caller cannot read a torn pair across two requests.
getstandardfee
Zebra
Done
Returns {standard_fee, version}: the ZIP 317 marginal fee per logical action, in zatoshis, for the next block. The value depends on the next block’s height (#11557).
generatetoaddress
Zebra
Done
Regtest only. Like generate, but pays the coinbase to a given address instead of the configured mining.miner_address, which lets one node fund several test wallets.
zcashd publishes chain and mempool events over ZMQ. Zebra does not implement
ZMQ today; publishing the zcashd topics is proposed in #10881, #11034, and
#11036.
Zebra’s equivalent is the indexer gRPC service
(zebra-rpc/proto/indexer.proto). It streams best-chain tip changes
(ChainTipChange), non-finalized blocks (NonFinalizedStateChange), and
mempool additions, invalidations, and mined transactions (MempoolChange), and
serves single blocks (GetBlock). Enable it by setting indexer_listen_addr in
the [rpc] section of zebrad.toml. It has no authentication, so bind it to a
loopback or private address. Zallet uses this service; see
Running Zallet with Zebra.
zcashd topic
Owner
Status
Notes
zmqpubhashblock
Zebra
Replaced
Indexer ChainTipChange stream (hash and height), or block_notify_command. ZMQ publishing is proposed in #10881.
block_notify_command in the [notify] section of zebrad.toml; %s is replaced by the new tip’s hash. Runs only once the node is close to the network tip. #10726
-txexpirynotify hook
—
Undecided
No hook. The indexer MempoolChange stream reports expired transactions as invalidated, without distinguishing expiry from other removals.
-walletnotify hook
Zallet
Done
notify in the [external] section of Zallet’s config; %s is replaced by the transaction ID. zallet migrate-zcash-conf maps walletnotify to it.
-alertnotify hook
—
Retired
The Zcash alert system is retired; zcashd no longer sends alerts.