通過web3.js計算以太坊獎勵機制(交易費,區(qū)塊獎勵佛南,數(shù)塊獎勵)

交易獎勵(交易中的Gas消耗)

以太坊的EVM是“圖靈完備”的梗掰,為了防止出現(xiàn)死循環(huán)而導(dǎo)致服務(wù)不可用,所以引入了Gas嗅回。在程序的執(zhí)行過程中及穗,需要消耗Gas.Gas消耗完了,程序就不會繼續(xù)運行绵载。同時埂陆,以太坊還給每個區(qū)塊包含的程序消耗的總Gas設(shè)定了上限(Gas Limit)苛白,以免區(qū)塊中包含的程序過多,影響一些性能比較弱的節(jié)點焚虱。每個區(qū)塊能消耗的Gas上限也是可以調(diào)整的购裙,由礦工們進行投票決定,目前是6725538Gas鹃栽。

每筆交易中花費的Gas可以通過以下公式計算:

Gas = GasUsed * GasPrice

使用web3.js實現(xiàn)

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`轉(zhuǎn)為`Ether`
    return feel;
}

若是獲取一個區(qū)塊中消耗的交易費躏率,只要沒筆交易費,再乘上交易數(shù)量就可以了:

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;//區(qū)塊高度
    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;
  }
  

區(qū)塊獎勵&數(shù)塊獎勵

以太坊創(chuàng)造了一個新的名詞叔塊(Uncle Block),不能成為主鏈一部分的孤兒區(qū)塊民鼓,如果有幸被后來的區(qū)塊通過uncles字段收留進區(qū)塊鏈就變成了叔塊禾锤。如果一個孤兒區(qū)塊沒有被任何區(qū)塊收留,這個孤兒區(qū)塊還是會被丟棄摹察,不會進入?yún)^(qū)塊鏈恩掷,也就是說孤兒區(qū)塊被收留后才會變成叔塊

在以太坊的設(shè)計中,數(shù)塊也可以獲得獎勵供嚎,而且以后的區(qū)塊鏈如果誰收留了叔塊黄娘,收留叔塊的區(qū)塊也可以獲得額外獎勵。收留叔塊也被稱為包含叔塊克滴。

以太坊為什么要這么設(shè)計呢逼争?因為以太坊的區(qū)塊時間是20秒左右,相對于比特幣劝赔,更容易出現(xiàn)臨時分叉和孤兒區(qū)塊誓焦。而且較短的區(qū)塊時間,也使得區(qū)塊在整個網(wǎng)絡(luò)中更難以充分傳播着帽,尤其是對那些網(wǎng)速慢的礦工杂伟,這是一種極大的不公平。為了平衡各方利益仍翰,才設(shè)計了這樣一個叔塊機制赫粥。叔塊在全部挖掘出來的區(qū)塊中占的比例叫叔塊率,目前叔塊率在9.7%左右予借。

叔塊獎勵的計算公式如下:

叔塊獎勵 = (叔塊高度 + 8 - 包含叔塊的區(qū)塊的高度 * 普通區(qū)塊的獎勵/8

區(qū)塊獎勵的計算公式如下:

區(qū)塊獎勵 = 固定獎勵 + 區(qū)塊內(nèi)包含交易的交易費的總和 + 包含叔塊的獎勵

在以太坊瀏覽器上實踐區(qū)塊獎勵的計算

實踐這邊直接引用了以太坊(Ethereum ETH)的獎勵機制的介紹:
查看以太坊瀏覽器中4222300的區(qū)塊越平,由于我們是在主鏈上看到它的,所以它是普通區(qū)塊灵迫。

image.png

它的獎勵包含三部分:

  • 固定獎勵:5ETH
  • Gas總花費(也有人稱之為交易費):0.281837168043699381ETH
  • 將兩個叔塊包含進來的獎勵:5 * ( 1 / 32 ) * 2 = 0.3125ETH

在以太坊瀏覽器上實踐叔塊獎勵的計算

我們再來看一個叔塊0x1c2cbba0403f1079dcdb70e5971a87ce0fbc03d4572be30e2d17e4e4a0f136d5秦叛,是不是看著挺別扭,叔塊不方便用高度來表示瀑粥,因為同一個高度上已經(jīng)有了個主鏈區(qū)塊挣跋,就是這么慘。其實叔塊也是有高度的利凑,叔塊的父區(qū)塊的高度+1就是叔塊的高度浆劲。

image.png

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

計算獎勵代碼實現(xiàn)(web3.js)


//獲取普通區(qū)塊獎勵嫌术,以太坊在4370000高度以前是5 ether,之后是3ether
function getConstReward(height)  {
  if (height >= 4370000) {
      return 3;
  }
  return 5;
}

//包含一個數(shù)塊的獎勵
function getRewardForUncle(height,uncleNumber) {
  var reward = getConstReward(height);
  return (reward/32) * uncleNumber;
}

//獲取數(shù)塊獎勵,uHeight為數(shù)塊高度牌借,height為包含區(qū)塊高度
function getUncleReward(uHeight, height) {
 var  reward = getConstReward(height);
  reward = (uHeight + 8 - height) * reward / 8;
  return reward
}
//獲取區(qū)塊獎勵度气,TxsFee上面已經(jīng)提到如何獲得
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)的獎勵機制
以太坊的區(qū)塊獎勵
感興趣的同學(xué),可以看這兩篇文章膨报。講的挺清楚的磷籍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市现柠,隨后出現(xiàn)的幾起案子院领,更是在濱河造成了極大的恐慌,老刑警劉巖够吩,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件比然,死亡現(xiàn)場離奇詭異,居然都是意外死亡周循,警方通過查閱死者的電腦和手機强法,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湾笛,“玉大人饮怯,你說我怎么就攤上這事『垦校” “怎么了蓖墅?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長临扮。 經(jīng)常有香客問我论矾,道長,這世上最難降的妖魔是什么公条? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任拇囊,我火速辦了婚禮,結(jié)果婚禮上靶橱,老公的妹妹穿的比我還像新娘。我一直安慰自己路捧,他們只是感情好关霸,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杰扫,像睡著了一般队寇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上章姓,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天佳遣,我揣著相機與錄音识埋,去河邊找鬼。 笑死零渐,一個胖子當(dāng)著我的面吹牛窒舟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诵盼,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惠豺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了风宁?” 一聲冷哼從身側(cè)響起洁墙,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戒财,沒想到半個月后热监,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡饮寞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年狼纬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骂际。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡疗琉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出歉铝,到底是詐尸還是另有隱情盈简,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布太示,位于F島的核電站柠贤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏类缤。R本人自食惡果不足惜臼勉,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望餐弱。 院中可真熱鬧宴霸,春花似錦、人聲如沸膏蚓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驮瞧。三九已至氓扛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間论笔,已是汗流浹背采郎。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工千所, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒜埋。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓淫痰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親理茎。 傳聞我的和親對象是個殘疾皇子黑界,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容