コード例 #1
0
 def test_invalid_address(self):
     """Test whether invalid addresses fail to decode."""
     for test in INVALID_ADDRESS:
         witver, _ = btc.bech32addr_decode("bc", test)
         self.assertIsNone(witver)
         witver, _ = btc.bech32addr_decode("tb", test)
         self.assertIsNone(witver)
コード例 #2
0
def validate_address(addr):
    try:
        assert len(addr) > 2
        if addr[:2].lower() in ['bc', 'tb']:
            # Regtest special case
            if addr[:4] == 'bcrt':
                if btc.bech32addr_decode('bcrt', addr)[1]:
                    return True, 'address validated'
                return False, 'Invalid bech32 regtest address'
            #Else, enforce testnet/mainnet per config
            if get_network() == "testnet":
                hrpreq = 'tb'
            else:
                hrpreq = 'bc'
            if btc.bech32addr_decode(hrpreq, addr)[1]:
                return True, 'address validated'
            return False, 'Invalid bech32 address'
        #Not bech32; assume b58 from here
        ver = btc.get_version_byte(addr)
    except AssertionError:
        return False, 'Checksum wrong. Typo in address?'
    except Exception:
        return False, "Invalid bitcoin address"
    if ver != get_p2pk_vbyte() and ver != get_p2sh_vbyte():
        return False, 'Wrong address version. Testnet/mainnet confused?'
    if len(btc.b58check_to_bin(addr)) != 20:
        return False, "Address has correct checksum but wrong length."
    return True, 'address validated'
コード例 #3
0
 def test_valid_address(self):
     """Test whether valid addresses decode to the correct output."""
     for (address, hexscript) in VALID_ADDRESS:
         hrp = "bc"
         witver, witprog = btc.bech32addr_decode(hrp, address)
         if witver is None:
             hrp = "tb"
             witver, witprog = btc.bech32addr_decode(hrp, address)
         self.assertIsNotNone(witver)
         scriptpubkey = segwit_scriptpubkey(witver, witprog)
         self.assertEqual(scriptpubkey, binascii.unhexlify(hexscript))
         addr = btc.bech32addr_encode(hrp, witver, witprog)
         self.assertEqual(address.lower(), addr)