比特币和以太币对话二

以太币:本聪兄,昨天没有找你谈话,花了一天时间研究你的挖矿模式。

比特币:以太兄太努力啦。有什么心得可以分享?

以太币:接着前天聊的状态转移系统。如果我们进入一个可信任的中心服务系统,状态的转移就非常容易而且轻松,只要把信息转换成代码然后用中心化硬盘存储一下就可以了。

比特币:确实是。目前主流的交易都是这么干的。

以太币:但因为比特兄你是带着去中心化的任务来到这个世界上的。那现在就需要一个有共识机制的状态转换系统,这个共识机制是为了确保每一个人都同意交易的顺序。

比特币:是的。最一开始要开发这个共识系统确实费了本聪兄一些脑细胞啊。这种去中心化的共识过程要求网络上的所有节点不间断的尝试着运算,然后将交易写进新的区块。

以太币:关键还有这个网络被设计为每十分钟产生一个区块,每一个区块会包含时间戳,随机数,引用上一个区块数据的哈希值以及从上一个区块算起发生的所有交易列表。

比特币:嗯。随着时间的推移,这些区块不停的产生,而且一直是连续的。所有基于我的区块链是持续更新并且能显示最新的关于我的账本状态。为了验证一个新产生的区块到底是不是有效的,你知道我们是怎么计算的吗?

以太币:那我就用一个范式,简单的说一下了。第一就是看上一个区块的引用值所在的区块是否存在并有效。第二就是看时间戳是不是比上一个时间戳的值大。第三就是看区块上面的时间戳是不是有效的。第四就是将上一个区块的最终状态变为S()。第五就是假如TX是区块的交易列表,它包含n个交易。对于属于0….n-1的所有i,进行状态转化是S[i+1] =APPLY(S[i],TX[i]),假如状态转换i出错,交易退回,系统提示错误。假如是i状态转化没问题,交易写入,S[n]就是这一区块的最终状态的

比特币:是的,这个过程简单来说就是这样。

以太币:本质上来说,区块上的每一笔交易必须提供一个有效的状态转换。而状态本身并不会编码在区块上。它纯粹是被效验节点记住的抽象概念,对于任何区块来说,都可以从创世区块,按顺序加上每一个区块的每一笔交易,安全第计算出最新的状态来。另外需注意矿工将区块加入链上的顺序。假如有A和B两笔交易,B花了一个UTXO是来自A的,如果区块中A在B的前面,这个区块就是有效的。

比特币:是的,这样的前后顺序是必须的。

以太币:在账本清单中如果一个有效的状态在别的系统中不能被找到。就需要工作量证明。这个精确的状态就是每个区块的哈希比值,这个哈希比值是一个256比特的数值,它必须小于一个动态调整的目标数值,写这个白皮书时目标数值大约是2^187。工作量证明的目的就是让新区快的生成越来越难,从而有效防止女巫攻击,重新产生新的区块链。因为哈希SHA256是一个不可预测的伪随机函数,产生有效区块的唯一方式就是简单的试错,重复地增加随机数,看生成的哈希值是否匹配。

比特币:是的,整个计算过程是不断重复和试错的。

以太币:目前的目标数值是2^187,在一个有效的区块被写入之前,系统必须要做平均2^69次的实验。一般来说,每2016个区块生成以后,系统就要重新效验目标数值,这样可以确保网络中每10分钟生产一个新的区块。

比特币:对,每2016个区块以后改变难度。矿工们都很给力。

以太币:所以你为了奖励矿工的计算工作,让每一个包含交易产生区块的矿工拿到12.5个比特币,而这12.5个比特币并不是从别人交易里面获得,是从比特币的矿池挖出。除此之外,假如发现某笔交易的输入大于输出,那么中间的差额也是给到了矿工。顺便提一下,创世状态的时候是没有比特币的,矿工挖矿是产生比特币的唯一方式。

比特币:对,这算是比较完整的对挖矿的理解。

以太币:今天就说到这里吧。比特兄。明天我们用一个例子再一起看看挖矿的目的。

比特币:好的。以太兄看来你把我研究的很透彻啊。

以太币:必须的啊。知己知彼啊。

参考阅读

https://ethfans.org/posts/ethereum-whitepaper

https://github.com/ethereum/wiki/wiki/White-Paper

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180730G1550300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券