def test_generate_privkey(self): # generate random private key randomKey = generate_privkey() # check length self.assertEqual(len(randomKey), 51) # check leading char '8' self.assertEqual(randomKey[0], '8') # decode and verify checksum randomKey_bin = bytes.fromhex(b58decode(randomKey).hex()) randomKey_bin_check = bitcoin.bin_dbl_sha256(randomKey_bin[0:-4])[0:4] self.assertEqual(randomKey_bin[-4:], randomKey_bin_check)
def test_pubkey_to_address(self): # generate random private key and convert to public randomPubKey = bitcoin.privkey_to_pubkey(generate_privkey()) # compute address randomPivxAddr = pubkey_to_address(randomPubKey) # check leading char 'D' self.assertEqual(randomPivxAddr[0], 'D') # decode and verify checksum randomPivxAddr_bin = bytes.fromhex(b58decode(randomPivxAddr).hex()) randomPivxAddr_bin_check = bitcoin.bin_dbl_sha256(randomPivxAddr_bin[0:-4])[0:4] self.assertEqual(randomPivxAddr_bin[-4:], randomPivxAddr_bin_check)
def onGenerateMNkey(self): printDbg("Generate MNkey pressed") reply = QMessageBox.Yes if self.ui.edt_mnPrivKey.text() != "": reply = myPopUp(self.caller, "warn", "GENERATE PRIV KEY", "Are you sure?\nThis will overwrite current private key", QMessageBox.No) if reply == QMessageBox.No: return newkey = generate_privkey(self.isTestnet()) self.ui.edt_mnPrivKey.setText(newkey)
def test_checkPivxAddr(self): # Generate Valid PIVX address pK = privkey_to_pubkey(generate_privkey()) pivxAddr = pubkey_to_address(pK) # Check valid address self.assertTrue(checkPivxAddr(pivxAddr)) # Check malformed address 1: change leading char pivxAddr2 = self.getRandomChar() + pivxAddr[1:] while pivxAddr2[0] == 'D': pivxAddr2 = self.getRandomChar() + pivxAddr[1:] self.assertFalse(checkPivxAddr(pivxAddr2)) # Check malformed address 1: add random chars pivxAddr3 = pivxAddr for _ in range(10): pivxAddr3 += self.getRandomChar() self.assertFalse(checkPivxAddr(pivxAddr3))
def test_compose_tx_locking_script(self): # check with P2PKH addresses # Generate Valid PIVX address pK = privkey_to_pubkey(generate_privkey()) pivxAddr = pubkey_to_address(pK) # compose TX script result = compose_tx_locking_script(pivxAddr) print(result) # check OP_DUP self.assertEqual(result[0], int('76', 16)) # check OP_HASH160 self.assertEqual(result[1], int('A9', 16)) pubkey_hash = bytearray.fromhex(b58check_to_hex(pivxAddr)) self.assertEqual(result[2], len(pubkey_hash)) self.assertEqual(result[3:23], pubkey_hash) # check OP_QEUALVERIFY self.assertEqual(result[23], int('88', 16)) # check OP_CHECKSIG self.assertEqual(result[24], int('AC', 16))