1、比特币概述
区块链中的数据是可检索,不可篡改的,实现主要依靠量大设计:数字签名和共识机制。
区块链技术是比特币的基础,比特币是对区块链技术的第一个成熟的应用。区块链是指通过去中心化去信任化的方式集体维护一个可靠数据库的技术方案。
比特币的区块链,其实就是拥有很多账单的账本,账单就是区块,账本就是区块链。
比特币体系中不存在单独货币,只存在交易单,每个人都有自己的账户ID,每次交易都会以交易单形式记录在账单上,货币值是依附于交易单存在的,余额通过追溯所有参与的交易单就可以推算得出。
这个账本记录用一种特殊的形式记录了比特币从诞生到现在所有的交易记录。每页账单只记录比特币全世界10分钟内的所有交易信息,因此每10分钟就会把所有新的交易单的数据汇集到一起,创建成为一个区块,而每个新创建的区块都会有一个指针指向上一个区块,越来越多的区块被连在一起就形成了区块链。
区块链非常聪明地把两个基于哈希值(函数算法)的数据结构结合起来:第一个时间结构是区块的哈希链,每一个区块都有一个区块头部,里面有一个哈希指针指向上一个区块。第二个数据结构是一个树状的数据结构(梅克尔树),它把区块内所有交易的哈希值进行排列储存,这样就可以通过树内路径快速搜索到区块内的某个需要的交易数据。
每页账单只记录比特币全世界10分钟内的交易信息。每10分钟一个新的账单被产生,所以账单随时间流逝会不断增多。每个人每一笔交易,在某页账单上会被记录。这个记录过程是比特币体系通过网络自动完成的。目前比特币世界运作了10年多,就有大概53万多页账单了。账单放在全世界唯一的总账本上,并且网络中每个用户都有一本。账单就是区块,总账本就是区块链。
2、如何交易
比特币的交易是通过签写交易单完成的,例如:b从a处获取的10个比特币,想用它购买c的产品,b需求写一个交易单,并向全网广播,具体交易流程如下:
a从某处获得10个比特币记录在Tx0,a转账给b,记录在Tx1,b转账给c,记录在Tx2。每个交易单都是进出双向记录的,类似于会计上的复式记账法。
来源,记录本次转账资金来源,有两个科目:上一次交易单的ID(上次交易单全文Hash值)、上次发送方的数字签名。
去向,记录本次转账资金的去向,主要包含三个科目:转账金额、接收方公钥、发送方的数字签名(加密资金来源交易单+接收方公钥生成的Hash值)。
每个节点收到Tx2之后进行如下验证:
1,通过ID找到Tx1交易单
2,获得b公钥
3,用b公钥对Tx2数字签名解密
4,比对Hash来验证
验证得出两个结论:1,b确实从a获得了10个比特币(Tx1上有a的签名)
2,b确实有10个比特币,而且b要给c10个比特币(Tx2上有b的数字签名)
交易的真实性得到有效验证,交易造假被杜绝。
3、如何记账
每一笔的交易以交易单形式向比特币全网广播,网络上每个节点都在接收全网的所有交易单,把他们放在本地一个临时的账单(区块)当中,所以用户都参与维护账单。
这样会出现以谁的账单为准的问题。每个节点在网时间不同,网络传输情况不同,接收到的交易单也可能不同,如何分辨对错就是记账权分配问题。目前有三种记账权分配机制:POW(Proof of Work,工作量证明),POS(Proof of Stake,权益证明),DPOS(Delegate Proof of Stake,股份授权证明)等,比特币中采用的是POW,越来越多的其他数字货币采用了POS和DPOS,或者是混合机制。
比特币采用的是POW工作量证明机制,其实就是计算能力的比拼。
这种机制隐含的逻辑是,努力工作的会计应该大概了是诚实可信的,这个会计在比特币中称为矿工,为了获得通过工作量证明获得记账权需要进行下面的工作:
1,收听全网广播,比对本地账本筛查拒绝掉一些不合理的交易单,将合理的新交易单记录在本地账单之中;2,计算一个随机数X,将X同本地账本衔接一起计算出一个Hash值;
3,Hash值需要前面若干位是0(位数调整影响计算难道),而这样的随机数很难算出,需要进行上一次的计算(挖矿过程);
4,一旦计算出来满足要求的随机数后,立即向全网广播,全网的其他节点用他们本地的账单+这个满足要求的随机数进行Hash值计算验证,验证通过之后就以该节点的账单为准进行对账。记账节点将获得比特币奖励;5,对账完成,进行新的一轮随机数计算比赛(挖矿比赛),继续争夺记账权。
另外:POS权益证明是进行权益大小比拼,根据持币数量和时间发放利息;而DPOS则是股份授权证明机制,实行电子民主,选取信任节点,成为受托人来保证通讯安全。
4、如何成链
传统账单的页码是连续数字的,而区块链账单的页码是前十位数字为0的超长随机数密码(Hash值,哈希算法生成)
在区块链账单中,需要指定上一页的页码,才能将区块有序排列。每个区块是使用密码箱签名与下一个区块“连接”起来的。区块头中的“本区块哈希值”相当于账单的“本页页码”,“父区块哈希值”相当于“上页页码”。而“页码”的具体数值是使用上一页“正文”的全文作为自变量,通过哈希函数生成的随机字符串。
网络里的计算机节点要争夺记账权,就必须随机生成到前十位数字是0的“页码,而随机数的前十位为0是个极端罕见的事件,因此整个区块链网络也需要花十分钟左右的时间,才能由某台计算机节点找到一个这样符合要求的”密码“
一旦找到,这台计算机节点就夺得了记账权,它所生成的新账单(区块)就会更新到网络中的所有计算机节点。账单(区块)通过上页页码(父区块哈希值)寻找父区块,自动链接成为总账本(区块链)。
最长的链条才被全网公认。如果某个人需要篡改数据,链条就会出现分支。为了让别人认可这条伪造的链条,他必须以个人理论维持这条链条知道长度大于真正的链条。由于工作量证明机制,单个节点的算力必须超过全网51%的算力才有可能超过真正的链条长度,随着系统的壮大和节点的广泛分布,这一点几乎不可能实现。