比特币原理1


 

哈希函数:原始信息 = > 摘要信息同样的原始信息用同一个哈希函数总是能得到相同的摘要信息,原始信息的微小变化都会哈希出面目全非的摘要信息,从摘要信息无法逆向推算出原始信息。hash(序号,时间戳,交易信息) => 哈希值,哈希函数的怎么实现的?区块:序号,时间戳,哈希值 + 交易信息10分钟出块哈希值

 

 

Hash(Hash值 A, 上一个区块) = > Hash值 B,以此为规则,根据交易次数传递下去可以实现区块。

账户所有权问题

    账户  < -   地址,JSON格式转账记录

    {

             "付款地址 ": "DA5DSA5G54RJK9"

 

 

             "收款地址":“F8G75H3HT9RMH”

              "金额"      :   "0.2btc"

    }

    一个地址就是一个账户,一个地址有一个私钥,私钥是怎么产生的呢?RSA加密算法,实现RSA加密算法?

    私钥经过两次哈希运算可以得到账户地址,但是反过来就不行。

    那么问题是,账户所有者怎么证明拥有这个账户,也就是说证明自己拥有这个私钥,而又不泄露私钥呢?通过非对称 

    加密技术做交易签名 。签名过程:

    hash(交易记录) => 摘要

    hash('

            {

                   "付款地址":“AS23D3FSF4”

                    "收款地址":“DAD34SDAFG”

                    "金额"       :  "0.2btc"

            }

    ') -> 8a9dg5f1jh7h87

 

    sign("摘要","付款方地址(私钥)") -> 签名;(签名函数实现过程?)

    交易发生后,付款的节点会在整个网络中广播,广播内容包括交易记录 + 签名,节点传递广播内容,其他节点验证交易记录。

    节点验证过程:

    verify("签名信息","付款方地址(公钥)") -> 摘要 (verify函数实现?)

 

    if(verify("签名信息","付款地址")

            == hash('

                         {

                           "付款地址":“AS23D3FSF4”

                            "收款地址":“DAD34SDAFG”

                            "金额"       :  "0.2btc"

                          }

                         )

      )

      #写入账本(竞争记账,挖矿)

      #广播

      else:

            #do nothing

     }

挖矿:记账的节点会获取比特币奖励,记账奖励的过程就是比特币发行的过程、一次记账奖励12.5btc。比特币10分钟记账一次

通过工作量证明竞争获得唯一记账权。其他节点复制记账结果。

工作量证明:

       Hash(上一个hash值,交易记录集) = hash值

      Hash(上一个hash值,交易记录集,随机数) = 满足前18位是0的哈希值。最新找打满足条件的hash值的节点就获得唯一记账权(给自己挖矿奖励的转账)。

共识机制:如果两个节点同时完成工作量证明,使用谁的区块?节点工作量只有在其他的节点认同才是有效的。

累计工作量最大的区块链。(工作量怎么度量?)

如果链出现分叉,会在广播过程中发现最长的子链。

 

你可能感兴趣的:(区)