eth2345

DragonEx的Logo

ETH2345

ETH2345官方公告。
官网地址:https://www.eth2345.com

比特币挖矿的两种方式

发布于 2020-05-02 00:00:00 内容以 原文链接为准


比特币挖矿,一般有两种方式,早期一般都是solo方式,就是单枪匹马淘金,随着挖矿设备性能的指数级提高,solo已经无法保障收入,现在一般都是采用加入矿池的方式。

solo 方式

先上一个图



说明如下:

solo矿工一般通过bitcoind来网络上获得新的交易。
挖矿软件(比如50Miner,GUIMiner之类)周期性的调用RPC方法(getblocktemplate)来从bitcoind取得新交易
这个方法返回新交易的一览+coinbase交易
挖矿软件用得到的交易构筑一个新的区块,并创建一个80字节的区块头部。然后,挖矿软件把区块头部和难度设定传给挖矿硬件(比如CPU,GPU,ASIC等)
挖矿硬件穷举计算所有可能的头部nouce值,来寻找是否有符合难度设定的hash值。
如果没有,那么挖矿软件会在coinbase中追加额外的nouce值,再交给挖矿硬件来计算。
如果有,那么挖矿硬件把带有合适nouce值的区块头部返回给挖矿软件。
挖矿软件把区块头部+区块做成完成的区块传递给bitcoind。
bitcoind把区块广播到P2P网络,等待网络确认。

矿池方式

挖矿这个事情,计算量越来越大,矿工得到收益的概率不但在降低,而且越来越不稳定。所以出现了矿池方式,大家一起挖,挖到了以后收益按照出力的多少来分配。

基本做法是:矿池把目标难度降低几个数量级,然后分配给各个矿工,矿工可能找到了很多符合矿池目标值的header,这个被称为shares。
其中,某个header碰巧符合目标难度值,则被矿池提交给P2P网络,而收益按照各个矿工提交的shares多少来分配。

可以和上图比较下


也说明下:

矿池通过bitcoind来从P2P网络获得新交易
矿工的挖矿软件连接到矿池,采用下面的方法之一来取得用于构筑区块头部的信息。
getwork RPC
直接提供给矿工构筑好的区块头部,现在基本只用于solo方式,并且是0.9.5及以下版本。
getblocktemplate RPC
提供给矿工coinbase交易,所有的新交易,以及版本号等其他必须信息。其中难度值是矿池接受shares的难度值,而不是P2P网络的难度值。
矿工可以检查交易,甚至可以追加或者删除交易
RPC都是通过HTTP协议,为了保证矿工可以及时拿到新的header,一般采用长轮询方式(longpoll)
Stratum
用于替代getblocktemplate。矿池只发送用于构筑header最少的数据给矿工,以减少网络通信。
矿工不可以检查交易,也不能追加或者删除交易
利用TCP通信保持双向直接连接。
同solo方式的3
同solo方式的4
挖矿软件提供给矿池的是满足了矿池难度值要求的header,称为一个share
矿池把满足P2P网络难度值的区块广播到网络中。
本文大部分是对Bitcoin Developer Guide进行了翻译和整理,图片也是来自Bitcoin Developer Guide。另外夹杂了一部分其他渠道的内容。
————————————————
版权声明:本文为CSDN博主「沧桑之前丶青春之后」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

ETH2345, 专业区块链导航网站