How to avoid paying twice with Litecoin — research package v1.0.0
Experiment completed 15 October 2026 UTC; all amounts are disposable regtest LTC.

QUESTION
Does rebroadcasting identical signed transaction data create a second payment,
and does another sendtoaddress call with the same destination, amount and local
invoice comment behave differently?

WHAT WAS ACTUALLY RUN
One fresh Litecoin Core 0.21.5.8 regtest node with two fresh wallets. Peer
networking was disabled; every recorded stage had zero peers. RPC was bound
only to loopback. 101 blocks supplied mature test coins. P1 sent 0.125 LTC
without subtracting the fee from the recipient. We submitted the exact saved
raw P1 bytes while P1 was in the mempool, generated one block, and submitted
the same bytes again. A second sendtoaddress used the identical destination,
amount, comment and fee-subtraction setting. We generated one more block.

OBSERVATIONS
The pending rebroadcast returned P1's original transaction ID. The confirmed
rebroadcast returned code−27: Transaction already in block chain. Neither
created another recipient output or another mined fee payment. The second
Send produced a distinct transaction and a second 0.125 LTC recipient output.
Both paid 0.00001410 LTC in miner fees in this configuration. Final receipts
total 0.25000000 LTC and the two fees total 0.00002820 LTC. 38 experiment
assertions passed. The node exited0; its fresh temporary data directory was
removed. All stages, raw bytes, RPC calls and help text are included.

OFFLINE VERIFICATION
Python 3.10 or later; no external package or network access:
  python verify.py.txt
It checks SHA256SUMS.txt, independently decodes the transparent raw transaction
bytes, recomputes transaction IDs without witness data, checks input prevouts
and outputs with integer litoshi arithmetic, derives both fees, and compares
the JSON ledger, RPC trace and CSV stages. It does not rerun Core or claim
to validate scripts, proof of work, consensus, mainnet status or ownership.

FRESH REPRODUCTION
Only in your own disposable environment, with the pinned Linux binaries:
  python reproduce.py.txt /path/litecoind /path/litecoin-cli new-output-directory
Binary SHA256 pins:
litecoind 63fb440cdc5e2e7d46144b8e3a47dab4725fa9c056a77b8b12b11854504f4838
litecoin-cli d185011cc0dbb5d2dd20611e9dc060dbb0a5d9be31a03f57da5dbd3dad4c3769
The reproducer refuses other bytes and never accepts an existing data directory
or wallet. Its work alarm is 75 seconds, followed by bounded shutdown. The private
runner additionally bounded the entire process group to at most 90 seconds.
Fresh key generation and coin selection mean transaction IDs, output order,
signatures, timestamps and possibly fees may differ on a new run. The offline
verifier is deliberately for the frozen result, including its measured fees.
Do not replace the frozen result files with a new run and expect identical hashes.

METHOD BOUNDARIES
This is a software experiment, not a speed benchmark, test of an exchange,
mobile-wallet test, invoice processor, recovery service or mainnet payment.
Blocks were generated on demand. Receipt counts are transparent native-SegWit
outputs known to the local recipient wallet. It does not test MWEB, payment
URI parsing, replacements, conflicts, reorganizations or altered transactions
with a different txid. A different txid is a reason to inspect inputs/outputs,
not proof that two independent payments can both confirm. P2 here spends P1's
sender change output; it does not spend P1's recipient output. The two payments
do not conflict. A repeated webhook is an off-chain event; deduplicating it
does not deduplicate newly created blockchain transactions.

PROVENANCE
reproduce.py.txt is the exact successful experiment program. rpc-help.json
contains help returned by this pinned runtime. sources.json identifies the
official tagged source files and their SHA256. Those sources are used for
RPC semantics; original results are supported by our own raw evidence.
The published source/binary hashes identify bytes, not an independent audit
or reproducible-build attestation. No private keys, seeds, wallet files, private
descriptors, authentication cookies or production-wallet material are included.
The trace includes generated regtest public output descriptors.
All transaction IDs and addresses in the data are generated regtest fixtures.
Do not search for them on mainnet or send real funds to them.

FILES
results.json: complete measured outcomes, assertion list and cleanup status.
transactions.json: both raw transactions and input prevouts used to derive fees.
stages.csv: seven recorded wallet/mempool/confirmation states.
rpc-trace.json: actual RPC commands and returned data from the successful run.
rpc-help.json: actual runtime help for the methods used by the guide.
cleanup.json: final process/directory cleanup result.
reproduce.py.txt: fresh isolated experiment program; requires Core binaries.
verify.py.txt: independent offline frozen-evidence verification.
retry-checklist.txt: printable payment investigation checklist.
payment-ledger-template.csv: blank private record template; no secrets required.
scenario-cases.csv: four explicitly fictional teaching scenarios, not test results.
sources.json: versioned primary-source provenance.
SHA256SUMS.txt: public-file checksums; integrity, not authenticity certification.

EDITORIAL DISTINCTION
The guide's four named service scenarios are fictional. No provider contact,
refund, crediting delay or support response was tested. The experiment measures
only the exact Core operations recorded in the trace.
