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