| 1074 | HEADER_HF_BIT = 1 << 31 |
| 1075 | HEADER_DYNAFED_HF_MASK = 0x7fffffff |
| 1076 | class CBlockHeader: |
| 1077 | __slots__ = ("hash", "hashMerkleRoot", "hashPrevBlock", "nBits", "nNonce", |
| 1078 | "nTime", "nVersion", "sha256", "block_height", "proof", "m_dynafed_params", |
| 1079 | "m_signblock_witness") |
| 1080 | |
| 1081 | def __init__(self, header=None): |
| 1082 | if header is None: |
| 1083 | self.set_null() |
| 1084 | else: |
| 1085 | self.nVersion = header.nVersion |
| 1086 | self.hashPrevBlock = header.hashPrevBlock |
| 1087 | self.hashMerkleRoot = header.hashMerkleRoot |
| 1088 | self.nTime = header.nTime |
| 1089 | self.block_height = header.block_height |
| 1090 | self.proof = header.proof |
| 1091 | self.sha256 = header.sha256 |
| 1092 | self.hash = header.hash |
| 1093 | self.m_dynafed_params = header.m_dynafed_params |
| 1094 | self.m_signblock_witness = header.m_signblock_witness |
| 1095 | self.calc_sha256() |
| 1096 | |
| 1097 | def set_null(self): |
| 1098 | self.nVersion = 4 |
| 1099 | self.hashPrevBlock = 0 |
| 1100 | self.hashMerkleRoot = 0 |
| 1101 | self.nTime = 0 |
| 1102 | self.block_height = 0 |
| 1103 | self.proof = CProof() |
| 1104 | self.m_dynafed_params = DynaFedParams() |
| 1105 | self.m_signblock_witness = CScriptWitness() |
| 1106 | self.sha256 = None |
| 1107 | self.hash = None |
| 1108 | |
| 1109 | def deserialize(self, f): |
| 1110 | self.nVersion = struct.unpack("<i", f.read(4))[0] |
| 1111 | is_dyna = False |
| 1112 | |
| 1113 | if self.nVersion < 0: |
| 1114 | is_dyna = True |
| 1115 | self.nVersion = HEADER_DYNAFED_HF_MASK & self.nVersion |
| 1116 | |
| 1117 | self.hashPrevBlock = deser_uint256(f) |
| 1118 | self.hashMerkleRoot = deser_uint256(f) |
| 1119 | self.nTime = struct.unpack("<I", f.read(4))[0] |
| 1120 | self.block_height = struct.unpack("<I", f.read(4))[0] |
| 1121 | if is_dyna: |
| 1122 | self.m_dynafed_params.deserialize(f) |
| 1123 | self.m_signblock_witness.stack = deser_string_vector(f) |
| 1124 | else: |
| 1125 | self.proof.deserialize(f) |
| 1126 | self.sha256 = None |
| 1127 | self.hash = None |
| 1128 | |
| 1129 | def serialize(self): |
| 1130 | r = b"" |
| 1131 | nVersion = self.nVersion |
| 1132 | is_dyna = False |
| 1133 | if not self.m_dynafed_params.is_null(): |
no outgoing calls