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  }