示例#1
0
class BlockheaderSerializer(Serializer):
    def __init__(self, flags=0):
        self.BLOCKHEADER = Structure([
            Field("<I", "version"),
            Uint256Serializer("hash_prev"),
            Uint256Serializer("hash_merkle"),
            Field("<I", "time"),
            Field("<I", "bits"),
            Field("<I", "nonce")
        ], "txindex")

    def get_size(self, blockheader):
        return (self.BLOCKHEADER.get_size([
            blockheader.version, blockheader.hash_prev,
            blockheader.hash_merkle, blockheader.time, blockheader.bits,
            blockheader.nonce
        ]))

    def serialize(self, blockheader):
        return (self.BLOCKHEADER.serialize([
            blockheader.version, blockheader.hash_prev,
            blockheader.hash_merkle, blockheader.time, blockheader.bits,
            blockheader.nonce
        ]))

    def deserialize(self, data, cursor=0):
        (version, hash_prev, hash_merkle, time, bits,
         nonce), new_cursor = self.BLOCKHEADER.deserialize(data, cursor)
        blockheader = BlockHeader(version, hash_prev, hash_merkle, time, bits,
                                  nonce)
        blockheader.rawdata = data[cursor:new_cursor]
        return (blockheader, new_cursor)
示例#2
0
class BlockheaderSerializer(Serializer):
    def __init__(self, flags=0):
        self.BLOCKHEADER = Structure([Field("<I", "version"),
                                      Uint256Serializer("hash_prev"),
                                      Uint256Serializer("hash_merkle"),
                                      Field("<I", "time"),
                                      Field("<I", "bits"),
                                      Field("<I", "nonce")], "txindex")

    def get_size(self, blockheader):
        return (self.BLOCKHEADER.get_size([blockheader.version,
                                           blockheader.hash_prev,
                                           blockheader.hash_merkle,
                                           blockheader.time,
                                           blockheader.bits,
                                           blockheader.nonce]))

    def serialize(self, blockheader):
        return (self.BLOCKHEADER.serialize([blockheader.version,
                                            blockheader.hash_prev,
                                            blockheader.hash_merkle,
                                            blockheader.time,
                                            blockheader.bits,
                                            blockheader.nonce]))

    def deserialize(self, data, cursor=0):
        (version, hash_prev, hash_merkle, time, bits, nonce), new_cursor = self.BLOCKHEADER.deserialize(data, cursor)
        blockheader = BlockHeader(version, hash_prev, hash_merkle, time, bits, nonce)
        blockheader.rawdata = data[cursor:new_cursor]
        return (blockheader, new_cursor)

        
示例#3
0
class NetAddrSerializer(Serializer):
    def __init__(self, desc=""):
        self.NETADDR = Structure([Field("<Q", "services"),
                                  IPAddrSerializer("ip"),
                                  Field(">H", "port")], "netaddr")

    def serialize(self, a_netaddr):
        data = self.NETADDR.serialize([a_netaddr.services, a_netaddr.ip, a_netaddr.port])
        return (data)

    def deserialize(self, data, cursor=0):
        (services, ip, port), cursor = self.NETADDR.deserialize(data, cursor)
        return (Netaddr(services, ip, port), cursor)
示例#4
0
class NetAddrSerializer(Serializer):
    def __init__(self, desc=""):
        self.NETADDR = Structure([
            Field("<Q", "services"),
            IPAddrSerializer("ip"),
            Field(">H", "port")
        ], "netaddr")

    def serialize(self, a_netaddr):
        data = self.NETADDR.serialize(
            [a_netaddr.services, a_netaddr.ip, a_netaddr.port])
        return (data)

    def deserialize(self, data, cursor=0):
        (services, ip, port), cursor = self.NETADDR.deserialize(data, cursor)
        return (Netaddr(services, ip, port), cursor)
示例#5
0
class BlockLocatorSerializer(Serializer):
    def __init__(self, flags=0):
        self.BLOCKLOCATOR = Structure([Field("<I", "version"),  
                                      VarsizelistSerializer(VarintSerializer("count"), Uint256Serializer("locator"))])

    def get_size(self, blocklocator):
        return (self.BLOCKLOCATOR.get_size([blocklocator.version, blocklocator.blockhashlist]))

    def serialize(self, blocklocator):
        return (self.BLOCKLOCATOR.serialize([blocklocator.version, blocklocator.blockhashlist]))

    def deserialize(self, data, cursor=0):
        (version, blockhashlist), cursor = self.BLOCKLOCATOR.deserialize(data, cursor)
        return (BlockLocator(version, blockhashlist), cursor)

        
示例#6
0
class BlockSerializer(Serializer):
    def __init__(self, flags=0):
        self.BLOCK = Structure([BlockheaderSerializer(flags), 
                                VarsizelistSerializer(VarintSerializer("txn_count"), TxSerializer())], "block")

    def get_size(self, block):
        return (self.BLOCK.get_size([block.blockheader,
                                     block.transactions]))

    def serialize(self, block):
        return (self.BLOCK.serialize([block.blockheader,
                                      block.transactions]))
        
    def deserialize(self, data, cursor=0):
        (blockheader, transactions), new_cursor = self.BLOCK.deserialize(data, cursor)
        block = Block(blockheader, transactions)
        block.rawdata = data[cursor:new_cursor]
        return (block, new_cursor)
示例#7
0
class BlockSerializer(Serializer):
    def __init__(self, flags=0):
        self.BLOCK = Structure([
            BlockheaderSerializer(flags),
            VarsizelistSerializer(VarintSerializer("txn_count"),
                                  TxSerializer())
        ], "block")

    def get_size(self, block):
        return (self.BLOCK.get_size([block.blockheader, block.transactions]))

    def serialize(self, block):
        return (self.BLOCK.serialize([block.blockheader, block.transactions]))

    def deserialize(self, data, cursor=0):
        (blockheader,
         transactions), new_cursor = self.BLOCK.deserialize(data, cursor)
        block = Block(blockheader, transactions)
        block.rawdata = data[cursor:new_cursor]
        return (block, new_cursor)