Browse Source

Updates for Electrum 2.8

ElectrumWalletInterface now supports testnet.
Changes to Electrum API in btc.py for new 2.8 code.
master
Adam Gibson 10 years ago
parent
commit
7e381b6c80
No known key found for this signature in database
GPG Key ID: B3AE09F1E9A3197A
  1. 3
      jmclient/jmclient/blockchaininterface.py
  2. 21
      jmclient/jmclient/btc.py

3
jmclient/jmclient/blockchaininterface.py

@ -437,9 +437,6 @@ class ElectrumWalletInterface(BlockchainInterface): #pragma: no cover
def __init__(self, testnet=False): def __init__(self, testnet=False):
super(ElectrumWalletInterface, self).__init__() super(ElectrumWalletInterface, self).__init__()
if testnet:
raise NotImplementedError(
"Electrum doesnt yet have a testnet interface")
self.last_sync_unspent = 0 self.last_sync_unspent = 0
def set_wallet(self, wallet): def set_wallet(self, wallet):

21
jmclient/jmclient/btc.py

@ -135,11 +135,18 @@ except ImportError:
def get_version_byte(inp): def get_version_byte(inp):
leadingzbytes = len(re.match('^1*', inp).group(0)) leadingzbytes = len(re.match('^1*', inp).group(0))
data = b'\x00' * leadingzbytes + b58check_to_bin(inp) data = b'\x00' * leadingzbytes + b58check_to_bin(inp, version=True)
return ord(data[0]) return ord(data[0])
def b58check_to_bin(addr): def b58check_to_bin(addr, version=False):
"""optionally include the version byte for get_version_byte.
Note that jmbitcoin does not need this flag, because it
uses the changebase() function, which here has been restricted.
"""
if not version:
return ebt.DecodeBase58Check(addr)[1:] return ebt.DecodeBase58Check(addr)[1:]
else:
return ebt.DecodeBase58Check(addr)
def changebase(inp, frm=256, to=58): def changebase(inp, frm=256, to=58):
"""Implementation of base58 (*not* b58check) conversion """Implementation of base58 (*not* b58check) conversion
@ -178,7 +185,8 @@ except ImportError:
log.debug("Invalid script") log.debug("Invalid script")
return False return False
t.inputs()[i]["address"] = addr t.inputs()[i]["address"] = addr
txforsig = etr.Hash(t.tx_for_sig(i).decode('hex')) t.inputs()[i]["type"] = 'p2pkh'
txforsig = etr.Hash(t.serialize_preimage(i).decode('hex'))
ecdsa_pub = get_ecdsa_verifying_key(pub) ecdsa_pub = get_ecdsa_verifying_key(pub)
if not ecdsa_pub: if not ecdsa_pub:
return False return False
@ -303,8 +311,7 @@ except ImportError:
compressed=False compressed=False
else: else:
raise ValueError("Invalid private key") raise ValueError("Invalid private key")
sec = ebt.SecretToASecret(privkey, compressed=compressed, sec = ebt.SecretToASecret(privkey, compressed=compressed)
addrtype=BTC_P2PK_VBYTE["mainnet"])
retval = ebt.public_key_from_private_key(sec) retval = ebt.public_key_from_private_key(sec)
if usehex: if usehex:
@ -327,11 +334,11 @@ except ImportError:
def from_wif_privkey(privkey, vbyte=0): def from_wif_privkey(privkey, vbyte=0):
#converts a WIF compressed privkey to a hex private key #converts a WIF compressed privkey to a hex private key
return binascii.hexlify(ebt.ASecretToSecret(privkey, addrtype=vbyte)) return binascii.hexlify(ebt.ASecretToSecret(privkey))
def txhash(txhex): def txhash(txhex):
t = etr.Transaction(txhex) t = etr.Transaction(txhex)
return t.hash() return t.txid()
#A simple copy-paste for now; move into support.py perhaps? TODO #A simple copy-paste for now; move into support.py perhaps? TODO
def estimate_tx_size(ins, outs, txtype='p2pkh'): def estimate_tx_size(ins, outs, txtype='p2pkh'):

Loading…
Cancel
Save