区块链

比特币:

  • 财产只受自己控制;
  • 无通胀
  • 无假钞
  • 流通性好
  • 去中心化记账系统

比特币原理

  • 账本如何验证
  • 所有权问题  
  • 为什么记账(挖矿
  • 以谁的账本为准(共识机制)

1. 账本如何验证

  Hash函数:Hash(原始信息)=摘要信息

  同样的原始信息用同一个哈希函数总能得到相同的摘要信息;

  原始信息任何变化都会哈希出不同的摘要信息;

  摘要信息无法逆向推算出原始信息  

 

第一个账本:

第二个账本:

 

 2.账户所有权问题:

  账号->地址

  转账:{

      “付款地址”:“29A39C68def89”

      "收款地址":"39EFRBD7978A"

      "金额":"0.5bt"

    }

谁能够用付款地址进行支付,就拥有账户的所有权。

地址:29A39C68def89

私钥:23sadfu8809sdfd8989asdf7987979aklwex

私钥经过哈希运算之后,就能得到比特币的地址 Hash(Hash(function(23sadfu8809sdfd8989asdf7987979aklwex))) = 29A39C68def89

交易签名: 对交易进行哈希得到摘要,用私钥对摘要进行签名。

签名过程:

hash('

{

  “付款地址”:“29A39C68def89”

  "收款地址":"39EFRBD7978A"

  "金额":"0.5bt"

}

')=8aDOABC798

sign("8aDOABC798","23sadfu8809sdfd8989asdf7987979aklwex")=3df89puyxcr89

交易摘要 + 私钥 = 签名信息

交易完成后进行广播,广播内容包括:交易原始信息和签名信息

验证:

  签名 + 付款地址 = 交易摘要

  verify("3df89puyxcr89","29A39C68def89")=8aDOABC798

代码表示:

if(verify("3df89puyxcr89","29A39C68def89")) == hash('{"付款地址":"29A39C68def89","收款地址":"39EFRBD7978A","金额":"0.5bt"}'){
  写入账本;
  广播;
}

 3.为什么记账

  记账就是一个hash计算的过程,会消耗资源,完成记账的节点会获取奖励;

  记账的规则:

    一段时间内只有一个人可以记账;

    通过解决密码学难题(即工作量证明)竞争获得唯一记账权;

    其他节点复制记账结果

工作量证明(挖矿):

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

  Hash(上一个Hash值,交易记录集,随机数) = 000000000aFD49813ER

通过更换随机数,算出符合规范的结果.

交易记录集:

  收集广播中还没有被记录账本的交易

  交易有效性的验证  

   添加一笔给自己转账的交易(挖矿奖励)

工作量分析:

  

得到一个零,需要计算16*16次.

 

 

 

    

posted @ 2018-12-03 11:07  kangjie  阅读(197)  评论(0编辑  收藏  举报