forked from LBRYCommunity/lbry-sdk
fixes transaction signing bug when tx had no change outputs
This commit is contained in:
parent
48c64143e3
commit
0cec80f676
3 changed files with 7 additions and 9 deletions
|
@ -2617,7 +2617,6 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
)
|
)
|
||||||
txo = tx.outputs[0]
|
txo = tx.outputs[0]
|
||||||
await txo.generate_channel_private_key()
|
await txo.generate_channel_private_key()
|
||||||
tx._reset()
|
|
||||||
|
|
||||||
await tx.sign(funding_accounts)
|
await tx.sign(funding_accounts)
|
||||||
|
|
||||||
|
@ -2774,7 +2773,6 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
new_txo.private_key = old_txo.private_key
|
new_txo.private_key = old_txo.private_key
|
||||||
|
|
||||||
new_txo.script.generate()
|
new_txo.script.generate()
|
||||||
tx._reset()
|
|
||||||
|
|
||||||
await tx.sign(funding_accounts)
|
await tx.sign(funding_accounts)
|
||||||
|
|
||||||
|
@ -3345,7 +3343,6 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
file_stream = await self.file_manager.create_stream(file_path)
|
file_stream = await self.file_manager.create_stream(file_path)
|
||||||
claim.stream.source.sd_hash = file_stream.sd_hash
|
claim.stream.source.sd_hash = file_stream.sd_hash
|
||||||
new_txo.script.generate()
|
new_txo.script.generate()
|
||||||
tx._reset()
|
|
||||||
|
|
||||||
if channel:
|
if channel:
|
||||||
new_txo.sign(channel)
|
new_txo.sign(channel)
|
||||||
|
@ -3565,7 +3562,6 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
file_stream = await self.file_manager.create_stream(file_path)
|
file_stream = await self.file_manager.create_stream(file_path)
|
||||||
new_txo.claim.stream.source.sd_hash = file_stream.sd_hash
|
new_txo.claim.stream.source.sd_hash = file_stream.sd_hash
|
||||||
new_txo.script.generate()
|
new_txo.script.generate()
|
||||||
tx._reset()
|
|
||||||
stream_hash = file_stream.stream_hash
|
stream_hash = file_stream.stream_hash
|
||||||
elif old_stream:
|
elif old_stream:
|
||||||
stream_hash = old_stream.stream_hash
|
stream_hash = old_stream.stream_hash
|
||||||
|
@ -3960,9 +3956,6 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
)
|
)
|
||||||
new_txo = tx.outputs[0]
|
new_txo = tx.outputs[0]
|
||||||
|
|
||||||
new_txo.script.generate()
|
|
||||||
tx._reset()
|
|
||||||
|
|
||||||
if channel:
|
if channel:
|
||||||
new_txo.sign(channel)
|
new_txo.sign(channel)
|
||||||
await tx.sign(funding_accounts)
|
await tx.sign(funding_accounts)
|
||||||
|
|
|
@ -850,6 +850,7 @@ class Transaction:
|
||||||
return hash_type
|
return hash_type
|
||||||
|
|
||||||
async def sign(self, funding_accounts: Iterable['Account']):
|
async def sign(self, funding_accounts: Iterable['Account']):
|
||||||
|
self._reset()
|
||||||
ledger, wallet = self.ensure_all_have_same_ledger_and_wallet(funding_accounts)
|
ledger, wallet = self.ensure_all_have_same_ledger_and_wallet(funding_accounts)
|
||||||
for i, txi in enumerate(self._inputs):
|
for i, txi in enumerate(self._inputs):
|
||||||
assert txi.script is not None
|
assert txi.script is not None
|
||||||
|
|
|
@ -1976,10 +1976,14 @@ class SupportCommands(CommandTestCase):
|
||||||
self.assertTrue(txs[1]['support_info'][0]['is_tip'])
|
self.assertTrue(txs[1]['support_info'][0]['is_tip'])
|
||||||
self.assertTrue(txs[1]['support_info'][0]['is_spent'])
|
self.assertTrue(txs[1]['support_info'][0]['is_spent'])
|
||||||
|
|
||||||
async def test_signed_supports(self):
|
async def test_signed_supports_with_no_change_txo_regression(self):
|
||||||
|
# reproduces a bug where transactions did not get properly signed
|
||||||
|
# if there was no change and just a single output
|
||||||
|
# lbrycrd returned 'the transaction was rejected by network rules.'
|
||||||
channel_id = self.get_claim_id(await self.channel_create())
|
channel_id = self.get_claim_id(await self.channel_create())
|
||||||
stream_id = self.get_claim_id(await self.stream_create())
|
stream_id = self.get_claim_id(await self.stream_create())
|
||||||
tx = await self.support_create(stream_id, '0.3', channel_id=channel_id)
|
tx = await self.support_create(stream_id, '7.967598', channel_id=channel_id)
|
||||||
|
self.assertEqual(len(tx['outputs']), 1) # must be one to reproduce bug
|
||||||
self.assertTrue(tx['outputs'][0]['is_channel_signature_valid'])
|
self.assertTrue(tx['outputs'][0]['is_channel_signature_valid'])
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue