move granular balances logic to account method
This commit is contained in:
parent
35541bbbb9
commit
8cf48eb5f7
2 changed files with 35 additions and 33 deletions
|
@ -14,7 +14,7 @@ from typing import Callable, Optional, List
|
||||||
from binascii import hexlify, unhexlify
|
from binascii import hexlify, unhexlify
|
||||||
from traceback import format_exc
|
from traceback import format_exc
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
from functools import wraps, partial
|
from functools import wraps
|
||||||
from google.protobuf.message import DecodeError
|
from google.protobuf.message import DecodeError
|
||||||
from torba.client.wallet import Wallet
|
from torba.client.wallet import Wallet
|
||||||
from torba.client.baseaccount import SingleKey, HierarchicalDeterministic
|
from torba.client.baseaccount import SingleKey, HierarchicalDeterministic
|
||||||
|
@ -1047,38 +1047,7 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
(decimal) amount of lbry credits in wallet
|
(decimal) amount of lbry credits in wallet
|
||||||
"""
|
"""
|
||||||
account = self.get_account_or_default(account_id)
|
account = self.get_account_or_default(account_id)
|
||||||
get_total_balance = partial(account.get_balance, confirmations=confirmations, include_claims=True)
|
return await account.get_granular_balances(confirmations=confirmations, reserved_subtotals=reserved_subtotals)
|
||||||
total = await get_total_balance()
|
|
||||||
if not reserved_subtotals:
|
|
||||||
reserved = await account.get_balance(
|
|
||||||
confirmations=confirmations, include_claims=True,
|
|
||||||
claim_type__or={'is_claim': True, 'is_support': True, 'is_update': True}
|
|
||||||
)
|
|
||||||
return {
|
|
||||||
'total': dewies_to_lbc(total),
|
|
||||||
'reserved': dewies_to_lbc(reserved),
|
|
||||||
'available': dewies_to_lbc(total - reserved),
|
|
||||||
'reserved_subtotals': None
|
|
||||||
}
|
|
||||||
claims_balance = await get_total_balance(claim_type__or={'is_claim':True, 'is_update': True})
|
|
||||||
tips_balance, supports_balance = 0, 0
|
|
||||||
for amount, spent, from_me, to_me, height in await account.get_support_summary():
|
|
||||||
if confirmations > 0 and not 0 < height <= self.ledger.headers.height - (confirmations - 1):
|
|
||||||
continue
|
|
||||||
if not spent and to_me:
|
|
||||||
tips_balance += amount if not from_me else 0
|
|
||||||
supports_balance += amount if from_me else 0
|
|
||||||
unavailable = claims_balance + supports_balance + tips_balance
|
|
||||||
return {
|
|
||||||
'total': dewies_to_lbc(total),
|
|
||||||
'available': dewies_to_lbc(total - unavailable),
|
|
||||||
'reserved': dewies_to_lbc(unavailable),
|
|
||||||
'reserved_subtotals': {
|
|
||||||
'claims': dewies_to_lbc(claims_balance),
|
|
||||||
'supports': dewies_to_lbc(supports_balance),
|
|
||||||
'tips': dewies_to_lbc(tips_balance)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@requires("wallet")
|
@requires("wallet")
|
||||||
async def jsonrpc_account_add(
|
async def jsonrpc_account_add(
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
from functools import partial
|
||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
from string import hexdigits
|
from string import hexdigits
|
||||||
|
|
||||||
import ecdsa
|
import ecdsa
|
||||||
|
from lbry.wallet.dewies import dewies_to_lbc
|
||||||
|
|
||||||
from torba.client.baseaccount import BaseAccount, HierarchicalDeterministic
|
from torba.client.baseaccount import BaseAccount, HierarchicalDeterministic
|
||||||
|
|
||||||
|
@ -75,6 +77,37 @@ class Account(BaseAccount):
|
||||||
constraints.update({'is_claim': 0, 'is_update': 0, 'is_support': 0})
|
constraints.update({'is_claim': 0, 'is_update': 0, 'is_support': 0})
|
||||||
return super().get_balance(confirmations, **constraints)
|
return super().get_balance(confirmations, **constraints)
|
||||||
|
|
||||||
|
async def get_granular_balances(self, confirmations=0, reserved_subtotals=False):
|
||||||
|
tips_balance, supports_balance, claims_balance = 0, 0, 0
|
||||||
|
get_total_balance = partial(self.get_balance, confirmations=confirmations, include_claims=True)
|
||||||
|
total = await get_total_balance()
|
||||||
|
if reserved_subtotals:
|
||||||
|
claims_balance = await get_total_balance(claim_type__or={'is_claim':True, 'is_update': True})
|
||||||
|
for amount, spent, from_me, to_me, height in await self.get_support_summary():
|
||||||
|
if confirmations > 0 and not 0 < height <= self.ledger.headers.height - (confirmations - 1):
|
||||||
|
continue
|
||||||
|
if not spent and to_me:
|
||||||
|
if from_me:
|
||||||
|
supports_balance += amount
|
||||||
|
else:
|
||||||
|
tips_balance += amount
|
||||||
|
reserved = claims_balance + supports_balance + tips_balance
|
||||||
|
else:
|
||||||
|
reserved = await self.get_balance(
|
||||||
|
confirmations=confirmations, include_claims=True,
|
||||||
|
claim_type__or={'is_claim': True, 'is_support': True, 'is_update': True}
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
'total': dewies_to_lbc(total),
|
||||||
|
'available': dewies_to_lbc(total - reserved),
|
||||||
|
'reserved': dewies_to_lbc(reserved),
|
||||||
|
'reserved_subtotals': {
|
||||||
|
'claims': dewies_to_lbc(claims_balance),
|
||||||
|
'supports': dewies_to_lbc(supports_balance),
|
||||||
|
'tips': dewies_to_lbc(tips_balance)
|
||||||
|
} if reserved_subtotals else None
|
||||||
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_private_key_from_seed(cls, ledger, seed: str, password: str):
|
def get_private_key_from_seed(cls, ledger, seed: str, password: str):
|
||||||
return super().get_private_key_from_seed(
|
return super().get_private_key_from_seed(
|
||||||
|
|
Loading…
Add table
Reference in a new issue