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)
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
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
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"]
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
"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)),
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