/
tobn.go
53 lines (46 loc) · 1.45 KB
/
tobn.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package tslib
import (
"fmt"
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base"
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/rpc"
"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/utils"
"github.com/ethereum/go-ethereum"
)
// FromDateToBn returns a chain-specific block number given a date string (date strings are valid JSON dates).
func FromDateToBn(chain, dateStr string) (uint64, error) {
ts, err := FromDateToTs(dateStr)
if err != nil {
return 0, err
}
ret, err := FromTs(chain, ts)
if err != nil {
return 0, err
}
return uint64(ret.Bn), err
}
// FromNameToBn returns the chain-specific block number (if found) given the name of a special block. The list of special blocks is per-chain.
func FromNameToBn(chain, name string) (uint64, error) {
if name == "latest" {
conn := rpc.TempConnection(chain)
meta, err := conn.GetMetaData(false)
if err != nil {
return 0, err
}
return meta.Latest, nil
}
specials, _ := GetSpecials(chain) // it's okay if it's empty
for _, value := range specials {
if value.Name == name {
return value.BlockNumber, nil
}
}
return uint64(utils.NOPOS), fmt.Errorf("block at %s returned an error: %w", name, ethereum.NotFound)
}
// FromTsToBn returns a chain-specific block number given a Linux timestamp.
func FromTsToBn(chain string, ts base.Timestamp) (uint64, error) {
ret, err := FromTs(chain, ts)
if err != nil {
return 0, err
}
return uint64(ret.Bn), err
}