Transactions, UTXOs & fees
Dogecoin has no account balances. That sentence surprises everyone the first time. What the chain actually stores is a pile of spendable coins – UTXOs – and a "balance" is just the sum of the ones your keys can unlock. Get this model into your head and transactions stop being mysterious.
The UTXO mental model
A UTXO (unspent transaction output) is like a banknote with a value printed on it: 12.5 DOGE, 300 DOGE, whatever it was created with. A transaction consumes whole banknotes and prints new ones:
Transaction anatomy
inputs: which existing UTXOs am I spending? (+ signatures proving I may)
outputs: new UTXOs - who gets how much
fee: inputs total - outputs total (implicit; miners keep it)
Because you must spend banknotes whole, almost every transaction pays change back to yourself. Send 50 DOGE using a 200 DOGE UTXO and the transaction has two outputs: 50 to the recipient, ~149.99 back to a change address your wallet controls. This is why wallet balances briefly look wrong after sending – the change hasn't confirmed yet.
Fees: priced per kilobyte, not per amount
Sending 1 DOGE and sending 1 million DOGE can cost the same fee. Fees are priced by transaction size in bytes, because block space is the scarce resource. A transaction with many inputs (lots of small banknotes) is physically bigger and costs more than one spending a single large input.
Since the 1.14.4 release lowered fee defaults, typical recommended fees are around 0.01 DOGE per kilobyte, with a dust threshold (smallest useful output) around 0.01 DOGE. A normal one-input-two-output transaction is a few hundred bytes – well under one DOGE in fees. Don't hard-code these numbers: ask your node at runtime.
$ dogecoin-cli getnetworkinfo # look at "relayfee"
$ dogecoin-cli estimatefee 6 # fee rate targeting ~6 blocks
Dogecoin Core's wallet handles coin selection, change, and fee calculation for you when you use sendtoaddress. You only manage UTXOs by hand when building raw transactions (createrawtransaction → signrawtransaction → sendrawtransaction) – a power tool you'll rarely need in this curriculum, but now you know what it's doing.
Confirmations: how long is "final"?
A transaction in the mempool (zero confirmations) is a promise, not a payment – it can still be replaced or dropped. Each block mined on top adds one confirmation and makes reversal exponentially harder. Dogecoin's one-minute blocks mean confirmations arrive fast, and merge-mined Scrypt hashrate makes deep reorganizations expensive.
Working guidance used across this curriculum:
| Situation | Wait for |
|---|---|
| Showing "payment seen" UI feedback | 0 conf (display only – never credit) |
| Small amounts: tips, low-price digital goods | 1–2 confirmations (~1–2 min) |
| Meaningful amounts: store orders, balances | 6 confirmations (~6 min) |
| Large withdrawals / anything irreversible on your side | 12+ confirmations |
The pattern to remember: credit on confirmations, deliver on more confirmations, and scale the wait to what you lose if it reverses.
Two more facts that save debugging hours
- Dogecoin uses legacy Bitcoin-style transactions. No SegWit, no Taproot, no bech32 addresses. If a Bitcoin library or tutorial mentions those, that part does not apply to Dogecoin.
OP_RETURNoutputs let a transaction carry a small data payload. Useful for anchoring hashes or receipts on-chain; not a file system. Keep payloads tiny and expect the standard relay rules to limit size.
Key takeaways
- The chain stores UTXOs, not balances; transactions consume and create them, with change back to you.
- Fees are per kilobyte of transaction size (~0.01 DOGE/kB era defaults) – query the node, don't hard-code.
- Zero-conf is a promise; credit at 1–2 conf for small things, 6+ when it matters.
- Legacy serialization only – skip anything SegWit/Taproot-specific in Bitcoin tutorials.