Skip to main content

Litecoin (LTC)

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. The chainId, keyPath, address format and amount unit differ from Bitcoin, along with the defaults and restrictions below.

FieldValue
FamilyBitcoin (UTXO)
coinType2
keyPathm/44'/2'/<accountIdx>'/0/0
addressFormatlegacy (SegWit not supported via bridge)
amount unitlitoshi (1 LTC = 1e8)
chainIdbip122:12a765e31ffd4059bada1e25190f6e98/slip44:2

Supported Methods​

MethodSupported
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.

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

addressFormat​

FormatPathPrefixStatus
legacy (P2PKH)m/44'/2'/0'/0/0L… (base58)Supported
segwit-native (P2WPKH)—ltc1… (bech32)Not supported
segwit-wrapped (P2SH-P2WPKH)—M… (base58)Not supported
warning

Litecoin is legacy-only through the DCENT bridge. Only legacy P2PKH (base58 L…, derived from m/44'/2') is supported — the DCENT bridge has no Litecoin SegWit account, and a request keyPath (getAddress / payload.keyPath) on m/84' is rejected with -32602 (it does not match Litecoin's m/44'/2' path) — keep inputs[].keyPath on m/44'/2' as well, since input paths are not checked against that template. A native-SegWit (ltc1…) account cannot be used; use the legacy m/44'/2' path. (Litecoin legacy addresses begin with L, not 1 as on Bitcoin.)

getAddress — account address​

Derive a Litecoin account address for a keyPath. The connector returns the legacy P2PKH address (base58, L…, from m/44'/2'). Litecoin SegWit is not supported through the DCENT bridge, so omit addressFormat (its encoding values have no effect here). Call this before building a transaction.

Parameters​

FieldTypeRequiredSourceNotes
chainIdstringRequiredAppCAIP-19 — fixed for Litecoin
keyPathstringRequiredAppBIP-44 (legacy m/44'/2')
addressFormatenumOptionalAppThe encoding values are ignored — any of them returns the legacy P2PKH (L…) address; Litecoin SegWit is not supported. Omit it

Request

await dcent.getAddress({
chainId: 'bip122:12a765e31ffd4059bada1e25190f6e98/slip44:2',
keyPath: "m/44'/2'/0'/0/0"
})

Response

FieldTypeDescription
header.statusstringsuccess on completion
body.commandstringgetAddress
body.parameter.addressstringLitecoin account address. With the default path this is a legacy P2PKH base58 address (L…). No public key is returned for the Bitcoin family.
{
"header": {
"version": "1.0",
"status": "success",
"response_from": "getAddress"
},
"body": {
"command": "getAddress",
"parameter": {
"address": "L…"
}
}
}

signTransaction — UTXO transaction​

The wire payload mirrors Bitcoin: payload.transaction carries inputs[] and outputs[]. Each input references the full previous transaction hex so the device can verify the spent value before signing.

payload.transaction:

{
"inputs": [
{
"rawTransaction": "<prev tx hex>",
"index": 0,
"txType": "p2pkh",
"keyPath": "m/44'/2'/0'/0/0",
"sequence": 4294967295
}
],
"outputs": [
{
"txType": "p2pkh",
"amount": "200000",
"addresses": [
"L…"
]
}
]
}
FieldTypeRequiredSourceUnitDescription
inputs[].rawTransactionhexRequired-RealWallet—Full prev-tx hex of the UTXO being spent; must be device-owned
inputs[].indexnumberRequiredApp—UTXO output index (utxo_idx)
inputs[].txTypeenumRequiredApp—p2pkh
inputs[].keyPathstringRequired-RealWallet—Path that signs this input (legacy m/44'/2')
inputs[].sequencenumberOptionalApp—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[].txTypeenumRequiredApp—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 Bitcoin Taproot recipient (bc1p… / tb1p…), is rejected with -32602. Do not send an ltc1p… recipient — the bridge does not catch it
outputs[].amountstringRequiredApplitoshiOutput value (1 LTC = 1e8 litoshi)
outputs[].addressesstring[]Required-RealApp—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'/2'/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.

Common Mistakes​

danger

Reusing Bitcoin coinType / keyPath — Litecoin is slip44:2, so the path is m/44'/2'/0'/0/0, not …/0'/… (Bitcoin's coinType 0). Trying to use native SegWit — Litecoin SegWit (ltc1…, m/84'/2') is not supported through the DCENT bridge; use legacy m/44'/2' P2PKH (L…). A request keyPath on m/84' is rejected with -32602; keep inputs[].keyPath on m/44'/2' too. Missing change output — any unspent input value silently becomes the miner fee. Amounts not in litoshi — values are integers in litoshi (1 LTC = 1e8), never decimal LTC.