def test_address_generation(): '''test if addresses are properly made''' privkey = bytearray(urandom(32)) assert Kutil(network="ppc", privkey=privkey).address.startswith("P") assert isinstance(Kutil(network='ppc').address, str) assert len(Kutil(network='ppc').address) == 34
def test_key_generation(): '''test privkey/pubkey generation.''' mykey = Kutil(network="ppc") assert isinstance(mykey.privkey, str) assert isinstance(mykey.pubkey, str)
def test_sign_transaction(): network_params = net_query('tppc') provider = Explorer(network='tppc') key = Kutil(network='tppc', privkey=bytearray.fromhex('9e321f5379c2d1c4327c12227e1226a7c2e08342d88431dcbb0063e1e715a36c') ) dest_address = 'mwn75Gavp6Y1tJxca53HeCj5zzERqWagr6' unspent = provider.select_inputs(key.address, 0.63) # 0.69 output = tx_output(network='tppc', value=Decimal(0.1), n=0, script=p2pkh_script(network='tppc', address=dest_address) ) unsigned = MutableTransaction( version=1, ins=unspent['utxos'], outs=[output], locktime=Locktime(0), network=network_params, timestamp=int(time.time()), ) parent_outputs = [find_parent_outputs(provider, i) for i in unsigned.ins] solver = P2pkhSolver(key._private_key) signed = unsigned.spend(parent_outputs, [solver for i in parent_outputs]) assert isinstance(signed, Transaction)
def deck_vote_tag(deck): '''deck vote tag address''' deck_vote_tag_privkey = sha256(unhexlify(deck.asset_id) + b"vote_init").hexdigest() deck_vote_tag_address = Kutil(network=deck.network, privkey=deck_vote_tag_privkey) return deck_vote_tag_address.address
def p2th_wif(self) -> Optional[str]: '''P2TH privkey in WIF format''' if self.id: return Kutil(network=self.network, privkey=bytearray.fromhex(self.id)).wif else: return None
def test_mainnet_wif_import(): '''test importing WIF privkey''' mykey = Kutil(network='ppc', from_wif="U624wXL6iT7XZ9qeHsrtPGEiU78V1YxDfwq75Mymd61Ch56w47KE") assert mykey.address == 'PAprodbYvZqf4vjhef49aThB9rSZRxXsM6' assert mykey.pubkey == '023aaca6c4f022543f4a2920f66544a6ce89746f7fce4da35d63b5886fdac06634' assert mykey.privkey == '1b19749afd007bf6db0029e0273a46409bc160b9349031752bbc3cd913bbbdd3'
def test_key_generation_from_seed(): '''check if key generation is what is expected from seed.''' seed = "Hello PeerAssets." mykey = Kutil(from_string=seed, network="tppc") assert mykey.privkey == '680510f7f5e622347bc8d9e54e109a9192353693ef61d82d2d5bdf4bc9fd638b' assert mykey.pubkey == '037cf9e7664b5d10ce209cf9e2c7f68baa06f1950114f25677531b959edd7e670c'
def p2th_address(self) -> Optional[str]: '''P2TH address of this deck''' if self.id: return Kutil(network=self.network, privkey=bytearray.fromhex(self.id)).address else: return None
def test_network_parameter_load(): '''tests if loading of network parameteres is accurate.''' mykey = Kutil(network="ppc") assert mykey.denomination == 1000000 assert mykey.wif_prefix == b'b7' assert mykey.pubkeyhash == b'37'
def test_address_generation(): '''test if addresses are properly made''' mykey = Kutil(network="ppc") assert mykey.address.startswith("P") assert isinstance(mykey.address, str) assert len(mykey.address) == 34
def test_wif_import(): '''test improting WIF privkey''' mykey = Kutil(network="ppc", wif="7A6cFXZSZnNUzutCMcuE1hyqDPtysH2LrSA9i5sqP2BPCLrAvZM") assert mykey.address == 'PJxwxuBqjpHhhdpV6KY1pXxUSUNb6omyNW' assert mykey.pubkey == b'02a119079ef5be1032bed61cc295cdccde58bf70e0dd982399c024d1263740f398' assert mykey.privkey == b'b43d38cdfa04ecea88f7d9d7e95b15b476e4a6c3f551ae7b45344831c3098da2'
def test_wif_export(): '''test Kutil WIF export''' mykey = Kutil(network='ppc', privkey=bytearray.fromhex('1b19749afd007bf6db0029e0273a46409bc160b9349031752bbc3cd913bbbdd3') ) assert isinstance(mykey.wif, str) assert mykey.wif == 'U624wXL6iT7XZ9qeHsrtPGEiU78V1YxDfwq75Mymd61Ch56w47KE'
def deck_vote_tag(deck: Deck) -> str: '''deck vote tag address''' if deck.id is None: raise Exception("deck.id is required") deck_vote_tag_privkey = sha256(unhexlify(deck.id) + b"vote_init").hexdigest() deck_vote_tag_address = Kutil( network=deck.network, privkey=bytearray.fromhex(deck_vote_tag_privkey)) return deck_vote_tag_address.address
def vote_choice_address(self): '''calculate the addresses on which the vote is casted.''' addresses = [] vote_init_txid = unhexlify(self.vote_id) for choice in self.choices: vote_cast_privkey = sha256( vote_init_txid + bytes(list(self.choices).index(choice))).hexdigest() addresses.append( Kutil(network=self.deck.network, privkey=vote_cast_privkey).address) return addresses
def vote_choice_address(self) -> List[str]: '''calculate the addresses on which the vote is casted.''' if self.vote_id is None: raise Exception("vote_id is required") addresses = [] vote_init_txid = unhexlify(self.vote_id) for choice in self.choices: vote_cast_privkey = sha256( vote_init_txid + bytes(list(self.choices).index(choice))).hexdigest() addresses.append( Kutil(network=self.deck.network, privkey=bytearray.fromhex(vote_cast_privkey)).address) return addresses
def importprivkey(self, privkey: str, label: str) -> int: """import <privkey> with <label>""" self.load_keystore() mykey = Kutil(network=self.network, wif=privkey) if label not in self.privkeys.keys(): self.privkeys[label] = [] if mykey.privkey not in [ key['privkey'] for key in self.privkeys[label] ]: self.privkeys[label].append({ "privkey": mykey.privkey, "address": mykey.address }) if isinstance(self, RpcNode): super(RpcNode, self).importprivkey(privkey, label)
def sign_transaction(provider: Provider, unsigned: MutableTransaction, key: Kutil) -> Transaction: '''sign transaction with Kutil''' parent_outputs = [find_parent_outputs(provider, i) for i in unsigned.ins] return key.sign_transaction(parent_outputs, unsigned)
def sign_transaction(provider: Provider, unsigned_tx: Transaction, key: Kutil) -> Transaction: '''sign transaction with Kutil''' parent_output = find_parent_outputs(provider, unsigned_tx.ins[0]) return key.sign_transaction(parent_output, unsigned_tx)