Dash (DASH)
UTXO-based signing with the same input/output contract as Bitcoin. Provide the full previous transactions for the inputs you spend; the device signs each input by its keyPath. Dash is legacy-only — your account is base58 P2PKH (starts with X; y on testnet); recipients may also be P2SH. There is no SegWit or Taproot.
| Field | Value |
|---|---|
| Family | Bitcoin (UTXO) |
| coinType | 5 |
| keyPath | m/44'/5'/<accountIdx>'/0/0 |
| addressFormat | legacy (base58 P2PKH) |
| chainId | bip122:00000ffd590b1485b3caadc19b22e637/slip44:5 |
| chainId · Testnet | bip122:00000bafbc94add76cb75e2ec9289483/slip44:1 (keyPath coinType 1': m/44'/1'/…) |
Supported Methods
| Method | Supported |
|---|---|
| getAddress | ✓ |
| signTransaction | ✓ |
| signMessage | ✗ |
| signTypedData | ✗ |
| signData | ✗ |
Requirements
Minimum firmware for each method. The two models are on different version lines, so DCENT Biometric Wallet and DCENT X are listed separately (the numbers are not comparable across models). Below this the request returns the firmware-update error (5005) and the bridge prompts to update.
| Method | DCENT Biometric Wallet | DCENT X |
|---|---|---|
getAddress | 1.5.1 or higher | 1.0.0 or higher |
signTransaction | 1.5.1 or higher | 1.0.0 or higher |
getAddress — account address
Retrieves the Dash account address for a chainId + keyPath. Dash addresses are base58 P2PKH and begin with X on mainnet (y on testnet).
| Field | Type | Required | Source | Notes |
|---|---|---|---|---|
chainId | string | Required | App | Full CAIP-19, incl. /slip44:5 |
keyPath | string | Required | App | BIP-44 derivation path |
Request
await dcent.getAddress({
chainId: 'bip122:00000ffd590b1485b3caadc19b22e637/slip44:5',
keyPath: "m/44'/5'/0'/0/0"
})
Response
| Field | Type | Notes |
|---|---|---|
body.parameter.address | string | base58 P2PKH; starts with X on mainnet (y on testnet) |
{
"header": {
"version": "1.0",
"status": "success",
"response_from": "getAddress"
},
"body": {
"command": "getAddress",
"parameter": {
"address": "X…"
}
}
}
Dash returns only an address — a base58 P2PKH string starting with X (y on testnet). There is no SegWit or Taproot variant, so no addressFormat input is needed.
addressFormat
| Format | Path | Status |
|---|---|---|
legacy (P2PKH, base58) | m/44'/5'/0'/0/0 | Supported |
segwit-native (P2WPKH) | — | Not on Dash |
taproot (P2TR) | — | Not on Dash |
Legacy only. Unlike Bitcoin, Dash has no SegWit. Inputs use txType: "p2pkh", and recipients are base58 addresses (P2PKH X… or P2SH). Do not send p2wpkh / bech32 values here.
signTransaction — UTXO inputs/outputs
payload.transaction:
{
"inputs": [
{
"rawTransaction": "<prev tx hex>",
"index": 0,
"txType": "p2pkh",
"keyPath": "m/44'/5'/0'/0/0",
"sequence": 4294967295
}
],
"outputs": [
{
"txType": "p2pkh",
"amount": "100000",
"addresses": [
"X…recipient"
]
}
]
}
| 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 (utxo_idx) |
inputs[].txType | enum | Required | App | — | Always p2pkh on Dash |
inputs[].keyPath | string | Required-Real | Wallet | — | Path that signs this input |
inputs[].sequence | number | Optional | App | — | When omitted, no sequence is sent and DCENT X then uses 0xffffffff (only Bitcoin mainnet defaults to 0xfffffffd, opt-in RBF). Also note the first input's value applies to the whole transaction (a first-input value of 0 is not sent, so the device's default applies). |
outputs[].txType | enum | Required | App | — | p2pkh for an X… recipient. The destination script type is taken from the recipient address (addresses[0]); txType is only checked against the allowed values (p2pkh / p2sh / p2wpkh / p2wsh / change) and marks the change output. p2tr, or a Taproot recipient address (bc1p… / tb1p…), is rejected with -32602 |
outputs[].amount | string | Required | App | duff | Output value (1 DASH = 1e8 duff) |
outputs[].addresses | string[] | Required-Real | App | — | base58 — a P2PKH (X…) or P2SH recipient. Only addresses[0] is signed (later entries are not signed, but a Bitcoin Taproot address (bc1p… / tb1p…) among them is rejected with -32602 — send a single address), and exactly one non-change output is allowed — more than one destination is rejected with param_error. Use a second output with txType: 'change' for change. The change output's addresses[0] is a BIP-32 derivation path on your own account (for example m/44'/5'/0'/1/0), not an address — the device derives the change address from that path itself. Use a path on the account you are signing with; the full rule is on the Bitcoin page. |
Request
const res = await dcent.sign({
method: 'signTransaction',
chainId: 'bip122:00000ffd590b1485b3caadc19b22e637/slip44:5',
payload: {
keyPath: "m/44'/5'/0'/0/0",
transaction: {
inputs: [{
rawTransaction: '0100000001abcdef…0123456789…88ac00000000',
index: 0,
txType: 'p2pkh',
keyPath: "m/44'/5'/0'/0/0",
sequence: 4294967295
}],
outputs: [{
txType: 'p2pkh',
amount: '100000',
addresses: ['X…recipient']
}]
}
}
})
Response
{
"header": {
"version": "1.0",
"status": "success",
"response_from": "signTransaction"
},
"body": {
"command": "signTransaction",
"parameter": {
"signature": "<signed raw tx hex>"
}
}
}
| Field | Type | Notes |
|---|---|---|
header.status | string | "success" on completion |
body.command | string | "signTransaction" |
body.parameter.signature | hex | The broadcast-ready serialized signed transaction — a full Dash raw tx hex ready to broadcast to the network, not a bare signature |
Variants — multi-step builder
As an alternative to the single-call form, a stateful builder is available (same as Bitcoin, with the Dash keyPath):
const tx = dcent.getBitcoinTransactionObject()
dcent.addBitcoinTransactionInput(tx, prevTxHex, utxoIndex, 'p2pkh', "m/44'/5'/0'/0/0")
dcent.addBitcoinTransactionOutput(tx, 'p2pkh', 100000, recipient)
// then sign
Common Mistakes
Sending a SegWit/bech32 address — Dash has no SegWit; recipients must be base58 (P2PKH X… or P2SH). Wrong coinType in keyPath — Dash uses m/44'/5'/… (m/44'/1'/… on testnet), not Bitcoin's 0'. Missing change output — any unspent input value becomes the miner fee. Amounts not in duff — 1 DASH = 1e8 duff.