Json-Rpc
從 json rpc 獲取目前基本費用
我正在尋找一種使用 JSON RPC(並以 go-ethereum
ethclient.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