Beispiel #1
0
int main(int argc, char *argv[])
{
	std::istream &in = input_file(argv[1]);

	unsigned int blocknum, overhead;
	txmap block;
	std::unordered_map<bitcoin_txid, tx *> knowns;

	while (read_blockline(in, &blocknum, &overhead, &block, &knowns, NULL)) {
		u64 seed;
		size_t ibltslices;
		raw_iblt *theirs = read_iblt(in, &ibltslices, &seed);

		txmap mempool;
		std::string peername;
		while (read_mempool(in, &peername, &mempool, &knowns, NULL)) {
			if (!theirs) {
				std::cout << blocknum << "," << overhead << ",0,"
						  << peername << ","
						  << true
						  << std::endl;
			} else {
				// Create our equivalent iblt.
				raw_iblt ours(theirs->size(), seed, mempool);

				std::cout << blocknum << "," << overhead << "," << ibltslices
						  << "," << peername << ","
						  << recover_block(*theirs, ours, seed, mempool, block)
						  << std::endl;
			}
		}
	}
}
void
CurrentBlockchainStatus::start_monitor_blockchain_thread()
{
    bool testnet = CurrentBlockchainStatus::testnet;

    TxSearch::set_search_thread_life(search_thread_life_in_seconds);

    if (!import_payment_address_str.empty() && !import_payment_viewkey_str.empty())
    {
        if (!xmreg::parse_str_address(
                import_payment_address_str,
                import_payment_address,
                testnet))
        {
            cerr << "Cant parse address_str: "
                 << import_payment_address_str
                 << endl;
            return;
        }

        if (!xmreg::parse_str_secret_key(
                import_payment_viewkey_str,
                import_payment_viewkey))
        {
            cerr << "Cant parse the viewkey_str: "
                 << import_payment_viewkey_str
                 << endl;
            return;
        }
    }

    if (!is_running)
    {
        m_thread = std::thread{[]()
           {
               while (true)
               {
                   update_current_blockchain_height();
                   read_mempool();
                   cout << "Check block height: " << current_height
                        << " no of mempool txs: " << mempool_txs.size();
                   cout << endl;
                   clean_search_thread_map();
                   std::this_thread::sleep_for(
                           std::chrono::seconds(
                                   refresh_block_status_every_seconds));
               }
           }};

        is_running = true;
    }
}