Setting Up Litecoin Payment Acceptance
Litecoin is a Bitcoin fork with a shorter block time (~2.5 min vs 10 min) and different network parameters. The technical integration is practically identical to Bitcoin: the same HD wallets (BIP-32/44), the same address types, the same UTXO model. If you already have Bitcoin integration, adding Litecoin is a matter of changing network parameters and a few constants.
Addresses and Network Parameters
Litecoin supports the same address types as Bitcoin, but with different prefixes:
| Type | Litecoin Format | BIP-44 Path |
|---|---|---|
| P2PKH (Legacy) | L... or M... |
m/44'/2'/0' |
| P2SH-P2WPKH (Wrapped SegWit) | M... |
m/49'/2'/0' |
| P2WPKH (Native SegWit) | ltc1q... |
m/84'/2'/0' |
| P2TR (Taproot) | ltc1p... |
m/86'/2'/0' |
The coin type for Litecoin in BIP-44 is 2 (versus Bitcoin — 0).
Implementation via bitcoinjs-lib
bitcoinjs-lib supports Litecoin via custom network parameters — no separate library needed:
import * as bitcoin from 'bitcoinjs-lib'
import { BIP32Factory } from 'bip32'
import * as ecc from 'tiny-secp256k1'
bitcoin.initEccLib(ecc)
const bip32 = BIP32Factory(ecc)
// Litecoin network parameters
const LITECOIN: bitcoin.Network = {
messagePrefix: '\x19Litecoin Signed Message:\n',
bech32: 'ltc', // prefix for Native SegWit addresses
bip32: {
public: 0x019da462, // Ltpv / Ltub
private: 0x019d9cfe,
},
pubKeyHash: 0x30, // addresses start with 'L'
scriptHash: 0x32, // addresses start with 'M'
wif: 0xb0,
}
const LITECOIN_TESTNET: bitcoin.Network = {
messagePrefix: '\x19Litecoin Signed Message:\n',
bech32: 'tltc',
bip32: {
public: 0x0436f6e1,
private: 0x0436ef7d,
},
pubKeyHash: 0x6f,
scriptHash: 0x3a,
wif: 0xef,
}
// Generate Native SegWit address (ltc1q...)
function getLitecoinAddress(xpub: string, index: number): string {
const node = bip32.fromBase58(xpub, LITECOIN)
const child = node.derive(0).derive(index)
const { address } = bitcoin.payments.p2wpkh({
pubkey: Buffer.from(child.publicKey),
network: LITECOIN,
})
if (!address) throw new Error('Address derivation failed')
return address
}
Transaction Monitoring
The same tools available for Bitcoin work for Litecoin:
Own node + electrs — the preferred option. electrs supports Litecoin via the --network=litecoin flag. Litecoin Core downloads and syncs faster than Bitcoin (~50 GB vs ~600 GB for a full node).
Public API — Blockchair supports Litecoin:
async function checkLitecoinPayment(
address: string,
expectedLit: number // in litecoins, not litoshi
): Promise<'pending' | 'confirmed'> {
const res = await fetch(
`https://api.blockchair.com/litecoin/dashboards/address/${address}`
)
const data = await res.json()
const stats = data.data[address]?.address
const confirmedReceived = stats?.received / 1e8 ?? 0
return confirmedReceived >= expectedLit ? 'confirmed' : 'pending'
}
Blockchair API is free up to 1,430 requests/day. For production you need a node.
Number of Confirmations
Due to faster blocks (~2.5 min), you can require more confirmations for the same astronomical time:
| Time Equivalent | Bitcoin Blocks | Litecoin Blocks |
|---|---|---|
| ~10 minutes | 1 | 4 |
| ~30 minutes | 3 | 12 |
| ~60 minutes | 6 | 24 |
In practice, 6–12 Litecoin confirmations are sufficient for most payments.
Conversion and Exchange Rates
When invoicing in LTC you need the current rate. Options:
// Via CoinGecko (free, no key)
async function getLtcPriceUsd(): Promise<number> {
const res = await fetch(
'https://api.coingecko.com/api/v3/simple/price?ids=litecoin&vs_currencies=usd'
)
const data = await res.json()
return data.litecoin.usd
}
// Invoicing: lock in the amount in LTC at the time of creation
// and keep it until expiration (~15 minutes). Don't recalculate every second.
The rate should be locked at the moment of payment address generation and not recalculated during the payment's lifetime. If the user does not pay before expiration — generate a new address with the current rate.
Differences from Bitcoin in Production
Litecoin has historically been used as a "Bitcoin testnet in real conditions" — many updates (SegWit, MimbleWimble via MWEB) came out there first. MWEB (MimbleWimble Extension Blocks) adds optional transaction confidentiality, which brings additional complications for monitoring: MWEB transactions are not visible to standard APIs. If clients pay via MWEB — you need your own node with MWEB support.
Fees in the Litecoin network are historically lower than Bitcoin in absolute values. But this doesn't affect the recipient — the sender pays the fee.







