Exemplo n.º 1
0
    def __init__(
        self,
        host: str,
        port: int,
        public_key: Optional[str] = None,
        multihash_id: Optional[str] = None,
    ):
        """
        Initialize a multiaddress.

        :param host: ip host of the address
        :param port: port number of the address
        :param public_key: hex encoded public key. Must conform to Bitcoin EC encoding standard for Secp256k1
        :param multihash_id: a multihash of the public key
        """

        self._host = host
        self._port = port

        if public_key is not None:
            try:
                VerifyingKey._from_compressed(_hex_to_bytes(public_key),
                                              curves.SECP256k1)
            except keys.MalformedPointError as e:  # pragma: no cover
                raise ValueError("Malformed public key '{}': {}".format(
                    public_key, str(e)))

            self._public_key = public_key
            self._peerid = self.compute_peerid(self._public_key)
        elif multihash_id is not None:
            try:
                multihash.decode(base58.b58decode(multihash_id))
            except Exception as e:
                raise ValueError("Malformed multihash '{}': {}".format(
                    multihash_id, str(e)))

            self._public_key = ""
            self._peerid = multihash_id
        else:
            raise ValueError(  # pragma: no cover
                "MultiAddr requires either public_key or multihash_id to be provided."
            )