mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-06 22:26:47 +00:00
[DEV-244] Remove BlockHeader.NumParentBlocks and use a method instead (#121)
This commit is contained in:
parent
8a234bf4a3
commit
05d46e7c01
@ -164,7 +164,6 @@ func (node *blockNode) Header() *wire.BlockHeader {
|
||||
// No lock is needed because all accessed fields are immutable.
|
||||
return &wire.BlockHeader{
|
||||
Version: node.version,
|
||||
NumParentBlocks: byte(len(node.parents)),
|
||||
ParentHashes: node.ParentHashes(),
|
||||
MerkleRoot: node.merkleRoot,
|
||||
Timestamp: time.Unix(node.timestamp, 0),
|
||||
|
@ -510,7 +510,6 @@ func (g *testGenerator) nextBlock(blockName string, spend *spendableOut, mungers
|
||||
block := wire.MsgBlock{
|
||||
Header: wire.BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 1, // TODO: (Stas) This is wrong. Modified only to satisfy compilation.
|
||||
ParentHashes: []daghash.Hash{g.tip.BlockHash()}, // TODO: (Stas) This is wrong. Modified only to satisfy compilation.
|
||||
MerkleRoot: calcMerkleRoot(txns),
|
||||
Bits: g.params.PowLimitBits,
|
||||
|
@ -55,7 +55,6 @@ var (
|
||||
regTestGenesisBlock = wire.MsgBlock{
|
||||
Header: wire.BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 0,
|
||||
ParentHashes: []daghash.Hash{},
|
||||
MerkleRoot: *newHashFromStr("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"),
|
||||
Timestamp: time.Unix(0x5b28c636, 0), // 2018-06-19 09:00:38 +0000 UTC
|
||||
|
@ -431,7 +431,7 @@ func checkBlockHeaderSanity(header *wire.BlockHeader, powLimit *big.Int, timeSou
|
||||
|
||||
//checkBlockParentsOrder ensures that the block's parents are ordered by hash
|
||||
func checkBlockParentsOrder(header *wire.BlockHeader) error {
|
||||
sortedHashes := make([]daghash.Hash, 0, len(header.ParentHashes))
|
||||
sortedHashes := make([]daghash.Hash, 0, header.NumParentBlocks())
|
||||
for _, hash := range header.ParentHashes {
|
||||
sortedHashes = append(sortedHashes, hash)
|
||||
}
|
||||
|
@ -170,7 +170,6 @@ func TestCheckBlockSanity(t *testing.T) {
|
||||
var invalidParentsOrderBlock = wire.MsgBlock{
|
||||
Header: wire.BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 2,
|
||||
ParentHashes: []daghash.Hash{
|
||||
[32]byte{ // Make go vet happy.
|
||||
0x4b, 0xb0, 0x75, 0x35, 0xdf, 0xd5, 0x8e, 0x0b,
|
||||
@ -611,7 +610,6 @@ func TestValidateParents(t *testing.T) {
|
||||
var Block100000 = wire.MsgBlock{
|
||||
Header: wire.BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 2,
|
||||
ParentHashes: []daghash.Hash{
|
||||
[32]byte{ // Make go vet happy.
|
||||
0x16, 0x5e, 0x38, 0xe8, 0xb3, 0x91, 0x45, 0x95,
|
||||
|
@ -79,7 +79,6 @@ var genesisMerkleRoot = daghash.Hash([daghash.HashSize]byte{ // Make go vet happ
|
||||
var genesisBlock = wire.MsgBlock{
|
||||
Header: wire.BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 0,
|
||||
ParentHashes: []daghash.Hash{},
|
||||
MerkleRoot: genesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
|
||||
Timestamp: time.Unix(0x5bbe076c, 0), // 2018-10-10 14:06:36 +0000 UTC
|
||||
@ -108,7 +107,6 @@ var regTestGenesisMerkleRoot = genesisMerkleRoot
|
||||
var regTestGenesisBlock = wire.MsgBlock{
|
||||
Header: wire.BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 0,
|
||||
ParentHashes: []daghash.Hash{},
|
||||
MerkleRoot: regTestGenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
|
||||
Timestamp: time.Unix(0x5bbe0d4b, 0), // 2018-06-19 09:00:38 +0000 UTC
|
||||
@ -137,7 +135,6 @@ var testNet3GenesisMerkleRoot = genesisMerkleRoot
|
||||
var testNet3GenesisBlock = wire.MsgBlock{
|
||||
Header: wire.BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 0,
|
||||
ParentHashes: []daghash.Hash{},
|
||||
MerkleRoot: testNet3GenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
|
||||
Timestamp: time.Unix(0x5bbe0e49, 0), // 2018-06-19 09:04:06 +0000 UTC
|
||||
@ -166,7 +163,6 @@ var simNetGenesisMerkleRoot = genesisMerkleRoot
|
||||
var simNetGenesisBlock = wire.MsgBlock{
|
||||
Header: wire.BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 0,
|
||||
ParentHashes: []daghash.Hash{},
|
||||
MerkleRoot: simNetGenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
|
||||
Timestamp: time.Unix(0x5bbe00fe, 0), // 2018-10-10 13:39:10 +0000 UTC
|
||||
|
1
database/testdata/generator.go
vendored
1
database/testdata/generator.go
vendored
@ -45,7 +45,6 @@ func generateBlock(parent *wire.MsgBlock) *wire.MsgBlock {
|
||||
return &wire.MsgBlock{
|
||||
Header: wire.BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 1,
|
||||
ParentHashes: []daghash.Hash{parent.BlockHash()},
|
||||
MerkleRoot: genesisMerkleRoot,
|
||||
Timestamp: time.Unix(0x5b28c4c8, 0), // 2018-06-19 08:54:32 +0000 UTC
|
||||
|
@ -716,7 +716,6 @@ mempoolLoop:
|
||||
var msgBlock wire.MsgBlock
|
||||
msgBlock.Header = wire.BlockHeader{
|
||||
Version: nextBlockVersion,
|
||||
NumParentBlocks: byte(len(g.dag.TipHashes())),
|
||||
ParentHashes: g.dag.TipHashes(),
|
||||
MerkleRoot: *merkles[len(merkles)-1],
|
||||
Timestamp: ts,
|
||||
|
@ -305,7 +305,6 @@ func TestBlockErrors(t *testing.T) {
|
||||
var Block100000 = wire.MsgBlock{
|
||||
Header: wire.BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 2,
|
||||
ParentHashes: []daghash.Hash{
|
||||
[32]byte{ // Make go vet happy.
|
||||
0x82, 0xdc, 0xbd, 0xe6, 0x88, 0x37, 0x74, 0x5b,
|
||||
|
@ -34,9 +34,6 @@ type BlockHeader struct {
|
||||
// Version of the block. This is not the same as the protocol version.
|
||||
Version int32
|
||||
|
||||
// Number of entries in ParentHashes
|
||||
NumParentBlocks byte
|
||||
|
||||
// Hashes of the parent block headers in the blockDAG.
|
||||
ParentHashes []daghash.Hash
|
||||
|
||||
@ -53,13 +50,18 @@ type BlockHeader struct {
|
||||
Nonce uint64
|
||||
}
|
||||
|
||||
// NumParentBlocks return the number of entries in ParentHashes
|
||||
func (h *BlockHeader) NumParentBlocks() byte {
|
||||
return byte(len(h.ParentHashes))
|
||||
}
|
||||
|
||||
// BlockHash computes the block identifier hash for the given block header.
|
||||
func (h *BlockHeader) BlockHash() daghash.Hash {
|
||||
// Encode the header and double sha256 everything prior to the number of
|
||||
// transactions. Ignore the error returns since there is no way the
|
||||
// encode could fail except being out of memory which would cause a
|
||||
// run-time panic.
|
||||
buf := bytes.NewBuffer(make([]byte, 0, BaseBlockHeaderPayload+len(h.ParentHashes)))
|
||||
buf := bytes.NewBuffer(make([]byte, 0, BaseBlockHeaderPayload+h.NumParentBlocks()))
|
||||
_ = writeBlockHeader(buf, 0, h)
|
||||
|
||||
return daghash.DoubleHashH(buf.Bytes())
|
||||
@ -67,7 +69,7 @@ func (h *BlockHeader) BlockHash() daghash.Hash {
|
||||
|
||||
// SelectedParentHash returns the hash of the selected block header.
|
||||
func (h *BlockHeader) SelectedParentHash() *daghash.Hash {
|
||||
if h.NumParentBlocks == 0 {
|
||||
if h.NumParentBlocks() == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -76,7 +78,7 @@ func (h *BlockHeader) SelectedParentHash() *daghash.Hash {
|
||||
|
||||
// IsGenesis returns true iff this block is a genesis block
|
||||
func (h *BlockHeader) IsGenesis() bool {
|
||||
return h.NumParentBlocks == 0
|
||||
return h.NumParentBlocks() == 0
|
||||
}
|
||||
|
||||
// BtcDecode decodes r using the bitcoin protocol encoding into the receiver.
|
||||
@ -118,7 +120,7 @@ func (h *BlockHeader) Serialize(w io.Writer) error {
|
||||
// SerializeSize returns the number of bytes it would take to serialize the
|
||||
// block header.
|
||||
func (h *BlockHeader) SerializeSize() int {
|
||||
return BaseBlockHeaderPayload + int(h.NumParentBlocks)*daghash.HashSize
|
||||
return BaseBlockHeaderPayload + int(h.NumParentBlocks())*daghash.HashSize
|
||||
}
|
||||
|
||||
// NewBlockHeader returns a new BlockHeader using the provided version, previous
|
||||
@ -131,7 +133,6 @@ func NewBlockHeader(version int32, parentHashes []daghash.Hash, merkleRootHash *
|
||||
// doesn't support better.
|
||||
return &BlockHeader{
|
||||
Version: version,
|
||||
NumParentBlocks: byte(len(parentHashes)),
|
||||
ParentHashes: parentHashes,
|
||||
MerkleRoot: *merkleRootHash,
|
||||
Timestamp: time.Unix(time.Now().Unix(), 0),
|
||||
@ -144,13 +145,14 @@ func NewBlockHeader(version int32, parentHashes []daghash.Hash, merkleRootHash *
|
||||
// decoding block headers stored to disk, such as in a database, as opposed to
|
||||
// decoding from the wire.
|
||||
func readBlockHeader(r io.Reader, pver uint32, bh *BlockHeader) error {
|
||||
err := readElements(r, &bh.Version, &bh.NumParentBlocks)
|
||||
var numParentBlocks byte
|
||||
err := readElements(r, &bh.Version, &numParentBlocks)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
bh.ParentHashes = make([]daghash.Hash, bh.NumParentBlocks)
|
||||
for i := byte(0); i < bh.NumParentBlocks; i++ {
|
||||
bh.ParentHashes = make([]daghash.Hash, numParentBlocks)
|
||||
for i := byte(0); i < numParentBlocks; i++ {
|
||||
err := readElement(r, &bh.ParentHashes[i])
|
||||
if err != nil {
|
||||
return err
|
||||
@ -164,6 +166,6 @@ func readBlockHeader(r io.Reader, pver uint32, bh *BlockHeader) error {
|
||||
// opposed to encoding for the wire.
|
||||
func writeBlockHeader(w io.Writer, pver uint32, bh *BlockHeader) error {
|
||||
sec := int64(bh.Timestamp.Unix())
|
||||
return writeElements(w, bh.Version, bh.NumParentBlocks, &bh.ParentHashes, &bh.MerkleRoot,
|
||||
return writeElements(w, bh.Version, bh.NumParentBlocks(), &bh.ParentHashes, &bh.MerkleRoot,
|
||||
sec, bh.Bits, bh.Nonce)
|
||||
}
|
||||
|
@ -56,7 +56,6 @@ func TestBlockHeaderWire(t *testing.T) {
|
||||
bits := uint32(0x1d00ffff)
|
||||
baseBlockHdr := &BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 2,
|
||||
ParentHashes: []daghash.Hash{mainNetGenesisHash, simNetGenesisHash},
|
||||
MerkleRoot: mainNetGenesisMerkleRoot,
|
||||
Timestamp: time.Unix(0x495fab29, 0), // 2009-01-03 12:15:05 -0600 CST
|
||||
@ -195,7 +194,6 @@ func TestBlockHeaderSerialize(t *testing.T) {
|
||||
bits := uint32(0x1d00ffff)
|
||||
baseBlockHdr := &BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 2,
|
||||
ParentHashes: []daghash.Hash{mainNetGenesisHash, simNetGenesisHash},
|
||||
MerkleRoot: mainNetGenesisMerkleRoot,
|
||||
Timestamp: time.Unix(0x495fab29, 0), // 2009-01-03 12:15:05 -0600 CST
|
||||
@ -275,7 +273,6 @@ func TestBlockHeaderSerializeSize(t *testing.T) {
|
||||
timestamp := time.Unix(0x495fab29, 0) // 2009-01-03 12:15:05 -0600 CST
|
||||
baseBlockHdr := &BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 2,
|
||||
ParentHashes: []daghash.Hash{mainNetGenesisHash, simNetGenesisHash},
|
||||
MerkleRoot: mainNetGenesisMerkleRoot,
|
||||
Timestamp: timestamp,
|
||||
@ -285,7 +282,6 @@ func TestBlockHeaderSerializeSize(t *testing.T) {
|
||||
|
||||
genesisBlockHdr := &BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 0,
|
||||
ParentHashes: []daghash.Hash{},
|
||||
MerkleRoot: mainNetGenesisMerkleRoot,
|
||||
Timestamp: timestamp,
|
||||
@ -322,7 +318,6 @@ func TestIsGenesis(t *testing.T) {
|
||||
|
||||
baseBlockHdr := &BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 2,
|
||||
ParentHashes: []daghash.Hash{mainNetGenesisHash, simNetGenesisHash},
|
||||
MerkleRoot: mainNetGenesisMerkleRoot,
|
||||
Timestamp: timestamp,
|
||||
@ -331,7 +326,6 @@ func TestIsGenesis(t *testing.T) {
|
||||
}
|
||||
genesisBlockHdr := &BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 0,
|
||||
ParentHashes: []daghash.Hash{},
|
||||
MerkleRoot: mainNetGenesisMerkleRoot,
|
||||
Timestamp: timestamp,
|
||||
|
@ -492,7 +492,6 @@ func TestBlockSerializeSize(t *testing.T) {
|
||||
var blockOne = MsgBlock{
|
||||
Header: BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 2,
|
||||
ParentHashes: []daghash.Hash{mainNetGenesisHash, simNetGenesisHash},
|
||||
MerkleRoot: daghash.Hash(mainNetGenesisMerkleRoot),
|
||||
|
||||
|
@ -338,7 +338,6 @@ func TestMerkleBlockOverflowErrors(t *testing.T) {
|
||||
var merkleBlockOne = MsgMerkleBlock{
|
||||
Header: BlockHeader{
|
||||
Version: 1,
|
||||
NumParentBlocks: 2,
|
||||
ParentHashes: []daghash.Hash{mainNetGenesisHash, simNetGenesisHash},
|
||||
MerkleRoot: daghash.Hash([daghash.HashSize]byte{ // Make go vet happy.
|
||||
0x98, 0x20, 0x51, 0xfd, 0x1e, 0x4b, 0xa7, 0x44,
|
||||
|
Loading…
x
Reference in New Issue
Block a user