From 2a225e9d36a1c70b45313aeef99774aa2d0c2f8b Mon Sep 17 00:00:00 2001 From: ffranr Date: Mon, 6 Nov 2023 15:07:04 +0000 Subject: [PATCH] wire: add method TxID to MsgTx This commit adds a method to MsgTx called TxID. This method returns the transaction ID (txid) of the subject transaction. --- wire/msgtx.go | 5 +++++ wire/msgtx_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/wire/msgtx.go b/wire/msgtx.go index eab265c35d..a86061a95e 100644 --- a/wire/msgtx.go +++ b/wire/msgtx.go @@ -353,6 +353,11 @@ func (msg *MsgTx) TxHash() chainhash.Hash { return chainhash.DoubleHashRaw(msg.SerializeNoWitness) } +// TxID generates the transaction ID of the transaction. +func (msg *MsgTx) TxID() string { + return msg.TxHash().String() +} + // WitnessHash generates the hash of the transaction serialized according to // the new witness serialization defined in BIP0141 and BIP0144. The final // output is used within the Segregated Witness commitment of all the witnesses diff --git a/wire/msgtx_test.go b/wire/msgtx_test.go index 5ec753b62d..1b3bfd4eec 100644 --- a/wire/msgtx_test.go +++ b/wire/msgtx_test.go @@ -756,6 +756,34 @@ func TestTxSerializeSizeStripped(t *testing.T) { } } +// TestTxID performs tests to ensure the serialize size for various transactions +// is accurate. +func TestTxID(t *testing.T) { + // Empty tx message. + noTx := NewMsgTx(1) + noTx.Version = 1 + + tests := []struct { + in *MsgTx // Tx to encode. + txid string // Expected transaction ID. + }{ + // No inputs or outputs. + {noTx, "d21633ba23f70118185227be58a63527675641ad37967e2aa461559f577aec43"}, + + // Transaction with an input and an output. + {multiTx, "0100d15a522ff38de05c164ca0a56379a1b77dd1e4805a6534dc9b3d88290e9d"}, + + // Transaction with an input which includes witness data, and + // one output. + {multiWitnessTx, "0f167d1385a84d1518cfee208b653fc9163b605ccf1b75347e2850b3e2eb19f3"}, + } + + for i, test := range tests { + txid := test.in.TxID() + require.Equal(t, test.txid, txid, "test #%d", i) + } +} + // TestTxWitnessSize performs tests to ensure that the serialized size for // various types of transactions that include witness data is accurate. func TestTxWitnessSize(t *testing.T) {