2021-12-09 03:03:58 +01:00
|
|
|
import unittest
|
|
|
|
|
2019-06-21 03:02:58 +02:00
|
|
|
from lbry.testcase import CommandTestCase
|
2019-02-12 03:40:05 +01:00
|
|
|
|
|
|
|
|
|
|
|
class TransactionCommandsTestCase(CommandTestCase):
|
|
|
|
|
2022-02-02 16:57:10 +01:00
|
|
|
async def test_txo_dust_prevention(self):
|
|
|
|
address = await self.daemon.jsonrpc_address_unused(self.account.id)
|
2022-02-04 16:55:13 +01:00
|
|
|
tx = await self.account_send('9.9997758', address)
|
2022-02-02 16:57:10 +01:00
|
|
|
# dust prevention threshold not reached, small txo created
|
|
|
|
self.assertEqual(2, len(tx['outputs']))
|
2022-02-04 16:55:13 +01:00
|
|
|
self.assertEqual(tx['outputs'][1]['amount'], '0.0001002')
|
|
|
|
tx = await self.account_send('9.999706', address)
|
2022-02-02 16:57:10 +01:00
|
|
|
# dust prevention prevented dust
|
|
|
|
self.assertEqual(1, len(tx['outputs']))
|
2022-02-04 16:55:13 +01:00
|
|
|
self.assertEqual(tx['outputs'][0]['amount'], '9.999706')
|
2022-02-02 16:57:10 +01:00
|
|
|
|
2019-02-12 03:40:05 +01:00
|
|
|
async def test_transaction_show(self):
|
|
|
|
# local tx
|
2019-03-25 03:20:17 +01:00
|
|
|
result = await self.out(self.daemon.jsonrpc_account_send(
|
2021-12-20 20:46:01 +01:00
|
|
|
'5.0', await self.daemon.jsonrpc_address_unused(self.account.id), blocking=True
|
2019-02-12 03:40:05 +01:00
|
|
|
))
|
|
|
|
await self.confirm_tx(result['txid'])
|
|
|
|
tx = await self.daemon.jsonrpc_transaction_show(result['txid'])
|
|
|
|
self.assertEqual(tx.id, result['txid'])
|
|
|
|
|
|
|
|
# someone's tx
|
|
|
|
change_address = await self.blockchain.get_raw_change_address()
|
|
|
|
sendtxid = await self.blockchain.send_to_address(change_address, 10)
|
|
|
|
tx = await self.daemon.jsonrpc_transaction_show(sendtxid)
|
|
|
|
self.assertEqual(tx.id, sendtxid)
|
2019-05-05 22:57:34 +02:00
|
|
|
self.assertEqual(tx.height, -1)
|
2019-02-12 03:40:05 +01:00
|
|
|
await self.generate(1)
|
|
|
|
tx = await self.daemon.jsonrpc_transaction_show(sendtxid)
|
|
|
|
self.assertEqual(tx.height, self.ledger.headers.height)
|
|
|
|
|
|
|
|
# inexistent
|
|
|
|
result = await self.daemon.jsonrpc_transaction_show('0'*64)
|
|
|
|
self.assertFalse(result['success'])
|
|
|
|
|
|
|
|
async def test_utxo_release(self):
|
2021-12-17 20:27:30 +01:00
|
|
|
await self.send_to_address_and_wait(
|
|
|
|
await self.account.receiving.get_or_create_usable_address(), 1, 1
|
2019-02-12 03:40:05 +01:00
|
|
|
)
|
|
|
|
await self.assertBalance(self.account, '11.0')
|
|
|
|
await self.ledger.reserve_outputs(await self.account.get_utxos())
|
|
|
|
await self.assertBalance(self.account, '0.0')
|
|
|
|
await self.daemon.jsonrpc_utxo_release()
|
|
|
|
await self.assertBalance(self.account, '11.0')
|
2019-12-12 04:07:33 +01:00
|
|
|
|
|
|
|
|
|
|
|
class TestSegwit(CommandTestCase):
|
|
|
|
|
2022-01-21 17:52:51 +01:00
|
|
|
@unittest.SkipTest
|
2019-12-12 04:07:33 +01:00
|
|
|
async def test_segwit(self):
|
2019-12-12 17:00:54 +01:00
|
|
|
p2sh_address1 = await self.blockchain.get_new_address(self.blockchain.P2SH_SEGWIT_ADDRESS)
|
|
|
|
p2sh_address2 = await self.blockchain.get_new_address(self.blockchain.P2SH_SEGWIT_ADDRESS)
|
|
|
|
p2sh_address3 = await self.blockchain.get_new_address(self.blockchain.P2SH_SEGWIT_ADDRESS)
|
|
|
|
bech32_address1 = await self.blockchain.get_new_address(self.blockchain.BECH32_ADDRESS)
|
|
|
|
bech32_address2 = await self.blockchain.get_new_address(self.blockchain.BECH32_ADDRESS)
|
|
|
|
bech32_address3 = await self.blockchain.get_new_address(self.blockchain.BECH32_ADDRESS)
|
|
|
|
|
|
|
|
# fund specific addresses for later use
|
2021-12-21 21:25:48 +01:00
|
|
|
p2sh_txid1 = await self.blockchain.send_to_address(p2sh_address1, '1.0')
|
|
|
|
p2sh_txid2 = await self.blockchain.send_to_address(p2sh_address2, '1.0')
|
|
|
|
bech32_txid1 = await self.blockchain.send_to_address(bech32_address1, '1.0')
|
|
|
|
bech32_txid2 = await self.blockchain.send_to_address(bech32_address2, '1.0')
|
2019-12-12 04:07:33 +01:00
|
|
|
await self.generate(1)
|
|
|
|
|
2019-12-12 17:00:54 +01:00
|
|
|
# P2SH & BECH32 can pay to P2SH address
|
|
|
|
tx = await self.blockchain.create_raw_transaction([
|
|
|
|
{"txid": p2sh_txid1, "vout": 0},
|
|
|
|
{"txid": bech32_txid1, "vout": 0},
|
2021-11-26 17:45:40 +01:00
|
|
|
], {p2sh_address3: 1.9}
|
2019-12-12 17:00:54 +01:00
|
|
|
)
|
|
|
|
tx = await self.blockchain.sign_raw_transaction_with_wallet(tx)
|
|
|
|
p2sh_txid3 = await self.blockchain.send_raw_transaction(tx)
|
|
|
|
|
|
|
|
await self.generate(1)
|
2019-12-12 04:07:33 +01:00
|
|
|
|
2019-12-12 17:00:54 +01:00
|
|
|
# P2SH & BECH32 can pay to BECH32 address
|
2019-12-12 04:07:33 +01:00
|
|
|
tx = await self.blockchain.create_raw_transaction([
|
2019-12-12 17:00:54 +01:00
|
|
|
{"txid": p2sh_txid2, "vout": 0},
|
|
|
|
{"txid": bech32_txid2, "vout": 0},
|
2021-11-26 17:45:40 +01:00
|
|
|
], {bech32_address3: 1.9}
|
2019-12-12 04:07:33 +01:00
|
|
|
)
|
2019-12-12 17:00:54 +01:00
|
|
|
tx = await self.blockchain.sign_raw_transaction_with_wallet(tx)
|
|
|
|
bech32_txid3 = await self.blockchain.send_raw_transaction(tx)
|
|
|
|
|
|
|
|
await self.generate(1)
|
2019-12-12 04:07:33 +01:00
|
|
|
|
2019-12-12 17:00:54 +01:00
|
|
|
# P2SH & BECH32 can pay lbry wallet P2PKH
|
|
|
|
address = (await self.account.receiving.get_addresses(limit=1, only_usable=True))[0]
|
|
|
|
tx = await self.blockchain.create_raw_transaction([
|
|
|
|
{"txid": p2sh_txid3, "vout": 0},
|
|
|
|
{"txid": bech32_txid3, "vout": 0},
|
2021-11-26 17:45:40 +01:00
|
|
|
], {address: 3.5}
|
2019-12-12 17:00:54 +01:00
|
|
|
)
|
2019-12-12 04:07:33 +01:00
|
|
|
tx = await self.blockchain.sign_raw_transaction_with_wallet(tx)
|
|
|
|
txid = await self.blockchain.send_raw_transaction(tx)
|
2021-12-17 04:50:03 +01:00
|
|
|
await self.generate_and_wait(1, [txid])
|
2019-12-12 04:07:33 +01:00
|
|
|
await self.assertBalance(self.account, '13.5')
|