以太坊的Ethash算法,以太坊(ETH)是什么

以太坊的Ethash算法,以太坊(ETH)是什么

一、以太坊(ETH)是什么

定义以太坊(Ethereum)是一个开源的、具有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether)提供去中心化的虚拟机(以太虚拟机EVM)来处理点对点合约。

以太坊的特点包括:第二层功能、以太币、智能合约。以太坊积极开发第二层功能来减轻主链负担,扩展其实用规模。以太币在区块链上作为支付交易手续费和运算服务的介质。智能合约是存储在区块链上的程序,用于协助和验证合约的谈判和运行。

以太币的汇率波动大,可能在短时间内大幅变化。布特林在2016年售出手上以太币的行为引发了质疑,但其解释为理财上分散风险。智能合约的公开性意味着漏洞可能被即时发现,但修正程序可能需要时间。

以太坊运行在Ethereum Main Network上,通过TCP 30303端口寻址。其共识规则由以太坊黄皮书精确定义。交易是网络消息,包含交易的发送方、接收方、价值和数据载荷。状态机由以太坊虚拟机(EVM)处理,执行字节码指令。数据结构采用Google的LevelDB数据库和Merkle Patricia Tree数据结构保存。

以太坊当前使用工作量证明算法Ethash,未来将切换到PoS(权益证明)算法。经济安全性依赖于算法的有效性。智能合约的许多细节仍在研究中,验证合约功能的工具和方法也在不断发展。

二、win32.troj.ethashminer.a.是什么病毒

因为使用某国产播放器(看看影音)后,感染了“挖矿病毒”—Win32.Troj.EthashMiner.a,病毒的表现如下:

1、发现电脑中C盘可使用空间骤降,且在C盘Ethash文件夹内,发现存在大量的1G左右的垃圾文件。

2、电脑闲置状态时,风扇转速增快,电脑发热增加,GPU使用率达到100%。非闲置状态时,恢复正常。

用常用的杀毒或者安全软件最新版本即可查杀。

三、ENYC是什么

ENYC

能链链(英文Energy chain)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币(ENYC)提供去中心化的虚拟机(“能量虚拟机” Energy Virtual Machine)来处理点对点合约。

中文名:能量链;

属性:区块链大健康平台;

外文名:Energy chain;

创始人:John Charles

产生背景

比特币开创了去中心化密码货币的先河,五年多的时间充分检验了区块链技术的可行性和安全性。比特币的区块链事实上是一套分布式的数据库,如果再在其中加进一个符号——比特币,并规定一套协议使得这个符号可以在数据库上安全地转移,并且无需信任第三方,这些特征的组合完美地构造了一个货币传输体系——比特币网络。

以太坊基于比特币网络拥堵所开发的区块链,且创建了基于区块链底层技术的平台。程序安装在这个虚拟机系统运行,如果是一台虚拟机和现在的也没太大区别,但是整个以太坊系统是可以由全球任何计算机加入到这个体系了,每台电脑只要安装了以太坊客户端就可以成为以太坊的一个节点一个虚拟机,所以整个以太坊系统未来规模再发展的话,可以说是全球超级计算机系统,人人都可以开发程序放在这个超级计算机运行。再说一点,这种模式的优点,现在的都是集中的云服务器,中心化的,可能有几个备份,但是一旦坏死,就不能运行,但是点对点的网络特点就是,就算几个节点下线了,或者被攻击了,有一部分在运行整个系统还是可以运行,抗风险抗错性很高。

EOS通过创建一个对开发者友好的区块链底层平台,类似区块链的操作系统,性能强大,可以支持多个应用程序同时运,可以同时支持多种编程语言,为开发dapp的开发者提供底层模块,降低开发门槛。

机遇比特币,以太坊,EOS都是机遇行业的基础建设,未能实现有效的应用。

ENYC基于大健康领域所开发的行业区块链底层平台,类似于大健康行业的底层操作系统。ENYC的核心算法为Ethash(Dagger-Hashimoto算法的改良版本),包括找到算法的随机数输入以使结果低于特定的难度阀值。要找到这样一个随机数,没有比列举可能性更好的策略,而解决方法的验证琐碎又廉价。由于输出有均匀分布(是散表功能应用的结果),我们可以保证,平均而言,需要找到这样一个随机数的时间取决于难度阀值。这使得只通过操纵难度来控制找到新区块的时间成为可能。

设计原则

简洁原则

ENYC协议将尽可能简单,即便以某些数据存储和时间上的低效为代价。一个普通的程序员也能够完美地去实现完整的开发说明。这将最终有助于降低任何特殊个人或精英团体可能对协议的影响并且推进ENYC作为对所有人开放的协议的应用前景。添加复杂性的优化将不会被接受,除非它们提供了非常根本性的益处。

通用原则

没有“特性”是ENYC设计哲学中的一个根本性部分。取而代之的是,ENYC提供了一个健康产业内部的图灵完备的脚本语言以供用户来构建任何可以精确定义的智能合约或交易类型。想建立一个全规模的守护程序(Daemon)或天网(Skynet),你可能需要几千个联锁合约并且确定慷慨地喂养它们,一切皆有可能。

模块化原则

ENYC的不同部分应被设计基于大健康行业模块化的和可分的。开发过程中,应该能够容易地让在协议某处做一个小改动的同时应用层却可以不加改动地继续正常运行。以太坊开发应该最大程度地做好这些事情以助益于整个加密货币生态系统,而不仅是自身。

无歧视原则

协议不应主动地试图限制或阻碍特定的类目或用法,协议中的所有监管机制都应被设计为直接监管危害,不应试图反对特定的不受欢迎的应用。人们甚至可以在ENCY之上运行一个无限循环脚本,只要他愿意为其支付按计算步骤计算的交易费用。

功能应用

ENYC是一个基于大健康产业平台,它上面提供各种模块让用户来搭建应用,如果将搭建行业应用比作造房子,那么ENYC就提供了墙面、屋顶、地板等模块,用户只需像搭积木一样把房子搭起来,因此在ENYC上建立应用的成本和速度都大大改善。具体来说,ENYC通过一套图灵完备的脚本语言(EnergyVirtual Machinecode,简称EVM语言)来建立应用,它类似于汇编语言,我们知道,直接用汇编语言编程是非常痛苦的,但ENYC里的编程并不需要直接使用EVM语言,而是类似C语言、Python、Lisp等高级语言,再通过编译器转成EVM语言。

上面所说的平台之上的应用,其实就是合约,这是ENYC的核心。合约是一个活在ENYC系统里的自动代理人,他有一个自己的ENYC-Coin地址,当用户向合约的地址里发送一笔交易后,该合约就被激活,然后根据交易中的额外信息,合约会运行自身的代码,最后返回一个结果,这个结果可能是从合约的地址发出另外一笔交易。需要指出的是,ENYC中的交易,不单只是发送ENYC而已,它还可以嵌入相当多的额外信息。如果一笔交易是发送给合约的,那么这些信息就非常重要,因为合约将根据这些信息来完成自身的业务逻辑。

合约所能提供的业务,几乎是无穷无尽的,它的边界就是你的想象力,因为图灵完备的语言提供了完整的自由度,让用户搭建大健康行业各种应用。

四、011:Ethash算法|《ETH原理与智能合约开发》笔记

待字闺中开发了一门区块链方面的课程:《深入浅出ETH原理与智能合约开发》,马良老师讲授。此文集记录我的学习笔记。

课程共8节课。其中,前四课讲ETH原理,后四课讲智能合约。

第四课分为三部分:

这篇文章是第四课第一部分的学习笔记:Ethash算法。

这节课介绍的是以太坊非常核心的挖矿算法。

在介绍Ethash算法之前,先讲一些背景知识。其实区块链技术主要是解决一个共识的问题,而共识是一个层次很丰富的概念,这里把范畴缩小,只讨论区块链中的共识。

什么是共识?

在区块链中,共识是指哪个节点有记账权。网络中有多个节点,理论上都有记账权,首先面临的问题就是,到底谁来记帐。另一个问题,交易一定是有顺序的,即谁在前,前在后。这样可以解决双花问题。区块链中的共识机制就是解决这两个问题,谁记帐和交易的顺序。

什么是工作量证明算法

为了决定众多节点中谁来记帐,可以有多种方案。其中,工作量证明就让节点去算一个哈希值,满足难度目标值的胜出。这个过程只能通过枚举计算,谁算的快,谁获胜的概率大。收益跟节点的工作量有关,这就是工作量证明算法。

为什么要引入工作量证明算法?

Hash Cash由Adam Back在1997年发表,中本聪首次在比特币中应用来解决共识问题。

它最初用来解决垃圾邮件问题。

其主要设计思想是通过暴力搜索,找到一种Block头部组合(通过调整nonce)使得嵌套的SHA256单向散列值输出小于一个特定的值(Target)。

这个算法是计算密集型算法,一开始从CPU挖矿,转而为GPU,转而为FPGA,转而为ASIC,从而使得算力变得非常集中。

算力集中就会带来一个问题,若有一个矿池的算力达到51%,则它就会有作恶的风险。这是比特币等使用工作量证明算法的系统的弊端。而以太坊则吸取了这个教训,进行了一些改进,诞生了Ethash算法。

Ethash算法吸取了比特币的教训,专门设计了非常不利用计算的模型,它采用了I/O密集的模型,I/O慢,计算再快也没用。这样,对专用集成电路则不是那么有效。

该算法对GPU友好。一是考虑如果只支持CPU,担心易被木马攻击;二是现在的显存都很大。

轻型客户端的算法不适于挖矿,易于验证;快速启动

算法中,主要依赖于Keccake256。

数据源除了传统的Block头部,还引入了随机数阵列DAG(有向非循环图)(Vitalik提出)

种子值很小。根据种子值生成缓存值,缓存层的初始值为16M,每个世代增加128K。

在缓存层之下是矿工使用的数据值,数据层的初始值是1G,每个世代增加8M。整个数据层的大小是128Bytes的素数倍。

框架主要分为两个部分,一是DAG的生成,二是用Hashimoto来计算最终的结果。

DAG分为三个层次,种子层,缓存层,数据层。三个层次是逐渐增大的。

种子层很小,依赖上个世代的种子层。

缓存层的第一个数据是根据种子层生成的,后面的根据前面的一个来生成,它是一个串行化的过程。其初始大小是16M,每个世代增加128K。每个元素64字节。

数据层就是要用到的数据,其初始大小1G,现在约2个G,每个元素128字节。数据层的元素依赖缓存层的256个元素。

整个流程是内存密集型。

首先是头部信息和随机数结合在一起,做一个Keccak运算,获得初始的单向散列值Mix[0],128字节。然后,通过另外一个函数,映射到DAG上,获取一个值,再与Mix[0]混合得到Mix[1],如此循环64次,得到Mix[64],128字节。

接下来经过后处理过程,得到 mix final值,32字节。(这个值在前面两个小节《 009:GHOST协议》、《 010:搭建测试网络》都出现过)

再经过计算,得出结果。把它和目标值相比较,小于则挖矿成功。

难度值大,目标值小,就越难(前面需要的 0越多)。

这个过程也是挖矿难,验证容易。

为防止矿机,mix function函数也有更新过。

难度公式见课件截图。

根据上一个区块的难度,来推算下一个。

从公式看出,难度由三部分组成,首先是上一区块的难度,然后是线性部分,最后是非线性部分。

非线性部分也叫难度炸弹,在过了一个特定的时间节点后,难度是指数上升。如此设计,其背后的目的是,在以太坊的项目周期中,在大都会版本后的下一个版本中,要转换共识,由POW变为POW、POS混合型的协议。基金会的意思可能是使得挖矿变得没意思。

难度曲线图显示,2017年10月,难度有一个大的下降,奖励也由5个变为3个。

本节主要介绍了Ethash算法,不足之处,请批评指正。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享