Coinbase Payout Transaction

How to Audit Coinbase Transaction Outputs

Learn to audit coinbase transaction outputs after a Bitcoin block. Confirm the payout address, subsidy, fees, script, maturity, and transaction record.

How to Audit Coinbase Transaction Outputs

A block was found. The dashboard says it paid your address. That is not the end of the question. To audit coinbase transaction outputs, inspect the transaction embedded in the block and verify what Bitcoin accepted. A pool interface can report a result. The coinbase transaction is the result.

This article refers to the Bitcoin mining coinbase transaction, not an exchange account. Every valid Bitcoin block begins with one. It creates the block subsidy and collects the transaction fees from that block. Its outputs show where that value went.

For a solo miner, the audit is direct. Did the coinbase output pay the address you configured? For a miner using pool infrastructure, the question can be more complicated. Did the block reward go to one address, several addresses, or a pool-controlled wallet that promises to pay later? The chain can answer the first question with certainty. It cannot prove a private payout promise before that payout reaches the chain.

Start with the block, not a dashboard

You need the block hash or block height, the coinbase transaction ID, your expected payout address, and the expected block reward at that height. A block explorer can display these records, but your own fully validating node is the better source. An explorer is useful for convenience. It is still another party interpreting the chain for you.

With Bitcoin Core, begin by resolving a known height:

bitcoin-cli getblockhash <height>
bitcoin-cli getblock <blockhash> 2

Verbosity 2 returns decoded transactions. The first transaction in the tx array is the coinbase transaction. It has one input, but that input does not spend a normal prior output. Its previous transaction hash is all zeros and its output index is 4294967295. That is how Bitcoin identifies the special transaction that creates new coins under the consensus rules.

Record the block hash and coinbase transaction ID before checking values. A transaction ID without its block context is incomplete evidence. The same coinbase transaction must be included in the block you are auditing, and that block must remain in the active chain. Wait for confirmations appropriate to your operational risk. Fresh blocks can be reorganized out of the chain.

Calculate the maximum valid coinbase value

A valid coinbase transaction may claim no more than the block subsidy plus the fees from every non-coinbase transaction in that block. It may claim less. Bitcoin permits that. It does not permit more.

The subsidy depends on block height. It falls by half every 210,000 blocks. At a given height, calculate the subsidy from the applicable halving epoch. Do not use an old headline number from a mining calculator. The protocol value at the block's actual height is what matters.

Fees require more work. For each non-coinbase transaction:

fee = total input value - total output value

Then add each transaction fee together. A fully validating node already verifies this as part of block validation, but performing or reproducing the calculation is useful when you are auditing the payout amount. Some node interfaces expose fee fields in decoded block data. Verify what your installed software actually returns rather than assuming a field exists or uses your preferred unit.

The key check is simple:

sum of coinbase outputs <= subsidy + total block fees

For a direct, full-reward solo payout, the spendable payout output should normally equal the full permitted amount, except for any deliberately constructed outputs. A value below the maximum is not automatically theft. It could be a miner donation, an intentional burn, or an output carrying protocol data. But it deserves an explanation that survives inspection.

Audit each coinbase transaction output

Do not stop after finding your address somewhere in the transaction. Read every output. Coinbase transactions can contain multiple outputs, and output order is not a proof of ownership.

First, identify spendable outputs. In decoded transaction data, inspect each output's value and scriptPubKey. A standard address display is convenient, but the locking script is the consensus-level object. If your expected address is native SegWit, the script should correspond to that address's witness program. If you configured a Taproot address, expect a version 1 witness program with a 32-byte key. The address and script must be for Bitcoin mainnet, not a test network representation.

Second, total the values sent to your expected scripts. If you intended one payout address and find a different spendable script, do not accept an operator's label as proof. Compare the script directly with the address you submitted to the miner or pool configuration.

Third, separate unspendable data outputs from rewards. Modern blocks commonly include a SegWit witness commitment in an OP_RETURN output. It usually carries zero value and is not a payment to the miner, pool, or anyone else. Treating every output as a payout creates false alarms.

Fourth, look for additional spendable outputs. A block template can direct part of the reward to another script. The chain makes this visible. Whether that split is expected depends on the arrangement you chose. A miner who expects 100% of the solved block's subsidy and fees at one address should be able to identify that one output and verify its exact value without reconstructing a pool ledger.

This distinction matters. A payout later sent from an operator wallet can be a valid on-chain payment, but it is not a direct audit of the block reward. It introduces an extra custody step and an extra accounting claim. The coinbase transaction tells you whether that step exists.

Confirm maturity before calling it spendable

A coinbase output cannot be spent until it has 100 confirmations. This is a consensus rule, not a pool setting. An output can belong to your address, contain the correct amount, and still be unspendable for that period.

Check the block's depth in the active chain. If the block is at height 900,000, the coinbase output becomes spendable once the chain reaches height 900,100. Wallet software may label it immature rather than available. That label is correct.

Maturity also protects against a common mistake in audit notes. Do not describe an immature output as a missing payout just because it is absent from your spendable balance. The transaction exists first. Spendability follows after 100 blocks.

What this audit proves and what it does not

A coinbase output audit can prove that a specific accepted block sent a specific amount to a specific locking script. It can prove the total claimed reward stayed within the subsidy-plus-fee limit. It can prove whether an intermediate pool wallet appears in the block reward path.

It does not prove who physically operated the hash hardware. Bitcoin has no field that names a Bitaxe, an ASIC, a worker label, or a person. It also does not prove that a pool assigned work fairly across every submitted share. Those are separate questions about job distribution and work accounting.

That boundary is useful. A pool should not blur independent claims into one reassuring number. Verify the block payout on-chain. Verify submitted work through the accounting evidence available to you. Verify the connection path and job authority through the protocol behavior your miner actually receives. Each claim needs evidence suited to the claim.

For miners using NexusPool, a solved Bitcoin block is constructed for direct on-chain payment to the miner's configured address. Payout Preflight is intended to catch address and construction mismatches before they become a block-level surprise. It is still worth auditing the confirmed block yourself. A preflight check is evidence about the proposed result. The accepted coinbase transaction is evidence about the result Bitcoin recorded.

Keep a small audit record

When a block is found, save the block height, block hash, coinbase transaction ID, expected payout script, all coinbase outputs, calculated subsidy, calculated fees, and the height at which maturity occurs. A plain text file is enough. The point is not paperwork. It is preserving the exact facts before a UI changes, an explorer reindexes, or someone starts explaining what you supposedly saw.

If an amount differs from expectation, begin with arithmetic and scripts. Check the active-chain block hash. Recalculate fees. Confirm the address format and locking script. Identify zero-value commitment outputs. Then ask for an explanation tied to the raw transaction, not an account balance or a screenshot.

Your miner did not work for a dashboard number. It worked on a candidate block whose reward path is written into Bitcoin's public ledger. Trust nothing. Verify the coinbase transaction outputs.