挖矿

注意事项

目前不建议大家成为以太坊矿工。以太坊将过渡到权益证明共识机制(proof-of-stake),因此以太坊挖矿将过时。成为一名矿工需要投资购买挖矿设备,譬如数个GPU,可能还需要其他硬件如兼容计算机,要在实施PoS前赚回成本是不太可能的,因为首次集成PoW / PoS与分片和casper FFG (shasper)将使挖矿区块奖励大大减少,EIP 1011提议将其降低至0.6 枚ETH,但该方案遭到反对。待到实行完全PoS机制并集成Casper CBC后(还没开始进行,但已在路线图规划中),就没有挖掘一说了,因此也没有挖矿奖励。

简介

挖矿一词起源于与加密货币类似的黄金。黄金等贵金属稀缺,增加其总量的唯一方法就是挖矿。数字通证也一样稀缺,而在通证发行后,通证唯一的生产方式也是挖矿。但是,与黄金不同,数字通证的挖矿能够通过在区块链中创建、验证、发布和广播区块来维护网络安全。

挖以太币 = 维护网络安全 = 验证计算

挖矿到底是什么?

像所有区块链技术一样,以太坊前沿(Frontier)版本也使用激励驱动安全模型。选择总难度最高的区块,并达成共识。矿工生产区块,其他人验证区块的有效性。根据其他完备标准,仅当某个区块包含给定难度的工作量证明(PoW)时,该区块才有效。

所使用的PoW算法称为Ethash,是Dagger-Hashimoto的修改版本。要找到算法的随机数,以使计算结果小于特定阈值,该阈值取决于计算难度。PoW算法的核心在于,找到这种随机数的最佳策略是枚举可能性,并且验算计算结果的工作量小,成本低。如果输出值均匀分布,那么可以确保查找随机数所需的平均时间是取决于难度阈值的,因此仅通过调整难度就可控制出块时间。

对难度进行动态调整,以使整个网络平均每12秒产生一个区块,即区块时间为12秒。这种出块频率基本上可以不时介入系统状态的同步,并保证进行双花或重写历史记录是不可能的,除非攻击者拥有一半以上的网络挖矿算力(即所谓的51%攻击)。

参与网络的任何节点都可以是矿工,其预期的采矿收入将与其(相对)挖矿算力或哈希率成正比,即每秒被尝试的随机数数量。

Ethash PoW占用大量内存,因此基本上可以抗ASIC。这意味着计算PoW需要根据随机数和区块头来选择固定资源子集。此资源(数GB大小的数据)称为有向无环图(DAG,directed acyclic graph)。每隔30000个区块(即一个epoch,长达100个小时),DAG就完全不同,其生成需要一段时间。由于DAG仅取决于区块高度,因此它可以预先生成,但如果不仅是取决于区块高度,那么客户端则需要等到生成区块。在客户端真正提前对DAG进行预缓存之前,可能会在每个epoch之间出现大量的区块延迟。请注意,本质上不需要生成DAG来验证PoW,只需使用低级CPU和少量内存即可进行验证。

作为一种特殊情况,当从头开始启动节点时,只有在当前epoch的DAG完成构建之后,才会开始挖掘。

挖矿奖励

获胜PoW矿工将获得:

  • 静态区块奖励,包括3个以太币

  • 由获胜矿工提交的区块中的所有交易执行所消耗的所有gas费用将由交易发送者支持,作为给予获胜矿工的奖励。作为共识协议约定的一部分,产生的gas成本将发送到矿工的帐户。随着时间的流逝,预计gas奖励将使静态区块奖励变得微不足道。

  • 将叔块包括在区块中可获得额外奖励

基础设施概述

目前挖矿有两种方式:通过Mist客户端在CPU(或许是GPU)上进行,或者通过以太坊守护程序(daemon)和sgmine在GPU上进行。

JSON-RPC

外部挖矿应用程序与以太坊守护程序 (daemon,负责工作规定和报送) 之间通过JSON-RPC API进行沟通,其中使用了两种RPC函数:eth_getWorketh_submitWork