diff --git a/bitcoin/base58.py b/bitcoin/base58.py index 855f8bf..ee18fcc 100644 --- a/bitcoin/base58.py +++ b/bitcoin/base58.py @@ -107,3 +107,16 @@ class CBitcoinAddress(CBase58Data): SCRIPT_ADDRESS = 5 PUBKEY_ADDRESS_TEST = 111 SCRIPT_ADDRESS_TEST = 196 + + def __new__(cls, data, nVersion=PUBKEY_ADDRESS): + self = super(CBase58Data, cls).__new__(cls, data) + self.nVersion = nVersion + return self + +class CWalletImportFormat(CBase58Data): + PREFIX = 0x80 + + def __new__(cls, data, nVersion=PREFIX): + self = super(CBase58Data, cls).__new__(cls, data) + self.nVersion = nVersion + return self diff --git a/bitcoin/tests/data/cbitcoinaddress_encode_decode.json b/bitcoin/tests/data/cbitcoinaddress_encode_decode.json new file mode 100644 index 0000000..d1494e1 --- /dev/null +++ b/bitcoin/tests/data/cbitcoinaddress_encode_decode.json @@ -0,0 +1,6 @@ +[ +["06f1b66ffe49df7fce684df16c62f59dc9adbd3f", "1dice8EMZmqKvrGE4Qc9bUFf9PX3xaYDp"], +["0568015a9facccfd09d70d409b6fc1a5546cecc6", "1VayNert3x1KzbpzMGt2qdqrAThiRovi8"], +["06f1b670791f9256bffc898f474271c22f4bb949", "1dice9wcMu5hLF4g81u8nioL5mmSHTApw"], +["74845c644e2bb37137e7b02f1a86a07480431f02", "1Bd5wrFxHYRkk4UCFttcPNMYzqJnQKfXUE"] +] diff --git a/bitcoin/tests/data/cwalletimportformat_encode_decode.json b/bitcoin/tests/data/cwalletimportformat_encode_decode.json new file mode 100644 index 0000000..51e39d9 --- /dev/null +++ b/bitcoin/tests/data/cwalletimportformat_encode_decode.json @@ -0,0 +1,6 @@ +[ +["0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D", "5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ"], +["C7AF75A477B3F567F677A42436722F4B1786FA8AAE717359C28C9B81A2C54BAE", "5KLEH1H1a66irbsHVsoShwbwLN8dScrmJBwqydLti73cLqtwbFx"], +["26C00F94DA8B34D24BA661DCA8C037385E7FDD1C129A006D9DA58AA9B3AD6BF0", "5J7MQQQBzj9aLUvHcpHdpsutiWHufkPAwxp2rVwnum6ctjDxBkG"], +["4D776992615EC82044E6C360CDC453B647650077FECCEFA7D6BFF3AD2DB07853", "5JQQMiybyovkWWp1WRAdGJ5XKY33LqYT6uGxRK4aroRBvEMXmbc"] +] \ No newline at end of file diff --git a/bitcoin/tests/test_base58.py b/bitcoin/tests/test_base58.py index 2acf72d..0ab7d22 100644 --- a/bitcoin/tests/test_base58.py +++ b/bitcoin/tests/test_base58.py @@ -32,4 +32,28 @@ def test_invalid_base58_exception(self): with self.assertRaises(InvalidBase58Error): decode('#') - # FIXME: need to test CBitcoinAddress +class Test_CBitcoinAddress(unittest.TestCase): + def test_encode_decode(self): + for exp_bin, exp_addr in load_test_vector('cbitcoinaddress_encode_decode.json'): + exp_bin = unhexlify(exp_bin.encode('utf8')) + + act_addr = CBitcoinAddress(exp_bin) + act_bin = CBitcoinAddress.from_str(exp_addr) + + self.assertEqual(str(act_addr), exp_addr) + self.assertEqual(bytes.__str__(act_bin), exp_bin) + +# WARNING: Never import the private keys contained in +# data/cwalletimportformat_encode_decode.json into a wallet, some wallets may use them as a change address. +# Many people are able to see these private keys and it is likely they are being watched for deposits. + +class Test_CWalletImportFormat(unittest.TestCase): + def test_encode_decode(self): + for exp_bin, exp_addr in load_test_vector('cwalletimportformat_encode_decode.json'): + exp_bin = unhexlify(exp_bin.encode('utf8')) + + act_addr = CWalletImportFormat(exp_bin) + act_bin = CWalletImportFormat.from_str(exp_addr) + + self.assertEqual(str(act_addr), exp_addr) + self.assertEqual(bytes.__str__(act_bin), exp_bin) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..1b79bae --- /dev/null +++ b/setup.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from distutils.core import setup + +setup(name='python-bitcoinlib', + version='0.1', + description='python-bitcoinlib', + url='https://github.com/jgarzik/python-bitcoinlib/', + packages=['bitcoin'], + )