diff --git a/kernel/block_hash.go b/kernel/block_hash.go index 3dfa5c1..feed9d4 100644 --- a/kernel/block_hash.go +++ b/kernel/block_hash.go @@ -5,6 +5,7 @@ package kernel */ import "C" import ( + "encoding/hex" "unsafe" ) @@ -85,3 +86,9 @@ func (bh *blockHashApi) Copy() *BlockHash { func (bh *blockHashApi) Equals(other BlockHashLike) bool { return C.btck_block_hash_equals(bh.ptr, other.blockHashPtr()) != 0 } + +// String returns the block hash as a hex string in display order (reversed). +func (bh *blockHashApi) String() string { + hashBytes := bh.Bytes() + return hex.EncodeToString(ReverseBytes(hashBytes[:])) +} diff --git a/kernel/block_hash_test.go b/kernel/block_hash_test.go index be2b173..712da8f 100644 --- a/kernel/block_hash_test.go +++ b/kernel/block_hash_test.go @@ -1,6 +1,7 @@ package kernel import ( + "encoding/hex" "testing" ) @@ -37,4 +38,10 @@ func TestBlockHash(t *testing.T) { if hash.Equals(differentHash) { t.Errorf("hash.Equals(differentHash) = true, want false") } + + // Test String() + expected := hex.EncodeToString(ReverseBytes(hashBytes[:])) + if hash.String() != expected { + t.Errorf("hash.String() = %s, want %s", hash.String(), expected) + } } diff --git a/kernel/block_test.go b/kernel/block_test.go index 730b5ce..c0c9a99 100644 --- a/kernel/block_test.go +++ b/kernel/block_test.go @@ -48,7 +48,7 @@ func TestBlock(t *testing.T) { // Expected genesis block hash (reversed byte order for display) expectedHash := "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" hashBytes := hash.Bytes() - actualHashHex := hex.EncodeToString(reverseBytes(hashBytes[:])) + actualHashHex := hex.EncodeToString(ReverseBytes(hashBytes[:])) if actualHashHex != expectedHash { t.Errorf("Expected hash %s, got %s", expectedHash, actualHashHex) } @@ -134,11 +134,3 @@ func TestBlock(t *testing.T) { } }) } - -func reverseBytes(data []byte) []byte { - result := make([]byte, len(data)) - for i, b := range data { - result[len(data)-1-i] = b - } - return result -} diff --git a/kernel/common.go b/kernel/common.go index a9c2c03..05c1d37 100644 --- a/kernel/common.go +++ b/kernel/common.go @@ -92,3 +92,11 @@ func (h *handle) Destroy() { func go_delete_handle(handle unsafe.Pointer) { cgo.Handle(handle).Delete() } + +func ReverseBytes(data []byte) []byte { + result := make([]byte, len(data)) + for i, b := range data { + result[len(data)-1-i] = b + } + return result +} diff --git a/kernel/txid.go b/kernel/txid.go index e372697..16570d7 100644 --- a/kernel/txid.go +++ b/kernel/txid.go @@ -5,6 +5,7 @@ package kernel */ import "C" import ( + "encoding/hex" "unsafe" ) @@ -60,3 +61,9 @@ func (t *txidApi) Bytes() [32]byte { C.btck_txid_to_bytes(t.ptr, &output[0]) return *(*[32]byte)(unsafe.Pointer(&output[0])) } + +// String returns the txid as a hex string in display order (reversed). +func (t *txidApi) String() string { + hashBytes := t.Bytes() + return hex.EncodeToString(ReverseBytes(hashBytes[:])) +} diff --git a/kernel/txid_test.go b/kernel/txid_test.go index a02b3b6..990aa76 100644 --- a/kernel/txid_test.go +++ b/kernel/txid_test.go @@ -39,4 +39,11 @@ func TestTxid(t *testing.T) { if !txid.Equals(copiedTxid) { t.Error("txid.Equals(copiedTxid) = false, want true") } + + // Test String() + expected := hex.EncodeToString(ReverseBytes(txidBytes[:])) + txidStr := txid.String() + if txidStr != expected { + t.Errorf("hash.String() = %s, want %s", txidStr, expected) + } }