示例#1
0
    def path(self):
        """
        Get Bytom wallet derivation path.

        :return: str -- Bytom derivation path.

        >>> from swap.providers.bytom.wallet import Wallet
        >>> wallet = Wallet(network="mainnet", change=True, address=3)
        >>> wallet.from_mnemonic("indicate warm sock mistake code spot acid ribbon sing over taxi toast")
        >>> wallet.path()
        "m/44/153/1/1/3"
        """

        if self._xpublic_key is None:
            return None
        if self.bytom is not None:
            return self.bytom.path()
        else:
            if self._path:
                return self._path
            elif self._indexes:
                return indexes_to_path(indexes=self._indexes)
            else:
                return "m/44/153/%d/%d/%d" % \
                       (self._account, self._change, self.__address)
示例#2
0
    def unsigned_datas(self, detail: bool = False) -> List[dict]:
        """
        Get Vapor transaction unsigned datas(messages) with instruction.

        :param detail: Vapor unsigned datas to see detail, defaults to False.
        :type detail: bool

        :returns: list -- Vapor transaction unsigned datas.

        >>> from swap.providers.vapor.htlc import HTLC
        >>> from swap.providers.vapor.transaction import FundTransaction
        >>> htlc: HTLC = HTLC(network="mainnet")
        >>> htlc.build_htlc(secret_hash="3a26da82ead15a80533a02696656b14b5dbfd84eb14790f2e1be5e9e45820eeb", recipient_public_key="3e0a377ae4afa031d4551599d9bb7d5b27f4736d77f78cac4d476f0ffba5ae3e", sender_public_key="fe6b3fd4458291b19605d92837ae1060cc0237e68022b2eb9faf01a118226212", endblock=120723497)
        >>> fund_transaction: FundTransaction = FundTransaction(network="mainnet")
        >>> fund_transaction.build_transaction(address="vp1qk9vj4jaezlcnjdckds4fkm8fwv5kawmqwpnpvs", htlc=htlc, amount=0.1, asset="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", unit="BTM")
        >>> fund_transaction.unsigned_datas()
        [{'datas': ['d7107257ef5fbfb04fc4747d6887f230a30676ecd6703a58015878b54f1f7b4f'], 'public_key': 'fe6b3fd4458291b19605d92837ae1060cc0237e68022b2eb9faf01a118226212', 'network': 'mainnet', 'path': 'm/44/153/1/0/1'}]
        """

        # Check transaction
        if self._transaction is None:
            raise ValueError("Transaction is none, build transaction first.")

        unsigned_datas: List[dict] = []
        for signing_instruction in self._transaction["signing_instructions"]:
            unsigned_data = dict(datas=signing_instruction["sign_data"])
            if "pubkey" in signing_instruction and signing_instruction["pubkey"]:
                unsigned_data.setdefault("public_key", signing_instruction["pubkey"])
                if detail:
                    program = get_program(public_key=signing_instruction["pubkey"])
                    address = get_address(program=program, network=self._network)
                    unsigned_data.setdefault("program", program)
                    unsigned_data.setdefault("address", address)
                else:
                    unsigned_data.setdefault("network", self._network)
            else:
                if detail:
                    unsigned_data.setdefault("public_key", None)
                    unsigned_data.setdefault("program", None)
                    unsigned_data.setdefault("address", None)
                else:
                    unsigned_data.setdefault("network", self._network)
            if "derivation_path" in signing_instruction and signing_instruction["derivation_path"]:
                path = indexes_to_path(indexes=signing_instruction["derivation_path"])
                if detail:
                    unsigned_data.setdefault("indexes", signing_instruction["derivation_path"])
                unsigned_data.setdefault("path", path)
            else:
                if detail:
                    unsigned_data.setdefault("indexes", None)
                unsigned_data.setdefault("path", None)
            # Append unsigned datas
            unsigned_datas.append(unsigned_data)

        return unsigned_datas
示例#3
0
 def unsigned(self, detail=False):
     unsigned_datas = list()
     if self.transaction is None:
         raise ValueError("transaction is none, build transaction first.")
     for signing_instruction in self.transaction["signing_instructions"]:
         unsigned_data = dict(datas=signing_instruction["sign_data"])
         if "pubkey" in signing_instruction and signing_instruction[
                 "pubkey"]:
             unsigned_data.setdefault("public_key",
                                      signing_instruction["pubkey"])
             if detail:
                 program = get_program(
                     public_key=signing_instruction["pubkey"])
                 address = get_address(program=program,
                                       network=self.network)
                 unsigned_data.setdefault("program", program)
                 unsigned_data.setdefault("address", address)
             else:
                 unsigned_data.setdefault("network", self.network)
         else:
             if detail:
                 unsigned_data.setdefault("public_key", None)
                 unsigned_data.setdefault("program", None)
                 unsigned_data.setdefault("address", None)
             else:
                 unsigned_data.setdefault("network", self.network)
         if "derivation_path" in signing_instruction and signing_instruction[
                 "derivation_path"]:
             path = indexes_to_path(
                 indexes=signing_instruction["derivation_path"])
             if detail:
                 unsigned_data.setdefault(
                     "indexes", signing_instruction["derivation_path"])
             unsigned_data.setdefault("path", path)
         else:
             if detail:
                 unsigned_data.setdefault("indexes", None)
             unsigned_data.setdefault("path", None)
         # Append unsigned datas
         unsigned_datas.append(unsigned_data)
     # Returning
     return unsigned_datas
示例#4
0
def test_wallet_tools():

    assert get_xpublic_key(
        xprivate_key=_["wallet"]["xprivate_key"]) == _["wallet"]["xpublic_key"]
    assert get_expand_xprivate_key(xprivate_key=_["wallet"]["xprivate_key"]
                                   ) == _["wallet"]["expand_xprivate_key"]

    assert indexes_to_path(
        indexes=_["wallet"]["indexes"]) == _["wallet"]["path"]
    assert path_to_indexes(path=_["wallet"]["path"]) == _["wallet"]["indexes"]

    assert get_child_xprivate_key(xprivate_key=_["wallet"]["xprivate_key"]
                                  ) == _["wallet"]["xprivate_key"]
    assert get_child_xprivate_key(
        xprivate_key=_["wallet"]["xprivate_key"],
        indexes=_["wallet"]["indexes"]) == _["wallet"]["child_xprivate_key"]
    assert get_child_xprivate_key(
        xprivate_key=_["wallet"]["xprivate_key"],
        path=_["wallet"]["path"]) == _["wallet"]["child_xprivate_key"]

    assert get_child_xpublic_key(
        xpublic_key=_["wallet"]["xpublic_key"]) == _["wallet"]["xpublic_key"]
    assert get_child_xpublic_key(
        xpublic_key=_["wallet"]["xpublic_key"],
        indexes=_["wallet"]["indexes"]) == _["wallet"]["child_xpublic_key"]
    assert get_child_xpublic_key(
        xpublic_key=_["wallet"]["xpublic_key"],
        path=_["wallet"]["path"]) == _["wallet"]["child_xpublic_key"]

    assert get_private_key(xprivate_key=_["wallet"]
                           ["xprivate_key"]) == _["wallet"]["xprivate_key"]
    assert get_private_key(
        xprivate_key=_["wallet"]["xprivate_key"],
        indexes=_["wallet"]["indexes"]) == _["wallet"]["child_xprivate_key"]
    assert get_private_key(
        xprivate_key=_["wallet"]["xprivate_key"],
        path=_["wallet"]["path"]) == _["wallet"]["child_xprivate_key"]

    assert get_public_key(xpublic_key=_["wallet"]
                          ["xpublic_key"]) == _["wallet"]["xpublic_key"][:64]
    assert get_public_key(
        xpublic_key=_["wallet"]["xpublic_key"],
        indexes=_["wallet"]["indexes"]) == _["wallet"]["public_key"]
    assert get_public_key(
        xpublic_key=_["wallet"]["xpublic_key"],
        path=_["wallet"]["path"]) == _["wallet"]["public_key"]

    assert get_program(
        public_key=_["wallet"]["public_key"]) == _["wallet"]["program"]

    assert get_address(program=_["wallet"]["program"],
                       network="mainnet",
                       vapor=False) == _["wallet"]["address"]["mainnet"]
    assert get_address(program=_["wallet"]["program"],
                       network="solonet",
                       vapor=False) == _["wallet"]["address"]["solonet"]
    assert get_address(program=_["wallet"]["program"],
                       network="testnet",
                       vapor=False) == _["wallet"]["address"]["testnet"]

    assert get_address(program=_["wallet"]["program"],
                       network="mainnet",
                       vapor=True) == _["wallet"]["vapor_address"]["mainnet"]
    assert get_address(program=_["wallet"]["program"],
                       network="solonet",
                       vapor=True) == _["wallet"]["vapor_address"]["solonet"]
    assert get_address(program=_["wallet"]["program"],
                       network="testnet",
                       vapor=True) == _["wallet"]["vapor_address"]["testnet"]
示例#5
0
    def unsigned_datas(self, detail=False):
        """
        Get Bytom transaction unsigned datas with instruction.

        :param detail: Bytom unsigned datas to see detail, defaults to False.
        :type detail: bool
        :returns: list -- Bytom transaction unsigned datas.

        >>> from swap.providers.bytom.htlc import HTLC
        >>> from swap.providers.bytom.transaction import FundTransaction
        >>> from swap.providers.bytom.wallet import Wallet
        >>> htlc = HTLC(network="testnet").init("821124b554d13f247b1e5d10b84e44fb1296f18f38bbaa1bea34a12c843e0158", "3e0a377ae4afa031d4551599d9bb7d5b27f4736d77f78cac4d476f0ffba5ae3e", "91ff7f525ff40874c4f47f0cab42e46e3bf53adad59adef9558ad1b6448f22e2", 1000)
        >>> sender_wallet = Wallet(network="testnet").from_mnemonic("indicate warm sock mistake code spot acid ribbon sing over taxi toast")
        >>> fund_transaction = FundTransaction(network="testnet")
        >>> fund_transaction.build_transaction(sender_wallet, htlc, 10000)
        >>> fund_transaction.unsigned_datas()
        [{'datas': ['38601bf7ce08dab921916f2c723acca0451d8904649bbec16c2076f1455dd1a2'], 'public_key': '91ff7f525ff40874c4f47f0cab42e46e3bf53adad59adef9558ad1b6448f22e2', 'network': 'mainnet', 'path': 'm/44/153/1/0/1'}]
        """

        # Checking transaction
        if self.transaction is None:
            raise ValueError("transaction is none, build transaction first.")

        unsigned_datas = []
        for signing_instruction in self.transaction["signing_instructions"]:
            unsigned_data = dict(datas=signing_instruction["sign_data"])
            if "pubkey" in signing_instruction and signing_instruction[
                    "pubkey"]:
                unsigned_data.setdefault("public_key",
                                         signing_instruction["pubkey"])
                if detail:
                    program = get_program(
                        public_key=signing_instruction["pubkey"])
                    address = get_address(program=program,
                                          network=self.network)
                    unsigned_data.setdefault("program", program)
                    unsigned_data.setdefault("address", address)
                else:
                    unsigned_data.setdefault("network", self.network)
            else:
                if detail:
                    unsigned_data.setdefault("public_key", None)
                    unsigned_data.setdefault("program", None)
                    unsigned_data.setdefault("address", None)
                else:
                    unsigned_data.setdefault("network", self.network)
            if "derivation_path" in signing_instruction and signing_instruction[
                    "derivation_path"]:
                path = indexes_to_path(
                    indexes=signing_instruction["derivation_path"])
                if detail:
                    unsigned_data.setdefault(
                        "indexes", signing_instruction["derivation_path"])
                unsigned_data.setdefault("path", path)
            else:
                if detail:
                    unsigned_data.setdefault("indexes", None)
                unsigned_data.setdefault("path", None)
            # Append unsigned datas
            unsigned_datas.append(unsigned_data)
        # Returning
        return unsigned_datas
示例#6
0
                    "781190835138c2d1a96d0e654b625a4c019cbc64f71100be7ad1b8d4ed"

XPUBLIC_KEY: str = "38a1bfcb82358bc9657c725d5d708c9d0ce115474466520e88fca233be2bc7e3797e1e7" \
                   "81190835138c2d1a96d0e654b625a4c019cbc64f71100be7ad1b8d4ed"

INDEXES: List[str] = [
    "2c000000", "99000000", "01000000", "00000000", "01000000"
]

PATH: str = "m/44/153/1/0/1"

print("Get XPublic Key:", get_xpublic_key(xprivate_key=XPRIVATE_KEY))
print("Get Expand XPrivate Key:",
      get_expand_xprivate_key(xprivate_key=XPRIVATE_KEY))

print("Indexes To Path:", indexes_to_path(indexes=INDEXES))
print("Path To Indexes:", path_to_indexes(path=PATH))

print("Get Child XPrivate Key:",
      get_child_xprivate_key(xprivate_key=XPRIVATE_KEY))
print("Get Child XPublic Key:", get_child_xpublic_key(xpublic_key=XPUBLIC_KEY))

print("Get Private Key:", get_private_key(xprivate_key=XPRIVATE_KEY))
print("Get Public Key:", get_public_key(xpublic_key=XPUBLIC_KEY))

print("Get Program:",
      get_program(public_key=get_public_key(xpublic_key=XPUBLIC_KEY)))
print(
    "Get Address:",
    get_address(program=get_program(public_key=get_public_key(
        xpublic_key=XPUBLIC_KEY)),
示例#7
0
    def unsigned_datas(self, detail: bool = False) -> List[dict]:
        """
        Get Bytom transaction unsigned datas(messages) with instruction.

        :param detail: Bytom unsigned datas to see detail, defaults to False.
        :type detail: bool

        :returns: list -- Bytom transaction unsigned datas.

        >>> from swap.providers.bytom.htlc import HTLC
        >>> from swap.providers.bytom.transaction import FundTransaction
        >>> htlc: HTLC = HTLC(network="mainnet")
        >>> htlc.build_htlc(secret_hash="3a26da82ead15a80533a02696656b14b5dbfd84eb14790f2e1be5e9e45820eeb", recipient_public_key="3e0a377ae4afa031d4551599d9bb7d5b27f4736d77f78cac4d476f0ffba5ae3e", sender_public_key="fe6b3fd4458291b19605d92837ae1060cc0237e68022b2eb9faf01a118226212", endblock=679208)
        >>> fund_transaction: FundTransaction = FundTransaction(network="mainnet")
        >>> fund_transaction.build_transaction(address="bm1qk9vj4jaezlcnjdckds4fkm8fwv5kawmq9qrufx", htlc=htlc, amount=0.1, asset="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", unit="BTM")
        >>> fund_transaction.unsigned_datas()
        [{"datas": ["f42a2b6e15585b88da8b34237c7a6fd83af12ee6971813d66cf794a63ebcc16f"], "public_key": "fe6b3fd4458291b19605d92837ae1060cc0237e68022b2eb9faf01a118226212", "network": "mainnet", "path": "m/44/153/1/0/1"}]
        """

        # Check transaction
        if self._transaction is None:
            raise ValueError("Transaction is none, build transaction first.")

        unsigned_datas: List[dict] = []
        for signing_instruction in self._transaction["signing_instructions"]:
            unsigned_data = dict(datas=signing_instruction["sign_data"])
            if "pubkey" in signing_instruction and signing_instruction[
                    "pubkey"]:
                unsigned_data.setdefault("public_key",
                                         signing_instruction["pubkey"])
                if detail:
                    program = get_program(
                        public_key=signing_instruction["pubkey"])
                    address = get_address(program=program,
                                          network=self._network)
                    unsigned_data.setdefault("program", program)
                    unsigned_data.setdefault("address", address)
                else:
                    unsigned_data.setdefault("network", self._network)
            else:
                if detail:
                    unsigned_data.setdefault("public_key", None)
                    unsigned_data.setdefault("program", None)
                    unsigned_data.setdefault("address", None)
                else:
                    unsigned_data.setdefault("network", self._network)
            if "derivation_path" in signing_instruction and signing_instruction[
                    "derivation_path"]:
                path = indexes_to_path(
                    indexes=signing_instruction["derivation_path"])
                if detail:
                    unsigned_data.setdefault(
                        "indexes", signing_instruction["derivation_path"])
                unsigned_data.setdefault("path", path)
            else:
                if detail:
                    unsigned_data.setdefault("indexes", None)
                unsigned_data.setdefault("path", None)
            # Append unsigned datas
            unsigned_datas.append(unsigned_data)

        return unsigned_datas