Zcash (ZEC)
Reference metadata for Zcash. Full parameter tables and request/response examples are being authored — the verified facts below are accurate today.
| Field | Value |
|---|---|
| coinType | 133 |
| keyPath | m/44'/133'/<accountIdx>'/0/0 |
| amount unit | zatoshi (1 ZEC = 1e8) |
| chainId | bip122:00040fe8ec8471911baa1db1266ea15d/slip44:133 |
Supported Methods
| Method | Supported |
|---|---|
| getAddress | ✓ |
| signTransaction | ✓ |
| signMessage | ✗ |
| signTypedData | ✗ |
| signAuthEntry | ✗ |
Notes
Fully signable UTXO chain. DCENT signs the transparent t-address path only — shielded z-addresses are not supported. The raw transaction carries Zcash consensus branch IDs (Overwinter/Sapling); provide the previous transactions for the inputs you spend. Shares the Bitcoin-family signTransaction path.
option (consensus branch ID)
Zcash's option identifies which network upgrade is currently active. It is a 16-hex-char string: the first 8 chars are the currency's GroupId, the last 8 are the active consensus branch ID. Because the correct branch ID changes at every network-upgrade activation height and the signer has no network access, the app must supply the current value — a value baked in at build time is guaranteed to go stale eventually.
| Field | Type | Required | Source | Notes |
|---|---|---|---|---|
option, chars 1–8 | hex | Required | App | GroupId — must match this currency's version group ID. |
option, chars 9–16 | hex | Required | App | Active consensus branch ID — changes at every network-upgrade activation height. |
Don't hardcode this. Fetch it at prepare time from a wallet library call that reads the current chain height (e.g. getZCASHOption(currency)), and pass the result through unchanged. This exact failure mode has shipped before: transactions kept signing successfully with a stale NU6.2 branch ID after NU6.3 activated, and were only rejected at broadcast — the signing success masked the root cause. Either half wrong, or a length other than 16 hex chars, is rejected with -32602.
The signTransaction payload shape (inputs, outputs, previous transactions) matches the Bitcoin-family signing path — only the address version, coinType and amount decimals differ (see above). Per-parameter tables come from the DCENT Web Bridge and the connector presets.
signTransaction
await dcent.sign({
method: 'signTransaction',
chainId: 'bip122:00040fe8ec8471911baa1db1266ea15d/slip44:133',
payload: {
keyPath: "m/44'/133'/0'/0/0",
transaction: {
inputs: [
{ rawTransaction: '<prev tx hex>', index: 0, txType: 'p2pkh', keyPath: "m/44'/133'/0'/0/0" }
],
outputs: [
{ txType: 'p2pkh', amount: '990000', addresses: ['<t1... recipient>'] }
],
option: '<16-hex-char GroupId+branchId, wallet-computed>'
}
}
}) // → body.parameter.signature
signTransaction — full field reference
| Field | Type | Required | Source | Unit | Notes |
|---|---|---|---|---|---|
inputs[].rawTransaction | hex | Required-Real | Wallet | — | Full prev-tx hex of the UTXO; must be device-owned |
inputs[].index | number | Required | App | — | UTXO output index |
inputs[].txType | enum | Required | App | — | Always p2pkh — Zcash has no SegWit variant |
inputs[].keyPath | string | Required-Real | Wallet | — | Path that signs this input |
inputs[].sequence | number | Optional | App | — | Same defaulting behavior as Bitcoin |
outputs[].amount | string | Required | App | zatoshi | Output value |
outputs[].addresses | string[] | Required-Real | App | — | Recipient (transparent t-address only). Only addresses[0] is used, exactly one non-change output allowed — use a second output with txType: 'change' for change. |
option | hex (16 chars) | Required | App | — | Consensus branch ID — sub-field breakdown above. |