《以太坊白皮书》解读一:比特币创新和局限

比特币的创新和局限

以太坊的角度观察比特币,对我很有启发,一方面是很多源自《精通比特币》中的概念的理解瞬间恍然大悟,另一方面能够从区块链的突飞猛进得到一个比特币全貌的了解。
中本聪的创新之处在于:将去中心化的网络结构中的共识问题与工作量证明进行完美结合。虽然工作量证明机制逐渐淡出,但是这种设计开创了区块链时代,奠定了后来区块链货币和协议的基础。

比特币交易:状态转换

比特币交易就是记录交易的状态转换。状态转换函数以当前状态和交易为输入,输出新的状态。

《以太坊白皮书》解读一:比特币创新和局限_第1张图片
比特笔交易的状态转换,UTXO的最好解释

状态转换函数APPLY(S,TX)->S’的结果:
引用的UTXO不存在于现在的状态中S,返回error;
签名与UTXO所有者的签名不一致,返回error;
所有的UTXO输入面值总额小于所有的UTXO输出面值总额,返回error;
交易完成,返回新状态S’,新状态S中移除了所有的输入UTXO,增加了所有的输出UTXO。

比特币挖矿

先来看看如何鉴定区块的有效性:

检查区块引用的上一个区块是否存在且有效。
检查区块的时间戳是否晚于以前的区块的时间戳,而且早于未来2小时。
检查区块的工作量证明是否有效。
将上一个区块的最终状态赋于S。
假设TX是区块的交易列表,包含n笔交易。对于属于0……n-1的所有i,进行状态转换S[i+1] = APPLY(S[i],TX[i])。如果任何一笔交易i在状态转换中出错,退出程序,返回错误。
返回正确,状态S[n]是这一区块的最终状态。

挖矿的工作就是对每个区块进行SHA256哈希处理,然后调整随机数(nounce值),使得到的长度为256比特哈希值小于一个不断动态调整的目标数值,这个目标数值每隔2016个区块重新设定一次,也就是调整计算难度,从而保证平均每十分钟生成一个区块。
再来看如何避免交易被篡改的可能,一笔交易产生后,付款方想要篡改记录,能做的只能是新发起一笔交易,付款方和收款方都是自己,然后采取两种阴谋:一将这笔交易插入在真实交易之前,但区块一旦生成,交易之间由默克树根的哈希进行锁定,不能在区块内篡改,所以此计不成,第二阴谋是将这笔交易装入新的区块,把这个区块插入包含真实交易的区块链前面,但是由于真实交易所在区块清晰记得自己的父区块,所以阴谋区块的结果就是区块链分叉,后续的区块又根据首选连接最长区块链原则,最终导致阴谋区块成为孤块(除非阴谋区块能够实现51%算力攻击,不过这样一是不值得,二是区块链网络越发展总算力越强,51%越难实现)。综上交易篡改几乎不可能。

默克尔树

默克尔树的伟大之处在于将复杂的层级存储的交易记录结构转变为一个哈希值,用一个数值表示,大大节省存储空间,也为简单支付验证SPV和轻钱包的实现带来可能(更适合移动互联网)。

比特币的局限

1、以比特币为基础的区块链新的共识不容易实现,想要再开发类似比特币的应用,需要创建独立的区块链和建立、测试所有状态转换和网络代码。
2、可以通过脚本对比特币交易的UTXO进行操作,实现基础的“智能合约”,但是脚本语言存在一些严重的限制:
脚本语言最主要的缺失是循环语句,不是图灵完备的;
价值盲(Value-blindness),定义:协议不能执行比总共存储在内的资金金额低的交易。也就是说检索时间内应用人要一次提出所有资金。UTXO脚本不能为账户的取款额度提供精细的的控制。这是UTXO机制和账户余额机制的区别;
UTXO缺少丰富的状态类型, UTXO只能是已花费或者未花费状态,这就不适合多阶段合约或者脚本。这使得实现多阶段期权合约、去中心化的交换要约或者两阶段加密承诺协议(对确保计算奖励非常必要)非常困难。这也意味着UTXO只能用于建立简单的、一次性的合约,而不是例如去中心化组织这样的有着更加复杂的状态的合约,使得元协议难以实现;
UTXO看不到区块链的数据,例如随机数和上一个区块的哈希。这一缺陷剥夺了脚本语言所拥有的基于随机性的潜在价值,严重地限制了博彩等其它领域应用。

参考内容:
《以太坊白皮书》

你可能感兴趣的:(《以太坊白皮书》解读一:比特币创新和局限)