How LTCVM works

LTCVM is a Litecoin-compatible chain running on Metal Blockchain, joined to Litecoin by a one-for-one LTC bridge. This page covers how LTC moves, what it costs, and what you're trusting.

The chain

LTCVM uses Litecoin's transaction format, script language and address formats, with SegWit and Taproot active from its first block, and standard relay rules, except that a payment costs 1 litoshi and there is no dust limit. It runs as its own Layer 1 on Metal Blockchain, whose Snowman consensus makes a transaction final as soon as it is in a block, typically within a couple of seconds. There are no reorganisations to wait out, and no mining: LTC exists on LTCVM only through the bridge's peg reserve. MWEB, Litecoin's private extension block, isn't part of LTCVM.

A key has the same address on Litecoin and on LTCVM, whatever the address type: L…, M…, ltc1q… or ltc1p…. The wallets use native SegWit (ltc1q…) addresses. The two balances are separate: coins on one network move to the other only through the bridge.

The web wallet pays ltc1…, L… and M… addresses. It refuses MWEB addresses (ltcmweb1…), which neither LTCVM nor the bridge can pay, and the older Bitcoin-style 3… form of a Litecoin P2SH address: ask for the M… form of the same address instead.

The bridge

Deposits: Litecoin to LTCVM

Every wallet gets its own Litecoin deposit address, an ltc1q… address. Its script names your LTCVM address and is spendable only by the peg signers, so the bridge knows who to credit and nobody else can move the coins. Your wallet derives this address itself from the signers' public keys and refuses to show one that doesn't match. Once Litecoin has confirmed it enough for its size (…), the same amount, less the bridge fee, is released to you on LTCVM from the peg reserve.

The web wallet can make the deposit for you from your Litecoin balance. You can also send to your deposit address from any Litecoin wallet or exchange.

From MWEB. A deposit can also be paid from MWEB coins. Litecoin lets such a payment be spent only once it has 6 confirmations, and a deep reorganisation could move it, so it's credited only after the full confirmation count (12 on mainnet), whatever its size. Its sender is private, so if it ever has to be refunded, the refund needs a Litecoin address from you.

Withdrawals: LTCVM to Litecoin

A withdrawal sends LTC back to the peg reserve with a note naming a Litecoin address. Once it's final on LTCVM, the signers pay that address from the LTC locked on Litecoin, less the Litecoin network fee at Litecoin's current fee rate. Litecoin nodes don't accept replacement transactions by default, so a payout is never replaced. Instead, if one is still unconfirmed after 30 minutes and fees have risen, the bridge speeds it up with a child transaction (CPFP): it spends the payout's change back to the peg, with a fee high enough for miners to take both. The child's fee comes from the peg's surplus, not from your withdrawal, and the payout itself is unchanged, so the withdrawal can only be paid once.

Proof of reserves

Every LTC on LTCVM is backed by LTC locked on Litecoin. The explorer lists every locked output, each linked to a public Litecoin explorer, next to the amount circulating on LTCVM. The bridge refuses to move anything unless the locked LTC covers what circulates plus what's pending.

Fees, limits and timings

Live from the bridge:

Confirmations before a deposit is credited
…. A Litecoin block comes about every 2.5 minutes, at random; smaller deposits carry less risk, so they may wait less.
Bridge fee on each deposit
… LTC
Litecoin network fee on each withdrawal
about … LTC today, at … lit/vB; it follows Litecoin's fee rate
Smallest deposit
… LTC
Largest deposit (beta)
… LTC; larger ones are held for a refund
Most LTC on LTCVM in total (beta)
… LTC
Smallest withdrawal
… LTC
Signers
…
Peg address on Litecoin
…

Sending on LTCVM costs 1 litoshi, whatever the amount, and is final within seconds. You can send as little as 1 litoshi. (One LTC is 100,000,000 litoshis.) A Litecoin block comes about every 2.5 minutes, at random, and a slow one can take much longer. A payment from the web wallet on Litecoin itself sends no output under 5,460 litoshis, so every output clears Litecoin's dust limit.

The site measures LTCVM's speed live. For every payment sent through this site, the bridge times how long it takes from receiving the payment to accepting the block that holds it. On LTCVM, an accepted block is final. It checks four times a second, so a figure can be up to a quarter of a second slow, never fast. The home page shows the median of the last 50 payments, and /api/status reports the median, the 90th percentile and the latest (finality).

Where fees go

In short: fees on LTCVM go to its validators, and the withdrawal fee goes to Litecoin's miners. The bridge keeps nothing.

FeeWhen you pay itHow muchWho gets it
Network feeAny payment on LTCVM1 litoshiThe validator that built the block
Bridge feeEach deposit… LTCThe validator that built the block (it's the fee of the transaction that credits you)
Withdrawal feeEach withdrawalabout … LTC todayLitecoin's miners (it pays for the payout on Litecoin)

With several validators, each sets its own fee address. Metal takes turns choosing which validator proposes each block, weighted by stake, and that validator collects the fees in it. So fees spread across validators roughly in proportion to their stake. LTCVM only makes a block when there are payments, so a validator's share also depends on traffic. The beta starts with one validator.

Litecoin vs LTCVM vs Lightning

LitecoinLTCVMLightning
Smallest paymentAbout 2,940–5,460 litoshis, by address type (the dust limit)1 litoshi1 litoshi (thousandths inside channels)
Fee for a paymentA few hundred to a few thousand litoshis, at 1–10 lit/vB1 litoshi, whatever the amountOften 0–1 litoshi plus a small share of the amount, depending on the route
Final afterAbout 2.5 minutes per block; 15 minutes for 6 confirmations1–2 seconds on Metal Blockchain, and can't be reversedSeconds, if a route is found
SetupNoneNone: ordinary Litecoin addresses, and the receiver can be offlineChannels and liquidity; the receiver must be online
PrivacyPublic by default; MWEB, Litecoin's optional extension block, hides amounts and addressesPublic, like an ordinary Litecoin payment; no MWEBOff chain; seen by the nodes on the route
Who holds the LTCYouYou on LTCVM; the LTC behind it is locked on Litecoin under the peg signers (2 of 3)You, in channels

Litecoin fees rise when blocks are full, and Lightning fees depend on the route and the wallet; the figures are typical.

No fee is destroyed or leaves the peg. Fees paid on LTCVM stay there as ordinary LTC, backed by LTC locked on Litecoin like any other. The bridge's signers aren't paid from fees yet.

Trust and limits

Beta, with real LTC. The bridge is new and hasn't had an external audit. Keep amounts small.

Wallets

In the browser. The bridge page is a wallet: your key is made in the browser and never leaves it. Protect it with a passkey, for example one saved in a password manager, and opening the wallet takes the passkey. Passkey protection needs a passkey provider that supports the PRF extension; older security keys don't. Every coin a payment spends is checked against the raw transaction that created it, so the server can't inflate a fee. Before anything is signed, the wallet shows what the payment does (who's paid, the change back to you, a withdrawal's Litecoin address, and the fee), read from the transaction itself, and signs only once you confirm. Amounts can be shown in LTC, litoshis or US dollars; the dollar price comes from litecoinspace.org.

On a Mac. A Mac app is being prepared for its first release: the key encrypted to the Mac's Secure Enclave, Touch ID for every payment, and import from a Litecoin Core wallet.dat, whose keys are read on the Mac and never sent anywhere.

The web wallet is open source, in the LTCVM repository (cmd/ltcvm/web).

Whichever you use, back up your key. It's your wallet on both networks, and without it the LTC can't be recovered.

For developers

The bridge serves a JSON API at this site, used by both wallets:

GET  /api/info                      network, fees, limits and signers
GET  /api/status                    both chains' heights, sync, the peg audit
GET  /api/reserves                  every locked output on Litecoin
GET  /api/activity                  recent deposits and withdrawals
GET  /api/address/{address}         LTCVM balance, outputs and history
GET  /api/tx/{txid}                 an LTCVM transaction, described
GET  /api/block/{height|hash}       an LTCVM block
GET  /api/deposits/{address}        deposits for an LTCVM address
GET  /api/pegout/{txid}             a withdrawal's status
POST /api/deposit-address           {"address": …}: your deposit address
POST /api/tx                        {"hex": …}: broadcast on LTCVM
GET  /api/health                    checks, for uptime monitors
POST /api/ltc/watch                 {"address": …}: follow a Litecoin address
GET  /api/ltc/address/{address}     its Litecoin balance, coins and history
POST /api/ltc/import                {"address": …, "txid": …}: add an older payment
GET  /api/ltc/rawtx/{txid}          a Litecoin transaction's bytes
POST /api/ltc/tx                    {"hex": …}: broadcast on Litecoin
POST /api/ltc/scan                  {"addresses": […]}: find coins (a job)
GET  /api/ltc/scan/{id}             that job's progress and coins found

Amounts are strings in LTC with eight decimal places, or whole litoshis where a field says so, so nothing is rounded. Fee rates are in litoshis per virtual byte.

The source, including the chain, the bridge, the web wallet and the deployment scripts, is on GitHub.

Security

Please report vulnerabilities privately through GitHub's security advisories, not in a public issue.