Skip to content

Commit d2d0022

Browse files
Vanja/feat/783 multiplier from 1 to 2 only for locked vet (#1286)
* Refactor weights, only apply multiplier on locked * Add debug logs * Add debug logs * Add debug logs * Add debug logs * Bug fix * Clean up * Add comments * PR comment fix * Handle exit
1 parent faadd7c commit d2d0022

7 files changed

Lines changed: 39 additions & 12 deletions

File tree

builtin/staker/delegations_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,4 +654,23 @@ func TestStaker_DelegationExitingVET(t *testing.T) {
654654

655655
_, err = staker.Housekeep(thor.MediumStakingPeriod() * 2)
656656
assert.NoError(t, err)
657+
658+
lVet, lWeight, err := staker.LockedVET()
659+
assert.NoError(t, err)
660+
assert.Equal(t, big.NewInt(0).String(), lVet.String())
661+
assert.Equal(t, big.NewInt(0).String(), lWeight.String())
662+
663+
qVet, qWeight, err := staker.QueuedStake()
664+
assert.NoError(t, err)
665+
assert.Equal(t, big.NewInt(0).String(), qVet.String())
666+
assert.Equal(t, big.NewInt(0).String(), qWeight.String())
667+
668+
total, err := staker.GetValidationTotals(*firstActive)
669+
assert.NoError(t, err)
670+
assert.Equal(t, big.NewInt(0), total.TotalLockedStake)
671+
assert.Equal(t, big.NewInt(0), total.TotalLockedWeight)
672+
assert.Equal(t, big.NewInt(0), total.TotalQueuedStake)
673+
assert.Equal(t, big.NewInt(0), total.TotalQueuedWeight)
674+
assert.Equal(t, big.NewInt(0), total.TotalExitingStake)
675+
assert.Equal(t, big.NewInt(0), total.TotalExitingWeight)
657676
}

builtin/staker/housekeep.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,11 @@ func (s *Staker) applyEpochTransition(transition *EpochTransition) error {
211211
logger.Info("exiting validator", "validator", transition.ExitValidator)
212212

213213
// Now call ExitValidator to get the actual exit details and perform the exit
214-
exit, err := s.validationService.ExitValidator(*transition.ExitValidator)
214+
agg, err := s.aggregationService.GetAggregation(*transition.ExitValidator)
215+
if err != nil {
216+
return err
217+
}
218+
exit, err := s.validationService.ExitValidator(*transition.ExitValidator, agg.LockedWeight)
215219
if err != nil {
216220
return err
217221
}

builtin/staker/validation/service.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,15 +387,15 @@ func (s *Service) NextToActivate(maxLeaderGroupSize *big.Int) (*thor.Address, er
387387
}
388388

389389
// ExitValidator removes the validator from the active list and puts it in cooldown.
390-
func (s *Service) ExitValidator(validator thor.Address) (*delta.Exit, error) {
390+
func (s *Service) ExitValidator(validator thor.Address, aggWeight *big.Int) (*delta.Exit, error) {
391391
entry, err := s.GetValidation(validator)
392392
if err != nil {
393393
return nil, err
394394
}
395395
if entry.IsEmpty() {
396396
return nil, nil
397397
}
398-
exit := entry.exit()
398+
exit := entry.exit(aggWeight)
399399
if err = s.leaderGroup.Remove(validator); err != nil {
400400
return nil, err
401401
}

builtin/staker/validation/service_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func TestService_ActivateAndExit_Flow(t *testing.T) {
117117
assert.Equal(t, big.NewInt(100), after.LockedVET)
118118
assert.Equal(t, big.NewInt(0), after.QueuedVET)
119119

120-
exit, err := svc.ExitValidator(id)
120+
exit, err := svc.ExitValidator(id, nil)
121121
assert.NoError(t, err)
122122
assert.True(t, exit.ExitedTVL.Sign() >= 0)
123123

builtin/staker/validation/validation.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,12 @@ func (v *Validation) renew(aggregations *delta.Renewal, delegationWeight *big.In
170170
}
171171
}
172172

173-
func (v *Validation) exit() *delta.Exit {
173+
func (v *Validation) exit(aggWeight *big.Int) *delta.Exit {
174+
if aggWeight == nil {
175+
aggWeight = big.NewInt(0)
176+
}
174177
releaseLockedTVL := big.NewInt(0).Set(v.LockedVET)
178+
releaseLockedWeight := big.NewInt(0).Sub(v.Weight, aggWeight)
175179
releaseQueuedTVL := big.NewInt(0).Set(v.QueuedVET)
176180

177181
// move locked to cooldown
@@ -193,7 +197,7 @@ func (v *Validation) exit() *delta.Exit {
193197
// We only return the change in the validation's TVL and weight
194198
return &delta.Exit{
195199
ExitedTVL: releaseLockedTVL,
196-
ExitedTVLWeight: stakes.NewWeightedStake(releaseLockedTVL, Multiplier).Weight(),
200+
ExitedTVLWeight: releaseLockedWeight,
197201
QueuedDecrease: releaseQueuedTVL,
198202
QueuedDecreaseWeight: stakes.NewWeightedStake(releaseQueuedTVL, Multiplier).Weight(),
199203
}

builtin/staker/validation/validation_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func TestValidation_NextPeriodTVL(t *testing.T) {
7171

7272
func TestValidation_Exit(t *testing.T) {
7373
val := baseVal
74-
delta := val.exit()
74+
delta := val.exit(nil)
7575
assert.Equal(t, StatusExit, val.Status)
7676
assert.Equal(t, big.NewInt(1000), val.CooldownVET)
7777
assert.Equal(t, big.NewInt(0), val.LockedVET)

builtin/staker/validations_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ func TestStaker_TotalStake(t *testing.T) {
146146
}
147147

148148
for id, stake := range stakes {
149-
exit, err := staker.validationService.ExitValidator(id)
149+
exit, err := staker.validationService.ExitValidator(id, nil)
150150
require.NoError(t, err)
151151

152152
// exit the aggregation too
@@ -196,7 +196,7 @@ func TestStaker_TotalStake_Withdrawal(t *testing.T) {
196196
assert.Equal(t, 0, queuedStake.Sign())
197197
assert.Equal(t, 0, queuedWeight.Sign())
198198

199-
exit, err := staker.validationService.ExitValidator(addr)
199+
exit, err := staker.validationService.ExitValidator(addr, nil)
200200
require.NoError(t, err)
201201

202202
// exit the aggregation too
@@ -1243,7 +1243,7 @@ func TestStaker_RemoveValidator_NonExistent(t *testing.T) {
12431243
staker, _ := newStaker(t, 101, 101, true)
12441244

12451245
addr := datagen.RandAddress()
1246-
_, err := staker.validationService.ExitValidator(addr)
1246+
_, err := staker.validationService.ExitValidator(addr, nil)
12471247
assert.NoError(t, err)
12481248
}
12491249

@@ -1263,7 +1263,7 @@ func TestStaker_RemoveValidator(t *testing.T) {
12631263
err = staker.SignalExit(addr, addr)
12641264
assert.NoError(t, err)
12651265

1266-
exit, err := staker.validationService.ExitValidator(addr)
1266+
exit, err := staker.validationService.ExitValidator(addr, nil)
12671267
require.NoError(t, err)
12681268

12691269
// exit the aggregation too
@@ -2474,7 +2474,7 @@ func TestStaker_AddValidation_CannotAddValidationWithSameMasterAfterExit(t *test
24742474
err = staker.SignalExit(master, endorser)
24752475
assert.NoError(t, err)
24762476

2477-
_, err = staker.validationService.ExitValidator(master)
2477+
_, err = staker.validationService.ExitValidator(master, nil)
24782478
assert.NoError(t, err)
24792479

24802480
err = staker.AddValidation(master, datagen.RandAddress(), uint32(360)*24*15, MinStake)

0 commit comments

Comments
 (0)