1. 程式人生 > >C++從零開始區塊鏈:區塊鏈業務模組之工作量證明與驗證

C++從零開始區塊鏈:區塊鏈業務模組之工作量證明與驗證

原則上說,工作量證明演算法應該是計算困難,驗證容易,但我們這裡只為學習,一切從簡,使用一個簡單的工作量證明演算法:先取一個字串,如“Hello Shacoin!”,然後取一個自然整數,再將該整數轉成字串,銜接到前面的字串後面,形成一個新的字串。然後將這個新字串取雜湊,判斷雜湊的最後一位是不是為0,如果是,則工作量證明通過,不是再將整數加一,繼續重複上面的步驟,直到滿足驗證條件為止。為了簡化對該工作量證明是否已存在的驗證工作,每次證明都從上一次的結果處開始,並依次遞增。
工作量驗證要容易,直接把證明的結果作為引數,銜接到固定字串後面,然後取雜湊,再判斷最後一位是否為0,如果是驗證通過,否則驗證失敗。
如果想要提高工作量證明的難度,把驗證後一位是不是0提高到驗證後面的兩位,三位是不是連續的0即可

int BlockChain::WorkloadProof(int last_proof)
{
    std::string strHash;
    std::string strTemp;
    int proof = last_proof + 1;

    std::string str = "Hello Shacoin!";

    while (true)
    {
        strTemp = str + std::to_string(proof);
        strHash = Cryptography::GetHash(strTemp.c_str(), strTemp.length());
        if
(strHash.back() == '0') return proof; else ++proof; } } bool BlockChain::WorkloadVerification(int proof) { std::string str = "Hello Shacoin!" + std::to_string(proof); std::string strHash = Cryptography::GetHash(str.c_str(), str.length()); return (strHash.back() == '0'
); }