Skip to content

Commit 537f023

Browse files
authored
Merge branch 'cosmostation:develop' into develop
2 parents fd7c6b3 + 9dec8a5 commit 537f023

File tree

7 files changed

+93
-3
lines changed

7 files changed

+93
-3
lines changed

docker/cvms/support_chains.yaml

+12
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,18 @@ lumera-testnet-1:
765765
- block
766766
- upgrade
767767
- uptime
768+
ledger-testnet-1:
769+
chain_name: lombard
770+
protocol_type: cosmos
771+
mainnet: false
772+
support_asset:
773+
denom: ulom
774+
decimal: 6
775+
packages:
776+
- block
777+
- upgrade
778+
- uptime
779+
- voteindexer
768780
mantle-1:
769781
chain_name: asset-mantle
770782
protocol_type: cosmos

internal/packages/babylon/finality-provider/api/api.go

+17-3
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,16 @@ func GetFinalityProviderUptime(exporter *common.Exporter) (types.BabylonFinality
3434

3535
exporter.Debugf("got active finality providers: %d", len(activeProviders))
3636

37+
fpInfoList, jailedCnt := addActiveStatus(activeProviders, finalityProviderInfos)
38+
fpTotal := types.FinalityProviderTotal{
39+
Active: len(activeProviders),
40+
Inactive: len(finalityProviderInfos) - len(activeProviders),
41+
Jailed: jailedCnt,
42+
Unjailed: len(finalityProviderInfos) - jailedCnt,
43+
}
44+
3745
// 5. get lity providers' uptime status
38-
finalityProviderUptimeStatus, err := commonapi.GetFinalityProviderUptime(exporter.CommonClient, addActiveStatus(activeProviders, finalityProviderInfos))
46+
finalityProviderUptimeStatus, err := commonapi.GetFinalityProviderUptime(exporter.CommonClient, fpInfoList)
3947
if err != nil {
4048
return types.BabylonFinalityProviderUptimeStatues{}, errors.Wrap(err, "failed to get babylon finality providers uptime")
4149
}
@@ -72,17 +80,23 @@ func GetFinalityProviderUptime(exporter *common.Exporter) (types.BabylonFinality
7280
MinSignedPerWindow: minSignedPerWindow,
7381
FinalityProvidersStatus: finalityProviderUptimeStatus,
7482
LastFinalizedBlockInfo: LastFinalizedBlockInfo,
83+
FinalityProviderTotal: fpTotal,
7584
}, nil
7685
}
7786

78-
func addActiveStatus(activeProviders []commontypes.FinalityProvider, finalityProviderInfos []commontypes.FinalityProviderInfo) []commontypes.FinalityProviderInfo {
87+
func addActiveStatus(activeProviders []commontypes.FinalityProvider, finalityProviderInfos []commontypes.FinalityProviderInfo) ([]commontypes.FinalityProviderInfo, int) {
7988
activeFpMap := make(map[string]commontypes.FinalityProvider, len(activeProviders))
8089
for _, fp := range activeProviders {
8190
activeFpMap[fp.BtcPkHex] = fp
8291
}
8392

93+
jailedCnt := 0
8494
// Modify the original slice using index-based iteration
8595
for i := range finalityProviderInfos {
96+
if finalityProviderInfos[i].Jailed {
97+
jailedCnt++
98+
}
99+
86100
fp, exist := activeFpMap[finalityProviderInfos[i].BTCPK]
87101
if exist {
88102
// NOTE: fp.VotingPower must will be integer, so no need to check error
@@ -92,7 +106,7 @@ func addActiveStatus(activeProviders []commontypes.FinalityProvider, finalityPro
92106
}
93107
}
94108

95-
return finalityProviderInfos
109+
return finalityProviderInfos, jailedCnt
96110
}
97111

98112
func getLastFinalizedBlockInfo(votes []string, fps []commontypes.FinalityProvider) types.LastFinalizedBlockInfo {

internal/packages/babylon/finality-provider/collector/collector.go

+16
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ const (
2929
LastFinalizedBlockMissingVotesCountMetricName = "last_finalized_block_missing_votes_count"
3030
LastFinalizedBlockMissingVPMetricName = "last_finalized_block_missing_vp"
3131
LastFinalizedBlockFinalizedVPMetricName = "last_finalized_block_finalized_vp"
32+
33+
METRIC_NAME_FINALITY_PROVIDERS_TOTAL = "finality_providers_total"
3234
)
3335

3436
func Start(p common.Packager) error {
@@ -113,6 +115,15 @@ func loop(exporter *common.Exporter, p common.Packager) {
113115
ConstLabels: packageLabels,
114116
})
115117

118+
fpTotalMetric := p.Factory.NewGaugeVec(prometheus.GaugeOpts{
119+
Namespace: common.Namespace,
120+
Subsystem: Subsystem,
121+
Name: METRIC_NAME_FINALITY_PROVIDERS_TOTAL,
122+
ConstLabels: packageLabels,
123+
}, []string{
124+
common.StatusLabel,
125+
})
126+
116127
isUnhealth := false
117128
for {
118129
// node health check
@@ -178,6 +189,11 @@ func loop(exporter *common.Exporter, p common.Packager) {
178189
Set(item.VotingPower)
179190
}
180191
}
192+
193+
fpTotalMetric.With(prometheus.Labels{common.StatusLabel: "active"}).Set(float64(status.FinalityProviderTotal.Active))
194+
fpTotalMetric.With(prometheus.Labels{common.StatusLabel: "inactive"}).Set(float64(status.FinalityProviderTotal.Inactive))
195+
fpTotalMetric.With(prometheus.Labels{common.StatusLabel: "jailed"}).Set(float64(status.FinalityProviderTotal.Jailed))
196+
fpTotalMetric.With(prometheus.Labels{common.StatusLabel: "unjailed"}).Set(float64(status.FinalityProviderTotal.Unjailed))
181197
} else {
182198
for _, item := range status.FinalityProvidersStatus {
183199
if ok := helper.Contains(exporter.Monikers, item.Moniker); ok {

internal/packages/babylon/finality-provider/types/status.go

+8
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ type BabylonFinalityProviderUptimeStatues struct {
55
SignedBlocksWindow float64
66
FinalityProvidersStatus []FinalityProviderUptimeStatus
77
LastFinalizedBlockInfo
8+
FinalityProviderTotal
89
}
910

1011
type FinalityProviderUptimeStatus struct {
@@ -22,3 +23,10 @@ type LastFinalizedBlockInfo struct {
2223
MissingVP float64
2324
FinalizedVP float64
2425
}
26+
27+
type FinalityProviderTotal struct {
28+
Active int
29+
Inactive int
30+
Jailed int
31+
Unjailed int
32+
}

internal/packages/consensus/uptime/api/uptime.go

+9
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,20 @@ func getValidatorUptimeStatus(c common.CommonApp, chainName string, validators [
6666

6767
// 3. make pubkey map by using consensus hex address with extracted valcons prefix
6868
pubkeysMap := make(map[string]string)
69+
vpMap := make(map[string]float64)
6970
for _, validator := range validators {
7071
bz, _ := hex.DecodeString(validator.Address)
7172
consensusAddress, err := sdkhelper.ConvertAndEncode(bech32ValconsPrefix, bz)
7273
if err != nil {
7374
return nil, common.ErrFailedConvertTypes
7475
}
7576
pubkeysMap[validator.Pubkey.Value] = consensusAddress
77+
78+
vp, err := strconv.ParseFloat(validator.VotingPower, 64)
79+
if err != nil {
80+
return nil, common.ErrFailedConvertTypes
81+
}
82+
vpMap[validator.Pubkey.Value] = vp
7683
}
7784

7885
// 4. Sort staking validators by vp
@@ -91,6 +98,7 @@ func getValidatorUptimeStatus(c common.CommonApp, chainName string, validators [
9198
validatorOperatorAddress := item.OperatorAddress
9299
consensusAddress := pubkeysMap[item.ConsensusPubkey.Key]
93100
queryPath := queryPathFunction(consensusAddress)
101+
vp := vpMap[item.ConsensusPubkey.Key]
94102

95103
go func(ch chan helper.Result) {
96104
defer helper.HandleOutOfNilResponse(c.Entry)
@@ -127,6 +135,7 @@ func getValidatorUptimeStatus(c common.CommonApp, chainName string, validators [
127135
MissedBlockCounter: missedBlocksCounter,
128136
IsTomstoned: isTomstoned,
129137
ValidatorOperatorAddress: validatorOperatorAddress,
138+
VotingPower: vp,
130139
}}
131140
}(ch)
132141
time.Sleep(10 * time.Millisecond)

internal/packages/consensus/uptime/collector/collector.go

+30
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ const (
2525
JailedMetricName = "jailed"
2626
SignedBlocksWindowMetricName = "signed_blocks_window"
2727
MinSignedPerWindowMetricName = "min_signed_per_window"
28+
29+
METRIC_NAME_VP = "validator_voting_power"
2830
)
2931

3032
func Start(p common.Packager) error {
@@ -85,6 +87,18 @@ func loop(exporter *common.Exporter, p common.Packager) {
8587
common.ProposerAddressLabel,
8688
})
8789

90+
vpMetric := p.Factory.NewGaugeVec(prometheus.GaugeOpts{
91+
Namespace: common.Namespace,
92+
Subsystem: Subsystem,
93+
Name: METRIC_NAME_VP,
94+
ConstLabels: packageLabels,
95+
}, []string{
96+
common.MonikerLabel,
97+
common.ValidatorAddressLabel,
98+
common.ConsensusAddressLabel,
99+
common.ProposerAddressLabel,
100+
})
101+
88102
// metrics for each chain
89103
signedBlocksWindowMetric := p.Factory.NewGauge(prometheus.GaugeOpts{
90104
Namespace: common.Namespace,
@@ -156,6 +170,14 @@ func loop(exporter *common.Exporter, p common.Packager) {
156170
common.MonikerLabel: item.Moniker,
157171
}).
158172
Set(float64(item.IsTomstoned))
173+
vpMetric.
174+
With(prometheus.Labels{
175+
common.ValidatorAddressLabel: item.ValidatorOperatorAddress,
176+
common.ConsensusAddressLabel: item.ValidatorConsensusAddress,
177+
common.ProposerAddressLabel: item.ProposerAddress,
178+
common.MonikerLabel: item.Moniker,
179+
}).
180+
Set(item.VotingPower)
159181
}
160182
} else {
161183
// update metrics by each validators
@@ -177,6 +199,14 @@ func loop(exporter *common.Exporter, p common.Packager) {
177199
common.MonikerLabel: item.Moniker,
178200
}).
179201
Set(float64(item.IsTomstoned))
202+
vpMetric.
203+
With(prometheus.Labels{
204+
common.ValidatorAddressLabel: item.ValidatorOperatorAddress,
205+
common.ConsensusAddressLabel: item.ValidatorConsensusAddress,
206+
common.ProposerAddressLabel: item.ProposerAddress,
207+
common.MonikerLabel: item.Moniker,
208+
}).
209+
Set(item.VotingPower)
180210
}
181211
}
182212
}

internal/packages/consensus/uptime/types/types_common.go

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type ValidatorUptimeStatus struct {
1919
ValidatorOperatorAddress string `json:"validator_operator_address"`
2020
ValidatorConsensusAddress string `json:"validator_consensus_addreess"`
2121
MissedBlockCounter float64 `json:"missed_block_counter"`
22+
VotingPower float64
2223
IsTomstoned float64
2324
// Only Consumer Chain
2425
ConsumerConsensusAddress string `json:"consumer_consensus_address"`

0 commit comments

Comments
 (0)