㈠ GHOST,DAG,SPECTRE,PHANTOM和CONFLUX技术原理
DAG概念,当做继比特币,以太坊后新的一代区块链技术(区块链3.0),那么DAG区块链是什么?DAG的由来是什么?它的技术理念是怎么样的?运行在DAG区块链上的协议有哪些?
要想解释DAG,离不开Yonatan Sompolinsky 和 Aviv Zohar两位以色列人,他们是DAG区块链这一概念的提出者。在DAG之前,Aviv Zohar提出了一个GHOST协议(以太坊初期就采用了GHOST协议),该协议解决的是链分叉带来的安全性问题,而分叉的区块链 在GHOST协议下数据结构就从一条链变成了一个树(Tree),而之后Aviv Zohar进一步提出了一个inclusive协议,在inclusive协议规则下,区块的结构就变成了有向无环图(DAG)。
接下来本文将:
1.介绍 GHOST协议,DAG由来 背后的 设计原理
2.介绍三种针对DAG型区块链设计的协议,SPECTRE、PHANTOM和CONFLUX。
GHOST协议是为了解决 分叉 导致 链安全性降低 的一个协议。
下边将通过解释什么是 分叉 ,为什么 分叉会降低链的安全性 , 链上扩容 为什么会导致更多分叉来详细介绍GHOST协议。
一笔比特币交易为什么要等6个区块的交易时长呢?
等待不是为了 防范51%攻击 的。落后6个区块,如果拥有超过51%的算力,只要足够长的时间,一定能够产生更长的链完成攻击。它是为了防止 分叉 带来的风险。
比特币在 理想情况 下,不同节点之间有相同的一条区块链,全部节点都是基于 同一个区块 进行挖矿,但当两个挖矿节点 几乎同时 挖到一个新的区块,当它们接收到对方产生的区块时,不同的节点将选择基于 其中一个 区块挖矿, 分叉 产生了。之后节点会根据哪条 分叉更长 ,选择哪条是主链进行挖矿,而不是主链的分叉区块全部被 抛弃 。
比特币每天都会发生 二分叉 ,但出现连续的 六次分叉 几乎不可能,于是要等待6个区块的确认时间。(这种分叉不是来自恶意攻击,是 偶然性以及网络延迟 导致的。
分叉将‘攻击不超过51%算力,比特币就是安全的’这一理论推翻。
在比特币中,当链有 分叉 时,将选择分叉 最长 的链作为主链,恶意攻击就是产生一条比主链更长的链 代替主链。
下图中蓝色区块代表诚实区块,红色代表攻击区块。2号、3号蓝色区块产生 分叉 ,此时攻击节点产生5个攻击区块(红色)就能产生一条 更长 的链完成攻击。虽然蓝色区块总数更多(有6个), 但分叉的区块没有增加链的长度 ,这种情况下,红色攻击方在算力(假设每个区块代表算力相同)没有超过51%的情况下攻击成功。
比特币当前安全的原因在于10分钟的区块时间降低了分叉可能性,但其实际安全算力仍低于51%,也就是说,不需要51%的算力也能攻击成功。
采用 大区块 以及 小的产出时间 将导致链有 很多分叉。
比特币当前处理交易量很低,改进这个缺陷一个可行方法就是 增大区块的大小和减小区块的产出时间 。大区块需要更多的网络传输时间、单位时间更多的区块数都会导致 更多的分叉 。
链上扩容的方案对比特币处理交易能力提升是巨大的 ,假如每个区块大小变为原来的八倍(8M),出块时间缩短为原来的五分之一(2分钟),理想情况下,比特币的处理交易量将变为原来的 40倍 ,实际情况会产生分叉,交易量不会有这么高。
主链选择中,采用计算最大子树来代替比特币中的最长链规则。
比特币的最长链规则在有分叉情况下,将降低链的安全性,分叉越多,安全性越低。链上扩容将导致更多分叉,导致链不安全。
Yonatan Sompolinsky提出GHOST规则, 当有分叉时,通过计算最大子树,也就是每条分叉拥有的所有区块数来决定哪条链是主链 。图0中,链在区块0后分叉了,上边分叉总计有6个蓝色区块,下边分叉有5个红色区块,蓝色区块1是主链,所以 红色攻击失败 。
在有大量分叉的情况下,GHOST规则将链安全性直接提到了51%,分叉对采用GHOST协议的链安全性没有影响。
根据GHOST规则,上图中虽然诚实节点产生了12个区块,但加入主链的只有4个区块,大量区块 被丢弃 ,假定比特币每个区块大小变为原来的八倍(8M),出块时间缩短为原来的十分之一(1分钟),分叉率为0.33(产生的区块加入主链的概率),比特币的处理交易能力将变为原来的 26.6倍 。
GHOST协议解决了链上扩容导致分叉带来的安全性问题。
区块的结构类型就从一条链变为树
在GHOST的提出后,Yonatan Sompolinsky提出一种新的设想,新产生的区块指向所有已知的分叉末端区块,即一个区块有多个父亲,此时 区块链就从一条链变为多条分叉链共同组成的的结构,这样的链结构就被叫做DAG(有向无环图) 。
Yonatan Sompolinsky进而提出了在DAG上运行的 inclusive协议 ,原理如下:
遗憾的是, Yonatan Sompolinsky之后并没有详细介绍补充该协议 ,而是提出了一种新思路的DAG协议——SPECTRE。
看完上边内容之后,你会发现, 最长链规则下,分叉的区块对比特币安全性和交易量没有任何贡献 ,白白的浪费了算力,而 GHOST通过计算分叉区块个数来提升链的安全性 ,但分叉区块除了纳入区块计数外,区块内包含的交易信息却全部 被丢弃 。
这种新的区块结构带来了新的特性,当然,比特币的 最长链规则 也可以在DAG上实施,只不过安全性和处理交易能力不佳,而GHOST协议可以提高安全性和处理交易能力,为了 最大化 利用DAG区块链特性,社区提出了不同的协议,接下来介绍Yonatan Sompolinsky 提出的 SPECTRE协议 ,以及 PHANTOM协议 ,以及国内某社区提出的 CONFLUX协议 。
丢弃主链概念,所有产生的区块共同构成账本,不丢弃任何一个区块
只要是产生的区块就不会被丢弃,所有的区块都是有效的,所有区块共同组成账本,这样进一步提高了区块链的处理交易能力, 该设计的关键在于设计算法来保证区块链不会被恶意攻击成功。
SPECTRE协议较为复杂,下边将从其如何产生区块、如何处理冲突交易以及产生可信交易集三个方面进行描述。
SPECTRE协议中,当产生区块时,要指向之前所有分叉的末端区块。
下图中,左边为比特币产生区块时,当有分叉出现,新区块将选择基于其中一个产生新的区块,而SPECTRE中,将基于所有分叉末端区块产生新的区块。同时,当有新区块产生时,节点要立刻将新区块(包含基于哪些区块产生这一信息)发送给与自己相连接的节点。
仔细观察,GHOST协议中虽然有分叉,但每个区块都只基于前边某一个区块产生,而SPECTRE协议中要基于当前节点知道的所有末端区块产生下一个区块。
SPECTRE协议将矿工维持交易不冲突的要求剥除
比特币就像一本 权威 的账本,只要是里边记录的,就一定是真的(不考虑分叉和恶意攻击),而SPECTRE产生的DAG就像一本 不权威 账本,里边的交易信息可能冲突(上边图1中两个1区块中可能包含冲突交易信息)。
该协议下,挖矿节点只 负责迅速挖区块 (能够达到1秒一个区块),而对分叉中可能包含的冲突交易在挖矿阶段并 不做任何处理 ,将记录交易速度最大化,让DAG这种区块链有着恐怖的处理交易能力。
是时候解决挖矿不解决的 冲突交易 问题了,SPECTRE的思路是设计一个计算投票的算法,让诚实区块会投票给诚实的区块,后边的诚实区块会给前边的 堆叠算力 ,从而让恶意攻击失败,其安全算力也是 51% 。
拿双花举例,下图中,X和Y区块中包含着两条冲突交易会导致双花,此时DAG中的区块会对X和Y进行投票, 决定哪一个交易有效。
投票规则如下,投X的标蓝,投Y的标红,X<Y代表X先于Y:
根据投票结果,X中的那条交易信息 有效 ,Y中对应的那条交易信息 无效 。 Yonatan Sompolinsky也对 不指向前边区块 以及 产生区块不发给邻居节点的恶意攻击 有进行分析,在投票规则中,低于50%算力的攻击者会失败。
投票听起来像是一个主动地中心化行为,实际上不是,程序根据当前DAG区块所处的状态自发完成这一区块投票计算过程,就相当于,给定一个DAG数据,输入为两条冲突信息,运行该规则算法,将得出一对冲突交易的哪一个为有效。
SPECTRE可信交易集就相当于超过当前6个区块的比特币链里组成的交易集合。 区块链从数字加密货币的角度来说,就是一个 账本 ,从账本上的交易信息中得出每个 账户 所拥有的货币,所以,得出 确定的、不可能更改 的交易信息就至关重要,SPECTRE可信交易集产生过程如下:
SPECTRE并不会对所有区块进行排序,所有区块没有一个完整的线形顺序,有的只是决定冲突信息先后的区块顺序对。
比特币中的高度代表的就是 线形顺序 ,高度低的区块中交易信息先于高度高的区块里的信息,高度高的区块就不能 包含和高度低的区块冲突的交易 ,而SPECTRE有大量的分叉,区块高度不能代表线形顺序,前边的区块交易信息不一定先于后边的分叉区块交易信息,交易信息的有效性要由投票算法来决定,区块投票算法很快,再加上它将 所有分叉区块 都包含进来,也就没有了比特币所面临的 分叉风险 (等待6个区块),交易确认时间可以达到10秒。
至此,和比特币相比,SPECTRE对应的DAG区块链有三个特点:
SPECTRE协议非常 适合DAG型数字加密货币 ,但当它用于智能合约时,它的缺陷就出来了,智能合约需要一个 严格的线性顺序 ,对此Yonatan Sompolinsky新设计了 PHANTOM 协议来对DAG区块形成一个 线性顺序 ,下边将详细介绍PHANTOM协议。
SPECTRE和PHANTOM是两个完整的独立的协议,不是一个对另一个的补充。
PHANTOM的挖矿机制和SPECTRE一样,会产生同样类型的DAG,不同的是PHANTOM通过对 区块连通度分析 ,判定区块诚实还是恶意,按照分类对区块排序,对DAG区块产生一个严格的 线性顺序 ,通过线性顺序来判断 冲突交易有效性 。
DAG中,攻击者有两种攻击手段, 一产生的区块不基于已知的末端区块,二不立即发布自己产生的区块 ,前者会让自己区块指向的区块变少,后者让其他节点产生的区块不会指向自己的区块,这两种情况都会导致这些恶意区块的与其它区块的 连接度低 。
诚实区块在考虑网络最大延迟下,经过一定时间一定会传遍整个网络,一定会被后边的区块所指向,诚实节点在产生新区块时也一定会指向自己所知道的末端区块。
通过对 区块指出去的边和指向该区块的边 进行分析,也就是区块的 连通度 ,当考虑最大的网络延迟,连通度会有一个 极限值K ,低于该值的区块可以被认定为恶意区块,在排序中要处于 劣势 。
接下来,进行区块 诚实和恶意 判定,判定分两步,第一步最重要, 实现复杂也耗费时间 ,主要为通过对区块连通度的判定,将强连通度的区块标为蓝色视为诚实区块,弱的标为红色视为恶意区块。
第二步 先对蓝色区块集排序 ,拓扑排序,然后对 红色区块集排序 。红色区块的顺序要处于弱势,例如上图中C,它处于A和I之间,那么它的顺序会排在I的前一个区块,而D、H都会排在C前。 注意通过考虑最大延迟时间设定连通度的值,几乎所有正常诚实节点产生的区块都会被标记为蓝色
至此,PHANTOM协议实现了对DAG的 线性排序 ,通过线性顺序就可以提取 无冲突交易集 ,进而提取 可信交易集 ,虽然耗时较长,满足智能合约的要求。
Yonatan Sompolinsky在PHANTOM协议论文结尾,提出一种将PHANTOM + SPECTRE结合起来的可能协议,没有详细展开介绍。下图是几种协议的对比:
至此,介绍了Yonatan Sompolinsky一开始从分叉导致不安全提出的GHOST,到后来将DAG引入区块链,设计了SPECTRE协议,以及为智能合约考虑的PHANTOM协议。接下来,介绍国内某社区提出的CONFLUX协议。
GHOST有 主链但丢弃分叉区块 ;SPECTRE 没有主链,包含所有分叉,但没有线性顺序 ;PHANTOM 没有主链,包含分叉且有线性顺序 ,而CONFLUX 即有主链,又是DAG,利用主链让DAG产生线性排序 ,下面将从挖矿机制和区块排序两方面来说明CONFLUX协议。
CONFLUX协议定义了根源边和参考边。 新区块是基于前一个主链区块产生的,新区块用根源边(实线)指向前一区块,用参考边(虚线)指向分叉的其他区块末端 ,如下图最后一个新区块实线指向H,虚线指向分叉末端区块K。 根源边用于代表区块基于哪个区块产生,给哪个区块堆叠算力,参考边用于表示分叉的其它区块产生在该区块之前。
挖矿过程如下:
根源边只能有一条,参考边可多条(视情况而定)
以主链区块为分割点,将DAG分段,段间段内设计简单排序算法
CONFLUX协议下产生的区块链如上(图2),接下来对其进行线性排序,排序算法如下:
通过上述排序,DAG有了一个 线性顺序 ,上图DAG区块顺序为 Genesis, A, B, C, D, F, E, G, J, I, H, and K 。接下来对该线性顺序的区块里的交易信息进行交易排序, 单一区块 里可能包含的冲突交易将直接按照该区块内交易信息排列 先后顺序 决定。
至此,CONFLUX对DAG所有区块产生一个 线性顺序 ,进而可以对区块内交易信息排序,产生 无冲突交易集 ,超过一定时间的无冲突交易组成 可信交易集 。 主链只是排序的标尺,作为分割时段的标准,CONFLUX包含所有分叉区块。
GHOST论文
Inclusive论文
SPECTRE论文
PHANTOM论文
CONFLUX论文
DAGlabs 相关讲解视频合集
㈡ 什么是DAG,DAG有发展前途吗
DAG(Directed acyclic graph),有向无环图,是计算机领域一个常用的数据结构,因为独特的拓扑结构所带来的一些特性,经常被用到处理动态规划,导航中寻求最短路径,数据压缩等场景中。从15年开始,区块链概念被单拎出来,这之前区块链还只是比特币技术里的一个数据结构,中本聪白皮书里把block和chain连一起的时候也只是a chain of blocks 。随着以太坊去中心化计算机的概念提出来,很多人开始把以太坊称作区块链2.0,而比特币被归到了区块链1.0。至于区块链3.0,市场上为了抢夺区块链3.0的冠名权打的不可开交,没准会是DAG。
㈢ 一文了解以太坊矿机及挖矿原理
在以前的文章中,我们分别了解了比特币挖矿和以太坊挖矿的区别。本文重点介绍以太坊挖矿及矿机部分。
以太坊是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币ETH提供去中心化的以太虚拟机来处理点对点合约。目前ETH的挖矿主要是通过显卡矿机,所谓显卡矿机,其实就是类似家用台式机,只不过每台机器里面有6-10张显卡,并且没有显示器(如图)。
图:显卡矿机
之所以以太坊没有发展出类似于BTC一样的ASIC矿机,主要是由于ETH的特殊挖矿机制决定的。
在ETH挖矿过程中,会产生一个DAG文件,该文件需要一直被调用,因此必须有专门的存储空间放置。这个对于存储空间的硬性需求会导致即使生产出来了ASIC芯片,也并不能大幅度降低单位算力的成本。简单来说,就是性价比很差。
以太坊的DAG大小自2016年6月份引入Dagger-Hashimoto 算法时的1GB开始,以每年约520MB的速度增大到了现在的 3.7G,预计2020年底以太坊的DAG大小将增加至4G。届时,显存小于4G的显卡都将被陆续淘汰。
还需要介绍一点的是,由于显卡矿机的体积通常是比特币矿机的2-4倍,而消耗的电力却只有比特币矿机的1/2甚至更低,这就导致一般人不愿意修建专门的显卡矿机矿场(因为矿场主要赚取的是电费差价,同样面积的场地,可以放置的显卡数量少,消耗的电量更少)。即使有少量的显卡矿场,收取的电费成本通常也比比特币矿机矿场的高。
㈣ 什么是DAG区块链技术
DAG全称是“有向无环图”,没有区块概念,不是把所有数据打包成区块,再用区块链接区块,而是每个用户都可以提交一个数据单元,这个数据单元里可以有很多东西,比如交易、消息等等。数据单元间通过引用关系链接起来,从而形成具有半序关系的DAG(有向无环图)。DAG的特点是把数据单元的写入操作异步化,大量的钱包客户端可以自主异步地把交易数据写入DAG,从而可以支持极大的并发量和极高的速度。同时,使用DAG技术的TrustNote还支持声明式智能合约,声明式的智能合约要表达的意思是可以直接按照用户想要的结果去写、去描述,以很简单的语言,让大家都能看懂的语言去描述他要干的事情。
截止到2017年年底,“高流量应用”越来越多,除了主流电商平台外,还有直播平台、P2P理财、今日头条、陌陌等崭露头角,如果“高流量应用”与DAG区块链技术结合,将会给行业带来哪些变革呢?除区块链自身的特点去中心化、分布式账本、不可篡改之外,DAG区块链技术不但可以支持高并发,结合双层共识机制,使用工作量证明共识算法,还能够防止“双花”问题。
那么,DAG如何支持高并发的呢?第一,数据不像比特币和以太坊一样强同步,而是弱同步,允许节点在同一时刻数据不一样,数据可以有一些微小的差别。第二,可以通过数据单元之间的引用来完成交易的确认,就是后面发生的单元去引用前面的单元,这样不需要我们把数据传给矿工,整个过程都是由自己去完成的,这个过程很快。DAG是解决高并发比较优美的方法,比起之前的闪电网络,还有其他一些方面,DAG有其先天优势。
再来看看DAG是如何防止“双花”?在有向图里如果能选出一个MainChain,这个时候会发现所有图里面的节点都可以用一种方法来给它做排序,把这个序号连接起来在一排,这张图将会变成跟区块链一样的序列结构,就是排完序的节点,而且每个节点是一个交易,而不是一个区块。所以,确定了主链,通过主链,可以形成全序。最后达到的结局就是在某一个逻辑状态里,交易还是被排序了,这是DAG最关键核心的部分。
“高流量应用”是随着节点数和交易数的增加平滑扩展,当这个节点数超过1亿或交易数超过并发100万时,DAG的特性刚好是交易越多越快,节点越多越快。
㈤ 一文了解以太坊挖矿算法及算力规模2020-09-09
以太坊网络中,想要获得以太坊,也要通过挖矿来实现。当前以太坊也是采用POW共识机制,但是与比特币的POW挖矿有点不一样,以太坊挖矿难度是可以调节的。以太坊系统有一个特殊的公式用来计算之后的每个块的难度。如果某个区块比前一个区块验证的更快,以太坊协议就会增加区块的难度。通过调整区块难度,就可以调整验证区块所需的时间。
以太坊采用的是Ethash 加密算法,在挖矿的过程中,需要读取内存并存储 DAG 文件。由于每一次读取内寸的带宽都是有限的,而现有的计算机技术又很难在这个问题上有质的突破,所以无论如何提高计算机的运算效率,内存读取效率仍然不会有很大的改观。因此,从某种意义上来说,以太坊的Ethash加密算法具有“抗ASIC性”。
加密算法的不同,导致了比特币和以太坊的挖矿设备、算力规模差异很大。
目前,比特币挖矿设备主要是专业化程度非常高的ASIC 矿机,单台矿机的算力最高达到了 112T/s(神马M30S++矿机),全网算力的规模达到139.92EH/s。
以太坊的挖矿设备主要是显卡矿机和定制GPU矿机,专业化的ASIC矿机非常少,一方面是因为以太坊挖矿算法的“抗 ASIC 性”提高了研发ASIC矿机的门槛,另一方面是因为以太坊升级到2.0之后共识机制会转型为PoS,矿机无法继续挖。
和ASIC矿机相比,显卡矿机在算力上相差了2个量级。目前,主流的显卡矿机(8卡)算力约为420MH/s,比较领先的定制GPU矿机算力约在500M~750M,以太坊全网算力约为235.39TH/s。
从过去两年的时间维度上看,以太坊的全网算力增长相对缓慢。
以太坊协议规定,难度的动态调整方式是使全网创建新区块的时间间隔为15秒,网络用15秒时间创建区块链,这样一来,因为时间太快,系统的同步性就大大提升,恶意参与者很难在如此短的时间发动51%(也就是半数以上)的算力去修改历史数据。
㈥ 为什么要用DAG作为底层技术相比别的以太坊和比特币底层技术,其优势是什么
DAG区块链与传统区块链工作机制不同之处在于,后者需要矿工完成工作量证明(PoW)来执行每一笔交易,而DAG区块链能摆脱区块链的限制来完成这样的操作。相反的是,在DAG区块链中一笔交易接着另外一笔,这意味着一笔交易能够对下一笔交易提供证明,由此一直排序下去。这些交易之间的连接就是DAG,就像区块通过哈希值来向整条区块链提供它们的名字一样。
在传统块链式区块链中,每笔交易要花费不少时间,而对于DAG区块链来说,交易时间将变得微不足道
㈦ 以太坊架构是怎么样的
以太坊最上层的是DApp。它通过Web3.js和智能合约层进行交换。所有的智能合约都运行在EVM(以太坊虚拟机)上,并会用到RPC的调用。在EVM和RPC下面是以太坊的四大核心内容,包括:blockChain, 共识算法,挖矿以及网络层。除了DApp外,其他的所有部分都在以太坊的客户端里,目前最流行的以太坊客户端就是Geth(Go-Ethereum)
㈧ 比特币和以太坊挖矿有什么区别
比特币采用的是SHA-256加密算法发,在挖矿的时候,比拼的是算力。为了提高算力,比特币经历了CPU挖矿、GPU挖矿、FPGA挖矿和现在的ASIC矿机挖矿四个阶段,专业化程度越来越高。
以太坊采用的是Ethash加密算法,在挖矿的过程中,需要读取内存并存储DAG文件。由于每一次读取内存的带宽都是有限的,而现有的计算机技术又很难在这个问题上有质的突破,所以无论如何提高计算机的运算效率,内存读取效率仍然不会有很大的改观。因此从某种意义上来说,以太坊的Ethash加密算法具有“抗ASIC性”.
加密算法的不同,导致了比特币和以太坊的挖矿设备、算力规模差异很大。
目前,比特币挖矿的、设备主要是专业化程度非常高的ASIC矿机,单台矿机的算力最高达到了110T/s,全网算力的规模在120EH/s以上。
以太坊的挖矿设备主要是显卡矿机,专业化的ASIC矿机非常少,一方面是因为以太坊挖矿算法的“抗ASIC性”提高了研发ASIC矿机的门槛,另一方面是因为以太坊升级到2.0之后共识机制会转型为PoS,矿机无法继续挖矿。
和ASIC矿机相比,显卡矿机在啊算力上相差了2个量级。目前,主流的显卡矿机(8卡)算力约为420MH/s,以太坊全网算力约为230TH/s.
从过去两年的时间维度上看,比特币的全网算力增长迅速,以太坊的全网算力增长相对缓慢。
比特币的ASIC矿机被几大矿机厂商所垄断,矿工只能从市场上购买;以太坊的显卡矿机,虽然也有专门的矿机厂商生产制造,矿工还可以根据自己的需求DIY,从市场上购买配件然后自己组装。
㈨ a卡挖eth用什么内核
可以用360驱动大师来安装,360驱动大师是一款专业解决驱动安装更新软件,百万级的驱动库支持,驱动安装一键化,无需手动操作,它可以智能检测硬件,匹配最合适驱动。
ifconfig 查看你是否开启网卡 /etc/init.d/network restart启动网卡 查看 cd /etc/sysconfig/network-scripts/ 是否有ifcfg-eth0这个文件 没有的话配置一个 内容 DEVICE=eth0 (哪张网卡) ONBOOT=yes BOOTPROTO=static。
a卡挖eth微内核:
微内核(Microkernelkernel)结构由一个非常简单的硬件抽象层和一组比较关键的原语或系统调用组成,这些原语仅仅包括了建立一个系统必需的几个部分,如线程管理,地址空间和进程间通信等。
微核的目标是将系统服务的实现和系统的基本操作规则分离开来。例如,进程的输入/输出锁定服务可以由运行在微核之外的一个服务组件来提供。这些非常模块化的用户态服务器用于完成操作系统中比较高级的操作,这样的设计使内核中最核心的部分的设计更简单。
㈩ 以太坊stratum协议原理
参照比特币的 stratum协议 和 NiceHash的stratum协议规范 编写了一版以太坊版本的stratum协议说明.
stratum协议是目前最常用的矿机和矿池之间的TCP通讯协议。
以太坊是一个去中心化的网络架构,通过安装Mist客户端的节点来转发新交易和新区块。而矿机、矿池也同时形成了另一个网络,我们称之为矿工网络。
矿工网络分成矿机、矿池、钱包等几个主要部分,有时矿池软件与钱包安装在一起,可合称为矿池。
矿机与矿池软件之间的通讯协议是 stratum ,而矿池软件与钱包之间的通讯是 bitcoinrpc 接口。
stratum是 JSON 为数据格式.
矿机启动,首先以 mining.subscribe 方法向矿池连接,用来订阅工作。
矿池以 mining.notify 返回订阅号、ExtraNonce1和ExtraNonce2_size。
Client:
Server:
其中:
是 订阅号 ;
080c是 extranonce ,Extranonce可能最大3字节;
矿机以 mining.authorize 方法,用某个帐号和密码登录到矿池,密码可空,矿池返回 true 登录成功。该方法必须是在初始化连接之后马上进行,否则矿机得不到矿池任务。
Client:
Server:
难度调整由矿池下发给矿机,以 mining.set_difficulty 方法调整难度, params 中是难度值。
Server:
矿机会在下一个任务时采用新难度,矿池有时会马上下发一个新任务并且把清理任务设为true,以便矿机马上以新难度工作。
该命令由矿池定期发给矿机,当矿机以 mining.subscribe 方法登记后,矿池应该马上以 mining.notify 返回该任务。
Server:
任务ID : bf0488aa ;
seedhash : 。每一个任务都发送一个seedhash来支持尽可能多的矿池,这可能会很快地在货币之间交换。
headerhash : 。
boolean cleanjobs : true 。如果设为true,那么矿工需要清理任务队列,并立即开始从事新提供的任务,因为所有旧的任务分享都将导致陈旧的分享错误。如果是 false 则等当前任务结束才开始新任务。
矿工使用seedhash识别DAG,然后带着headerhash,extranonce和自己的minernonce寻找低于目标的share(这是由提供的难度而产生的)。
矿机找到合法share时,就以” mining.submit “方法向矿池提交任务。矿池返回true即提交成功,如果失败则error中有具体原因。
Client:
任务ID : bf0488aa
minernonce : 6a909d9bbc0f 。注意minernonce是6个字节,因为提供的extranonce是2个字节。如果矿池提供3字节的extranonce,那么minernonce必须是5字节
Server:
一般的矿机与矿池通讯过程就如下所示: