From: genjix Date: Sun, 22 Apr 2012 19:50:12 +0000 (+0100) Subject: trace input addresses for a tx X-Git-Url: https://git.novaco.in/?p=electrum-server.git;a=commitdiff_plain;h=608eb0b73118735c11f10468b51d607ac6d02232 trace input addresses for a tx --- diff --git a/backends/libbitcoin/trace_test.py b/backends/libbitcoin/trace_test.py new file mode 100644 index 0000000..6940962 --- /dev/null +++ b/backends/libbitcoin/trace_test.py @@ -0,0 +1,22 @@ +import bitcoin, trace_tx + +def blockchain_started(ec, chain): + print "Blockchain initialisation:", ec +def handle_tx(ec, tx): + if ec: + print ec + trace_tx.trace_tx(service.internal_ptr, chain.internal_ptr, tx, finish) + +def finish(ec, result): + print ec + print result + +service = bitcoin.async_service(1) +chain = bitcoin.bdb_blockchain(service, "/home/genjix/libbitcoin/database", + blockchain_started) +chain.fetch_transaction( + bitcoin.hash_digest("16e3e3bfbaa072e33e6a9be1df7a13ecde5ad46a8d4d4893dbecaf0c0aeeb842"), + handle_tx) + +raw_input() + diff --git a/backends/libbitcoin/trace_tx.cpp b/backends/libbitcoin/trace_tx.cpp new file mode 100644 index 0000000..0b201e2 --- /dev/null +++ b/backends/libbitcoin/trace_tx.cpp @@ -0,0 +1,141 @@ +#include +using namespace libbitcoin; + +#include +namespace python = boost::python; + +#include "/home/genjix/python-bitcoin/src/primitive.h" + +namespace ph = std::placeholders; + +class tracer + : public std::enable_shared_from_this, + private coroutine +{ +public: + typedef std::vector string_list; + + typedef std::function< + void (const std::error_code&, const string_list&)> finish_handler; + + tracer(async_service& service, blockchain_ptr chain) + : strand_(service.get_service()), chain_(chain) + { + } + + void start(const message::transaction& tx, finish_handler handle_finish) + { + auto this_ptr = shared_from_this(); + strand_.post( + [&, this_ptr, tx, handle_finish]() + { + tx_ = std::move(tx); + handle_finish_ = std::move(handle_finish); + this_ptr->run(std::error_code()); + }); + } + + void run(const std::error_code& ec); + +private: + io_service::strand strand_; + blockchain_ptr chain_; + + message::transaction tx_; + finish_handler handle_finish_; + + size_t count_; + bool stopped_; + std::vector