Transaction Serialization
Transaction Serialization (Bitcoin-style)
Implement a simplified Bitcoin legacy transaction format. Scripts are treated as opaque byte slices.
Types
type Outpoint struct {
TxID [32]byte
Index uint32
}
type TxIn struct {
Prev Outpoint
ScriptSig []byte
Sequence uint32
}
type TxOut struct {
Value uint64
ScriptPubKey []byte
}
type Transaction struct {
Version int32
Inputs []TxIn
Outputs []TxOut
LockTime uint32
}
func SerializeTx(tx Transaction) []byte
func DeserializeTx(data []byte) (Transaction, bool)
func TxID(tx Transaction) [32]byte
Format
version (4 bytes LE)
input_count (CompactSize)
for each input:
prev_txid (32 bytes)
prev_index (4 bytes LE)
script_len (CompactSize)
script_sig (script_len bytes)
sequence (4 bytes LE)
output_count (CompactSize)
for each output:
value (8 bytes LE)
pk_script_len (CompactSize)
pk_script (pk_script_len bytes)
locktime (4 bytes LE)
Notes
TxIDisSHA256(SHA256(SerializeTx(tx))).DeserializeTxshould returnok=falseif parsing fails or if trailing bytes remain after a full transaction.- CompactSize decoding must reject non-canonical encodings.
Run tests to see results
No issues detected