Sign this transaction envelope with a Hash(X) signature.

        See Stellar's documentation on `Multi-Sig
        <https://www.stellar.org/developers/guides/concepts/multi-sig.html>`_
        for more details on Hash(x) signatures.

        :param preimage: 32 byte hash or hex encoded string, the "x" value to be hashed and used as a
            signature.
        :type preimage: str, bytes

def sign_hashX(self, preimage):
        """Sign this transaction envelope with a Hash(X) signature.

        See Stellar's documentation on `Multi-Sig
        <https://www.stellar.org/developers/guides/concepts/multi-sig.html>`_
        for more details on Hash(x) signatures.

        :param preimage: 32 byte hash or hex encoded string, the "x" value to be hashed and used as a
            signature.
        :type preimage: str, bytes

        """
        # if len(preimage) > 64:
        #     raise PreimageLengthError('preimage must <= 64 bytes')
        preimage = convert_hex_to_bytes(preimage)
        sig = hashX_sign_decorated(preimage)
        sig_dict = [signature.__dict__ for signature in self.signatures]
        if sig.__dict__ in sig_dict:
            raise SignatureExistError('The preimage has already signed.')
        else:
            self.signatures.append(sig)