From c0024dd75c31277fe47d10cfbd78db805c879428 Mon Sep 17 00:00:00 2001 From: Ferran Borreguero Date: Thu, 7 Apr 2022 09:29:22 +0400 Subject: [PATCH] Add etherscan gas price (#182) * Add etherscan gas price * Update Changelog --- CHANGELOG.md | 1 + etherscan/etherscan.go | 14 ++++++++++++++ etherscan/etherscan_test.go | 8 ++++++++ website/pages/integrations/etherscan.mdx | 8 ++++++++ 4 files changed, 31 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23675d30..608f504b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # 0.1.1 (Not released) +- Add `etherscan.GasPrice` function to return last block gas price [[GH-182](https://github.com/umbracle/ethgo/issues/182)] - Add `4byte` package and cli [[GH-178](https://github.com/umbracle/ethgo/issues/178)] - Install and use `ethers.js` spec tests for wallet private key decoding [[GH-177](https://github.com/umbracle/ethgo/issues/177)] - Add `GetLogs` function Etherscan to return logs by filter [[GH-170](https://github.com/umbracle/ethgo/issues/170)] diff --git a/etherscan/etherscan.go b/etherscan/etherscan.go index 2f159f33..13086b4a 100644 --- a/etherscan/etherscan.go +++ b/etherscan/etherscan.go @@ -148,6 +148,20 @@ func (e *Etherscan) GetContractCode(addr ethgo.Address) (*ContractCode, error) { return out[0], nil } +func (e *Etherscan) GasPrice() (uint64, error) { + var out struct { + LastBlock string `json:"LastBlock"` + } + if err := e.Query("gastracker", "gasoracle", &out, map[string]string{}); err != nil { + return 0, err + } + num, err := strconv.Atoi(out.LastBlock) + if err != nil { + return 0, err + } + return uint64(num), nil +} + func (e *Etherscan) GetLogs(filter *ethgo.LogFilter) ([]*ethgo.Log, error) { if len(filter.Address) == 0 { return nil, fmt.Errorf("an address to filter is required") diff --git a/etherscan/etherscan_test.go b/etherscan/etherscan_test.go index a8d1762e..fa5c1e09 100644 --- a/etherscan/etherscan_test.go +++ b/etherscan/etherscan_test.go @@ -56,3 +56,11 @@ func TestGetLogs(t *testing.T) { assert.NoError(t, err) assert.NotEmpty(t, logs) } + +func TestGasPrice(t *testing.T) { + e := testEtherscanMainnet(t) + + gas, err := e.GasPrice() + assert.NoError(t, err) + assert.NotZero(t, gas) +} diff --git a/website/pages/integrations/etherscan.mdx b/website/pages/integrations/etherscan.mdx index 0da8ff4e..b95d436d 100644 --- a/website/pages/integrations/etherscan.mdx +++ b/website/pages/integrations/etherscan.mdx @@ -94,3 +94,11 @@ Input: Output: - `logs` : List of logs that match the filter. + +## GasPrice + +GasPrice returns the gas price of the latest block. + +Output: + +- `gasPrice` (`uint64`): Gas price of the latest block.