我们还考虑了其他想法,如把默克尔树从一笔交易的完整执行轨迹中抽取出来,以允许任意内容得到证明。在对简单性和完整性进行折中以后,我们选择了使用日志。 其次就是预编译的想法。预编译解决了允许复杂的加密计算在 EVM 中可用而不必处理 EVM 开销的问题。我们还提出过许多关于本地合约的雄心勃勃的想法。在这些想法中,如果矿工拥有关于某些合于的更优的实施方法,那么他们就会投票下调这些合约的燃料价格。如此一来,那些大多数矿工都能快速执行的合约自然就拥有更低的燃料价格了。然而,所有这些想法都被拒绝了,因为我们无法提出一种在加密经济学角度足够安全的方式来实现它。攻击者总是可以创建一些合约来执行带有活动门的加密操作,然后将活动门分发给自己和他们的朋友,从而能够更快地执行这个合约。随后,攻击者投票下调燃料价格并利用这一点对网络进行 DoS 攻击。相反,我们选择了一个不那么雄心勃勃的方法,即在协议中简单地指定较小的预编译数量,用于哈希和签名方案等常用操作。 加文也是最初支持开发协议抽象这一想法的关键人物。所谓协议抽象,就是将协议的众多部分,如以太币余额、交易签名算法、随机数等,作为合约迁移到协议本身中。其理论上的最终目标是要达到整个以太坊协议能够被描述为将函数调用加入到具有特定预初始化状态的虚拟机中的目标。我们没有足够的时间把这些想法都加入到最初的前沿版本中,不过预计这些原则将通过「君士坦丁堡」的一些变化、Casper 合约和分片规范慢慢开始被整合。 这些内容都在 PoC 7 中实现了。在 PoC 7 之后,该协议并没有真正发生太大的变化,除了一些轻微但在某些情况下十分重要的变动。这些细节将会在通过安全审计后公布。 到 2015 年初,尤塔·斯坦纳 (Jutta Steiner) 和其他人组织了发布前的安全审计,包括软件代码审计和学术审计。软件代码审计主要是在分别由加文和杰夫瑞主导的 C++和 Go 语言实现上。尽管我的 Pyethereum 实现也进行了一次简单的审计。在这两次学术审计中,一次由尤塔·埃雅尔 (Ittay Eyal) (因提出「自私挖矿」而成名) 负责进行的,另一次由安德鲁·米勒和 Least Authority 的其他成员进行。埃雅尔的审计导致了一个轻微的协议变更,即链的总难度值不会包含叔区块。由 Least Authority 负责的审计更侧重于智能合约、燃料经济学以及帕特里夏树。这次审计也导致了几处的协议变更。其中,比较小的一处变更是使用 sha3(addr) 和 sha3(key) 作为树的键值,而不是直接使用地址和键值。这将使得攻击者更难对树发起最坏攻击。 我们讨论的另一个重要的问题是燃料限制投票机制。那时候,我们已经对关于比特币区块大小的争论缺乏进展感到担忧,并希望在以太坊中拥有一个灵活的设计:该设计能够根据需要随时间调整。但面临的挑战是,最佳的限制是什么?我最初的想法是制定一个动态的限制,该限制是实际燃料使用量的长期指数移动平均值的 1.5 倍。因此,从长远来看,平均区块都会被占用 2/3 的容量。然而,安德鲁证明了这种限制在某些方面是可以被利用的——具体来说就是,想要提高限制的矿工仅需要把消耗大量燃料却只花费很少处理时间的交易都包含在他们自己的区块中,从而创建出满载区块且不会亏损成本。因此,至少从最终的结果来看,这个机制的安全模型相当于只是让矿工对燃料限制进行投票。 (责任编辑:admin) |