From 3c973bf8b18b06dae7693537a8112f9703b246b9 Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Thu, 15 Nov 2018 18:18:17 -0500 Subject: [PATCH] lbry changes --- electrum/blockchain.py | 39 ++-- electrum/constants.py | 8 +- electrum/currencies.json | 3 +- electrum/network.py | 2 +- electrum/servers.json | 402 +-------------------------------------- 5 files changed, 35 insertions(+), 419 deletions(-) diff --git a/electrum/blockchain.py b/electrum/blockchain.py index 2c72f6b37..eb9a8cb71 100644 --- a/electrum/blockchain.py +++ b/electrum/blockchain.py @@ -32,9 +32,8 @@ from .util import bfh, bh2u from .simple_config import SimpleConfig -HEADER_SIZE = 80 # bytes -MAX_TARGET = 0x00000000FFFF0000000000000000000000000000000000000000000000000000 - +HEADER_SIZE = 112 # bytes +MAX_TARGET = 0x0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF class MissingHeader(Exception): pass @@ -46,6 +45,7 @@ def serialize_header(header_dict: dict) -> str: s = int_to_hex(header_dict['version'], 4) \ + rev_hex(header_dict['prev_block_hash']) \ + rev_hex(header_dict['merkle_root']) \ + + rev_hex(res.get('claim_trie_root')) + int_to_hex(int(header_dict['timestamp']), 4) \ + int_to_hex(int(header_dict['bits']), 4) \ + int_to_hex(int(header_dict['nonce']), 4) @@ -60,10 +60,10 @@ def deserialize_header(s: bytes, height: int) -> dict: h = {} h['version'] = hex_to_int(s[0:4]) h['prev_block_hash'] = hash_encode(s[4:36]) - h['merkle_root'] = hash_encode(s[36:68]) - h['timestamp'] = hex_to_int(s[68:72]) - h['bits'] = hex_to_int(s[72:76]) - h['nonce'] = hex_to_int(s[76:80]) + h['claim_trie_root'] = hash_encode(s[68:100]) + h['timestamp'] = hex_to_int(s[100:104]) + h['bits'] = hex_to_int(s[104:108]) + h['nonce'] = hex_to_int(s[108:112]) h['block_height'] = height return h @@ -363,15 +363,28 @@ class Blockchain(util.PrintError): bits = last.get('bits') target = self.bits_to_target(bits) nActualTimespan = last.get('timestamp') - first.get('timestamp') - nTargetTimespan = 14 * 24 * 60 * 60 - nActualTimespan = max(nActualTimespan, nTargetTimespan // 4) - nActualTimespan = min(nActualTimespan, nTargetTimespan * 4) - new_target = min(MAX_TARGET, (target * nActualTimespan) // nTargetTimespan) - return new_target + nTargetTimespan = self.150 + nModulatedTimespan = nTargetTimespan - (nActualTimespan - nTargetTimespan) / 8 + nMinTimespan = nTargetTimespan - (nTargetTimespan / 8) + nMaxTimespan = nTargetTimespan + (nTargetTimespan / 2) + if nModulatedTimespan < nMinTimespan: + nModulatedTimespan = nMinTimespan + elif nModulatedTimespan > nMaxTimespan: + nModulatedTimespan = nMaxTimespan + + bnOld = ArithUint256.SetCompact(bits) + bnNew = bnOld * nModulatedTimespan + # this doesn't work if it is nTargetTimespan even though that + # is what it looks like it should be based on reading the code + # in lbry.cpp + bnNew /= nModulatedTimespan + if bnNew > self.MAX_TARGET: + bnNew = ArithUint256(self.MAX_TARGET) + return bnNew.GetCompact(), bnNew._value def bits_to_target(self, bits: int) -> int: bitsN = (bits >> 24) & 0xff - if not (bitsN >= 0x03 and bitsN <= 0x1d): + if not (bitsN >= 0x03 and bitsN <= 0x1f): raise Exception("First part of bits should be in [0x03, 0x1d]") bitsBase = bits & 0xffffff if not (bitsBase >= 0x8000 and bitsBase <= 0x7fffff): diff --git a/electrum/constants.py b/electrum/constants.py index af3f7205a..4931d7ec4 100644 --- a/electrum/constants.py +++ b/electrum/constants.py @@ -51,26 +51,26 @@ class BitcoinMainnet(AbstractNet): ADDRTYPE_P2PKH = 0 ADDRTYPE_P2SH = 5 SEGWIT_HRP = "bc" - GENESIS = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" + GENESIS = "9c89283ba0f3227f6c03b70216b9f665f0118d5e0fa729cedf4fb34d6a34f463" DEFAULT_PORTS = {'t': '50001', 's': '50002'} DEFAULT_SERVERS = read_json('servers.json', {}) CHECKPOINTS = read_json('checkpoints.json', []) XPRV_HEADERS = { - 'standard': 0x0488ade4, # xprv + 'standard': 0x019c3118, # xprv 'p2wpkh-p2sh': 0x049d7878, # yprv 'p2wsh-p2sh': 0x0295b005, # Yprv 'p2wpkh': 0x04b2430c, # zprv 'p2wsh': 0x02aa7a99, # Zprv } XPUB_HEADERS = { - 'standard': 0x0488b21e, # xpub + 'standard': 0x019c354f, # xpub 'p2wpkh-p2sh': 0x049d7cb2, # ypub 'p2wsh-p2sh': 0x0295b43f, # Ypub 'p2wpkh': 0x04b24746, # zpub 'p2wsh': 0x02aa7ed3, # Zpub } - BIP44_COIN_TYPE = 0 + BIP44_COIN_TYPE = 140 class BitcoinTestnet(AbstractNet): diff --git a/electrum/currencies.json b/electrum/currencies.json index f0fabafa9..f4c9a6f05 100644 --- a/electrum/currencies.json +++ b/electrum/currencies.json @@ -346,7 +346,7 @@ "EUR", "USD", "VEF" - ], + ], "Bitmarket": [ "PLN" ], @@ -463,6 +463,7 @@ "KZT", "LAK", "LBP", + "LBC", "LKR", "LRD", "LSL", diff --git a/electrum/network.py b/electrum/network.py index a9df34946..aaa08fcae 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -103,7 +103,7 @@ def filter_protocol(hostmap, protocol='s'): return eligible -def pick_random_server(hostmap = None, protocol = 's', exclude_set = set()): +def pick_random_server(hostmap = None, protocol = 't', exclude_set = set()): if hostmap is None: hostmap = constants.net.DEFAULT_SERVERS eligible = list(set(filter_protocol(hostmap, protocol)) - exclude_set) diff --git a/electrum/servers.json b/electrum/servers.json index 2677b8148..02ceead13 100644 --- a/electrum/servers.json +++ b/electrum/servers.json @@ -1,409 +1,11 @@ { - "3smoooajg7qqac2y.onion": { + "lbryumx1.lbry.io": { "pruning": "-", "s": "50002", "t": "50001", "version": "1.4" }, - "81-7-10-251.blue.kundencontroller.de": { - "pruning": "-", - "s": "50002", - "version": "1.4" - }, - "E-X.not.fyi": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "MEADS.hopto.org": { - "pruning": "-", - "s": "50002", - "version": "1.4" - }, - "VPS.hsmiths.com": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "b.ooze.cc": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "bauerjda5hnedjam.onion": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "bauerjhejlv6di7s.onion": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "bitcoin.corgi.party": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "bitcoin3nqy3db7c.onion": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "bitcoins.sk": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "btc.cihar.com": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "btc.smsys.me": { - "pruning": "-", - "s": "995", - "version": "1.4" - }, - "btc.xskyx.net": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "cashyes.zapto.org": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "currentlane.lovebitco.in": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "daedalus.bauerj.eu": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "dedi.jochen-hoenicke.de": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "dragon085.startdedicated.de": { - "pruning": "-", - "s": "50002", - "version": "1.4" - }, - "e-1.claudioboxx.com": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "e.keff.org": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "elec.luggs.co": { - "pruning": "-", - "s": "443", - "version": "1.4" - }, - "electrum-server.ninja": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrum-unlimited.criptolayer.net": { - "pruning": "-", - "s": "50002", - "version": "1.4" - }, - "electrum.eff.ro": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrum.festivaldelhumor.org": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrum.hsmiths.com": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrum.leblancnet.us": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrum.mindspot.org": { - "pruning": "-", - "s": "50002", - "version": "1.4" - }, - "electrum.qtornado.com": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrum.taborsky.cz": { - "pruning": "-", - "s": "50002", - "version": "1.4" - }, - "electrum.villocq.com": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrum2.eff.ro": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrum2.villocq.com": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrum3.hachre.de": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrumx.bot.nu": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrumx.ddns.net": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrumx.ftp.sh": { - "pruning": "-", - "s": "50002", - "version": "1.4" - }, - "electrumx.ml": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrumx.nmdps.net": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrumx.soon.it": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "electrumxhqdsmlu.onion": { - "pruning": "-", - "t": "50001", - "version": "1.4" - }, - "elx01.knas.systems": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "enode.duckdns.org": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "erbium1.sytes.net": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "fedaykin.goip.de": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "fn.48.org": { - "pruning": "-", - "s": "50002", - "t": "50003", - "version": "1.4" - }, - "helicarrier.bauerj.eu": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "hsmiths4fyqlw5xw.onion": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "hsmiths5mjk6uijs.onion": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "icarus.tetradrachm.net": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "kirsche.emzy.de": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "luggscoqbymhvnkp.onion": { - "pruning": "-", - "t": "80", - "version": "1.4" - }, - "ndnd.selfhost.eu": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "ndndword5lpb7eex.onion": { - "pruning": "-", - "t": "50001", - "version": "1.4" - }, - "oneweek.duckdns.org": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "orannis.com": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "ozahtqwp25chjdjd.onion": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "qtornadoklbgdyww.onion": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "rbx.curalle.ovh": { - "pruning": "-", - "s": "50002", - "version": "1.4" - }, - "s7clinmo4cazmhul.onion": { - "pruning": "-", - "t": "50001", - "version": "1.4" - }, - "tardis.bauerj.eu": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "technetium.network": { - "pruning": "-", - "s": "50002", - "version": "1.4" - }, - "tomscryptos.com": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "ulrichard.ch": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "us.electrum.be": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "vmd27610.contaboserver.net": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "vmd30612.contaboserver.net": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "wsw6tua3xl24gsmi264zaep6seppjyrkyucpsmuxnjzyt3f3j6swshad.onion": { - "pruning": "-", - "s": "50002", - "t": "50001", - "version": "1.4" - }, - "xray587.startdedicated.de": { - "pruning": "-", - "s": "50002", - "version": "1.4" - }, - "yuio.top": { + "lbryumx2.lbry.io": { "pruning": "-", "s": "50002", "t": "50001",