示例#1
0
class UnRegisterCR(Payload):
    def __init__(self, register_private_key: str):
        Payload.__init__(self, self.DEFAULT_VERSION)
        self.account = Account(register_private_key)
        self.cid = self.account.cid()
        self.signature = None
        self.gen_signature()
        self.serialize_data = None

    def gen_signature(self):
        r = b""
        r = self.serialize_unsigned(r, self.version)
        signature = keytool.ecdsa_sign(
            bytes.fromhex(self.account.private_key()), r)
        self.signature = signature

    def data(self, version: int):
        r = b""
        if self.serialize_data is not None:
            return self.serialize_data

        r = self.serialize(r, self.version)
        self.serialize_data = r
        return r

    def serialize(self, r: bytes, version: int):
        r = self.serialize_unsigned(r, self.version)
        if self.signature is not None:
            r = serialize.write_var_bytes(r, self.signature)
        return r

    def serialize_unsigned(self, r: bytes, version: int):
        r += bytes.fromhex(self.cid)

        return r

    def deserialize(self, r: bytes, version: int):
        pass
class CRInfo(Payload):
    CR_INFO_VERSION = 0x00
    CR_INFO_DID_VERSION = 0x01

    def __init__(self, private_key: str, nickname: str, url: str,
                 location: int):
        Payload.__init__(self, self.DEFAULT_VERSION)
        self.account = Account(private_key)
        self.nickname = nickname
        self.url = url
        self.location = location
        self.code = self.account.redeem_script()
        self.cid = self.account.cid()
        self.did = self.account.did()
        self.signature = None
        self.gen_signature()
        self.serialize_data = None

    def data(self, version: int):
        if self.serialize_data is not None:
            return self.serialize_data
        r = b""
        r = self.serialize(r, self.version)
        self.serialize_data = r
        return r

    def serialize(self, r: bytes, version: int):
        r = self.serialize_unsigned(r, version)

        if self.signature is not None:
            r = serialize.write_var_bytes(r, self.signature)

        return r

    def serialize_unsigned(self, r: bytes, version=0):
        r = serialize.write_var_bytes(r, bytes.fromhex(self.code))
        r += bytes.fromhex(self.cid)
        r += bytes.fromhex(self.did)
        r = serialize.write_var_bytes(r, bytes(self.nickname.encode()))
        r = serialize.write_var_bytes(r, bytes(self.url.encode()))
        r += struct.pack("<Q", self.location)

        return r

    def deserialize(self, r: bytes, version: int):
        pass

    def get_deposit_address(self):
        return self.account.deposit_address()

    def gen_signature(self):
        r = b""
        r = self.serialize_unsigned(r, self.version)
        signature = keytool.ecdsa_sign(
            bytes.fromhex(self.account.private_key()), r)
        self.signature = signature
        return signature

    def __repr__(self):
        return "CRInfo {" + "\n\t" \
               + "privateKey: {}".format(self.account.private_key()) + "\n\t" \
               + "code: {}".format(self.code) + "\n\t" \
               + "cid : {}".format(keytool.create_address(bytes.fromhex(self.cid))) + "\n\t" \
               + "did : {}".format(keytool.create_address(bytes.fromhex(self.did))) + "\n\t" \
               + "nickname: {}".format(self.nickname) + "\n\t" \
               + "url: {}".format(self.url) + "\n\t" \
               + "location: {}".format(self.location) + "\n\t" \
               + "signature: {}".format(self.signature.hex()) + "\n" \
               + "}"