fix incorrect vesting remainder behavior

also checks vesting schedule range when calculating
master
michael 2022-09-15 00:41:33 +00:00
parent f3ddfca045
commit 0e39e78a0f
2 changed files with 12 additions and 5 deletions

View File

@ -2,7 +2,6 @@ package keeper
import (
"context"
"errors"
"fmt"
"math/big"
"time"
@ -53,7 +52,10 @@ func (k msgServer) ClaimFunds(goCtx context.Context, msg *types.MsgClaimFunds) (
now := ctx.BlockTime()
subAmt, err := colinearmath.CalcAmountVestableLinear(total, remaining, now, leaseBegin, leaseEnd)
if err != nil {
return nil, errors.New("unable to calculate vestable amount")
return nil, fmt.Errorf("unable to calculate vestable amount: %s", err)
}
if subAmt.Cmp(big.NewInt(0)) == 0 {
return nil, fmt.Errorf("no claimable %s (calculated vesting amount is 0)", auction.Denom)
}
// pay from module to user account
@ -65,7 +67,7 @@ func (k msgServer) ClaimFunds(goCtx context.Context, msg *types.MsgClaimFunds) (
// subtract paid amount off of remaining payout tally & commit to chain state
newRemaining := new(big.Int)
newRemaining.Sub(remaining, subAmt)
auction.Remaining = subAmt.String()
auction.Remaining = newRemaining.String()
k.Keeper.SetAuction(ctx, auction)
return &types.MsgClaimFundsResponse{}, nil

View File

@ -1,6 +1,7 @@
package colinearmath
import (
"fmt"
"math/big"
"time"
)
@ -11,11 +12,15 @@ import (
func CalcAmountVestableLinear(
total *big.Int,
remaining *big.Int,
date time.Time,
now time.Time,
beginDate time.Time,
endDate time.Time,
) (*big.Int, error) {
timePassed := big.NewInt(date.Unix() - beginDate.Unix())
timePassed := big.NewInt(now.Unix() - beginDate.Unix())
if timePassed.Cmp(big.NewInt(0)) == -1 {
return nil, fmt.Errorf("time %d is out of range (%d, %d)", now.Unix(), beginDate.Unix(), endDate.Unix())
}
totalTime := big.NewInt(endDate.Unix() - beginDate.Unix())
taken := big.NewInt(0)