X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=server.py;h=5d1b1e01b031ec7f7c1ff2646188b62a5073b507;hb=b328090bcd9b05790a638f2a99ef7fcc5056a6c8;hp=3b9fa8a8bd0d830ee74db652130199aa1cbada04;hpb=6b21937da7b082a7ca5d571cae951535dc2d104d;p=electrum-server.git diff --git a/server.py b/server.py index 3b9fa8a..5d1b1e0 100755 --- a/server.py +++ b/server.py @@ -340,6 +340,16 @@ class MyStore(Datastore_class): tx['hash'] = util.double_sha256(tx['tx']) tx_hash = store.hashin(tx['hash']) + store.mempool_keys.append(tx_hash) + if store.tx_find_id_and_value(tx): + pass + else: + tx_id = store.import_tx(tx, False) + store.update_tx_cache(tx_id) + + store.commit() + + def send_tx(self,tx): postdata = dumps({"method": 'importtransaction', 'params': [tx], 'id':'jsonrpc'}) respdata = urllib.urlopen(self.bitcoind_url, postdata).read() @@ -449,23 +459,24 @@ def cmd_load(_,__,pw): -def modified_addresses(session): - if 1: - t1 = time.time() - addresses = session['addresses'] - session['last_time'] = time.time() - ret = {} - k = 0 - for addr in addresses: - status = get_address_status( addr ) - msg_id, last_status = addresses.get( addr ) - if last_status != status: - addresses[addr] = msg_id, status - ret[addr] = status +def modified_addresses(a_session): + #t1 = time.time() + import copy + session = copy.deepcopy(a_session) + addresses = session['addresses'] + session['last_time'] = time.time() + ret = {} + k = 0 + for addr in addresses: + status = get_address_status( addr ) + msg_id, last_status = addresses.get( addr ) + if last_status != status: + addresses[addr] = msg_id, status + ret[addr] = status - t2 = time.time() - t1 - #if t2 > 10: print "high load:", session_id, "%d/%d"%(k,len(addresses)), t2 - return ret, addresses + #t2 = time.time() - t1 + #if t2 > 10: print "high load:", session_id, "%d/%d"%(k,len(addresses)), t2 + return ret, addresses def poll_session(session_id): @@ -475,6 +486,7 @@ def poll_session(session_id): print time.asctime(), "session not found", session_id return -1, {} else: + sessions[session_id]['last_time'] = time.time() ret, addresses = modified_addresses(session) if ret: sessions[session_id]['addresses'] = addresses return repr( (block_number,ret)) @@ -485,6 +497,7 @@ def poll_session_json(session_id, message_id): if session is None: raise BaseException("session not found %s"%session_id) else: + m_sessions[0][session_id]['last_time'] = time.time() out = [] ret, addresses = modified_addresses(session) if ret: @@ -828,10 +841,9 @@ def process_input_queue(): address = data[0] out = { 'result':store.get_history( address ) } elif method == 'transaction.broadcast': - postdata = dumps({"method": 'importtransaction', 'params': [data], 'id':'jsonrpc'}) - txo = urllib.urlopen(bitcoind_url, postdata).read() + txo = store.send_tx(data[0]) print "sent tx:", txo - out = json.loads(txo) + out = {'result':txo } else: print "unknown command", method if out: