Skip to content

Commit 083d4f2

Browse files
committed
feat: improve self-stake boost UI with TLOS amounts and tooltips
- Show actual self-staked TLOS amount instead of raw boost vote weight e.g. '🔒 30,013 TLOS (10x Boost)' instead of '+271,466.0406 Boosted' - Add tooltip with details: staked amount, boost votes, BP count (X/30) - For BPs without boost activation: '🔒 161,606 TLOS Self Staked' with tooltip explaining re-vote needed - Track self_staked_amount and num_producers_voted in Producer type - Users can now see actual skin-in-the-game in TLOS terms
1 parent ce40151 commit 083d4f2

3 files changed

Lines changed: 28 additions & 13 deletions

File tree

src/components/validators/ValidatorDataTable.vue

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,18 +180,24 @@ export default defineComponent({
180180
v-if="bp.self_staked_boost > 0"
181181
color="primary"
182182
text-color="white"
183-
:label="`+${(bp.self_staked_boost / 10000).toLocaleString(undefined, {minimumFractionDigits: 4,maximumFractionDigits: 4,})} Boosted`"
183+
:label="`🔒 ${(bp.self_staked_amount / 10000).toLocaleString(undefined, {minimumFractionDigits: 0,maximumFractionDigits: 0,})} ${symbol} (10x Boost)`"
184184
size="sm"
185-
/>
185+
>
186+
<q-tooltip>
187+
Self-staked: {{ (bp.self_staked_amount / 10000).toLocaleString(undefined, {minimumFractionDigits: 4,maximumFractionDigits: 4,}) }} {{ symbol }}
188+
· Boost: +{{ (bp.self_staked_boost / 10000).toLocaleString(undefined, {minimumFractionDigits: 0,maximumFractionDigits: 0,}) }} votes
189+
· Voting for {{ bp.num_producers_voted }}/30 BPs
190+
</q-tooltip>
191+
</q-chip>
186192
<q-chip
187193
v-else-if="bp.is_self_staking"
188194
outline
189-
color="green"
190-
text-color="green"
191-
label="Self Staked"
195+
color="positive"
196+
text-color="positive"
197+
:label="`🔒 ${(bp.self_staked_amount / 10000).toLocaleString(undefined, {minimumFractionDigits: 0,maximumFractionDigits: 0,})} ${symbol} Self Staked`"
192198
size="sm"
193199
>
194-
<q-tooltip>This BP votes for itself but hasn't activated the 10x boost yet. BP needs to re-vote to activate.</q-tooltip>
200+
<q-tooltip>This BP self-stakes but hasn't activated the 10x boost yet. A re-vote or stake change will activate it.</q-tooltip>
195201
</q-chip>
196202
</div>
197203
</div>

src/stores/chain.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,15 @@ export const useChainStore = defineStore('chain', {
100100
table: 'voters',
101101
lower_bound: Name.from(data.owner),
102102
limit: 1,
103-
}) as { rows: { owner: string; self_stake_boost: number; producers: string[]; last_vote_weight: number }[] };
103+
}) as { rows: { owner: string; self_stake_boost: number; staked: number; producers: string[]; last_vote_weight: number }[] };
104104
let selfStakedBoost = 0;
105105
let isSelfStaking = false;
106+
let selfStakedAmount = 0;
107+
let numProducersVoted = 0;
106108
if (producerVote.rows.length > 0 && producerVote.rows[0].owner === data.owner) {
107109
isSelfStaking = producerVote.rows[0].producers.includes(data.owner);
110+
selfStakedAmount = producerVote.rows[0].staked;
111+
numProducersVoted = producerVote.rows[0].producers.length;
108112
// self_stake_boost is a binary_extension<bool> on-chain; when active, the
109113
// system contract applies a 10x multiplier to the BP's own vote weight.
110114
// The API may return the raw value as a truthy number (e.g. 1000).
@@ -113,29 +117,32 @@ export const useChainStore = defineStore('chain', {
113117
selfStakedBoost = 10 * producerVote.rows[0].last_vote_weight;
114118
}
115119
}
120+
const extraFields = {
121+
self_staked_boost: selfStakedBoost,
122+
is_self_staking: isSelfStaking,
123+
self_staked_amount: selfStakedAmount,
124+
num_producers_voted: numProducersVoted,
125+
};
116126
if (bp) {
117127
try {
118128
return {
119129
...data,
120130
name: bp.org.candidate_name,
121131
location: bp.org.location.name,
122-
self_staked_boost: selfStakedBoost,
123-
is_self_staking: isSelfStaking,
132+
...extraFields,
124133
};
125134
} catch (error) {
126135
return {
127136
...data,
128-
self_staked_boost: selfStakedBoost,
129-
is_self_staking: isSelfStaking,
137+
...extraFields,
130138
};
131139
}
132140
} else {
133141
return {
134142
...data,
135143
name: data.owner,
136144
location: '',
137-
self_staked_boost: selfStakedBoost,
138-
is_self_staking: isSelfStaking,
145+
...extraFields,
139146
};
140147
}
141148
}));

src/types/Producers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ export interface Producer {
1010
name: string;
1111
self_staked_boost: number;
1212
is_self_staking: boolean;
13+
self_staked_amount: number;
14+
num_producers_voted: number;
1315
}

0 commit comments

Comments
 (0)