lbry-sdk/lbrynet/wallet/ledger.py

109 lines
4 KiB
Python
Raw Normal View History

2018-10-15 23:16:43 +02:00
import asyncio
2018-07-10 06:30:13 +02:00
import logging
2018-06-12 17:53:29 +02:00
from binascii import unhexlify
2019-03-31 00:40:01 +01:00
from typing import Optional
2018-06-12 17:53:29 +02:00
2018-11-09 20:02:03 +01:00
from torba.client.baseledger import BaseLedger
2019-03-31 00:40:01 +01:00
from lbrynet.schema.page import Page
from lbrynet.wallet.dewies import dewies_to_lbc
from lbrynet.wallet.resolve import Resolver
2019-03-31 23:40:38 +02:00
from lbrynet.wallet.account import Account
from lbrynet.wallet.network import Network
from lbrynet.wallet.database import WalletDatabase
2019-03-31 00:40:01 +01:00
from lbrynet.wallet.transaction import Transaction, Output
from lbrynet.wallet.header import Headers, UnvalidatedHeaders
2018-07-10 06:30:13 +02:00
log = logging.getLogger(__name__)
2018-06-14 06:53:38 +02:00
class MainNetLedger(BaseLedger):
2018-06-12 17:53:29 +02:00
name = 'LBRY Credits'
symbol = 'LBC'
2018-06-14 06:53:38 +02:00
network_name = 'mainnet'
2018-06-12 17:53:29 +02:00
2018-10-15 23:16:43 +02:00
headers: Headers
2018-07-05 04:16:02 +02:00
account_class = Account
2018-06-12 17:53:29 +02:00
database_class = WalletDatabase
headers_class = Headers
network_class = Network
transaction_class = Transaction
2019-03-24 21:55:04 +01:00
db: WalletDatabase
2018-10-15 23:16:43 +02:00
secret_prefix = bytes((0x1c,))
pubkey_address_prefix = bytes((0x55,))
script_address_prefix = bytes((0x7a,))
2018-07-01 23:21:18 +02:00
extended_public_key_prefix = unhexlify('0488b21e')
extended_private_key_prefix = unhexlify('0488ade4')
2018-06-14 06:53:38 +02:00
max_target = 0x0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
genesis_hash = '9c89283ba0f3227f6c03b70216b9f665f0118d5e0fa729cedf4fb34d6a34f463'
genesis_bits = 0x1f00ffff
target_timespan = 150
2018-06-12 17:53:29 +02:00
default_fee_per_byte = 50
default_fee_per_name_char = 200000
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
2018-06-12 17:53:29 +02:00
self.fee_per_name_char = self.config.get('fee_per_name_char', self.default_fee_per_name_char)
2019-04-20 00:16:21 +02:00
self.resolver = Resolver(self)
2019-03-29 22:07:02 +01:00
def resolve(self, page, page_size, *uris):
return self.resolver.resolve(page, page_size, *uris)
2018-10-15 23:16:43 +02:00
2019-03-31 00:40:01 +01:00
async def claim_search(self, **kwargs) -> Page:
return Page.from_base64(await self.network.claim_search(**kwargs))
2018-10-15 23:16:43 +02:00
2019-03-31 00:40:01 +01:00
async def get_claim_by_claim_id(self, claim_id) -> Optional[Output]:
page = await self.claim_search(claim_id=claim_id)
if page.txos:
return page.txos[0]
async def get_claim_by_outpoint(self, txid, nout) -> Optional[Output]:
page = await self.claim_search(txid=txid, nout=nout)
if page.txos:
return page.txos[0]
2018-06-12 17:53:29 +02:00
2018-10-15 23:16:43 +02:00
async def start(self):
await super().start()
await asyncio.gather(*(a.maybe_migrate_certificates() for a in self.accounts))
await asyncio.gather(*(a.save_max_gap() for a in self.accounts))
await self._report_state()
async def _report_state(self):
2018-10-12 23:11:47 +02:00
for account in self.accounts:
2018-10-15 23:16:43 +02:00
total_receiving = len((await account.receiving.get_addresses()))
total_change = len((await account.change.get_addresses()))
channel_count = await account.get_channel_count()
claim_count = await account.get_claim_count()
2018-11-07 14:39:13 +01:00
balance = dewies_to_lbc(await account.get_balance())
log.info("Loaded account %s with %s LBC, %d receiving addresses (gap: %d), "
"%d change addresses (gap: %d), %d channels, %d certificates and %d claims. ",
account.id, balance, total_receiving, account.receiving.gap, total_change, account.change.gap,
2019-03-24 21:55:04 +01:00
channel_count, len(account.channel_keys), claim_count)
2018-07-12 05:18:59 +02:00
2018-06-12 17:53:29 +02:00
2018-06-14 06:53:38 +02:00
class TestNetLedger(MainNetLedger):
2018-06-12 17:53:29 +02:00
network_name = 'testnet'
2018-10-15 23:16:43 +02:00
pubkey_address_prefix = bytes((111,))
script_address_prefix = bytes((196,))
2018-06-12 17:53:29 +02:00
extended_public_key_prefix = unhexlify('043587cf')
extended_private_key_prefix = unhexlify('04358394')
2018-06-14 06:53:38 +02:00
class RegTestLedger(MainNetLedger):
2018-06-12 17:53:29 +02:00
network_name = 'regtest'
2018-08-16 07:38:28 +02:00
headers_class = UnvalidatedHeaders
2018-10-15 23:16:43 +02:00
pubkey_address_prefix = bytes((111,))
script_address_prefix = bytes((196,))
2018-06-12 17:53:29 +02:00
extended_public_key_prefix = unhexlify('043587cf')
extended_private_key_prefix = unhexlify('04358394')
max_target = 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
genesis_hash = '6e3fcf1299d4ec5d79c3a4c91d624a4acf9e2e173d95a1a0504f677669687556'
genesis_bits = 0x207fffff
target_timespan = 1