1. 程式人生 > >C++從零開始區塊鏈:區塊鏈業務模組之主鏈同步

C++從零開始區塊鏈:區塊鏈業務模組之主鏈同步

同樣是採用一個簡單,但效率低下的方案,遍歷自己的鏈和其他節點的鏈,誰的長誰的就是主鏈。
然後將自己的鏈和主鏈進行比較,將自己的鏈上的區塊掛在主鏈上,掛的同時驗證一下自己的區塊是否已經存在於主鏈上,如果存在就跳過。

void BlockChain::MergeBlockChain(const std::string &json)
{
    std::list<Block> lst_block = GetBlockListFromJson(json);
    lst_block.pop_front();

    if (lst_block.size() > m_lst_block.size())
    {
        std
::list<Block>::iterator it; pthread_mutex_lock(&m_mutexBlock); for (it = m_lst_block.begin(); it != m_lst_block.end(); ++it) { Block block = lst_block.back(); if(it->proof <= block.proof) continue; std::string
strJson = GetJsonFromBlock(block); std::string strHash = Cryptography::GetHash(strJson.c_str(), strJson.length()); it->index = block.index + 1; it->previous_hash = strHash; lst_block.push_back(*it); } m_lst_block = lst_block; pthread_mutex_unlock(&m_mutexBlock); } else
{ std::list<Block>::iterator it; for (it = lst_block.begin(); it != lst_block.end(); ++it) { pthread_mutex_lock(&m_mutexBlock); Block block = m_lst_block.back(); if (it->proof <= block.proof) { pthread_mutex_unlock(&m_mutexBlock); continue; } std::string strJson = GetJsonFromBlock(block); std::string strHash = Cryptography::GetHash(strJson.c_str(), strJson.length()); it->index = block.index + 1; it->previous_hash = strHash; m_lst_block.push_back(*it); pthread_mutex_unlock(&m_mutexBlock); } } }