updated to newer torba
This commit is contained in:
parent
fb2fb5c38c
commit
2668ceac0e
5 changed files with 140 additions and 25 deletions
|
@ -1,4 +1,9 @@
|
||||||
__coin__ = 'LBC'
|
__node_daemon__ = 'lbrycrdd'
|
||||||
|
__node_cli__ = 'lbrycrd-cli'
|
||||||
|
__node_bin__ = ''
|
||||||
|
__node_url__ = (
|
||||||
|
'https://github.com/lbryio/lbrycrd/releases/download/v0.12.2.1/lbrycrd-linux.zip'
|
||||||
|
)
|
||||||
|
__electrumx__ = 'lbryumx.coin.LBCRegTest'
|
||||||
|
|
||||||
from .coin import LBC, LBCRegTest
|
from .ledger import MainNetLedger, RegTestLedger
|
||||||
from .manager import LbryWalletManager
|
|
||||||
|
|
|
@ -7,8 +7,8 @@ from torba.baseheader import BaseHeaders, _ArithUint256
|
||||||
from torba.util import int_to_hex, rev_hex, hash_encode
|
from torba.util import int_to_hex, rev_hex, hash_encode
|
||||||
|
|
||||||
from .network import Network
|
from .network import Network
|
||||||
from .transaction import Transaction
|
|
||||||
from .database import WalletDatabase
|
from .database import WalletDatabase
|
||||||
|
from .transaction import Transaction
|
||||||
|
|
||||||
|
|
||||||
class Headers(BaseHeaders):
|
class Headers(BaseHeaders):
|
||||||
|
@ -83,26 +83,38 @@ class Headers(BaseHeaders):
|
||||||
return bnNew.GetCompact(), bnNew._value
|
return bnNew.GetCompact(), bnNew._value
|
||||||
|
|
||||||
|
|
||||||
class Ledger(BaseLedger):
|
class MainNetLedger(BaseLedger):
|
||||||
name = 'LBRY Credits'
|
name = 'LBRY Credits'
|
||||||
symbol = 'LBC'
|
symbol = 'LBC'
|
||||||
|
network_name = 'mainnet'
|
||||||
|
|
||||||
database_class = WalletDatabase
|
database_class = WalletDatabase
|
||||||
headers_class = Headers
|
headers_class = Headers
|
||||||
network_class = Network
|
network_class = Network
|
||||||
transaction_class = Transaction
|
transaction_class = Transaction
|
||||||
|
|
||||||
|
secret_prefix = int2byte(0x1c)
|
||||||
|
pubkey_address_prefix = int2byte(0x55)
|
||||||
|
script_address_prefix = int2byte(0x7a)
|
||||||
|
extended_public_key_prefix = unhexlify('019c354f')
|
||||||
|
extended_private_key_prefix = unhexlify('019c3118')
|
||||||
|
|
||||||
|
max_target = 0x0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||||
|
genesis_hash = '9c89283ba0f3227f6c03b70216b9f665f0118d5e0fa729cedf4fb34d6a34f463'
|
||||||
|
genesis_bits = 0x1f00ffff
|
||||||
|
target_timespan = 150
|
||||||
|
|
||||||
default_fee_per_byte = 50
|
default_fee_per_byte = 50
|
||||||
default_fee_per_name_char = 200000
|
default_fee_per_name_char = 200000
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(Ledger, self).__init__(*args, **kwargs)
|
super(MainNetLedger, self).__init__(*args, **kwargs)
|
||||||
self.fee_per_name_char = self.config.get('fee_per_name_char', self.default_fee_per_name_char)
|
self.fee_per_name_char = self.config.get('fee_per_name_char', self.default_fee_per_name_char)
|
||||||
|
|
||||||
def get_transaction_base_fee(self, tx):
|
def get_transaction_base_fee(self, tx):
|
||||||
""" Fee for the transaction header and all outputs; without inputs. """
|
""" Fee for the transaction header and all outputs; without inputs. """
|
||||||
return max(
|
return max(
|
||||||
super(Ledger, self).get_transaction_base_fee(tx),
|
super(MainNetLedger, self).get_transaction_base_fee(tx),
|
||||||
self.get_transaction_claim_name_fee(tx)
|
self.get_transaction_claim_name_fee(tx)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -117,21 +129,7 @@ class Ledger(BaseLedger):
|
||||||
return self.network.get_values_for_uris(*uris)
|
return self.network.get_values_for_uris(*uris)
|
||||||
|
|
||||||
|
|
||||||
class MainNetLedger(Ledger):
|
class TestNetLedger(MainNetLedger):
|
||||||
network_name = 'mainnet'
|
|
||||||
secret_prefix = int2byte(0x1c)
|
|
||||||
pubkey_address_prefix = int2byte(0x55)
|
|
||||||
script_address_prefix = int2byte(0x7a)
|
|
||||||
extended_public_key_prefix = unhexlify('019c354f')
|
|
||||||
extended_private_key_prefix = unhexlify('019c3118')
|
|
||||||
|
|
||||||
max_target = 0x0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
genesis_hash = '9c89283ba0f3227f6c03b70216b9f665f0118d5e0fa729cedf4fb34d6a34f463'
|
|
||||||
genesis_bits = 0x1f00ffff
|
|
||||||
target_timespan = 150
|
|
||||||
|
|
||||||
|
|
||||||
class TestNetLedger(Ledger):
|
|
||||||
network_name = 'testnet'
|
network_name = 'testnet'
|
||||||
pubkey_address_prefix = int2byte(111)
|
pubkey_address_prefix = int2byte(111)
|
||||||
script_address_prefix = int2byte(196)
|
script_address_prefix = int2byte(196)
|
||||||
|
@ -143,7 +141,7 @@ class UnverifiedHeaders(Headers):
|
||||||
verify_bits_to_target = False
|
verify_bits_to_target = False
|
||||||
|
|
||||||
|
|
||||||
class RegTestLedger(Ledger):
|
class RegTestLedger(MainNetLedger):
|
||||||
network_name = 'regtest'
|
network_name = 'regtest'
|
||||||
headers_class = UnverifiedHeaders
|
headers_class = UnverifiedHeaders
|
||||||
pubkey_address_prefix = int2byte(111)
|
pubkey_address_prefix = int2byte(111)
|
||||||
|
|
|
@ -8,8 +8,6 @@ from torba.constants import COIN
|
||||||
from torba.coinselection import CoinSelector
|
from torba.coinselection import CoinSelector
|
||||||
from torba.manager import WalletManager as BaseWalletManager
|
from torba.manager import WalletManager as BaseWalletManager
|
||||||
|
|
||||||
from .transaction import Transaction, Output, Input
|
|
||||||
|
|
||||||
|
|
||||||
class BackwardsCompatibleNetwork:
|
class BackwardsCompatibleNetwork:
|
||||||
def __init__(self, manager):
|
def __init__(self, manager):
|
||||||
|
|
80
lbrynet/wallet/script.py
Normal file
80
lbrynet/wallet/script.py
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
from torba.basescript import BaseInputScript, BaseOutputScript, Template
|
||||||
|
from torba.basescript import PUSH_SINGLE, OP_DROP, OP_2DROP
|
||||||
|
|
||||||
|
|
||||||
|
class InputScript(BaseInputScript):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class OutputScript(BaseOutputScript):
|
||||||
|
|
||||||
|
# lbry custom opcodes
|
||||||
|
OP_CLAIM_NAME = 0xb5
|
||||||
|
OP_SUPPORT_CLAIM = 0xb6
|
||||||
|
OP_UPDATE_CLAIM = 0xb7
|
||||||
|
|
||||||
|
CLAIM_NAME_OPCODES = (
|
||||||
|
OP_CLAIM_NAME, PUSH_SINGLE('claim_name'), PUSH_SINGLE('claim'),
|
||||||
|
OP_2DROP, OP_DROP
|
||||||
|
)
|
||||||
|
CLAIM_NAME_PUBKEY = Template('claim_name+pay_pubkey_hash', (
|
||||||
|
CLAIM_NAME_OPCODES + BaseOutputScript.PAY_PUBKEY_HASH.opcodes
|
||||||
|
))
|
||||||
|
CLAIM_NAME_SCRIPT = Template('claim_name+pay_script_hash', (
|
||||||
|
CLAIM_NAME_OPCODES + BaseOutputScript.PAY_SCRIPT_HASH.opcodes
|
||||||
|
))
|
||||||
|
|
||||||
|
SUPPORT_CLAIM_OPCODES = (
|
||||||
|
OP_SUPPORT_CLAIM, PUSH_SINGLE('claim_name'), PUSH_SINGLE('claim_id'),
|
||||||
|
OP_2DROP, OP_DROP
|
||||||
|
)
|
||||||
|
SUPPORT_CLAIM_PUBKEY = Template('support_claim+pay_pubkey_hash', (
|
||||||
|
SUPPORT_CLAIM_OPCODES + BaseOutputScript.PAY_PUBKEY_HASH.opcodes
|
||||||
|
))
|
||||||
|
SUPPORT_CLAIM_SCRIPT = Template('support_claim+pay_script_hash', (
|
||||||
|
SUPPORT_CLAIM_OPCODES + BaseOutputScript.PAY_SCRIPT_HASH.opcodes
|
||||||
|
))
|
||||||
|
|
||||||
|
UPDATE_CLAIM_OPCODES = (
|
||||||
|
OP_UPDATE_CLAIM, PUSH_SINGLE('claim_name'), PUSH_SINGLE('claim_id'), PUSH_SINGLE('claim'),
|
||||||
|
OP_2DROP, OP_2DROP
|
||||||
|
)
|
||||||
|
UPDATE_CLAIM_PUBKEY = Template('update_claim+pay_pubkey_hash', (
|
||||||
|
UPDATE_CLAIM_OPCODES + BaseOutputScript.PAY_PUBKEY_HASH.opcodes
|
||||||
|
))
|
||||||
|
UPDATE_CLAIM_SCRIPT = Template('update_claim+pay_script_hash', (
|
||||||
|
UPDATE_CLAIM_OPCODES + BaseOutputScript.PAY_SCRIPT_HASH.opcodes
|
||||||
|
))
|
||||||
|
|
||||||
|
templates = BaseOutputScript.templates + [
|
||||||
|
CLAIM_NAME_PUBKEY,
|
||||||
|
CLAIM_NAME_SCRIPT,
|
||||||
|
SUPPORT_CLAIM_PUBKEY,
|
||||||
|
SUPPORT_CLAIM_SCRIPT,
|
||||||
|
UPDATE_CLAIM_PUBKEY,
|
||||||
|
UPDATE_CLAIM_SCRIPT
|
||||||
|
]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def pay_claim_name_pubkey_hash(cls, claim_name, claim, pubkey_hash):
|
||||||
|
return cls(template=cls.CLAIM_NAME_PUBKEY, values={
|
||||||
|
'claim_name': claim_name,
|
||||||
|
'claim': claim,
|
||||||
|
'pubkey_hash': pubkey_hash
|
||||||
|
})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_claim_name(self):
|
||||||
|
return self.template.name.startswith('claim_name+')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_support_claim(self):
|
||||||
|
return self.template.name.startswith('support_claim+')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_update_claim(self):
|
||||||
|
return self.template.name.startswith('update_claim+')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_claim_involved(self):
|
||||||
|
return self.is_claim_name or self.is_support_claim or self.is_update_claim
|
34
lbrynet/wallet/transaction.py
Normal file
34
lbrynet/wallet/transaction.py
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
import struct
|
||||||
|
|
||||||
|
from torba.basetransaction import BaseTransaction, BaseInput, BaseOutput
|
||||||
|
from torba.hash import hash160
|
||||||
|
|
||||||
|
from .script import InputScript, OutputScript
|
||||||
|
|
||||||
|
|
||||||
|
def claim_id_hash(txid, n):
|
||||||
|
return hash160(txid + struct.pack('>I', n))
|
||||||
|
|
||||||
|
|
||||||
|
class Input(BaseInput):
|
||||||
|
script_class = InputScript
|
||||||
|
|
||||||
|
|
||||||
|
class Output(BaseOutput):
|
||||||
|
script_class = OutputScript
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def pay_claim_name_pubkey_hash(cls, amount, claim_name, claim, pubkey_hash):
|
||||||
|
script = cls.script_class.pay_claim_name_pubkey_hash(claim_name, claim, pubkey_hash)
|
||||||
|
return cls(amount, script)
|
||||||
|
|
||||||
|
|
||||||
|
class Transaction(BaseTransaction):
|
||||||
|
|
||||||
|
input_class = Input
|
||||||
|
output_class = Output
|
||||||
|
|
||||||
|
def get_claim_id(self, output_index):
|
||||||
|
output = self.outputs[output_index] # type: Output
|
||||||
|
assert output.script.is_claim_name(), 'Not a name claim.'
|
||||||
|
return claim_id_hash(self.hash, output_index)
|
Loading…
Reference in a new issue