Skip to content

Commit 45461ec

Browse files
authored
Merge pull request nanmu42#58 from avislash/add-getblock-by-timestamp
This PR resolves nanmu42#57 .
2 parents d6a10b1 + e7ca702 commit 45461ec

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

block.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
package etherscan
99

10+
import "strconv"
11+
1012
// BlockReward gets block and uncle rewards by block number
1113
func (c *Client) BlockReward(blockNum int) (rewards BlockRewards, err error) {
1214
param := M{
@@ -16,3 +18,22 @@ func (c *Client) BlockReward(blockNum int) (rewards BlockRewards, err error) {
1618
err = c.call("block", "getblockreward", param, &rewards)
1719
return
1820
}
21+
22+
// BlockNumber gets closest block number by UNIX timestamp
23+
func (c *Client) BlockNumber(timestamp int64, closest string) (blockNumber int, err error) {
24+
var result string
25+
param := M{
26+
"timestamp": strconv.Itoa(int(timestamp)),
27+
"closest": closest,
28+
}
29+
30+
err = c.call("block", "getblocknobytime", param, &result)
31+
32+
if err != nil {
33+
return
34+
}
35+
36+
blockNum, err := strconv.ParseInt(result, 10, 64)
37+
blockNumber = int(blockNum)
38+
return
39+
}

block_e2e_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,23 @@ func TestClient_BlockReward(t *testing.T) {
2424
t.Errorf("api.BlockReward not working, got %s, want %s", j, ans)
2525
}
2626
}
27+
28+
func TestClient_BlockNumber(t *testing.T) {
29+
//Note: All values taken from docs.etherscan.io/api-endpoints/blocks
30+
const ans_before = 9251482
31+
const ans_after = 9251483
32+
33+
blockNumber, err := api.BlockNumber(1578638524, "before")
34+
noError(t, err, "api.BlockNumber")
35+
36+
if blockNumber != ans_before {
37+
t.Errorf(`api.BlockNumber(1578638524, "before") not working, got %d, want %d`, blockNumber, ans_before)
38+
}
39+
40+
blockNumber, err = api.BlockNumber(1578638524, "after")
41+
noError(t, err, "api.BlockNumber")
42+
43+
if blockNumber != ans_after {
44+
t.Errorf(`api.BlockNumber(1578638524,"after") not working, got %d, want %d`, blockNumber, ans_after)
45+
}
46+
}

0 commit comments

Comments
 (0)