通过web3.js计算以太坊奖励机制(交易费,区块奖励,数块奖励)

交易奖励(交易中的Gas消耗)

以太坊的EVM是“图灵完备”的,为了防止出现死循环而导致服务不可用,所以引入了Gas。在程序的执行过程中,需要消耗Gas.Gas消耗完了,程序就不会继续运行。同时,以太坊还给每个区块包含的程序消耗的总Gas设定了上限(Gas Limit),以免区块中包含的程序过多,影响一些性能比较弱的节点。每个区块能消耗的Gas上限也是可以调整的,由矿工们进行投票决定,目前是6725538Gas。

每笔交易中花费的Gas可以通过以下公式计算:

Gas = GasUsed * GasPrice

使用web3.js实现

async function getGas(){
    var web3 = new Web3();
    web3.setProvider(new web3.providers.HttpProvider("http://localhost:8545"));//初始化web3
    var txhash = "0x0d34221ebb8ce885d7f1c56170f4bec8d9d9b7bc0bb2273580785ee02a3b2fd4";//交易hash
    txResult = await web3.eth.getTransaction("txhash"); //获取交易信息
    txReceipt = await web3.eth.getTransactionReceipt("txhash");//获取交易的`TransactionReceipt`
    fee = (txReceipt.gasUsed)*  (txResult.gasPrice); //获取交易费
    fee = web3.utils.fromWei(fee.toString());//将交易费的单位从`Wei`转为`Ether`
    return feel;
}

若是获取一个区块中消耗的交易费,只要没笔交易费,再乘上交易数量就可以了:

GasInBlock = GasUsed * GasPrice * Txsnum

async function getGasInBlock(){
    var web3 = new Web3();
    web3.setProvider(new web3.providers.HttpProvider("http://localhost:8545"));//初始化web3
    var TxsFee = 0;
    var height = 2;//区块高度
    for(var i=0;i<txnum;i++){
        txResult = await web3.eth.getTransactionFromBlock(height,i);
        txReceipt = await web3.eth.getTransactionReceipt(txResult.hash);
        fee = (txReceipt.gasUsed)*  (txResult.gasPrice);
        fee = web3.utils.fromWei(fee.toString());
        TxsFee += parseFloat(fee);
      }
        return TxsFee;
  }
  

区块奖励&数块奖励

以太坊创造了一个新的名词叔块(Uncle Block),不能成为主链一部分的孤儿区块,如果有幸被后来的区块通过uncles字段收留进区块链就变成了叔块。如果一个孤儿区块没有被任何区块收留,这个孤儿区块还是会被丢弃,不会进入区块链,也就是说孤儿区块被收留后才会变成叔块

在以太坊的设计中,数块也可以获得奖励,而且以后的区块链如果谁收留了叔块,收留叔块的区块也可以获得额外奖励。收留叔块也被称为包含叔块。

以太坊为什么要这么设计呢?因为以太坊的区块时间是20秒左右,相对于比特币,更容易出现临时分叉和孤儿区块。而且较短的区块时间,也使得区块在整个网络中更难以充分传播,尤其是对那些网速慢的矿工,这是一种极大的不公平。为了平衡各方利益,才设计了这样一个叔块机制。叔块在全部挖掘出来的区块中占的比例叫叔块率,目前叔块率在9.7%左右。

叔块奖励的计算公式如下:

叔块奖励 = (叔块高度 + 8 - 包含叔块的区块的高度 * 普通区块的奖励/8

区块奖励的计算公式如下:

区块奖励 = 固定奖励 + 区块内包含交易的交易费的总和 + 包含叔块的奖励

在以太坊浏览器上实践区块奖励的计算

实践这边直接引用了以太坊(Ethereum ETH)的奖励机制的介绍:
查看以太坊浏览器中4222300的区块,由于我们是在主链上看到它的,所以它是普通区块。

image.png

它的奖励包含三部分:

  • 固定奖励:5ETH
  • Gas总花费(也有人称之为交易费):0.281837168043699381ETH
  • 将两个叔块包含进来的奖励:5 * ( 1 / 32 ) * 2 = 0.3125ETH

在以太坊浏览器上实践叔块奖励的计算

我们再来看一个叔块0x1c2cbba0403f1079dcdb70e5971a87ce0fbc03d4572be30e2d17e4e4a0f136d5,是不是看着挺别扭,叔块不方便用高度来表示,因为同一个高度上已经有了个主链区块,就是这么惨。其实叔块也是有高度的,叔块的父区块的高度+1就是叔块的高度

image.png

直接代入公式:
( 4222271 + 8 - 4222272 ) * 5 / 8 = 4.375ETH

计算奖励代码实现(web3.js)


//获取普通区块奖励,以太坊在4370000高度以前是5 ether,之后是3ether
function getConstReward(height)  {
  if (height >= 4370000) {
      return 3;
  }
  return 5;
}

//包含一个数块的奖励
function getRewardForUncle(height,uncleNumber) {
  var reward = getConstReward(height);
  return (reward/32) * uncleNumber;
}

//获取数块奖励,uHeight为数块高度,height为包含区块高度
function getUncleReward(uHeight, height) {
 var  reward = getConstReward(height);
  reward = (uHeight + 8 - height) * reward / 8;
  return reward
}
//获取区块奖励,TxsFee上面已经提到如何获得
function getBlockReward(web3,block,TxsFee)  {
       var reward = parseFloat(getConstReward(block.number));
       reward += TxsFee;
       ulen = block.uncles.length;
       if(ulen >0){
           reward += getRewardForUncle(block.number,ulen) ;
       }
       return reward;    
}

这边参考了两篇文章:
以太坊(Ethereum ETH)的奖励机制
以太坊的区块奖励
感兴趣的同学,可以看这两篇文章。讲的挺清楚的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容