class TestAddInputs(unittest.TestCase): def setUp(self): self.api = BtcTxStore(dryrun=True, testnet=True) # TODO test signing def test_add_inputs_withchange(self): txouts = fixtures["add_inputs"]["withchange"]["txouts"] wifs = fixtures["add_inputs"]["withchange"]["wifs"] change_address = fixtures["add_inputs"]["withchange"]["change_address"] expected = fixtures["add_inputs"]["withchange"]["expected"] rawtx = self.api.create_tx(txouts=txouts) result = self.api.add_inputs(rawtx, wifs, change_address, dont_sign=True) self.assertEqual(expected, result) def test_add_inputs_nochange(self): txouts = fixtures["add_inputs"]["nochange"]["txouts"] wifs = fixtures["add_inputs"]["nochange"]["wifs"] expected = fixtures["add_inputs"]["nochange"]["expected"] rawtx = self.api.create_tx(txouts=txouts) result = self.api.add_inputs(rawtx, wifs, dont_sign=True) self.assertEqual(expected, result)
class TestIO(unittest.TestCase): def setUp(self): self.api = BtcTxStore(dryrun=True, testnet=True) def test_readwrite_nulldata(self): rawtx = self.api.create_tx() rawtx = self.api.add_nulldata(rawtx, "f483") data = self.api.get_nulldata(rawtx) self.assertEqual(data, "f483") def test_readwrite_hash160data(self): rawtx = self.api.create_tx() rawtx = self.api.add_hash160data(rawtx, 10 * "f483") data = self.api.get_hash160data(rawtx, 0) self.assertEqual(data, 10 * "f483") def test_readwrite_data_blob(self): rawtx = self.api.create_tx() data_in = "f483" * 30 + "beef" * 30 rawtx = self.api.add_data_blob(rawtx, data_in) data_out = self.api.get_data_blob(rawtx) self.assertEqual(data_in, data_out) def test_readwrite_broadcast_message(self): message = u"Ünicode test massage" sender_wif = fixtures["wallet"]["wif"] sender_address = fixtures["wallet"]["address"] sender_hash160hex = fixtures["wallet"]["hash160hex"] # create broadcast message tx rawtx = self.api.create_tx() rawtx = self.api.add_broadcast_message(rawtx, message, sender_wif) # check that sender address is aligned so its visible in history hash160hex = self.api.get_hash160data(rawtx, 3) self.assertEqual(hash160hex, sender_hash160hex) # get broadcast message from tx result = self.api.get_broadcast_message(rawtx) self.assertEqual(result["address"], sender_address) self.assertEqual(result["message"], message) # check signature is valid hex_message = binascii.hexlify(result["message"].encode('utf-8')) valid_signature = self.api.verify_signature(result["address"], result["signature"], hex_message) self.assertTrue(valid_signature) def test_only_one_nulldata_output(self): def callback(): rawtx = self.api.create_tx() rawtx = self.api.add_nulldata(rawtx, "f483") self.api.add_nulldata(rawtx, "f483") # writing second fails self.assertRaises(exceptions.ExistingNulldataOutput, callback)
class TestCreateTx(unittest.TestCase): def setUp(self): self.api = BtcTxStore(dryrun=True, testnet=True) def test_create_tx(self): lock_time = 0 txins = fixtures["create_tx"]["txins"] txouts = fixtures["create_tx"]["txouts"] expected = fixtures["create_tx"]["expected"] result = self.api.create_tx(txins, txouts, lock_time) self.assertEqual(result, expected)
class TestSignTx(unittest.TestCase): def setUp(self): self.api = BtcTxStore(dryrun=True, testnet=True) def test_sign_tx(self): txins = fixtures["sign_tx"]["txins"] txouts = fixtures["sign_tx"]["txouts"] wifs = fixtures["sign_tx"]["wifs"] expected = fixtures["sign_tx"]["expected"] rawtx = self.api.create_tx(txins, txouts) rawtx = self.api.add_nulldata(rawtx, "f483") result = self.api.sign_tx(rawtx, wifs) self.assertEqual(result, expected)