redt

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 18, 2023 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DisplayPeersInfo

func DisplayPeersInfo(url string)

func MonitorSigners

func MonitorSigners(url string, numBlocks int64, refresh int64)
 func (rt *RedTNode) SignersForBlockNumber(number int64, latestTimestamp uint64) (map[string]any, uint64) {

	data := make(map[string]any)

	// Get the block timestamp with the specified number
	currentHeader, err := rt.HeaderByNumber(number)
	if err != nil {
		log.Fatal().Err(err).Msg("")
	}
	currentTimestamp := currentHeader.Time

	// Calculate the elapsed time with respect to the latest one we received
	elapsed := currentTimestamp - latestTimestamp

	// Update the statistics in memory
	author, signers, err := rt.UpdateStatisticsForBlock(currentHeader)
	if err != nil {
		log.Fatal().Err(err).Msg("")
	}

	// Get the name of the node operator
	oper := rt.ValidatorInfo(author)

	// Determine the next node that should be proposer, according to the round-robin
	// selection algorithm
	var nextIndex int
	for i := 0; i < len(rt.valSet); i++ {
		if author == rt.valSet[i] {
			nextIndex = (i + 1) % len(rt.valSet)
			break
		}
	}
	nextProposer := rt.valSet[nextIndex]

	// Get the name of the node operator
	nextProposerOperator := rt.ValidatorInfo(nextProposer).Operator

	t := time.Unix(int64(currentTimestamp), 0)

	data["number"] = currentHeader.Number
	data["elapsed"] = elapsed
	data["timestamp"] = t
	data["operator"] = oper.Operator
	data["authorCount"] = rt.asProposer[author]
	data["authorAddress"] = author
	data["nextProposerOperator"] = nextProposerOperator

	data["gasLimit"] = currentHeader.GasLimit
	data["gasUsed"] = currentHeader.GasUsed

	var currentSigners = map[common.Address]bool{}

	for _, seal := range signers {
		currentSigners[seal] = true
	}

	st := make([]map[string]any, len(rt.Validators()))

	for i, val := range rt.Validators() {

		d := make(map[string]any)

		item := rt.ValidatorInfo(val)

		authorCount := rt.asProposer[item.Address]

		authorCountStr := fmt.Sprintf("%v", authorCount)
		if authorCount == 0 {
			authorCountStr = fmt.Sprintf("<span class='w3-badge w3-red'>%v</span>", authorCount)
		}
		if author.Hex() == item.Address.Hex() {
			authorCountStr = fmt.Sprintf("<span class='w3-badge'>%v</span>", authorCount)
		}

		d["authorCount"] = authorCountStr

		signerCount := rt.asSigner[item.Address]

		signerCountStr := fmt.Sprintf("%v", signerCount)
		if signerCount == 0 {
			signerCountStr = fmt.Sprintf("<span class='w3-badge w3-red'>%v</span>", signerCount)
		}
		if currentSigners[item.Address] {
			signerCountStr = fmt.Sprintf("<span class='w3-badge'>%v</span>", signerCount)
		}

		d["signerCount"] = signerCountStr

		d["operator"] = item.Operator
		d["address"] = item.Address

		st[i] = d

	}

	data["signers"] = st

	return data, currentTimestamp

}

func MonitorSignersWS

func MonitorSignersWS(url string, numBlocks int64)

func SignersFromBlock

func SignersFromBlock(header *ethertypes.Header) (author common.Address, signers []common.Address, err error)

Types

type RedTNode

type RedTNode struct {
	// contains filtered or unexported fields
}

func NewRedTNode

func NewRedTNode(url string) (*RedTNode, error)

func (*RedTNode) CurrentBlockNumber

func (rt *RedTNode) CurrentBlockNumber() (int64, error)

func (*RedTNode) DisplayMyInfo

func (rt *RedTNode) DisplayMyInfo()

func (*RedTNode) DisplayPeersInfo

func (rt *RedTNode) DisplayPeersInfo()

func (*RedTNode) DisplaySignersForBlockNumber

func (rt *RedTNode) DisplaySignersForBlockNumber(number int64, latestTimestamp uint64) uint64

func (*RedTNode) EthClient

func (rt *RedTNode) EthClient() *ethclient.Client

func (*RedTNode) HeaderByNumber

func (rt *RedTNode) HeaderByNumber(number int64) (*ethertypes.Header, error)

func (*RedTNode) InitializeStats

func (rt *RedTNode) InitializeStats(numBlocks int64)

func (*RedTNode) NodeInfo

func (rt *RedTNode) NodeInfo() (*p2p.NodeInfo, error)

func (*RedTNode) Peers

func (rt *RedTNode) Peers() ([]*p2p.PeerInfo, error)

func (*RedTNode) RpcClient

func (rt *RedTNode) RpcClient() *rpc.Client

func (*RedTNode) SignerDataForBlockNumber

func (rt *RedTNode) SignerDataForBlockNumber(number int64) (*ethertypes.Header, *SignerData, error)

func (*RedTNode) SignersForHeader

func (rt *RedTNode) SignersForHeader(header *ethertypes.Header, latestTimestamp uint64) (map[string]any, uint64)

func (*RedTNode) UpdateStatisticsForBlock

func (rt *RedTNode) UpdateStatisticsForBlock(header *ethertypes.Header) (author common.Address, signers []common.Address, err error)

func (*RedTNode) ValidatorInfo

func (rt *RedTNode) ValidatorInfo(validator common.Address) *ValInfo

func (*RedTNode) Validators

func (rt *RedTNode) Validators() []common.Address

type SignerData

type SignerData struct {
	Proposer string
	Signers  []string
}

type ValInfo

type ValInfo struct {
	Operator   string `json:"operator"`
	Enode      string `json:"enode"`
	Address    common.Address
	Signatures int
	Proposals  int
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL