美文网首页
区块链学习入门笔记(一

区块链学习入门笔记(一

作者: abaeccdce206 | 来源:发表于2018-04-12 17:15 被阅读57次

    哈希函数

    哈希函数:Hash(原始信息入参) = 摘要信息(回参)

    哈希函数特点:

    • 同样的原始信息用同一个哈希函数总能得到相同的摘要信息
    • 原始信息任何微小的变化都会哈希出面目全非的摘要信息
    • 从摘要信息无法逆向推算出原始信息
     Hash(借给李四100万,利息1%,1年后还本息 …..) = AC4635D34DEF
    

    账本上记录了AC4635D34DEF这样一条记录。

    希函数有4个作用:

     *   简化信息
          哈希后的信息变短了。
    *    标识信息
         可以使用AC4635D34DEF来标识原始信息,摘要信息也称为原始 
         信息的id。
    *    隐匿信息
        账本是AC4635D34DEF这样一条记录,原始信息被隐匿。
    
    • 验证信息
      假如李四在还款时欺骗说,张三只借给李四10万,双方可以用 
      AC4635D34DEF来验证原始信息
      

    假设有一个账页序号为0的账页交易记录如下:

    账号 入账 出账 余额 备注说明
    王二 100 190 收到xxx货款
    张三 100 30 xxxx
    李四 120 90 170 xxxx

    记账时间为:2018-04-1 10:22:02

    区块链在记账是会把账页信息(包含序号、记账时间、交易记录)作为原始信息进行Hash, 得到一个Hash值,如:787635ACD, 用函数表示为:

    账页信息和Hash值组合在一起就构成了第一个区块。

    比特币系统里约10分钟记一次账,即每个区块生成时间大概间隔10分钟

    在记第2个账页的时候,会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash,即:

    这样第2个区块不仅包含了本账页信息,还间接的包含了第一个区块的信息。依次按照此方法继续记账,则最新的区块总是间接包含了所有之前的账页信息。

    所有这些区块组合起来就形成了区块链,这样的区块链就构成了一个便于验证(只要验证最后一个区块的Hash值就相当于验证了整个账本),不可更改(任何一个交易信息的更改,会让所有之后的区块的Hash值发生变化,这样在验证时就无法通过)的总账本。

    工作量

    区块链记账原理我们了解到,每次记账的时候回把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash。
    如果仅仅是这样,显然每个人都可以很轻松的完成记账。
    为了保证10分钟左右只有一个人可以记账,就必须要提高记账的难度,使得Hash的结果必须以若干个0开头。同是为了满足这个条件,在进行Hash时引入一个随机数变量。

    # Hash(上一个Hash值,交易记录集) = 456635BCD
    Hash(上一个Hash值,交易记录集,随机数) = 0000aFD635BCD
    

    我们知道改变Hash的原始信息的任何一部分,Hash值也会随之不断的变化,因此在运算Hash时,不断的改变随机数的值,总可以找的一个随机数使的Hash的结果以若干个0开头,率先找到随机数的节点就获得此次记账的唯一记账权。

           public boolean validProof(long last_proof, long proof) {
                    String guess = last_proof + "" + proof;
                    String guess_hash = new Encrypt().getSHA256(guess);
                    return guess_hash.startsWith("0000");
            }
    

    计算量分析

    Hash值是由数字和大小写字母构成的字符串,每一位有62种可能性(可能为26个大写字母、26个小写字母,10个数字中任一个),假设任何一个字符出现的概率是均等的,那么第一位为0的概率是1/62(其他位出现什么字符先不管),理论上需要尝试62次Hash运算才会出现一次第一位为0的情况,如果前两2位为0,就得尝试62的平方次Hash运算,以n个0开头就需要尝试62的n次方次运算。

    后面就是头大的加密算法了!~

    相关文章

      网友评论

          本文标题:区块链学习入门笔记(一

          本文链接:https://www.haomeiwen.com/subject/pmlfkftx.html