From bc4172e17b8c99f1e569d9d737c255755f587f94 Mon Sep 17 00:00:00 2001 From: Forrest Voight Date: Fri, 12 Oct 2012 13:28:52 -0400 Subject: [PATCH 1/1] cache txs between peers --- p2pool/main.py | 6 ++++++ p2pool/p2p.py | 3 +++ 2 files changed, 9 insertions(+), 0 deletions(-) diff --git a/p2pool/main.py b/p2pool/main.py index 98b4e37..14e41ff 100644 --- a/p2pool/main.py +++ b/p2pool/main.py @@ -245,12 +245,18 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): known_txs_var = variable.Variable({}) # hash -> tx mining_txs_var = variable.Variable({}) # hash -> tx + # update mining_txs according to getwork results @bitcoind_work.changed.watch def _(work): new_mining_txs = {} for tx in work['transactions']: new_mining_txs[bitcoin_data.hash256(bitcoin_data.tx_type.pack(tx))] = tx mining_txs_var.set(new_mining_txs) + # forward transactions seen to bitcoind + @known_txs_var.transitioned.watch + def _(before, after): + for tx_hash in set(after) - set(before): + factory.conn.value.send_tx(tx=after[tx_hash]) class Node(p2p.Node): def handle_shares(self, shares, peer): diff --git a/p2pool/p2p.py b/p2pool/p2p.py index f08a6b7..4af2391 100644 --- a/p2pool/p2p.py +++ b/p2pool/p2p.py @@ -297,10 +297,13 @@ class Protocol(p2protocol.Protocol): for tx_hash in tx_hashes: if tx_hash not in self.remembered_txs: self.remembered_txs[tx_hash] = self.node.known_txs_var.value[tx_hash] + new_known_txs = dict(self.node.known_txs_var.value) for tx in txs: tx_hash = bitcoin_data.hash256(bitcoin_data.tx_type.pack(tx)) if tx_hash not in self.remembered_txs: self.remembered_txs[tx_hash] = tx + new_known_txs[tx_hash] = tx + self.node.known_txs_var.set(new_known_txs) message_forget_tx = pack.ComposedType([ ('tx_hashes', pack.ListType(pack.IntType(256))), ]) -- 1.7.1