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):
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))),
])