Skip to content

Commit 0137e1d

Browse files
authored
Merge pull request #190 from KiiChain/fix/change-time
Change time.now to ctx.BlockTime and remove genesis time validations
2 parents b25b198 + e7f114f commit 0137e1d

File tree

5 files changed

+12
-42
lines changed

5 files changed

+12
-42
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
## Fixed
66

77
- Disable EVM mempool due to bug on public nodes broadcast
8+
- Remove references to time.Now() on release schedule validation
89
- Remove unsafe math.Sqrt usage in oracle ballot standard deviation calculation
910

1011
## v6.0.0 - 2025-11-25

x/rewards/keeper/msg_server.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,24 +67,27 @@ func (k msgServer) FundPool(ctx context.Context, msg *types.MsgFundPool) (*types
6767

6868
// ChangeSchedule validates changes to the release scheduler
6969
func (k msgServer) ChangeSchedule(ctx context.Context, msg *types.MsgChangeSchedule) (*types.MsgChangeScheduleResponse, error) {
70+
// Get cosmos sdk context from golang context
71+
sdkCtx := sdk.UnwrapSDKContext(ctx)
72+
7073
// Authority validation
7174
if err := k.validateAuthority(msg.Authority); err != nil {
7275
return nil, err
7376
}
7477

7578
// Check if schedule is sound
7679
schedule := msg.Schedule
77-
if err := k.validateSchedule(ctx, schedule); err != nil {
80+
if err := k.validateSchedule(sdkCtx, schedule); err != nil {
7881
return nil, fmt.Errorf("invalid schedule: %w", err)
7982
}
8083

8184
// Check available funds
82-
if err := k.fundsAvailable(ctx, schedule.TotalAmount); err != nil {
85+
if err := k.fundsAvailable(sdkCtx, schedule.TotalAmount); err != nil {
8386
return nil, fmt.Errorf("insufficient funds: %w", err)
8487
}
8588

8689
// Save the new schedule
87-
if err := k.Keeper.ReleaseSchedule.Set(ctx, schedule); err != nil {
90+
if err := k.Keeper.ReleaseSchedule.Set(sdkCtx, schedule); err != nil {
8891
return nil, fmt.Errorf("failed to set release schedule: %w", err)
8992
}
9093

x/rewards/keeper/validation.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ func validateAmount(amount sdk.Coin) error {
3737
}
3838

3939
// validateEndTime checks if time is in the past
40-
func validateEndTime(endTime time.Time) error {
41-
if endTime.Before(time.Now()) {
40+
func validateEndTime(ctx sdk.Context, endTime time.Time) error {
41+
if endTime.Before(ctx.BlockTime()) {
4242
return fmt.Errorf("end time %s is not in the future", endTime)
4343
}
4444

@@ -63,7 +63,7 @@ func (k Keeper) fundsAvailable(ctx context.Context, amount sdk.Coin) error {
6363
}
6464

6565
// validateSchedule checks if the asked funds are available in the pool
66-
func (k Keeper) validateSchedule(ctx context.Context, schedule types.ReleaseSchedule) error {
66+
func (k Keeper) validateSchedule(ctx sdk.Context, schedule types.ReleaseSchedule) error {
6767
// Validate TotalAmount
6868
if err := validateAmount(schedule.TotalAmount); err != nil {
6969
return fmt.Errorf("invalid total amount: %w", err)
@@ -95,14 +95,14 @@ func (k Keeper) validateSchedule(ctx context.Context, schedule types.ReleaseSche
9595
}
9696

9797
// Time validations
98-
currentTime := time.Now()
9998
if schedule.EndTime.IsZero() {
10099
return fmt.Errorf("end time cannot be zero")
101100
}
102-
if err = validateEndTime(schedule.EndTime); err != nil {
101+
if err = validateEndTime(ctx, schedule.EndTime); err != nil {
103102
return err
104103
}
105104

105+
currentTime := ctx.BlockTime()
106106
if !schedule.LastReleaseTime.IsZero() {
107107
if schedule.LastReleaseTime.After(currentTime) {
108108
return fmt.Errorf("last release time %s cannot be in the future",

x/rewards/types/release_schedule.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,6 @@ func InitialReleaseSchedule() ReleaseSchedule {
2020

2121
// ValidateGenesis validates the release schedule for a genesis state
2222
func (rr ReleaseSchedule) ValidateGenesis() error {
23-
// Validate EndTime (zero time is allowed for genesis)
24-
if !rr.EndTime.IsZero() && rr.EndTime.Before(time.Now()) {
25-
return fmt.Errorf("end time %s cannot be in the past", rr.EndTime.String())
26-
}
27-
28-
// Validate LastReleaseTime
29-
if rr.LastReleaseTime.After(time.Now()) {
30-
return fmt.Errorf("last release time %s cannot be in the future", rr.EndTime.String())
31-
}
32-
3323
// Some validations just make sense if active
3424
if rr.Active {
3525
// Validate TotalAmount

x/rewards/types/release_schedule_test.go

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -88,30 +88,6 @@ func TestRewardReleaserValidateGenesis(t *testing.T) {
8888
wantErr: true,
8989
errMsg: "cannot be greater than total amount",
9090
},
91-
{
92-
name: "end time in past",
93-
schedule: types.ReleaseSchedule{
94-
TotalAmount: validCoin,
95-
ReleasedAmount: sdk.Coin{},
96-
EndTime: now.Add(-time.Hour * 24),
97-
LastReleaseTime: time.Time{},
98-
Active: false,
99-
},
100-
wantErr: true,
101-
errMsg: "cannot be in the past",
102-
},
103-
{
104-
name: "last release in future",
105-
schedule: types.ReleaseSchedule{
106-
TotalAmount: validCoin,
107-
ReleasedAmount: sdk.Coin{},
108-
EndTime: time.Time{},
109-
LastReleaseTime: now.Add(time.Hour * 24),
110-
Active: false,
111-
},
112-
wantErr: true,
113-
errMsg: "cannot be in the future",
114-
},
11591
{
11692
name: "active with zero total",
11793
schedule: types.ReleaseSchedule{

0 commit comments

Comments
 (0)