diff --git a/x/colinearcore/keeper/msg_server_claim_funds.go b/x/colinearcore/keeper/msg_server_claim_funds.go index 86295f2..0ca7a44 100644 --- a/x/colinearcore/keeper/msg_server_claim_funds.go +++ b/x/colinearcore/keeper/msg_server_claim_funds.go @@ -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 diff --git a/x/colinearcore/math/vesting.go b/x/colinearcore/math/vesting.go index b50a071..16621c1 100644 --- a/x/colinearcore/math/vesting.go +++ b/x/colinearcore/math/vesting.go @@ -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)