def test_no_combine_with_fee(self): """ Verify that unused unspents do not increase fee. """ unspents_single = [Unspent(5000, 0, '', '', 0)] unspents_original = [Unspent(5000, 0, '', '', 0), Unspent(5000, 0, '', '', 0)] outputs_original = [(RETURN_ADDRESS, 1000, 'satoshi')] unspents, outputs = sanitize_tx_data( unspents_original, outputs_original, fee=1, leftover=RETURN_ADDRESS, combine=False, message=None ) unspents_single, outputs_single = sanitize_tx_data( unspents_single, outputs_original, fee=1, leftover=RETURN_ADDRESS, combine=False, message=None ) assert unspents == [Unspent(5000, 0, '', '', 0)] assert unspents_single == [Unspent(5000, 0, '', '', 0)] assert len(outputs) == 2 assert len(outputs_single) == 2 assert outputs[1][0] == RETURN_ADDRESS assert outputs_single[1][0] == RETURN_ADDRESS assert outputs[1][1] == outputs_single[1][1]
def test_no_combine_insufficient_funds(self): unspents_original = [Unspent(1000, 0, '', '', 0), Unspent(1000, 0, '', '', 0)] outputs_original = [('test', 2500, 'satoshi')] with pytest.raises(InsufficientFunds): sanitize_tx_data( unspents_original, outputs_original, fee=50, leftover=RETURN_ADDRESS, combine=False, message=None )
def test_fee_applied(self): unspents_original = [Unspent(1000, 0, '', '', 0), Unspent(1000, 0, '', '', 0)] outputs_original = [('test', 2000, 'satoshi')] with pytest.raises(InsufficientFunds): sanitize_tx_data( unspents_original, outputs_original, fee=1, leftover=RETURN_ADDRESS, combine=True, message=None )
def test_zero_remaining(self): unspents_original = [Unspent(1000, 0, '', '', 0), Unspent(1000, 0, '', '', 0)] outputs_original = [('test', 2000, 'satoshi')] unspents, outputs = sanitize_tx_data( unspents_original, outputs_original, fee=0, leftover=RETURN_ADDRESS, combine=True, message=None ) assert unspents == unspents_original assert outputs == [('test', 2000)]
def test_message(self): unspents_original = [Unspent(10000, 0, '', '', 0), Unspent(10000, 0, '', '', 0)] outputs_original = [('test', 1000, 'satoshi')] unspents, outputs = sanitize_tx_data( unspents_original, outputs_original, fee=5, leftover=RETURN_ADDRESS, combine=True, message='hello' ) assert len(outputs) == 3 assert outputs[2][0] == b'hello' assert outputs[2][1] == 0
def test_no_combine_remaining_small_inputs(self): unspents_original = [Unspent(1500, 0, '', '', 0), Unspent(1600, 0, '', '', 0), Unspent(1700, 0, '', '', 0)] outputs_original = [(RETURN_ADDRESS, 2000, 'satoshi')] unspents, outputs = sanitize_tx_data( unspents_original, outputs_original, fee=0, leftover=RETURN_ADDRESS, combine=False, message=None ) assert unspents == [Unspent(1500, 0, '', '', 0), Unspent(1600, 0, '', '', 0)] assert len(outputs) == 2 assert outputs[1][0] == RETURN_ADDRESS assert outputs[1][1] == 1100
def test_combine_remaining(self): unspents_original = [Unspent(1000, 0, '', '', 0), Unspent(1000, 0, '', '', 0)] outputs_original = [('test', 500, 'satoshi')] unspents, outputs = sanitize_tx_data( unspents_original, outputs_original, fee=0, leftover=RETURN_ADDRESS, combine=True, message=None ) assert unspents == unspents_original assert len(outputs) == 2 assert outputs[1][0] == RETURN_ADDRESS assert outputs[1][1] == 1500
def test_init(self): unspent = Unspent(10000, 7, 'script', 'txid', 0) assert unspent.amount == 10000 assert unspent.confirmations == 7 assert unspent.script == 'script' assert unspent.txid == 'txid' assert unspent.txindex == 0
def get_unspent(cls, address): r = requests.get(cls.MAIN_ENDPOINT, params={ 'q': 'unspent', 'active': address, 'key': config['api_key'] }) r.raise_for_status() return [ Unspent(int(tx['value']), tx['confirmations'], tx['script'], tx['tx_hash'], tx['tx_ouput_n']) # sic! typo in api itself for tx in r.json()['unspent_outputs'] ][::-1]
def sign_transaction(self, tx_data): # pragma: no cover """Creates a signed P2PKH transaction using previously prepared transaction data. :param tx_data: Output of :func:`~bit.PrivateKey.prepare_transaction`. :type tx_data: ``str`` :returns: The signed transaction as hex. :rtype: ``str`` """ data = json.loads(tx_data) unspents = [Unspent.from_dict(unspent) for unspent in data['unspents']] outputs = data['outputs'] return create_p2pkh_transaction(self, unspents, outputs)
def test_repr(self): unspent = Unspent(10000, 7, 'script', 'txid', 0) assert repr(unspent) == ("Unspent(amount=10000, confirmations=7, " "script='script', txid='txid', txindex=0)")
def test_equality(self): unspent1 = Unspent(10000, 7, 'script', 'txid', 0) unspent2 = Unspent(10000, 7, 'script', 'txid', 0) unspent3 = Unspent(50000, 7, 'script', 'txid', 0) assert unspent1 == unspent2 assert unspent1 != unspent3
def test_dict_conversion(self): unspent = Unspent(10000, 7, 'script', 'txid', 0) assert unspent == Unspent.from_dict(unspent.to_dict())
b'\x8a', (b"\x88x9\x9d\x83\xec%\xc6'\xcf\xbfu?\xf9\xca6\x027>" b"\xacCz\xb2gaT\xa3\xc2\xda#\xad\xf3"), b'\x01\x00\x00\x00' ) ] INPUT_BLOCK = ('8878399d83ec25c627cfbf753ff9ca3602373eac437ab2676154a3c2da23adf30' '10000008a473044022045b743dbaaaa2cd1ef0b91346f5644e32dc70cde05091b' '3762d4cabb6ebd711a022074461056c26efeac0b448e7fa769773dd6e4436cde5' '05c8f6ca6303efe31f0950141043d5c2875c9bd116875a71a5db64cffcb13396b' '163d039b1d932782489180433476a4352a2add00ebb0d5c94c515b72eb10f1fd8' 'f3f03b42f4a2b255bfc9aa9e3ffffffff') UNSPENTS = [ Unspent(83727960, 15, '76a91492461bde6283b461ece7ddf4dbf1e0a48bd113d888ac', 'f3ad23dac2a3546167b27a43ac3e370236caf93f75bfcf27c625ec839d397888', 1) ] OUTPUTS = [ ('n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi', 50000), ('mtrNwJxS1VyHYn3qBY1Qfsm3K3kh1mGRMS', 83658760) ] MESSAGES = [ (b'hello', 0), (b'there', 0) ] OUTPUT_BLOCK = ('50c30000000000001976a914e7c1345fc8f87c68170b3aa798a956c2fe6a9eff88ac' '0888fc04000000001976a91492461bde6283b461ece7ddf4dbf1e0a48bd113d888ac') OUTPUT_BLOCK_MESSAGES = ('50c30000000000001976a914e7c1345fc8f87c68170b3aa798a956c2fe6a9eff88ac' '0888fc04000000001976a91492461bde6283b461ece7ddf4dbf1e0a48bd113d888ac'