Documentation
¶
Index ¶
- func DisplayPeersInfo(url string)
- func MonitorSigners(url string, numBlocks int64, refresh int64)
- func MonitorSignersWS(url string, numBlocks int64)
- func SignersFromBlock(header *ethertypes.Header) (author common.Address, signers []common.Address, err error)
- type RedTNode
- func (rt *RedTNode) CurrentBlockNumber() (int64, error)
- func (rt *RedTNode) DisplayMyInfo()
- func (rt *RedTNode) DisplayPeersInfo()
- func (rt *RedTNode) DisplaySignersForBlockNumber(number int64, latestTimestamp uint64) uint64
- func (rt *RedTNode) EthClient() *ethclient.Client
- func (rt *RedTNode) HeaderByNumber(number int64) (*ethertypes.Header, error)
- func (rt *RedTNode) InitializeStats(numBlocks int64)
- func (rt *RedTNode) NodeInfo() (*p2p.NodeInfo, error)
- func (rt *RedTNode) Peers() ([]*p2p.PeerInfo, error)
- func (rt *RedTNode) RpcClient() *rpc.Client
- func (rt *RedTNode) SignerDataForBlockNumber(number int64) (*ethertypes.Header, *SignerData, error)
- func (rt *RedTNode) SignersForHeader(header *ethertypes.Header, latestTimestamp uint64) (map[string]any, uint64)
- func (rt *RedTNode) UpdateStatisticsForBlock(header *ethertypes.Header) (author common.Address, signers []common.Address, err error)
- func (rt *RedTNode) ValidatorInfo(validator common.Address) *ValInfo
- func (rt *RedTNode) Validators() []common.Address
- type SignerData
- type ValInfo
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DisplayPeersInfo ¶
func DisplayPeersInfo(url string)
func MonitorSigners ¶
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 SignersFromBlock ¶
Types ¶
type RedTNode ¶
type RedTNode struct {
// contains filtered or unexported fields
}
func NewRedTNode ¶
func (*RedTNode) CurrentBlockNumber ¶
func (*RedTNode) DisplayMyInfo ¶
func (rt *RedTNode) DisplayMyInfo()
func (*RedTNode) DisplayPeersInfo ¶
func (rt *RedTNode) DisplayPeersInfo()
func (*RedTNode) DisplaySignersForBlockNumber ¶
func (*RedTNode) HeaderByNumber ¶
func (rt *RedTNode) HeaderByNumber(number int64) (*ethertypes.Header, error)
func (*RedTNode) InitializeStats ¶
func (*RedTNode) SignerDataForBlockNumber ¶
func (rt *RedTNode) SignerDataForBlockNumber(number int64) (*ethertypes.Header, *SignerData, error)
func (*RedTNode) SignersForHeader ¶
func (*RedTNode) UpdateStatisticsForBlock ¶
func (*RedTNode) ValidatorInfo ¶
func (*RedTNode) Validators ¶
type SignerData ¶
Click to show internal directories.
Click to hide internal directories.