Json-Rpc

從 json rpc 獲取目前基本費用

  • October 27, 2021

我正在尋找一種使用 JSON RPC(並以 go-ethereumethclient.Client作為客戶端)獲取目前基本費用的方法

我知道新的 JSON RPC eth_maxPriorityFeePerGas,它給了我第二個參數——但是這個端點並沒有回答基本費用問題

接近我預期結果的唯一方法是eth_gasPrice- eth_maxPriorityFeePerGas,這給了我很好的近似值,但數字與 etherscan 不匹配(塊視圖 -> 每氣體基本費用)並且似乎偏離了 0.5 到 10 GWEI 之間的任何值。

不幸的是,JSON RPC 不包含可以返回此數據的方法。

正如@Nulik 在評論中所建議的那樣,可以使用misc.CalcBaseFee()函式從 go-ethereum 庫中精確計算出這個值,其中可以收集配置params.MainnetChainConfig

雖然這不是直接解決方案(不要使用 JSON RPC),但它是唯一可用的解決方案。

完整的程式碼範例(刪除了簡短的錯誤處理):

package main

import (
   "context"
   "fmt"
   "math/big"

   "github.com/ethereum/go-ethereum/consensus/misc"
   "github.com/ethereum/go-ethereum/ethclient"
   "github.com/ethereum/go-ethereum/params"
)

const ethJSONRPCEndpointAddress = "http://path-to-json-rpc:8545"

func main() {
   config := params.MainnetChainConfig
   ethClient, _ := ethclient.DialContext(context.Background(), ethJSONRPCEndpointAddress)
   bn, _ := ethClient.BlockNumber(context.Background())

   bignumBn := big.NewInt(0).SetUint64(bn)
   blk, _ := ethClient.BlockByNumber(context.Background(), bignumBn)
   baseFee := misc.CalcBaseFee(config, blk.Header())
   fmt.Printf("Base fee for block %d is %s\n", bn+1, baseFee.String())
}

範例輸出:

Base fee for block 13102540 is 92382639576

Etherscan 同意這一估計

引用自:https://ethereum.stackexchange.com/questions/107814