MCPcopy Index your code
hub / github.com/petertodd/python-bitcoinlib / CBlockHeader

Class CBlockHeader

bitcoin/core/__init__.py:499–550  ·  view source on GitHub ↗

A block header

Source from the content-addressed store, hash-verified

497
498
499class CBlockHeader(ImmutableSerializable):
500 """A block header"""
501 __slots__ = ['nVersion', 'hashPrevBlock', 'hashMerkleRoot', 'nTime', 'nBits', 'nNonce']
502
503 def __init__(self, nVersion=2, hashPrevBlock=b'\x00'*32, hashMerkleRoot=b'\x00'*32, nTime=0, nBits=0, nNonce=0):
504 object.__setattr__(self, 'nVersion', nVersion)
505 assert len(hashPrevBlock) == 32
506 object.__setattr__(self, 'hashPrevBlock', hashPrevBlock)
507 assert len(hashMerkleRoot) == 32
508 object.__setattr__(self, 'hashMerkleRoot', hashMerkleRoot)
509 object.__setattr__(self, 'nTime', nTime)
510 object.__setattr__(self, 'nBits', nBits)
511 object.__setattr__(self, 'nNonce', nNonce)
512
513 @classmethod
514 def stream_deserialize(cls, f):
515 nVersion = struct.unpack(b"<i", ser_read(f,4))[0]
516 hashPrevBlock = ser_read(f,32)
517 hashMerkleRoot = ser_read(f,32)
518 nTime = struct.unpack(b"<I", ser_read(f,4))[0]
519 nBits = struct.unpack(b"<I", ser_read(f,4))[0]
520 nNonce = struct.unpack(b"<I", ser_read(f,4))[0]
521 return cls(nVersion, hashPrevBlock, hashMerkleRoot, nTime, nBits, nNonce)
522
523 def stream_serialize(self, f):
524 f.write(struct.pack(b"<i", self.nVersion))
525 assert len(self.hashPrevBlock) == 32
526 f.write(self.hashPrevBlock)
527 assert len(self.hashMerkleRoot) == 32
528 f.write(self.hashMerkleRoot)
529 f.write(struct.pack(b"<I", self.nTime))
530 f.write(struct.pack(b"<I", self.nBits))
531 f.write(struct.pack(b"<I", self.nNonce))
532
533 @staticmethod
534 def calc_difficulty(nBits):
535 """Calculate difficulty from nBits target"""
536 nShift = (nBits >> 24) & 0xff
537 dDiff = float(0x0000ffff) / float(nBits & 0x00ffffff)
538 while nShift < 29:
539 dDiff *= 256.0
540 nShift += 1
541 while nShift > 29:
542 dDiff /= 256.0
543 nShift -= 1
544 return dDiff
545 difficulty = property(lambda self: CBlockHeader.calc_difficulty(self.nBits))
546
547 def __repr__(self):
548 return "%s(%i, lx(%s), lx(%s), %s, 0x%08x, 0x%08x)" % \
549 (self.__class__.__name__, self.nVersion, b2lx(self.hashPrevBlock), b2lx(self.hashMerkleRoot),
550 self.nTime, self.nBits, self.nNonce)
551
552class NoWitnessData(Exception):
553 """The block does not have witness data"""

Callers 3

get_headerMethod · 0.85
test_serializationMethod · 0.85
test_GetHashMethod · 0.85

Calls 1

calc_difficultyMethod · 0.80

Tested by 2

test_serializationMethod · 0.68
test_GetHashMethod · 0.68