From 8c6c6d42d0d90d79bfad8eafc2951f9259242f2d Mon Sep 17 00:00:00 2001 From: stringintech Date: Mon, 27 Apr 2026 01:37:21 +0330 Subject: [PATCH] Add block header serialization binding --- kernel/block_header.go | 14 ++++++++++++++ kernel/block_header_test.go | 11 +++++++++++ 2 files changed, 25 insertions(+) diff --git a/kernel/block_header.go b/kernel/block_header.go index 9553fa3d..9e2770e2 100644 --- a/kernel/block_header.go +++ b/kernel/block_header.go @@ -83,3 +83,17 @@ func (bh *BlockHeader) Version() int32 { func (bh *BlockHeader) Nonce() uint32 { return uint32(C.btck_block_header_get_nonce((*C.btck_BlockHeader)(bh.ptr))) } + +// Bytes returns the consensus serialized representation of the block header. +// +// Returns an error if the serialization fails. +func (bh *BlockHeader) Bytes() ([80]byte, error) { + var buf [80]byte + if C.btck_block_header_to_bytes( + (*C.btck_BlockHeader)(bh.ptr), + (*C.uchar)(unsafe.Pointer(&buf[0])), + ) != 0 { + return [80]byte{}, &SerializationError{"Failed to serialize block header"} + } + return buf, nil +} diff --git a/kernel/block_header_test.go b/kernel/block_header_test.go index 5ec259f2..4cda89a4 100644 --- a/kernel/block_header_test.go +++ b/kernel/block_header_test.go @@ -120,4 +120,15 @@ func TestBlockHeader(t *testing.T) { t.Errorf("Expected nonce %d, got %d", expectedNonce, nonce) } }) + + t.Run("Bytes", func(t *testing.T) { + serialized, err := header.Bytes() + if err != nil { + t.Fatalf("Bytes() error = %v", err) + } + serializedStr := hex.EncodeToString(serialized[:]) + if serializedStr != genesisHeaderHex { + t.Errorf("Serialized header doesn't match original.\nExpected: %s\nGot: %s", genesisHeaderHex, serializedStr) + } + }) }