加文在很大程度上使以太坊的愿景发生了十分微妙的变化:从一个用于构建可编程货币的平台——平台拥有基于区块链的合约,合约能够持有数字资产并且按照预先设置的规则进行转账——到一个通用的计算平台。这种变化从以太坊的着重点和术语的细微变化开始,后来随着我们对 Web 3 集成(它将以太坊视为去中心化技术套件的一部分,另外两部分是耳语协议和蜂群协议,图 1)的日益强调,这一影响也在不断地增强。 图 1 2014 年初前后,我们还根据其他人的建议作了一些修改。在安德鲁·米勒(Andrew Miller)等人提出回到基于栈的架构这一想法以后,我们最终还是回去了(图 2)。 图 2 查尔斯·霍斯金森(Charles Hoskinson)建议我们从比特币的 SHA256 转换为更新的 SHA3 (或者更准确地说,是 keccak256)。尽管有过一段时间争议,但通过与加文、安德鲁以及其他人进行讨论,我们还是确立了栈中的值的大小应该被限制在 32 Byte。而另一种替代方案——无限制整数——则仍在考虑当中,因为该方案存在一个问题,即我们很难计算出执行家加法、乘法以及其他操作到底需要多少燃料。 回到 2014 年 1 月,我们最初想到的挖矿算法是一个叫 匕首 (Dagger) 的东西。 匕首是根据有向无环图 (Directed Acyclic Graph, DAG) 命名的。DAG 是一种用在算法中的数学结构,其思想是每隔 N 个区块,就会有一个新的 DAG 由种子伪随机生成。并且,DAG 的底层将会是一个需要用几十亿字节来存储的节点的集合。然而,在 DAG 中,生成任意一个独立的值只需要计算计算几千个条目。一次匕首计算包含在这种底层的数据集中的任意位置获得一定数量的值,然后将这些值一起进行哈希运算。这意味着存在一种快速的方式可以进行匕首计算——已经将数据存储在内存中,然后以一种缓慢但不会导致内存紧张的方式——重新从 DAG 中生成你需要从头开始获取的每一个值。 这个算法的目的就是和当时流行的算法一样拥有相同的内存受限属性,就像 Scrypt 算法,但是仍然对轻客户端友好。矿工会使用快速的方法,所以他们的挖矿将受限于内存带宽 (理论上,消费者级别内存的优化程度已经足够高了,因此用 ASIC 对其进行进一步优化十分困难),但轻客户端可以使用内存宽松且缓慢的方式进行验证。快速方法可能只需几微秒,而慢速且内存宽松的方法可能需要几毫秒,所以这对轻客户端依然是可行的。 (责任编辑:admin) |