Skip to content

Litecoin transaction lab

Follow the money, compare signed transaction sizes, replay a controlled reorganization and inspect timelocks. Recorded experiments and practical payment checks.

Recorded 26 September 2026 · Litecoin Core 0.21.5.8 · isolated regtest · 12 size measurements · 3 payment amounts · 2 validating nodes

Read the companion guide: what actually happens when you send Litecoin →

On narrow screens, scroll diagrams and tables sideways. Equivalent amounts and node states also appear as text.

These are recorded experiments with test coins. The controls inspect those results or calculate an explicitly labelled fee scenario. They do not connect to your wallet or submit a transaction.
01 / Amounts

Where does the rest of the money go?

Spending one 0.02 LTC input consumes that entire input. The recipient receives the requested amount; a separate output sends change back to the sender. The fee is the difference between inputs and outputs.

One input funds the recipient, change and the transaction feeInput consumed0.02000000 LTCRecipient output0.01000000 LTCChange output · sender0.00999718 LTCFee · not an output0.00000282 LTC
Recorded signed transaction · 141 vB · 282 litoshis in fees. Change returns to a lab-owned address.
Input consumed
0.02000000 LTC
Recipient
0.01000000 LTC
Sender’s change
0.00999718 LTC
Network fee
0.00000282 LTC

0.02000000 = 0.01000000 + 0.00999718 + 0.00000282 LTC

The change label is known because we created both wallets. An unfamiliar public transaction does not reveal who owns each output.

Recorded transaction ID · regtest only

67254ccb41a410f94dbdc0af634da363242b18e5e648807000541f55a8fdc2e0

Find the signed hex and previous-output amounts in results.json. These IDs are not mainnet explorer records.

02 / Size and fees

The same payment can use very different amounts of data

Every candidate below pays 0.01 LTC. We changed the number and type of inputs, while keeping a native SegWit recipient and change output. All candidates were signed and accepted by Core’s regtest mempool policy check.

Measured signed transaction sizes for the selected number of inputsLegacy219 vB0.00000438 LTCNested SegWit164 vB0.00000328 LTCNative SegWit141 vB0.00000282 LTC
Measured signed sizes for 1 input and two native SegWit outputs. Model fees use 2 litoshi/vB; they are calculations, not a live quote.
All 12 recorded measurements. The final column changes with your model rate.
Input typeInputsSigned vBActual test fee · LTCModel fee · LTC
Legacy · P2PKH12190.000004380.00000438
Legacy · P2PKH101,5420.000030840.00003084
Legacy · P2PKH507,4220.000148440.00014844
Legacy · P2PKH10014,7710.000295440.00029542
Nested SegWit · P2SH-P2WPKH11640.000003280.00000328
Nested SegWit · P2SH-P2WPKH109800.000019600.00001960
Nested SegWit · P2SH-P2WPKH504,6100.000092200.00009220
Nested SegWit · P2SH-P2WPKH1009,1480.000182960.00018296
Native SegWit · P2WPKH11410.000002820.00000282
Native SegWit · P2WPKH107500.000015000.00001500
Native SegWit · P2WPKH503,4600.000069200.00006920
Native SegWit · P2WPKH1006,8470.000136960.00013694

Requested wallet funding rate: 2 litoshi/vB. Core estimates before final signing, so the actual test fee can differ slightly from signed vsize × 2. A new run can also produce slightly different signature sizes. Increasing the model rate does not measure or guarantee a confirmation time.

Check the fee estimator and its source timestamp →

03 / Chain history

Replay a payment that lost two confirmations

Both nodes begin at height 102. A includes a payment and mines another block. B builds a competing branch without that payment. Delivering B’s branch to A produces a real reorganization in this isolated experiment.

1 / 7 · Payment broadcast only to node A

Node A has the payment in its mempool. Node B has not received it. Neither node reports a confirmation.

Node A · Height 102

In this node’s mempool

Node B · Height 102

Not seen by this node

Original and replacement branches share block 102102103Payment included104103104105106Payment includedOriginal branch · A
Node A active branch: common history. Faded blocks have not appeared yet in the replay; crossed-out blocks have left A’s active chain. All blocks have equal work in this test; general chain selection uses accumulated work, not block count alone.
Complete recorded timeline
StepA height / paymentB height / payment
1 · Payment broadcast only to node A102 / In this node’s mempool102 / Not seen by this node
2 · Node A includes the payment103 / 1 confirmation102 / Not seen by this node
3 · Node A has two confirmations; node B is behind104 / 2 confirmations102 / Not seen by this node
4 · Node B builds a competing branch without the payment104 / 2 confirmations105 / Not seen by this node
5 · Node A adopts the branch with more accumulated work105 / In this node’s mempool105 / Not seen by this node
6 · Node A includes the payment again106 / 1 confirmation105 / Not seen by this node
7 · Both nodes now agree106 / 1 confirmation106 / 1 confirmation

This payment returned to A’s mempool and was included again. Other outcomes are possible if a competing spend, changed transaction validity or local policy prevents that. This experiment measures neither the probability nor the cost of a mainnet reorganization.

Read how valid-chain selection works →

04 / Evidence

Two replies can describe different chain views

A current response time does not prove that the answering node has caught up. Compare the same transaction at three recorded moments.

Node A

2 confirmations

Active tip height
104
Reply collected · UTC
2026-09-26T18:36:57.975296+00:00
Active tip hash
1aadc7ddd156692ea7bc766178333ec8606574c0bc4af39ae6df2440602d2f6e

Node B

Not seen by this node

Active tip height
102
Reply collected · UTC
2026-09-26T18:36:58.026450+00:00
Active tip hash
681d276380e775369ccd7fbf76c42ab6af32bf562a2a60e2d978eee1176a09f7

Node B’s absence of a record does not contradict node A’s confirmed payment: B has not received the blocks. Check the observer before concluding the payment failed.

The script deliberately withholds blocks and delivers them over localhost RPC. This isolates chain visibility; it is not a benchmark of two commercial explorers or internet propagation.

05 / Practice

Check the evidence before you pay

Four constructed exercises. These are synthetic examples, separate from the recorded experiments above. No wallet connection or transaction is involved. Never send funds to fixture addresses.

0 of 4 checked · 0 correct. You can change an answer and try again.

1. Which output is change?

Synthetic wallet record: input 0.02000000 LTC; output A pays the invoice 0.01000000 LTC; output B, verified in the sender’s wallet, is 0.00999718 LTC. The fee is 0.00000282 LTC.

Answer and explanation

Output B. The sender’s own wallet identifies B as change. 0.01000000 + 0.00999718 + 0.00000282 = 0.02000000 LTC. The fee is the input/output difference, not an output. An unfamiliar public transaction alone would not prove who owns B.

Continue with the related tool →
2. Does the displayed address match?

Synthetic fixture only. Trusted invoice: LLnCCHbSzfwWquEdaS5TF2Yt7uz5Qb1SZ1. Proposed destination: LLnCCHbSzfwWquEdaS5TF2Yt7uz5Qb1SZ2. Never send funds to these examples.

Answer and explanation

Stop and obtain the complete address again. The final character differs. A matching prefix does not establish the same address; the changed Base58Check fixture also fails its checksum. Recheck the full address through a trusted channel and on the signing device. A checksum-valid address would still not prove the intended recipient owns it.

Continue with the related tool →
3. Confirmed, but the account is still empty

Synthetic case: the synchronized node reports six confirmations for the exact deposit address and amount. The receiving service’s stated threshold is twelve. Its account has not been credited yet.

Answer and explanation

The chain payment is confirmed; the service threshold is not met. Blockchain confirmation and internal service credit are separate states. Six is below this hypothetical service’s twelve-confirmation requirement. Save the transaction ID, check the actual current policy and monitor the original transfer. Do not send a duplicate. Twelve is an exercise assumption, not a universal exchange rule.

Continue with the related tool →
4. The QR changed the amount

Synthetic invoice: 0.25000000 LTC. The decoded payment URI says amount=2.50000000 and includes the label “0.25 LTC invoice”. The destination matches.

Answer and explanation

Stop: the numeric amount is ten times the invoice. A label is descriptive text; it does not override the numeric amount. 2.5 / 0.25 = 10. Compare the decoded address and amount with the independently agreed invoice before signing. Do not assume a wallet parser, QR image or familiar label authenticates the request.

Continue with the related tool →

Version 2026-10-01.1 · unlimited retries · answers stay in this page’s memory. Download scenarios and answer reasoning · JSON.

06 / Time locks

A future transaction does not reserve its coins

Replay 13 recorded cases from Litecoin Core 0.21.5.8. Compare ordinary transaction locktime with a funded output whose required spending path uses CHECKLOCKTIMEVERIFY (CLTV). All transactions used isolated regtest coins.

Recorded 6 October 2026 · 13 cases · one validating node · repeated in a fresh regtest directory with the same named outcomes

Read the experiment: what timelocks actually lock →

These controls select saved observations. Admission means this node’s testmempoolaccept check allowed a candidate; it does not mean the candidate was broadcast or confirmed.

Recorded Core result

4 / 13 · Height boundary · next block equals locktime

Chain tip height
1,354
Next candidate block
1,355
Candidate nLockTime
1,355 · height
Spending input sequence
4294967294 · non-final
Required CLTV height
No CLTV condition on this ordinary output
Chain median time past
1,500,000,226 · test timestamp

Recorded mempool admission

Rejected · non-final

Recorded block evidence

Rejected by explicit block-validation attempt

At tip 1,354, the next block would be 1,355, equal to nLockTime. Admission and an explicit block-validation attempt both rejected the future candidate. Equality is too early.

Case identifier: ordinary-next-block-equals-lock

All 13 recorded cases, including block evidence
Frozen first-run observations. Unrecorded block attempts are explicitly marked. The JSON includes signed candidates and the redacted RPC trace.
CaseTip → next blockTransaction / script lockMempool admissionBlock evidence
Ordinary output · future transaction
ordinary-future-nonfinal
1,352 → 1,353nLockTime 1,355
Sequence 4294967294
Rejected · non-finalNo block-validation attempt recorded
Ordinary output · final sequence
ordinary-all-final-bypass
1,352 → 1,353nLockTime 1,355
Sequence 4294967295
Accepted by admission checkNo block-validation attempt recorded
Ordinary output · alternative with zero locktime
ordinary-same-input-alternate-now
1,352 → 1,353nLockTime 0
Sequence 4294967294
Accepted by admission checkNo block-validation attempt recorded
Height boundary · next block equals locktime
ordinary-next-block-equals-lock
1,354 → 1,355nLockTime 1,355
Sequence 4294967294
Rejected · non-finalRejected by explicit block-validation attempt
Height boundary · next block exceeds locktime
ordinary-next-block-greater-than-lock
1,355 → 1,356nLockTime 1,355
Sequence 4294967294
Accepted by admission checkNo block-validation attempt recorded
Ordinary output · after the alternative confirmed
ordinary-alternate-confirmed
1,356 → 1,357nLockTime 1,355
Sequence 4294967294
Rejected · missing-inputsAlternative confirmed; original output spent
Ordinary output · alternative confirms before the lock
ordinary-alternate-confirmed-before-future-lock
1,357 → 1,358nLockTime 1,367
Sequence 4294967294
Future: Rejected · non-final. Alternative: accepted by admission checkAlternative spend included at height 1,358
CLTV output · try zero locktime
cltv-zero-lock-cannot-bypass
1,359 → 1,360nLockTime 0
Sequence 4294967294
CLTV requires 1,362
Rejected · non-mandatory-script-verify-flag (Locktime requirement not satisfied)Rejected by explicit block-validation attempt
CLTV output · correct locktime, too early
cltv-correct-lock-but-premature
1,359 → 1,360nLockTime 1,362
Sequence 4294967294
CLTV requires 1,362
Rejected · non-finalRejected by explicit block-validation attempt
CLTV output · try a final sequence
cltv-final-sequence-cannot-bypass
1,362 → 1,363nLockTime 1,362
Sequence 4294967295
CLTV requires 1,362
Rejected · non-mandatory-script-verify-flag (Locktime requirement not satisfied)Rejected by explicit block-validation attempt
CLTV output · valid signature and ripe boundary
cltv-key-signed-ripe-block-accepted
1,362 → 1,363nLockTime 1,362
Sequence 4294967294
CLTV requires 1,362
Accepted by admission checkAccepted by block validation; candidate included at height 1,363
Time lock · mock clock ahead, chain median behind
time-wall-clock-ahead-median-behind
1,364 → 1,365nLockTime 1,500,000,288
Sequence 4294967294
MTP 1,500,000,228
Mock clock 1,500,003,888
Rejected · non-finalNo block-validation attempt recorded
Time lock · chain median passes the lock
time-chain-median-now-past-lock
1,370 → 1,371nLockTime 1,500,000,288
Sequence 4294967294
MTP 1,500,003,888
Mock clock 1,500,003,888
Accepted by admission checkNo block-validation attempt recorded

The condition belongs to the candidate or to the output. Ordinary nLockTime does not reserve a UTXO. All-final input sequences bypass ordinary locktime, while a final sequence on the spending input fails a required CLTV path. The key signature is still required after the height becomes eligible.

The boundary is strict. For enabled, non-zero height locktime T, the candidate block must be higher than T. Earliest possible inclusion is T + 1; the node can consider it for admission at tip T. Crossing that boundary neither submits a transaction nor guarantees inclusion, and it is not an expiry date.

Time locks follow chain time. nLockTime below 500,000,000 means height; values at or above it mean time. Enabled time locktime must be strictly below median time past (MTP), derived from 11 block timestamps ending at the candidate block’s parent. For admission that parent is the current tip. Equality is still too early; advancing a wall clock or mock node clock alone cannot advance MTP.

This replay reads saved data and calculates comparisons locally. It has no wallet connection, signing or broadcast control and handles no real funds. Scope: transparent absolute locktime and one required CLTV path; no MWEB, relative sequence-lock or production custody test.

Data / Method

Inspect the evidence

The experiment ran on Windows with Litecoin Core 0.21.5.8 in two fresh regtest data directories. Both nodes had peer listening, outbound connections, DNS seeds and discovery disabled. Only test coins were created.

  1. Mine 101 blocks; fund 100 outputs of 0.02 LTC for each of three input types.
  2. Select 1, 10, 50 or 100 inputs explicitly. Fund and sign a 0.01 LTC payment with native SegWit recipient and change outputs. Record size, weight, fee and policy acceptance.
  3. Sign three one-input payments of 0.005, 0.010 and 0.015 LTC. Decode the results and verify that all amounts balance.
  4. Broadcast the middle payment only to A. Build the original and competing branches, submit the competing blocks to A, record mempool return, mine again and synchronize B.

The independent verifier recalculates byte length, transaction weight, vsize, transaction IDs and amount conservation from the signed bytes. It does not independently verify signatures or prove the node-state transcript. Core performed signing and policy checks during the experiment.

Source code: Core 0.21.5.8 release · Wallet funding RPC · Chain validation · Block submission RPC.

Scope: transparent standard transactions only. No MWEB, multisig or Taproot size measurements. New keys and signatures can change sizes slightly on another run. Data and original scripts: CC BY 4.0, attribution to Litecoin.watch.