Files
zeekay 66121f3229 canonical: SubnetID → ChainID; drop redundant L1ID/SubnetID fields
Lux unifies subnet (validator-set) and chain identity into a single
ChainID — every chain identifies itself by its ChainID, no separate
'subnet identifier' needed.

Wire/interface changes (BREAKING — coordinated rollout):
  - node/message/wire: ChainSubnetPair struct → ChainPingEntry; collapsed
    duplicate SubnetId field; ChainSubnetPairs → ChainIds
  - node/proto/zap/p2p: SubnetID → ChainID
  - node/vms/chainadapter: ICPBlock/ICPSubnet SubnetID → ChainID
  - validators/uptime: Calculator interface params subnetID → chainID
  - consensus/core/router: Connected method param subnetID → chainID
  - p2p/message: outbound_msg_builder var renames

Config/UI changes (cleanup):
  - genesis/pkg/genesis ChainEntry: dropped redundant SubnetID field
  - tui/views/ChainStatus: dropped redundant SubnetID field
  - cli: comment cleanup
  - benchmarks: deploy-subnets var rename
2026-05-05 22:11:04 -07:00

64 lines
2.0 KiB
Go

// Package uptime provides uptime calculation functionality
package uptime
import (
"time"
"github.com/luxfi/ids"
)
// Calculator calculates uptime
type Calculator interface {
CalculateUptime(nodeID ids.NodeID, chainID ids.ID) (time.Duration, time.Duration, error)
CalculateUptimePercent(nodeID ids.NodeID, chainID ids.ID) (float64, error)
CalculateUptimePercentFrom(nodeID ids.NodeID, chainID ids.ID, from time.Time) (float64, error)
SetCalculator(chainID ids.ID, calc Calculator) error
}
// NoOpCalculator is a no-op implementation of Calculator
type NoOpCalculator struct{}
// CalculateUptime always returns 100% uptime
func (NoOpCalculator) CalculateUptime(ids.NodeID, ids.ID) (time.Duration, time.Duration, error) {
return 0, 0, nil
}
// CalculateUptimePercent always returns 100% uptime
func (NoOpCalculator) CalculateUptimePercent(ids.NodeID, ids.ID) (float64, error) {
return 1.0, nil
}
// CalculateUptimePercentFrom always returns 100% uptime
func (NoOpCalculator) CalculateUptimePercentFrom(ids.NodeID, ids.ID, time.Time) (float64, error) {
return 1.0, nil
}
// SetCalculator is a no-op
func (NoOpCalculator) SetCalculator(ids.ID, Calculator) error {
return nil
}
// ZeroUptimeCalculator is an implementation of Calculator that always returns 0% uptime.
// This is useful for testing scenarios where validators have "never connected".
type ZeroUptimeCalculator struct{}
// CalculateUptime always returns 0% uptime
func (ZeroUptimeCalculator) CalculateUptime(ids.NodeID, ids.ID) (time.Duration, time.Duration, error) {
return 0, 1, nil // 0 uptime out of 1 total (0%)
}
// CalculateUptimePercent always returns 0% uptime
func (ZeroUptimeCalculator) CalculateUptimePercent(ids.NodeID, ids.ID) (float64, error) {
return 0.0, nil
}
// CalculateUptimePercentFrom always returns 0% uptime
func (ZeroUptimeCalculator) CalculateUptimePercentFrom(ids.NodeID, ids.ID, time.Time) (float64, error) {
return 0.0, nil
}
// SetCalculator is a no-op
func (ZeroUptimeCalculator) SetCalculator(ids.ID, Calculator) error {
return nil
}