USD denominated max_key_fee in settings

This commit is contained in:
Jack 2016-07-25 22:46:04 -04:00
parent 49c26a76b4
commit 102436274f
2 changed files with 29 additions and 8 deletions

View file

@ -22,6 +22,10 @@ class ConnectionClosedBeforeResponseError(Exception):
pass pass
class KeyFeeAboveMaxAllowed(Exception):
pass
class UnknownNameError(Exception): class UnknownNameError(Exception):
def __init__(self, name): def __init__(self, name):
self.name = name self.name = name

View file

@ -8,7 +8,7 @@ from datetime import datetime
from twisted.internet import defer from twisted.internet import defer
from twisted.internet.task import LoopingCall from twisted.internet.task import LoopingCall
from lbrynet.core.Error import InvalidStreamInfoError, InsufficientFundsError from lbrynet.core.Error import InvalidStreamInfoError, InsufficientFundsError, KeyFeeAboveMaxAllowed
from lbrynet.core.PaymentRateManager import PaymentRateManager from lbrynet.core.PaymentRateManager import PaymentRateManager
from lbrynet.core.StreamDescriptor import download_sd_blob from lbrynet.core.StreamDescriptor import download_sd_blob
from lbrynet.core.LBRYMetadata import Metadata, LBRYFee from lbrynet.core.LBRYMetadata import Metadata, LBRYFee
@ -124,17 +124,34 @@ class GetStream(object):
def _start_download(self, downloader): def _start_download(self, downloader):
def _pay_key_fee(): def _pay_key_fee():
if self.fee is not None: if self.fee is not None:
x = self.fee.to_lbc() if isinstance(self.max_key_fee, int):
reserved_points = self.wallet.reserve_points(self.fee.address, x) fee_lbc = self.fee.to_lbc()
if reserved_points is None: if fee_lbc > self.max_key_fee:
return defer.fail(InsufficientFundsError()) return defer.fail(KeyFeeAboveMaxAllowed())
log.info("Key fee: %f --> %s" % (x, self.fee.address)) reserved_points = self.wallet.reserve_points(self.fee.address, fee_lbc)
return self.wallet.send_points_to_address(reserved_points, self.fee.address) if reserved_points is None:
return defer.fail(InsufficientFundsError())
log.info("Key fee: %f --> %s" % (fee_lbc, self.fee.address))
return self.wallet.send_points_to_address(reserved_points, self.fee.address)
else:
assert "USD" in self.max_key_fee
max_fee = LBRYFee(self.max_key_fee, {'USDBTC': self.wallet._USDBTC, 'BTCLBC': self.wallet._BTCLBC})
fee_lbc = self.fee.to_lbc()
if fee_lbc > max_fee.to_lbc():
return defer.fail(KeyFeeAboveMaxAllowed())
reserved_points = self.wallet.reserve_points(self.fee.address, fee_lbc)
if reserved_points is None:
return defer.fail(InsufficientFundsError())
log.info("Key fee: %f --> %s" % (fee_lbc, self.fee.address))
return self.wallet.send_points_to_address(reserved_points, self.fee.address)
return defer.succeed(None) return defer.succeed(None)
d = _pay_key_fee()
self.downloader = downloader self.downloader = downloader
self.download_path = os.path.join(downloader.download_directory, downloader.file_name) self.download_path = os.path.join(downloader.download_directory, downloader.file_name)
d = _pay_key_fee()
d.addCallback(lambda _: log.info("Downloading %s --> %s", self.stream_hash, self.downloader.file_name)) d.addCallback(lambda _: log.info("Downloading %s --> %s", self.stream_hash, self.downloader.file_name))
d.addCallback(lambda _: self.downloader.start()) d.addCallback(lambda _: self.downloader.start())