• home > theory > CST > blockchain >

    区块链矿池的分配模式及以太坊交易池处理逻辑

    Author:zhoulujun Date:

    随着时间的推移,挖矿的难度也越来越大,如果仍然靠单机去挖矿,几乎已经不可能了,所以就有矿池。所以只有大家加入到一个矿池,共享自己的算力,爆块后,根据不同的分配模式,奖励再分配给个人。

    产生背景

      当下各种以挖矿来获得收益的币种,随着时间的推移,挖矿的难度也越来越大,如果仍然靠单机去挖矿,几乎已经不可能了,所以就有矿池。例如按照当前的算力(20EH/s),一个20TH/s的矿机,挖到一个区块的时间为19年,也就是说如果单机挖矿需要19年才能获得奖励,这其中还不包括机器损耗、难度增大等因素,所以只有大家加入到一个矿池,共享自己的算力,爆块后,根据不同的分配模式,奖励再分配给个人。这种挖矿模式可以让个人的收益更加稳定,对于矿池而言,也会收取一些交易手续费。

    顺便我们来算下现在挖矿多少天能回本。以蚂蚁矿机为例,每台的算力大概为20TH/s,功率1700W,成本取5000元,全网算力取20EH/s,当前爆块奖励为12.5个比特币,价值45,000元,10分钟出一个区块,那么在不考虑电费、损耗等成本的前提下,回本时间约62天。
    全网十分钟收益:12.5 * 45,000 = 562,500
    单台矿机十分钟收益:562,500    / 20 / 1000 / 1000 * 20 = 0.5625元
    单台矿机每日收益:0.5625 * 6 * 24 = 81
    单台矿机回本时间:5000 / 81 ≈ 62天
    当然这也是在算力稳定的前提下,可惜算力在增加,难度也在增加,而且还有电费,所以实际回本时间是大于62天

    比特币全网算力趋势
    d3191b15ac4f835d83ebcdd4e3479d24.png

    备注:
    H为算力单位:即每秒进行的Hash数运算次数,1H=每秒运行1次Hash计算
    1KH/s = 每秒1,000次Hah计算
    1MH/s = 1000KH,每秒1,000,000次哈希。
    1GH/s = 1000MH,每秒1,000,000,000次哈希。
    1TH/s = 1000GH,每秒1,000,000,000,000次哈希。
    1PH/s = 1000TH,每秒1,000,000,000,000,000次哈希。
    1EH/s = 1000PH,每秒1,000,000,000,000,000,000,000次哈希。

    当前主流的矿池分配模式

    现在主流的矿池分配模式主要有PPS、PPLNS、PROP、RBPPS、PPS+

    PPS模式:Pay-Per-Share

    根据理论爆块分红,不管爆不爆块,你都会有立刻的奖励。它会根据你的算力在矿池中的占比,并估算了矿池每天可以获得的矿产,给你每天基本固定的收益。此奖励无需确认,可立刻获取到你的全矿池比例SHARE值分红。

    这种模式矿池要承担很大的风险,要有一定实力和算力的矿池才能做PPS,并且能避免矿池运营者幕后操纵。这种方式减少了矿工的风险,但将风险转移给了矿池的运营者。运营者可以收取手续费来弥补这些风险可能造成的损失。

    举例:

    假定你的算力是20TH/s,矿池算力1EH/s,全网算力20EH/s,按照当天的速度一天可以挖1800个比特币,那么矿池每天就会给你支付1800/20/1000/1000∗20=0.0018个比特币,而不论矿池是否能挖到1800/20=90个比特币,都需要支付你这么多


    PPLNS模式:Pay Per Last N Shares

    根据每个人自己贡献的股份数量占比来分配区块收益,也就是说对于一个区块收益的分配是根据每个人在过去这段时间内的贡献来分配的。这种模式的收益会有滞后性,因为只有当爆块了才会分配收益。所以这种模式你会明显感觉到刚开始加入到矿池时,收益明显比别人少,随着时间的推移,新的块产生,你的收益就和别人的收益持平了。同样,即使你你开矿池,已经产生的收益仍然会结算。

    举例:

    A算力10TH/s,参与当前块计算10分钟;B算力5TH/s,参与当前块计算10分钟;C算力5TH/s,参与当前块计算5分钟;那么当前块的收益就是按照$1010 : 510 : 5*5$的比例来分配


    PROP模式

    这个模式和PPLNS类似,PPLNS是区块产生了就分配收益,而PROP是等区块确认后才会分配收益,矿工的收益的滞后性更长,但从长远来看两种模式的收益是一样的。


    RBPPS模式

    和PPS模式一样,但是排除了死块、孤立块的奖励,需要确认是否是死块。在没有死块的情况下,收益和PPS一样。


    PPS+模式

    这种模式是PPS+PPLNS的合体,一个块的收益分为系统奖励、交易费,而这种模式就是将两种收益分成PPS、PPLNS两种模式来分配。比如比特币爆块奖励为12.5个比特币,这个块的交易费有0.5个比特币,那么分配方式就是系统奖励的12.5个比特币按照PPS来分配,交易费0.5个比特币按照PPLNS模式分配。

    矿池手续费

    不同的币种,不同的矿池,不同的分配模式手续费都可能不一样。由于不同的分配模式,矿池承担的风险也是不一样的,矿池承担的风险高,手续费也就高。

    以比特币矿池为例:

    • PPS:4%或更高

    • PPLNS:1%-1.5%

    • RPOP:1%左右

    • RBPPS:1.5-2.5%

    矿池弊端

      矿池的存在降低了数字货币的开采难度,实现了人人都可参与收益分配。但弊端也很明显,违背了区块链的初衷。矿池,掌握了大量的算力,而算力就是记账权,算力就是一切,如果单家算力超过51%,对于比特币等币种来说将会是一种灾难。

    最近7天比特币个矿池算力占比
    1518170996009.jpg

    以太坊交易池处理逻辑

    以太坊网络中,我们发送一笔交易时,可能发送成功,也可能发送失败,那么交易是如何判断能否发送成功的呢。当我们发送交易后,交易会被广播到矿工,矿工会监听交易的广播,然后把交易放到本地的交易池中等待处理,但是交易能否放到交易池中,以及在交易池中的交易如何处理的,具体如下:

    当交易进入交易池(tx_pool)时,矿工节点会做以下验证:

    1. 通过交易Hash判断交易在交易池中是否存在,如果存在就使用新的交易替换以前的交易

    2. 验证交易的合法性,如长度、value、是否溢出当前区块的GasLimit、Nonce值等、Gas是否足够,如果验证不通过就会返回对应的错误代码

    3. 验证是否孤儿交易,如果是就本地保存,不转发,防止DDOS攻击

    4. 如果交易池满了,就会验证交易Gas是否比当前交易池中的最低Gas低,如果低于交易池的最低Gas会返回ErrUnderpriced,如果高于最低值,就剔除最低Gas的交易。发生这种情况后,在etherscan中会发现在这笔交易pending中消失了(也有很大机率依然能够查到这笔交易在pending列表中,因为etherscan连接了很多节点,每个节点的交易池的状态都是不一样的,那条被踢出的交易可能在别的节点中仍然处于pending状态)

    5. 如果交易已经在交易池中,会判断Gas是否高于上一条相同Nonce的交易Gas某一个阈值(默认10%),如果Gas高于,就剔除前一笔交易,就使用新的交易替换前一笔交易,如果没有高于当前的交易就会返回失败

    6. 按顺序放入到交易池中,等待打包

    7. 等待新的交易加入到交易池,会重复上述步骤。

    在明白上述逻辑之前我们需要了解几个细节

    1. 矿工不能在一个区块中打包任意多的tx(只能尽可能多的打包),因为一个区块有GasLimit限制和区块大小限制。

    2. 矿工运行以太坊实例时,是可以根据需要修改最低的GasPrice值,这样可以过滤很多低Gas的交易。

    3. 交易池容纳的交易数默认是有上限的。以太坊的txpool中的pending集合(miner是从pending中拿交易组装block的)中容纳的交易数量默认设置为最大4096。但是在Geth v1.6.2中支持外部重置交易池默认配置。具体是–txpool.globalslots value。在Parity v1.6.8中也支持外部设置,具体是--tx-queue-size LIMIT。Parity默认是1024。一个账户默认只能放16条交易到pending中,满了以后,第17条乃至以后更多的交易会有一套规则来替换先前位于pending中的16条交易。

    转载原文链接:

    http://www.jouypub.com/2018/8823f06266014f493c405b0e55f3a0b5/  以太坊交易池处理逻辑


    转载本站文章《区块链矿池的分配模式及以太坊交易池处理逻辑》,
    请注明出处:https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/blockchain/8256.html