以太坊交易確認數怎麼計算?

以太坊和比特幣同樣,都有一個最長鏈的概念,所以也有一個交易確認數的概念。 當一個以太坊交易所在區塊被新加入區塊鏈時,該交易的確認數爲1,以後每增長 一個區塊,該交易的確認數加1。顯然,一個以太坊交易的確認數越多,就意味着 該交易在區塊鏈中埋的越深,就越不容易被篡改。那麼,應該如何獲取一個以太坊 交易的確認數?web

若是要快速掌握以太坊應用開發,推薦匯智網的以太坊智能合約與DApp開發入門, 基於在線編程環境完成一個投票DApp的實戰開發,有問題還能夠諮詢助教。編程

要獲取一個以太坊交易的確認數,須要使用兩個RPC調用:json

首先利用eth_getTransactionReceipt調用獲取指定的交易收據,例如,下面的命令獲取交易0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238的收據:api

~$ curl -X POST --data '{ "jsonrpc":"2.0", "method":"eth_getTransactionReceipt", "params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"], "id":1}' http://localhost:8545 
複製代碼

在結果中能夠獲取該交易所在區塊編號:bash

{
"id":1,
"jsonrpc":"2.0",
"result": {
     ...
     blockNumber: '0xb', // 區塊11
     ...
  }
}
複製代碼

而後就能夠在隨後的任意時刻使用eth_blockNumber調用來獲取當前最新塊信息,例如:curl

~$ curl -X POST --data '{ "jsonrpc":"2.0", "method":"eth_blockNumber", "params":[], "id":83}' http://localhost:8545
複製代碼

在結果中能夠獲取當前最新一個區塊編號:async

{
  "id":83,
  "jsonrpc": "2.0",
  "result": "0xf" // 區塊15
}
複製代碼

用區塊鏈中最後一個區塊的編號,減去交易所在區塊編號,再加1,就能夠獲得一個以太坊交易的確認數了:函數

交易確認數 = 最新區塊號 - 交易所在區塊號 + 1 = 15 - 11 + 1 = 5
複製代碼

使用web3.js獲取以太坊交易確認數

基於上面的原理,咱們很容易編寫web3.js代碼來獲取以太坊交易確認數:區塊鏈

async function getTxConfirms(txhash){
  const receipt = await web3.eth.getTransactionReceipt(txhash)
  //later...
  const latest =  await web3.eth.getBlockNumber()
  //confirms
  return latest - receipt.number + 1
}
複製代碼

調用上面實現的getTxConfirms()函數,就能夠獲取指定交易當前的確認數了:ui

getTxConfirms('0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b')
  .then(confirms => console.log(confirms))
複製代碼

原文連接:以太坊交易確認數如何獲取 - 匯智網

相關文章
相關標籤/搜索