PoW这个概念最初来自比特币网络,它与人们通常所说的采矿一词密切相关。我们知道,在现实生活中,黄金或其他稀有贵金属需要通过艰苦的采矿工作获得。在以太坊区块链网络中,数字货币是稀有资源,也是通过采矿获得的。
然而,与黄金和贵金属开采不同,数字货币开采可以构建、验证、请求和传播块,表达为:以太币开采 = 确保网络安全= 计算验证PoW选择最困难的区块作为有效区块。矿工节点负责生产区块,其他节点负责验证区块。任何添加以太坊网络的节点都可以成为矿工。矿工通过采矿获得的收入大致与整个网络对统一(hashrate)成正比。以太坊以块数据的形式维护交易列表和最近状态。块号和难度系数存储在块头中。PoW算法也称为Ethash算法(即Dagger-Hashimoto算法改进版)。
通过快速计算试图找到合适的矿工节点Nonce值,使运算结果低于特定难度门限。PoW除了枚举,很难找到更好的方法来获得合适的方法Nonce很容易验证这个值是否符合要求。hash函数的输出数符合均匀分布,可以保证在平均意义上得到适当的分布Nonce值的时间与设定的难度值有关。
因此,网络可以通过调整难度系数来控制块时间。难度系数是动态调整的,以确保整个网络的平均块时间保持在15秒左右。这种心跳周期保证了系统状态的正常同步,也排除了分叉或篡改历史数据的可能性。除非攻击者能够拥有整个网络计算能力的一半以上(即51%攻击)。Ethash算法的瓶颈在于内存读写性能,即矿工不能使用更快的硬件,如ASIC、FPGA提高开采水平。
可以使用以太坊网络节点CPU采矿获得以太币奖励。这种采矿方式很难赚钱,因为GPU挖矿大致比CPU采矿效率高两个量级。但是,在Morden测试网络或者私有链上仍然可以通过CPU用于测试合同和交易的以太币奖励。当用户使用命令行工具时geth在访问以太坊网络时,不会默认开挖。通常需要使用—mine选项来开启CPU采矿模式,使用—minerthreads设置并行挖掘的线程数。采矿算法需要消耗大量内存并使用GPU挖矿时,每一个GPU生成DAG正常情况下需要1~2G的RAM如果程序返回内存空间Error GPU mining. GPU memoryfragmentation? 报错意味着硬件无法获得足够的内存。GPU挖矿是基于OpenCL实现的,所以AMD的GPU规格相同的NVIDIA的GPU工作更快。ASIC和FPGA不建议使用相对效率较低。
综上所述,以太坊使用PoW算法变更了Dagger-Hashimoto算法的原始特性,设计理念遵循以下几点:通过扫描块头的数据来计算种子值。M伪随机缓存字节大小。这个缓存将存储在轻客户端。根据缓存可以得到1G字节大小的数据集依赖于缓存中的一小部分输入。整个节点和矿工需要保存数据集。随着时间的推移,数据集占用的空间呈线性增长。采矿过程是从数据集中抽取随机切片并计算hash值的过程。通过缓存中的数据生成特定的数据集切片,只需要小内存进行区块验证。因此,验证节点只需存储缓存。