Skip to main content

Xahau (XAH)

Sign Xahau transactions. Xahau is an XRPL-derived sidechain, so the payload reuses the XRP Ledger transaction shape — provide the standard Payment fields and the device signs the serialized transaction.

FieldValue
FamilyXahau (XRPL-derived)
coinType144
keyPathm/44'/144'/<accountIdx>'/0/0
amount unitdrops (1 XAH = 1e6)
chainIdxahau:mainnet/slip44:144

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
getAddress2.32.0 or higher1.0.0 or higher
signTransaction2.32.0 or higher1.0.0 or higher

getAddress

Retrieves the Xahau account address. Returns an XRPL-style classic address (r…).

FieldTypeRequiredSourceNotes
chainIdstringRequiredAppFull CAIP-19 — xahau:mainnet/slip44:144
keyPathstringRequiredAppBIP-44 — default m/44'/144'/0'/0/0

Request

await dcent.getAddress({
chainId: 'xahau:mainnet/slip44:144',
keyPath: "m/44'/144'/0'/0/0"
})

Response

FieldTypeDescription
addressstringXRPL-style classic address (r…) for this Xahau account. Xahau uses the same classic address format as the XRP Ledger.
header.statusstringsuccess on completion
{
"header": {
"version": "1.0",
"status": "success"
},
"body": {
"command": "getAddress",
"parameter": {
"address": "rrrrrrrrrrrrrrrrrrrputRj8Lyv"
}
}
}

signTransaction — Payment

Signs a Xahau transaction. The bridge serializes and signs the XRPL-style transaction and returns the signed tx_blob ready to submit.

payload.transaction:

{
"TransactionType": "Payment",
"Account": "rrrrrrrrrrrrrrrrrrrputRj8Lyv",
"Destination": "rrrrrrrrrrrrrhbyxFUyg4pJeFLCBn",
"Amount": "1000000",
"Fee": "12",
"Sequence": 1,
"LastLedgerSequence": 85000000,
"Flags": 2147483648
}
FieldTypeRequiredSourceDescription
TransactionTypestringRequiredAppPayment for a value transfer
AccountaddressRequired-RealWalletDevice Xahau account (sender) — must exist and be funded on-chain
DestinationaddressRequired-RealAppRecipient classic address (r…)
AmountstringRequiredAppValue in drops; "1000000" = 1 XAH
FeestringRequiredAppTransaction cost in drops; "12" is a typical base fee
SequencenumberRequired-RealAppReal, current per-account sequence — the app must supply it, not auto-filled
LastLedgerSequencenumberRequired-RealAppHighest ledger index this transaction is valid for — required so a stale transaction fails closed instead of lingering; a current ledger index plus a small buffer (e.g. +20)
FlagsnumberRequiredApp2147483648 = tfFullyCanonicalSig (0x80000000) — OR it with the transaction type's own flags. The wire gate no longer rejects a missing Flags, but any transaction the structured path cannot model falls back to blind-signing, and that path does require the canonical-signature flag

Request

await dcent.sign({
method: 'signTransaction',
chainId: 'xahau:mainnet/slip44:144',
payload: {
keyPath: "m/44'/144'/0'/0/0",
transaction: {
TransactionType: 'Payment',
Account: 'rrrrrrrrrrrrrrrrrrrputRj8Lyv',
Destination: 'rrrrrrrrrrrrrhbyxFUyg4pJeFLCBn',
Amount: '1000000',
Fee: '12',
Sequence: 1,
LastLedgerSequence: 85000000,
Flags: 2147483648
}
}
})

Response

FieldTypeDescription
signaturehex stringThe broadcast-ready signed tx_blob — the fully, canonically serialized signed XRPL transaction for Xahau, ready to submit. This is a complete signed transaction blob, not a bare signature.
body.commandstringsignTransaction
header.statusstringsuccess on completion
{
"header": {
"version": "1.0",
"status": "success"
},
"body": {
"command": "signTransaction",
"parameter": {
"signature": "120000228000…"
}
}
} // signed tx_blob
info

Xahau shares the XRP Ledger transaction format. The same Payment shape applies; the device signs the canonically serialized transaction and returns the signed tx_blob.

Common Mistakes

danger

Missing tfFullyCanonicalSig — leaving Flags: 0 (or omitting it) can yield an Invalid Unsigned result. Set Flags: 2147483648 for a standard Payment. Amounts not in dropsAmount and Fee are integer-string drops, not XAH. 1 XAH = "1000000" drops. Unfunded / non-existent Account — the sender must already exist on-chain and meet the base reserve; otherwise sequence lookup and submission fail. Stale Sequence — fetch the account's current sequence immediately before signing; a reused value is rejected on submit.