Skip to main content

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 — addresses are base58 P2PKH (they start with X); there is no SegWit or Taproot.

FieldValue
FamilyBitcoin (UTXO)
coinType5
keyPathm/44'/5'/<accountIdx>'/0/0
addressFormatlegacy (base58 P2PKH)
chainIdbip122:00000ffd590b1485b3caadc19b22e637/slip44:5

Supported Methods

MethodSupported
getAddress
signTransaction
signMessage
signTypedData

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.

MethodDCENT Biometric WalletDCENT X
getAddress1.5.1 or higher1.0.0 or higher
signTransaction1.5.1 or higher1.0.0 or higher

getAddress — account address

Retrieves the Dash account address for a chainId + keyPath. Dash addresses are base58 P2PKH and always begin with X.

FieldTypeRequiredSourceNotes
chainIdstringRequiredAppFull CAIP-19, incl. /slip44:5
keyPathstringRequiredAppBIP-44 derivation path

Request

await dcent.getAddress({
chainId: 'bip122:00000ffd590b1485b3caadc19b22e637/slip44:5',
keyPath: "m/44'/5'/0'/0/0"
})

Response

FieldTypeNotes
addressstringbase58 P2PKH; always starts with X
{
"header": {
"version": "1.0",
"status": "success"
},
"body": {
"command": "getAddress",
"parameter": {
"address": "X…"
}
}
}
info

Dash returns only an address — a base58 P2PKH string starting with X. There is no SegWit or Taproot variant, so no addressFormat input is needed.

addressFormat

FormatPathStatus
legacy (P2PKH, base58)m/44'/5'/0'/0/0Supported
segwit-native (P2WPKH)Not on Dash
taproot (P2TR)Not on Dash
warning

Legacy P2PKH only. Unlike Bitcoin, Dash has no SegWit. Every input and output uses txType: "p2pkh", and recipient addresses are base58 strings beginning with X. 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"
]
}
]
}
FieldTypeRequiredSourceUnitNotes
inputs[].rawTransactionhexRequired-RealWalletFull prev-tx hex of the UTXO; must be device-owned
inputs[].indexnumberRequiredAppUTXO output index (utxo_idx)
inputs[].txTypeenumRequiredAppAlways p2pkh on Dash
inputs[].keyPathstringRequired-RealWalletPath that signs this input
inputs[].sequencenumberOptionalAppNot defaulted to 0xffffffff — when omitted the bridge uses 0xfffffffd for RBF-enabled coins and leaves it unset otherwise. Also note the first input's value applies to the whole transaction.
outputs[].txTypeenumRequiredAppAlways p2pkh
outputs[].amountstringRequiredAppduffOutput value (1 DASH = 1e8 duff)
outputs[].addressesstring[]Required-RealAppbase58, start with X. Only addresses[0] is used, 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.

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": {
"status": "success"
},
"body": {
"command": "signTransaction",
"parameter": {
"signature": "<signed raw tx hex>"
}
}
}
FieldTypeNotes
header.statusstring"success" on completion
body.commandstring"signTransaction"
body.parameter.signaturehexThe 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

danger

Sending a SegWit/bech32 address — Dash has no SegWit; outputs must be base58 P2PKH (X…) with txType: "p2pkh". Wrong coinType in keyPath — Dash uses m/44'/5'/…, not Bitcoin's 0'. Missing change output — any unspent input value becomes the miner fee. Amounts not in duff — 1 DASH = 1e8 duff.