808bits

Raw transaction decoder

2026-08-20 · 3 min

A raw transaction is a byte string with no field names, no delimiters, and no forgiveness. Every explorer and wallet shows you its interpretation of those bytes; this page shows you the bytes themselves, and names each one. Paste a transaction below, or start from one of the examples: the first one is the first Bitcoin payment ever made.

Chain
Network
or try

Nothing you paste leaves the page: no server, no analytics, no network request carrying your input anywhere. The page fetches one wasm file and goes quiet; you can verify that in your browser's developer tools.

What you are looking at

The left pane is the transaction exactly as it travels: the hex you pasted. The right pane is the same bytes with their meaning attached. Hover any decoded field and the bytes it came from light up, which is the fastest way to internalize a serialization format there is. Nothing here is looked up from a node or an API: addresses are derived, scripts disassembled, and sizes computed from the bytes alone.

Two things are worth singling out.

For Bitcoin, the txid is not stored anywhere in the transaction. It is the double SHA-256 of the serialization, with witness data stripped, displayed in reverse byte order for historical reasons. The decoder recomputes it the same way your node does, so what you see is proof of the parse, not a lookup.

For Ethereum, the sender is not stored anywhere either. The from address in every explorer is recovered from the ECDSA signature: the decoder rebuilds the unsigned transaction, hashes it with Keccak-256, and runs public key recovery on the r, s and parity values. If the recovered address matches what an explorer shows for the same transaction, the whole chain of RLP encoding, hashing and curve arithmetic checked out in your tab.

What it covers

Bitcoin: legacy, segwit and taproot serializations, script disassembly for every input and output, standard template classification (P2PKH, P2SH, P2WPKH, P2WSH, P2TR, P2PK, OP_RETURN, bare multisig) with address derivation on mainnet and testnet, witness stack annotation, BIP 125 replace-by-fee and BIP 68 relative locktime signaling, coinbase recognition with the BIP 34 height, and size, virtual size and weight.

Ethereum: all five transaction envelopes (legacy with and without EIP-155, EIP-2930, EIP-1559, EIP-4844 blob-carrying, EIP-7702 set code), quantities in wei, Gwei and ETH, EIP-55 checksummed addresses, access lists, blob commitment hashes, authorization lists, calldata with known function selectors decoded, and sender recovery as above.

Under the hood

The decoders are written in Zig and compiled to a 111 KB WebAssembly module, with no dependencies beyond the Zig standard library: SHA-256, Keccak-256 and the secp256k1 curve arithmetic all come from std.crypto. The page’s JavaScript moves your hex into linear memory and draws the result; parsing, hashing and signature recovery happen inside the wasm sandbox. The same Zig code builds a native command line tool, so the exact decoder running in your tab can also run air-gapped in a recovery drill, where pasting key-adjacent material into a browser would be the wrong move. Every example transaction on this page is pinned in the test suite: the computed txids, hashes and recovered senders are checked against chain data on every build.