electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit d0dd8c847a2f79c1131e937ebcb8db6394722f57
parent 5e512754d35f2da8ccf8d968eb6f42fdb07e9aaf
Author: ThomasV <thomasv@gitorious>
Date:   Fri, 30 Mar 2012 10:48:32 +0200

new spec and conversion

Diffstat:
Mclient/gui.py | 4++--
Mclient/gui_qt.py | 6+++---
Mclient/interface.py | 20++++++++++++++++----
Mclient/wallet.py | 12+++++++-----
4 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/client/gui.py b/client/gui.py @@ -1075,7 +1075,7 @@ class ElectrumWindow: n = 0 h = self.wallet.history.get(address,[]) for item in h: - if not item['is_in'] : n=n+1 + if not item['is_input'] : n=n+1 tx = "None" if n==0 else "%d"%n self.recv_list.append((address, label, tx )) @@ -1103,7 +1103,7 @@ class ElectrumWindow: tx_hash = tx['tx_hash'] if tx['height']: conf = self.wallet.blocks - tx['height'] + 1 - time_str = datetime.datetime.fromtimestamp( tx['nTime']).isoformat(' ')[:-3] + time_str = datetime.datetime.fromtimestamp( tx['timestamp']).isoformat(' ')[:-3] conf_icon = gtk.STOCK_APPLY else: conf = 0 diff --git a/client/gui_qt.py b/client/gui_qt.py @@ -237,7 +237,7 @@ class ElectrumWindow(QMainWindow): if tx['height']: conf = self.wallet.blocks - tx['height'] + 1 - time_str = datetime.datetime.fromtimestamp( tx['nTime']).isoformat(' ')[:-3] + time_str = datetime.datetime.fromtimestamp( tx['timestamp']).isoformat(' ')[:-3] else: conf = 0 time_str = 'pending' @@ -310,7 +310,7 @@ class ElectrumWindow(QMainWindow): tx_hash = tx['tx_hash'] if tx['height']: conf = self.wallet.blocks - tx['height'] + 1 - time_str = datetime.datetime.fromtimestamp( tx['nTime']).isoformat(' ')[:-3] + time_str = datetime.datetime.fromtimestamp( tx['timestamp']).isoformat(' ')[:-3] icon = QIcon(":icons/confirmed.png") else: conf = 0 @@ -574,7 +574,7 @@ class ElectrumWindow(QMainWindow): n = 0 h = self.wallet.history.get(address,[]) for item in h: - if not item['is_in'] : n=n+1 + if not item['is_input'] : n=n+1 tx = "None" if n==0 else "%d"%n item = QTreeWidgetItem( [ address, label, tx] ) item.setFont(0, QFont('monospace')) diff --git a/client/interface.py b/client/interface.py @@ -24,6 +24,15 @@ DEFAULT_TIMEOUT = 5 DEFAULT_SERVERS = ['electrum.bitcoins.sk','ecdsa.org','electrum.novit.ro'] # list of default servers +def old_to_new(s): + s = s.replace("'blk_hash'", "'block_hash'") + s = s.replace("'pos'", "'index'") + s = s.replace("'nTime'", "'timestamp'") + s = s.replace("'is_in'", "'is_input'") + s = s.replace("'raw_scriptPubKey'","'raw_output_script'") + return s + + class Interface: def __init__(self, host, port): self.host = host @@ -57,7 +66,7 @@ class Interface: method = c.get('method',None) if not method: return - + if error: print "received error:", c, method, params else: @@ -117,7 +126,7 @@ class PollingInterface(Interface): def get_history(self, address): - self.send([('address.get_history', [address] )]) + self.send([('blockchain.address.get_history', [address] )]) def poll(self): self.send([('session.poll', [])]) @@ -200,6 +209,9 @@ class NativeInterface(PollingInterface): self.rtime = time.time() - t1 self.is_connected = True + if cmd == 'h': + out = old_to_new(out) + if cmd in[ 'peers','h','poll']: out = ast.literal_eval( out ) @@ -215,7 +227,6 @@ class NativeInterface(PollingInterface): - class HttpInterface(PollingInterface): def start(self): @@ -302,6 +313,7 @@ class AsynchronousInterface(Interface): traceback.print_exc(file=sys.stdout) self.is_connected = False + # push None so that the getting thread exits its loop self.responses.put(None) def send(self, messages): @@ -314,7 +326,7 @@ class AsynchronousInterface(Interface): self.s.send( out ) def get_history(self, addr): - self.send([('address.get_history', [addr])]) + self.send([('blockchain.address.get_history', [addr])]) self.addresses_waiting_for_history.append(addr) def start(self): diff --git a/client/wallet.py b/client/wallet.py @@ -560,6 +560,7 @@ class Wallet: f.close() except: return + data = interface.old_to_new(data) try: d = ast.literal_eval( data ) self.seed_version = d.get('seed_version') @@ -631,16 +632,16 @@ class Wallet: h = self.history.get(addr) if h is None: continue for item in h: - if item.get('raw_scriptPubKey'): + if item.get('raw_output_script'): coins.append( (addr,item)) - coins = sorted( coins, key = lambda x: x[1]['nTime'] ) + coins = sorted( coins, key = lambda x: x[1]['timestamp'] ) inputs = [] for c in coins: addr, item = c v = item.get('value') total += v - inputs.append((addr, v, item['tx_hash'], item['pos'], item['raw_scriptPubKey'], None, None) ) + inputs.append((addr, v, item['tx_hash'], item['index'], item['raw_output_script'], None, None) ) fee = self.fee*len(inputs) if fixed_fee is None else fixed_fee if total >= amount + fee: break else: @@ -705,7 +706,7 @@ class Wallet: def get_tx_history(self): lines = self.tx_history.values() - lines = sorted(lines, key=operator.itemgetter("nTime")) + lines = sorted(lines, key=operator.itemgetter("timestamp")) return lines def update_tx_history(self): @@ -722,7 +723,7 @@ class Wallet: else: line['value'] += tx['value'] if line['height'] == 0: - line['nTime'] = 1e12 + line['timestamp'] = 1e12 self.update_tx_labels() def update_tx_labels(self): @@ -996,6 +997,7 @@ class Wallet: response = self.interface.responses.get(True,100000000000) # workaround so that it can be keyboard interrupted self.handle_response(response) + def start_interface(self): if self.protocol == 'n': InterfaceClass = NativeInterface