upgrades
This commit is contained in:
parent
9589ac6d02
commit
9ff41f748e
5 changed files with 13 additions and 8 deletions
|
@ -447,8 +447,6 @@ class BaseAccount:
|
|||
if broadcast:
|
||||
await self.ledger.broadcast(tx)
|
||||
else:
|
||||
await self.ledger.release_outputs(
|
||||
[txi.txo_ref.txo for txi in tx.inputs]
|
||||
)
|
||||
await self.ledger.release_tx(tx)
|
||||
|
||||
return tx
|
||||
|
|
|
@ -7,7 +7,6 @@ from typing import Tuple, List, Union, Callable, Any, Awaitable, Iterable
|
|||
|
||||
import sqlite3
|
||||
|
||||
from torba.client.hash import TXRefImmutable
|
||||
from torba.client.basetransaction import BaseTransaction
|
||||
from torba.client.baseaccount import BaseAccount
|
||||
|
||||
|
|
|
@ -206,6 +206,9 @@ class BaseLedger(metaclass=LedgerRegistry):
|
|||
def release_outputs(self, txos):
|
||||
return self.db.release_outputs(txos)
|
||||
|
||||
def release_tx(self, tx):
|
||||
return self.release_outputs([txi.txo_ref.txo for txi in tx.inputs])
|
||||
|
||||
async def get_local_status_and_history(self, address):
|
||||
address_details = await self.db.get_address(address=address)
|
||||
history = address_details['history'] or ''
|
||||
|
|
|
@ -9,6 +9,7 @@ from torba.client.constants import COIN, NULL_HASH32
|
|||
from torba.client.bcd_data_stream import BCDataStream
|
||||
from torba.client.hash import sha256, TXRef, TXRefImmutable
|
||||
from torba.client.util import ReadOnlyList
|
||||
from torba.client.errors import InsufficientFundsError
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from torba.client import baseledger
|
||||
|
@ -441,7 +442,8 @@ class BaseTransaction:
|
|||
|
||||
@classmethod
|
||||
async def create(cls, inputs: Iterable[BaseInput], outputs: Iterable[BaseOutput],
|
||||
funding_accounts: Iterable[BaseAccount], change_account: BaseAccount):
|
||||
funding_accounts: Iterable[BaseAccount], change_account: BaseAccount,
|
||||
sign: bool = True):
|
||||
""" Find optimal set of inputs when only outputs are provided; add change
|
||||
outputs if only inputs are provided or if inputs are greater than outputs. """
|
||||
|
||||
|
@ -467,7 +469,7 @@ class BaseTransaction:
|
|||
deficit = cost - payment
|
||||
spendables = await ledger.get_spendable_utxos(deficit, funding_accounts)
|
||||
if not spendables:
|
||||
raise ValueError('Not enough funds to cover this transaction.')
|
||||
raise InsufficientFundsError('Not enough funds to cover this transaction.')
|
||||
payment += sum(s.effective_amount for s in spendables)
|
||||
tx.add_inputs(s.txi for s in spendables)
|
||||
|
||||
|
@ -500,11 +502,12 @@ class BaseTransaction:
|
|||
# less than the fee, after 5 attempts we give up and go home
|
||||
cost += cost_of_change + 1
|
||||
|
||||
if sign:
|
||||
await tx.sign(funding_accounts)
|
||||
|
||||
except Exception as e:
|
||||
log.exception('Failed to create transaction:')
|
||||
await ledger.release_outputs(tx.outputs)
|
||||
await ledger.release_tx(tx)
|
||||
raise e
|
||||
|
||||
return tx
|
||||
|
|
2
torba/client/errors.py
Normal file
2
torba/client/errors.py
Normal file
|
@ -0,0 +1,2 @@
|
|||
class InsufficientFundsError(Exception):
|
||||
pass
|
Loading…
Reference in a new issue