mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 11:37:27 +00:00 
			
		
		
		
	Update deprecated Cosmos methods (#1530)
* Use cosmossdk.io/errors for deprecated error methods * Update error registration with cosmossdk.io/errors * Use cosmossdk.io/math for deprecated sdk.Int alias * Fix modified proto file * Update sdk.Int usage in swap hooks * Update e2e test deprecated method usage
This commit is contained in:
		
							parent
							
								
									2029fbb2bf
								
							
						
					
					
						commit
						3375484f79
					
				@ -61,11 +61,11 @@ func (suite *SimulateRequestTestSuite) TestSimulateRequest() {
 | 
				
			|||||||
			bank.MsgSend{
 | 
								bank.MsgSend{
 | 
				
			||||||
				FromAddress: fromAddr,
 | 
									FromAddress: fromAddr,
 | 
				
			||||||
				ToAddress:   toAddr,
 | 
									ToAddress:   toAddr,
 | 
				
			||||||
				Amount:      sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
									Amount:      sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		Fee: auth.StdFee{
 | 
							Fee: auth.StdFee{
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(5e4))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(5e4))),
 | 
				
			||||||
			Gas:    1e6,
 | 
								Gas:    1e6,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		Memo: "test memo",
 | 
							Memo: "test memo",
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"runtime/debug"
 | 
						"runtime/debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
	authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
 | 
						authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
 | 
				
			||||||
@ -35,16 +36,16 @@ type HandlerOptions struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (options HandlerOptions) Validate() error {
 | 
					func (options HandlerOptions) Validate() error {
 | 
				
			||||||
	if options.AccountKeeper == nil {
 | 
						if options.AccountKeeper == nil {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrLogic, "account keeper is required for AnteHandler")
 | 
							return errorsmod.Wrap(sdkerrors.ErrLogic, "account keeper is required for AnteHandler")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if options.BankKeeper == nil {
 | 
						if options.BankKeeper == nil {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrLogic, "bank keeper is required for AnteHandler")
 | 
							return errorsmod.Wrap(sdkerrors.ErrLogic, "bank keeper is required for AnteHandler")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if options.SignModeHandler == nil {
 | 
						if options.SignModeHandler == nil {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder")
 | 
							return errorsmod.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if options.EvmKeeper == nil {
 | 
						if options.EvmKeeper == nil {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrLogic, "evm keeper is required for AnteHandler")
 | 
							return errorsmod.Wrap(sdkerrors.ErrLogic, "evm keeper is required for AnteHandler")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -72,7 +73,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
 | 
				
			|||||||
		if ok {
 | 
							if ok {
 | 
				
			||||||
			opts := txWithExtensions.GetExtensionOptions()
 | 
								opts := txWithExtensions.GetExtensionOptions()
 | 
				
			||||||
			if len(opts) > 1 {
 | 
								if len(opts) > 1 {
 | 
				
			||||||
				return ctx, sdkerrors.Wrap(
 | 
									return ctx, errorsmod.Wrap(
 | 
				
			||||||
					sdkerrors.ErrInvalidRequest,
 | 
										sdkerrors.ErrInvalidRequest,
 | 
				
			||||||
					"rejecting tx with more than 1 extension option",
 | 
										"rejecting tx with more than 1 extension option",
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
@ -90,7 +91,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
 | 
				
			|||||||
						isEIP712:       true,
 | 
											isEIP712:       true,
 | 
				
			||||||
					})
 | 
										})
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
					return ctx, sdkerrors.Wrapf(
 | 
										return ctx, errorsmod.Wrapf(
 | 
				
			||||||
						sdkerrors.ErrUnknownExtensionOptions,
 | 
											sdkerrors.ErrUnknownExtensionOptions,
 | 
				
			||||||
						"rejecting tx with unsupported extension option: %s", typeURL,
 | 
											"rejecting tx with unsupported extension option: %s", typeURL,
 | 
				
			||||||
					)
 | 
										)
 | 
				
			||||||
@ -108,7 +109,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
 | 
				
			|||||||
				isEIP712:       false,
 | 
									isEIP712:       false,
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			return ctx, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "invalid transaction type: %T", tx)
 | 
								return ctx, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "invalid transaction type: %T", tx)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return anteHandler(ctx, tx, sim)
 | 
							return anteHandler(ctx, tx, sim)
 | 
				
			||||||
@ -176,7 +177,7 @@ func newEthAnteHandler(options HandlerOptions) sdk.AnteHandler {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func Recover(logger tmlog.Logger, err *error) {
 | 
					func Recover(logger tmlog.Logger, err *error) {
 | 
				
			||||||
	if r := recover(); r != nil {
 | 
						if r := recover(); r != nil {
 | 
				
			||||||
		*err = sdkerrors.Wrapf(sdkerrors.ErrPanic, "%v", r)
 | 
							*err = errorsmod.Wrapf(sdkerrors.ErrPanic, "%v", r)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if e, ok := r.(error); ok {
 | 
							if e, ok := r.(error); ok {
 | 
				
			||||||
			logger.Error(
 | 
								logger.Error(
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
 | 
						cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/simapp/helpers"
 | 
						"github.com/cosmos/cosmos-sdk/simapp/helpers"
 | 
				
			||||||
@ -161,16 +162,16 @@ func newBep3GenStateMulti(cdc codec.JSONCodec, deputyAddress sdk.AccAddress) app
 | 
				
			|||||||
					Denom:  "bnb",
 | 
										Denom:  "bnb",
 | 
				
			||||||
					CoinID: 714,
 | 
										CoinID: 714,
 | 
				
			||||||
					SupplyLimit: bep3types.SupplyLimit{
 | 
										SupplyLimit: bep3types.SupplyLimit{
 | 
				
			||||||
						Limit:          sdk.NewInt(350000000000000),
 | 
											Limit:          sdkmath.NewInt(350000000000000),
 | 
				
			||||||
						TimeLimited:    false,
 | 
											TimeLimited:    false,
 | 
				
			||||||
						TimeBasedLimit: sdk.ZeroInt(),
 | 
											TimeBasedLimit: sdk.ZeroInt(),
 | 
				
			||||||
						TimePeriod:     time.Hour,
 | 
											TimePeriod:     time.Hour,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					Active:        true,
 | 
										Active:        true,
 | 
				
			||||||
					DeputyAddress: deputyAddress,
 | 
										DeputyAddress: deputyAddress,
 | 
				
			||||||
					FixedFee:      sdk.NewInt(1000),
 | 
										FixedFee:      sdkmath.NewInt(1000),
 | 
				
			||||||
					MinSwapAmount: sdk.OneInt(),
 | 
										MinSwapAmount: sdk.OneInt(),
 | 
				
			||||||
					MaxSwapAmount: sdk.NewInt(1000000000000),
 | 
										MaxSwapAmount: sdkmath.NewInt(1000000000000),
 | 
				
			||||||
					MinBlockLock:  bep3types.DefaultMinBlockLock,
 | 
										MinBlockLock:  bep3types.DefaultMinBlockLock,
 | 
				
			||||||
					MaxBlockLock:  bep3types.DefaultMaxBlockLock,
 | 
										MaxBlockLock:  bep3types.DefaultMaxBlockLock,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
package ante
 | 
					package ante
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
	authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
 | 
						authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
 | 
				
			||||||
@ -28,10 +29,10 @@ func (amd AuthenticatedMempoolDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx,
 | 
				
			|||||||
	if ctx.IsCheckTx() && !simulate {
 | 
						if ctx.IsCheckTx() && !simulate {
 | 
				
			||||||
		sigTx, ok := tx.(authsigning.SigVerifiableTx)
 | 
							sigTx, ok := tx.(authsigning.SigVerifiableTx)
 | 
				
			||||||
		if !ok {
 | 
							if !ok {
 | 
				
			||||||
			return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "tx must be sig verifiable tx")
 | 
								return ctx, errorsmod.Wrap(sdkerrors.ErrTxDecode, "tx must be sig verifiable tx")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if !commonAddressesExist(sigTx.GetSigners(), amd.fetchAuthorizedAddresses(ctx)) {
 | 
							if !commonAddressesExist(sigTx.GetSigners(), amd.fetchAuthorizedAddresses(ctx)) {
 | 
				
			||||||
			return ctx, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "tx contains no signers authorized for this mempool")
 | 
								return ctx, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "tx contains no signers authorized for this mempool")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return next(ctx, tx, simulate)
 | 
						return next(ctx, tx, simulate)
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package ante
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/x/authz"
 | 
						"github.com/cosmos/cosmos-sdk/x/authz"
 | 
				
			||||||
@ -26,7 +27,7 @@ func NewAuthzLimiterDecorator(disabledMsgTypes ...string) AuthzLimiterDecorator
 | 
				
			|||||||
func (ald AuthzLimiterDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) {
 | 
					func (ald AuthzLimiterDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) {
 | 
				
			||||||
	err = ald.checkForDisabledMsg(tx.GetMsgs(), true)
 | 
						err = ald.checkForDisabledMsg(tx.GetMsgs(), true)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return ctx, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%v", err)
 | 
							return ctx, errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return next(ctx, tx, simulate)
 | 
						return next(ctx, tx, simulate)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -67,7 +67,7 @@ type EIP712TestSuite struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (suite *EIP712TestSuite) getEVMAmount(amount int64) sdkmath.Int {
 | 
					func (suite *EIP712TestSuite) getEVMAmount(amount int64) sdkmath.Int {
 | 
				
			||||||
	incr := sdkmath.RelativePow(sdkmath.NewUint(10), sdkmath.NewUint(18), sdkmath.OneUint())
 | 
						incr := sdkmath.RelativePow(sdkmath.NewUint(10), sdkmath.NewUint(18), sdkmath.OneUint())
 | 
				
			||||||
	return sdk.NewInt(amount).Mul(sdk.NewIntFromUint64(incr.Uint64()))
 | 
						return sdkmath.NewInt(amount).Mul(sdkmath.NewIntFromUint64(incr.Uint64()))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *EIP712TestSuite) createTestEIP712CosmosTxBuilder(
 | 
					func (suite *EIP712TestSuite) createTestEIP712CosmosTxBuilder(
 | 
				
			||||||
@ -181,13 +181,13 @@ func (suite *EIP712TestSuite) SetupTest() {
 | 
				
			|||||||
			LiquidationRatio:                 sdk.MustNewDecFromStr("1.01"),
 | 
								LiquidationRatio:                 sdk.MustNewDecFromStr("1.01"),
 | 
				
			||||||
			DebtLimit:                        sdk.NewInt64Coin("usdx", 500000000000),
 | 
								DebtLimit:                        sdk.NewInt64Coin("usdx", 500000000000),
 | 
				
			||||||
			StabilityFee:                     sdk.OneDec(),
 | 
								StabilityFee:                     sdk.OneDec(),
 | 
				
			||||||
			AuctionSize:                      sdk.NewIntFromUint64(10000000000),
 | 
								AuctionSize:                      sdkmath.NewIntFromUint64(10000000000),
 | 
				
			||||||
			LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
								LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
			CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
								CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
			KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
								KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
			SpotMarketID:                     "usdc:usd",
 | 
								SpotMarketID:                     "usdc:usd",
 | 
				
			||||||
			LiquidationMarketID:              "usdc:usd:30",
 | 
								LiquidationMarketID:              "usdc:usd:30",
 | 
				
			||||||
			ConversionFactor:                 sdk.NewInt(18),
 | 
								ConversionFactor:                 sdkmath.NewInt(18),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -201,7 +201,7 @@ func (suite *EIP712TestSuite) SetupTest() {
 | 
				
			|||||||
				LoanToValue:  sdk.MustNewDecFromStr("1"),
 | 
									LoanToValue:  sdk.MustNewDecFromStr("1"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			SpotMarketID:     "usdx:usd",
 | 
								SpotMarketID:     "usdx:usd",
 | 
				
			||||||
			ConversionFactor: sdk.NewInt(1_000_000),
 | 
								ConversionFactor: sdkmath.NewInt(1_000_000),
 | 
				
			||||||
			InterestRateModel: hardtypes.InterestRateModel{
 | 
								InterestRateModel: hardtypes.InterestRateModel{
 | 
				
			||||||
				BaseRateAPY:    sdk.MustNewDecFromStr("0.05"),
 | 
									BaseRateAPY:    sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
				BaseMultiplier: sdk.MustNewDecFromStr("2"),
 | 
									BaseMultiplier: sdk.MustNewDecFromStr("2"),
 | 
				
			||||||
@ -458,7 +458,7 @@ func (suite *EIP712TestSuite) deployUSDCERC20(app app.TestApp, ctx sdk.Context)
 | 
				
			|||||||
	suite.tApp.FundModuleAccount(
 | 
						suite.tApp.FundModuleAccount(
 | 
				
			||||||
		suite.ctx,
 | 
							suite.ctx,
 | 
				
			||||||
		evmutiltypes.ModuleName,
 | 
							evmutiltypes.ModuleName,
 | 
				
			||||||
		sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(0))),
 | 
							sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(0))),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	contractAddr, err := suite.evmutilKeeper.DeployTestMintableERC20Contract(suite.ctx, "USDC", "USDC", uint8(18))
 | 
						contractAddr, err := suite.evmutilKeeper.DeployTestMintableERC20Contract(suite.ctx, "USDC", "USDC", uint8(18))
 | 
				
			||||||
@ -567,7 +567,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
 | 
				
			|||||||
			failCheckTx:    true,
 | 
								failCheckTx:    true,
 | 
				
			||||||
			errMsg:         "invalid chain-id",
 | 
								errMsg:         "invalid chain-id",
 | 
				
			||||||
			updateTx: func(txBuilder client.TxBuilder, msgs []sdk.Msg) client.TxBuilder {
 | 
								updateTx: func(txBuilder client.TxBuilder, msgs []sdk.Msg) client.TxBuilder {
 | 
				
			||||||
				gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(20)))
 | 
									gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(20)))
 | 
				
			||||||
				return suite.createTestEIP712CosmosTxBuilder(
 | 
									return suite.createTestEIP712CosmosTxBuilder(
 | 
				
			||||||
					suite.testAddr, suite.testPrivKey, "kavatest_12-1", uint64(helpers.DefaultGenTxGas*10), gasAmt, msgs,
 | 
										suite.testAddr, suite.testPrivKey, "kavatest_12-1", uint64(helpers.DefaultGenTxGas*10), gasAmt, msgs,
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
@ -580,7 +580,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
 | 
				
			|||||||
			failCheckTx:    true,
 | 
								failCheckTx:    true,
 | 
				
			||||||
			errMsg:         "invalid pubkey",
 | 
								errMsg:         "invalid pubkey",
 | 
				
			||||||
			updateTx: func(txBuilder client.TxBuilder, msgs []sdk.Msg) client.TxBuilder {
 | 
								updateTx: func(txBuilder client.TxBuilder, msgs []sdk.Msg) client.TxBuilder {
 | 
				
			||||||
				gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(20)))
 | 
									gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(20)))
 | 
				
			||||||
				return suite.createTestEIP712CosmosTxBuilder(
 | 
									return suite.createTestEIP712CosmosTxBuilder(
 | 
				
			||||||
					suite.testAddr2, suite.testPrivKey2, ChainID, uint64(helpers.DefaultGenTxGas*10), gasAmt, msgs,
 | 
										suite.testAddr2, suite.testPrivKey2, ChainID, uint64(helpers.DefaultGenTxGas*10), gasAmt, msgs,
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
@ -600,7 +600,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
 | 
				
			|||||||
				suite.usdcEVMAddr,
 | 
									suite.usdcEVMAddr,
 | 
				
			||||||
				usdcAmt,
 | 
									usdcAmt,
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
			usdxAmt := sdk.NewInt(1_000_000).Mul(sdk.NewInt(tc.usdxToMintAmt))
 | 
								usdxAmt := sdkmath.NewInt(1_000_000).Mul(sdkmath.NewInt(tc.usdxToMintAmt))
 | 
				
			||||||
			mintMsg := cdptypes.NewMsgCreateCDP(
 | 
								mintMsg := cdptypes.NewMsgCreateCDP(
 | 
				
			||||||
				suite.testAddr,
 | 
									suite.testAddr,
 | 
				
			||||||
				sdk.NewCoin(USDCCoinDenom, usdcAmt),
 | 
									sdk.NewCoin(USDCCoinDenom, usdcAmt),
 | 
				
			||||||
@ -620,7 +620,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
 | 
				
			|||||||
				msgs = tc.updateMsgs(msgs)
 | 
									msgs = tc.updateMsgs(msgs)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(20)))
 | 
								gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(20)))
 | 
				
			||||||
			txBuilder := suite.createTestEIP712CosmosTxBuilder(
 | 
								txBuilder := suite.createTestEIP712CosmosTxBuilder(
 | 
				
			||||||
				suite.testAddr, suite.testPrivKey, ChainID, uint64(helpers.DefaultGenTxGas*10), gasAmt, msgs,
 | 
									suite.testAddr, suite.testPrivKey, ChainID, uint64(helpers.DefaultGenTxGas*10), gasAmt, msgs,
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
@ -662,13 +662,13 @@ func (suite *EIP712TestSuite) TestEIP712Tx() {
 | 
				
			|||||||
				suite.Require().True(found)
 | 
									suite.Require().True(found)
 | 
				
			||||||
				suite.Require().Equal(suite.testAddr, cdp.Owner)
 | 
									suite.Require().Equal(suite.testAddr, cdp.Owner)
 | 
				
			||||||
				suite.Require().Equal(sdk.NewCoin(USDCCoinDenom, suite.getEVMAmount(100)), cdp.Collateral)
 | 
									suite.Require().Equal(sdk.NewCoin(USDCCoinDenom, suite.getEVMAmount(100)), cdp.Collateral)
 | 
				
			||||||
				suite.Require().Equal(sdk.NewCoin("usdx", sdk.NewInt(99_000_000)), cdp.Principal)
 | 
									suite.Require().Equal(sdk.NewCoin("usdx", sdkmath.NewInt(99_000_000)), cdp.Principal)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				// validate hard
 | 
									// validate hard
 | 
				
			||||||
				hardDeposit, found := suite.tApp.GetHardKeeper().GetDeposit(suite.ctx, suite.testAddr)
 | 
									hardDeposit, found := suite.tApp.GetHardKeeper().GetDeposit(suite.ctx, suite.testAddr)
 | 
				
			||||||
				suite.Require().True(found)
 | 
									suite.Require().True(found)
 | 
				
			||||||
				suite.Require().Equal(suite.testAddr, hardDeposit.Depositor)
 | 
									suite.Require().Equal(suite.testAddr, hardDeposit.Depositor)
 | 
				
			||||||
				suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("usdx", sdk.NewInt(99_000_000))), hardDeposit.Amount)
 | 
									suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("usdx", sdkmath.NewInt(99_000_000))), hardDeposit.Amount)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				suite.Require().NotEqual(resDeliverTx.Code, uint32(0), resCheckTx.Log)
 | 
									suite.Require().NotEqual(resDeliverTx.Code, uint32(0), resCheckTx.Log)
 | 
				
			||||||
				suite.Require().Contains(resDeliverTx.Log, tc.errMsg)
 | 
									suite.Require().Contains(resDeliverTx.Log, tc.errMsg)
 | 
				
			||||||
@ -688,7 +688,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx_DepositAndWithdraw() {
 | 
				
			|||||||
		suite.usdcEVMAddr,
 | 
							suite.usdcEVMAddr,
 | 
				
			||||||
		usdcAmt,
 | 
							usdcAmt,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	usdxAmt := sdk.NewInt(1_000_000).Mul(sdk.NewInt(99))
 | 
						usdxAmt := sdkmath.NewInt(1_000_000).Mul(sdkmath.NewInt(99))
 | 
				
			||||||
	mintMsg := cdptypes.NewMsgCreateCDP(
 | 
						mintMsg := cdptypes.NewMsgCreateCDP(
 | 
				
			||||||
		suite.testAddr,
 | 
							suite.testAddr,
 | 
				
			||||||
		sdk.NewCoin(USDCCoinDenom, usdcAmt),
 | 
							sdk.NewCoin(USDCCoinDenom, usdcAmt),
 | 
				
			||||||
@ -706,7 +706,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx_DepositAndWithdraw() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// deliver deposit msg
 | 
						// deliver deposit msg
 | 
				
			||||||
	gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(20)))
 | 
						gasAmt := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(20)))
 | 
				
			||||||
	txBuilder := suite.createTestEIP712CosmosTxBuilder(
 | 
						txBuilder := suite.createTestEIP712CosmosTxBuilder(
 | 
				
			||||||
		suite.testAddr, suite.testPrivKey, ChainID, uint64(helpers.DefaultGenTxGas*10), gasAmt, depositMsgs,
 | 
							suite.testAddr, suite.testPrivKey, ChainID, uint64(helpers.DefaultGenTxGas*10), gasAmt, depositMsgs,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
@ -723,7 +723,7 @@ func (suite *EIP712TestSuite) TestEIP712Tx_DepositAndWithdraw() {
 | 
				
			|||||||
	hardDeposit, found := suite.tApp.GetHardKeeper().GetDeposit(suite.ctx, suite.testAddr)
 | 
						hardDeposit, found := suite.tApp.GetHardKeeper().GetDeposit(suite.ctx, suite.testAddr)
 | 
				
			||||||
	suite.Require().True(found)
 | 
						suite.Require().True(found)
 | 
				
			||||||
	suite.Require().Equal(suite.testAddr, hardDeposit.Depositor)
 | 
						suite.Require().Equal(suite.testAddr, hardDeposit.Depositor)
 | 
				
			||||||
	suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("usdx", sdk.NewInt(99_000_000))), hardDeposit.Amount)
 | 
						suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("usdx", sdkmath.NewInt(99_000_000))), hardDeposit.Amount)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// validate erc20 balance
 | 
						// validate erc20 balance
 | 
				
			||||||
	coinBal, err := suite.evmutilKeeper.QueryERC20BalanceOf(suite.ctx, suite.usdcEVMAddr, suite.testEVMAddr)
 | 
						coinBal, err := suite.evmutilKeeper.QueryERC20BalanceOf(suite.ctx, suite.usdcEVMAddr, suite.testEVMAddr)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
package ante
 | 
					package ante
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
	vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
 | 
						vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
 | 
				
			||||||
@ -18,7 +19,7 @@ func NewVestingAccountDecorator() VestingAccountDecorator {
 | 
				
			|||||||
func (vad VestingAccountDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) {
 | 
					func (vad VestingAccountDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) {
 | 
				
			||||||
	for _, msg := range tx.GetMsgs() {
 | 
						for _, msg := range tx.GetMsgs() {
 | 
				
			||||||
		if _, ok := msg.(*vesting.MsgCreateVestingAccount); ok {
 | 
							if _, ok := msg.(*vesting.MsgCreateVestingAccount); ok {
 | 
				
			||||||
			return ctx, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "MsgCreateVestingAccount not supported")
 | 
								return ctx, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "MsgCreateVestingAccount not supported")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
package app
 | 
					package app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
 | 
						bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
 | 
				
			||||||
	govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
 | 
						govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
 | 
				
			||||||
@ -188,7 +189,7 @@ func (th TallyHandler) Tally(
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// bkavaByDenom a map of the bkava denom and the amount of bkava for that denom.
 | 
					// bkavaByDenom a map of the bkava denom and the amount of bkava for that denom.
 | 
				
			||||||
type bkavaByDenom map[string]sdk.Int
 | 
					type bkavaByDenom map[string]sdkmath.Int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (bkavaMap bkavaByDenom) add(coin sdk.Coin) {
 | 
					func (bkavaMap bkavaByDenom) add(coin sdk.Coin) {
 | 
				
			||||||
	_, found := bkavaMap[coin.Denom]
 | 
						_, found := bkavaMap[coin.Denom]
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
 | 
						"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
@ -57,41 +58,41 @@ func (suite *tallyHandlerSuite) SetupTest() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *tallyHandlerSuite) TestVotePower_AllSourcesCounted() {
 | 
					func (suite *tallyHandlerSuite) TestVotePower_AllSourcesCounted() {
 | 
				
			||||||
	user := suite.createAccount(suite.newBondCoin(sdk.NewInt(1e9)))
 | 
						user := suite.createAccount(suite.newBondCoin(sdkmath.NewInt(1e9)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	validator := suite.delegateToNewBondedValidator(user.GetAddress(), sdk.NewInt(1e9))
 | 
						validator := suite.delegateToNewBondedValidator(user.GetAddress(), sdkmath.NewInt(1e9))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	derivatives := suite.mintDerivative(user.GetAddress(), validator.GetOperator(), sdk.NewInt(500e6))
 | 
						derivatives := suite.mintDerivative(user.GetAddress(), validator.GetOperator(), sdkmath.NewInt(500e6))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	suite.allowBKavaEarnDeposits()
 | 
						suite.allowBKavaEarnDeposits()
 | 
				
			||||||
	suite.earnDeposit(
 | 
						suite.earnDeposit(
 | 
				
			||||||
		user.GetAddress(),
 | 
							user.GetAddress(),
 | 
				
			||||||
		sdk.NewCoin(derivatives.Denom, sdk.NewInt(250e6)),
 | 
							sdk.NewCoin(derivatives.Denom, sdkmath.NewInt(250e6)),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	proposal := suite.createProposal()
 | 
						proposal := suite.createProposal()
 | 
				
			||||||
	suite.voteOnProposal(user.GetAddress(), proposal.Id, govv1beta1.OptionYes)
 | 
						suite.voteOnProposal(user.GetAddress(), proposal.Id, govv1beta1.OptionYes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, _, results := suite.tallier.Tally(suite.ctx, proposal)
 | 
						_, _, results := suite.tallier.Tally(suite.ctx, proposal)
 | 
				
			||||||
	suite.Equal(sdk.NewInt(500e6+250e6+250e6).String(), results.YesCount)
 | 
						suite.Equal(sdkmath.NewInt(500e6+250e6+250e6).String(), results.YesCount)
 | 
				
			||||||
	suite.Equal(sdk.ZeroInt().String(), results.NoCount)
 | 
						suite.Equal(sdk.ZeroInt().String(), results.NoCount)
 | 
				
			||||||
	suite.Equal(sdk.ZeroInt().String(), results.NoWithVetoCount)
 | 
						suite.Equal(sdk.ZeroInt().String(), results.NoWithVetoCount)
 | 
				
			||||||
	suite.Equal(sdk.ZeroInt().String(), results.AbstainCount)
 | 
						suite.Equal(sdk.ZeroInt().String(), results.AbstainCount)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *tallyHandlerSuite) TestVotePower_UserOverridesValidator() {
 | 
					func (suite *tallyHandlerSuite) TestVotePower_UserOverridesValidator() {
 | 
				
			||||||
	user := suite.createAccount(suite.newBondCoin(sdk.NewInt(1e9)))
 | 
						user := suite.createAccount(suite.newBondCoin(sdkmath.NewInt(1e9)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	delegated := sdk.NewInt(1e9)
 | 
						delegated := sdkmath.NewInt(1e9)
 | 
				
			||||||
	validator := suite.delegateToNewBondedValidator(user.GetAddress(), delegated)
 | 
						validator := suite.delegateToNewBondedValidator(user.GetAddress(), delegated)
 | 
				
			||||||
	selfDelegated := validator.GetTokens().Sub(delegated)
 | 
						selfDelegated := validator.GetTokens().Sub(delegated)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	derivatives := suite.mintDerivative(user.GetAddress(), validator.GetOperator(), sdk.NewInt(500e6))
 | 
						derivatives := suite.mintDerivative(user.GetAddress(), validator.GetOperator(), sdkmath.NewInt(500e6))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	suite.allowBKavaEarnDeposits()
 | 
						suite.allowBKavaEarnDeposits()
 | 
				
			||||||
	suite.earnDeposit(
 | 
						suite.earnDeposit(
 | 
				
			||||||
		user.GetAddress(),
 | 
							user.GetAddress(),
 | 
				
			||||||
		sdk.NewCoin(derivatives.Denom, sdk.NewInt(250e6)),
 | 
							sdk.NewCoin(derivatives.Denom, sdkmath.NewInt(250e6)),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	proposal := suite.createProposal()
 | 
						proposal := suite.createProposal()
 | 
				
			||||||
@ -102,7 +103,7 @@ func (suite *tallyHandlerSuite) TestVotePower_UserOverridesValidator() {
 | 
				
			|||||||
	// use wrapped context to discard the state changes
 | 
						// use wrapped context to discard the state changes
 | 
				
			||||||
	readOnlyCtx, _ := suite.ctx.CacheContext()
 | 
						readOnlyCtx, _ := suite.ctx.CacheContext()
 | 
				
			||||||
	_, _, results := suite.tallier.Tally(readOnlyCtx, proposal)
 | 
						_, _, results := suite.tallier.Tally(readOnlyCtx, proposal)
 | 
				
			||||||
	userPower := sdk.NewInt(500e6 + 250e6 + 250e6)
 | 
						userPower := sdkmath.NewInt(500e6 + 250e6 + 250e6)
 | 
				
			||||||
	suite.Equal(
 | 
						suite.Equal(
 | 
				
			||||||
		selfDelegated.Add(userPower).String(),
 | 
							selfDelegated.Add(userPower).String(),
 | 
				
			||||||
		results.YesCount,
 | 
							results.YesCount,
 | 
				
			||||||
@ -127,8 +128,8 @@ func (suite *tallyHandlerSuite) TestTallyOutcomes() {
 | 
				
			|||||||
		suite.setTallyParams(d("0.4"), d("0.5"), d("0.334"))
 | 
							suite.setTallyParams(d("0.4"), d("0.5"), d("0.334"))
 | 
				
			||||||
		proposal := suite.createProposal()
 | 
							proposal := suite.createProposal()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		v1 := suite.createNewBondedValidator(sdk.NewInt(399_999_999))
 | 
							v1 := suite.createNewBondedValidator(sdkmath.NewInt(399_999_999))
 | 
				
			||||||
		suite.createNewBondedValidator(sdk.NewInt(600_000_001))
 | 
							suite.createNewBondedValidator(sdkmath.NewInt(600_000_001))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		suite.voteOnProposal(v1.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionYes)
 | 
							suite.voteOnProposal(v1.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionYes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -141,8 +142,8 @@ func (suite *tallyHandlerSuite) TestTallyOutcomes() {
 | 
				
			|||||||
		suite.setTallyParams(d("0.4"), d("0.5"), d("0.334"))
 | 
							suite.setTallyParams(d("0.4"), d("0.5"), d("0.334"))
 | 
				
			||||||
		proposal := suite.createProposal()
 | 
							proposal := suite.createProposal()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		v1 := suite.createNewBondedValidator(sdk.NewInt(334_000_001))
 | 
							v1 := suite.createNewBondedValidator(sdkmath.NewInt(334_000_001))
 | 
				
			||||||
		v2 := suite.createNewBondedValidator(sdk.NewInt(665_999_999))
 | 
							v2 := suite.createNewBondedValidator(sdkmath.NewInt(665_999_999))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		suite.voteOnProposal(v1.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionNoWithVeto)
 | 
							suite.voteOnProposal(v1.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionNoWithVeto)
 | 
				
			||||||
		suite.voteOnProposal(v2.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionYes)
 | 
							suite.voteOnProposal(v2.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionYes)
 | 
				
			||||||
@ -156,9 +157,9 @@ func (suite *tallyHandlerSuite) TestTallyOutcomes() {
 | 
				
			|||||||
		suite.setTallyParams(d("0.4"), d("0.5"), d("0.334"))
 | 
							suite.setTallyParams(d("0.4"), d("0.5"), d("0.334"))
 | 
				
			||||||
		proposal := suite.createProposal()
 | 
							proposal := suite.createProposal()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		v1 := suite.createNewBondedValidator(sdk.NewInt(900_000_000))
 | 
							v1 := suite.createNewBondedValidator(sdkmath.NewInt(900_000_000))
 | 
				
			||||||
		v2 := suite.createNewBondedValidator(sdk.NewInt(50_000_001))
 | 
							v2 := suite.createNewBondedValidator(sdkmath.NewInt(50_000_001))
 | 
				
			||||||
		v3 := suite.createNewBondedValidator(sdk.NewInt(49_999_999))
 | 
							v3 := suite.createNewBondedValidator(sdkmath.NewInt(49_999_999))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		suite.voteOnProposal(v1.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionAbstain)
 | 
							suite.voteOnProposal(v1.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionAbstain)
 | 
				
			||||||
		suite.voteOnProposal(v2.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionYes)
 | 
							suite.voteOnProposal(v2.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionYes)
 | 
				
			||||||
@ -173,9 +174,9 @@ func (suite *tallyHandlerSuite) TestTallyOutcomes() {
 | 
				
			|||||||
		suite.setTallyParams(d("0.4"), d("0.5"), d("0.334"))
 | 
							suite.setTallyParams(d("0.4"), d("0.5"), d("0.334"))
 | 
				
			||||||
		proposal := suite.createProposal()
 | 
							proposal := suite.createProposal()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		v1 := suite.createNewBondedValidator(sdk.NewInt(900_000_000))
 | 
							v1 := suite.createNewBondedValidator(sdkmath.NewInt(900_000_000))
 | 
				
			||||||
		v2 := suite.createNewBondedValidator(sdk.NewInt(49_999_999))
 | 
							v2 := suite.createNewBondedValidator(sdkmath.NewInt(49_999_999))
 | 
				
			||||||
		v3 := suite.createNewBondedValidator(sdk.NewInt(50_000_001))
 | 
							v3 := suite.createNewBondedValidator(sdkmath.NewInt(50_000_001))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		suite.voteOnProposal(v1.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionAbstain)
 | 
							suite.voteOnProposal(v1.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionAbstain)
 | 
				
			||||||
		suite.voteOnProposal(v2.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionYes)
 | 
							suite.voteOnProposal(v2.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionYes)
 | 
				
			||||||
@ -202,7 +203,7 @@ func (suite *tallyHandlerSuite) TestTallyOutcomes() {
 | 
				
			|||||||
		suite.setTallyParams(d("0.4"), d("0.5"), d("0.334"))
 | 
							suite.setTallyParams(d("0.4"), d("0.5"), d("0.334"))
 | 
				
			||||||
		proposal := suite.createProposal()
 | 
							proposal := suite.createProposal()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		v1 := suite.createNewBondedValidator(sdk.NewInt(1e9))
 | 
							v1 := suite.createNewBondedValidator(sdkmath.NewInt(1e9))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		suite.voteOnProposal(v1.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionAbstain)
 | 
							suite.voteOnProposal(v1.GetOperator().Bytes(), proposal.Id, govv1beta1.OptionAbstain)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -263,7 +264,7 @@ func (suite *tallyHandlerSuite) createProposal() govv1.Proposal {
 | 
				
			|||||||
	return proposal
 | 
						return proposal
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *tallyHandlerSuite) newBondCoin(amount sdk.Int) sdk.Coin {
 | 
					func (suite *tallyHandlerSuite) newBondCoin(amount sdkmath.Int) sdk.Coin {
 | 
				
			||||||
	return suite.staking.newBondCoin(suite.ctx, amount)
 | 
						return suite.staking.newBondCoin(suite.ctx, amount)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -294,7 +295,7 @@ func (suite *tallyHandlerSuite) earnDeposit(owner sdk.AccAddress, derivative sdk
 | 
				
			|||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *tallyHandlerSuite) mintDerivative(owner sdk.AccAddress, validator sdk.ValAddress, amount sdk.Int) sdk.Coin {
 | 
					func (suite *tallyHandlerSuite) mintDerivative(owner sdk.AccAddress, validator sdk.ValAddress, amount sdkmath.Int) sdk.Coin {
 | 
				
			||||||
	lk := suite.app.GetLiquidKeeper()
 | 
						lk := suite.app.GetLiquidKeeper()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minted, err := lk.MintDerivative(suite.ctx, owner, validator, suite.newBondCoin(amount))
 | 
						minted, err := lk.MintDerivative(suite.ctx, owner, validator, suite.newBondCoin(amount))
 | 
				
			||||||
@ -303,9 +304,9 @@ func (suite *tallyHandlerSuite) mintDerivative(owner sdk.AccAddress, validator s
 | 
				
			|||||||
	return minted
 | 
						return minted
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *tallyHandlerSuite) delegateToNewBondedValidator(delegator sdk.AccAddress, amount sdk.Int) stakingtypes.ValidatorI {
 | 
					func (suite *tallyHandlerSuite) delegateToNewBondedValidator(delegator sdk.AccAddress, amount sdkmath.Int) stakingtypes.ValidatorI {
 | 
				
			||||||
	valAcc := suite.createAccount(suite.newBondCoin(sdk.NewInt(1e9)))
 | 
						valAcc := suite.createAccount(suite.newBondCoin(sdkmath.NewInt(1e9)))
 | 
				
			||||||
	validator, err := suite.staking.createUnbondedValidator(suite.ctx, valAcc.GetAddress().Bytes(), sdk.NewInt(1e9))
 | 
						validator, err := suite.staking.createUnbondedValidator(suite.ctx, valAcc.GetAddress().Bytes(), sdkmath.NewInt(1e9))
 | 
				
			||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err = suite.staking.delegate(suite.ctx, delegator, validator.GetOperator(), amount)
 | 
						_, err = suite.staking.delegate(suite.ctx, delegator, validator.GetOperator(), amount)
 | 
				
			||||||
@ -322,7 +323,7 @@ func (suite *tallyHandlerSuite) delegateToNewBondedValidator(delegator sdk.AccAd
 | 
				
			|||||||
	return validator
 | 
						return validator
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *tallyHandlerSuite) createNewBondedValidator(selfDelegation sdk.Int) stakingtypes.ValidatorI {
 | 
					func (suite *tallyHandlerSuite) createNewBondedValidator(selfDelegation sdkmath.Int) stakingtypes.ValidatorI {
 | 
				
			||||||
	valAcc := suite.createAccount(suite.newBondCoin(selfDelegation))
 | 
						valAcc := suite.createAccount(suite.newBondCoin(selfDelegation))
 | 
				
			||||||
	validator, err := suite.staking.createUnbondedValidator(suite.ctx, valAcc.GetAddress().Bytes(), selfDelegation)
 | 
						validator, err := suite.staking.createUnbondedValidator(suite.ctx, valAcc.GetAddress().Bytes(), selfDelegation)
 | 
				
			||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
@ -355,14 +356,14 @@ type stakingHelper struct {
 | 
				
			|||||||
	keeper stakingkeeper.Keeper
 | 
						keeper stakingkeeper.Keeper
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (h stakingHelper) createUnbondedValidator(ctx sdk.Context, address sdk.ValAddress, selfDelegation sdk.Int) (stakingtypes.ValidatorI, error) {
 | 
					func (h stakingHelper) createUnbondedValidator(ctx sdk.Context, address sdk.ValAddress, selfDelegation sdkmath.Int) (stakingtypes.ValidatorI, error) {
 | 
				
			||||||
	msg, err := stakingtypes.NewMsgCreateValidator(
 | 
						msg, err := stakingtypes.NewMsgCreateValidator(
 | 
				
			||||||
		address,
 | 
							address,
 | 
				
			||||||
		ed25519.GenPrivKey().PubKey(),
 | 
							ed25519.GenPrivKey().PubKey(),
 | 
				
			||||||
		h.newBondCoin(ctx, selfDelegation),
 | 
							h.newBondCoin(ctx, selfDelegation),
 | 
				
			||||||
		stakingtypes.Description{},
 | 
							stakingtypes.Description{},
 | 
				
			||||||
		stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()),
 | 
							stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()),
 | 
				
			||||||
		sdk.NewInt(1e6),
 | 
							sdkmath.NewInt(1e6),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
@ -381,7 +382,7 @@ func (h stakingHelper) createUnbondedValidator(ctx sdk.Context, address sdk.ValA
 | 
				
			|||||||
	return validator, nil
 | 
						return validator, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (h stakingHelper) delegate(ctx sdk.Context, delegator sdk.AccAddress, validator sdk.ValAddress, amount sdk.Int) (sdk.Dec, error) {
 | 
					func (h stakingHelper) delegate(ctx sdk.Context, delegator sdk.AccAddress, validator sdk.ValAddress, amount sdkmath.Int) (sdk.Dec, error) {
 | 
				
			||||||
	msg := stakingtypes.NewMsgDelegate(
 | 
						msg := stakingtypes.NewMsgDelegate(
 | 
				
			||||||
		delegator,
 | 
							delegator,
 | 
				
			||||||
		validator,
 | 
							validator,
 | 
				
			||||||
@ -401,7 +402,7 @@ func (h stakingHelper) delegate(ctx sdk.Context, delegator sdk.AccAddress, valid
 | 
				
			|||||||
	return del.Shares, nil
 | 
						return del.Shares, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (h stakingHelper) newBondCoin(ctx sdk.Context, amount sdk.Int) sdk.Coin {
 | 
					func (h stakingHelper) newBondCoin(ctx sdk.Context, amount sdkmath.Int) sdk.Coin {
 | 
				
			||||||
	return sdk.NewCoin(h.keeper.BondDenom(ctx), amount)
 | 
						return sdk.NewCoin(h.keeper.BondDenom(ctx), amount)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/baseapp"
 | 
						"github.com/cosmos/cosmos-sdk/baseapp"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	codectypes "github.com/cosmos/cosmos-sdk/codec/types"
 | 
						codectypes "github.com/cosmos/cosmos-sdk/codec/types"
 | 
				
			||||||
@ -164,7 +165,7 @@ func GenesisStateWithSingleValidator(
 | 
				
			|||||||
	balances := []banktypes.Balance{
 | 
						balances := []banktypes.Balance{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Address: acc.GetAddress().String(),
 | 
								Address: acc.GetAddress().String(),
 | 
				
			||||||
			Coins:   sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(100000000000000))),
 | 
								Coins:   sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(100000000000000))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -407,7 +408,7 @@ func (tApp TestApp) CheckBalance(t *testing.T, ctx sdk.Context, owner sdk.AccAdd
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetModuleAccountBalance gets the current balance of the denom for a module account
 | 
					// GetModuleAccountBalance gets the current balance of the denom for a module account
 | 
				
			||||||
func (tApp TestApp) GetModuleAccountBalance(ctx sdk.Context, moduleName string, denom string) sdk.Int {
 | 
					func (tApp TestApp) GetModuleAccountBalance(ctx sdk.Context, moduleName string, denom string) sdkmath.Int {
 | 
				
			||||||
	moduleAcc := tApp.accountKeeper.GetModuleAccount(ctx, moduleName)
 | 
						moduleAcc := tApp.accountKeeper.GetModuleAccount(ctx, moduleName)
 | 
				
			||||||
	balance := tApp.bankKeeper.GetBalance(ctx, moduleAcc.GetAddress(), denom)
 | 
						balance := tApp.bankKeeper.GetBalance(ctx, moduleAcc.GetAddress(), denom)
 | 
				
			||||||
	return balance.Amount
 | 
						return balance.Amount
 | 
				
			||||||
@ -438,14 +439,14 @@ func (tApp TestApp) FundModuleAccount(ctx sdk.Context, recipientMod string, amou
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// CreateNewUnbondedValidator creates a new validator in the staking module.
 | 
					// CreateNewUnbondedValidator creates a new validator in the staking module.
 | 
				
			||||||
// New validators are unbonded until the end blocker is run.
 | 
					// New validators are unbonded until the end blocker is run.
 | 
				
			||||||
func (tApp TestApp) CreateNewUnbondedValidator(ctx sdk.Context, valAddress sdk.ValAddress, selfDelegation sdk.Int) error {
 | 
					func (tApp TestApp) CreateNewUnbondedValidator(ctx sdk.Context, valAddress sdk.ValAddress, selfDelegation sdkmath.Int) error {
 | 
				
			||||||
	msg, err := stakingtypes.NewMsgCreateValidator(
 | 
						msg, err := stakingtypes.NewMsgCreateValidator(
 | 
				
			||||||
		valAddress,
 | 
							valAddress,
 | 
				
			||||||
		ed25519.GenPrivKey().PubKey(),
 | 
							ed25519.GenPrivKey().PubKey(),
 | 
				
			||||||
		sdk.NewCoin(tApp.stakingKeeper.BondDenom(ctx), selfDelegation),
 | 
							sdk.NewCoin(tApp.stakingKeeper.BondDenom(ctx), selfDelegation),
 | 
				
			||||||
		stakingtypes.Description{},
 | 
							stakingtypes.Description{},
 | 
				
			||||||
		stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()),
 | 
							stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()),
 | 
				
			||||||
		sdk.NewInt(1e6),
 | 
							sdkmath.NewInt(1e6),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
 | 
				
			|||||||
@ -48,7 +48,7 @@ var (
 | 
				
			|||||||
		sdk.NewCoin(fee2Denom, sdk.TokensFromConsensusPower(2000000)),
 | 
							sdk.NewCoin(fee2Denom, sdk.TokensFromConsensusPower(2000000)),
 | 
				
			||||||
		sdk.NewCoin(feeDenom, sdk.TokensFromConsensusPower(2000000)),
 | 
							sdk.NewCoin(feeDenom, sdk.TokensFromConsensusPower(2000000)),
 | 
				
			||||||
		sdk.NewCoin(fooDenom, sdk.TokensFromConsensusPower(2000)),
 | 
							sdk.NewCoin(fooDenom, sdk.TokensFromConsensusPower(2000)),
 | 
				
			||||||
		sdk.NewCoin(denom, sdk.TokensFromConsensusPower(300).Add(sdk.NewInt(12))), // add coins from inflation
 | 
							sdk.NewCoin(denom, sdk.TokensFromConsensusPower(300).Add(sdkmath.NewInt(12))), // add coins from inflation
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	startCoins = sdk.NewCoins(
 | 
						startCoins = sdk.NewCoins(
 | 
				
			||||||
@ -707,12 +707,12 @@ func (f *Fixtures) QueryTotalSupply(flags ...string) (totalSupply sdk.Coins) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// QueryTotalSupplyOf returns the total supply of a given coin denom
 | 
					// QueryTotalSupplyOf returns the total supply of a given coin denom
 | 
				
			||||||
func (f *Fixtures) QueryTotalSupplyOf(denom string, flags ...string) sdk.Int {
 | 
					func (f *Fixtures) QueryTotalSupplyOf(denom string, flags ...string) sdkmath.Int {
 | 
				
			||||||
	cmd := fmt.Sprintf("%s query supply total %s %s", f.KvcliBinary, denom, f.Flags())
 | 
						cmd := fmt.Sprintf("%s query supply total %s %s", f.KvcliBinary, denom, f.Flags())
 | 
				
			||||||
	res, errStr := tests.ExecuteT(f.T, cmd, "")
 | 
						res, errStr := tests.ExecuteT(f.T, cmd, "")
 | 
				
			||||||
	require.Empty(f.T, errStr)
 | 
						require.Empty(f.T, errStr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var supplyOf sdk.Int
 | 
						var supplyOf sdkmath.Int
 | 
				
			||||||
	err := f.cdc.UnmarshalJSON([]byte(res), &supplyOf)
 | 
						err := f.cdc.UnmarshalJSON([]byte(res), &supplyOf)
 | 
				
			||||||
	require.NoError(f.T, err)
 | 
						require.NoError(f.T, err)
 | 
				
			||||||
	return supplyOf
 | 
						return supplyOf
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@ -3,6 +3,7 @@ module github.com/kava-labs/kava
 | 
				
			|||||||
go 1.19
 | 
					go 1.19
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
 | 
						cosmossdk.io/errors v1.0.0-beta.7
 | 
				
			||||||
	cosmossdk.io/math v1.0.0-beta.6.0.20230216172121-959ce49135e4
 | 
						cosmossdk.io/math v1.0.0-beta.6.0.20230216172121-959ce49135e4
 | 
				
			||||||
	github.com/cenkalti/backoff/v4 v4.1.3
 | 
						github.com/cenkalti/backoff/v4 v4.1.3
 | 
				
			||||||
	github.com/cosmos/cosmos-proto v1.0.0-beta.1
 | 
						github.com/cosmos/cosmos-proto v1.0.0-beta.1
 | 
				
			||||||
@ -33,7 +34,6 @@ require (
 | 
				
			|||||||
	cloud.google.com/go/compute/metadata v0.2.3 // indirect
 | 
						cloud.google.com/go/compute/metadata v0.2.3 // indirect
 | 
				
			||||||
	cloud.google.com/go/iam v0.8.0 // indirect
 | 
						cloud.google.com/go/iam v0.8.0 // indirect
 | 
				
			||||||
	cloud.google.com/go/storage v1.27.0 // indirect
 | 
						cloud.google.com/go/storage v1.27.0 // indirect
 | 
				
			||||||
	cosmossdk.io/errors v1.0.0-beta.7 // indirect
 | 
					 | 
				
			||||||
	filippo.io/edwards25519 v1.0.0-rc.1 // indirect
 | 
						filippo.io/edwards25519 v1.0.0-rc.1 // indirect
 | 
				
			||||||
	github.com/99designs/keyring v1.2.1 // indirect
 | 
						github.com/99designs/keyring v1.2.1 // indirect
 | 
				
			||||||
	github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
 | 
						github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
 | 
						"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
@ -40,7 +41,7 @@ func TestResetPeriodVestingAccount_NoVestingPeriods(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestResetPeriodVestingAccount_SingleVestingPeriod_Vested(t *testing.T) {
 | 
					func TestResetPeriodVestingAccount_SingleVestingPeriod_Vested(t *testing.T) {
 | 
				
			||||||
	balance := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6)))
 | 
						balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6)))
 | 
				
			||||||
	vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
						vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	periods := vestingtypes.Periods{
 | 
						periods := vestingtypes.Periods{
 | 
				
			||||||
@ -63,7 +64,7 @@ func TestResetPeriodVestingAccount_SingleVestingPeriod_Vested(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestResetPeriodVestingAccount_SingleVestingPeriod_Vesting(t *testing.T) {
 | 
					func TestResetPeriodVestingAccount_SingleVestingPeriod_Vesting(t *testing.T) {
 | 
				
			||||||
	balance := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6)))
 | 
						balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6)))
 | 
				
			||||||
	vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
						vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	periods := vestingtypes.Periods{
 | 
						periods := vestingtypes.Periods{
 | 
				
			||||||
@ -96,7 +97,7 @@ func TestResetPeriodVestingAccount_SingleVestingPeriod_Vesting(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestResetPeriodVestingAccount_SingleVestingPeriod_ExactStartTime(t *testing.T) {
 | 
					func TestResetPeriodVestingAccount_SingleVestingPeriod_ExactStartTime(t *testing.T) {
 | 
				
			||||||
	balance := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6)))
 | 
						balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6)))
 | 
				
			||||||
	vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
						vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	periods := vestingtypes.Periods{
 | 
						periods := vestingtypes.Periods{
 | 
				
			||||||
@ -124,25 +125,25 @@ func TestResetPeriodVestingAccount_SingleVestingPeriod_ExactStartTime(t *testing
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestResetPeriodVestingAccount_MultiplePeriods(t *testing.T) {
 | 
					func TestResetPeriodVestingAccount_MultiplePeriods(t *testing.T) {
 | 
				
			||||||
	balance := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(4e6)))
 | 
						balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(4e6)))
 | 
				
			||||||
	vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
						vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	periods := vestingtypes.Periods{
 | 
						periods := vestingtypes.Periods{
 | 
				
			||||||
		vestingtypes.Period{
 | 
							vestingtypes.Period{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // -15 days - vested
 | 
								Length: 15 * 24 * 60 * 60, // -15 days - vested
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		vestingtypes.Period{
 | 
							vestingtypes.Period{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
 | 
								Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		vestingtypes.Period{
 | 
							vestingtypes.Period{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // +15 days - vesting
 | 
								Length: 15 * 24 * 60 * 60, // +15 days - vesting
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		vestingtypes.Period{
 | 
							vestingtypes.Period{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // +30 days - vesting
 | 
								Length: 15 * 24 * 60 * 60, // +30 days - vesting
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -158,36 +159,36 @@ func TestResetPeriodVestingAccount_MultiplePeriods(t *testing.T) {
 | 
				
			|||||||
	expectedPeriods := []vestingtypes.Period{
 | 
						expectedPeriods := []vestingtypes.Period{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // 15 days
 | 
								Length: 15 * 24 * 60 * 60, // 15 days
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // 15 days
 | 
								Length: 15 * 24 * 60 * 60, // 15 days
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(2e6))), vacc.OriginalVesting, "expected original vesting to be updated")
 | 
						assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(2e6))), vacc.OriginalVesting, "expected original vesting to be updated")
 | 
				
			||||||
	assert.Equal(t, newVestingStartTime.Unix(), vacc.StartTime, "expected vesting start time to be updated")
 | 
						assert.Equal(t, newVestingStartTime.Unix(), vacc.StartTime, "expected vesting start time to be updated")
 | 
				
			||||||
	assert.Equal(t, expectedEndtime, vacc.EndTime, "expected vesting end time end at last period")
 | 
						assert.Equal(t, expectedEndtime, vacc.EndTime, "expected vesting end time end at last period")
 | 
				
			||||||
	assert.Equal(t, expectedPeriods, vacc.VestingPeriods, "expected vesting periods to be updated")
 | 
						assert.Equal(t, expectedPeriods, vacc.VestingPeriods, "expected vesting periods to be updated")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestResetPeriodVestingAccount_DelegatedVesting_GreaterThanVesting(t *testing.T) {
 | 
					func TestResetPeriodVestingAccount_DelegatedVesting_GreaterThanVesting(t *testing.T) {
 | 
				
			||||||
	balance := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(3e6)))
 | 
						balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(3e6)))
 | 
				
			||||||
	vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
						vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	periods := vestingtypes.Periods{
 | 
						periods := vestingtypes.Periods{
 | 
				
			||||||
		vestingtypes.Period{
 | 
							vestingtypes.Period{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // -15 days - vested
 | 
								Length: 15 * 24 * 60 * 60, // -15 days - vested
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		vestingtypes.Period{
 | 
							vestingtypes.Period{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
 | 
								Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		vestingtypes.Period{
 | 
							vestingtypes.Period{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // +15 days - vesting
 | 
								Length: 15 * 24 * 60 * 60, // +15 days - vesting
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -197,35 +198,35 @@ func TestResetPeriodVestingAccount_DelegatedVesting_GreaterThanVesting(t *testin
 | 
				
			|||||||
	newVestingStartTime := vestingStartTime.Add(30 * 24 * time.Hour)
 | 
						newVestingStartTime := vestingStartTime.Add(30 * 24 * time.Hour)
 | 
				
			||||||
	ResetPeriodicVestingAccount(vacc, newVestingStartTime)
 | 
						ResetPeriodicVestingAccount(vacc, newVestingStartTime)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(2e6))), vacc.DelegatedFree, "expected delegated free to be updated")
 | 
						assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(2e6))), vacc.DelegatedFree, "expected delegated free to be updated")
 | 
				
			||||||
	assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))), vacc.DelegatedVesting, "expected delegated vesting to be updated")
 | 
						assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))), vacc.DelegatedVesting, "expected delegated vesting to be updated")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestResetPeriodVestingAccount_DelegatedVesting_LessThanVested(t *testing.T) {
 | 
					func TestResetPeriodVestingAccount_DelegatedVesting_LessThanVested(t *testing.T) {
 | 
				
			||||||
	balance := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(3e6)))
 | 
						balance := sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(3e6)))
 | 
				
			||||||
	vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
						vestingStartTime := time.Now().Add(-30 * 24 * time.Hour) // 30 days in past
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	periods := vestingtypes.Periods{
 | 
						periods := vestingtypes.Periods{
 | 
				
			||||||
		vestingtypes.Period{
 | 
							vestingtypes.Period{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // -15 days - vested
 | 
								Length: 15 * 24 * 60 * 60, // -15 days - vested
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		vestingtypes.Period{
 | 
							vestingtypes.Period{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
 | 
								Length: 15 * 24 * 60 * 60, // 0 days - exact on the start time
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		vestingtypes.Period{
 | 
							vestingtypes.Period{
 | 
				
			||||||
			Length: 15 * 24 * 60 * 60, // +15 days - vesting
 | 
								Length: 15 * 24 * 60 * 60, // +15 days - vesting
 | 
				
			||||||
			Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))),
 | 
								Amount: sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vacc := createVestingAccount(balance, vestingStartTime, periods)
 | 
						vacc := createVestingAccount(balance, vestingStartTime, periods)
 | 
				
			||||||
	vacc.TrackDelegation(vestingStartTime, balance, sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))))
 | 
						vacc.TrackDelegation(vestingStartTime, balance, sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	newVestingStartTime := vestingStartTime.Add(30 * 24 * time.Hour)
 | 
						newVestingStartTime := vestingStartTime.Add(30 * 24 * time.Hour)
 | 
				
			||||||
	ResetPeriodicVestingAccount(vacc, newVestingStartTime)
 | 
						ResetPeriodicVestingAccount(vacc, newVestingStartTime)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	assert.Equal(t, sdk.Coins(nil), vacc.DelegatedFree, "expected delegrated free to be unmodified")
 | 
						assert.Equal(t, sdk.Coins(nil), vacc.DelegatedFree, "expected delegrated free to be unmodified")
 | 
				
			||||||
	assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1e6))), vacc.DelegatedVesting, "expected delegated vesting to be unmodified")
 | 
						assert.Equal(t, sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1e6))), vacc.DelegatedVesting, "expected delegated vesting to be unmodified")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
 | 
						"github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
 | 
						banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
 | 
				
			||||||
@ -27,7 +28,7 @@ var (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func ukava(amt int64) sdk.Coin {
 | 
					func ukava(amt int64) sdk.Coin {
 | 
				
			||||||
	return sdk.NewCoin("ukava", sdk.NewInt(amt))
 | 
						return sdk.NewCoin("ukava", sdkmath.NewInt(amt))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type IntegrationTestSuite struct {
 | 
					type IntegrationTestSuite struct {
 | 
				
			||||||
@ -102,13 +103,13 @@ func (suite *IntegrationTestSuite) TestTransferOverEVM() {
 | 
				
			|||||||
	suite.Equal(ethtypes.ReceiptStatusSuccessful, res.Receipt.Status)
 | 
						suite.Equal(ethtypes.ReceiptStatusSuccessful, res.Receipt.Status)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// evm txs refund unused gas. so to know the expected balance we need to know how much gas was used.
 | 
						// evm txs refund unused gas. so to know the expected balance we need to know how much gas was used.
 | 
				
			||||||
	ukavaUsedForGas := sdk.NewIntFromBigInt(minEvmGasPrice).
 | 
						ukavaUsedForGas := sdkmath.NewIntFromBigInt(minEvmGasPrice).
 | 
				
			||||||
		Mul(sdk.NewIntFromUint64(res.Receipt.GasUsed)).
 | 
							Mul(sdkmath.NewIntFromUint64(res.Receipt.GasUsed)).
 | 
				
			||||||
		QuoRaw(1e12) // convert akava to ukava
 | 
							QuoRaw(1e12) // convert akava to ukava
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// expect (9 - gas used) KAVA remaining in account.
 | 
						// expect (9 - gas used) KAVA remaining in account.
 | 
				
			||||||
	balance := suite.Kava.QuerySdkForBalances(acc.SdkAddress)
 | 
						balance := suite.Kava.QuerySdkForBalances(acc.SdkAddress)
 | 
				
			||||||
	suite.Equal(sdk.NewInt(9e6).Sub(ukavaUsedForGas), balance.AmountOf("ukava"))
 | 
						suite.Equal(sdkmath.NewInt(9e6).Sub(ukavaUsedForGas), balance.AmountOf("ukava"))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestIbcTransfer transfers KAVA from the primary kava chain (suite.Kava) to the ibc chain (suite.Ibc).
 | 
					// TestIbcTransfer transfers KAVA from the primary kava chain (suite.Kava) to the ibc chain (suite.Ibc).
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/crypto/hd"
 | 
						"github.com/cosmos/cosmos-sdk/crypto/hd"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
 | 
						banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
 | 
				
			||||||
@ -194,7 +195,7 @@ func (chain *Chain) NewFundedAccount(name string, funds sdk.Coins) *SigningAccou
 | 
				
			|||||||
				banktypes.NewMsgSend(whale.SdkAddress, acc.SdkAddress, funds),
 | 
									banktypes.NewMsgSend(whale.SdkAddress, acc.SdkAddress, funds),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			GasLimit:  2e5,
 | 
								GasLimit:  2e5,
 | 
				
			||||||
			FeeAmount: sdk.NewCoins(sdk.NewCoin(chain.StakingDenom, sdk.NewInt(75000))),
 | 
								FeeAmount: sdk.NewCoins(sdk.NewCoin(chain.StakingDenom, sdkmath.NewInt(75000))),
 | 
				
			||||||
			Data:      fmt.Sprintf("initial funding of account %s", name),
 | 
								Data:      fmt.Sprintf("initial funding of account %s", name),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/app/params"
 | 
						"github.com/kava-labs/kava/app/params"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdkclient "github.com/cosmos/cosmos-sdk/client"
 | 
						sdkclient "github.com/cosmos/cosmos-sdk/client"
 | 
				
			||||||
	cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
 | 
						cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
@ -303,7 +304,7 @@ func (s *KavaSigner) Run(requests <-chan KavaMsgRequest) (<-chan KavaMsgResponse
 | 
				
			|||||||
					// determine action to take based on rpc result
 | 
										// determine action to take based on rpc result
 | 
				
			||||||
					switch response.Result.Code {
 | 
										switch response.Result.Code {
 | 
				
			||||||
					// 0: success, in mempool
 | 
										// 0: success, in mempool
 | 
				
			||||||
					case sdkerrors.SuccessABCICode:
 | 
										case errorsmod.SuccessABCICode:
 | 
				
			||||||
						txResult = txOK
 | 
											txResult = txOK
 | 
				
			||||||
					// 4: unauthorized
 | 
										// 4: unauthorized
 | 
				
			||||||
					case sdkerrors.ErrUnauthorized.ABCICode():
 | 
										case sdkerrors.ErrUnauthorized.ABCICode():
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/auction"
 | 
						"github.com/kava-labs/kava/x/auction"
 | 
				
			||||||
@ -27,7 +28,7 @@ func TestABCITestSuite(t *testing.T) {
 | 
				
			|||||||
func (suite *abciTestSuite) TestKeeper_BeginBlocker() {
 | 
					func (suite *abciTestSuite) TestKeeper_BeginBlocker() {
 | 
				
			||||||
	buyer := suite.Addrs[0]
 | 
						buyer := suite.Addrs[0]
 | 
				
			||||||
	returnAddrs := []sdk.AccAddress{suite.Addrs[1]}
 | 
						returnAddrs := []sdk.AccAddress{suite.Addrs[1]}
 | 
				
			||||||
	returnWeights := []sdk.Int{sdk.NewInt(1)}
 | 
						returnWeights := []sdkmath.Int{sdkmath.NewInt(1)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	suite.AddCoinsToNamedModule(suite.ModAcc.Name, cs(c("token1", 100), c("token2", 100), c("debt", 100)))
 | 
						suite.AddCoinsToNamedModule(suite.ModAcc.Name, cs(c("token1", 100), c("token2", 100), c("debt", 100)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,10 +4,10 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/client"
 | 
						"github.com/cosmos/cosmos-sdk/client"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
	authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
 | 
						authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/auction/types"
 | 
						"github.com/kava-labs/kava/x/auction/types"
 | 
				
			||||||
@ -47,7 +47,7 @@ func QueryAuctionByID(cliCtx client.Context, cdc *codec.Codec, queryRoute string
 | 
				
			|||||||
	cliCtx.LegacyAmino.MustUnmarshalJSON(res, &nextAuctionID)
 | 
						cliCtx.LegacyAmino.MustUnmarshalJSON(res, &nextAuctionID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if auctionID >= nextAuctionID {
 | 
						if auctionID >= nextAuctionID {
 | 
				
			||||||
		return nil, 0, sdkerrors.Wrapf(types.ErrAuctionNotFound, "%d", auctionID)
 | 
							return nil, 0, errorsmod.Wrapf(types.ErrAuctionNotFound, "%d", auctionID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	events := []string{
 | 
						events := []string{
 | 
				
			||||||
@ -79,7 +79,7 @@ func QueryAuctionByID(cliCtx client.Context, cdc *codec.Codec, queryRoute string
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return nil, 0, sdkerrors.Wrapf(types.ErrAuctionNotFound, "%d", auctionID)
 | 
							return nil, 0, errorsmod.Wrapf(types.ErrAuctionNotFound, "%d", auctionID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	queryCLIContext := cliCtx.WithHeight(maxHeight)
 | 
						queryCLIContext := cliCtx.WithHeight(maxHeight)
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/require"
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
						tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
				
			||||||
@ -24,7 +25,7 @@ var (
 | 
				
			|||||||
		c("lotdenom", 10),
 | 
							c("lotdenom", 10),
 | 
				
			||||||
		testTime,
 | 
							testTime,
 | 
				
			||||||
		c("biddenom", 1000),
 | 
							c("biddenom", 1000),
 | 
				
			||||||
		types.WeightedAddresses{Addresses: testAddrs, Weights: []sdk.Int{sdk.OneInt(), sdk.OneInt()}},
 | 
							types.WeightedAddresses{Addresses: testAddrs, Weights: []sdkmath.Int{sdk.OneInt(), sdk.OneInt()}},
 | 
				
			||||||
		c("debt", 1000),
 | 
							c("debt", 1000),
 | 
				
			||||||
	).WithID(3).(types.GenesisAuction)
 | 
						).WithID(3).(types.GenesisAuction)
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
@ -5,8 +5,9 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/auction/types"
 | 
						"github.com/kava-labs/kava/x/auction/types"
 | 
				
			||||||
@ -86,7 +87,7 @@ func (k Keeper) StartDebtAuction(ctx sdk.Context, buyer string, bid sdk.Coin, in
 | 
				
			|||||||
// StartCollateralAuction starts a new collateral (2-phase) auction.
 | 
					// StartCollateralAuction starts a new collateral (2-phase) auction.
 | 
				
			||||||
func (k Keeper) StartCollateralAuction(
 | 
					func (k Keeper) StartCollateralAuction(
 | 
				
			||||||
	ctx sdk.Context, seller string, lot, maxBid sdk.Coin,
 | 
						ctx sdk.Context, seller string, lot, maxBid sdk.Coin,
 | 
				
			||||||
	lotReturnAddrs []sdk.AccAddress, lotReturnWeights []sdk.Int, debt sdk.Coin,
 | 
						lotReturnAddrs []sdk.AccAddress, lotReturnWeights []sdkmath.Int, debt sdk.Coin,
 | 
				
			||||||
) (uint64, error) {
 | 
					) (uint64, error) {
 | 
				
			||||||
	weightedAddresses, err := types.NewWeightedAddresses(lotReturnAddrs, lotReturnWeights)
 | 
						weightedAddresses, err := types.NewWeightedAddresses(lotReturnAddrs, lotReturnWeights)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -133,12 +134,12 @@ func (k Keeper) StartCollateralAuction(
 | 
				
			|||||||
func (k Keeper) PlaceBid(ctx sdk.Context, auctionID uint64, bidder sdk.AccAddress, newAmount sdk.Coin) error {
 | 
					func (k Keeper) PlaceBid(ctx sdk.Context, auctionID uint64, bidder sdk.AccAddress, newAmount sdk.Coin) error {
 | 
				
			||||||
	auction, found := k.GetAuction(ctx, auctionID)
 | 
						auction, found := k.GetAuction(ctx, auctionID)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrAuctionNotFound, "%d", auctionID)
 | 
							return errorsmod.Wrapf(types.ErrAuctionNotFound, "%d", auctionID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// validation common to all auctions
 | 
						// validation common to all auctions
 | 
				
			||||||
	if ctx.BlockTime().After(auction.GetEndTime()) {
 | 
						if ctx.BlockTime().After(auction.GetEndTime()) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrAuctionHasExpired, "%d", auctionID)
 | 
							return errorsmod.Wrapf(types.ErrAuctionHasExpired, "%d", auctionID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// move coins and return updated auction
 | 
						// move coins and return updated auction
 | 
				
			||||||
@ -158,7 +159,7 @@ func (k Keeper) PlaceBid(ctx sdk.Context, auctionID uint64, bidder sdk.AccAddres
 | 
				
			|||||||
			updatedAuction, err = k.PlaceReverseBidCollateral(ctx, auctionType, bidder, newAmount)
 | 
								updatedAuction, err = k.PlaceReverseBidCollateral(ctx, auctionType, bidder, newAmount)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		err = sdkerrors.Wrap(types.ErrUnrecognizedAuctionType, auction.GetType())
 | 
							err = errorsmod.Wrap(types.ErrUnrecognizedAuctionType, auction.GetType())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -174,16 +175,16 @@ func (k Keeper) PlaceBid(ctx sdk.Context, auctionID uint64, bidder sdk.AccAddres
 | 
				
			|||||||
func (k Keeper) PlaceBidSurplus(ctx sdk.Context, auction *types.SurplusAuction, bidder sdk.AccAddress, bid sdk.Coin) (*types.SurplusAuction, error) {
 | 
					func (k Keeper) PlaceBidSurplus(ctx sdk.Context, auction *types.SurplusAuction, bidder sdk.AccAddress, bid sdk.Coin) (*types.SurplusAuction, error) {
 | 
				
			||||||
	// Validate new bid
 | 
						// Validate new bid
 | 
				
			||||||
	if bid.Denom != auction.Bid.Denom {
 | 
						if bid.Denom != auction.Bid.Denom {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrInvalidBidDenom, "%s ≠ %s", bid.Denom, auction.Bid.Denom)
 | 
							return auction, errorsmod.Wrapf(types.ErrInvalidBidDenom, "%s ≠ %s", bid.Denom, auction.Bid.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	minNewBidAmt := auction.Bid.Amount.Add( // new bids must be some % greater than old bid, and at least 1 larger to avoid replacing an old bid at no cost
 | 
						minNewBidAmt := auction.Bid.Amount.Add( // new bids must be some % greater than old bid, and at least 1 larger to avoid replacing an old bid at no cost
 | 
				
			||||||
		sdk.MaxInt(
 | 
							sdk.MaxInt(
 | 
				
			||||||
			sdk.NewInt(1),
 | 
								sdkmath.NewInt(1),
 | 
				
			||||||
			sdk.NewDecFromInt(auction.Bid.Amount).Mul(k.GetParams(ctx).IncrementSurplus).RoundInt(),
 | 
								sdk.NewDecFromInt(auction.Bid.Amount).Mul(k.GetParams(ctx).IncrementSurplus).RoundInt(),
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	if bid.Amount.LT(minNewBidAmt) {
 | 
						if bid.Amount.LT(minNewBidAmt) {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrBidTooSmall, "%s < %s%s", bid, minNewBidAmt, auction.Bid.Denom)
 | 
							return auction, errorsmod.Wrapf(types.ErrBidTooSmall, "%s < %s%s", bid, minNewBidAmt, auction.Bid.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// New bidder pays back old bidder
 | 
						// New bidder pays back old bidder
 | 
				
			||||||
@ -236,23 +237,23 @@ func (k Keeper) PlaceBidSurplus(ctx sdk.Context, auction *types.SurplusAuction,
 | 
				
			|||||||
func (k Keeper) PlaceForwardBidCollateral(ctx sdk.Context, auction *types.CollateralAuction, bidder sdk.AccAddress, bid sdk.Coin) (*types.CollateralAuction, error) {
 | 
					func (k Keeper) PlaceForwardBidCollateral(ctx sdk.Context, auction *types.CollateralAuction, bidder sdk.AccAddress, bid sdk.Coin) (*types.CollateralAuction, error) {
 | 
				
			||||||
	// Validate new bid
 | 
						// Validate new bid
 | 
				
			||||||
	if bid.Denom != auction.Bid.Denom {
 | 
						if bid.Denom != auction.Bid.Denom {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrInvalidBidDenom, "%s ≠ %s", bid.Denom, auction.Bid.Denom)
 | 
							return auction, errorsmod.Wrapf(types.ErrInvalidBidDenom, "%s ≠ %s", bid.Denom, auction.Bid.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if auction.IsReversePhase() {
 | 
						if auction.IsReversePhase() {
 | 
				
			||||||
		panic("cannot place reverse bid on auction in forward phase")
 | 
							panic("cannot place reverse bid on auction in forward phase")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	minNewBidAmt := auction.Bid.Amount.Add( // new bids must be some % greater than old bid, and at least 1 larger to avoid replacing an old bid at no cost
 | 
						minNewBidAmt := auction.Bid.Amount.Add( // new bids must be some % greater than old bid, and at least 1 larger to avoid replacing an old bid at no cost
 | 
				
			||||||
		sdk.MaxInt(
 | 
							sdk.MaxInt(
 | 
				
			||||||
			sdk.NewInt(1),
 | 
								sdkmath.NewInt(1),
 | 
				
			||||||
			sdk.NewDecFromInt(auction.Bid.Amount).Mul(k.GetParams(ctx).IncrementCollateral).RoundInt(),
 | 
								sdk.NewDecFromInt(auction.Bid.Amount).Mul(k.GetParams(ctx).IncrementCollateral).RoundInt(),
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	minNewBidAmt = sdk.MinInt(minNewBidAmt, auction.MaxBid.Amount) // allow new bids to hit MaxBid even though it may be less than the increment %
 | 
						minNewBidAmt = sdk.MinInt(minNewBidAmt, auction.MaxBid.Amount) // allow new bids to hit MaxBid even though it may be less than the increment %
 | 
				
			||||||
	if bid.Amount.LT(minNewBidAmt) {
 | 
						if bid.Amount.LT(minNewBidAmt) {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrBidTooSmall, "%s < %s%s", bid, minNewBidAmt, auction.Bid.Denom)
 | 
							return auction, errorsmod.Wrapf(types.ErrBidTooSmall, "%s < %s%s", bid, minNewBidAmt, auction.Bid.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if auction.MaxBid.IsLT(bid) {
 | 
						if auction.MaxBid.IsLT(bid) {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrBidTooLarge, "%s > %s", bid, auction.MaxBid)
 | 
							return auction, errorsmod.Wrapf(types.ErrBidTooLarge, "%s > %s", bid, auction.MaxBid)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// New bidder pays back old bidder
 | 
						// New bidder pays back old bidder
 | 
				
			||||||
@ -318,22 +319,22 @@ func (k Keeper) PlaceForwardBidCollateral(ctx sdk.Context, auction *types.Collat
 | 
				
			|||||||
func (k Keeper) PlaceReverseBidCollateral(ctx sdk.Context, auction *types.CollateralAuction, bidder sdk.AccAddress, lot sdk.Coin) (*types.CollateralAuction, error) {
 | 
					func (k Keeper) PlaceReverseBidCollateral(ctx sdk.Context, auction *types.CollateralAuction, bidder sdk.AccAddress, lot sdk.Coin) (*types.CollateralAuction, error) {
 | 
				
			||||||
	// Validate new bid
 | 
						// Validate new bid
 | 
				
			||||||
	if lot.Denom != auction.Lot.Denom {
 | 
						if lot.Denom != auction.Lot.Denom {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrInvalidLotDenom, "%s ≠ %s", lot.Denom, auction.Lot.Denom)
 | 
							return auction, errorsmod.Wrapf(types.ErrInvalidLotDenom, "%s ≠ %s", lot.Denom, auction.Lot.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !auction.IsReversePhase() {
 | 
						if !auction.IsReversePhase() {
 | 
				
			||||||
		panic("cannot place forward bid on auction in reverse phase")
 | 
							panic("cannot place forward bid on auction in reverse phase")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	maxNewLotAmt := auction.Lot.Amount.Sub( // new lot must be some % less than old lot, and at least 1 smaller to avoid replacing an old bid at no cost
 | 
						maxNewLotAmt := auction.Lot.Amount.Sub( // new lot must be some % less than old lot, and at least 1 smaller to avoid replacing an old bid at no cost
 | 
				
			||||||
		sdk.MaxInt(
 | 
							sdk.MaxInt(
 | 
				
			||||||
			sdk.NewInt(1),
 | 
								sdkmath.NewInt(1),
 | 
				
			||||||
			sdk.NewDecFromInt(auction.Lot.Amount).Mul(k.GetParams(ctx).IncrementCollateral).RoundInt(),
 | 
								sdk.NewDecFromInt(auction.Lot.Amount).Mul(k.GetParams(ctx).IncrementCollateral).RoundInt(),
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	if lot.Amount.GT(maxNewLotAmt) {
 | 
						if lot.Amount.GT(maxNewLotAmt) {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrLotTooLarge, "%s > %s%s", lot, maxNewLotAmt, auction.Lot.Denom)
 | 
							return auction, errorsmod.Wrapf(types.ErrLotTooLarge, "%s > %s%s", lot, maxNewLotAmt, auction.Lot.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if lot.IsNegative() {
 | 
						if lot.IsNegative() {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrLotTooSmall, "%s < 0%s", lot, auction.Lot.Denom)
 | 
							return auction, errorsmod.Wrapf(types.ErrLotTooSmall, "%s < 0%s", lot, auction.Lot.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// New bidder pays back old bidder
 | 
						// New bidder pays back old bidder
 | 
				
			||||||
@ -392,19 +393,19 @@ func (k Keeper) PlaceReverseBidCollateral(ctx sdk.Context, auction *types.Collat
 | 
				
			|||||||
func (k Keeper) PlaceBidDebt(ctx sdk.Context, auction *types.DebtAuction, bidder sdk.AccAddress, lot sdk.Coin) (*types.DebtAuction, error) {
 | 
					func (k Keeper) PlaceBidDebt(ctx sdk.Context, auction *types.DebtAuction, bidder sdk.AccAddress, lot sdk.Coin) (*types.DebtAuction, error) {
 | 
				
			||||||
	// Validate new bid
 | 
						// Validate new bid
 | 
				
			||||||
	if lot.Denom != auction.Lot.Denom {
 | 
						if lot.Denom != auction.Lot.Denom {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrInvalidLotDenom, "%s ≠ %s", lot.Denom, auction.Lot.Denom)
 | 
							return auction, errorsmod.Wrapf(types.ErrInvalidLotDenom, "%s ≠ %s", lot.Denom, auction.Lot.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	maxNewLotAmt := auction.Lot.Amount.Sub( // new lot must be some % less than old lot, and at least 1 smaller to avoid replacing an old bid at no cost
 | 
						maxNewLotAmt := auction.Lot.Amount.Sub( // new lot must be some % less than old lot, and at least 1 smaller to avoid replacing an old bid at no cost
 | 
				
			||||||
		sdk.MaxInt(
 | 
							sdk.MaxInt(
 | 
				
			||||||
			sdk.NewInt(1),
 | 
								sdkmath.NewInt(1),
 | 
				
			||||||
			sdk.NewDecFromInt(auction.Lot.Amount).Mul(k.GetParams(ctx).IncrementDebt).RoundInt(),
 | 
								sdk.NewDecFromInt(auction.Lot.Amount).Mul(k.GetParams(ctx).IncrementDebt).RoundInt(),
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	if lot.Amount.GT(maxNewLotAmt) {
 | 
						if lot.Amount.GT(maxNewLotAmt) {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrLotTooLarge, "%s > %s%s", lot, maxNewLotAmt, auction.Lot.Denom)
 | 
							return auction, errorsmod.Wrapf(types.ErrLotTooLarge, "%s > %s%s", lot, maxNewLotAmt, auction.Lot.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if lot.IsNegative() {
 | 
						if lot.IsNegative() {
 | 
				
			||||||
		return auction, sdkerrors.Wrapf(types.ErrLotTooSmall, "%s ≤ %s%s", lot, sdk.ZeroInt(), auction.Lot.Denom)
 | 
							return auction, errorsmod.Wrapf(types.ErrLotTooSmall, "%s ≤ %s%s", lot, sdk.ZeroInt(), auction.Lot.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// New bidder pays back old bidder
 | 
						// New bidder pays back old bidder
 | 
				
			||||||
@ -466,11 +467,11 @@ func (k Keeper) PlaceBidDebt(ctx sdk.Context, auction *types.DebtAuction, bidder
 | 
				
			|||||||
func (k Keeper) CloseAuction(ctx sdk.Context, auctionID uint64) error {
 | 
					func (k Keeper) CloseAuction(ctx sdk.Context, auctionID uint64) error {
 | 
				
			||||||
	auction, found := k.GetAuction(ctx, auctionID)
 | 
						auction, found := k.GetAuction(ctx, auctionID)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrAuctionNotFound, "%d", auctionID)
 | 
							return errorsmod.Wrapf(types.ErrAuctionNotFound, "%d", auctionID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.BlockTime().Before(auction.GetEndTime()) {
 | 
						if ctx.BlockTime().Before(auction.GetEndTime()) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrAuctionHasNotExpired, "block time %s, auction end time %s", ctx.BlockTime().UTC(), auction.GetEndTime().UTC())
 | 
							return errorsmod.Wrapf(types.ErrAuctionHasNotExpired, "block time %s, auction end time %s", ctx.BlockTime().UTC(), auction.GetEndTime().UTC())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// payout to the last bidder
 | 
						// payout to the last bidder
 | 
				
			||||||
@ -483,7 +484,7 @@ func (k Keeper) CloseAuction(ctx sdk.Context, auctionID uint64) error {
 | 
				
			|||||||
	case *types.CollateralAuction:
 | 
						case *types.CollateralAuction:
 | 
				
			||||||
		err = k.PayoutCollateralAuction(ctx, auc)
 | 
							err = k.PayoutCollateralAuction(ctx, auc)
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		err = sdkerrors.Wrap(types.ErrUnrecognizedAuctionType, auc.GetType())
 | 
							err = errorsmod.Wrap(types.ErrUnrecognizedAuctionType, auc.GetType())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -572,7 +573,7 @@ func earliestTime(t1, t2 time.Time) time.Time {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// splitCoinIntoWeightedBuckets divides up some amount of coins according to some weights.
 | 
					// splitCoinIntoWeightedBuckets divides up some amount of coins according to some weights.
 | 
				
			||||||
func splitCoinIntoWeightedBuckets(coin sdk.Coin, buckets []sdk.Int) ([]sdk.Coin, error) {
 | 
					func splitCoinIntoWeightedBuckets(coin sdk.Coin, buckets []sdkmath.Int) ([]sdk.Coin, error) {
 | 
				
			||||||
	amounts := splitIntIntoWeightedBuckets(coin.Amount, buckets)
 | 
						amounts := splitIntIntoWeightedBuckets(coin.Amount, buckets)
 | 
				
			||||||
	result := make([]sdk.Coin, len(amounts))
 | 
						result := make([]sdk.Coin, len(amounts))
 | 
				
			||||||
	for i, a := range amounts {
 | 
						for i, a := range amounts {
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/require"
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
						tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
				
			||||||
@ -46,7 +47,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		bid         sdk.Coin
 | 
							bid         sdk.Coin
 | 
				
			||||||
		debt        sdk.Coin
 | 
							debt        sdk.Coin
 | 
				
			||||||
		addresses   []sdk.AccAddress
 | 
							addresses   []sdk.AccAddress
 | 
				
			||||||
		weights     []sdk.Int
 | 
							weights     []sdkmath.Int
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	type bidArgs struct {
 | 
						type bidArgs struct {
 | 
				
			||||||
@ -68,7 +69,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"basic: auction doesn't exist",
 | 
								"basic: auction doesn't exist",
 | 
				
			||||||
			auctionArgs{Surplus, "", c("token1", 1), c("token2", 1), sdk.Coin{}, []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Surplus, "", c("token1", 1), c("token2", 1), sdk.Coin{}, []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			bidArgs{buyer, c("token2", 10)},
 | 
								bidArgs{buyer, c("token2", 10)},
 | 
				
			||||||
			types.ErrAuctionNotFound,
 | 
								types.ErrAuctionNotFound,
 | 
				
			||||||
@ -80,7 +81,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"basic: closed auction",
 | 
								"basic: closed auction",
 | 
				
			||||||
			auctionArgs{Surplus, modName, c("token1", 100), c("token2", 10), sdk.Coin{}, []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Surplus, modName, c("token1", 100), c("token2", 10), sdk.Coin{}, []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			bidArgs{buyer, c("token2", 10)},
 | 
								bidArgs{buyer, c("token2", 10)},
 | 
				
			||||||
			types.ErrAuctionHasExpired,
 | 
								types.ErrAuctionHasExpired,
 | 
				
			||||||
@ -93,7 +94,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			// This is the first bid on an auction with NO bids
 | 
								// This is the first bid on an auction with NO bids
 | 
				
			||||||
			"surplus: normal",
 | 
								"surplus: normal",
 | 
				
			||||||
			auctionArgs{Surplus, modName, c("token1", 100), c("token2", 10), sdk.Coin{}, []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Surplus, modName, c("token1", 100), c("token2", 10), sdk.Coin{}, []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			bidArgs{buyer, c("token2", 10)},
 | 
								bidArgs{buyer, c("token2", 10)},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
@ -105,7 +106,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"surplus: second bidder",
 | 
								"surplus: second bidder",
 | 
				
			||||||
			auctionArgs{Surplus, modName, c("token1", 100), c("token2", 10), sdk.Coin{}, []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Surplus, modName, c("token1", 100), c("token2", 10), sdk.Coin{}, []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			[]bidArgs{{buyer, c("token2", 10)}},
 | 
								[]bidArgs{{buyer, c("token2", 10)}},
 | 
				
			||||||
			bidArgs{secondBuyer, c("token2", 11)},
 | 
								bidArgs{secondBuyer, c("token2", 11)},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
@ -117,7 +118,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"surplus: invalid bid denom",
 | 
								"surplus: invalid bid denom",
 | 
				
			||||||
			auctionArgs{Surplus, modName, c("token1", 100), c("token2", 10), sdk.Coin{}, []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Surplus, modName, c("token1", 100), c("token2", 10), sdk.Coin{}, []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			bidArgs{buyer, c("badtoken", 10)},
 | 
								bidArgs{buyer, c("badtoken", 10)},
 | 
				
			||||||
			types.ErrInvalidBidDenom,
 | 
								types.ErrInvalidBidDenom,
 | 
				
			||||||
@ -129,7 +130,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"surplus: invalid bid (less than)",
 | 
								"surplus: invalid bid (less than)",
 | 
				
			||||||
			auctionArgs{Surplus, modName, c("token1", 100), c("token2", 0), sdk.Coin{}, []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Surplus, modName, c("token1", 100), c("token2", 0), sdk.Coin{}, []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			[]bidArgs{{buyer, c("token2", 100)}},
 | 
								[]bidArgs{{buyer, c("token2", 100)}},
 | 
				
			||||||
			bidArgs{buyer, c("token2", 99)},
 | 
								bidArgs{buyer, c("token2", 99)},
 | 
				
			||||||
			types.ErrBidTooSmall,
 | 
								types.ErrBidTooSmall,
 | 
				
			||||||
@ -141,7 +142,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"surplus: invalid bid (equal)",
 | 
								"surplus: invalid bid (equal)",
 | 
				
			||||||
			auctionArgs{Surplus, modName, c("token1", 100), c("token2", 0), sdk.Coin{}, []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Surplus, modName, c("token1", 100), c("token2", 0), sdk.Coin{}, []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			bidArgs{buyer, c("token2", 0)}, // min bid is technically 0 at default 5%, but it's capped at 1
 | 
								bidArgs{buyer, c("token2", 0)}, // min bid is technically 0 at default 5%, but it's capped at 1
 | 
				
			||||||
			types.ErrBidTooSmall,
 | 
								types.ErrBidTooSmall,
 | 
				
			||||||
@ -153,7 +154,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"surplus: invalid bid (less than min increment)",
 | 
								"surplus: invalid bid (less than min increment)",
 | 
				
			||||||
			auctionArgs{Surplus, modName, c("token1", 100), c("token2", 0), sdk.Coin{}, []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Surplus, modName, c("token1", 100), c("token2", 0), sdk.Coin{}, []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			[]bidArgs{{buyer, c("token2", 100)}},
 | 
								[]bidArgs{{buyer, c("token2", 100)}},
 | 
				
			||||||
			bidArgs{buyer, c("token2", 104)}, // min bid is 105 at default 5%
 | 
								bidArgs{buyer, c("token2", 104)}, // min bid is 105 at default 5%
 | 
				
			||||||
			types.ErrBidTooSmall,
 | 
								types.ErrBidTooSmall,
 | 
				
			||||||
@ -165,7 +166,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"debt: normal",
 | 
								"debt: normal",
 | 
				
			||||||
			auctionArgs{Debt, modName, c("token1", 20), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdk.Int{}}, // initial bid, lot
 | 
								auctionArgs{Debt, modName, c("token1", 20), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdkmath.Int{}}, // initial bid, lot
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			bidArgs{buyer, c("token1", 10)},
 | 
								bidArgs{buyer, c("token1", 10)},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
@ -177,7 +178,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"debt: second bidder",
 | 
								"debt: second bidder",
 | 
				
			||||||
			auctionArgs{Debt, modName, c("token1", 20), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdk.Int{}}, // initial bid, lot
 | 
								auctionArgs{Debt, modName, c("token1", 20), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdkmath.Int{}}, // initial bid, lot
 | 
				
			||||||
			[]bidArgs{{buyer, c("token1", 10)}},
 | 
								[]bidArgs{{buyer, c("token1", 10)}},
 | 
				
			||||||
			bidArgs{secondBuyer, c("token1", 9)},
 | 
								bidArgs{secondBuyer, c("token1", 9)},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
@ -189,7 +190,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"debt: invalid lot denom",
 | 
								"debt: invalid lot denom",
 | 
				
			||||||
			auctionArgs{Debt, modName, c("token1", 20), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdk.Int{}}, // initial bid, lot
 | 
								auctionArgs{Debt, modName, c("token1", 20), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdkmath.Int{}}, // initial bid, lot
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			bidArgs{buyer, c("badtoken", 10)},
 | 
								bidArgs{buyer, c("badtoken", 10)},
 | 
				
			||||||
			types.ErrInvalidLotDenom,
 | 
								types.ErrInvalidLotDenom,
 | 
				
			||||||
@ -201,7 +202,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"debt: invalid lot size (larger)",
 | 
								"debt: invalid lot size (larger)",
 | 
				
			||||||
			auctionArgs{Debt, modName, c("token1", 20), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Debt, modName, c("token1", 20), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			bidArgs{buyer, c("token1", 21)},
 | 
								bidArgs{buyer, c("token1", 21)},
 | 
				
			||||||
			types.ErrLotTooLarge,
 | 
								types.ErrLotTooLarge,
 | 
				
			||||||
@ -213,7 +214,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"debt: invalid lot size (equal)",
 | 
								"debt: invalid lot size (equal)",
 | 
				
			||||||
			auctionArgs{Debt, modName, c("token1", 20), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Debt, modName, c("token1", 20), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			bidArgs{buyer, c("token1", 20)},
 | 
								bidArgs{buyer, c("token1", 20)},
 | 
				
			||||||
			types.ErrLotTooLarge,
 | 
								types.ErrLotTooLarge,
 | 
				
			||||||
@ -225,7 +226,7 @@ func TestAuctionBidding(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"debt: invalid lot size (larger than min increment)",
 | 
								"debt: invalid lot size (larger than min increment)",
 | 
				
			||||||
			auctionArgs{Debt, modName, c("token1", 60), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdk.Int{}},
 | 
								auctionArgs{Debt, modName, c("token1", 60), c("token2", 100), c("debt", 100), []sdk.AccAddress{}, []sdkmath.Int{}},
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			bidArgs{buyer, c("token1", 58)}, // max lot at default 5% is 57
 | 
								bidArgs{buyer, c("token1", 58)}, // max lot at default 5% is 57
 | 
				
			||||||
			types.ErrLotTooLarge,
 | 
								types.ErrLotTooLarge,
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/app"
 | 
						"github.com/kava-labs/kava/app"
 | 
				
			||||||
@ -42,7 +43,7 @@ func TestGrpcAuctionsFilter(t *testing.T) {
 | 
				
			|||||||
			c("usdx", 12345678),
 | 
								c("usdx", 12345678),
 | 
				
			||||||
			types.WeightedAddresses{
 | 
								types.WeightedAddresses{
 | 
				
			||||||
				Addresses: addrs,
 | 
									Addresses: addrs,
 | 
				
			||||||
				Weights:   []sdk.Int{sdk.NewInt(100)},
 | 
									Weights:   []sdkmath.Int{sdkmath.NewInt(100)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			c("debt", 12345678),
 | 
								c("debt", 12345678),
 | 
				
			||||||
		).WithID(2),
 | 
							).WithID(2),
 | 
				
			||||||
@ -53,7 +54,7 @@ func TestGrpcAuctionsFilter(t *testing.T) {
 | 
				
			|||||||
			c("usdx", 12345678),
 | 
								c("usdx", 12345678),
 | 
				
			||||||
			types.WeightedAddresses{
 | 
								types.WeightedAddresses{
 | 
				
			||||||
				Addresses: addrs,
 | 
									Addresses: addrs,
 | 
				
			||||||
				Weights:   []sdk.Int{sdk.NewInt(100)},
 | 
									Weights:   []sdkmath.Int{sdkmath.NewInt(100)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			c("debt", 12345678),
 | 
								c("debt", 12345678),
 | 
				
			||||||
		).WithID(3),
 | 
							).WithID(3),
 | 
				
			||||||
 | 
				
			|||||||
@ -1,14 +1,15 @@
 | 
				
			|||||||
package keeper_test
 | 
					package keeper_test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
					func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
				
			||||||
func cs(coins ...sdk.Coin) sdk.Coins        { return sdk.NewCoins(coins...) }
 | 
					func cs(coins ...sdk.Coin) sdk.Coins        { return sdk.NewCoins(coins...) }
 | 
				
			||||||
func is(ns ...int64) (is []sdk.Int) {
 | 
					func is(ns ...int64) (is []sdkmath.Int) {
 | 
				
			||||||
	for _, n := range ns {
 | 
						for _, n := range ns {
 | 
				
			||||||
		is = append(is, sdk.NewInt(n))
 | 
							is = append(is, sdkmath.NewInt(n))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -3,13 +3,14 @@ package keeper
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"sort"
 | 
						"sort"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// splitIntIntoWeightedBuckets divides an initial +ve integer among several buckets in proportion to the buckets' weights
 | 
					// splitIntIntoWeightedBuckets divides an initial +ve integer among several buckets in proportion to the buckets' weights
 | 
				
			||||||
// It uses the largest remainder method: https://en.wikipedia.org/wiki/Largest_remainder_method
 | 
					// It uses the largest remainder method: https://en.wikipedia.org/wiki/Largest_remainder_method
 | 
				
			||||||
// See also: https://stackoverflow.com/questions/13483430/how-to-make-rounded-percentages-add-up-to-100
 | 
					// See also: https://stackoverflow.com/questions/13483430/how-to-make-rounded-percentages-add-up-to-100
 | 
				
			||||||
func splitIntIntoWeightedBuckets(amount sdk.Int, buckets []sdk.Int) []sdk.Int {
 | 
					func splitIntIntoWeightedBuckets(amount sdkmath.Int, buckets []sdkmath.Int) []sdkmath.Int {
 | 
				
			||||||
	// Limit input to +ve numbers as algorithm hasn't been scoped to work with -ve numbers.
 | 
						// Limit input to +ve numbers as algorithm hasn't been scoped to work with -ve numbers.
 | 
				
			||||||
	if amount.IsNegative() {
 | 
						if amount.IsNegative() {
 | 
				
			||||||
		panic("negative amount")
 | 
							panic("negative amount")
 | 
				
			||||||
@ -53,7 +54,7 @@ func splitIntIntoWeightedBuckets(amount sdk.Int, buckets []sdk.Int) []sdk.Int {
 | 
				
			|||||||
	leftToAllocate := amount.Sub(allocated)
 | 
						leftToAllocate := amount.Sub(allocated)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// apportion according to largest remainder
 | 
						// apportion according to largest remainder
 | 
				
			||||||
	results := make([]sdk.Int, len(quotients))
 | 
						results := make([]sdkmath.Int, len(quotients))
 | 
				
			||||||
	for _, qr := range quotients {
 | 
						for _, qr := range quotients {
 | 
				
			||||||
		results[qr.index] = qr.quo
 | 
							results[qr.index] = qr.quo
 | 
				
			||||||
		if !leftToAllocate.IsZero() {
 | 
							if !leftToAllocate.IsZero() {
 | 
				
			||||||
@ -66,12 +67,12 @@ func splitIntIntoWeightedBuckets(amount sdk.Int, buckets []sdk.Int) []sdk.Int {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
type quoRem struct {
 | 
					type quoRem struct {
 | 
				
			||||||
	index int
 | 
						index int
 | 
				
			||||||
	quo   sdk.Int
 | 
						quo   sdkmath.Int
 | 
				
			||||||
	rem   sdk.Int
 | 
						rem   sdkmath.Int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// totalInts adds together sdk.Ints
 | 
					// totalInts adds together sdk.Ints
 | 
				
			||||||
func totalInts(is ...sdk.Int) sdk.Int {
 | 
					func totalInts(is ...sdkmath.Int) sdkmath.Int {
 | 
				
			||||||
	total := sdk.ZeroInt()
 | 
						total := sdk.ZeroInt()
 | 
				
			||||||
	for _, i := range is {
 | 
						for _, i := range is {
 | 
				
			||||||
		total = total.Add(i)
 | 
							total = total.Add(i)
 | 
				
			||||||
 | 
				
			|||||||
@ -5,15 +5,15 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/require"
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestSplitIntIntoWeightedBuckets(t *testing.T) {
 | 
					func TestSplitIntIntoWeightedBuckets(t *testing.T) {
 | 
				
			||||||
	testCases := []struct {
 | 
						testCases := []struct {
 | 
				
			||||||
		name        string
 | 
							name        string
 | 
				
			||||||
		amount      sdk.Int
 | 
							amount      sdkmath.Int
 | 
				
			||||||
		buckets     []sdk.Int
 | 
							buckets     []sdkmath.Int
 | 
				
			||||||
		want        []sdk.Int
 | 
							want        []sdkmath.Int
 | 
				
			||||||
		expectPanic bool
 | 
							expectPanic bool
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@ -91,7 +91,7 @@ func TestSplitIntIntoWeightedBuckets(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	for _, tc := range testCases {
 | 
						for _, tc := range testCases {
 | 
				
			||||||
		t.Run(tc.name, func(t *testing.T) {
 | 
							t.Run(tc.name, func(t *testing.T) {
 | 
				
			||||||
			var got []sdk.Int
 | 
								var got []sdkmath.Int
 | 
				
			||||||
			run := func() {
 | 
								run := func() {
 | 
				
			||||||
				got = splitIntIntoWeightedBuckets(tc.amount, tc.buckets)
 | 
									got = splitIntIntoWeightedBuckets(tc.amount, tc.buckets)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -106,10 +106,10 @@ func TestSplitIntIntoWeightedBuckets(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func i(n int64) sdk.Int { return sdk.NewInt(n) }
 | 
					func i(n int64) sdkmath.Int { return sdkmath.NewInt(n) }
 | 
				
			||||||
func is(ns ...int64) (is []sdk.Int) {
 | 
					func is(ns ...int64) (is []sdkmath.Int) {
 | 
				
			||||||
	for _, n := range ns {
 | 
						for _, n := range ns {
 | 
				
			||||||
		is = append(is, sdk.NewInt(n))
 | 
							is = append(is, sdkmath.NewInt(n))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	abci "github.com/tendermint/tendermint/abci/types"
 | 
						abci "github.com/tendermint/tendermint/abci/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/client"
 | 
						"github.com/cosmos/cosmos-sdk/client"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
@ -26,7 +27,7 @@ func NewQuerier(keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier
 | 
				
			|||||||
		case types.QueryNextAuctionID:
 | 
							case types.QueryNextAuctionID:
 | 
				
			||||||
			return queryNextAuctionID(ctx, req, keeper, legacyQuerierCdc)
 | 
								return queryNextAuctionID(ctx, req, keeper, legacyQuerierCdc)
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint", types.ModuleName)
 | 
								return nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint", types.ModuleName)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -39,7 +40,7 @@ func queryGetParams(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, legac
 | 
				
			|||||||
	// Encode results
 | 
						// Encode results
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, params)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, params)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
@ -49,17 +50,17 @@ func queryAuction(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerie
 | 
				
			|||||||
	var params types.QueryAuctionParams
 | 
						var params types.QueryAuctionParams
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	auction, ok := k.GetAuction(ctx, params.AuctionID)
 | 
						auction, ok := k.GetAuction(ctx, params.AuctionID)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(types.ErrAuctionNotFound, fmt.Sprintf("%d", params.AuctionID))
 | 
							return nil, errorsmod.Wrap(types.ErrAuctionNotFound, fmt.Sprintf("%d", params.AuctionID))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, auction)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, auction)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -68,7 +69,7 @@ func queryAuctions(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQueri
 | 
				
			|||||||
	var params types.QueryAllAuctionParams
 | 
						var params types.QueryAllAuctionParams
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unfilteredAuctions := k.GetAllAuctions(ctx)
 | 
						unfilteredAuctions := k.GetAllAuctions(ctx)
 | 
				
			||||||
@ -79,7 +80,7 @@ func queryAuctions(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQueri
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	res, err := codec.MarshalJSONIndent(legacyQuerierCdc, auctions)
 | 
						res, err := codec.MarshalJSONIndent(legacyQuerierCdc, auctions)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return res, nil
 | 
						return res, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -89,7 +90,7 @@ func queryNextAuctionID(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, l
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	bz, err := legacyQuerierCdc.MarshalJSON(nextAuctionID)
 | 
						bz, err := legacyQuerierCdc.MarshalJSON(nextAuctionID)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
@ -46,7 +47,7 @@ func (suite *querierTestSuite) SetupTest() {
 | 
				
			|||||||
			id, err = suite.Keeper.StartSurplusAuction(suite.Ctx, suite.ModAcc.Name, c("token1", lotAmount), "token2")
 | 
								id, err = suite.Keeper.StartSurplusAuction(suite.Ctx, suite.ModAcc.Name, c("token1", lotAmount), "token2")
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			id, err = suite.Keeper.StartCollateralAuction(suite.Ctx, suite.ModAcc.Name, c("token1", lotAmount), c("usdx", int64(20)),
 | 
								id, err = suite.Keeper.StartCollateralAuction(suite.Ctx, suite.ModAcc.Name, c("token1", lotAmount), c("usdx", int64(20)),
 | 
				
			||||||
				[]sdk.AccAddress{suite.Addrs[ownerAddrIndex]}, []sdk.Int{sdk.NewInt(lotAmount)}, c("debt", int64(10)))
 | 
									[]sdk.AccAddress{suite.Addrs[ownerAddrIndex]}, []sdkmath.Int{sdkmath.NewInt(lotAmount)}, c("debt", int64(10)))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		suite.NoError(err)
 | 
							suite.NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -140,7 +140,7 @@ func generateBidAmount(
 | 
				
			|||||||
		// Generate a new lot amount (gov coin)
 | 
							// Generate a new lot amount (gov coin)
 | 
				
			||||||
		maxNewLotAmt := a.Lot.Amount.Sub( // new lot must be some % less than old lot, and at least 1 smaller to avoid replacing an old bid at no cost
 | 
							maxNewLotAmt := a.Lot.Amount.Sub( // new lot must be some % less than old lot, and at least 1 smaller to avoid replacing an old bid at no cost
 | 
				
			||||||
			sdk.MaxInt(
 | 
								sdk.MaxInt(
 | 
				
			||||||
				sdk.NewInt(1),
 | 
									sdkmath.NewInt(1),
 | 
				
			||||||
				sdk.NewDecFromInt(a.Lot.Amount).Mul(params.IncrementDebt).RoundInt(),
 | 
									sdk.NewDecFromInt(a.Lot.Amount).Mul(params.IncrementDebt).RoundInt(),
 | 
				
			||||||
			),
 | 
								),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
@ -154,7 +154,7 @@ func generateBidAmount(
 | 
				
			|||||||
		// Check the bidder has enough (gov coin) to pay in
 | 
							// Check the bidder has enough (gov coin) to pay in
 | 
				
			||||||
		minNewBidAmt := a.Bid.Amount.Add( // new bids must be some % greater than old bid, and at least 1 larger to avoid replacing an old bid at no cost
 | 
							minNewBidAmt := a.Bid.Amount.Add( // new bids must be some % greater than old bid, and at least 1 larger to avoid replacing an old bid at no cost
 | 
				
			||||||
			sdk.MaxInt(
 | 
								sdk.MaxInt(
 | 
				
			||||||
				sdk.NewInt(1),
 | 
									sdkmath.NewInt(1),
 | 
				
			||||||
				sdk.NewDecFromInt(a.Bid.Amount).Mul(params.IncrementSurplus).RoundInt(),
 | 
									sdk.NewDecFromInt(a.Bid.Amount).Mul(params.IncrementSurplus).RoundInt(),
 | 
				
			||||||
			),
 | 
								),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
@ -172,7 +172,7 @@ func generateBidAmount(
 | 
				
			|||||||
		// Check the bidder has enough (stable coin) to pay in
 | 
							// Check the bidder has enough (stable coin) to pay in
 | 
				
			||||||
		minNewBidAmt := a.Bid.Amount.Add( // new bids must be some % greater than old bid, and at least 1 larger to avoid replacing an old bid at no cost
 | 
							minNewBidAmt := a.Bid.Amount.Add( // new bids must be some % greater than old bid, and at least 1 larger to avoid replacing an old bid at no cost
 | 
				
			||||||
			sdk.MaxInt(
 | 
								sdk.MaxInt(
 | 
				
			||||||
				sdk.NewInt(1),
 | 
									sdkmath.NewInt(1),
 | 
				
			||||||
				sdk.NewDecFromInt(a.Bid.Amount).Mul(params.IncrementCollateral).RoundInt(),
 | 
									sdk.NewDecFromInt(a.Bid.Amount).Mul(params.IncrementCollateral).RoundInt(),
 | 
				
			||||||
			),
 | 
								),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
@ -188,7 +188,7 @@ func generateBidAmount(
 | 
				
			|||||||
		if a.IsReversePhase() {
 | 
							if a.IsReversePhase() {
 | 
				
			||||||
			maxNewLotAmt := a.Lot.Amount.Sub( // new lot must be some % less than old lot, and at least 1 smaller to avoid replacing an old bid at no cost
 | 
								maxNewLotAmt := a.Lot.Amount.Sub( // new lot must be some % less than old lot, and at least 1 smaller to avoid replacing an old bid at no cost
 | 
				
			||||||
				sdk.MaxInt(
 | 
									sdk.MaxInt(
 | 
				
			||||||
					sdk.NewInt(1),
 | 
										sdkmath.NewInt(1),
 | 
				
			||||||
					sdk.NewDecFromInt(a.Lot.Amount).Mul(params.IncrementCollateral).RoundInt(),
 | 
										sdk.NewDecFromInt(a.Lot.Amount).Mul(params.IncrementCollateral).RoundInt(),
 | 
				
			||||||
				),
 | 
									),
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
@ -228,24 +228,24 @@ func findValidAccountAuctionPair(accounts []simulation.Account, auctions types.A
 | 
				
			|||||||
	return simulation.Account{}, nil, false
 | 
						return simulation.Account{}, nil, false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RandIntInclusive randomly generates an sdk.Int in the range [inclusiveMin, inclusiveMax]. It works for negative and positive integers.
 | 
					// RandIntInclusive randomly generates an sdkmath.Int in the range [inclusiveMin, inclusiveMax]. It works for negative and positive integers.
 | 
				
			||||||
func RandIntInclusive(r *rand.Rand, inclusiveMin, inclusiveMax sdk.Int) (sdk.Int, error) {
 | 
					func RandIntInclusive(r *rand.Rand, inclusiveMin, inclusiveMax sdkmath.Int) (sdkmath.Int, error) {
 | 
				
			||||||
	if inclusiveMin.GT(inclusiveMax) {
 | 
						if inclusiveMin.GT(inclusiveMax) {
 | 
				
			||||||
		return sdk.Int{}, fmt.Errorf("min larger than max")
 | 
							return sdkmath.Int{}, fmt.Errorf("min larger than max")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return RandInt(r, inclusiveMin, inclusiveMax.Add(sdk.OneInt()))
 | 
						return RandInt(r, inclusiveMin, inclusiveMax.Add(sdk.OneInt()))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RandInt randomly generates an sdk.Int in the range [inclusiveMin, exclusiveMax). It works for negative and positive integers.
 | 
					// RandInt randomly generates an sdkmath.Int in the range [inclusiveMin, exclusiveMax). It works for negative and positive integers.
 | 
				
			||||||
func RandInt(r *rand.Rand, inclusiveMin, exclusiveMax sdk.Int) (sdk.Int, error) {
 | 
					func RandInt(r *rand.Rand, inclusiveMin, exclusiveMax sdkmath.Int) (sdkmath.Int, error) {
 | 
				
			||||||
	// validate input
 | 
						// validate input
 | 
				
			||||||
	if inclusiveMin.GTE(exclusiveMax) {
 | 
						if inclusiveMin.GTE(exclusiveMax) {
 | 
				
			||||||
		return sdk.Int{}, fmt.Errorf("min larger or equal to max")
 | 
							return sdkmath.Int{}, fmt.Errorf("min larger or equal to max")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// shift the range to start at 0
 | 
						// shift the range to start at 0
 | 
				
			||||||
	shiftedRange := exclusiveMax.Sub(inclusiveMin) // should always be positive given the check above
 | 
						shiftedRange := exclusiveMax.Sub(inclusiveMin) // should always be positive given the check above
 | 
				
			||||||
	// randomly pick from the shifted range
 | 
						// randomly pick from the shifted range
 | 
				
			||||||
	shiftedRandInt := sdk.NewIntFromBigInt(new(big.Int).Rand(r, shiftedRange.BigInt()))
 | 
						shiftedRandInt := sdkmath.NewIntFromBigInt(new(big.Int).Rand(r, shiftedRange.BigInt()))
 | 
				
			||||||
	// shift back to the original range
 | 
						// shift back to the original range
 | 
				
			||||||
	return shiftedRandInt.Add(inclusiveMin), nil
 | 
						return shiftedRandInt.Add(inclusiveMin), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -66,7 +66,7 @@ type DebtAuction struct {
 | 
				
			|||||||
// WeightedAddresses is a type for storing some addresses and associated weights.
 | 
					// WeightedAddresses is a type for storing some addresses and associated weights.
 | 
				
			||||||
type WeightedAddresses struct {
 | 
					type WeightedAddresses struct {
 | 
				
			||||||
	Addresses []sdk.AccAddress
 | 
						Addresses []sdk.AccAddress
 | 
				
			||||||
	Weights   []sdk.Int
 | 
						Weights   []sdkmath.Int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CollateralAuction is a two phase auction.
 | 
					// CollateralAuction is a two phase auction.
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package testutil
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
						tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
				
			||||||
@ -40,8 +41,8 @@ func (suite *Suite) SetupTest(numAddrs int) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Fund liquidator module account
 | 
						// Fund liquidator module account
 | 
				
			||||||
	coins := sdk.NewCoins(
 | 
						coins := sdk.NewCoins(
 | 
				
			||||||
		sdk.NewCoin("token1", sdk.NewInt(100)),
 | 
							sdk.NewCoin("token1", sdkmath.NewInt(100)),
 | 
				
			||||||
		sdk.NewCoin("token2", sdk.NewInt(100)),
 | 
							sdk.NewCoin("token2", sdkmath.NewInt(100)),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx := tApp.NewContext(true, tmproto.Header{Height: 1, Time: tmtime.Now()})
 | 
						ctx := tApp.NewContext(true, tmproto.Header{Height: 1, Time: tmtime.Now()})
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
	"github.com/gogo/protobuf/proto"
 | 
						"github.com/gogo/protobuf/proto"
 | 
				
			||||||
@ -250,7 +251,7 @@ func (a CollateralAuction) Validate() error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewWeightedAddresses returns a new list addresses with weights.
 | 
					// NewWeightedAddresses returns a new list addresses with weights.
 | 
				
			||||||
func NewWeightedAddresses(addrs []sdk.AccAddress, weights []sdk.Int) (WeightedAddresses, error) {
 | 
					func NewWeightedAddresses(addrs []sdk.AccAddress, weights []sdkmath.Int) (WeightedAddresses, error) {
 | 
				
			||||||
	wa := WeightedAddresses{
 | 
						wa := WeightedAddresses{
 | 
				
			||||||
		Addresses: addrs,
 | 
							Addresses: addrs,
 | 
				
			||||||
		Weights:   weights,
 | 
							Weights:   weights,
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/require"
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -30,10 +31,10 @@ func init() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func d(amount string) sdk.Dec               { return sdk.MustNewDecFromStr(amount) }
 | 
					func d(amount string) sdk.Dec               { return sdk.MustNewDecFromStr(amount) }
 | 
				
			||||||
func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
					func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
				
			||||||
func i(n int64) sdk.Int                     { return sdk.NewInt(n) }
 | 
					func i(n int64) sdkmath.Int                 { return sdkmath.NewInt(n) }
 | 
				
			||||||
func is(ns ...int64) (is []sdk.Int) {
 | 
					func is(ns ...int64) (is []sdkmath.Int) {
 | 
				
			||||||
	for _, n := range ns {
 | 
						for _, n := range ns {
 | 
				
			||||||
		is = append(is, sdk.NewInt(n))
 | 
							is = append(is, sdkmath.NewInt(n))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -48,25 +49,25 @@ func TestNewWeightedAddresses(t *testing.T) {
 | 
				
			|||||||
	tests := []struct {
 | 
						tests := []struct {
 | 
				
			||||||
		name      string
 | 
							name      string
 | 
				
			||||||
		addresses []sdk.AccAddress
 | 
							addresses []sdk.AccAddress
 | 
				
			||||||
		weights   []sdk.Int
 | 
							weights   []sdkmath.Int
 | 
				
			||||||
		expPass   bool
 | 
							expPass   bool
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"normal",
 | 
								"normal",
 | 
				
			||||||
			[]sdk.AccAddress{addr1, addr2},
 | 
								[]sdk.AccAddress{addr1, addr2},
 | 
				
			||||||
			[]sdk.Int{sdk.NewInt(6), sdk.NewInt(8)},
 | 
								[]sdkmath.Int{sdkmath.NewInt(6), sdkmath.NewInt(8)},
 | 
				
			||||||
			true,
 | 
								true,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"empty address",
 | 
								"empty address",
 | 
				
			||||||
			[]sdk.AccAddress{nil, nil},
 | 
								[]sdk.AccAddress{nil, nil},
 | 
				
			||||||
			[]sdk.Int{sdk.NewInt(6), sdk.NewInt(8)},
 | 
								[]sdkmath.Int{sdkmath.NewInt(6), sdkmath.NewInt(8)},
 | 
				
			||||||
			false,
 | 
								false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"mismatched",
 | 
								"mismatched",
 | 
				
			||||||
			[]sdk.AccAddress{addr1, addr2},
 | 
								[]sdk.AccAddress{addr1, addr2},
 | 
				
			||||||
			[]sdk.Int{sdk.NewInt(6)},
 | 
								[]sdkmath.Int{sdkmath.NewInt(6)},
 | 
				
			||||||
			false,
 | 
								false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@ -139,7 +140,7 @@ func TestDebtAuctionValidate(t *testing.T) {
 | 
				
			|||||||
					MaxEndTime:      now,
 | 
										MaxEndTime:      now,
 | 
				
			||||||
					HasReceivedBids: true,
 | 
										HasReceivedBids: true,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				CorrespondingDebt: sdk.Coin{Denom: "", Amount: sdk.NewInt(1)},
 | 
									CorrespondingDebt: sdk.Coin{Denom: "", Amount: sdkmath.NewInt(1)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			false,
 | 
								false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -185,7 +186,7 @@ func TestCollateralAuctionValidate(t *testing.T) {
 | 
				
			|||||||
				MaxBid:            c("kava", 1),
 | 
									MaxBid:            c("kava", 1),
 | 
				
			||||||
				LotReturns: WeightedAddresses{
 | 
									LotReturns: WeightedAddresses{
 | 
				
			||||||
					Addresses: []sdk.AccAddress{addr1},
 | 
										Addresses: []sdk.AccAddress{addr1},
 | 
				
			||||||
					Weights:   []sdk.Int{sdk.NewInt(1)},
 | 
										Weights:   []sdkmath.Int{sdkmath.NewInt(1)},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			true,
 | 
								true,
 | 
				
			||||||
@ -203,7 +204,7 @@ func TestCollateralAuctionValidate(t *testing.T) {
 | 
				
			|||||||
					MaxEndTime:      now,
 | 
										MaxEndTime:      now,
 | 
				
			||||||
					HasReceivedBids: true,
 | 
										HasReceivedBids: true,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				CorrespondingDebt: sdk.Coin{Denom: "DENOM", Amount: sdk.NewInt(1)},
 | 
									CorrespondingDebt: sdk.Coin{Denom: "DENOM", Amount: sdkmath.NewInt(1)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			false,
 | 
								false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -221,7 +222,7 @@ func TestCollateralAuctionValidate(t *testing.T) {
 | 
				
			|||||||
					HasReceivedBids: true,
 | 
										HasReceivedBids: true,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				CorrespondingDebt: c("kava", 1),
 | 
									CorrespondingDebt: c("kava", 1),
 | 
				
			||||||
				MaxBid:            sdk.Coin{Denom: "DENOM", Amount: sdk.NewInt(1)},
 | 
									MaxBid:            sdk.Coin{Denom: "DENOM", Amount: sdkmath.NewInt(1)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			false,
 | 
								false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -242,7 +243,7 @@ func TestCollateralAuctionValidate(t *testing.T) {
 | 
				
			|||||||
				MaxBid:            c("kava", 1),
 | 
									MaxBid:            c("kava", 1),
 | 
				
			||||||
				LotReturns: WeightedAddresses{
 | 
									LotReturns: WeightedAddresses{
 | 
				
			||||||
					Addresses: []sdk.AccAddress{nil},
 | 
										Addresses: []sdk.AccAddress{nil},
 | 
				
			||||||
					Weights:   []sdk.Int{sdk.NewInt(1)},
 | 
										Weights:   []sdkmath.Int{sdkmath.NewInt(1)},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			false,
 | 
								false,
 | 
				
			||||||
@ -326,9 +327,9 @@ func TestNewCollateralAuction(t *testing.T) {
 | 
				
			|||||||
		sdk.AccAddress([]byte(testAccAddress2)),
 | 
							sdk.AccAddress([]byte(testAccAddress2)),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	weights := []sdk.Int{
 | 
						weights := []sdkmath.Int{
 | 
				
			||||||
		sdk.NewInt(6),
 | 
							sdkmath.NewInt(6),
 | 
				
			||||||
		sdk.NewInt(8),
 | 
							sdkmath.NewInt(8),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	weightedAddresses, _ := NewWeightedAddresses(addresses, weights)
 | 
						weightedAddresses, _ := NewWeightedAddresses(addresses, weights)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,30 +1,30 @@
 | 
				
			|||||||
package types
 | 
					package types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					import errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DONTCOVER
 | 
					// DONTCOVER
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	// ErrInvalidInitialAuctionID error for when the initial auction ID hasn't been set
 | 
						// ErrInvalidInitialAuctionID error for when the initial auction ID hasn't been set
 | 
				
			||||||
	ErrInvalidInitialAuctionID = sdkerrors.Register(ModuleName, 2, "initial auction ID hasn't been set")
 | 
						ErrInvalidInitialAuctionID = errorsmod.Register(ModuleName, 2, "initial auction ID hasn't been set")
 | 
				
			||||||
	// ErrUnrecognizedAuctionType error for unrecognized auction type
 | 
						// ErrUnrecognizedAuctionType error for unrecognized auction type
 | 
				
			||||||
	ErrUnrecognizedAuctionType = sdkerrors.Register(ModuleName, 3, "unrecognized auction type")
 | 
						ErrUnrecognizedAuctionType = errorsmod.Register(ModuleName, 3, "unrecognized auction type")
 | 
				
			||||||
	// ErrAuctionNotFound error for when an auction is not found
 | 
						// ErrAuctionNotFound error for when an auction is not found
 | 
				
			||||||
	ErrAuctionNotFound = sdkerrors.Register(ModuleName, 4, "auction not found")
 | 
						ErrAuctionNotFound = errorsmod.Register(ModuleName, 4, "auction not found")
 | 
				
			||||||
	// ErrAuctionHasNotExpired error for attempting to close an auction that has not passed its end time
 | 
						// ErrAuctionHasNotExpired error for attempting to close an auction that has not passed its end time
 | 
				
			||||||
	ErrAuctionHasNotExpired = sdkerrors.Register(ModuleName, 5, "auction can't be closed as curent block time has not passed auction end time")
 | 
						ErrAuctionHasNotExpired = errorsmod.Register(ModuleName, 5, "auction can't be closed as curent block time has not passed auction end time")
 | 
				
			||||||
	// ErrAuctionHasExpired error for when an auction is closed and unavailable for bidding
 | 
						// ErrAuctionHasExpired error for when an auction is closed and unavailable for bidding
 | 
				
			||||||
	ErrAuctionHasExpired = sdkerrors.Register(ModuleName, 6, "auction has closed")
 | 
						ErrAuctionHasExpired = errorsmod.Register(ModuleName, 6, "auction has closed")
 | 
				
			||||||
	// ErrInvalidBidDenom error for when bid denom doesn't match auction bid denom
 | 
						// ErrInvalidBidDenom error for when bid denom doesn't match auction bid denom
 | 
				
			||||||
	ErrInvalidBidDenom = sdkerrors.Register(ModuleName, 7, "bid denom doesn't match auction bid denom")
 | 
						ErrInvalidBidDenom = errorsmod.Register(ModuleName, 7, "bid denom doesn't match auction bid denom")
 | 
				
			||||||
	// ErrInvalidLotDenom error for when lot denom doesn't match auction lot denom
 | 
						// ErrInvalidLotDenom error for when lot denom doesn't match auction lot denom
 | 
				
			||||||
	ErrInvalidLotDenom = sdkerrors.Register(ModuleName, 8, "lot denom doesn't match auction lot denom")
 | 
						ErrInvalidLotDenom = errorsmod.Register(ModuleName, 8, "lot denom doesn't match auction lot denom")
 | 
				
			||||||
	// ErrBidTooSmall error for when bid is not greater than auction's min bid amount
 | 
						// ErrBidTooSmall error for when bid is not greater than auction's min bid amount
 | 
				
			||||||
	ErrBidTooSmall = sdkerrors.Register(ModuleName, 9, "bid is not greater than auction's min new bid amount")
 | 
						ErrBidTooSmall = errorsmod.Register(ModuleName, 9, "bid is not greater than auction's min new bid amount")
 | 
				
			||||||
	// ErrBidTooLarge error for when bid is larger than auction's maximum allowed bid
 | 
						// ErrBidTooLarge error for when bid is larger than auction's maximum allowed bid
 | 
				
			||||||
	ErrBidTooLarge = sdkerrors.Register(ModuleName, 10, "bid is greater than auction's max bid")
 | 
						ErrBidTooLarge = errorsmod.Register(ModuleName, 10, "bid is greater than auction's max bid")
 | 
				
			||||||
	// ErrLotTooSmall error for when lot is less than zero
 | 
						// ErrLotTooSmall error for when lot is less than zero
 | 
				
			||||||
	ErrLotTooSmall = sdkerrors.Register(ModuleName, 11, "lot is not greater than auction's min new lot amount")
 | 
						ErrLotTooSmall = errorsmod.Register(ModuleName, 11, "lot is not greater than auction's min new lot amount")
 | 
				
			||||||
	// ErrLotTooLarge error for when lot is not smaller than auction's max new lot amount
 | 
						// ErrLotTooLarge error for when lot is not smaller than auction's max new lot amount
 | 
				
			||||||
	ErrLotTooLarge = sdkerrors.Register(ModuleName, 12, "lot is greater than auction's max new lot amount")
 | 
						ErrLotTooLarge = errorsmod.Register(ModuleName, 12, "lot is greater than auction's max new lot amount")
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,7 @@ import (
 | 
				
			|||||||
	codectypes "github.com/cosmos/cosmos-sdk/codec/types"
 | 
						codectypes "github.com/cosmos/cosmos-sdk/codec/types"
 | 
				
			||||||
	"github.com/stretchr/testify/require"
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -36,7 +37,7 @@ func TestGenesisState_Validate(t *testing.T) {
 | 
				
			|||||||
		MaxBid:            sdk.NewInt64Coin("usdx", 5e4),
 | 
							MaxBid:            sdk.NewInt64Coin("usdx", 5e4),
 | 
				
			||||||
		LotReturns: WeightedAddresses{
 | 
							LotReturns: WeightedAddresses{
 | 
				
			||||||
			Addresses: []sdk.AccAddress{sdk.AccAddress("test return address")},
 | 
								Addresses: []sdk.AccAddress{sdk.AccAddress("test return address")},
 | 
				
			||||||
			Weights:   []sdk.Int{sdk.OneInt()},
 | 
								Weights:   []sdkmath.Int{sdk.OneInt()},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package types
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -32,10 +33,10 @@ func (msg MsgPlaceBid) ValidateBasic() error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	_, err := sdk.AccAddressFromBech32(msg.Bidder)
 | 
						_, err := sdk.AccAddressFromBech32(msg.Bidder)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "bidder address cannot be empty or invalid")
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "bidder address cannot be empty or invalid")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !msg.Amount.IsValid() {
 | 
						if !msg.Amount.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "bid amount %s", msg.Amount)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "bid amount %s", msg.Amount)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package types
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/stretchr/testify/require"
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
@ -31,7 +32,7 @@ func TestMsgPlaceBid_ValidateBasic(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"negative amount",
 | 
								"negative amount",
 | 
				
			||||||
			NewMsgPlaceBid(1, testAccAddress1, sdk.Coin{Denom: "token", Amount: sdk.NewInt(-10)}),
 | 
								NewMsgPlaceBid(1, testAccAddress1, sdk.Coin{Denom: "token", Amount: sdkmath.NewInt(-10)}),
 | 
				
			||||||
			false,
 | 
								false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package bep3_test
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -24,7 +25,7 @@ var (
 | 
				
			|||||||
	DenomMap            = map[int]string{0: "bnb", 1: "inc"}
 | 
						DenomMap            = map[int]string{0: "bnb", 1: "inc"}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func i(in int64) sdk.Int                    { return sdk.NewInt(in) }
 | 
					func i(in int64) sdkmath.Int                { return sdkmath.NewInt(in) }
 | 
				
			||||||
func d(de int64) sdk.Dec                    { return sdk.NewDec(de) }
 | 
					func d(de int64) sdk.Dec                    { return sdk.NewDec(de) }
 | 
				
			||||||
func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
					func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
				
			||||||
func cs(coins ...sdk.Coin) sdk.Coins        { return sdk.NewCoins(coins...) }
 | 
					func cs(coins ...sdk.Coin) sdk.Coins        { return sdk.NewCoins(coins...) }
 | 
				
			||||||
@ -43,16 +44,16 @@ func baseGenState(deputy sdk.AccAddress) types.GenesisState {
 | 
				
			|||||||
					Denom:  "bnb",
 | 
										Denom:  "bnb",
 | 
				
			||||||
					CoinID: 714,
 | 
										CoinID: 714,
 | 
				
			||||||
					SupplyLimit: types.SupplyLimit{
 | 
										SupplyLimit: types.SupplyLimit{
 | 
				
			||||||
						Limit:          sdk.NewInt(350000000000000),
 | 
											Limit:          sdkmath.NewInt(350000000000000),
 | 
				
			||||||
						TimeLimited:    false,
 | 
											TimeLimited:    false,
 | 
				
			||||||
						TimeBasedLimit: sdk.ZeroInt(),
 | 
											TimeBasedLimit: sdk.ZeroInt(),
 | 
				
			||||||
						TimePeriod:     time.Hour,
 | 
											TimePeriod:     time.Hour,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					Active:        true,
 | 
										Active:        true,
 | 
				
			||||||
					DeputyAddress: deputy,
 | 
										DeputyAddress: deputy,
 | 
				
			||||||
					FixedFee:      sdk.NewInt(1000),
 | 
										FixedFee:      sdkmath.NewInt(1000),
 | 
				
			||||||
					MinSwapAmount: sdk.OneInt(),
 | 
										MinSwapAmount: sdk.OneInt(),
 | 
				
			||||||
					MaxSwapAmount: sdk.NewInt(1000000000000),
 | 
										MaxSwapAmount: sdkmath.NewInt(1000000000000),
 | 
				
			||||||
					MinBlockLock:  types.DefaultMinBlockLock,
 | 
										MinBlockLock:  types.DefaultMinBlockLock,
 | 
				
			||||||
					MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
										MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
@ -60,16 +61,16 @@ func baseGenState(deputy sdk.AccAddress) types.GenesisState {
 | 
				
			|||||||
					Denom:  "inc",
 | 
										Denom:  "inc",
 | 
				
			||||||
					CoinID: 9999,
 | 
										CoinID: 9999,
 | 
				
			||||||
					SupplyLimit: types.SupplyLimit{
 | 
										SupplyLimit: types.SupplyLimit{
 | 
				
			||||||
						Limit:          sdk.NewInt(100000000000),
 | 
											Limit:          sdkmath.NewInt(100000000000),
 | 
				
			||||||
						TimeLimited:    false,
 | 
											TimeLimited:    false,
 | 
				
			||||||
						TimeBasedLimit: sdk.ZeroInt(),
 | 
											TimeBasedLimit: sdk.ZeroInt(),
 | 
				
			||||||
						TimePeriod:     time.Hour,
 | 
											TimePeriod:     time.Hour,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					Active:        true,
 | 
										Active:        true,
 | 
				
			||||||
					DeputyAddress: deputy,
 | 
										DeputyAddress: deputy,
 | 
				
			||||||
					FixedFee:      sdk.NewInt(1000),
 | 
										FixedFee:      sdkmath.NewInt(1000),
 | 
				
			||||||
					MinSwapAmount: sdk.OneInt(),
 | 
										MinSwapAmount: sdk.OneInt(),
 | 
				
			||||||
					MaxSwapAmount: sdk.NewInt(1000000000000),
 | 
										MaxSwapAmount: sdkmath.NewInt(1000000000000),
 | 
				
			||||||
					MinBlockLock:  types.DefaultMinBlockLock,
 | 
										MinBlockLock:  types.DefaultMinBlockLock,
 | 
				
			||||||
					MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
										MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
 | 
				
			|||||||
@ -3,8 +3,8 @@ package keeper
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/bep3/types"
 | 
						"github.com/kava-labs/kava/x/bep3/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -13,7 +13,7 @@ import (
 | 
				
			|||||||
func (k Keeper) IncrementCurrentAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
					func (k Keeper) IncrementCurrentAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
				
			||||||
	supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
						supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
							return errorsmod.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	limit, err := k.GetSupplyLimit(ctx, coin.Denom)
 | 
						limit, err := k.GetSupplyLimit(ctx, coin.Denom)
 | 
				
			||||||
@ -24,13 +24,13 @@ func (k Keeper) IncrementCurrentAssetSupply(ctx sdk.Context, coin sdk.Coin) erro
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Resulting current supply must be under asset's limit
 | 
						// Resulting current supply must be under asset's limit
 | 
				
			||||||
	if supplyLimit.IsLT(supply.CurrentSupply.Add(coin)) {
 | 
						if supplyLimit.IsLT(supply.CurrentSupply.Add(coin)) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrExceedsSupplyLimit, "increase %s, asset supply %s, limit %s", coin, supply.CurrentSupply, supplyLimit)
 | 
							return errorsmod.Wrapf(types.ErrExceedsSupplyLimit, "increase %s, asset supply %s, limit %s", coin, supply.CurrentSupply, supplyLimit)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if limit.TimeLimited {
 | 
						if limit.TimeLimited {
 | 
				
			||||||
		timeBasedSupplyLimit := sdk.NewCoin(coin.Denom, limit.TimeBasedLimit)
 | 
							timeBasedSupplyLimit := sdk.NewCoin(coin.Denom, limit.TimeBasedLimit)
 | 
				
			||||||
		if timeBasedSupplyLimit.IsLT(supply.TimeLimitedCurrentSupply.Add(coin)) {
 | 
							if timeBasedSupplyLimit.IsLT(supply.TimeLimitedCurrentSupply.Add(coin)) {
 | 
				
			||||||
			return sdkerrors.Wrapf(types.ErrExceedsTimeBasedSupplyLimit, "increase %s, current time-based asset supply %s, limit %s", coin, supply.TimeLimitedCurrentSupply, timeBasedSupplyLimit)
 | 
								return errorsmod.Wrapf(types.ErrExceedsTimeBasedSupplyLimit, "increase %s, current time-based asset supply %s, limit %s", coin, supply.TimeLimitedCurrentSupply, timeBasedSupplyLimit)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		supply.TimeLimitedCurrentSupply = supply.TimeLimitedCurrentSupply.Add(coin)
 | 
							supply.TimeLimitedCurrentSupply = supply.TimeLimitedCurrentSupply.Add(coin)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -44,13 +44,13 @@ func (k Keeper) IncrementCurrentAssetSupply(ctx sdk.Context, coin sdk.Coin) erro
 | 
				
			|||||||
func (k Keeper) DecrementCurrentAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
					func (k Keeper) DecrementCurrentAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
				
			||||||
	supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
						supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
							return errorsmod.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Resulting current supply must be greater than or equal to 0
 | 
						// Resulting current supply must be greater than or equal to 0
 | 
				
			||||||
	// Use sdk.Int instead of sdk.Coin to prevent panic if true
 | 
						// Use sdkmath.Int instead of sdk.Coin to prevent panic if true
 | 
				
			||||||
	if supply.CurrentSupply.Amount.Sub(coin.Amount).IsNegative() {
 | 
						if supply.CurrentSupply.Amount.Sub(coin.Amount).IsNegative() {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidCurrentSupply, "decrease %s, asset supply %s", coin, supply.CurrentSupply)
 | 
							return errorsmod.Wrapf(types.ErrInvalidCurrentSupply, "decrease %s, asset supply %s", coin, supply.CurrentSupply)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	supply.CurrentSupply = supply.CurrentSupply.Sub(coin)
 | 
						supply.CurrentSupply = supply.CurrentSupply.Sub(coin)
 | 
				
			||||||
@ -62,7 +62,7 @@ func (k Keeper) DecrementCurrentAssetSupply(ctx sdk.Context, coin sdk.Coin) erro
 | 
				
			|||||||
func (k Keeper) IncrementIncomingAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
					func (k Keeper) IncrementIncomingAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
				
			||||||
	supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
						supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
							return errorsmod.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 	Result of (current + incoming + amount) must be under asset's limit
 | 
						// 	Result of (current + incoming + amount) must be under asset's limit
 | 
				
			||||||
@ -74,14 +74,14 @@ func (k Keeper) IncrementIncomingAssetSupply(ctx sdk.Context, coin sdk.Coin) err
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	supplyLimit := sdk.NewCoin(coin.Denom, limit.Limit)
 | 
						supplyLimit := sdk.NewCoin(coin.Denom, limit.Limit)
 | 
				
			||||||
	if supplyLimit.IsLT(totalSupply.Add(coin)) {
 | 
						if supplyLimit.IsLT(totalSupply.Add(coin)) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrExceedsSupplyLimit, "increase %s, asset supply %s, limit %s", coin, totalSupply, supplyLimit)
 | 
							return errorsmod.Wrapf(types.ErrExceedsSupplyLimit, "increase %s, asset supply %s, limit %s", coin, totalSupply, supplyLimit)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if limit.TimeLimited {
 | 
						if limit.TimeLimited {
 | 
				
			||||||
		timeLimitedTotalSupply := supply.TimeLimitedCurrentSupply.Add(supply.IncomingSupply)
 | 
							timeLimitedTotalSupply := supply.TimeLimitedCurrentSupply.Add(supply.IncomingSupply)
 | 
				
			||||||
		timeBasedSupplyLimit := sdk.NewCoin(coin.Denom, limit.TimeBasedLimit)
 | 
							timeBasedSupplyLimit := sdk.NewCoin(coin.Denom, limit.TimeBasedLimit)
 | 
				
			||||||
		if timeBasedSupplyLimit.IsLT(timeLimitedTotalSupply.Add(coin)) {
 | 
							if timeBasedSupplyLimit.IsLT(timeLimitedTotalSupply.Add(coin)) {
 | 
				
			||||||
			return sdkerrors.Wrapf(types.ErrExceedsTimeBasedSupplyLimit, "increase %s, time-based asset supply %s, limit %s", coin, supply.TimeLimitedCurrentSupply, timeBasedSupplyLimit)
 | 
								return errorsmod.Wrapf(types.ErrExceedsTimeBasedSupplyLimit, "increase %s, time-based asset supply %s, limit %s", coin, supply.TimeLimitedCurrentSupply, timeBasedSupplyLimit)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -94,13 +94,13 @@ func (k Keeper) IncrementIncomingAssetSupply(ctx sdk.Context, coin sdk.Coin) err
 | 
				
			|||||||
func (k Keeper) DecrementIncomingAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
					func (k Keeper) DecrementIncomingAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
				
			||||||
	supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
						supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
							return errorsmod.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Resulting incoming supply must be greater than or equal to 0
 | 
						// Resulting incoming supply must be greater than or equal to 0
 | 
				
			||||||
	// Use sdk.Int instead of sdk.Coin to prevent panic if true
 | 
						// Use sdkmath.Int instead of sdk.Coin to prevent panic if true
 | 
				
			||||||
	if supply.IncomingSupply.Amount.Sub(coin.Amount).IsNegative() {
 | 
						if supply.IncomingSupply.Amount.Sub(coin.Amount).IsNegative() {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidIncomingSupply, "decrease %s, incoming supply %s", coin, supply.IncomingSupply)
 | 
							return errorsmod.Wrapf(types.ErrInvalidIncomingSupply, "decrease %s, incoming supply %s", coin, supply.IncomingSupply)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	supply.IncomingSupply = supply.IncomingSupply.Sub(coin)
 | 
						supply.IncomingSupply = supply.IncomingSupply.Sub(coin)
 | 
				
			||||||
@ -112,12 +112,12 @@ func (k Keeper) DecrementIncomingAssetSupply(ctx sdk.Context, coin sdk.Coin) err
 | 
				
			|||||||
func (k Keeper) IncrementOutgoingAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
					func (k Keeper) IncrementOutgoingAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
				
			||||||
	supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
						supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
							return errorsmod.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Result of (outgoing + amount) must be less than current supply
 | 
						// Result of (outgoing + amount) must be less than current supply
 | 
				
			||||||
	if supply.CurrentSupply.IsLT(supply.OutgoingSupply.Add(coin)) {
 | 
						if supply.CurrentSupply.IsLT(supply.OutgoingSupply.Add(coin)) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrExceedsAvailableSupply, "swap amount %s, available supply %s", coin,
 | 
							return errorsmod.Wrapf(types.ErrExceedsAvailableSupply, "swap amount %s, available supply %s", coin,
 | 
				
			||||||
			supply.CurrentSupply.Amount.Sub(supply.OutgoingSupply.Amount))
 | 
								supply.CurrentSupply.Amount.Sub(supply.OutgoingSupply.Amount))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -130,13 +130,13 @@ func (k Keeper) IncrementOutgoingAssetSupply(ctx sdk.Context, coin sdk.Coin) err
 | 
				
			|||||||
func (k Keeper) DecrementOutgoingAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
					func (k Keeper) DecrementOutgoingAssetSupply(ctx sdk.Context, coin sdk.Coin) error {
 | 
				
			||||||
	supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
						supply, found := k.GetAssetSupply(ctx, coin.Denom)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
							return errorsmod.Wrap(types.ErrAssetNotSupported, coin.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Resulting outgoing supply must be greater than or equal to 0
 | 
						// Resulting outgoing supply must be greater than or equal to 0
 | 
				
			||||||
	// Use sdk.Int instead of sdk.Coin to prevent panic if true
 | 
						// Use sdkmath.Int instead of sdk.Coin to prevent panic if true
 | 
				
			||||||
	if supply.OutgoingSupply.Amount.Sub(coin.Amount).IsNegative() {
 | 
						if supply.OutgoingSupply.Amount.Sub(coin.Amount).IsNegative() {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidOutgoingSupply, "decrease %s, outgoing supply %s", coin, supply.OutgoingSupply)
 | 
							return errorsmod.Wrapf(types.ErrInvalidOutgoingSupply, "decrease %s, outgoing supply %s", coin, supply.OutgoingSupply)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	supply.OutgoingSupply = supply.OutgoingSupply.Sub(coin)
 | 
						supply.OutgoingSupply = supply.OutgoingSupply.Sub(coin)
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
						tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
				
			||||||
@ -39,9 +40,9 @@ func (suite *AssetTestSuite) SetupTest() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	keeper := tApp.GetBep3Keeper()
 | 
						keeper := tApp.GetBep3Keeper()
 | 
				
			||||||
	params := keeper.GetParams(ctx)
 | 
						params := keeper.GetParams(ctx)
 | 
				
			||||||
	params.AssetParams[0].SupplyLimit.Limit = sdk.NewInt(50)
 | 
						params.AssetParams[0].SupplyLimit.Limit = sdkmath.NewInt(50)
 | 
				
			||||||
	params.AssetParams[1].SupplyLimit.Limit = sdk.NewInt(100)
 | 
						params.AssetParams[1].SupplyLimit.Limit = sdkmath.NewInt(100)
 | 
				
			||||||
	params.AssetParams[1].SupplyLimit.TimeBasedLimit = sdk.NewInt(15)
 | 
						params.AssetParams[1].SupplyLimit.TimeBasedLimit = sdkmath.NewInt(15)
 | 
				
			||||||
	keeper.SetParams(ctx, params)
 | 
						keeper.SetParams(ctx, params)
 | 
				
			||||||
	// Set asset supply with standard value for testing
 | 
						// Set asset supply with standard value for testing
 | 
				
			||||||
	supply := types.NewAssetSupply(c("bnb", 5), c("bnb", 5), c("bnb", 40), c("bnb", 0), time.Duration(0))
 | 
						supply := types.NewAssetSupply(c("bnb", 5), c("bnb", 5), c("bnb", 40), c("bnb", 0), time.Duration(0))
 | 
				
			||||||
@ -632,16 +633,16 @@ func (suite *AssetTestSuite) TestUpdateTimeBasedSupplyLimits() {
 | 
				
			|||||||
						Denom:  "bnb",
 | 
											Denom:  "bnb",
 | 
				
			||||||
						CoinID: 714,
 | 
											CoinID: 714,
 | 
				
			||||||
						SupplyLimit: types.SupplyLimit{
 | 
											SupplyLimit: types.SupplyLimit{
 | 
				
			||||||
							Limit:          sdk.NewInt(350000000000000),
 | 
												Limit:          sdkmath.NewInt(350000000000000),
 | 
				
			||||||
							TimeLimited:    false,
 | 
												TimeLimited:    false,
 | 
				
			||||||
							TimeBasedLimit: sdk.ZeroInt(),
 | 
												TimeBasedLimit: sdk.ZeroInt(),
 | 
				
			||||||
							TimePeriod:     time.Hour,
 | 
												TimePeriod:     time.Hour,
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						Active:        true,
 | 
											Active:        true,
 | 
				
			||||||
						DeputyAddress: deputy,
 | 
											DeputyAddress: deputy,
 | 
				
			||||||
						FixedFee:      sdk.NewInt(1000),
 | 
											FixedFee:      sdkmath.NewInt(1000),
 | 
				
			||||||
						MinSwapAmount: sdk.OneInt(),
 | 
											MinSwapAmount: sdk.OneInt(),
 | 
				
			||||||
						MaxSwapAmount: sdk.NewInt(1000000000000),
 | 
											MaxSwapAmount: sdkmath.NewInt(1000000000000),
 | 
				
			||||||
						MinBlockLock:  types.DefaultMinBlockLock,
 | 
											MinBlockLock:  types.DefaultMinBlockLock,
 | 
				
			||||||
						MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
											MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
@ -649,16 +650,16 @@ func (suite *AssetTestSuite) TestUpdateTimeBasedSupplyLimits() {
 | 
				
			|||||||
						Denom:  "inc",
 | 
											Denom:  "inc",
 | 
				
			||||||
						CoinID: 9999,
 | 
											CoinID: 9999,
 | 
				
			||||||
						SupplyLimit: types.SupplyLimit{
 | 
											SupplyLimit: types.SupplyLimit{
 | 
				
			||||||
							Limit:          sdk.NewInt(100),
 | 
												Limit:          sdkmath.NewInt(100),
 | 
				
			||||||
							TimeLimited:    true,
 | 
												TimeLimited:    true,
 | 
				
			||||||
							TimeBasedLimit: sdk.NewInt(10),
 | 
												TimeBasedLimit: sdkmath.NewInt(10),
 | 
				
			||||||
							TimePeriod:     time.Hour,
 | 
												TimePeriod:     time.Hour,
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						Active:        false,
 | 
											Active:        false,
 | 
				
			||||||
						DeputyAddress: deputy,
 | 
											DeputyAddress: deputy,
 | 
				
			||||||
						FixedFee:      sdk.NewInt(1000),
 | 
											FixedFee:      sdkmath.NewInt(1000),
 | 
				
			||||||
						MinSwapAmount: sdk.OneInt(),
 | 
											MinSwapAmount: sdk.OneInt(),
 | 
				
			||||||
						MaxSwapAmount: sdk.NewInt(1000000000000),
 | 
											MaxSwapAmount: sdkmath.NewInt(1000000000000),
 | 
				
			||||||
						MinBlockLock:  types.DefaultMinBlockLock,
 | 
											MinBlockLock:  types.DefaultMinBlockLock,
 | 
				
			||||||
						MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
											MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
@ -666,16 +667,16 @@ func (suite *AssetTestSuite) TestUpdateTimeBasedSupplyLimits() {
 | 
				
			|||||||
						Denom:  "lol",
 | 
											Denom:  "lol",
 | 
				
			||||||
						CoinID: 9999,
 | 
											CoinID: 9999,
 | 
				
			||||||
						SupplyLimit: types.SupplyLimit{
 | 
											SupplyLimit: types.SupplyLimit{
 | 
				
			||||||
							Limit:          sdk.NewInt(100),
 | 
												Limit:          sdkmath.NewInt(100),
 | 
				
			||||||
							TimeLimited:    true,
 | 
												TimeLimited:    true,
 | 
				
			||||||
							TimeBasedLimit: sdk.NewInt(10),
 | 
												TimeBasedLimit: sdkmath.NewInt(10),
 | 
				
			||||||
							TimePeriod:     time.Hour,
 | 
												TimePeriod:     time.Hour,
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						Active:        false,
 | 
											Active:        false,
 | 
				
			||||||
						DeputyAddress: deputy,
 | 
											DeputyAddress: deputy,
 | 
				
			||||||
						FixedFee:      sdk.NewInt(1000),
 | 
											FixedFee:      sdkmath.NewInt(1000),
 | 
				
			||||||
						MinSwapAmount: sdk.OneInt(),
 | 
											MinSwapAmount: sdk.OneInt(),
 | 
				
			||||||
						MaxSwapAmount: sdk.NewInt(1000000000000),
 | 
											MaxSwapAmount: sdkmath.NewInt(1000000000000),
 | 
				
			||||||
						MinBlockLock:  types.DefaultMinBlockLock,
 | 
											MinBlockLock:  types.DefaultMinBlockLock,
 | 
				
			||||||
						MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
											MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package keeper_test
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
@ -43,16 +44,16 @@ func NewBep3GenStateMulti(cdc codec.JSONCodec, deputyAddress sdk.AccAddress) app
 | 
				
			|||||||
					Denom:  "bnb",
 | 
										Denom:  "bnb",
 | 
				
			||||||
					CoinID: 714,
 | 
										CoinID: 714,
 | 
				
			||||||
					SupplyLimit: types.SupplyLimit{
 | 
										SupplyLimit: types.SupplyLimit{
 | 
				
			||||||
						Limit:          sdk.NewInt(350000000000000),
 | 
											Limit:          sdkmath.NewInt(350000000000000),
 | 
				
			||||||
						TimeLimited:    false,
 | 
											TimeLimited:    false,
 | 
				
			||||||
						TimeBasedLimit: sdk.ZeroInt(),
 | 
											TimeBasedLimit: sdk.ZeroInt(),
 | 
				
			||||||
						TimePeriod:     time.Hour,
 | 
											TimePeriod:     time.Hour,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					Active:        true,
 | 
										Active:        true,
 | 
				
			||||||
					DeputyAddress: deputyAddress,
 | 
										DeputyAddress: deputyAddress,
 | 
				
			||||||
					FixedFee:      sdk.NewInt(1000),
 | 
										FixedFee:      sdkmath.NewInt(1000),
 | 
				
			||||||
					MinSwapAmount: sdk.OneInt(),
 | 
										MinSwapAmount: sdk.OneInt(),
 | 
				
			||||||
					MaxSwapAmount: sdk.NewInt(1000000000000),
 | 
										MaxSwapAmount: sdkmath.NewInt(1000000000000),
 | 
				
			||||||
					MinBlockLock:  types.DefaultMinBlockLock,
 | 
										MinBlockLock:  types.DefaultMinBlockLock,
 | 
				
			||||||
					MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
										MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
@ -60,16 +61,16 @@ func NewBep3GenStateMulti(cdc codec.JSONCodec, deputyAddress sdk.AccAddress) app
 | 
				
			|||||||
					Denom:  "inc",
 | 
										Denom:  "inc",
 | 
				
			||||||
					CoinID: 9999,
 | 
										CoinID: 9999,
 | 
				
			||||||
					SupplyLimit: types.SupplyLimit{
 | 
										SupplyLimit: types.SupplyLimit{
 | 
				
			||||||
						Limit:          sdk.NewInt(100000000000000),
 | 
											Limit:          sdkmath.NewInt(100000000000000),
 | 
				
			||||||
						TimeLimited:    true,
 | 
											TimeLimited:    true,
 | 
				
			||||||
						TimeBasedLimit: sdk.NewInt(50000000000),
 | 
											TimeBasedLimit: sdkmath.NewInt(50000000000),
 | 
				
			||||||
						TimePeriod:     time.Hour,
 | 
											TimePeriod:     time.Hour,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					Active:        false,
 | 
										Active:        false,
 | 
				
			||||||
					DeputyAddress: deputyAddress,
 | 
										DeputyAddress: deputyAddress,
 | 
				
			||||||
					FixedFee:      sdk.NewInt(1000),
 | 
										FixedFee:      sdkmath.NewInt(1000),
 | 
				
			||||||
					MinSwapAmount: sdk.OneInt(),
 | 
										MinSwapAmount: sdk.OneInt(),
 | 
				
			||||||
					MaxSwapAmount: sdk.NewInt(100000000000),
 | 
										MaxSwapAmount: sdkmath.NewInt(100000000000),
 | 
				
			||||||
					MinBlockLock:  types.DefaultMinBlockLock,
 | 
										MinBlockLock:  types.DefaultMinBlockLock,
 | 
				
			||||||
					MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
										MaxBlockLock:  types.DefaultMaxBlockLock,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,9 @@
 | 
				
			|||||||
package keeper
 | 
					package keeper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/bep3/types"
 | 
						"github.com/kava-labs/kava/x/bep3/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -30,7 +31,7 @@ func (k Keeper) GetAsset(ctx sdk.Context, denom string) (types.AssetParam, error
 | 
				
			|||||||
			return asset, nil
 | 
								return asset, nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return types.AssetParam{}, sdkerrors.Wrap(types.ErrAssetNotSupported, denom)
 | 
						return types.AssetParam{}, errorsmod.Wrap(types.ErrAssetNotSupported, denom)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SetAsset sets an asset in the params
 | 
					// SetAsset sets an asset in the params
 | 
				
			||||||
@ -64,28 +65,28 @@ func (k Keeper) GetDeputyAddress(ctx sdk.Context, denom string) (sdk.AccAddress,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetFixedFee returns the fixed fee for incoming swaps
 | 
					// GetFixedFee returns the fixed fee for incoming swaps
 | 
				
			||||||
func (k Keeper) GetFixedFee(ctx sdk.Context, denom string) (sdk.Int, error) {
 | 
					func (k Keeper) GetFixedFee(ctx sdk.Context, denom string) (sdkmath.Int, error) {
 | 
				
			||||||
	asset, err := k.GetAsset(ctx, denom)
 | 
						asset, err := k.GetAsset(ctx, denom)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdk.Int{}, err
 | 
							return sdkmath.Int{}, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return asset.FixedFee, nil
 | 
						return asset.FixedFee, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetMinSwapAmount returns the minimum swap amount
 | 
					// GetMinSwapAmount returns the minimum swap amount
 | 
				
			||||||
func (k Keeper) GetMinSwapAmount(ctx sdk.Context, denom string) (sdk.Int, error) {
 | 
					func (k Keeper) GetMinSwapAmount(ctx sdk.Context, denom string) (sdkmath.Int, error) {
 | 
				
			||||||
	asset, err := k.GetAsset(ctx, denom)
 | 
						asset, err := k.GetAsset(ctx, denom)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdk.Int{}, err
 | 
							return sdkmath.Int{}, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return asset.MinSwapAmount, nil
 | 
						return asset.MinSwapAmount, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetMaxSwapAmount returns the maximum swap amount
 | 
					// GetMaxSwapAmount returns the maximum swap amount
 | 
				
			||||||
func (k Keeper) GetMaxSwapAmount(ctx sdk.Context, denom string) (sdk.Int, error) {
 | 
					func (k Keeper) GetMaxSwapAmount(ctx sdk.Context, denom string) (sdkmath.Int, error) {
 | 
				
			||||||
	asset, err := k.GetAsset(ctx, denom)
 | 
						asset, err := k.GetAsset(ctx, denom)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdk.Int{}, err
 | 
							return sdkmath.Int{}, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return asset.MaxSwapAmount, nil
 | 
						return asset.MaxSwapAmount, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -126,7 +127,7 @@ func (k Keeper) ValidateLiveAsset(ctx sdk.Context, coin sdk.Coin) error {
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !asset.Active {
 | 
						if !asset.Active {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrAssetNotActive, asset.Denom)
 | 
							return errorsmod.Wrap(types.ErrAssetNotActive, asset.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package keeper
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	abci "github.com/tendermint/tendermint/abci/types"
 | 
						abci "github.com/tendermint/tendermint/abci/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/client"
 | 
						"github.com/cosmos/cosmos-sdk/client"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
@ -26,7 +27,7 @@ func NewQuerier(keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier
 | 
				
			|||||||
		case types.QueryGetParams:
 | 
							case types.QueryGetParams:
 | 
				
			||||||
			return queryGetParams(ctx, req, keeper, legacyQuerierCdc)
 | 
								return queryGetParams(ctx, req, keeper, legacyQuerierCdc)
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint", types.ModuleName)
 | 
								return nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint", types.ModuleName)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -36,18 +37,18 @@ func queryAssetSupply(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, leg
 | 
				
			|||||||
	var requestParams types.QueryAssetSupply
 | 
						var requestParams types.QueryAssetSupply
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	assetSupply, found := keeper.GetAssetSupply(ctx, requestParams.Denom)
 | 
						assetSupply, found := keeper.GetAssetSupply(ctx, requestParams.Denom)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(types.ErrAssetSupplyNotFound, string(requestParams.Denom))
 | 
							return nil, errorsmod.Wrap(types.ErrAssetSupplyNotFound, string(requestParams.Denom))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Encode results
 | 
						// Encode results
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, assetSupply)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, assetSupply)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
@ -61,7 +62,7 @@ func queryAssetSupplies(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, l
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, assets)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, assets)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
@ -72,13 +73,13 @@ func queryAtomicSwap(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, lega
 | 
				
			|||||||
	var requestParams types.QueryAtomicSwapByID
 | 
						var requestParams types.QueryAtomicSwapByID
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Lookup atomic swap
 | 
						// Lookup atomic swap
 | 
				
			||||||
	atomicSwap, found := keeper.GetAtomicSwap(ctx, requestParams.SwapID)
 | 
						atomicSwap, found := keeper.GetAtomicSwap(ctx, requestParams.SwapID)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return nil, sdkerrors.Wrapf(types.ErrAtomicSwapNotFound, "%d", requestParams.SwapID)
 | 
							return nil, errorsmod.Wrapf(types.ErrAtomicSwapNotFound, "%d", requestParams.SwapID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	augmentedAtomicSwap := types.NewLegacyAugmentedAtomicSwap(atomicSwap)
 | 
						augmentedAtomicSwap := types.NewLegacyAugmentedAtomicSwap(atomicSwap)
 | 
				
			||||||
@ -86,7 +87,7 @@ func queryAtomicSwap(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, lega
 | 
				
			|||||||
	// Encode results
 | 
						// Encode results
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, augmentedAtomicSwap)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, augmentedAtomicSwap)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
@ -96,7 +97,7 @@ func queryAtomicSwaps(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, leg
 | 
				
			|||||||
	var params types.QueryAtomicSwaps
 | 
						var params types.QueryAtomicSwaps
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unfilteredSwaps := keeper.GetAllAtomicSwaps(ctx)
 | 
						unfilteredSwaps := keeper.GetAllAtomicSwaps(ctx)
 | 
				
			||||||
@ -113,7 +114,7 @@ func queryAtomicSwaps(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, leg
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, augmentedSwaps)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, augmentedSwaps)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
@ -127,7 +128,7 @@ func queryGetParams(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, legac
 | 
				
			|||||||
	// Encode results
 | 
						// Encode results
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, params)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, params)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -21,12 +22,12 @@ func (k Keeper) CreateAtomicSwap(ctx sdk.Context, randomNumberHash []byte, times
 | 
				
			|||||||
	swapID := types.CalculateSwapID(randomNumberHash, sender, senderOtherChain)
 | 
						swapID := types.CalculateSwapID(randomNumberHash, sender, senderOtherChain)
 | 
				
			||||||
	_, found := k.GetAtomicSwap(ctx, swapID)
 | 
						_, found := k.GetAtomicSwap(ctx, swapID)
 | 
				
			||||||
	if found {
 | 
						if found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrAtomicSwapAlreadyExists, hex.EncodeToString(swapID))
 | 
							return errorsmod.Wrap(types.ErrAtomicSwapAlreadyExists, hex.EncodeToString(swapID))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Cannot send coins to a module account
 | 
						// Cannot send coins to a module account
 | 
				
			||||||
	if k.Maccs[recipient.String()] {
 | 
						if k.Maccs[recipient.String()] {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is a module account", recipient)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is a module account", recipient)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(amount) != 1 {
 | 
						if len(amount) != 1 {
 | 
				
			||||||
@ -44,25 +45,25 @@ func (k Keeper) CreateAtomicSwap(ctx sdk.Context, randomNumberHash []byte, times
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Swap amount must be within the specified swap amount limits
 | 
						// Swap amount must be within the specified swap amount limits
 | 
				
			||||||
	if amount[0].Amount.LT(asset.MinSwapAmount) || amount[0].Amount.GT(asset.MaxSwapAmount) {
 | 
						if amount[0].Amount.LT(asset.MinSwapAmount) || amount[0].Amount.GT(asset.MaxSwapAmount) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidAmount, "amount %d outside range [%s, %s]", amount[0].Amount, asset.MinSwapAmount, asset.MaxSwapAmount)
 | 
							return errorsmod.Wrapf(types.ErrInvalidAmount, "amount %d outside range [%s, %s]", amount[0].Amount, asset.MinSwapAmount, asset.MaxSwapAmount)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Unix timestamp must be in range [-15 mins, 30 mins] of the current time
 | 
						// Unix timestamp must be in range [-15 mins, 30 mins] of the current time
 | 
				
			||||||
	pastTimestampLimit := ctx.BlockTime().Add(time.Duration(-15) * time.Minute).Unix()
 | 
						pastTimestampLimit := ctx.BlockTime().Add(time.Duration(-15) * time.Minute).Unix()
 | 
				
			||||||
	futureTimestampLimit := ctx.BlockTime().Add(time.Duration(30) * time.Minute).Unix()
 | 
						futureTimestampLimit := ctx.BlockTime().Add(time.Duration(30) * time.Minute).Unix()
 | 
				
			||||||
	if timestamp < pastTimestampLimit || timestamp >= futureTimestampLimit {
 | 
						if timestamp < pastTimestampLimit || timestamp >= futureTimestampLimit {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrInvalidTimestamp, fmt.Sprintf("block time: %s, timestamp: %s", ctx.BlockTime().String(), time.Unix(timestamp, 0).UTC().String()))
 | 
							return errorsmod.Wrap(types.ErrInvalidTimestamp, fmt.Sprintf("block time: %s, timestamp: %s", ctx.BlockTime().String(), time.Unix(timestamp, 0).UTC().String()))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var direction types.SwapDirection
 | 
						var direction types.SwapDirection
 | 
				
			||||||
	if sender.Equals(asset.DeputyAddress) {
 | 
						if sender.Equals(asset.DeputyAddress) {
 | 
				
			||||||
		if recipient.Equals(asset.DeputyAddress) {
 | 
							if recipient.Equals(asset.DeputyAddress) {
 | 
				
			||||||
			return sdkerrors.Wrapf(types.ErrInvalidSwapAccount, "deputy cannot be both sender and receiver: %s", asset.DeputyAddress)
 | 
								return errorsmod.Wrapf(types.ErrInvalidSwapAccount, "deputy cannot be both sender and receiver: %s", asset.DeputyAddress)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		direction = types.SWAP_DIRECTION_INCOMING
 | 
							direction = types.SWAP_DIRECTION_INCOMING
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		if !recipient.Equals(asset.DeputyAddress) {
 | 
							if !recipient.Equals(asset.DeputyAddress) {
 | 
				
			||||||
			return sdkerrors.Wrapf(types.ErrInvalidSwapAccount, "deputy must be recipient for outgoing account: %s", recipient)
 | 
								return errorsmod.Wrapf(types.ErrInvalidSwapAccount, "deputy must be recipient for outgoing account: %s", recipient)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		direction = types.SWAP_DIRECTION_OUTGOING
 | 
							direction = types.SWAP_DIRECTION_OUTGOING
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -82,11 +83,11 @@ func (k Keeper) CreateAtomicSwap(ctx sdk.Context, randomNumberHash []byte, times
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		// Outgoing swaps must have a height span within the accepted range
 | 
							// Outgoing swaps must have a height span within the accepted range
 | 
				
			||||||
		if heightSpan < asset.MinBlockLock || heightSpan > asset.MaxBlockLock {
 | 
							if heightSpan < asset.MinBlockLock || heightSpan > asset.MaxBlockLock {
 | 
				
			||||||
			return sdkerrors.Wrapf(types.ErrInvalidHeightSpan, "height span %d outside range [%d, %d]", heightSpan, asset.MinBlockLock, asset.MaxBlockLock)
 | 
								return errorsmod.Wrapf(types.ErrInvalidHeightSpan, "height span %d outside range [%d, %d]", heightSpan, asset.MinBlockLock, asset.MaxBlockLock)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// Amount in outgoing swaps must be able to pay the deputy's fixed fee.
 | 
							// Amount in outgoing swaps must be able to pay the deputy's fixed fee.
 | 
				
			||||||
		if amount[0].Amount.LTE(asset.FixedFee.Add(asset.MinSwapAmount)) {
 | 
							if amount[0].Amount.LTE(asset.FixedFee.Add(asset.MinSwapAmount)) {
 | 
				
			||||||
			return sdkerrors.Wrap(types.ErrInsufficientAmount, amount[0].String())
 | 
								return errorsmod.Wrap(types.ErrInsufficientAmount, amount[0].String())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		err = k.IncrementOutgoingAssetSupply(ctx, amount[0])
 | 
							err = k.IncrementOutgoingAssetSupply(ctx, amount[0])
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@ -133,12 +134,12 @@ func (k Keeper) CreateAtomicSwap(ctx sdk.Context, randomNumberHash []byte, times
 | 
				
			|||||||
func (k Keeper) ClaimAtomicSwap(ctx sdk.Context, from sdk.AccAddress, swapID []byte, randomNumber []byte) error {
 | 
					func (k Keeper) ClaimAtomicSwap(ctx sdk.Context, from sdk.AccAddress, swapID []byte, randomNumber []byte) error {
 | 
				
			||||||
	atomicSwap, found := k.GetAtomicSwap(ctx, swapID)
 | 
						atomicSwap, found := k.GetAtomicSwap(ctx, swapID)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrAtomicSwapNotFound, "%s", swapID)
 | 
							return errorsmod.Wrapf(types.ErrAtomicSwapNotFound, "%s", swapID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Only open atomic swaps can be claimed
 | 
						// Only open atomic swaps can be claimed
 | 
				
			||||||
	if atomicSwap.Status != types.SWAP_STATUS_OPEN {
 | 
						if atomicSwap.Status != types.SWAP_STATUS_OPEN {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrSwapNotClaimable, "status %s", atomicSwap.Status.String())
 | 
							return errorsmod.Wrapf(types.ErrSwapNotClaimable, "status %s", atomicSwap.Status.String())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//  Calculate hashed secret using submitted number
 | 
						//  Calculate hashed secret using submitted number
 | 
				
			||||||
@ -147,7 +148,7 @@ func (k Keeper) ClaimAtomicSwap(ctx sdk.Context, from sdk.AccAddress, swapID []b
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Confirm that secret unlocks the atomic swap
 | 
						// Confirm that secret unlocks the atomic swap
 | 
				
			||||||
	if !bytes.Equal(hashedSecret, atomicSwap.GetSwapID()) {
 | 
						if !bytes.Equal(hashedSecret, atomicSwap.GetSwapID()) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidClaimSecret, "the submitted random number is incorrect")
 | 
							return errorsmod.Wrapf(types.ErrInvalidClaimSecret, "the submitted random number is incorrect")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
@ -217,11 +218,11 @@ func (k Keeper) ClaimAtomicSwap(ctx sdk.Context, from sdk.AccAddress, swapID []b
 | 
				
			|||||||
func (k Keeper) RefundAtomicSwap(ctx sdk.Context, from sdk.AccAddress, swapID []byte) error {
 | 
					func (k Keeper) RefundAtomicSwap(ctx sdk.Context, from sdk.AccAddress, swapID []byte) error {
 | 
				
			||||||
	atomicSwap, found := k.GetAtomicSwap(ctx, swapID)
 | 
						atomicSwap, found := k.GetAtomicSwap(ctx, swapID)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrAtomicSwapNotFound, "%s", swapID)
 | 
							return errorsmod.Wrapf(types.ErrAtomicSwapNotFound, "%s", swapID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// Only expired swaps may be refunded
 | 
						// Only expired swaps may be refunded
 | 
				
			||||||
	if atomicSwap.Status != types.SWAP_STATUS_EXPIRED {
 | 
						if atomicSwap.Status != types.SWAP_STATUS_EXPIRED {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrSwapNotRefundable, "status %s", atomicSwap.Status.String())
 | 
							return errorsmod.Wrapf(types.ErrSwapNotRefundable, "status %s", atomicSwap.Status.String())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
@ -131,7 +132,7 @@ func (s *migrateTestSuite) TestMigrate_Swaps() {
 | 
				
			|||||||
		s.Run(tc.name, func() {
 | 
							s.Run(tc.name, func() {
 | 
				
			||||||
			oldSwaps := types.AtomicSwaps{
 | 
								oldSwaps := types.AtomicSwaps{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Amount:              sdk.NewCoins(sdk.NewCoin("bnb", sdk.NewInt(12))),
 | 
										Amount:              sdk.NewCoins(sdk.NewCoin("bnb", sdkmath.NewInt(12))),
 | 
				
			||||||
					RandomNumberHash:    bytes.HexBytes{},
 | 
										RandomNumberHash:    bytes.HexBytes{},
 | 
				
			||||||
					ExpireHeight:        tc.oldSwap.ExpireHeight,
 | 
										ExpireHeight:        tc.oldSwap.ExpireHeight,
 | 
				
			||||||
					Timestamp:           1110,
 | 
										Timestamp:           1110,
 | 
				
			||||||
@ -147,7 +148,7 @@ func (s *migrateTestSuite) TestMigrate_Swaps() {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			expectedSwaps := types.AtomicSwaps{
 | 
								expectedSwaps := types.AtomicSwaps{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Amount:              sdk.NewCoins(sdk.NewCoin("bnb", sdk.NewInt(12))),
 | 
										Amount:              sdk.NewCoins(sdk.NewCoin("bnb", sdkmath.NewInt(12))),
 | 
				
			||||||
					RandomNumberHash:    bytes.HexBytes{},
 | 
										RandomNumberHash:    bytes.HexBytes{},
 | 
				
			||||||
					ExpireHeight:        tc.newSwap.ExpireHeight,
 | 
										ExpireHeight:        tc.newSwap.ExpireHeight,
 | 
				
			||||||
					Timestamp:           1110,
 | 
										Timestamp:           1110,
 | 
				
			||||||
 | 
				
			|||||||
@ -33,29 +33,29 @@ func GenRandBnbDeputy(r *rand.Rand) simulation.Account {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GenRandFixedFee randomized FixedFee in range [1, 10000]
 | 
					// GenRandFixedFee randomized FixedFee in range [1, 10000]
 | 
				
			||||||
func GenRandFixedFee(r *rand.Rand) sdk.Int {
 | 
					func GenRandFixedFee(r *rand.Rand) sdkmath.Int {
 | 
				
			||||||
	min := int(1)
 | 
						min := int(1)
 | 
				
			||||||
	max := types.DefaultBnbDeputyFixedFee.Int64()
 | 
						max := types.DefaultBnbDeputyFixedFee.Int64()
 | 
				
			||||||
	return sdk.NewInt(int64(r.Intn(int(max)-min) + min))
 | 
						return sdkmath.NewInt(int64(r.Intn(int(max)-min) + min))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GenMinSwapAmount randomized MinAmount in range [1, 1000]
 | 
					// GenMinSwapAmount randomized MinAmount in range [1, 1000]
 | 
				
			||||||
func GenMinSwapAmount(r *rand.Rand) sdk.Int {
 | 
					func GenMinSwapAmount(r *rand.Rand) sdkmath.Int {
 | 
				
			||||||
	return sdk.OneInt().Add(simulation.RandomAmount(r, sdk.NewInt(int64(MinSwapAmountLimit))))
 | 
						return sdk.OneInt().Add(simulation.RandomAmount(r, sdkmath.NewInt(int64(MinSwapAmountLimit))))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GenMaxSwapAmount randomized MaxAmount
 | 
					// GenMaxSwapAmount randomized MaxAmount
 | 
				
			||||||
func GenMaxSwapAmount(r *rand.Rand, minAmount sdk.Int, supplyMax sdk.Int) sdk.Int {
 | 
					func GenMaxSwapAmount(r *rand.Rand, minAmount sdkmath.Int, supplyMax sdkmath.Int) sdkmath.Int {
 | 
				
			||||||
	min := minAmount.Int64()
 | 
						min := minAmount.Int64()
 | 
				
			||||||
	max := supplyMax.Quo(sdk.NewInt(100)).Int64()
 | 
						max := supplyMax.Quo(sdkmath.NewInt(100)).Int64()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return sdk.NewInt((int64(r.Intn(int(max-min))) + min))
 | 
						return sdkmath.NewInt((int64(r.Intn(int(max-min))) + min))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GenSupplyLimit generates a random SupplyLimit
 | 
					// GenSupplyLimit generates a random SupplyLimit
 | 
				
			||||||
func GenSupplyLimit(r *rand.Rand, max int) sdk.Int {
 | 
					func GenSupplyLimit(r *rand.Rand, max int) sdkmath.Int {
 | 
				
			||||||
	max = simulation.RandIntBetween(r, MinSupplyLimit, max)
 | 
						max = simulation.RandIntBetween(r, MinSupplyLimit, max)
 | 
				
			||||||
	return sdk.NewInt(int64(max))
 | 
						return sdkmath.NewInt(int64(max))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GenSupplyLimit generates a random SupplyLimit
 | 
					// GenSupplyLimit generates a random SupplyLimit
 | 
				
			||||||
@ -92,7 +92,7 @@ func GenSupportedAssets(r *rand.Rand) types.AssetParams {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func genSupportedAsset(r *rand.Rand, denom string) types.AssetParam {
 | 
					func genSupportedAsset(r *rand.Rand, denom string) types.AssetParam {
 | 
				
			||||||
	coinID, _ := simulation.RandPositiveInt(r, sdk.NewInt(100000))
 | 
						coinID, _ := simulation.RandPositiveInt(r, sdkmath.NewInt(100000))
 | 
				
			||||||
	limit := GenSupplyLimit(r, MaxSupplyLimit)
 | 
						limit := GenSupplyLimit(r, MaxSupplyLimit)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minSwapAmount := GenMinSwapAmount(r)
 | 
						minSwapAmount := GenMinSwapAmount(r)
 | 
				
			||||||
@ -101,9 +101,9 @@ func genSupportedAsset(r *rand.Rand, denom string) types.AssetParam {
 | 
				
			|||||||
	timeBasedLimit := sdk.ZeroInt()
 | 
						timeBasedLimit := sdk.ZeroInt()
 | 
				
			||||||
	if timeLimited {
 | 
						if timeLimited {
 | 
				
			||||||
		// set time-based limit to between 10 and 25% of the total limit
 | 
							// set time-based limit to between 10 and 25% of the total limit
 | 
				
			||||||
		min := int(limit.Quo(sdk.NewInt(10)).Int64())
 | 
							min := int(limit.Quo(sdkmath.NewInt(10)).Int64())
 | 
				
			||||||
		max := int(limit.Quo(sdk.NewInt(4)).Int64())
 | 
							max := int(limit.Quo(sdkmath.NewInt(4)).Int64())
 | 
				
			||||||
		timeBasedLimit = sdk.NewInt(int64(simulation.RandIntBetween(r, min, max)))
 | 
							timeBasedLimit = sdkmath.NewInt(int64(simulation.RandIntBetween(r, min, max)))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return types.AssetParam{
 | 
						return types.AssetParam{
 | 
				
			||||||
		Denom:  denom,
 | 
							Denom:  denom,
 | 
				
			||||||
 | 
				
			|||||||
@ -138,7 +138,7 @@ func SimulateMsgCreateAtomicSwap(ak types.AccountKeeper, k keeper.Keeper) simula
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			// the maximum amount for incoming swaps in limited by the asset's incoming supply + current supply (rate-limited if applicable)  + swap amount being less than the supply limit
 | 
								// the maximum amount for incoming swaps in limited by the asset's incoming supply + current supply (rate-limited if applicable)  + swap amount being less than the supply limit
 | 
				
			||||||
			var currentRemainingSupply sdk.Int
 | 
								var currentRemainingSupply sdkmath.Int
 | 
				
			||||||
			if asset.SupplyLimit.TimeLimited {
 | 
								if asset.SupplyLimit.TimeLimited {
 | 
				
			||||||
				currentRemainingSupply = asset.SupplyLimit.Limit.Sub(assetSupply.IncomingSupply.Amount).Sub(assetSupply.TimeLimitedCurrentSupply.Amount)
 | 
									currentRemainingSupply = asset.SupplyLimit.Limit.Sub(assetSupply.IncomingSupply.Amount).Sub(assetSupply.TimeLimitedCurrentSupply.Amount)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
@ -155,7 +155,7 @@ func SimulateMsgCreateAtomicSwap(ak types.AccountKeeper, k keeper.Keeper) simula
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Get an amount of coins between 0.1 and 2% of total coins
 | 
							// Get an amount of coins between 0.1 and 2% of total coins
 | 
				
			||||||
		amount := maximumAmount.Quo(sdk.NewInt(int64(simulation.RandIntBetween(r, 50, 1000))))
 | 
							amount := maximumAmount.Quo(sdkmath.NewInt(int64(simulation.RandIntBetween(r, 50, 1000))))
 | 
				
			||||||
		minAmountPlusFee := asset.MinSwapAmount.Add(asset.FixedFee)
 | 
							minAmountPlusFee := asset.MinSwapAmount.Add(asset.FixedFee)
 | 
				
			||||||
		if amount.LTE(minAmountPlusFee) {
 | 
							if amount.LTE(minAmountPlusFee) {
 | 
				
			||||||
			return simulation.NewOperationMsgBasic(types.ModuleName, fmt.Sprintf("no-operation (account funds exhausted for asset %s)", asset.Denom), "", false, nil), nil, nil
 | 
								return simulation.NewOperationMsgBasic(types.ModuleName, fmt.Sprintf("no-operation (account funds exhausted for asset %s)", asset.Denom), "", false, nil), nil, nil
 | 
				
			||||||
 | 
				
			|||||||
@ -12,9 +12,9 @@ order: 2
 | 
				
			|||||||
// Params governance parameters for bep3 module
 | 
					// Params governance parameters for bep3 module
 | 
				
			||||||
type Params struct {
 | 
					type Params struct {
 | 
				
			||||||
	BnbDeputyAddress  sdk.AccAddress `json:"bnb_deputy_address" yaml:"bnb_deputy_address"`     // Bnbchain deputy address
 | 
						BnbDeputyAddress  sdk.AccAddress `json:"bnb_deputy_address" yaml:"bnb_deputy_address"`     // Bnbchain deputy address
 | 
				
			||||||
	BnbDeputyFixedFee sdk.Int        `json:"bnb_deputy_fixed_fee" yaml:"bnb_deputy_fixed_fee"` // Deputy fixed fee in BNB
 | 
						BnbDeputyFixedFee sdkmath.Int        `json:"bnb_deputy_fixed_fee" yaml:"bnb_deputy_fixed_fee"` // Deputy fixed fee in BNB
 | 
				
			||||||
	MinAmount         sdk.Int        `json:"min_amount" yaml:"min_amount"`                     // Minimum swap amount
 | 
						MinAmount         sdkmath.Int        `json:"min_amount" yaml:"min_amount"`                     // Minimum swap amount
 | 
				
			||||||
	MaxAmount         sdk.Int        `json:"max_amount" yaml:"max_amount"`                     // Maximum swap amount
 | 
						MaxAmount         sdkmath.Int        `json:"max_amount" yaml:"max_amount"`                     // Maximum swap amount
 | 
				
			||||||
	MinBlockLock      uint64         `json:"min_block_lock" yaml:"min_block_lock"`             // Minimum swap block lock
 | 
						MinBlockLock      uint64         `json:"min_block_lock" yaml:"min_block_lock"`             // Minimum swap block lock
 | 
				
			||||||
	MaxBlockLock      uint64         `json:"max_block_lock" yaml:"max_block_lock"`             // Maximum swap block lock
 | 
						MaxBlockLock      uint64         `json:"max_block_lock" yaml:"max_block_lock"`             // Maximum swap block lock
 | 
				
			||||||
	SupportedAssets   AssetParams    `json:"supported_assets" yaml:"supported_assets"`         // Supported assets
 | 
						SupportedAssets   AssetParams    `json:"supported_assets" yaml:"supported_assets"`         // Supported assets
 | 
				
			||||||
@ -24,7 +24,7 @@ type Params struct {
 | 
				
			|||||||
type AssetParam struct {
 | 
					type AssetParam struct {
 | 
				
			||||||
	Denom  string  `json:"denom" yaml:"denom"`     // name of the asset
 | 
						Denom  string  `json:"denom" yaml:"denom"`     // name of the asset
 | 
				
			||||||
	CoinID int     `json:"coin_id" yaml:"coin_id"` // internationally recognized coin ID
 | 
						CoinID int     `json:"coin_id" yaml:"coin_id"` // internationally recognized coin ID
 | 
				
			||||||
	Limit  sdk.Int `json:"limit" yaml:"limit"`     // asset supply limit
 | 
						Limit  sdkmath.Int `json:"limit" yaml:"limit"`     // asset supply limit
 | 
				
			||||||
	Active bool    `json:"active" yaml:"active"`   // denotes if asset is active or paused
 | 
						Active bool    `json:"active" yaml:"active"`   // denotes if asset is active or paused
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
				
			|||||||
@ -6,21 +6,21 @@ order: 5
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
The bep3 module contains the following parameters:
 | 
					The bep3 module contains the following parameters:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| Key               | Type           | Example                                       | Description                   |
 | 
					| Key               | Type           | Example                                       | Description                |
 | 
				
			||||||
|-------------------|----------------|-----------------------------------------------|-------------------------------|
 | 
					| ----------------- | -------------- | --------------------------------------------- | -------------------------- |
 | 
				
			||||||
| BnbDeputyAddress  | sdk.AccAddress | "kava1r4v2zdhdalfj2ydazallqvrus9fkphmglhn6u6" | deputy's Kava address         |
 | 
					| BnbDeputyAddress  | sdk.AccAddress | "kava1r4v2zdhdalfj2ydazallqvrus9fkphmglhn6u6" | deputy's Kava address      |
 | 
				
			||||||
| BnbDeputyFixedFee | sdk.Int        | sdk.NewInt(1000)                              | deputy's fixed bnb fee        |
 | 
					| BnbDeputyFixedFee | sdkmath.Int    | sdkmath.NewInt(1000)                          | deputy's fixed bnb fee     |
 | 
				
			||||||
| MinAmount         | sdk.Int        | sdk.NewInt(0)                                 | minimum swap amount           |
 | 
					| MinAmount         | sdkmath.Int    | sdkmath.NewInt(0)                             | minimum swap amount        |
 | 
				
			||||||
| MaxAmount         | sdk.Int        | sdk.NewInt(1000000000000)                     | maximum swap amount           |
 | 
					| MaxAmount         | sdkmath.Int    | sdkmath.NewInt(1000000000000)                 | maximum swap amount        |
 | 
				
			||||||
| MinBlockLock      | uint64         | 220                                           | minimum swap expire height    |
 | 
					| MinBlockLock      | uint64         | 220                                           | minimum swap expire height |
 | 
				
			||||||
| MaxBlockLock      | uint64         | 270                                           | maximum swap expire height    |
 | 
					| MaxBlockLock      | uint64         | 270                                           | maximum swap expire height |
 | 
				
			||||||
| SupportedAssets   | AssetParams    | []AssetParam                                  | array of supported assets     |
 | 
					| SupportedAssets   | AssetParams    | []AssetParam                                  | array of supported assets  |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Each AssetParam has the following parameters:
 | 
					Each AssetParam has the following parameters:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| Key               | Type           | Example                                       | Description                   |
 | 
					| Key               | Type        | Example             | Description                   |
 | 
				
			||||||
|-------------------|----------------|-----------------------------------------------|-------------------------------|
 | 
					| ----------------- | ----------- | ------------------- | ----------------------------- |
 | 
				
			||||||
| AssetParam.Denom  | string         | "bnb"                                         | asset's name                  |
 | 
					| AssetParam.Denom  | string      | "bnb"               | asset's name                  |
 | 
				
			||||||
| AssetParam.CoinID | int64          | 714                                           | asset's international coin ID |
 | 
					| AssetParam.CoinID | int64       | 714                 | asset's international coin ID |
 | 
				
			||||||
| AssetParam.Limit  | sdk.Int        | sdk.NewInt(100)                               | asset's supply limit          |
 | 
					| AssetParam.Limit  | sdkmath.Int | sdkmath.NewInt(100) | asset's supply limit          |
 | 
				
			||||||
| AssetParam.Active | boolean        | true                                          | asset's state: live or paused |
 | 
					| AssetParam.Active | boolean     | true                | asset's state: live or paused |
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package types_test
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tmtime "github.com/tendermint/tendermint/types/time"
 | 
						tmtime "github.com/tendermint/tendermint/types/time"
 | 
				
			||||||
@ -10,7 +11,7 @@ import (
 | 
				
			|||||||
	"github.com/kava-labs/kava/x/bep3/types"
 | 
						"github.com/kava-labs/kava/x/bep3/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func i(in int64) sdk.Int                    { return sdk.NewInt(in) }
 | 
					func i(in int64) sdkmath.Int                { return sdkmath.NewInt(in) }
 | 
				
			||||||
func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
					func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
				
			||||||
func cs(coins ...sdk.Coin) sdk.Coins        { return sdk.NewCoins(coins...) }
 | 
					func cs(coins ...sdk.Coin) sdk.Coins        { return sdk.NewCoins(coins...) }
 | 
				
			||||||
func ts(minOffset int) int64                { return tmtime.Now().Add(time.Duration(minOffset) * time.Minute).Unix() }
 | 
					func ts(minOffset int) int64                { return tmtime.Now().Add(time.Duration(minOffset) * time.Minute).Unix() }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,48 +1,46 @@
 | 
				
			|||||||
package types
 | 
					package types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DONTCOVER
 | 
					// DONTCOVER
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	// ErrInvalidTimestamp error for when an timestamp is outside of bounds. Assumes block time of 10 seconds.
 | 
						// ErrInvalidTimestamp error for when an timestamp is outside of bounds. Assumes block time of 10 seconds.
 | 
				
			||||||
	ErrInvalidTimestamp = sdkerrors.Register(ModuleName, 2, "timestamp can neither be 15 minutes ahead of the current time, nor 30 minutes later")
 | 
						ErrInvalidTimestamp = errorsmod.Register(ModuleName, 2, "timestamp can neither be 15 minutes ahead of the current time, nor 30 minutes later")
 | 
				
			||||||
	// ErrInvalidHeightSpan error for when a proposed height span is outside of lock time range
 | 
						// ErrInvalidHeightSpan error for when a proposed height span is outside of lock time range
 | 
				
			||||||
	ErrInvalidHeightSpan = sdkerrors.Register(ModuleName, 3, "height span is outside acceptable range")
 | 
						ErrInvalidHeightSpan = errorsmod.Register(ModuleName, 3, "height span is outside acceptable range")
 | 
				
			||||||
	// ErrInsufficientAmount error for when a swap's amount cannot cover the deputy's fixed fee
 | 
						// ErrInsufficientAmount error for when a swap's amount cannot cover the deputy's fixed fee
 | 
				
			||||||
	ErrInsufficientAmount = sdkerrors.Register(ModuleName, 4, "amount cannot cover the deputy fixed fee")
 | 
						ErrInsufficientAmount = errorsmod.Register(ModuleName, 4, "amount cannot cover the deputy fixed fee")
 | 
				
			||||||
	// ErrAssetNotSupported error for when an asset is not supported
 | 
						// ErrAssetNotSupported error for when an asset is not supported
 | 
				
			||||||
	ErrAssetNotSupported = sdkerrors.Register(ModuleName, 5, "asset not found")
 | 
						ErrAssetNotSupported = errorsmod.Register(ModuleName, 5, "asset not found")
 | 
				
			||||||
	// ErrAssetNotActive error for when an asset is currently inactive
 | 
						// ErrAssetNotActive error for when an asset is currently inactive
 | 
				
			||||||
	ErrAssetNotActive = sdkerrors.Register(ModuleName, 6, "asset is currently inactive")
 | 
						ErrAssetNotActive = errorsmod.Register(ModuleName, 6, "asset is currently inactive")
 | 
				
			||||||
	// ErrAssetSupplyNotFound error for when an asset's supply is not found in the store
 | 
						// ErrAssetSupplyNotFound error for when an asset's supply is not found in the store
 | 
				
			||||||
	ErrAssetSupplyNotFound = sdkerrors.Register(ModuleName, 7, "asset supply not found in store")
 | 
						ErrAssetSupplyNotFound = errorsmod.Register(ModuleName, 7, "asset supply not found in store")
 | 
				
			||||||
	// ErrExceedsSupplyLimit error for when the proposed supply increase would put the supply above limit
 | 
						// ErrExceedsSupplyLimit error for when the proposed supply increase would put the supply above limit
 | 
				
			||||||
	ErrExceedsSupplyLimit = sdkerrors.Register(ModuleName, 8, "asset supply over limit")
 | 
						ErrExceedsSupplyLimit = errorsmod.Register(ModuleName, 8, "asset supply over limit")
 | 
				
			||||||
	// ErrExceedsAvailableSupply error for when the proposed outgoing amount exceeds the total available supply
 | 
						// ErrExceedsAvailableSupply error for when the proposed outgoing amount exceeds the total available supply
 | 
				
			||||||
	ErrExceedsAvailableSupply = sdkerrors.Register(ModuleName, 9, "outgoing swap exceeds total available supply")
 | 
						ErrExceedsAvailableSupply = errorsmod.Register(ModuleName, 9, "outgoing swap exceeds total available supply")
 | 
				
			||||||
	// ErrInvalidCurrentSupply error for when the proposed decrease would result in a negative current supplyx
 | 
						// ErrInvalidCurrentSupply error for when the proposed decrease would result in a negative current supplyx
 | 
				
			||||||
	ErrInvalidCurrentSupply = sdkerrors.Register(ModuleName, 10, "supply decrease puts current asset supply below 0")
 | 
						ErrInvalidCurrentSupply = errorsmod.Register(ModuleName, 10, "supply decrease puts current asset supply below 0")
 | 
				
			||||||
	// ErrInvalidIncomingSupply error for when the proposed decrease would result in a negative incoming supply
 | 
						// ErrInvalidIncomingSupply error for when the proposed decrease would result in a negative incoming supply
 | 
				
			||||||
	ErrInvalidIncomingSupply = sdkerrors.Register(ModuleName, 11, "supply decrease puts incoming asset supply below 0")
 | 
						ErrInvalidIncomingSupply = errorsmod.Register(ModuleName, 11, "supply decrease puts incoming asset supply below 0")
 | 
				
			||||||
	// ErrInvalidOutgoingSupply error for when the proposed decrease would result in a negative outgoing supply
 | 
						// ErrInvalidOutgoingSupply error for when the proposed decrease would result in a negative outgoing supply
 | 
				
			||||||
	ErrInvalidOutgoingSupply = sdkerrors.Register(ModuleName, 12, "supply decrease puts outgoing asset supply below 0")
 | 
						ErrInvalidOutgoingSupply = errorsmod.Register(ModuleName, 12, "supply decrease puts outgoing asset supply below 0")
 | 
				
			||||||
	// ErrInvalidClaimSecret error when a submitted secret doesn't match an AtomicSwap's swapID
 | 
						// ErrInvalidClaimSecret error when a submitted secret doesn't match an AtomicSwap's swapID
 | 
				
			||||||
	ErrInvalidClaimSecret = sdkerrors.Register(ModuleName, 13, "hashed claim attempt does not match")
 | 
						ErrInvalidClaimSecret = errorsmod.Register(ModuleName, 13, "hashed claim attempt does not match")
 | 
				
			||||||
	// ErrAtomicSwapAlreadyExists error for when an AtomicSwap with this swapID already exists
 | 
						// ErrAtomicSwapAlreadyExists error for when an AtomicSwap with this swapID already exists
 | 
				
			||||||
	ErrAtomicSwapAlreadyExists = sdkerrors.Register(ModuleName, 14, "atomic swap already exists")
 | 
						ErrAtomicSwapAlreadyExists = errorsmod.Register(ModuleName, 14, "atomic swap already exists")
 | 
				
			||||||
	// ErrAtomicSwapNotFound error for when an atomic swap is not found
 | 
						// ErrAtomicSwapNotFound error for when an atomic swap is not found
 | 
				
			||||||
	ErrAtomicSwapNotFound = sdkerrors.Register(ModuleName, 15, "atomic swap not found")
 | 
						ErrAtomicSwapNotFound = errorsmod.Register(ModuleName, 15, "atomic swap not found")
 | 
				
			||||||
	// ErrSwapNotRefundable error for when an AtomicSwap has not expired and cannot be refunded
 | 
						// ErrSwapNotRefundable error for when an AtomicSwap has not expired and cannot be refunded
 | 
				
			||||||
	ErrSwapNotRefundable = sdkerrors.Register(ModuleName, 16, "atomic swap is still active and cannot be refunded")
 | 
						ErrSwapNotRefundable = errorsmod.Register(ModuleName, 16, "atomic swap is still active and cannot be refunded")
 | 
				
			||||||
	// ErrSwapNotClaimable error for when an atomic swap is not open and cannot be claimed
 | 
						// ErrSwapNotClaimable error for when an atomic swap is not open and cannot be claimed
 | 
				
			||||||
	ErrSwapNotClaimable = sdkerrors.Register(ModuleName, 17, "atomic swap is not claimable")
 | 
						ErrSwapNotClaimable = errorsmod.Register(ModuleName, 17, "atomic swap is not claimable")
 | 
				
			||||||
	// ErrInvalidAmount error for when a swap's amount is outside acceptable range
 | 
						// ErrInvalidAmount error for when a swap's amount is outside acceptable range
 | 
				
			||||||
	ErrInvalidAmount = sdkerrors.Register(ModuleName, 18, "amount is outside acceptable range")
 | 
						ErrInvalidAmount = errorsmod.Register(ModuleName, 18, "amount is outside acceptable range")
 | 
				
			||||||
	// ErrInvalidSwapAccount error for when a swap involves an invalid account
 | 
						// ErrInvalidSwapAccount error for when a swap involves an invalid account
 | 
				
			||||||
	ErrInvalidSwapAccount = sdkerrors.Register(ModuleName, 19, "atomic swap has invalid account")
 | 
						ErrInvalidSwapAccount = errorsmod.Register(ModuleName, 19, "atomic swap has invalid account")
 | 
				
			||||||
	// ErrExceedsTimeBasedSupplyLimit error for when the proposed supply increase would put the supply above limit for the current time period
 | 
						// ErrExceedsTimeBasedSupplyLimit error for when the proposed supply increase would put the supply above limit for the current time period
 | 
				
			||||||
	ErrExceedsTimeBasedSupplyLimit = sdkerrors.Register(ModuleName, 20, "asset supply over limit for current time period")
 | 
						ErrExceedsTimeBasedSupplyLimit = errorsmod.Register(ModuleName, 20, "asset supply over limit for current time period")
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/app"
 | 
						"github.com/kava-labs/kava/app"
 | 
				
			||||||
@ -82,7 +83,7 @@ func (suite *GenesisTestSuite) TestValidate() {
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			"invalid swap",
 | 
								"invalid swap",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				swaps:             types.AtomicSwaps{{Amount: sdk.Coins{sdk.Coin{Denom: "Invalid Denom", Amount: sdk.NewInt(-1)}}}},
 | 
									swaps:             types.AtomicSwaps{{Amount: sdk.Coins{sdk.Coin{Denom: "Invalid Denom", Amount: sdkmath.NewInt(-1)}}}},
 | 
				
			||||||
				previousBlockTime: types.DefaultPreviousBlockTime,
 | 
									previousBlockTime: types.DefaultPreviousBlockTime,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			false,
 | 
								false,
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,7 @@ import (
 | 
				
			|||||||
	"github.com/tendermint/tendermint/crypto"
 | 
						"github.com/tendermint/tendermint/crypto"
 | 
				
			||||||
	tmbytes "github.com/tendermint/tendermint/libs/bytes"
 | 
						tmbytes "github.com/tendermint/tendermint/libs/bytes"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -83,17 +84,17 @@ func (msg MsgCreateAtomicSwap) GetSigners() []sdk.AccAddress {
 | 
				
			|||||||
func (msg MsgCreateAtomicSwap) ValidateBasic() error {
 | 
					func (msg MsgCreateAtomicSwap) ValidateBasic() error {
 | 
				
			||||||
	from, err := sdk.AccAddressFromBech32(msg.From)
 | 
						from, err := sdk.AccAddressFromBech32(msg.From)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	to, err := sdk.AccAddressFromBech32(msg.To)
 | 
						to, err := sdk.AccAddressFromBech32(msg.To)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if from.Empty() {
 | 
						if from.Empty() {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "sender address cannot be empty")
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "sender address cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if to.Empty() {
 | 
						if to.Empty() {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "recipient address cannot be empty")
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "recipient address cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if strings.TrimSpace(msg.RecipientOtherChain) == "" {
 | 
						if strings.TrimSpace(msg.RecipientOtherChain) == "" {
 | 
				
			||||||
		return errors.New("missing recipient address on other chain")
 | 
							return errors.New("missing recipient address on other chain")
 | 
				
			||||||
@ -115,10 +116,10 @@ func (msg MsgCreateAtomicSwap) ValidateBasic() error {
 | 
				
			|||||||
		return errors.New("timestamp must be positive")
 | 
							return errors.New("timestamp must be positive")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if len(msg.Amount) == 0 {
 | 
						if len(msg.Amount) == 0 {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, "amount cannot be empty")
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, "amount cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !msg.Amount.IsValid() {
 | 
						if !msg.Amount.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String())
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if msg.HeightSpan <= 0 {
 | 
						if msg.HeightSpan <= 0 {
 | 
				
			||||||
		return errors.New("height span must be positive")
 | 
							return errors.New("height span must be positive")
 | 
				
			||||||
@ -170,10 +171,10 @@ func (msg MsgClaimAtomicSwap) GetSigners() []sdk.AccAddress {
 | 
				
			|||||||
func (msg MsgClaimAtomicSwap) ValidateBasic() error {
 | 
					func (msg MsgClaimAtomicSwap) ValidateBasic() error {
 | 
				
			||||||
	from, err := sdk.AccAddressFromBech32(msg.From)
 | 
						from, err := sdk.AccAddressFromBech32(msg.From)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if from.Empty() {
 | 
						if from.Empty() {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "sender address cannot be empty")
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "sender address cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	swapID, err := hex.DecodeString(msg.SwapID)
 | 
						swapID, err := hex.DecodeString(msg.SwapID)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -235,10 +236,10 @@ func (msg MsgRefundAtomicSwap) GetSigners() []sdk.AccAddress {
 | 
				
			|||||||
func (msg MsgRefundAtomicSwap) ValidateBasic() error {
 | 
					func (msg MsgRefundAtomicSwap) ValidateBasic() error {
 | 
				
			||||||
	from, err := sdk.AccAddressFromBech32(msg.From)
 | 
						from, err := sdk.AccAddressFromBech32(msg.From)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if from.Empty() {
 | 
						if from.Empty() {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "sender address cannot be empty")
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "sender address cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	swapID, err := hex.DecodeString(msg.SwapID)
 | 
						swapID, err := hex.DecodeString(msg.SwapID)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
 | 
						paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -18,12 +19,12 @@ const (
 | 
				
			|||||||
var (
 | 
					var (
 | 
				
			||||||
	KeyAssetParams = []byte("AssetParams")
 | 
						KeyAssetParams = []byte("AssetParams")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DefaultBnbDeputyFixedFee sdk.Int = sdk.NewInt(1000) // 0.00001 BNB
 | 
						DefaultBnbDeputyFixedFee sdkmath.Int = sdkmath.NewInt(1000) // 0.00001 BNB
 | 
				
			||||||
	DefaultMinAmount         sdk.Int = sdk.ZeroInt()
 | 
						DefaultMinAmount         sdkmath.Int = sdk.ZeroInt()
 | 
				
			||||||
	DefaultMaxAmount         sdk.Int = sdk.NewInt(1000000000000) // 10,000 BNB
 | 
						DefaultMaxAmount         sdkmath.Int = sdkmath.NewInt(1000000000000) // 10,000 BNB
 | 
				
			||||||
	DefaultMinBlockLock      uint64  = 220
 | 
						DefaultMinBlockLock      uint64      = 220
 | 
				
			||||||
	DefaultMaxBlockLock      uint64  = 270
 | 
						DefaultMaxBlockLock      uint64      = 270
 | 
				
			||||||
	DefaultPreviousBlockTime         = tmtime.Canonical(time.Unix(1, 0))
 | 
						DefaultPreviousBlockTime             = tmtime.Canonical(time.Unix(1, 0))
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewParams returns a new params object
 | 
					// NewParams returns a new params object
 | 
				
			||||||
@ -41,8 +42,8 @@ func DefaultParams() Params {
 | 
				
			|||||||
// NewAssetParam returns a new AssetParam
 | 
					// NewAssetParam returns a new AssetParam
 | 
				
			||||||
func NewAssetParam(
 | 
					func NewAssetParam(
 | 
				
			||||||
	denom string, coinID int64, limit SupplyLimit, active bool,
 | 
						denom string, coinID int64, limit SupplyLimit, active bool,
 | 
				
			||||||
	deputyAddr sdk.AccAddress, fixedFee sdk.Int, minSwapAmount sdk.Int,
 | 
						deputyAddr sdk.AccAddress, fixedFee sdkmath.Int, minSwapAmount sdkmath.Int,
 | 
				
			||||||
	maxSwapAmount sdk.Int, minBlockLock uint64, maxBlockLock uint64,
 | 
						maxSwapAmount sdkmath.Int, minBlockLock uint64, maxBlockLock uint64,
 | 
				
			||||||
) AssetParam {
 | 
					) AssetParam {
 | 
				
			||||||
	return AssetParam{
 | 
						return AssetParam{
 | 
				
			||||||
		Denom:         denom,
 | 
							Denom:         denom,
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/app"
 | 
						"github.com/kava-labs/kava/app"
 | 
				
			||||||
@ -24,15 +25,15 @@ func (suite *ParamsTestSuite) SetupTest() {
 | 
				
			|||||||
	_, addrs := app.GeneratePrivKeyAddressPairs(1)
 | 
						_, addrs := app.GeneratePrivKeyAddressPairs(1)
 | 
				
			||||||
	suite.addr = addrs[0]
 | 
						suite.addr = addrs[0]
 | 
				
			||||||
	supply1 := types.SupplyLimit{
 | 
						supply1 := types.SupplyLimit{
 | 
				
			||||||
		Limit:          sdk.NewInt(10000000000000),
 | 
							Limit:          sdkmath.NewInt(10000000000000),
 | 
				
			||||||
		TimeLimited:    false,
 | 
							TimeLimited:    false,
 | 
				
			||||||
		TimeBasedLimit: sdk.ZeroInt(),
 | 
							TimeBasedLimit: sdk.ZeroInt(),
 | 
				
			||||||
		TimePeriod:     time.Hour,
 | 
							TimePeriod:     time.Hour,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	supply2 := types.SupplyLimit{
 | 
						supply2 := types.SupplyLimit{
 | 
				
			||||||
		Limit:          sdk.NewInt(10000000000000),
 | 
							Limit:          sdkmath.NewInt(10000000000000),
 | 
				
			||||||
		TimeLimited:    true,
 | 
							TimeLimited:    true,
 | 
				
			||||||
		TimeBasedLimit: sdk.NewInt(100000000000),
 | 
							TimeBasedLimit: sdkmath.NewInt(100000000000),
 | 
				
			||||||
		TimePeriod:     time.Hour * 24,
 | 
							TimePeriod:     time.Hour * 24,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	suite.supply = append(suite.supply, supply1, supply2)
 | 
						suite.supply = append(suite.supply, supply1, supply2)
 | 
				
			||||||
@ -62,7 +63,7 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", 714, suite.supply[0], true,
 | 
										"bnb", 714, suite.supply[0], true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
					types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
										types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  true,
 | 
								expectPass:  true,
 | 
				
			||||||
@ -73,7 +74,7 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", 714, suite.supply[1], true,
 | 
										"bnb", 714, suite.supply[1], true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
					types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
										types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  true,
 | 
								expectPass:  true,
 | 
				
			||||||
@ -85,11 +86,11 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
				assetParams: types.AssetParams{
 | 
									assetParams: types.AssetParams{
 | 
				
			||||||
					types.NewAssetParam(
 | 
										types.NewAssetParam(
 | 
				
			||||||
						"bnb", 714, suite.supply[0], true,
 | 
											"bnb", 714, suite.supply[0], true,
 | 
				
			||||||
						suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
											suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
						types.DefaultMinBlockLock, types.DefaultMaxBlockLock),
 | 
											types.DefaultMinBlockLock, types.DefaultMaxBlockLock),
 | 
				
			||||||
					types.NewAssetParam(
 | 
										types.NewAssetParam(
 | 
				
			||||||
						"btcb", 0, suite.supply[1], true,
 | 
											"btcb", 0, suite.supply[1], true,
 | 
				
			||||||
						suite.addr, sdk.NewInt(1000), sdk.NewInt(10000000), sdk.NewInt(100000000000),
 | 
											suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(10000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
						types.DefaultMinBlockLock, types.DefaultMaxBlockLock),
 | 
											types.DefaultMinBlockLock, types.DefaultMaxBlockLock),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
@ -101,7 +102,7 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"", 714, suite.supply[0], true,
 | 
										"", 714, suite.supply[0], true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
					types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
										types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  false,
 | 
								expectPass:  false,
 | 
				
			||||||
@ -112,7 +113,7 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", 714, suite.supply[0], true,
 | 
										"bnb", 714, suite.supply[0], true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
					243, 243)},
 | 
										243, 243)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  true,
 | 
								expectPass:  true,
 | 
				
			||||||
@ -123,7 +124,7 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", 714, suite.supply[0], true,
 | 
										"bnb", 714, suite.supply[0], true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
					244, 243)},
 | 
										244, 243)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  false,
 | 
								expectPass:  false,
 | 
				
			||||||
@ -134,7 +135,7 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", 714, suite.supply[0], true,
 | 
										"bnb", 714, suite.supply[0], true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(0), sdk.NewInt(10000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(0), sdkmath.NewInt(10000000000),
 | 
				
			||||||
					types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
										types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  false,
 | 
								expectPass:  false,
 | 
				
			||||||
@ -145,7 +146,7 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", 714, suite.supply[0], true,
 | 
										"bnb", 714, suite.supply[0], true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(10000), sdk.NewInt(0),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(10000), sdkmath.NewInt(0),
 | 
				
			||||||
					types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
										types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  false,
 | 
								expectPass:  false,
 | 
				
			||||||
@ -156,7 +157,7 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", 714, suite.supply[0], true,
 | 
										"bnb", 714, suite.supply[0], true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000000), sdk.NewInt(10000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000000), sdkmath.NewInt(10000000000),
 | 
				
			||||||
					types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
										types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  false,
 | 
								expectPass:  false,
 | 
				
			||||||
@ -167,7 +168,7 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", -714, suite.supply[0], true,
 | 
										"bnb", -714, suite.supply[0], true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
					types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
										types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  false,
 | 
								expectPass:  false,
 | 
				
			||||||
@ -178,8 +179,8 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", 714,
 | 
										"bnb", 714,
 | 
				
			||||||
					types.SupplyLimit{sdk.NewInt(-10000000000000), false, time.Hour, sdk.ZeroInt()}, true,
 | 
										types.SupplyLimit{sdkmath.NewInt(-10000000000000), false, time.Hour, sdk.ZeroInt()}, true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
					types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
										types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  false,
 | 
								expectPass:  false,
 | 
				
			||||||
@ -190,8 +191,8 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", 714,
 | 
										"bnb", 714,
 | 
				
			||||||
					types.SupplyLimit{sdk.NewInt(10000000000000), false, time.Hour, sdk.NewInt(-10000000000000)}, true,
 | 
										types.SupplyLimit{sdkmath.NewInt(10000000000000), false, time.Hour, sdkmath.NewInt(-10000000000000)}, true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
					types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
										types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  false,
 | 
								expectPass:  false,
 | 
				
			||||||
@ -202,9 +203,9 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				assetParams: types.AssetParams{types.NewAssetParam(
 | 
									assetParams: types.AssetParams{types.NewAssetParam(
 | 
				
			||||||
					"bnb", 714,
 | 
										"bnb", 714,
 | 
				
			||||||
					types.SupplyLimit{sdk.NewInt(10000000000000), true, time.Hour, sdk.NewInt(100000000000000)},
 | 
										types.SupplyLimit{sdkmath.NewInt(10000000000000), true, time.Hour, sdkmath.NewInt(100000000000000)},
 | 
				
			||||||
					true,
 | 
										true,
 | 
				
			||||||
					suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
										suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
					types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
										types.DefaultMinBlockLock, types.DefaultMaxBlockLock)},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectPass:  false,
 | 
								expectPass:  false,
 | 
				
			||||||
@ -216,11 +217,11 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
				assetParams: types.AssetParams{
 | 
									assetParams: types.AssetParams{
 | 
				
			||||||
					types.NewAssetParam(
 | 
										types.NewAssetParam(
 | 
				
			||||||
						"bnb", 714, suite.supply[0], true,
 | 
											"bnb", 714, suite.supply[0], true,
 | 
				
			||||||
						suite.addr, sdk.NewInt(1000), sdk.NewInt(100000000), sdk.NewInt(100000000000),
 | 
											suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(100000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
						types.DefaultMinBlockLock, types.DefaultMaxBlockLock),
 | 
											types.DefaultMinBlockLock, types.DefaultMaxBlockLock),
 | 
				
			||||||
					types.NewAssetParam(
 | 
										types.NewAssetParam(
 | 
				
			||||||
						"bnb", 0, suite.supply[0], true,
 | 
											"bnb", 0, suite.supply[0], true,
 | 
				
			||||||
						suite.addr, sdk.NewInt(1000), sdk.NewInt(10000000), sdk.NewInt(100000000000),
 | 
											suite.addr, sdkmath.NewInt(1000), sdkmath.NewInt(10000000), sdkmath.NewInt(100000000000),
 | 
				
			||||||
						types.DefaultMinBlockLock, types.DefaultMaxBlockLock),
 | 
											types.DefaultMinBlockLock, types.DefaultMaxBlockLock),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -22,16 +23,16 @@ func NewAssetSupply(incomingSupply, outgoingSupply, currentSupply, timeLimitedSu
 | 
				
			|||||||
// Validate performs a basic validation of an asset supply fields.
 | 
					// Validate performs a basic validation of an asset supply fields.
 | 
				
			||||||
func (a AssetSupply) Validate() error {
 | 
					func (a AssetSupply) Validate() error {
 | 
				
			||||||
	if !a.IncomingSupply.IsValid() {
 | 
						if !a.IncomingSupply.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "incoming supply %s", a.IncomingSupply)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "incoming supply %s", a.IncomingSupply)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !a.OutgoingSupply.IsValid() {
 | 
						if !a.OutgoingSupply.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "outgoing supply %s", a.OutgoingSupply)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "outgoing supply %s", a.OutgoingSupply)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !a.CurrentSupply.IsValid() {
 | 
						if !a.CurrentSupply.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "current supply %s", a.CurrentSupply)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "current supply %s", a.CurrentSupply)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !a.TimeLimitedCurrentSupply.IsValid() {
 | 
						if !a.TimeLimitedCurrentSupply.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "time-limited current supply %s", a.TimeLimitedCurrentSupply)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "time-limited current supply %s", a.TimeLimitedCurrentSupply)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	denom := a.CurrentSupply.Denom
 | 
						denom := a.CurrentSupply.Denom
 | 
				
			||||||
	if (a.IncomingSupply.Denom != denom) ||
 | 
						if (a.IncomingSupply.Denom != denom) ||
 | 
				
			||||||
 | 
				
			|||||||
@ -4,13 +4,14 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	"github.com/stretchr/testify/require"
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestAssetSupplyValidate(t *testing.T) {
 | 
					func TestAssetSupplyValidate(t *testing.T) {
 | 
				
			||||||
	coin := sdk.NewCoin("kava", sdk.OneInt())
 | 
						coin := sdk.NewCoin("kava", sdk.OneInt())
 | 
				
			||||||
	invalidCoin := sdk.Coin{Denom: "Invalid Denom", Amount: sdk.NewInt(-1)}
 | 
						invalidCoin := sdk.Coin{Denom: "Invalid Denom", Amount: sdkmath.NewInt(-1)}
 | 
				
			||||||
	testCases := []struct {
 | 
						testCases := []struct {
 | 
				
			||||||
		msg     string
 | 
							msg     string
 | 
				
			||||||
		asset   AssetSupply
 | 
							asset   AssetSupply
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	tmbytes "github.com/tendermint/tendermint/libs/bytes"
 | 
						tmbytes "github.com/tendermint/tendermint/libs/bytes"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -61,17 +62,17 @@ func (a AtomicSwap) Validate() error {
 | 
				
			|||||||
		return errors.New("timestamp cannot be 0")
 | 
							return errors.New("timestamp cannot be 0")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if a.Sender.Empty() {
 | 
						if a.Sender.Empty() {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "sender cannot be empty")
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "sender cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if a.Recipient.Empty() {
 | 
						if a.Recipient.Empty() {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "recipient cannot be empty")
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "recipient cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// NOTE: These adresses may not have a bech32 prefix.
 | 
						// NOTE: These adresses may not have a bech32 prefix.
 | 
				
			||||||
	if strings.TrimSpace(a.SenderOtherChain) == "" {
 | 
						if strings.TrimSpace(a.SenderOtherChain) == "" {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "sender other chain cannot be blank")
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "sender other chain cannot be blank")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if strings.TrimSpace(a.RecipientOtherChain) == "" {
 | 
						if strings.TrimSpace(a.RecipientOtherChain) == "" {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "recipient other chain cannot be blank")
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "recipient other chain cannot be blank")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if a.Status == SWAP_STATUS_COMPLETED && a.ClosedBlock == 0 {
 | 
						if a.Status == SWAP_STATUS_COMPLETED && a.ClosedBlock == 0 {
 | 
				
			||||||
		return errors.New("closed block cannot be 0")
 | 
							return errors.New("closed block cannot be 0")
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	tmbytes "github.com/tendermint/tendermint/libs/bytes"
 | 
						tmbytes "github.com/tendermint/tendermint/libs/bytes"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/app"
 | 
						"github.com/kava-labs/kava/app"
 | 
				
			||||||
@ -69,7 +70,7 @@ func (suite *AtomicSwapTestSuite) TestNewAtomicSwap() {
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			"invalid amount",
 | 
								"invalid amount",
 | 
				
			||||||
			types.AtomicSwap{
 | 
								types.AtomicSwap{
 | 
				
			||||||
				Amount: sdk.Coins{sdk.Coin{Denom: "BNB", Amount: sdk.NewInt(10)}},
 | 
									Amount: sdk.Coins{sdk.Coin{Denom: "BNB", Amount: sdkmath.NewInt(10)}},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			false,
 | 
								false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,7 @@ import (
 | 
				
			|||||||
	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
						tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
				
			||||||
	tmtime "github.com/tendermint/tendermint/types/time"
 | 
						tmtime "github.com/tendermint/tendermint/types/time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/app"
 | 
						"github.com/kava-labs/kava/app"
 | 
				
			||||||
@ -119,7 +120,7 @@ func (suite *GenesisTestSuite) TestInvalidGenState() {
 | 
				
			|||||||
				debtDenom:          types.DefaultDebtDenom,
 | 
									debtDenom:          types.DefaultDebtDenom,
 | 
				
			||||||
				govDenom:           types.DefaultGovDenom,
 | 
									govDenom:           types.DefaultGovDenom,
 | 
				
			||||||
				genAccumTimes:      types.DefaultGenesisState().PreviousAccumulationTimes,
 | 
									genAccumTimes:      types.DefaultGenesisState().PreviousAccumulationTimes,
 | 
				
			||||||
				genTotalPrincipals: types.GenesisTotalPrincipals{types.NewGenesisTotalPrincipal("bnb-a", sdk.NewInt(-1))},
 | 
									genTotalPrincipals: types.GenesisTotalPrincipals{types.NewGenesisTotalPrincipal("bnb-a", sdkmath.NewInt(-1))},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			errArgs: errArgs{
 | 
								errArgs: errArgs{
 | 
				
			||||||
				expectPass: false,
 | 
									expectPass: false,
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package cdp_test
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -14,7 +15,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Avoid cluttering test cases with long function names
 | 
					// Avoid cluttering test cases with long function names
 | 
				
			||||||
func i(in int64) sdk.Int                    { return sdk.NewInt(in) }
 | 
					func i(in int64) sdkmath.Int                { return sdkmath.NewInt(in) }
 | 
				
			||||||
func d(str string) sdk.Dec                  { return sdk.MustNewDecFromStr(str) }
 | 
					func d(str string) sdk.Dec                  { return sdk.MustNewDecFromStr(str) }
 | 
				
			||||||
func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
					func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
				
			||||||
func cs(coins ...sdk.Coin) sdk.Coins        { return sdk.NewCoins(coins...) }
 | 
					func cs(coins ...sdk.Coin) sdk.Coins        { return sdk.NewCoins(coins...) }
 | 
				
			||||||
@ -172,10 +173,10 @@ func NewCDPGenStateMulti(cdc codec.JSONCodec) app.GenesisState {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func cdps() (cdps types.CDPs) {
 | 
					func cdps() (cdps types.CDPs) {
 | 
				
			||||||
	_, addrs := app.GeneratePrivKeyAddressPairs(3)
 | 
						_, addrs := app.GeneratePrivKeyAddressPairs(3)
 | 
				
			||||||
	c1 := types.NewCDP(uint64(1), addrs[0], sdk.NewCoin("xrp", sdk.NewInt(100000000)), "xrp-a", sdk.NewCoin("usdx", sdk.NewInt(8000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
						c1 := types.NewCDP(uint64(1), addrs[0], sdk.NewCoin("xrp", sdkmath.NewInt(100000000)), "xrp-a", sdk.NewCoin("usdx", sdkmath.NewInt(8000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
				
			||||||
	c2 := types.NewCDP(uint64(2), addrs[1], sdk.NewCoin("xrp", sdk.NewInt(100000000)), "xrp-a", sdk.NewCoin("usdx", sdk.NewInt(10000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
						c2 := types.NewCDP(uint64(2), addrs[1], sdk.NewCoin("xrp", sdkmath.NewInt(100000000)), "xrp-a", sdk.NewCoin("usdx", sdkmath.NewInt(10000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
				
			||||||
	c3 := types.NewCDP(uint64(3), addrs[1], sdk.NewCoin("btc", sdk.NewInt(1000000000)), "btc-a", sdk.NewCoin("usdx", sdk.NewInt(10000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
						c3 := types.NewCDP(uint64(3), addrs[1], sdk.NewCoin("btc", sdkmath.NewInt(1000000000)), "btc-a", sdk.NewCoin("usdx", sdkmath.NewInt(10000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
				
			||||||
	c4 := types.NewCDP(uint64(4), addrs[2], sdk.NewCoin("xrp", sdk.NewInt(1000000000)), "xrp-a", sdk.NewCoin("usdx", sdk.NewInt(50000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
						c4 := types.NewCDP(uint64(4), addrs[2], sdk.NewCoin("xrp", sdkmath.NewInt(1000000000)), "xrp-a", sdk.NewCoin("usdx", sdkmath.NewInt(50000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
				
			||||||
	cdps = append(cdps, c1, c2, c3, c4)
 | 
						cdps = append(cdps, c1, c2, c3, c4)
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
package keeper
 | 
					package keeper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/cdp/types"
 | 
						"github.com/kava-labs/kava/x/cdp/types"
 | 
				
			||||||
@ -12,7 +13,7 @@ const (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AuctionCollateral creates auctions from the input deposits which attempt to raise the corresponding amount of debt
 | 
					// AuctionCollateral creates auctions from the input deposits which attempt to raise the corresponding amount of debt
 | 
				
			||||||
func (k Keeper) AuctionCollateral(ctx sdk.Context, deposits types.Deposits, collateralType string, debt sdk.Int, bidDenom string) error {
 | 
					func (k Keeper) AuctionCollateral(ctx sdk.Context, deposits types.Deposits, collateralType string, debt sdkmath.Int, bidDenom string) error {
 | 
				
			||||||
	auctionSize := k.getAuctionSize(ctx, collateralType)
 | 
						auctionSize := k.getAuctionSize(ctx, collateralType)
 | 
				
			||||||
	totalCollateral := deposits.SumCollateral()
 | 
						totalCollateral := deposits.SumCollateral()
 | 
				
			||||||
	for _, deposit := range deposits {
 | 
						for _, deposit := range deposits {
 | 
				
			||||||
@ -26,7 +27,7 @@ func (k Keeper) AuctionCollateral(ctx sdk.Context, deposits types.Deposits, coll
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// CreateAuctionsFromDeposit creates auctions from the input deposit
 | 
					// CreateAuctionsFromDeposit creates auctions from the input deposit
 | 
				
			||||||
func (k Keeper) CreateAuctionsFromDeposit(
 | 
					func (k Keeper) CreateAuctionsFromDeposit(
 | 
				
			||||||
	ctx sdk.Context, collateral sdk.Coin, collateralType string, returnAddr sdk.AccAddress, debt, auctionSize sdk.Int,
 | 
						ctx sdk.Context, collateral sdk.Coin, collateralType string, returnAddr sdk.AccAddress, debt, auctionSize sdkmath.Int,
 | 
				
			||||||
	principalDenom string,
 | 
						principalDenom string,
 | 
				
			||||||
) error {
 | 
					) error {
 | 
				
			||||||
	// number of auctions of auctionSize
 | 
						// number of auctions of auctionSize
 | 
				
			||||||
@ -71,7 +72,7 @@ func (k Keeper) CreateAuctionsFromDeposit(
 | 
				
			|||||||
		_, err := k.auctionKeeper.StartCollateralAuction(
 | 
							_, err := k.auctionKeeper.StartCollateralAuction(
 | 
				
			||||||
			ctx, types.LiquidatorMacc, sdk.NewCoin(collateral.Denom, auctionSize),
 | 
								ctx, types.LiquidatorMacc, sdk.NewCoin(collateral.Denom, auctionSize),
 | 
				
			||||||
			sdk.NewCoin(principalDenom, debtAmount.Add(penalty)), []sdk.AccAddress{returnAddr},
 | 
								sdk.NewCoin(principalDenom, debtAmount.Add(penalty)), []sdk.AccAddress{returnAddr},
 | 
				
			||||||
			[]sdk.Int{auctionSize}, sdk.NewCoin(debtDenom, debtAmount),
 | 
								[]sdkmath.Int{auctionSize}, sdk.NewCoin(debtDenom, debtAmount),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
@ -96,7 +97,7 @@ func (k Keeper) CreateAuctionsFromDeposit(
 | 
				
			|||||||
	_, err := k.auctionKeeper.StartCollateralAuction(
 | 
						_, err := k.auctionKeeper.StartCollateralAuction(
 | 
				
			||||||
		ctx, types.LiquidatorMacc, sdk.NewCoin(collateral.Denom, lastAuctionCollateral),
 | 
							ctx, types.LiquidatorMacc, sdk.NewCoin(collateral.Denom, lastAuctionCollateral),
 | 
				
			||||||
		sdk.NewCoin(principalDenom, lastAuctionDebt.Add(penalty)), []sdk.AccAddress{returnAddr},
 | 
							sdk.NewCoin(principalDenom, lastAuctionDebt.Add(penalty)), []sdk.AccAddress{returnAddr},
 | 
				
			||||||
		[]sdk.Int{lastAuctionCollateral}, sdk.NewCoin(debtDenom, lastAuctionDebt),
 | 
							[]sdkmath.Int{lastAuctionCollateral}, sdk.NewCoin(debtDenom, lastAuctionDebt),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
@ -127,14 +128,14 @@ func (k Keeper) NetSurplusAndDebt(ctx sdk.Context) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetTotalSurplus returns the total amount of surplus tokens held by the liquidator module account
 | 
					// GetTotalSurplus returns the total amount of surplus tokens held by the liquidator module account
 | 
				
			||||||
func (k Keeper) GetTotalSurplus(ctx sdk.Context, accountName string) sdk.Int {
 | 
					func (k Keeper) GetTotalSurplus(ctx sdk.Context, accountName string) sdkmath.Int {
 | 
				
			||||||
	acc := k.accountKeeper.GetModuleAccount(ctx, accountName)
 | 
						acc := k.accountKeeper.GetModuleAccount(ctx, accountName)
 | 
				
			||||||
	dp := k.GetParams(ctx).DebtParam
 | 
						dp := k.GetParams(ctx).DebtParam
 | 
				
			||||||
	return k.bankKeeper.GetBalance(ctx, acc.GetAddress(), dp.Denom).Amount
 | 
						return k.bankKeeper.GetBalance(ctx, acc.GetAddress(), dp.Denom).Amount
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetTotalDebt returns the total amount of debt tokens held by the liquidator module account
 | 
					// GetTotalDebt returns the total amount of debt tokens held by the liquidator module account
 | 
				
			||||||
func (k Keeper) GetTotalDebt(ctx sdk.Context, accountName string) sdk.Int {
 | 
					func (k Keeper) GetTotalDebt(ctx sdk.Context, accountName string) sdkmath.Int {
 | 
				
			||||||
	acc := k.accountKeeper.GetModuleAccount(ctx, accountName)
 | 
						acc := k.accountKeeper.GetModuleAccount(ctx, accountName)
 | 
				
			||||||
	return k.bankKeeper.GetBalance(ctx, acc.GetAddress(), k.GetDebtDenom(ctx)).Amount
 | 
						return k.bankKeeper.GetBalance(ctx, acc.GetAddress(), k.GetDebtDenom(ctx)).Amount
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -150,7 +151,7 @@ func (k Keeper) RunSurplusAndDebtAuctions(ctx sdk.Context) error {
 | 
				
			|||||||
	if remainingDebt.GTE(params.DebtAuctionThreshold) {
 | 
						if remainingDebt.GTE(params.DebtAuctionThreshold) {
 | 
				
			||||||
		debtLot := sdk.NewCoin(k.GetDebtDenom(ctx), params.DebtAuctionLot)
 | 
							debtLot := sdk.NewCoin(k.GetDebtDenom(ctx), params.DebtAuctionLot)
 | 
				
			||||||
		bidCoin := sdk.NewCoin(params.DebtParam.Denom, debtLot.Amount)
 | 
							bidCoin := sdk.NewCoin(params.DebtParam.Denom, debtLot.Amount)
 | 
				
			||||||
		initialLot := sdk.NewCoin(k.GetGovDenom(ctx), debtLot.Amount.Mul(sdk.NewInt(dump)))
 | 
							initialLot := sdk.NewCoin(k.GetGovDenom(ctx), debtLot.Amount.Mul(sdkmath.NewInt(dump)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		_, err := k.auctionKeeper.StartDebtAuction(ctx, types.LiquidatorMacc, bidCoin, initialLot, debtLot)
 | 
							_, err := k.auctionKeeper.StartDebtAuction(ctx, types.LiquidatorMacc, bidCoin, initialLot, debtLot)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package keeper_test
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/app"
 | 
						"github.com/kava-labs/kava/app"
 | 
				
			||||||
@ -106,7 +107,7 @@ func (suite *AuctionTestSuite) TestGetTotalSurplus() {
 | 
				
			|||||||
	bk := suite.app.GetBankKeeper()
 | 
						bk := suite.app.GetBankKeeper()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// liquidator account has zero coins
 | 
						// liquidator account has zero coins
 | 
				
			||||||
	suite.Require().Equal(sdk.NewInt(0), suite.keeper.GetTotalSurplus(suite.ctx, types.LiquidatorMacc))
 | 
						suite.Require().Equal(sdkmath.NewInt(0), suite.keeper.GetTotalSurplus(suite.ctx, types.LiquidatorMacc))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// mint some coins
 | 
						// mint some coins
 | 
				
			||||||
	err := bk.MintCoins(suite.ctx, types.LiquidatorMacc, cs(c("usdx", 100e6)))
 | 
						err := bk.MintCoins(suite.ctx, types.LiquidatorMacc, cs(c("usdx", 100e6)))
 | 
				
			||||||
@ -115,28 +116,28 @@ func (suite *AuctionTestSuite) TestGetTotalSurplus() {
 | 
				
			|||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// liquidator account has 300e6 total usdx
 | 
						// liquidator account has 300e6 total usdx
 | 
				
			||||||
	suite.Require().Equal(sdk.NewInt(300e6), suite.keeper.GetTotalSurplus(suite.ctx, types.LiquidatorMacc))
 | 
						suite.Require().Equal(sdkmath.NewInt(300e6), suite.keeper.GetTotalSurplus(suite.ctx, types.LiquidatorMacc))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// mint some debt
 | 
						// mint some debt
 | 
				
			||||||
	err = bk.MintCoins(suite.ctx, types.LiquidatorMacc, cs(c("debt", 500e6)))
 | 
						err = bk.MintCoins(suite.ctx, types.LiquidatorMacc, cs(c("debt", 500e6)))
 | 
				
			||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// liquidator account still has 300e6 total usdx -- debt balance is ignored
 | 
						// liquidator account still has 300e6 total usdx -- debt balance is ignored
 | 
				
			||||||
	suite.Require().Equal(sdk.NewInt(300e6), suite.keeper.GetTotalSurplus(suite.ctx, types.LiquidatorMacc))
 | 
						suite.Require().Equal(sdkmath.NewInt(300e6), suite.keeper.GetTotalSurplus(suite.ctx, types.LiquidatorMacc))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// burn some usdx
 | 
						// burn some usdx
 | 
				
			||||||
	err = bk.BurnCoins(suite.ctx, types.LiquidatorMacc, cs(c("usdx", 50e6)))
 | 
						err = bk.BurnCoins(suite.ctx, types.LiquidatorMacc, cs(c("usdx", 50e6)))
 | 
				
			||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// liquidator usdx decreases
 | 
						// liquidator usdx decreases
 | 
				
			||||||
	suite.Require().Equal(sdk.NewInt(250e6), suite.keeper.GetTotalSurplus(suite.ctx, types.LiquidatorMacc))
 | 
						suite.Require().Equal(sdkmath.NewInt(250e6), suite.keeper.GetTotalSurplus(suite.ctx, types.LiquidatorMacc))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *AuctionTestSuite) TestGetTotalDebt() {
 | 
					func (suite *AuctionTestSuite) TestGetTotalDebt() {
 | 
				
			||||||
	bk := suite.app.GetBankKeeper()
 | 
						bk := suite.app.GetBankKeeper()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// liquidator account has zero debt
 | 
						// liquidator account has zero debt
 | 
				
			||||||
	suite.Require().Equal(sdk.NewInt(0), suite.keeper.GetTotalSurplus(suite.ctx, types.LiquidatorMacc))
 | 
						suite.Require().Equal(sdkmath.NewInt(0), suite.keeper.GetTotalSurplus(suite.ctx, types.LiquidatorMacc))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// mint some debt
 | 
						// mint some debt
 | 
				
			||||||
	err := bk.MintCoins(suite.ctx, types.LiquidatorMacc, cs(c("debt", 100e6)))
 | 
						err := bk.MintCoins(suite.ctx, types.LiquidatorMacc, cs(c("debt", 100e6)))
 | 
				
			||||||
@ -145,21 +146,21 @@ func (suite *AuctionTestSuite) TestGetTotalDebt() {
 | 
				
			|||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// liquidator account has 300e6 total debt
 | 
						// liquidator account has 300e6 total debt
 | 
				
			||||||
	suite.Require().Equal(sdk.NewInt(300e6), suite.keeper.GetTotalDebt(suite.ctx, types.LiquidatorMacc))
 | 
						suite.Require().Equal(sdkmath.NewInt(300e6), suite.keeper.GetTotalDebt(suite.ctx, types.LiquidatorMacc))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// mint some usdx
 | 
						// mint some usdx
 | 
				
			||||||
	err = bk.MintCoins(suite.ctx, types.LiquidatorMacc, cs(c("usdx", 500e6)))
 | 
						err = bk.MintCoins(suite.ctx, types.LiquidatorMacc, cs(c("usdx", 500e6)))
 | 
				
			||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// liquidator account still has 300e6 total debt -- usdx balance is ignored
 | 
						// liquidator account still has 300e6 total debt -- usdx balance is ignored
 | 
				
			||||||
	suite.Require().Equal(sdk.NewInt(300e6), suite.keeper.GetTotalDebt(suite.ctx, types.LiquidatorMacc))
 | 
						suite.Require().Equal(sdkmath.NewInt(300e6), suite.keeper.GetTotalDebt(suite.ctx, types.LiquidatorMacc))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// burn some debt
 | 
						// burn some debt
 | 
				
			||||||
	err = bk.BurnCoins(suite.ctx, types.LiquidatorMacc, cs(c("debt", 50e6)))
 | 
						err = bk.BurnCoins(suite.ctx, types.LiquidatorMacc, cs(c("debt", 50e6)))
 | 
				
			||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// liquidator debt decreases
 | 
						// liquidator debt decreases
 | 
				
			||||||
	suite.Require().Equal(sdk.NewInt(250e6), suite.keeper.GetTotalDebt(suite.ctx, types.LiquidatorMacc))
 | 
						suite.Require().Equal(sdkmath.NewInt(250e6), suite.keeper.GetTotalDebt(suite.ctx, types.LiquidatorMacc))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestAuctionTestSuite(t *testing.T) {
 | 
					func TestAuctionTestSuite(t *testing.T) {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,9 +4,9 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"sort"
 | 
						"sort"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/store/prefix"
 | 
						"github.com/cosmos/cosmos-sdk/store/prefix"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/cdp/types"
 | 
						"github.com/kava-labs/kava/x/cdp/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -24,7 +24,7 @@ func (k Keeper) AddCdp(ctx sdk.Context, owner sdk.AccAddress, collateral sdk.Coi
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	_, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
						_, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
				
			||||||
	if found {
 | 
						if found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrCdpAlreadyExists, "owner %s, denom %s", owner, collateral.Denom)
 | 
							return errorsmod.Wrapf(types.ErrCdpAlreadyExists, "owner %s, denom %s", owner, collateral.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	err = k.ValidatePrincipalAdd(ctx, principal)
 | 
						err = k.ValidatePrincipalAdd(ctx, principal)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -149,7 +149,7 @@ func (k Keeper) SetCdpAndCollateralRatioIndex(ctx sdk.Context, cdp types.CDP, ra
 | 
				
			|||||||
func (k Keeper) removeOldCollateralRatioIndex(ctx sdk.Context, ctype string, id uint64) error {
 | 
					func (k Keeper) removeOldCollateralRatioIndex(ctx sdk.Context, ctype string, id uint64) error {
 | 
				
			||||||
	storedCDP, found := k.GetCDP(ctx, ctype, id)
 | 
						storedCDP, found := k.GetCDP(ctx, ctype, id)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrCdpNotFound, "%d", storedCDP.ID)
 | 
							return errorsmod.Wrapf(types.ErrCdpNotFound, "%d", storedCDP.ID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	oldCollateralToDebtRatio := k.CalculateCollateralToDebtRatio(ctx, storedCDP.Collateral, storedCDP.Type, storedCDP.GetTotalPrincipal())
 | 
						oldCollateralToDebtRatio := k.CalculateCollateralToDebtRatio(ctx, storedCDP.Collateral, storedCDP.Type, storedCDP.GetTotalPrincipal())
 | 
				
			||||||
	k.RemoveCdpCollateralRatioIndex(ctx, storedCDP.Type, storedCDP.ID, oldCollateralToDebtRatio)
 | 
						k.RemoveCdpCollateralRatioIndex(ctx, storedCDP.Type, storedCDP.ID, oldCollateralToDebtRatio)
 | 
				
			||||||
@ -238,7 +238,7 @@ func (k Keeper) SetCDP(ctx sdk.Context, cdp types.CDP) error {
 | 
				
			|||||||
	store := prefix.NewStore(ctx.KVStore(k.key), types.CdpKeyPrefix)
 | 
						store := prefix.NewStore(ctx.KVStore(k.key), types.CdpKeyPrefix)
 | 
				
			||||||
	_, found := k.GetCollateral(ctx, cdp.Type)
 | 
						_, found := k.GetCollateral(ctx, cdp.Type)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrDenomPrefixNotFound, "%s", cdp.Collateral.Denom)
 | 
							return errorsmod.Wrapf(types.ErrDenomPrefixNotFound, "%s", cdp.Collateral.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	bz := k.cdc.MustMarshal(&cdp)
 | 
						bz := k.cdc.MustMarshal(&cdp)
 | 
				
			||||||
	store.Set(types.CdpKey(cdp.Type, cdp.ID), bz)
 | 
						store.Set(types.CdpKey(cdp.Type, cdp.ID), bz)
 | 
				
			||||||
@ -250,7 +250,7 @@ func (k Keeper) DeleteCDP(ctx sdk.Context, cdp types.CDP) error {
 | 
				
			|||||||
	store := prefix.NewStore(ctx.KVStore(k.key), types.CdpKeyPrefix)
 | 
						store := prefix.NewStore(ctx.KVStore(k.key), types.CdpKeyPrefix)
 | 
				
			||||||
	_, found := k.GetCollateral(ctx, cdp.Type)
 | 
						_, found := k.GetCollateral(ctx, cdp.Type)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrDenomPrefixNotFound, "%s", cdp.Collateral.Denom)
 | 
							return errorsmod.Wrapf(types.ErrDenomPrefixNotFound, "%s", cdp.Collateral.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	store.Delete(types.CdpKey(cdp.Type, cdp.ID))
 | 
						store.Delete(types.CdpKey(cdp.Type, cdp.ID))
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
@ -397,18 +397,18 @@ func (k Keeper) SetGovDenom(ctx sdk.Context, denom string) {
 | 
				
			|||||||
func (k Keeper) ValidateCollateral(ctx sdk.Context, collateral sdk.Coin, collateralType string) error {
 | 
					func (k Keeper) ValidateCollateral(ctx sdk.Context, collateral sdk.Coin, collateralType string) error {
 | 
				
			||||||
	cp, found := k.GetCollateral(ctx, collateralType)
 | 
						cp, found := k.GetCollateral(ctx, collateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrCollateralNotSupported, collateral.Denom)
 | 
							return errorsmod.Wrap(types.ErrCollateralNotSupported, collateral.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if cp.Denom != collateral.Denom {
 | 
						if cp.Denom != collateral.Denom {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidCollateral, "collateral type: %s expected denom: %s got: %s", collateralType, cp.Denom, collateral.Denom)
 | 
							return errorsmod.Wrapf(types.ErrInvalidCollateral, "collateral type: %s expected denom: %s got: %s", collateralType, cp.Denom, collateral.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ok := k.GetMarketStatus(ctx, cp.SpotMarketID)
 | 
						ok := k.GetMarketStatus(ctx, cp.SpotMarketID)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrPricefeedDown, collateral.Denom)
 | 
							return errorsmod.Wrap(types.ErrPricefeedDown, collateral.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ok = k.GetMarketStatus(ctx, cp.LiquidationMarketID)
 | 
						ok = k.GetMarketStatus(ctx, cp.LiquidationMarketID)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrPricefeedDown, collateral.Denom)
 | 
							return errorsmod.Wrap(types.ErrPricefeedDown, collateral.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -417,10 +417,10 @@ func (k Keeper) ValidateCollateral(ctx sdk.Context, collateral sdk.Coin, collate
 | 
				
			|||||||
func (k Keeper) ValidatePrincipalAdd(ctx sdk.Context, principal sdk.Coin) error {
 | 
					func (k Keeper) ValidatePrincipalAdd(ctx sdk.Context, principal sdk.Coin) error {
 | 
				
			||||||
	dp, found := k.GetDebtParam(ctx, principal.Denom)
 | 
						dp, found := k.GetDebtParam(ctx, principal.Denom)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrDebtNotSupported, principal.Denom)
 | 
							return errorsmod.Wrap(types.ErrDebtNotSupported, principal.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if principal.Amount.LT(dp.DebtFloor) {
 | 
						if principal.Amount.LT(dp.DebtFloor) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrBelowDebtFloor, "proposed %s < minimum %s", principal, dp.DebtFloor)
 | 
							return errorsmod.Wrapf(types.ErrBelowDebtFloor, "proposed %s < minimum %s", principal, dp.DebtFloor)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -428,11 +428,11 @@ func (k Keeper) ValidatePrincipalAdd(ctx sdk.Context, principal sdk.Coin) error
 | 
				
			|||||||
// ValidatePrincipalDraw validates that an asset is valid for use as debt when drawing debt off an existing cdp
 | 
					// ValidatePrincipalDraw validates that an asset is valid for use as debt when drawing debt off an existing cdp
 | 
				
			||||||
func (k Keeper) ValidatePrincipalDraw(ctx sdk.Context, principal sdk.Coin, expectedDenom string) error {
 | 
					func (k Keeper) ValidatePrincipalDraw(ctx sdk.Context, principal sdk.Coin, expectedDenom string) error {
 | 
				
			||||||
	if principal.Denom != expectedDenom {
 | 
						if principal.Denom != expectedDenom {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidDebtRequest, "proposed %s, expected %s", principal.Denom, expectedDenom)
 | 
							return errorsmod.Wrapf(types.ErrInvalidDebtRequest, "proposed %s, expected %s", principal.Denom, expectedDenom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, found := k.GetDebtParam(ctx, principal.Denom)
 | 
						_, found := k.GetDebtParam(ctx, principal.Denom)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrDebtNotSupported, principal.Denom)
 | 
							return errorsmod.Wrap(types.ErrDebtNotSupported, principal.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -441,16 +441,16 @@ func (k Keeper) ValidatePrincipalDraw(ctx sdk.Context, principal sdk.Coin, expec
 | 
				
			|||||||
func (k Keeper) ValidateDebtLimit(ctx sdk.Context, collateralType string, principal sdk.Coin) error {
 | 
					func (k Keeper) ValidateDebtLimit(ctx sdk.Context, collateralType string, principal sdk.Coin) error {
 | 
				
			||||||
	cp, found := k.GetCollateral(ctx, collateralType)
 | 
						cp, found := k.GetCollateral(ctx, collateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrap(types.ErrCollateralNotSupported, collateralType)
 | 
							return errorsmod.Wrap(types.ErrCollateralNotSupported, collateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	totalPrincipal := k.GetTotalPrincipal(ctx, collateralType, principal.Denom).Add(principal.Amount)
 | 
						totalPrincipal := k.GetTotalPrincipal(ctx, collateralType, principal.Denom).Add(principal.Amount)
 | 
				
			||||||
	collateralLimit := cp.DebtLimit.Amount
 | 
						collateralLimit := cp.DebtLimit.Amount
 | 
				
			||||||
	if totalPrincipal.GT(collateralLimit) {
 | 
						if totalPrincipal.GT(collateralLimit) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrExceedsDebtLimit, "debt increase %s > collateral debt limit %s", sdk.NewCoins(sdk.NewCoin(principal.Denom, totalPrincipal)), sdk.NewCoins(sdk.NewCoin(principal.Denom, collateralLimit)))
 | 
							return errorsmod.Wrapf(types.ErrExceedsDebtLimit, "debt increase %s > collateral debt limit %s", sdk.NewCoins(sdk.NewCoin(principal.Denom, totalPrincipal)), sdk.NewCoins(sdk.NewCoin(principal.Denom, collateralLimit)))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	globalLimit := k.GetParams(ctx).GlobalDebtLimit.Amount
 | 
						globalLimit := k.GetParams(ctx).GlobalDebtLimit.Amount
 | 
				
			||||||
	if totalPrincipal.GT(globalLimit) {
 | 
						if totalPrincipal.GT(globalLimit) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrExceedsDebtLimit, "debt increase %s > global debt limit  %s", sdk.NewCoin(principal.Denom, totalPrincipal), sdk.NewCoin(principal.Denom, globalLimit))
 | 
							return errorsmod.Wrapf(types.ErrExceedsDebtLimit, "debt increase %s > global debt limit  %s", sdk.NewCoin(principal.Denom, totalPrincipal), sdk.NewCoin(principal.Denom, globalLimit))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -463,7 +463,7 @@ func (k Keeper) ValidateCollateralizationRatio(ctx sdk.Context, collateral sdk.C
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	liquidationRatio := k.getLiquidationRatio(ctx, collateralType)
 | 
						liquidationRatio := k.getLiquidationRatio(ctx, collateralType)
 | 
				
			||||||
	if collateralizationRatio.LT(liquidationRatio) {
 | 
						if collateralizationRatio.LT(liquidationRatio) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidCollateralRatio, "collateral %s, collateral ratio %s, liquidation ratio %s", collateral.Denom, collateralizationRatio, liquidationRatio)
 | 
							return errorsmod.Wrapf(types.ErrInvalidCollateralRatio, "collateral %s, collateral ratio %s, liquidation ratio %s", collateral.Denom, collateralizationRatio, liquidationRatio)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -472,11 +472,11 @@ func (k Keeper) ValidateCollateralizationRatio(ctx sdk.Context, collateral sdk.C
 | 
				
			|||||||
func (k Keeper) ValidateBalance(ctx sdk.Context, amount sdk.Coin, sender sdk.AccAddress) error {
 | 
					func (k Keeper) ValidateBalance(ctx sdk.Context, amount sdk.Coin, sender sdk.AccAddress) error {
 | 
				
			||||||
	acc := k.accountKeeper.GetAccount(ctx, sender)
 | 
						acc := k.accountKeeper.GetAccount(ctx, sender)
 | 
				
			||||||
	if acc == nil {
 | 
						if acc == nil {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrAccountNotFound, "address: %s", sender)
 | 
							return errorsmod.Wrapf(types.ErrAccountNotFound, "address: %s", sender)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	spendableBalance := k.bankKeeper.SpendableCoins(ctx, acc.GetAddress()).AmountOf(amount.Denom)
 | 
						spendableBalance := k.bankKeeper.SpendableCoins(ctx, acc.GetAddress()).AmountOf(amount.Denom)
 | 
				
			||||||
	if spendableBalance.LT(amount.Amount) {
 | 
						if spendableBalance.LT(amount.Amount) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInsufficientBalance, "%s < %s", sdk.NewCoin(amount.Denom, spendableBalance), amount)
 | 
							return errorsmod.Wrapf(types.ErrInsufficientBalance, "%s < %s", sdk.NewCoin(amount.Denom, spendableBalance), amount)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
						tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
				
			||||||
@ -261,25 +262,25 @@ func (suite *CdpTestSuite) TestIterateCdpsByCollateralRatio() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *CdpTestSuite) TestValidateCollateral() {
 | 
					func (suite *CdpTestSuite) TestValidateCollateral() {
 | 
				
			||||||
	c := sdk.NewCoin("xrp", sdk.NewInt(1))
 | 
						c := sdk.NewCoin("xrp", sdkmath.NewInt(1))
 | 
				
			||||||
	err := suite.keeper.ValidateCollateral(suite.ctx, c, "xrp-a")
 | 
						err := suite.keeper.ValidateCollateral(suite.ctx, c, "xrp-a")
 | 
				
			||||||
	suite.NoError(err)
 | 
						suite.NoError(err)
 | 
				
			||||||
	c = sdk.NewCoin("lol", sdk.NewInt(1))
 | 
						c = sdk.NewCoin("lol", sdkmath.NewInt(1))
 | 
				
			||||||
	err = suite.keeper.ValidateCollateral(suite.ctx, c, "lol-a")
 | 
						err = suite.keeper.ValidateCollateral(suite.ctx, c, "lol-a")
 | 
				
			||||||
	suite.Require().True(errors.Is(err, types.ErrCollateralNotSupported))
 | 
						suite.Require().True(errors.Is(err, types.ErrCollateralNotSupported))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *CdpTestSuite) TestValidatePrincipal() {
 | 
					func (suite *CdpTestSuite) TestValidatePrincipal() {
 | 
				
			||||||
	d := sdk.NewCoin("usdx", sdk.NewInt(10000000))
 | 
						d := sdk.NewCoin("usdx", sdkmath.NewInt(10000000))
 | 
				
			||||||
	err := suite.keeper.ValidatePrincipalAdd(suite.ctx, d)
 | 
						err := suite.keeper.ValidatePrincipalAdd(suite.ctx, d)
 | 
				
			||||||
	suite.NoError(err)
 | 
						suite.NoError(err)
 | 
				
			||||||
	d = sdk.NewCoin("xusd", sdk.NewInt(1))
 | 
						d = sdk.NewCoin("xusd", sdkmath.NewInt(1))
 | 
				
			||||||
	err = suite.keeper.ValidatePrincipalAdd(suite.ctx, d)
 | 
						err = suite.keeper.ValidatePrincipalAdd(suite.ctx, d)
 | 
				
			||||||
	suite.Require().True(errors.Is(err, types.ErrDebtNotSupported))
 | 
						suite.Require().True(errors.Is(err, types.ErrDebtNotSupported))
 | 
				
			||||||
	d = sdk.NewCoin("usdx", sdk.NewInt(1000000000001))
 | 
						d = sdk.NewCoin("usdx", sdkmath.NewInt(1000000000001))
 | 
				
			||||||
	err = suite.keeper.ValidateDebtLimit(suite.ctx, "xrp-a", d)
 | 
						err = suite.keeper.ValidateDebtLimit(suite.ctx, "xrp-a", d)
 | 
				
			||||||
	suite.Require().True(errors.Is(err, types.ErrExceedsDebtLimit))
 | 
						suite.Require().True(errors.Is(err, types.ErrExceedsDebtLimit))
 | 
				
			||||||
	d = sdk.NewCoin("usdx", sdk.NewInt(100000000))
 | 
						d = sdk.NewCoin("usdx", sdkmath.NewInt(100000000))
 | 
				
			||||||
	err = suite.keeper.ValidateDebtLimit(suite.ctx, "xrp-a", d)
 | 
						err = suite.keeper.ValidateDebtLimit(suite.ctx, "xrp-a", d)
 | 
				
			||||||
	suite.NoError(err)
 | 
						suite.NoError(err)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -3,9 +3,9 @@ package keeper
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/store/prefix"
 | 
						"github.com/cosmos/cosmos-sdk/store/prefix"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/cdp/types"
 | 
						"github.com/kava-labs/kava/x/cdp/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -19,7 +19,7 @@ func (k Keeper) DepositCollateral(ctx sdk.Context, owner, depositor sdk.AccAddre
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	cdp, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
						cdp, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrCdpNotFound, "owner %s, collateral %s", owner, collateralType)
 | 
							return errorsmod.Wrapf(types.ErrCdpNotFound, "owner %s, collateral %s", owner, collateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	err = k.ValidateBalance(ctx, collateral, depositor)
 | 
						err = k.ValidateBalance(ctx, collateral, depositor)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -63,14 +63,14 @@ func (k Keeper) WithdrawCollateral(ctx sdk.Context, owner, depositor sdk.AccAddr
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	cdp, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
						cdp, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrCdpNotFound, "owner %s, collateral %s", owner, collateral.Denom)
 | 
							return errorsmod.Wrapf(types.ErrCdpNotFound, "owner %s, collateral %s", owner, collateral.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	deposit, found := k.GetDeposit(ctx, cdp.ID, depositor)
 | 
						deposit, found := k.GetDeposit(ctx, cdp.ID, depositor)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrDepositNotFound, "depositor %s, collateral %s %s", depositor, collateral.Denom, collateralType)
 | 
							return errorsmod.Wrapf(types.ErrDepositNotFound, "depositor %s, collateral %s %s", depositor, collateral.Denom, collateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if collateral.Amount.GT(deposit.Amount.Amount) {
 | 
						if collateral.Amount.GT(deposit.Amount.Amount) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidWithdrawAmount, "collateral %s, deposit %s", collateral, deposit.Amount)
 | 
							return errorsmod.Wrapf(types.ErrInvalidWithdrawAmount, "collateral %s, deposit %s", collateral, deposit.Amount)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	k.hooks.BeforeCDPModified(ctx, cdp)
 | 
						k.hooks.BeforeCDPModified(ctx, cdp)
 | 
				
			||||||
	cdp = k.SynchronizeInterest(ctx, cdp)
 | 
						cdp = k.SynchronizeInterest(ctx, cdp)
 | 
				
			||||||
@ -81,7 +81,7 @@ func (k Keeper) WithdrawCollateral(ctx sdk.Context, owner, depositor sdk.AccAddr
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	liquidationRatio := k.getLiquidationRatio(ctx, cdp.Type)
 | 
						liquidationRatio := k.getLiquidationRatio(ctx, cdp.Type)
 | 
				
			||||||
	if collateralizationRatio.LT(liquidationRatio) {
 | 
						if collateralizationRatio.LT(liquidationRatio) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidCollateralRatio, "collateral %s, collateral ratio %s, liquidation ration %s", collateral.Denom, collateralizationRatio, liquidationRatio)
 | 
							return errorsmod.Wrapf(types.ErrInvalidCollateralRatio, "collateral %s, collateral ratio %s, liquidation ration %s", collateral.Denom, collateralizationRatio, liquidationRatio)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, depositor, sdk.NewCoins(collateral))
 | 
						err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, depositor, sdk.NewCoins(collateral))
 | 
				
			||||||
 | 
				
			|||||||
@ -3,8 +3,8 @@ package keeper
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/cdp/types"
 | 
						"github.com/kava-labs/kava/x/cdp/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -14,7 +14,7 @@ func (k Keeper) AddPrincipal(ctx sdk.Context, owner sdk.AccAddress, collateralTy
 | 
				
			|||||||
	// validation
 | 
						// validation
 | 
				
			||||||
	cdp, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
						cdp, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", owner, collateralType)
 | 
							return errorsmod.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", owner, collateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	err := k.ValidatePrincipalDraw(ctx, principal, cdp.Principal.Denom)
 | 
						err := k.ValidatePrincipalDraw(ctx, principal, cdp.Principal.Denom)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -75,7 +75,7 @@ func (k Keeper) RepayPrincipal(ctx sdk.Context, owner sdk.AccAddress, collateral
 | 
				
			|||||||
	// validation
 | 
						// validation
 | 
				
			||||||
	cdp, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
						cdp, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", owner, collateralType)
 | 
							return errorsmod.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", owner, collateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := k.ValidatePaymentCoins(ctx, cdp, payment)
 | 
						err := k.ValidatePaymentCoins(ctx, cdp, payment)
 | 
				
			||||||
@ -178,11 +178,11 @@ func (k Keeper) RepayPrincipal(ctx sdk.Context, owner sdk.AccAddress, collateral
 | 
				
			|||||||
func (k Keeper) ValidatePaymentCoins(ctx sdk.Context, cdp types.CDP, payment sdk.Coin) error {
 | 
					func (k Keeper) ValidatePaymentCoins(ctx sdk.Context, cdp types.CDP, payment sdk.Coin) error {
 | 
				
			||||||
	debt := cdp.GetTotalPrincipal()
 | 
						debt := cdp.GetTotalPrincipal()
 | 
				
			||||||
	if payment.Denom != debt.Denom {
 | 
						if payment.Denom != debt.Denom {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidPayment, "cdp %d: expected %s, got %s", cdp.ID, debt.Denom, payment.Denom)
 | 
							return errorsmod.Wrapf(types.ErrInvalidPayment, "cdp %d: expected %s, got %s", cdp.ID, debt.Denom, payment.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, found := k.GetDebtParam(ctx, payment.Denom)
 | 
						_, found := k.GetDebtParam(ctx, payment.Denom)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrInvalidPayment, "payment denom %s not found", payment.Denom)
 | 
							return errorsmod.Wrapf(types.ErrInvalidPayment, "payment denom %s not found", payment.Denom)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -237,7 +237,7 @@ func (k Keeper) validatePrincipalPayment(ctx sdk.Context, cdp types.CDP, payment
 | 
				
			|||||||
	proposedBalance := cdp.Principal.Amount.Sub(payment.Amount)
 | 
						proposedBalance := cdp.Principal.Amount.Sub(payment.Amount)
 | 
				
			||||||
	dp, _ := k.GetDebtParam(ctx, payment.Denom)
 | 
						dp, _ := k.GetDebtParam(ctx, payment.Denom)
 | 
				
			||||||
	if proposedBalance.GT(sdk.ZeroInt()) && proposedBalance.LT(dp.DebtFloor) {
 | 
						if proposedBalance.GT(sdk.ZeroInt()) && proposedBalance.LT(dp.DebtFloor) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrBelowDebtFloor, "proposed %s < minimum %s", sdk.NewCoin(payment.Denom, proposedBalance), dp.DebtFloor)
 | 
							return errorsmod.Wrapf(types.ErrBelowDebtFloor, "proposed %s < minimum %s", sdk.NewCoin(payment.Denom, proposedBalance), dp.DebtFloor)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -4,8 +4,8 @@ import (
 | 
				
			|||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"sort"
 | 
						"sort"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/types/query"
 | 
						"github.com/cosmos/cosmos-sdk/types/query"
 | 
				
			||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
	"google.golang.org/grpc/codes"
 | 
						"google.golang.org/grpc/codes"
 | 
				
			||||||
@ -197,12 +197,12 @@ func (s QueryServer) Cdp(c context.Context, req *types.QueryCdpRequest) (*types.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	_, valid := s.keeper.GetCollateral(ctx, req.CollateralType)
 | 
						_, valid := s.keeper.GetCollateral(ctx, req.CollateralType)
 | 
				
			||||||
	if !valid {
 | 
						if !valid {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(types.ErrInvalidCollateral, req.CollateralType)
 | 
							return nil, errorsmod.Wrap(types.ErrInvalidCollateral, req.CollateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cdp, found := s.keeper.GetCdpByOwnerAndCollateralType(ctx, owner, req.CollateralType)
 | 
						cdp, found := s.keeper.GetCdpByOwnerAndCollateralType(ctx, owner, req.CollateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return nil, sdkerrors.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", req.Owner, req.CollateralType)
 | 
							return nil, errorsmod.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", req.Owner, req.CollateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cdpResponse := s.keeper.LoadCDPResponse(ctx, cdp)
 | 
						cdpResponse := s.keeper.LoadCDPResponse(ctx, cdp)
 | 
				
			||||||
@ -223,12 +223,12 @@ func (s QueryServer) Deposits(c context.Context, req *types.QueryDepositsRequest
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	_, valid := s.keeper.GetCollateral(ctx, req.CollateralType)
 | 
						_, valid := s.keeper.GetCollateral(ctx, req.CollateralType)
 | 
				
			||||||
	if !valid {
 | 
						if !valid {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(types.ErrInvalidCollateral, req.CollateralType)
 | 
							return nil, errorsmod.Wrap(types.ErrInvalidCollateral, req.CollateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cdp, found := s.keeper.GetCdpByOwnerAndCollateralType(ctx, owner, req.CollateralType)
 | 
						cdp, found := s.keeper.GetCdpByOwnerAndCollateralType(ctx, owner, req.CollateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return nil, sdkerrors.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", req.Owner, req.CollateralType)
 | 
							return nil, errorsmod.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", req.Owner, req.CollateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	deposits := s.keeper.GetDeposits(ctx, cdp.ID)
 | 
						deposits := s.keeper.GetDeposits(ctx, cdp.ID)
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/types/query"
 | 
						"github.com/cosmos/cosmos-sdk/types/query"
 | 
				
			||||||
	"github.com/kava-labs/kava/app"
 | 
						"github.com/kava-labs/kava/app"
 | 
				
			||||||
@ -109,11 +110,11 @@ func (suite *grpcQueryTestSuite) TestGrpcQueryTotalPrincipal() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	suite.Contains(res.TotalPrincipal, types.TotalPrincipal{
 | 
						suite.Contains(res.TotalPrincipal, types.TotalPrincipal{
 | 
				
			||||||
		CollateralType: "xrp-a",
 | 
							CollateralType: "xrp-a",
 | 
				
			||||||
		Amount:         sdk.NewCoin("usdx", sdk.NewInt(10000000)),
 | 
							Amount:         sdk.NewCoin("usdx", sdkmath.NewInt(10000000)),
 | 
				
			||||||
	}, "total principals should include added cdp")
 | 
						}, "total principals should include added cdp")
 | 
				
			||||||
	suite.Contains(res.TotalPrincipal, types.TotalPrincipal{
 | 
						suite.Contains(res.TotalPrincipal, types.TotalPrincipal{
 | 
				
			||||||
		CollateralType: "busd-a",
 | 
							CollateralType: "busd-a",
 | 
				
			||||||
		Amount:         sdk.NewCoin("usdx", sdk.NewInt(0)),
 | 
							Amount:         sdk.NewCoin("usdx", sdkmath.NewInt(0)),
 | 
				
			||||||
	}, "total busd principal should be 0")
 | 
						}, "total busd principal should be 0")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -126,11 +127,11 @@ func (suite *grpcQueryTestSuite) TestGrpcQueryTotalCollateral() {
 | 
				
			|||||||
	suite.Len(res.TotalCollateral, 4, "total collateral should include all collateral params")
 | 
						suite.Len(res.TotalCollateral, 4, "total collateral should include all collateral params")
 | 
				
			||||||
	suite.Contains(res.TotalCollateral, types.TotalCollateral{
 | 
						suite.Contains(res.TotalCollateral, types.TotalCollateral{
 | 
				
			||||||
		CollateralType: "xrp-a",
 | 
							CollateralType: "xrp-a",
 | 
				
			||||||
		Amount:         sdk.NewCoin("xrp", sdk.NewInt(100000000)),
 | 
							Amount:         sdk.NewCoin("xrp", sdkmath.NewInt(100000000)),
 | 
				
			||||||
	}, "total collaterals should include added cdp")
 | 
						}, "total collaterals should include added cdp")
 | 
				
			||||||
	suite.Contains(res.TotalCollateral, types.TotalCollateral{
 | 
						suite.Contains(res.TotalCollateral, types.TotalCollateral{
 | 
				
			||||||
		CollateralType: "busd-a",
 | 
							CollateralType: "busd-a",
 | 
				
			||||||
		Amount:         sdk.NewCoin("busd", sdk.NewInt(0)),
 | 
							Amount:         sdk.NewCoin("busd", sdkmath.NewInt(0)),
 | 
				
			||||||
	}, "busd total collateral should be 0")
 | 
						}, "busd total collateral should be 0")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -237,7 +238,7 @@ func (suite *grpcQueryTestSuite) TestGrpcQueryDeposits() {
 | 
				
			|||||||
			&types.Deposit{
 | 
								&types.Deposit{
 | 
				
			||||||
				CdpID:     1,
 | 
									CdpID:     1,
 | 
				
			||||||
				Depositor: suite.addrs[0],
 | 
									Depositor: suite.addrs[0],
 | 
				
			||||||
				Amount:    sdk.NewCoin("xrp", sdk.NewInt(100000000)),
 | 
									Amount:    sdk.NewCoin("xrp", sdkmath.NewInt(100000000)),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			false,
 | 
								false,
 | 
				
			||||||
			"",
 | 
								"",
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package keeper_test
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -14,7 +15,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Avoid cluttering test cases with long function names
 | 
					// Avoid cluttering test cases with long function names
 | 
				
			||||||
func i(in int64) sdk.Int                    { return sdk.NewInt(in) }
 | 
					func i(in int64) sdkmath.Int                { return sdkmath.NewInt(in) }
 | 
				
			||||||
func d(str string) sdk.Dec                  { return sdk.MustNewDecFromStr(str) }
 | 
					func d(str string) sdk.Dec                  { return sdk.MustNewDecFromStr(str) }
 | 
				
			||||||
func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
					func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
 | 
				
			||||||
func cs(coins ...sdk.Coin) sdk.Coins        { return sdk.NewCoins(coins...) }
 | 
					func cs(coins ...sdk.Coin) sdk.Coins        { return sdk.NewCoins(coins...) }
 | 
				
			||||||
@ -307,10 +308,10 @@ func NewCDPGenStateHighDebtLimit(cdc codec.JSONCodec) app.GenesisState {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func cdps() (cdps types.CDPs) {
 | 
					func cdps() (cdps types.CDPs) {
 | 
				
			||||||
	_, addrs := app.GeneratePrivKeyAddressPairs(3)
 | 
						_, addrs := app.GeneratePrivKeyAddressPairs(3)
 | 
				
			||||||
	c1 := types.NewCDP(uint64(1), addrs[0], sdk.NewCoin("xrp", sdk.NewInt(10000000)), "xrp-a", sdk.NewCoin("usdx", sdk.NewInt(8000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
						c1 := types.NewCDP(uint64(1), addrs[0], sdk.NewCoin("xrp", sdkmath.NewInt(10000000)), "xrp-a", sdk.NewCoin("usdx", sdkmath.NewInt(8000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
				
			||||||
	c2 := types.NewCDP(uint64(2), addrs[1], sdk.NewCoin("xrp", sdk.NewInt(100000000)), "xrp-a", sdk.NewCoin("usdx", sdk.NewInt(10000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
						c2 := types.NewCDP(uint64(2), addrs[1], sdk.NewCoin("xrp", sdkmath.NewInt(100000000)), "xrp-a", sdk.NewCoin("usdx", sdkmath.NewInt(10000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
				
			||||||
	c3 := types.NewCDP(uint64(3), addrs[1], sdk.NewCoin("btc", sdk.NewInt(1000000000)), "btc-a", sdk.NewCoin("usdx", sdk.NewInt(10000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
						c3 := types.NewCDP(uint64(3), addrs[1], sdk.NewCoin("btc", sdkmath.NewInt(1000000000)), "btc-a", sdk.NewCoin("usdx", sdkmath.NewInt(10000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
				
			||||||
	c4 := types.NewCDP(uint64(4), addrs[2], sdk.NewCoin("xrp", sdk.NewInt(1000000000)), "xrp-a", sdk.NewCoin("usdx", sdk.NewInt(500000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
						c4 := types.NewCDP(uint64(4), addrs[2], sdk.NewCoin("xrp", sdkmath.NewInt(1000000000)), "xrp-a", sdk.NewCoin("usdx", sdkmath.NewInt(500000000)), tmtime.Canonical(time.Now()), sdk.OneDec())
 | 
				
			||||||
	cdps = append(cdps, c1, c2, c3, c4)
 | 
						cdps = append(cdps, c1, c2, c3, c4)
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -47,7 +47,7 @@ func (k Keeper) AccumulateInterest(ctx sdk.Context, ctype string) error {
 | 
				
			|||||||
		k.SetPreviousAccrualTime(ctx, ctype, ctx.BlockTime())
 | 
							k.SetPreviousAccrualTime(ctx, ctype, ctx.BlockTime())
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	interestFactor := CalculateInterestFactor(borrowRateSpy, sdk.NewInt(timeElapsed))
 | 
						interestFactor := CalculateInterestFactor(borrowRateSpy, sdkmath.NewInt(timeElapsed))
 | 
				
			||||||
	interestAccumulated := (interestFactor.Mul(sdk.NewDecFromInt(totalPrincipalPrior))).RoundInt().Sub(totalPrincipalPrior)
 | 
						interestAccumulated := (interestFactor.Mul(sdk.NewDecFromInt(totalPrincipalPrior))).RoundInt().Sub(totalPrincipalPrior)
 | 
				
			||||||
	if interestAccumulated.IsZero() {
 | 
						if interestAccumulated.IsZero() {
 | 
				
			||||||
		// in the case accumulated interest rounds to zero, exit early without updating accrual time
 | 
							// in the case accumulated interest rounds to zero, exit early without updating accrual time
 | 
				
			||||||
@ -86,9 +86,9 @@ func (k Keeper) AccumulateInterest(ctx sdk.Context, ctype string) error {
 | 
				
			|||||||
// CalculateInterestFactor calculates the simple interest scaling factor,
 | 
					// CalculateInterestFactor calculates the simple interest scaling factor,
 | 
				
			||||||
// which is equal to: (per-second interest rate ** number of seconds elapsed)
 | 
					// which is equal to: (per-second interest rate ** number of seconds elapsed)
 | 
				
			||||||
// Will return 1.000x, multiply by principal to get new principal with added interest
 | 
					// Will return 1.000x, multiply by principal to get new principal with added interest
 | 
				
			||||||
func CalculateInterestFactor(perSecondInterestRate sdk.Dec, secondsElapsed sdk.Int) sdk.Dec {
 | 
					func CalculateInterestFactor(perSecondInterestRate sdk.Dec, secondsElapsed sdkmath.Int) sdk.Dec {
 | 
				
			||||||
	scalingFactorUint := sdk.NewUint(uint64(scalingFactor))
 | 
						scalingFactorUint := sdk.NewUint(uint64(scalingFactor))
 | 
				
			||||||
	scalingFactorInt := sdk.NewInt(int64(scalingFactor))
 | 
						scalingFactorInt := sdkmath.NewInt(int64(scalingFactor))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Convert per-second interest rate to a uint scaled by 1e18
 | 
						// Convert per-second interest rate to a uint scaled by 1e18
 | 
				
			||||||
	interestMantissa := sdkmath.NewUintFromBigInt(perSecondInterestRate.MulInt(scalingFactorInt).RoundInt().BigInt())
 | 
						interestMantissa := sdkmath.NewUintFromBigInt(perSecondInterestRate.MulInt(scalingFactorInt).RoundInt().BigInt())
 | 
				
			||||||
@ -161,7 +161,7 @@ func (k Keeper) CalculateNewInterest(ctx sdk.Context, cdp types.CDP) sdk.Coin {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SynchronizeInterestForRiskyCDPs synchronizes the interest for the slice of cdps with the lowest collateral:debt ratio
 | 
					// SynchronizeInterestForRiskyCDPs synchronizes the interest for the slice of cdps with the lowest collateral:debt ratio
 | 
				
			||||||
func (k Keeper) SynchronizeInterestForRiskyCDPs(ctx sdk.Context, slice sdk.Int, targetRatio sdk.Dec, collateralType string) error {
 | 
					func (k Keeper) SynchronizeInterestForRiskyCDPs(ctx sdk.Context, slice sdkmath.Int, targetRatio sdk.Dec, collateralType string) error {
 | 
				
			||||||
	cdps := k.GetSliceOfCDPsByRatioAndType(ctx, slice, targetRatio, collateralType)
 | 
						cdps := k.GetSliceOfCDPsByRatioAndType(ctx, slice, targetRatio, collateralType)
 | 
				
			||||||
	for _, cdp := range cdps {
 | 
						for _, cdp := range cdps {
 | 
				
			||||||
		k.hooks.BeforeCDPModified(ctx, cdp)
 | 
							k.hooks.BeforeCDPModified(ctx, cdp)
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
@ -41,7 +42,7 @@ func (suite *InterestTestSuite) SetupTest() {
 | 
				
			|||||||
func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
					func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			||||||
	type args struct {
 | 
						type args struct {
 | 
				
			||||||
		perSecondInterestRate sdk.Dec
 | 
							perSecondInterestRate sdk.Dec
 | 
				
			||||||
		timeElapsed           sdk.Int
 | 
							timeElapsed           sdkmath.Int
 | 
				
			||||||
		expectedValue         sdk.Dec
 | 
							expectedValue         sdk.Dec
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -57,7 +58,7 @@ func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			|||||||
			"1 year",
 | 
								"1 year",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				perSecondInterestRate: sdk.MustNewDecFromStr("1.000000005555"),
 | 
									perSecondInterestRate: sdk.MustNewDecFromStr("1.000000005555"),
 | 
				
			||||||
				timeElapsed:           sdk.NewInt(oneYearInSeconds),
 | 
									timeElapsed:           sdkmath.NewInt(oneYearInSeconds),
 | 
				
			||||||
				expectedValue:         sdk.MustNewDecFromStr("1.191463614477847370"),
 | 
									expectedValue:         sdk.MustNewDecFromStr("1.191463614477847370"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -65,7 +66,7 @@ func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			|||||||
			"10 year",
 | 
								"10 year",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				perSecondInterestRate: sdk.MustNewDecFromStr("1.000000005555"),
 | 
									perSecondInterestRate: sdk.MustNewDecFromStr("1.000000005555"),
 | 
				
			||||||
				timeElapsed:           sdk.NewInt(oneYearInSeconds * 10),
 | 
									timeElapsed:           sdkmath.NewInt(oneYearInSeconds * 10),
 | 
				
			||||||
				expectedValue:         sdk.MustNewDecFromStr("5.765113233897391189"),
 | 
									expectedValue:         sdk.MustNewDecFromStr("5.765113233897391189"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -73,7 +74,7 @@ func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			|||||||
			"1 month",
 | 
								"1 month",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				perSecondInterestRate: sdk.MustNewDecFromStr("1.000000005555"),
 | 
									perSecondInterestRate: sdk.MustNewDecFromStr("1.000000005555"),
 | 
				
			||||||
				timeElapsed:           sdk.NewInt(oneYearInSeconds / 12),
 | 
									timeElapsed:           sdkmath.NewInt(oneYearInSeconds / 12),
 | 
				
			||||||
				expectedValue:         sdk.MustNewDecFromStr("1.014705619075717373"),
 | 
									expectedValue:         sdk.MustNewDecFromStr("1.014705619075717373"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -81,7 +82,7 @@ func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			|||||||
			"1 day",
 | 
								"1 day",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				perSecondInterestRate: sdk.MustNewDecFromStr("1.000000005555"),
 | 
									perSecondInterestRate: sdk.MustNewDecFromStr("1.000000005555"),
 | 
				
			||||||
				timeElapsed:           sdk.NewInt(oneYearInSeconds / 365),
 | 
									timeElapsed:           sdkmath.NewInt(oneYearInSeconds / 365),
 | 
				
			||||||
				expectedValue:         sdk.MustNewDecFromStr("1.000480067194057924"),
 | 
									expectedValue:         sdk.MustNewDecFromStr("1.000480067194057924"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -89,7 +90,7 @@ func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			|||||||
			"1 year: low interest rate",
 | 
								"1 year: low interest rate",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				perSecondInterestRate: sdk.MustNewDecFromStr("1.000000000555"),
 | 
									perSecondInterestRate: sdk.MustNewDecFromStr("1.000000000555"),
 | 
				
			||||||
				timeElapsed:           sdk.NewInt(oneYearInSeconds),
 | 
									timeElapsed:           sdkmath.NewInt(oneYearInSeconds),
 | 
				
			||||||
				expectedValue:         sdk.MustNewDecFromStr("1.017656545925063632"),
 | 
									expectedValue:         sdk.MustNewDecFromStr("1.017656545925063632"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -97,7 +98,7 @@ func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			|||||||
			"1 year, lower interest rate",
 | 
								"1 year, lower interest rate",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				perSecondInterestRate: sdk.MustNewDecFromStr("1.000000000055"),
 | 
									perSecondInterestRate: sdk.MustNewDecFromStr("1.000000000055"),
 | 
				
			||||||
				timeElapsed:           sdk.NewInt(oneYearInSeconds),
 | 
									timeElapsed:           sdkmath.NewInt(oneYearInSeconds),
 | 
				
			||||||
				expectedValue:         sdk.MustNewDecFromStr("1.001735985079841390"),
 | 
									expectedValue:         sdk.MustNewDecFromStr("1.001735985079841390"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -105,7 +106,7 @@ func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			|||||||
			"1 year, lowest interest rate",
 | 
								"1 year, lowest interest rate",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				perSecondInterestRate: sdk.MustNewDecFromStr("1.000000000005"),
 | 
									perSecondInterestRate: sdk.MustNewDecFromStr("1.000000000005"),
 | 
				
			||||||
				timeElapsed:           sdk.NewInt(oneYearInSeconds),
 | 
									timeElapsed:           sdkmath.NewInt(oneYearInSeconds),
 | 
				
			||||||
				expectedValue:         sdk.MustNewDecFromStr("1.000157692432076670"),
 | 
									expectedValue:         sdk.MustNewDecFromStr("1.000157692432076670"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -113,7 +114,7 @@ func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			|||||||
			"1 year: high interest rate",
 | 
								"1 year: high interest rate",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				perSecondInterestRate: sdk.MustNewDecFromStr("1.000000055555"),
 | 
									perSecondInterestRate: sdk.MustNewDecFromStr("1.000000055555"),
 | 
				
			||||||
				timeElapsed:           sdk.NewInt(oneYearInSeconds),
 | 
									timeElapsed:           sdkmath.NewInt(oneYearInSeconds),
 | 
				
			||||||
				expectedValue:         sdk.MustNewDecFromStr("5.766022095987868825"),
 | 
									expectedValue:         sdk.MustNewDecFromStr("5.766022095987868825"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -121,7 +122,7 @@ func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			|||||||
			"1 year: higher interest rate",
 | 
								"1 year: higher interest rate",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				perSecondInterestRate: sdk.MustNewDecFromStr("1.000000555555"),
 | 
									perSecondInterestRate: sdk.MustNewDecFromStr("1.000000555555"),
 | 
				
			||||||
				timeElapsed:           sdk.NewInt(oneYearInSeconds),
 | 
									timeElapsed:           sdkmath.NewInt(oneYearInSeconds),
 | 
				
			||||||
				expectedValue:         sdk.MustNewDecFromStr("40628388.864535408465693310"),
 | 
									expectedValue:         sdk.MustNewDecFromStr("40628388.864535408465693310"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -131,7 +132,7 @@ func (suite *InterestTestSuite) TestCalculateInterestFactor() {
 | 
				
			|||||||
			"1 year: highest interest rate",
 | 
								"1 year: highest interest rate",
 | 
				
			||||||
			args{
 | 
								args{
 | 
				
			||||||
				perSecondInterestRate: sdk.MustNewDecFromStr("1.000001555555"),
 | 
									perSecondInterestRate: sdk.MustNewDecFromStr("1.000001555555"),
 | 
				
			||||||
				timeElapsed:           sdk.NewInt(oneYearInSeconds),
 | 
									timeElapsed:           sdkmath.NewInt(oneYearInSeconds),
 | 
				
			||||||
				expectedValue:         sdk.MustNewDecFromStr("2017093013158200407564.613502861572552603"),
 | 
									expectedValue:         sdk.MustNewDecFromStr("2017093013158200407564.613502861572552603"),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -149,9 +150,9 @@ func (suite *InterestTestSuite) TestAccumulateInterest() {
 | 
				
			|||||||
	type args struct {
 | 
						type args struct {
 | 
				
			||||||
		ctype                   string
 | 
							ctype                   string
 | 
				
			||||||
		initialTime             time.Time
 | 
							initialTime             time.Time
 | 
				
			||||||
		totalPrincipal          sdk.Int
 | 
							totalPrincipal          sdkmath.Int
 | 
				
			||||||
		timeElapsed             int
 | 
							timeElapsed             int
 | 
				
			||||||
		expectedTotalPrincipal  sdk.Int
 | 
							expectedTotalPrincipal  sdkmath.Int
 | 
				
			||||||
		expectedLastAccrualTime time.Time
 | 
							expectedLastAccrualTime time.Time
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -167,9 +168,9 @@ func (suite *InterestTestSuite) TestAccumulateInterest() {
 | 
				
			|||||||
			args{
 | 
								args{
 | 
				
			||||||
				ctype:                   "bnb-a",
 | 
									ctype:                   "bnb-a",
 | 
				
			||||||
				initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
									initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
				
			||||||
				totalPrincipal:          sdk.NewInt(100000000000000),
 | 
									totalPrincipal:          sdkmath.NewInt(100000000000000),
 | 
				
			||||||
				timeElapsed:             oneYearInSeconds,
 | 
									timeElapsed:             oneYearInSeconds,
 | 
				
			||||||
				expectedTotalPrincipal:  sdk.NewInt(105000000000012),
 | 
									expectedTotalPrincipal:  sdkmath.NewInt(105000000000012),
 | 
				
			||||||
				expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC).Add(time.Duration(int(time.Second) * oneYearInSeconds)),
 | 
									expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC).Add(time.Duration(int(time.Second) * oneYearInSeconds)),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -189,9 +190,9 @@ func (suite *InterestTestSuite) TestAccumulateInterest() {
 | 
				
			|||||||
			args{
 | 
								args{
 | 
				
			||||||
				ctype:                   "bnb-a",
 | 
									ctype:                   "bnb-a",
 | 
				
			||||||
				initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
									initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
				
			||||||
				totalPrincipal:          sdk.NewInt(100000000000000),
 | 
									totalPrincipal:          sdkmath.NewInt(100000000000000),
 | 
				
			||||||
				timeElapsed:             86400 * 30,
 | 
									timeElapsed:             86400 * 30,
 | 
				
			||||||
				expectedTotalPrincipal:  sdk.NewInt(100401820189198),
 | 
									expectedTotalPrincipal:  sdkmath.NewInt(100401820189198),
 | 
				
			||||||
				expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC).Add(time.Duration(int(time.Second) * 86400 * 30)),
 | 
									expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC).Add(time.Duration(int(time.Second) * 86400 * 30)),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -200,9 +201,9 @@ func (suite *InterestTestSuite) TestAccumulateInterest() {
 | 
				
			|||||||
			args{
 | 
								args{
 | 
				
			||||||
				ctype:                   "bnb-a",
 | 
									ctype:                   "bnb-a",
 | 
				
			||||||
				initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
									initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
				
			||||||
				totalPrincipal:          sdk.NewInt(10),
 | 
									totalPrincipal:          sdkmath.NewInt(10),
 | 
				
			||||||
				timeElapsed:             86400 * 30,
 | 
									timeElapsed:             86400 * 30,
 | 
				
			||||||
				expectedTotalPrincipal:  sdk.NewInt(10),
 | 
									expectedTotalPrincipal:  sdkmath.NewInt(10),
 | 
				
			||||||
				expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
									expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -211,9 +212,9 @@ func (suite *InterestTestSuite) TestAccumulateInterest() {
 | 
				
			|||||||
			args{
 | 
								args{
 | 
				
			||||||
				ctype:                   "bnb-a",
 | 
									ctype:                   "bnb-a",
 | 
				
			||||||
				initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
									initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
				
			||||||
				totalPrincipal:          sdk.NewInt(100000000000000),
 | 
									totalPrincipal:          sdkmath.NewInt(100000000000000),
 | 
				
			||||||
				timeElapsed:             7,
 | 
									timeElapsed:             7,
 | 
				
			||||||
				expectedTotalPrincipal:  sdk.NewInt(100000001082988),
 | 
									expectedTotalPrincipal:  sdkmath.NewInt(100000001082988),
 | 
				
			||||||
				expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC).Add(time.Duration(int(time.Second) * 7)),
 | 
									expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC).Add(time.Duration(int(time.Second) * 7)),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -222,9 +223,9 @@ func (suite *InterestTestSuite) TestAccumulateInterest() {
 | 
				
			|||||||
			args{
 | 
								args{
 | 
				
			||||||
				ctype:                   "bnb-a",
 | 
									ctype:                   "bnb-a",
 | 
				
			||||||
				initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
									initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
				
			||||||
				totalPrincipal:          sdk.NewInt(30000000),
 | 
									totalPrincipal:          sdkmath.NewInt(30000000),
 | 
				
			||||||
				timeElapsed:             7,
 | 
									timeElapsed:             7,
 | 
				
			||||||
				expectedTotalPrincipal:  sdk.NewInt(30000000),
 | 
									expectedTotalPrincipal:  sdkmath.NewInt(30000000),
 | 
				
			||||||
				expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
									expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -233,9 +234,9 @@ func (suite *InterestTestSuite) TestAccumulateInterest() {
 | 
				
			|||||||
			args{
 | 
								args{
 | 
				
			||||||
				ctype:                   "busd-a",
 | 
									ctype:                   "busd-a",
 | 
				
			||||||
				initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
									initialTime:             time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC),
 | 
				
			||||||
				totalPrincipal:          sdk.NewInt(100000000000000),
 | 
									totalPrincipal:          sdkmath.NewInt(100000000000000),
 | 
				
			||||||
				timeElapsed:             7,
 | 
									timeElapsed:             7,
 | 
				
			||||||
				expectedTotalPrincipal:  sdk.NewInt(100000000000000),
 | 
									expectedTotalPrincipal:  sdkmath.NewInt(100000000000000),
 | 
				
			||||||
				expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC).Add(time.Duration(int(time.Second) * 7)),
 | 
									expectedLastAccrualTime: time.Date(2020, 12, 15, 14, 0, 0, 0, time.UTC).Add(time.Duration(int(time.Second) * 7)),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -400,10 +401,10 @@ func (suite *InterestTestSuite) TestMultipleCDPInterest() {
 | 
				
			|||||||
		expectedFeesPerCDP           sdk.Coin
 | 
							expectedFeesPerCDP           sdk.Coin
 | 
				
			||||||
		expectedTotalPrincipalPerCDP sdk.Coin
 | 
							expectedTotalPrincipalPerCDP sdk.Coin
 | 
				
			||||||
		expectedFeesUpdatedTime      time.Time
 | 
							expectedFeesUpdatedTime      time.Time
 | 
				
			||||||
		expectedTotalPrincipal       sdk.Int
 | 
							expectedTotalPrincipal       sdkmath.Int
 | 
				
			||||||
		expectedDebtBalance          sdk.Int
 | 
							expectedDebtBalance          sdkmath.Int
 | 
				
			||||||
		expectedStableBalance        sdk.Int
 | 
							expectedStableBalance        sdkmath.Int
 | 
				
			||||||
		expectedSumOfCDPPrincipal    sdk.Int
 | 
							expectedSumOfCDPPrincipal    sdkmath.Int
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	type test struct {
 | 
						type test struct {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/store/prefix"
 | 
						"github.com/cosmos/cosmos-sdk/store/prefix"
 | 
				
			||||||
	storetypes "github.com/cosmos/cosmos-sdk/store/types"
 | 
						storetypes "github.com/cosmos/cosmos-sdk/store/types"
 | 
				
			||||||
@ -119,7 +120,7 @@ func (k Keeper) IterateCdpsByCollateralRatio(ctx sdk.Context, collateralType str
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetSliceOfCDPsByRatioAndType returns a slice of cdps of size equal to the input cutoffCount
 | 
					// GetSliceOfCDPsByRatioAndType returns a slice of cdps of size equal to the input cutoffCount
 | 
				
			||||||
// sorted by target ratio in ascending order (ie, the lowest collateral:debt ratio cdps are returned first)
 | 
					// sorted by target ratio in ascending order (ie, the lowest collateral:debt ratio cdps are returned first)
 | 
				
			||||||
func (k Keeper) GetSliceOfCDPsByRatioAndType(ctx sdk.Context, cutoffCount sdk.Int, targetRatio sdk.Dec, collateralType string) (cdps types.CDPs) {
 | 
					func (k Keeper) GetSliceOfCDPsByRatioAndType(ctx sdk.Context, cutoffCount sdkmath.Int, targetRatio sdk.Dec, collateralType string) (cdps types.CDPs) {
 | 
				
			||||||
	count := sdk.ZeroInt()
 | 
						count := sdk.ZeroInt()
 | 
				
			||||||
	k.IterateCdpsByCollateralRatio(ctx, collateralType, targetRatio, func(cdp types.CDP) bool {
 | 
						k.IterateCdpsByCollateralRatio(ctx, collateralType, targetRatio, func(cdp types.CDP) bool {
 | 
				
			||||||
		cdps = append(cdps, cdp)
 | 
							cdps = append(cdps, cdp)
 | 
				
			||||||
@ -194,7 +195,7 @@ func (k Keeper) DecrementTotalPrincipal(ctx sdk.Context, collateralType string,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetTotalPrincipal returns the total amount of principal that has been drawn for a particular collateral
 | 
					// GetTotalPrincipal returns the total amount of principal that has been drawn for a particular collateral
 | 
				
			||||||
func (k Keeper) GetTotalPrincipal(ctx sdk.Context, collateralType, principalDenom string) (total sdk.Int) {
 | 
					func (k Keeper) GetTotalPrincipal(ctx sdk.Context, collateralType, principalDenom string) (total sdkmath.Int) {
 | 
				
			||||||
	store := prefix.NewStore(ctx.KVStore(k.key), types.PrincipalKeyPrefix)
 | 
						store := prefix.NewStore(ctx.KVStore(k.key), types.PrincipalKeyPrefix)
 | 
				
			||||||
	bz := store.Get([]byte(collateralType + principalDenom))
 | 
						bz := store.Get([]byte(collateralType + principalDenom))
 | 
				
			||||||
	if bz == nil {
 | 
						if bz == nil {
 | 
				
			||||||
@ -208,7 +209,7 @@ func (k Keeper) GetTotalPrincipal(ctx sdk.Context, collateralType, principalDeno
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SetTotalPrincipal sets the total amount of principal that has been drawn for the input collateral
 | 
					// SetTotalPrincipal sets the total amount of principal that has been drawn for the input collateral
 | 
				
			||||||
func (k Keeper) SetTotalPrincipal(ctx sdk.Context, collateralType, principalDenom string, total sdk.Int) {
 | 
					func (k Keeper) SetTotalPrincipal(ctx sdk.Context, collateralType, principalDenom string, total sdkmath.Int) {
 | 
				
			||||||
	store := prefix.NewStore(ctx.KVStore(k.key), types.PrincipalKeyPrefix)
 | 
						store := prefix.NewStore(ctx.KVStore(k.key), types.PrincipalKeyPrefix)
 | 
				
			||||||
	_, found := k.GetCollateral(ctx, collateralType)
 | 
						_, found := k.GetCollateral(ctx, collateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package keeper_test
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -36,8 +37,8 @@ func BenchmarkAccountIteration(b *testing.B) {
 | 
				
			|||||||
		{name: "1000000 Accounts, With Coins", numberAccounts: 1000000, coins: true},
 | 
							{name: "1000000 Accounts, With Coins", numberAccounts: 1000000, coins: true},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	coins := sdk.Coins{
 | 
						coins := sdk.Coins{
 | 
				
			||||||
		sdk.NewCoin("xrp", sdk.NewInt(1000000000)),
 | 
							sdk.NewCoin("xrp", sdkmath.NewInt(1000000000)),
 | 
				
			||||||
		sdk.NewCoin("usdx", sdk.NewInt(1000000000)),
 | 
							sdk.NewCoin("usdx", sdkmath.NewInt(1000000000)),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, bm := range benchmarks {
 | 
						for _, bm := range benchmarks {
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package keeper
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/cdp/types"
 | 
						"github.com/kava-labs/kava/x/cdp/types"
 | 
				
			||||||
@ -82,7 +83,7 @@ func (k Keeper) getLiquidationPenalty(ctx sdk.Context, collateralType string) sd
 | 
				
			|||||||
	return cp.LiquidationPenalty
 | 
						return cp.LiquidationPenalty
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (k Keeper) getAuctionSize(ctx sdk.Context, collateralType string) sdk.Int {
 | 
					func (k Keeper) getAuctionSize(ctx sdk.Context, collateralType string) sdkmath.Int {
 | 
				
			||||||
	cp, found := k.GetCollateral(ctx, collateralType)
 | 
						cp, found := k.GetCollateral(ctx, collateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		panic(fmt.Sprintf("collateral not found: %s", collateralType))
 | 
							panic(fmt.Sprintf("collateral not found: %s", collateralType))
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	abci "github.com/tendermint/tendermint/abci/types"
 | 
						abci "github.com/tendermint/tendermint/abci/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/client"
 | 
						"github.com/cosmos/cosmos-sdk/client"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
@ -38,7 +39,7 @@ func NewQuerier(keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier
 | 
				
			|||||||
		case types.QueryGetTotalCollateral:
 | 
							case types.QueryGetTotalCollateral:
 | 
				
			||||||
			return queryGetTotalCollateral(ctx, req, keeper, legacyQuerierCdc)
 | 
								return queryGetTotalCollateral(ctx, req, keeper, legacyQuerierCdc)
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint %s", types.ModuleName, path[0])
 | 
								return nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint %s", types.ModuleName, path[0])
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -48,24 +49,24 @@ func queryGetCdp(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, legacyQu
 | 
				
			|||||||
	var requestParams types.QueryCdpParams
 | 
						var requestParams types.QueryCdpParams
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, valid := keeper.GetCollateral(ctx, requestParams.CollateralType)
 | 
						_, valid := keeper.GetCollateral(ctx, requestParams.CollateralType)
 | 
				
			||||||
	if !valid {
 | 
						if !valid {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(types.ErrInvalidCollateral, requestParams.CollateralType)
 | 
							return nil, errorsmod.Wrap(types.ErrInvalidCollateral, requestParams.CollateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cdp, found := keeper.GetCdpByOwnerAndCollateralType(ctx, requestParams.Owner, requestParams.CollateralType)
 | 
						cdp, found := keeper.GetCdpByOwnerAndCollateralType(ctx, requestParams.Owner, requestParams.CollateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return nil, sdkerrors.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", requestParams.Owner, requestParams.CollateralType)
 | 
							return nil, errorsmod.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", requestParams.Owner, requestParams.CollateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	augmentedCDP := keeper.LoadAugmentedCDP(ctx, cdp)
 | 
						augmentedCDP := keeper.LoadAugmentedCDP(ctx, cdp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, augmentedCDP)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, augmentedCDP)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -75,24 +76,24 @@ func queryGetDeposits(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, leg
 | 
				
			|||||||
	var requestParams types.QueryCdpDeposits
 | 
						var requestParams types.QueryCdpDeposits
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, valid := keeper.GetCollateral(ctx, requestParams.CollateralType)
 | 
						_, valid := keeper.GetCollateral(ctx, requestParams.CollateralType)
 | 
				
			||||||
	if !valid {
 | 
						if !valid {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(types.ErrInvalidCollateral, requestParams.CollateralType)
 | 
							return nil, errorsmod.Wrap(types.ErrInvalidCollateral, requestParams.CollateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cdp, found := keeper.GetCdpByOwnerAndCollateralType(ctx, requestParams.Owner, requestParams.CollateralType)
 | 
						cdp, found := keeper.GetCdpByOwnerAndCollateralType(ctx, requestParams.Owner, requestParams.CollateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return nil, sdkerrors.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", requestParams.Owner, requestParams.CollateralType)
 | 
							return nil, errorsmod.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", requestParams.Owner, requestParams.CollateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	deposits := keeper.GetDeposits(ctx, cdp.ID)
 | 
						deposits := keeper.GetDeposits(ctx, cdp.ID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, deposits)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, deposits)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -102,16 +103,16 @@ func queryGetCdpsByRatio(ctx sdk.Context, req abci.RequestQuery, keeper Keeper,
 | 
				
			|||||||
	var requestParams types.QueryCdpsByRatioParams
 | 
						var requestParams types.QueryCdpsByRatioParams
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, valid := keeper.GetCollateral(ctx, requestParams.CollateralType)
 | 
						_, valid := keeper.GetCollateral(ctx, requestParams.CollateralType)
 | 
				
			||||||
	if !valid {
 | 
						if !valid {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(types.ErrInvalidCollateral, requestParams.CollateralType)
 | 
							return nil, errorsmod.Wrap(types.ErrInvalidCollateral, requestParams.CollateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ratio, err := keeper.CalculateCollateralizationRatioFromAbsoluteRatio(ctx, requestParams.CollateralType, requestParams.Ratio, "liquidation")
 | 
						ratio, err := keeper.CalculateCollateralizationRatioFromAbsoluteRatio(ctx, requestParams.CollateralType, requestParams.Ratio, "liquidation")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(err, "couldn't get collateralization ratio from absolute ratio")
 | 
							return nil, errorsmod.Wrap(err, "couldn't get collateralization ratio from absolute ratio")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cdps := keeper.GetAllCdpsByCollateralTypeAndRatio(ctx, requestParams.CollateralType, ratio)
 | 
						cdps := keeper.GetAllCdpsByCollateralTypeAndRatio(ctx, requestParams.CollateralType, ratio)
 | 
				
			||||||
@ -123,7 +124,7 @@ func queryGetCdpsByRatio(ctx sdk.Context, req abci.RequestQuery, keeper Keeper,
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, augmentedCDPs)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, augmentedCDPs)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -133,11 +134,11 @@ func queryGetCdpsByCollateralType(ctx sdk.Context, req abci.RequestQuery, keeper
 | 
				
			|||||||
	var requestParams types.QueryCdpsByCollateralTypeParams
 | 
						var requestParams types.QueryCdpsByCollateralTypeParams
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, &requestParams)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, valid := keeper.GetCollateral(ctx, requestParams.CollateralType)
 | 
						_, valid := keeper.GetCollateral(ctx, requestParams.CollateralType)
 | 
				
			||||||
	if !valid {
 | 
						if !valid {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(types.ErrInvalidCollateral, requestParams.CollateralType)
 | 
							return nil, errorsmod.Wrap(types.ErrInvalidCollateral, requestParams.CollateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cdps := keeper.GetAllCdpsByCollateralType(ctx, requestParams.CollateralType)
 | 
						cdps := keeper.GetAllCdpsByCollateralType(ctx, requestParams.CollateralType)
 | 
				
			||||||
@ -149,7 +150,7 @@ func queryGetCdpsByCollateralType(ctx sdk.Context, req abci.RequestQuery, keeper
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, augmentedCDPs)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, augmentedCDPs)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -162,7 +163,7 @@ func queryGetParams(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, legac
 | 
				
			|||||||
	// Encode results
 | 
						// Encode results
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, params)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, params)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -180,7 +181,7 @@ func queryGetAccounts(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, leg
 | 
				
			|||||||
	// Encode results
 | 
						// Encode results
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, accounts)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, accounts)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -190,18 +191,18 @@ func queryGetCdps(ctx sdk.Context, req abci.RequestQuery, keeper Keeper, legacyQ
 | 
				
			|||||||
	var params types.QueryCdpsParams
 | 
						var params types.QueryCdpsParams
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Filter CDPs
 | 
						// Filter CDPs
 | 
				
			||||||
	filteredCDPs, err := FilterCDPs(ctx, keeper, params)
 | 
						filteredCDPs, err := FilterCDPs(ctx, keeper, params)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, filteredCDPs)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, filteredCDPs)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
@ -212,7 +213,7 @@ func queryGetTotalPrincipal(ctx sdk.Context, req abci.RequestQuery, keeper Keepe
 | 
				
			|||||||
	var params types.QueryGetTotalPrincipalParams
 | 
						var params types.QueryGetTotalPrincipalParams
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var queryCollateralTypes []string
 | 
						var queryCollateralTypes []string
 | 
				
			||||||
@ -243,7 +244,7 @@ func queryGetTotalPrincipal(ctx sdk.Context, req abci.RequestQuery, keeper Keepe
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, collateralPrincipals)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, collateralPrincipals)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
@ -254,7 +255,7 @@ func queryGetTotalCollateral(ctx sdk.Context, req abci.RequestQuery, keeper Keep
 | 
				
			|||||||
	var request types.QueryGetTotalCollateralParams
 | 
						var request types.QueryGetTotalCollateralParams
 | 
				
			||||||
	err := legacyQuerierCdc.UnmarshalJSON(req.Data, &request)
 | 
						err := legacyQuerierCdc.UnmarshalJSON(req.Data, &request)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	params := keeper.GetParams(ctx)
 | 
						params := keeper.GetParams(ctx)
 | 
				
			||||||
@ -332,7 +333,7 @@ func queryGetTotalCollateral(ctx sdk.Context, req abci.RequestQuery, keeper Keep
 | 
				
			|||||||
	// encode response
 | 
						// encode response
 | 
				
			||||||
	bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, response)
 | 
						bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, response)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
							return nil, errorsmod.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return bz, nil
 | 
						return bz, nil
 | 
				
			||||||
 | 
				
			|||||||
@ -3,8 +3,9 @@ package keeper
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/cdp/types"
 | 
						"github.com/kava-labs/kava/x/cdp/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -15,7 +16,7 @@ import (
 | 
				
			|||||||
func (k Keeper) AttemptKeeperLiquidation(ctx sdk.Context, keeper, owner sdk.AccAddress, collateralType string) error {
 | 
					func (k Keeper) AttemptKeeperLiquidation(ctx sdk.Context, keeper, owner sdk.AccAddress, collateralType string) error {
 | 
				
			||||||
	cdp, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
						cdp, found := k.GetCdpByOwnerAndCollateralType(ctx, owner, collateralType)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", owner, collateralType)
 | 
							return errorsmod.Wrapf(types.ErrCdpNotFound, "owner %s, denom %s", owner, collateralType)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	k.hooks.BeforeCDPModified(ctx, cdp)
 | 
						k.hooks.BeforeCDPModified(ctx, cdp)
 | 
				
			||||||
	cdp = k.SynchronizeInterest(ctx, cdp)
 | 
						cdp = k.SynchronizeInterest(ctx, cdp)
 | 
				
			||||||
@ -87,7 +88,7 @@ func (k Keeper) SeizeCollateral(ctx sdk.Context, cdp types.CDP) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// LiquidateCdps seizes collateral from all CDPs below the input liquidation ratio
 | 
					// LiquidateCdps seizes collateral from all CDPs below the input liquidation ratio
 | 
				
			||||||
func (k Keeper) LiquidateCdps(ctx sdk.Context, marketID string, collateralType string, liquidationRatio sdk.Dec, count sdk.Int) error {
 | 
					func (k Keeper) LiquidateCdps(ctx sdk.Context, marketID string, collateralType string, liquidationRatio sdk.Dec, count sdkmath.Int) error {
 | 
				
			||||||
	price, err := k.pricefeedKeeper.GetCurrentPrice(ctx, marketID)
 | 
						price, err := k.pricefeedKeeper.GetCurrentPrice(ctx, marketID)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@ -112,7 +113,7 @@ func (k Keeper) LiquidateCdps(ctx sdk.Context, marketID string, collateralType s
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ApplyLiquidationPenalty multiplies the input debt amount by the liquidation penalty
 | 
					// ApplyLiquidationPenalty multiplies the input debt amount by the liquidation penalty
 | 
				
			||||||
func (k Keeper) ApplyLiquidationPenalty(ctx sdk.Context, collateralType string, debt sdk.Int) sdk.Int {
 | 
					func (k Keeper) ApplyLiquidationPenalty(ctx sdk.Context, collateralType string, debt sdkmath.Int) sdkmath.Int {
 | 
				
			||||||
	penalty := k.getLiquidationPenalty(ctx, collateralType)
 | 
						penalty := k.getLiquidationPenalty(ctx, collateralType)
 | 
				
			||||||
	return sdk.NewDecFromInt(debt).Mul(penalty).RoundInt()
 | 
						return sdk.NewDecFromInt(debt).Mul(penalty).RoundInt()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -125,12 +126,12 @@ func (k Keeper) ValidateLiquidation(ctx sdk.Context, collateral sdk.Coin, collat
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	liquidationRatio := k.getLiquidationRatio(ctx, collateralType)
 | 
						liquidationRatio := k.getLiquidationRatio(ctx, collateralType)
 | 
				
			||||||
	if collateralizationRatio.GTE(liquidationRatio) {
 | 
						if collateralizationRatio.GTE(liquidationRatio) {
 | 
				
			||||||
		return sdkerrors.Wrapf(types.ErrNotLiquidatable, "collateral %s, collateral ratio %s, liquidation ratio %s", collateral.Denom, collateralizationRatio, liquidationRatio)
 | 
							return errorsmod.Wrapf(types.ErrNotLiquidatable, "collateral %s, collateral ratio %s, liquidation ratio %s", collateral.Denom, collateralizationRatio, liquidationRatio)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (k Keeper) getModAccountDebt(ctx sdk.Context, accountName string) sdk.Int {
 | 
					func (k Keeper) getModAccountDebt(ctx sdk.Context, accountName string) sdkmath.Int {
 | 
				
			||||||
	macc := k.accountKeeper.GetModuleAccount(ctx, accountName)
 | 
						macc := k.accountKeeper.GetModuleAccount(ctx, accountName)
 | 
				
			||||||
	return k.bankKeeper.GetBalance(ctx, macc.GetAddress(), k.GetDebtDenom(ctx)).Amount
 | 
						return k.bankKeeper.GetBalance(ctx, macc.GetAddress(), k.GetDebtDenom(ctx)).Amount
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -138,7 +139,7 @@ func (k Keeper) getModAccountDebt(ctx sdk.Context, accountName string) sdk.Int {
 | 
				
			|||||||
func (k Keeper) payoutKeeperLiquidationReward(ctx sdk.Context, keeper sdk.AccAddress, cdp types.CDP) (types.CDP, error) {
 | 
					func (k Keeper) payoutKeeperLiquidationReward(ctx sdk.Context, keeper sdk.AccAddress, cdp types.CDP) (types.CDP, error) {
 | 
				
			||||||
	collateralParam, found := k.GetCollateral(ctx, cdp.Type)
 | 
						collateralParam, found := k.GetCollateral(ctx, cdp.Type)
 | 
				
			||||||
	if !found {
 | 
						if !found {
 | 
				
			||||||
		return types.CDP{}, sdkerrors.Wrapf(types.ErrInvalidCollateral, "%s", cdp.Type)
 | 
							return types.CDP{}, errorsmod.Wrapf(types.ErrInvalidCollateral, "%s", cdp.Type)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	reward := sdk.NewDecFromInt(cdp.Collateral.Amount).Mul(collateralParam.KeeperRewardPercentage).RoundInt()
 | 
						reward := sdk.NewDecFromInt(cdp.Collateral.Amount).Mul(collateralParam.KeeperRewardPercentage).RoundInt()
 | 
				
			||||||
	rewardCoin := sdk.NewCoin(cdp.Collateral.Denom, reward)
 | 
						rewardCoin := sdk.NewCoin(cdp.Collateral.Denom, reward)
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/types/simulation"
 | 
						"github.com/cosmos/cosmos-sdk/types/simulation"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -278,7 +279,7 @@ func (suite *SeizeTestSuite) TestKeeperLiquidation() {
 | 
				
			|||||||
						MaxBid:            c("usdx", 1366663250),
 | 
											MaxBid:            c("usdx", 1366663250),
 | 
				
			||||||
						LotReturns: auctiontypes.WeightedAddresses{
 | 
											LotReturns: auctiontypes.WeightedAddresses{
 | 
				
			||||||
							Addresses: []sdk.AccAddress{addr},
 | 
												Addresses: []sdk.AccAddress{addr},
 | 
				
			||||||
							Weights:   []sdk.Int{sdk.NewInt(9900000)},
 | 
												Weights:   []sdkmath.Int{sdkmath.NewInt(9900000)},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
@ -317,7 +318,7 @@ func (suite *SeizeTestSuite) TestKeeperLiquidation() {
 | 
				
			|||||||
						MaxBid:            c("usdx", 1366663250),
 | 
											MaxBid:            c("usdx", 1366663250),
 | 
				
			||||||
						LotReturns: auctiontypes.WeightedAddresses{
 | 
											LotReturns: auctiontypes.WeightedAddresses{
 | 
				
			||||||
							Addresses: []sdk.AccAddress{addr},
 | 
												Addresses: []sdk.AccAddress{addr},
 | 
				
			||||||
							Weights:   []sdk.Int{sdk.NewInt(9900000)},
 | 
												Weights:   []sdkmath.Int{sdkmath.NewInt(9900000)},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
@ -496,7 +497,7 @@ func (suite *SeizeTestSuite) TestBeginBlockerLiquidation() {
 | 
				
			|||||||
						MaxBid:            c("usdx", 1025000000),
 | 
											MaxBid:            c("usdx", 1025000000),
 | 
				
			||||||
						LotReturns: auctiontypes.WeightedAddresses{
 | 
											LotReturns: auctiontypes.WeightedAddresses{
 | 
				
			||||||
							Addresses: []sdk.AccAddress{addr},
 | 
												Addresses: []sdk.AccAddress{addr},
 | 
				
			||||||
							Weights:   []sdk.Int{sdk.NewInt(10000000)},
 | 
												Weights:   []sdkmath.Int{sdkmath.NewInt(10000000)},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package v0_15
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -28,10 +29,10 @@ type Params struct {
 | 
				
			|||||||
	CollateralParams        CollateralParams `json:"collateral_params" yaml:"collateral_params"`
 | 
						CollateralParams        CollateralParams `json:"collateral_params" yaml:"collateral_params"`
 | 
				
			||||||
	DebtParam               DebtParam        `json:"debt_param" yaml:"debt_param"`
 | 
						DebtParam               DebtParam        `json:"debt_param" yaml:"debt_param"`
 | 
				
			||||||
	GlobalDebtLimit         sdk.Coin         `json:"global_debt_limit" yaml:"global_debt_limit"`
 | 
						GlobalDebtLimit         sdk.Coin         `json:"global_debt_limit" yaml:"global_debt_limit"`
 | 
				
			||||||
	SurplusAuctionThreshold sdk.Int          `json:"surplus_auction_threshold" yaml:"surplus_auction_threshold"`
 | 
						SurplusAuctionThreshold sdkmath.Int      `json:"surplus_auction_threshold" yaml:"surplus_auction_threshold"`
 | 
				
			||||||
	SurplusAuctionLot       sdk.Int          `json:"surplus_auction_lot" yaml:"surplus_auction_lot"`
 | 
						SurplusAuctionLot       sdkmath.Int      `json:"surplus_auction_lot" yaml:"surplus_auction_lot"`
 | 
				
			||||||
	DebtAuctionThreshold    sdk.Int          `json:"debt_auction_threshold" yaml:"debt_auction_threshold"`
 | 
						DebtAuctionThreshold    sdkmath.Int      `json:"debt_auction_threshold" yaml:"debt_auction_threshold"`
 | 
				
			||||||
	DebtAuctionLot          sdk.Int          `json:"debt_auction_lot" yaml:"debt_auction_lot"`
 | 
						DebtAuctionLot          sdkmath.Int      `json:"debt_auction_lot" yaml:"debt_auction_lot"`
 | 
				
			||||||
	CircuitBreaker          bool             `json:"circuit_breaker" yaml:"circuit_breaker"`
 | 
						CircuitBreaker          bool             `json:"circuit_breaker" yaml:"circuit_breaker"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -40,19 +41,19 @@ type CollateralParams []CollateralParam
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// CollateralParam governance parameters for each collateral type within the cdp module
 | 
					// CollateralParam governance parameters for each collateral type within the cdp module
 | 
				
			||||||
type CollateralParam struct {
 | 
					type CollateralParam struct {
 | 
				
			||||||
	Denom                            string   `json:"denom" yaml:"denom"` // Coin name of collateral type
 | 
						Denom                            string      `json:"denom" yaml:"denom"` // Coin name of collateral type
 | 
				
			||||||
	Type                             string   `json:"type" yaml:"type"`
 | 
						Type                             string      `json:"type" yaml:"type"`
 | 
				
			||||||
	LiquidationRatio                 sdk.Dec  `json:"liquidation_ratio" yaml:"liquidation_ratio"`     // The ratio (Collateral (priced in stable coin) / Debt) under which a CDP will be liquidated
 | 
						LiquidationRatio                 sdk.Dec     `json:"liquidation_ratio" yaml:"liquidation_ratio"`     // The ratio (Collateral (priced in stable coin) / Debt) under which a CDP will be liquidated
 | 
				
			||||||
	DebtLimit                        sdk.Coin `json:"debt_limit" yaml:"debt_limit"`                   // Maximum amount of debt allowed to be drawn from this collateral type
 | 
						DebtLimit                        sdk.Coin    `json:"debt_limit" yaml:"debt_limit"`                   // Maximum amount of debt allowed to be drawn from this collateral type
 | 
				
			||||||
	StabilityFee                     sdk.Dec  `json:"stability_fee" yaml:"stability_fee"`             // per second stability fee for loans opened using this collateral
 | 
						StabilityFee                     sdk.Dec     `json:"stability_fee" yaml:"stability_fee"`             // per second stability fee for loans opened using this collateral
 | 
				
			||||||
	AuctionSize                      sdk.Int  `json:"auction_size" yaml:"auction_size"`               // Max amount of collateral to sell off in any one auction.
 | 
						AuctionSize                      sdkmath.Int `json:"auction_size" yaml:"auction_size"`               // Max amount of collateral to sell off in any one auction.
 | 
				
			||||||
	LiquidationPenalty               sdk.Dec  `json:"liquidation_penalty" yaml:"liquidation_penalty"` // percentage penalty (between [0, 1]) applied to a cdp if it is liquidated
 | 
						LiquidationPenalty               sdk.Dec     `json:"liquidation_penalty" yaml:"liquidation_penalty"` // percentage penalty (between [0, 1]) applied to a cdp if it is liquidated
 | 
				
			||||||
	Prefix                           byte     `json:"prefix" yaml:"prefix"`
 | 
						Prefix                           byte        `json:"prefix" yaml:"prefix"`
 | 
				
			||||||
	SpotMarketID                     string   `json:"spot_market_id" yaml:"spot_market_id"`                                           // marketID of the spot price of the asset from the pricefeed - used for opening CDPs, depositing, withdrawing
 | 
						SpotMarketID                     string      `json:"spot_market_id" yaml:"spot_market_id"`                                           // marketID of the spot price of the asset from the pricefeed - used for opening CDPs, depositing, withdrawing
 | 
				
			||||||
	LiquidationMarketID              string   `json:"liquidation_market_id" yaml:"liquidation_market_id"`                             // marketID of the pricefeed used for liquidation
 | 
						LiquidationMarketID              string      `json:"liquidation_market_id" yaml:"liquidation_market_id"`                             // marketID of the pricefeed used for liquidation
 | 
				
			||||||
	KeeperRewardPercentage           sdk.Dec  `json:"keeper_reward_percentage" yaml:"keeper_reward_percentage"`                       // the percentage of a CDPs collateral that gets rewarded to a keeper that liquidates the position
 | 
						KeeperRewardPercentage           sdk.Dec     `json:"keeper_reward_percentage" yaml:"keeper_reward_percentage"`                       // the percentage of a CDPs collateral that gets rewarded to a keeper that liquidates the position
 | 
				
			||||||
	CheckCollateralizationIndexCount sdk.Int  `json:"check_collateralization_index_count" yaml:"check_collateralization_index_count"` // the number of cdps that will be checked for liquidation in the begin blocker
 | 
						CheckCollateralizationIndexCount sdkmath.Int `json:"check_collateralization_index_count" yaml:"check_collateralization_index_count"` // the number of cdps that will be checked for liquidation in the begin blocker
 | 
				
			||||||
	ConversionFactor                 sdk.Int  `json:"conversion_factor" yaml:"conversion_factor"`                                     // factor for converting internal units to one base unit of collateral
 | 
						ConversionFactor                 sdkmath.Int `json:"conversion_factor" yaml:"conversion_factor"`                                     // factor for converting internal units to one base unit of collateral
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CDPs a collection of CDP objects
 | 
					// CDPs a collection of CDP objects
 | 
				
			||||||
@ -95,14 +96,14 @@ type GenesisTotalPrincipals []GenesisTotalPrincipal
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GenesisTotalPrincipal stores the total principal and its corresponding collateral type
 | 
					// GenesisTotalPrincipal stores the total principal and its corresponding collateral type
 | 
				
			||||||
type GenesisTotalPrincipal struct {
 | 
					type GenesisTotalPrincipal struct {
 | 
				
			||||||
	CollateralType string  `json:"collateral_type" yaml:"collateral_type"`
 | 
						CollateralType string      `json:"collateral_type" yaml:"collateral_type"`
 | 
				
			||||||
	TotalPrincipal sdk.Int `json:"total_principal" yaml:"total_principal"`
 | 
						TotalPrincipal sdkmath.Int `json:"total_principal" yaml:"total_principal"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DebtParam governance params for debt assets
 | 
					// DebtParam governance params for debt assets
 | 
				
			||||||
type DebtParam struct {
 | 
					type DebtParam struct {
 | 
				
			||||||
	Denom            string  `json:"denom" yaml:"denom"`
 | 
						Denom            string      `json:"denom" yaml:"denom"`
 | 
				
			||||||
	ReferenceAsset   string  `json:"reference_asset" yaml:"reference_asset"`
 | 
						ReferenceAsset   string      `json:"reference_asset" yaml:"reference_asset"`
 | 
				
			||||||
	ConversionFactor sdk.Int `json:"conversion_factor" yaml:"conversion_factor"`
 | 
						ConversionFactor sdkmath.Int `json:"conversion_factor" yaml:"conversion_factor"`
 | 
				
			||||||
	DebtFloor        sdk.Int `json:"debt_floor" yaml:"debt_floor"` // minimum active loan size, used to prevent dust
 | 
						DebtFloor        sdkmath.Int `json:"debt_floor" yaml:"debt_floor"` // minimum active loan size, used to prevent dust
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
@ -77,33 +78,33 @@ func (s *migrateTestSuite) TestMigrate_GenState() {
 | 
				
			|||||||
					DebtLimit:                        sdk.NewInt64Coin("usdx", 500000000000),
 | 
										DebtLimit:                        sdk.NewInt64Coin("usdx", 500000000000),
 | 
				
			||||||
					StabilityFee:                     sdk.MustNewDecFromStr("1.012"),
 | 
										StabilityFee:                     sdk.MustNewDecFromStr("1.012"),
 | 
				
			||||||
					LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
										LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
					AuctionSize:                      sdk.NewInt(70),
 | 
										AuctionSize:                      sdkmath.NewInt(70),
 | 
				
			||||||
					SpotMarketID:                     "xrp:usd",
 | 
										SpotMarketID:                     "xrp:usd",
 | 
				
			||||||
					LiquidationMarketID:              "xrp:usd",
 | 
										LiquidationMarketID:              "xrp:usd",
 | 
				
			||||||
					KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
										KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
					CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
										CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					ConversionFactor:                 sdk.NewInt(6),
 | 
										ConversionFactor:                 sdkmath.NewInt(6),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			DebtParam: v015cdp.DebtParam{
 | 
								DebtParam: v015cdp.DebtParam{
 | 
				
			||||||
				Denom:            "usdx",
 | 
									Denom:            "usdx",
 | 
				
			||||||
				ReferenceAsset:   "usd",
 | 
									ReferenceAsset:   "usd",
 | 
				
			||||||
				ConversionFactor: sdk.NewInt(6),
 | 
									ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
				DebtFloor:        sdk.NewInt(100),
 | 
									DebtFloor:        sdkmath.NewInt(100),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			GlobalDebtLimit:         sdk.NewInt64Coin("usdx", 1000000000000),
 | 
								GlobalDebtLimit:         sdk.NewInt64Coin("usdx", 1000000000000),
 | 
				
			||||||
			SurplusAuctionThreshold: sdk.NewInt(6),
 | 
								SurplusAuctionThreshold: sdkmath.NewInt(6),
 | 
				
			||||||
			SurplusAuctionLot:       sdk.NewInt(7),
 | 
								SurplusAuctionLot:       sdkmath.NewInt(7),
 | 
				
			||||||
			DebtAuctionThreshold:    sdk.NewInt(8),
 | 
								DebtAuctionThreshold:    sdkmath.NewInt(8),
 | 
				
			||||||
			DebtAuctionLot:          sdk.NewInt(9),
 | 
								DebtAuctionLot:          sdkmath.NewInt(9),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		CDPs: v015cdp.CDPs{
 | 
							CDPs: v015cdp.CDPs{
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				ID:              2,
 | 
									ID:              2,
 | 
				
			||||||
				Owner:           s.addresses[0],
 | 
									Owner:           s.addresses[0],
 | 
				
			||||||
				Type:            "xrp-a",
 | 
									Type:            "xrp-a",
 | 
				
			||||||
				Collateral:      sdk.NewCoin("xrp", sdk.NewInt(2123)),
 | 
									Collateral:      sdk.NewCoin("xrp", sdkmath.NewInt(2123)),
 | 
				
			||||||
				Principal:       sdk.NewCoin("usdx", sdk.NewInt(100)),
 | 
									Principal:       sdk.NewCoin("usdx", sdkmath.NewInt(100)),
 | 
				
			||||||
				AccumulatedFees: sdk.NewCoin("usdx", sdk.ZeroInt()),
 | 
									AccumulatedFees: sdk.NewCoin("usdx", sdk.ZeroInt()),
 | 
				
			||||||
				FeesUpdated:     time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC),
 | 
									FeesUpdated:     time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC),
 | 
				
			||||||
				InterestFactor:  sdk.NewDec(1),
 | 
									InterestFactor:  sdk.NewDec(1),
 | 
				
			||||||
@ -113,12 +114,12 @@ func (s *migrateTestSuite) TestMigrate_GenState() {
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				CdpID:     1,
 | 
									CdpID:     1,
 | 
				
			||||||
				Depositor: s.addresses[0],
 | 
									Depositor: s.addresses[0],
 | 
				
			||||||
				Amount:    sdk.NewCoin("usdx", sdk.NewInt(100)),
 | 
									Amount:    sdk.NewCoin("usdx", sdkmath.NewInt(100)),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				CdpID:     2,
 | 
									CdpID:     2,
 | 
				
			||||||
				Depositor: s.addresses[1],
 | 
									Depositor: s.addresses[1],
 | 
				
			||||||
				Amount:    sdk.NewCoin("ukava", sdk.NewInt(1200)),
 | 
									Amount:    sdk.NewCoin("ukava", sdkmath.NewInt(1200)),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		PreviousAccumulationTimes: v015cdp.GenesisAccumulationTimes{
 | 
							PreviousAccumulationTimes: v015cdp.GenesisAccumulationTimes{
 | 
				
			||||||
@ -131,7 +132,7 @@ func (s *migrateTestSuite) TestMigrate_GenState() {
 | 
				
			|||||||
		TotalPrincipals: v015cdp.GenesisTotalPrincipals{
 | 
							TotalPrincipals: v015cdp.GenesisTotalPrincipals{
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				CollateralType: "usdx",
 | 
									CollateralType: "usdx",
 | 
				
			||||||
				TotalPrincipal: sdk.NewInt(1200),
 | 
									TotalPrincipal: sdkmath.NewInt(1200),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -148,33 +149,33 @@ func (s *migrateTestSuite) TestMigrate_GenState() {
 | 
				
			|||||||
					DebtLimit:                        sdk.NewInt64Coin("usdx", 500000000000),
 | 
										DebtLimit:                        sdk.NewInt64Coin("usdx", 500000000000),
 | 
				
			||||||
					StabilityFee:                     sdk.MustNewDecFromStr("1.012"),
 | 
										StabilityFee:                     sdk.MustNewDecFromStr("1.012"),
 | 
				
			||||||
					LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
										LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
					AuctionSize:                      sdk.NewInt(70),
 | 
										AuctionSize:                      sdkmath.NewInt(70),
 | 
				
			||||||
					SpotMarketID:                     "xrp:usd",
 | 
										SpotMarketID:                     "xrp:usd",
 | 
				
			||||||
					LiquidationMarketID:              "xrp:usd",
 | 
										LiquidationMarketID:              "xrp:usd",
 | 
				
			||||||
					KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
										KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
					CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
										CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					ConversionFactor:                 sdk.NewInt(6),
 | 
										ConversionFactor:                 sdkmath.NewInt(6),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			DebtParam: v016cdp.DebtParam{
 | 
								DebtParam: v016cdp.DebtParam{
 | 
				
			||||||
				Denom:            "usdx",
 | 
									Denom:            "usdx",
 | 
				
			||||||
				ReferenceAsset:   "usd",
 | 
									ReferenceAsset:   "usd",
 | 
				
			||||||
				ConversionFactor: sdk.NewInt(6),
 | 
									ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
				DebtFloor:        sdk.NewInt(100),
 | 
									DebtFloor:        sdkmath.NewInt(100),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			GlobalDebtLimit:         sdk.NewInt64Coin("usdx", 1000000000000),
 | 
								GlobalDebtLimit:         sdk.NewInt64Coin("usdx", 1000000000000),
 | 
				
			||||||
			SurplusAuctionThreshold: sdk.NewInt(6),
 | 
								SurplusAuctionThreshold: sdkmath.NewInt(6),
 | 
				
			||||||
			SurplusAuctionLot:       sdk.NewInt(7),
 | 
								SurplusAuctionLot:       sdkmath.NewInt(7),
 | 
				
			||||||
			DebtAuctionThreshold:    sdk.NewInt(8),
 | 
								DebtAuctionThreshold:    sdkmath.NewInt(8),
 | 
				
			||||||
			DebtAuctionLot:          sdk.NewInt(9),
 | 
								DebtAuctionLot:          sdkmath.NewInt(9),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		CDPs: v016cdp.CDPs{
 | 
							CDPs: v016cdp.CDPs{
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				ID:              2,
 | 
									ID:              2,
 | 
				
			||||||
				Owner:           s.addresses[0],
 | 
									Owner:           s.addresses[0],
 | 
				
			||||||
				Type:            "xrp-a",
 | 
									Type:            "xrp-a",
 | 
				
			||||||
				Collateral:      sdk.NewCoin("xrp", sdk.NewInt(2123)),
 | 
									Collateral:      sdk.NewCoin("xrp", sdkmath.NewInt(2123)),
 | 
				
			||||||
				Principal:       sdk.NewCoin("usdx", sdk.NewInt(100)),
 | 
									Principal:       sdk.NewCoin("usdx", sdkmath.NewInt(100)),
 | 
				
			||||||
				AccumulatedFees: sdk.NewCoin("usdx", sdk.ZeroInt()),
 | 
									AccumulatedFees: sdk.NewCoin("usdx", sdk.ZeroInt()),
 | 
				
			||||||
				FeesUpdated:     time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC),
 | 
									FeesUpdated:     time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC),
 | 
				
			||||||
				InterestFactor:  sdk.NewDec(1),
 | 
									InterestFactor:  sdk.NewDec(1),
 | 
				
			||||||
@ -184,12 +185,12 @@ func (s *migrateTestSuite) TestMigrate_GenState() {
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				CdpID:     1,
 | 
									CdpID:     1,
 | 
				
			||||||
				Depositor: s.addresses[0],
 | 
									Depositor: s.addresses[0],
 | 
				
			||||||
				Amount:    sdk.NewCoin("usdx", sdk.NewInt(100)),
 | 
									Amount:    sdk.NewCoin("usdx", sdkmath.NewInt(100)),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				CdpID:     2,
 | 
									CdpID:     2,
 | 
				
			||||||
				Depositor: s.addresses[1],
 | 
									Depositor: s.addresses[1],
 | 
				
			||||||
				Amount:    sdk.NewCoin("ukava", sdk.NewInt(1200)),
 | 
									Amount:    sdk.NewCoin("ukava", sdkmath.NewInt(1200)),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		PreviousAccumulationTimes: v016cdp.GenesisAccumulationTimes{
 | 
							PreviousAccumulationTimes: v016cdp.GenesisAccumulationTimes{
 | 
				
			||||||
@ -202,7 +203,7 @@ func (s *migrateTestSuite) TestMigrate_GenState() {
 | 
				
			|||||||
		TotalPrincipals: v016cdp.GenesisTotalPrincipals{
 | 
							TotalPrincipals: v016cdp.GenesisTotalPrincipals{
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				CollateralType: "usdx",
 | 
									CollateralType: "usdx",
 | 
				
			||||||
				TotalPrincipal: sdk.NewInt(1200),
 | 
									TotalPrincipal: sdkmath.NewInt(1200),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -48,7 +48,7 @@ package simulation
 | 
				
			|||||||
// 		return fmt.Sprintf("%s\n%s", depositA, depositB)
 | 
					// 		return fmt.Sprintf("%s\n%s", depositA, depositB)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	case bytes.Equal(kvA.Key[:1], types.PrincipalKeyPrefix):
 | 
					// 	case bytes.Equal(kvA.Key[:1], types.PrincipalKeyPrefix):
 | 
				
			||||||
// 		var totalA, totalB sdk.Int
 | 
					// 		var totalA, totalB sdkmath.Int
 | 
				
			||||||
// 		cdc.MustUnmarshalBinaryLengthPrefixed(kvA.Value, &totalA)
 | 
					// 		cdc.MustUnmarshalBinaryLengthPrefixed(kvA.Value, &totalA)
 | 
				
			||||||
// 		cdc.MustUnmarshalBinaryLengthPrefixed(kvB.Value, &totalB)
 | 
					// 		cdc.MustUnmarshalBinaryLengthPrefixed(kvB.Value, &totalB)
 | 
				
			||||||
// 		return fmt.Sprintf("%s\n%s", totalA, totalB)
 | 
					// 		return fmt.Sprintf("%s\n%s", totalA, totalB)
 | 
				
			||||||
 | 
				
			|||||||
@ -30,11 +30,11 @@ package simulation
 | 
				
			|||||||
// 			continue
 | 
					// 			continue
 | 
				
			||||||
// 		}
 | 
					// 		}
 | 
				
			||||||
// 		coinsToAdd := sdk.NewCoins(
 | 
					// 		coinsToAdd := sdk.NewCoins(
 | 
				
			||||||
// 			sdk.NewCoin("bnb", sdk.NewInt(int64(simState.Rand.Intn(100000000000)))),
 | 
					// 			sdk.NewCoin("bnb", sdkmath.NewInt(int64(simState.Rand.Intn(100000000000)))),
 | 
				
			||||||
// 			sdk.NewCoin("xrp", sdk.NewInt(int64(simState.Rand.Intn(100000000000)))),
 | 
					// 			sdk.NewCoin("xrp", sdkmath.NewInt(int64(simState.Rand.Intn(100000000000)))),
 | 
				
			||||||
// 			sdk.NewCoin("btc", sdk.NewInt(int64(simState.Rand.Intn(500000000)))),
 | 
					// 			sdk.NewCoin("btc", sdkmath.NewInt(int64(simState.Rand.Intn(500000000)))),
 | 
				
			||||||
// 			sdk.NewCoin("usdx", sdk.NewInt(int64(simState.Rand.Intn(1000000000)))),
 | 
					// 			sdk.NewCoin("usdx", sdkmath.NewInt(int64(simState.Rand.Intn(1000000000)))),
 | 
				
			||||||
// 			sdk.NewCoin("ukava", sdk.NewInt(int64(simState.Rand.Intn(500000000000)))),
 | 
					// 			sdk.NewCoin("ukava", sdkmath.NewInt(int64(simState.Rand.Intn(500000000000)))),
 | 
				
			||||||
// 		)
 | 
					// 		)
 | 
				
			||||||
// 		err := acc.SetCoins(acc.GetCoins().Add(coinsToAdd...))
 | 
					// 		err := acc.SetCoins(acc.GetCoins().Add(coinsToAdd...))
 | 
				
			||||||
// 		if err != nil {
 | 
					// 		if err != nil {
 | 
				
			||||||
@ -84,11 +84,11 @@ package simulation
 | 
				
			|||||||
// 						DebtLimit:           sdk.NewInt64Coin("usdx", 20000000000000),
 | 
					// 						DebtLimit:           sdk.NewInt64Coin("usdx", 20000000000000),
 | 
				
			||||||
// 						StabilityFee:        sdk.MustNewDecFromStr("1.000000004431822130"),
 | 
					// 						StabilityFee:        sdk.MustNewDecFromStr("1.000000004431822130"),
 | 
				
			||||||
// 						LiquidationPenalty:  sdk.MustNewDecFromStr("0.075"),
 | 
					// 						LiquidationPenalty:  sdk.MustNewDecFromStr("0.075"),
 | 
				
			||||||
// 						AuctionSize:         sdk.NewInt(100000000000),
 | 
					// 						AuctionSize:         sdkmath.NewInt(100000000000),
 | 
				
			||||||
// 						Prefix:              0x20,
 | 
					// 						Prefix:              0x20,
 | 
				
			||||||
// 						SpotMarketID:        "xrp:usd",
 | 
					// 						SpotMarketID:        "xrp:usd",
 | 
				
			||||||
// 						LiquidationMarketID: "xrp:usd",
 | 
					// 						LiquidationMarketID: "xrp:usd",
 | 
				
			||||||
// 						ConversionFactor:    sdk.NewInt(6),
 | 
					// 						ConversionFactor:    sdkmath.NewInt(6),
 | 
				
			||||||
// 					},
 | 
					// 					},
 | 
				
			||||||
// 					{
 | 
					// 					{
 | 
				
			||||||
// 						Denom:               "btc",
 | 
					// 						Denom:               "btc",
 | 
				
			||||||
@ -97,11 +97,11 @@ package simulation
 | 
				
			|||||||
// 						DebtLimit:           sdk.NewInt64Coin("usdx", 50000000000000),
 | 
					// 						DebtLimit:           sdk.NewInt64Coin("usdx", 50000000000000),
 | 
				
			||||||
// 						StabilityFee:        sdk.MustNewDecFromStr("1.000000000782997609"),
 | 
					// 						StabilityFee:        sdk.MustNewDecFromStr("1.000000000782997609"),
 | 
				
			||||||
// 						LiquidationPenalty:  sdk.MustNewDecFromStr("0.05"),
 | 
					// 						LiquidationPenalty:  sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
// 						AuctionSize:         sdk.NewInt(1000000000),
 | 
					// 						AuctionSize:         sdkmath.NewInt(1000000000),
 | 
				
			||||||
// 						Prefix:              0x21,
 | 
					// 						Prefix:              0x21,
 | 
				
			||||||
// 						SpotMarketID:        "btc:usd",
 | 
					// 						SpotMarketID:        "btc:usd",
 | 
				
			||||||
// 						LiquidationMarketID: "btc:usd",
 | 
					// 						LiquidationMarketID: "btc:usd",
 | 
				
			||||||
// 						ConversionFactor:    sdk.NewInt(8),
 | 
					// 						ConversionFactor:    sdkmath.NewInt(8),
 | 
				
			||||||
// 					},
 | 
					// 					},
 | 
				
			||||||
// 					{
 | 
					// 					{
 | 
				
			||||||
// 						Denom:               "bnb",
 | 
					// 						Denom:               "bnb",
 | 
				
			||||||
@ -110,18 +110,18 @@ package simulation
 | 
				
			|||||||
// 						DebtLimit:           sdk.NewInt64Coin("usdx", 30000000000000),
 | 
					// 						DebtLimit:           sdk.NewInt64Coin("usdx", 30000000000000),
 | 
				
			||||||
// 						StabilityFee:        sdk.MustNewDecFromStr("1.000000002293273137"),
 | 
					// 						StabilityFee:        sdk.MustNewDecFromStr("1.000000002293273137"),
 | 
				
			||||||
// 						LiquidationPenalty:  sdk.MustNewDecFromStr("0.15"),
 | 
					// 						LiquidationPenalty:  sdk.MustNewDecFromStr("0.15"),
 | 
				
			||||||
// 						AuctionSize:         sdk.NewInt(1000000000000),
 | 
					// 						AuctionSize:         sdkmath.NewInt(1000000000000),
 | 
				
			||||||
// 						Prefix:              0x22,
 | 
					// 						Prefix:              0x22,
 | 
				
			||||||
// 						SpotMarketID:        "bnb:usd",
 | 
					// 						SpotMarketID:        "bnb:usd",
 | 
				
			||||||
// 						LiquidationMarketID: "bnb:usd",
 | 
					// 						LiquidationMarketID: "bnb:usd",
 | 
				
			||||||
// 						ConversionFactor:    sdk.NewInt(8),
 | 
					// 						ConversionFactor:    sdkmath.NewInt(8),
 | 
				
			||||||
// 					},
 | 
					// 					},
 | 
				
			||||||
// 				},
 | 
					// 				},
 | 
				
			||||||
// 				DebtParam: types.DebtParam{
 | 
					// 				DebtParam: types.DebtParam{
 | 
				
			||||||
// 					Denom:            "usdx",
 | 
					// 					Denom:            "usdx",
 | 
				
			||||||
// 					ReferenceAsset:   "usd",
 | 
					// 					ReferenceAsset:   "usd",
 | 
				
			||||||
// 					ConversionFactor: sdk.NewInt(6),
 | 
					// 					ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
// 					DebtFloor:        sdk.NewInt(10000000),
 | 
					// 					DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
// 				},
 | 
					// 				},
 | 
				
			||||||
// 			},
 | 
					// 			},
 | 
				
			||||||
// 			StartingCdpID: types.DefaultCdpStartingID,
 | 
					// 			StartingCdpID: types.DefaultCdpStartingID,
 | 
				
			||||||
@ -162,18 +162,18 @@ package simulation
 | 
				
			|||||||
// 						DebtLimit:           sdk.NewInt64Coin("usdx", 100000000000000),
 | 
					// 						DebtLimit:           sdk.NewInt64Coin("usdx", 100000000000000),
 | 
				
			||||||
// 						StabilityFee:        sdk.MustNewDecFromStr("1.000000002293273137"),
 | 
					// 						StabilityFee:        sdk.MustNewDecFromStr("1.000000002293273137"),
 | 
				
			||||||
// 						LiquidationPenalty:  sdk.MustNewDecFromStr("0.075"),
 | 
					// 						LiquidationPenalty:  sdk.MustNewDecFromStr("0.075"),
 | 
				
			||||||
// 						AuctionSize:         sdk.NewInt(10000000000),
 | 
					// 						AuctionSize:         sdkmath.NewInt(10000000000),
 | 
				
			||||||
// 						Prefix:              0x20,
 | 
					// 						Prefix:              0x20,
 | 
				
			||||||
// 						SpotMarketID:        "bnb:usd",
 | 
					// 						SpotMarketID:        "bnb:usd",
 | 
				
			||||||
// 						LiquidationMarketID: "bnb:usd",
 | 
					// 						LiquidationMarketID: "bnb:usd",
 | 
				
			||||||
// 						ConversionFactor:    sdk.NewInt(8),
 | 
					// 						ConversionFactor:    sdkmath.NewInt(8),
 | 
				
			||||||
// 					},
 | 
					// 					},
 | 
				
			||||||
// 				},
 | 
					// 				},
 | 
				
			||||||
// 				DebtParam: types.DebtParam{
 | 
					// 				DebtParam: types.DebtParam{
 | 
				
			||||||
// 					Denom:            "usdx",
 | 
					// 					Denom:            "usdx",
 | 
				
			||||||
// 					ReferenceAsset:   "usd",
 | 
					// 					ReferenceAsset:   "usd",
 | 
				
			||||||
// 					ConversionFactor: sdk.NewInt(6),
 | 
					// 					ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
// 					DebtFloor:        sdk.NewInt(10000000),
 | 
					// 					DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
// 				},
 | 
					// 				},
 | 
				
			||||||
// 			},
 | 
					// 			},
 | 
				
			||||||
// 			StartingCdpID: types.DefaultCdpStartingID,
 | 
					// 			StartingCdpID: types.DefaultCdpStartingID,
 | 
				
			||||||
 | 
				
			|||||||
@ -96,7 +96,7 @@ package simulation
 | 
				
			|||||||
// 			maxCollateralDeposit := spendableCoins.AmountOf(randCollateralParam.Denom)
 | 
					// 			maxCollateralDeposit := spendableCoins.AmountOf(randCollateralParam.Denom)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 			// randomly select a collateral deposit amount
 | 
					// 			// randomly select a collateral deposit amount
 | 
				
			||||||
// 			collateralDeposit := sdk.NewInt(int64(simulation.RandIntBetween(r, int(minCollateralDepositRounded.Int64()), int(maxCollateralDeposit.Int64()))))
 | 
					// 			collateralDeposit := sdkmath.NewInt(int64(simulation.RandIntBetween(r, int(minCollateralDepositRounded.Int64()), int(maxCollateralDeposit.Int64()))))
 | 
				
			||||||
// 			// calculate how much the randomly selected deposit is worth
 | 
					// 			// calculate how much the randomly selected deposit is worth
 | 
				
			||||||
// 			collateralDepositValue := ShiftDec(sdk.NewDecFromInt(collateralDeposit), randCollateralParam.ConversionFactor.Neg()).Mul(priceShifted)
 | 
					// 			collateralDepositValue := ShiftDec(sdk.NewDecFromInt(collateralDeposit), randCollateralParam.ConversionFactor.Neg()).Mul(priceShifted)
 | 
				
			||||||
// 			// calculate the max amount of debt that could be drawn for the chosen deposit
 | 
					// 			// calculate the max amount of debt that could be drawn for the chosen deposit
 | 
				
			||||||
@ -110,7 +110,7 @@ package simulation
 | 
				
			|||||||
// 			// ensure that the debt draw does not exceed the debt limit
 | 
					// 			// ensure that the debt draw does not exceed the debt limit
 | 
				
			||||||
// 			maxDebtDraw = sdk.MinInt(maxDebtDraw, availableAssetDebt)
 | 
					// 			maxDebtDraw = sdk.MinInt(maxDebtDraw, availableAssetDebt)
 | 
				
			||||||
// 			// randomly select a debt draw amount
 | 
					// 			// randomly select a debt draw amount
 | 
				
			||||||
// 			debtDraw := sdk.NewInt(int64(simulation.RandIntBetween(r, int(debtParam.DebtFloor.Int64()), int(maxDebtDraw.Int64()))))
 | 
					// 			debtDraw := sdkmath.NewInt(int64(simulation.RandIntBetween(r, int(debtParam.DebtFloor.Int64()), int(maxDebtDraw.Int64()))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 			msg := types.NewMsgCreateCDP(acc.GetAddress(), sdk.NewCoin(randCollateralParam.Denom, collateralDeposit), sdk.NewCoin(debtParam.Denom, debtDraw), randCollateralParam.Type)
 | 
					// 			msg := types.NewMsgCreateCDP(acc.GetAddress(), sdk.NewCoin(randCollateralParam.Denom, collateralDeposit), sdk.NewCoin(debtParam.Denom, debtDraw), randCollateralParam.Type)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -163,7 +163,7 @@ package simulation
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// 		// deposit 25% of the time
 | 
					// 		// deposit 25% of the time
 | 
				
			||||||
// 		if hasCoins(spendableCoins, randCollateralParam.Denom) && shouldDeposit(r) {
 | 
					// 		if hasCoins(spendableCoins, randCollateralParam.Denom) && shouldDeposit(r) {
 | 
				
			||||||
// 			randDepositAmount := sdk.NewInt(int64(simulation.RandIntBetween(r, 1, int(spendableCoins.AmountOf(randCollateralParam.Denom).Int64()))))
 | 
					// 			randDepositAmount := sdkmath.NewInt(int64(simulation.RandIntBetween(r, 1, int(spendableCoins.AmountOf(randCollateralParam.Denom).Int64()))))
 | 
				
			||||||
// 			msg := types.NewMsgDeposit(acc.GetAddress(), acc.GetAddress(), sdk.NewCoin(randCollateralParam.Denom, randDepositAmount), randCollateralParam.Type)
 | 
					// 			msg := types.NewMsgDeposit(acc.GetAddress(), acc.GetAddress(), sdk.NewCoin(randCollateralParam.Denom, randDepositAmount), randCollateralParam.Type)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 			tx := helpers.GenTx(
 | 
					// 			tx := helpers.GenTx(
 | 
				
			||||||
@ -206,7 +206,7 @@ package simulation
 | 
				
			|||||||
// 			}
 | 
					// 			}
 | 
				
			||||||
// 			maxDraw := sdk.MinInt(maxDebt, availableAssetDebt)
 | 
					// 			maxDraw := sdk.MinInt(maxDebt, availableAssetDebt)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 			randDrawAmount := sdk.NewInt(int64(simulation.RandIntBetween(r, 1, int(maxDraw.Int64()))))
 | 
					// 			randDrawAmount := sdkmath.NewInt(int64(simulation.RandIntBetween(r, 1, int(maxDraw.Int64()))))
 | 
				
			||||||
// 			msg := types.NewMsgDrawDebt(acc.GetAddress(), randCollateralParam.Type, sdk.NewCoin(debtParam.Denom, randDrawAmount))
 | 
					// 			msg := types.NewMsgDrawDebt(acc.GetAddress(), randCollateralParam.Type, sdk.NewCoin(debtParam.Denom, randDrawAmount))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 			tx := helpers.GenTx(
 | 
					// 			tx := helpers.GenTx(
 | 
				
			||||||
@ -238,11 +238,11 @@ package simulation
 | 
				
			|||||||
// 				spendableCoins.AmountOf(debtParam.Denom),
 | 
					// 				spendableCoins.AmountOf(debtParam.Denom),
 | 
				
			||||||
// 				payableDebt,
 | 
					// 				payableDebt,
 | 
				
			||||||
// 			)
 | 
					// 			)
 | 
				
			||||||
// 			var randRepayAmount sdk.Int
 | 
					// 			var randRepayAmount sdkmath.Int
 | 
				
			||||||
// 			if maxRepay.Equal(sdk.OneInt()) {
 | 
					// 			if maxRepay.Equal(sdk.OneInt()) {
 | 
				
			||||||
// 				randRepayAmount = sdk.OneInt()
 | 
					// 				randRepayAmount = sdk.OneInt()
 | 
				
			||||||
// 			} else {
 | 
					// 			} else {
 | 
				
			||||||
// 				randRepayAmount = sdk.NewInt(int64(simulation.RandIntBetween(r, 1, int(maxRepay.Int64()))))
 | 
					// 				randRepayAmount = sdkmath.NewInt(int64(simulation.RandIntBetween(r, 1, int(maxRepay.Int64()))))
 | 
				
			||||||
// 			}
 | 
					// 			}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 			msg := types.NewMsgRepayDebt(acc.GetAddress(), randCollateralParam.Type, sdk.NewCoin(debtParam.Denom, randRepayAmount))
 | 
					// 			msg := types.NewMsgRepayDebt(acc.GetAddress(), randCollateralParam.Type, sdk.NewCoin(debtParam.Denom, randRepayAmount))
 | 
				
			||||||
 | 
				
			|||||||
@ -4,13 +4,13 @@ package simulation
 | 
				
			|||||||
// 	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
					// 	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
// )
 | 
					// )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// func ShiftDec(x sdk.Dec, places sdk.Int) sdk.Dec {
 | 
					// func ShiftDec(x sdk.Dec, places sdkmath.Int) sdk.Dec {
 | 
				
			||||||
// 	neg := places.IsNegative()
 | 
					// 	neg := places.IsNegative()
 | 
				
			||||||
// 	for i := 0; i < int(abs(places.Int64())); i++ {
 | 
					// 	for i := 0; i < int(abs(places.Int64())); i++ {
 | 
				
			||||||
// 		if neg {
 | 
					// 		if neg {
 | 
				
			||||||
// 			x = x.Mul(sdk.MustNewDecFromStr("0.1"))
 | 
					// 			x = x.Mul(sdk.MustNewDecFromStr("0.1"))
 | 
				
			||||||
// 		} else {
 | 
					// 		} else {
 | 
				
			||||||
// 			x = x.Mul(sdk.NewDecFromInt(sdk.NewInt(10)))
 | 
					// 			x = x.Mul(sdk.NewDecFromInt(sdkmath.NewInt(10)))
 | 
				
			||||||
// 		}
 | 
					// 		}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	}
 | 
					// 	}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,13 +13,13 @@ package simulation_test
 | 
				
			|||||||
// func TestShiftDec(t *testing.T) {
 | 
					// func TestShiftDec(t *testing.T) {
 | 
				
			||||||
// 	tests := []struct {
 | 
					// 	tests := []struct {
 | 
				
			||||||
// 		value    sdk.Dec
 | 
					// 		value    sdk.Dec
 | 
				
			||||||
// 		shift    sdk.Int
 | 
					// 		shift    sdkmath.Int
 | 
				
			||||||
// 		expected sdk.Dec
 | 
					// 		expected sdk.Dec
 | 
				
			||||||
// 	}{
 | 
					// 	}{
 | 
				
			||||||
// 		{sdk.MustNewDecFromStr("5.5"), sdk.NewInt(1), sdk.MustNewDecFromStr("55")},
 | 
					// 		{sdk.MustNewDecFromStr("5.5"), sdkmath.NewInt(1), sdk.MustNewDecFromStr("55")},
 | 
				
			||||||
// 		{sdk.MustNewDecFromStr("5.5"), sdk.NewInt(-1), sdk.MustNewDecFromStr("0.55")},
 | 
					// 		{sdk.MustNewDecFromStr("5.5"), sdkmath.NewInt(-1), sdk.MustNewDecFromStr("0.55")},
 | 
				
			||||||
// 		{sdk.MustNewDecFromStr("5.5"), sdk.NewInt(2), sdk.MustNewDecFromStr("550")},
 | 
					// 		{sdk.MustNewDecFromStr("5.5"), sdkmath.NewInt(2), sdk.MustNewDecFromStr("550")},
 | 
				
			||||||
// 		{sdk.MustNewDecFromStr("5.5"), sdk.NewInt(-2), sdk.MustNewDecFromStr("0.055")},
 | 
					// 		{sdk.MustNewDecFromStr("5.5"), sdkmath.NewInt(-2), sdk.MustNewDecFromStr("0.055")},
 | 
				
			||||||
// 	}
 | 
					// 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	for _, tt := range tests {
 | 
					// 	for _, tt := range tests {
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -48,13 +49,13 @@ func (cdp CDP) Validate() error {
 | 
				
			|||||||
		return errors.New("cdp owner cannot be empty")
 | 
							return errors.New("cdp owner cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !cdp.Collateral.IsValid() {
 | 
						if !cdp.Collateral.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "collateral %s", cdp.Collateral)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "collateral %s", cdp.Collateral)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !cdp.Principal.IsValid() {
 | 
						if !cdp.Principal.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "principal %s", cdp.Principal)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "principal %s", cdp.Principal)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !cdp.AccumulatedFees.IsValid() {
 | 
						if !cdp.AccumulatedFees.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "accumulated fees %s", cdp.AccumulatedFees)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "accumulated fees %s", cdp.AccumulatedFees)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if cdp.FeesUpdated.Unix() <= 0 {
 | 
						if cdp.FeesUpdated.Unix() <= 0 {
 | 
				
			||||||
		return errors.New("cdp updated fee time cannot be zero")
 | 
							return errors.New("cdp updated fee time cannot be zero")
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/tendermint/tendermint/crypto/secp256k1"
 | 
						"github.com/tendermint/tendermint/crypto/secp256k1"
 | 
				
			||||||
@ -57,7 +58,7 @@ func (suite *CdpValidationSuite) TestCdpValidation() {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "invalid collateral",
 | 
								name: "invalid collateral",
 | 
				
			||||||
			cdp:  types.CDP{1, suite.addrs[0], "bnb-a", sdk.Coin{"", sdk.NewInt(100)}, sdk.Coin{"usdx", sdk.NewInt(100)}, sdk.Coin{"usdx", sdk.NewInt(0)}, tmtime.Now(), sdk.OneDec()},
 | 
								cdp:  types.CDP{1, suite.addrs[0], "bnb-a", sdk.Coin{"", sdkmath.NewInt(100)}, sdk.Coin{"usdx", sdkmath.NewInt(100)}, sdk.Coin{"usdx", sdkmath.NewInt(0)}, tmtime.Now(), sdk.OneDec()},
 | 
				
			||||||
			errArgs: errArgs{
 | 
								errArgs: errArgs{
 | 
				
			||||||
				expectPass: false,
 | 
									expectPass: false,
 | 
				
			||||||
				msg:        "collateral 100: invalid coins",
 | 
									msg:        "collateral 100: invalid coins",
 | 
				
			||||||
@ -65,7 +66,7 @@ func (suite *CdpValidationSuite) TestCdpValidation() {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "invalid principal",
 | 
								name: "invalid principal",
 | 
				
			||||||
			cdp:  types.CDP{1, suite.addrs[0], "xrp-a", sdk.Coin{"xrp", sdk.NewInt(100)}, sdk.Coin{"", sdk.NewInt(100)}, sdk.Coin{"usdx", sdk.NewInt(0)}, tmtime.Now(), sdk.OneDec()},
 | 
								cdp:  types.CDP{1, suite.addrs[0], "xrp-a", sdk.Coin{"xrp", sdkmath.NewInt(100)}, sdk.Coin{"", sdkmath.NewInt(100)}, sdk.Coin{"usdx", sdkmath.NewInt(0)}, tmtime.Now(), sdk.OneDec()},
 | 
				
			||||||
			errArgs: errArgs{
 | 
								errArgs: errArgs{
 | 
				
			||||||
				expectPass: false,
 | 
									expectPass: false,
 | 
				
			||||||
				msg:        "principal 100: invalid coins",
 | 
									msg:        "principal 100: invalid coins",
 | 
				
			||||||
@ -73,7 +74,7 @@ func (suite *CdpValidationSuite) TestCdpValidation() {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "invalid fees",
 | 
								name: "invalid fees",
 | 
				
			||||||
			cdp:  types.CDP{1, suite.addrs[0], "xrp-a", sdk.Coin{"xrp", sdk.NewInt(100)}, sdk.Coin{"usdx", sdk.NewInt(100)}, sdk.Coin{"", sdk.NewInt(0)}, tmtime.Now(), sdk.OneDec()},
 | 
								cdp:  types.CDP{1, suite.addrs[0], "xrp-a", sdk.Coin{"xrp", sdkmath.NewInt(100)}, sdk.Coin{"usdx", sdkmath.NewInt(100)}, sdk.Coin{"", sdkmath.NewInt(0)}, tmtime.Now(), sdk.OneDec()},
 | 
				
			||||||
			errArgs: errArgs{
 | 
								errArgs: errArgs{
 | 
				
			||||||
				expectPass: false,
 | 
									expectPass: false,
 | 
				
			||||||
				msg:        "accumulated fees 0: invalid coins",
 | 
									msg:        "accumulated fees 0: invalid coins",
 | 
				
			||||||
@ -81,7 +82,7 @@ func (suite *CdpValidationSuite) TestCdpValidation() {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "invalid fees updated",
 | 
								name: "invalid fees updated",
 | 
				
			||||||
			cdp:  types.CDP{1, suite.addrs[0], "xrp-a", sdk.Coin{"xrp", sdk.NewInt(100)}, sdk.Coin{"usdx", sdk.NewInt(100)}, sdk.Coin{"usdx", sdk.NewInt(0)}, time.Time{}, sdk.OneDec()},
 | 
								cdp:  types.CDP{1, suite.addrs[0], "xrp-a", sdk.Coin{"xrp", sdkmath.NewInt(100)}, sdk.Coin{"usdx", sdkmath.NewInt(100)}, sdk.Coin{"usdx", sdkmath.NewInt(0)}, time.Time{}, sdk.OneDec()},
 | 
				
			||||||
			errArgs: errArgs{
 | 
								errArgs: errArgs{
 | 
				
			||||||
				expectPass: false,
 | 
									expectPass: false,
 | 
				
			||||||
				msg:        "cdp updated fee time cannot be zero",
 | 
									msg:        "cdp updated fee time cannot be zero",
 | 
				
			||||||
@ -89,7 +90,7 @@ func (suite *CdpValidationSuite) TestCdpValidation() {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "invalid type",
 | 
								name: "invalid type",
 | 
				
			||||||
			cdp:  types.CDP{1, suite.addrs[0], "", sdk.Coin{"xrp", sdk.NewInt(100)}, sdk.Coin{"usdx", sdk.NewInt(100)}, sdk.Coin{"usdx", sdk.NewInt(0)}, tmtime.Now(), sdk.OneDec()},
 | 
								cdp:  types.CDP{1, suite.addrs[0], "", sdk.Coin{"xrp", sdkmath.NewInt(100)}, sdk.Coin{"usdx", sdkmath.NewInt(100)}, sdk.Coin{"usdx", sdkmath.NewInt(0)}, tmtime.Now(), sdk.OneDec()},
 | 
				
			||||||
			errArgs: errArgs{
 | 
								errArgs: errArgs{
 | 
				
			||||||
				expectPass: false,
 | 
									expectPass: false,
 | 
				
			||||||
				msg:        "cdp type cannot be empty",
 | 
									msg:        "cdp type cannot be empty",
 | 
				
			||||||
@ -146,7 +147,7 @@ func (suite *CdpValidationSuite) TestDepositValidation() {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:    "invalid deposit coins",
 | 
								name:    "invalid deposit coins",
 | 
				
			||||||
			deposit: types.NewDeposit(1, suite.addrs[0], sdk.Coin{Denom: "Invalid Denom", Amount: sdk.NewInt(1000000)}),
 | 
								deposit: types.NewDeposit(1, suite.addrs[0], sdk.Coin{Denom: "Invalid Denom", Amount: sdkmath.NewInt(1000000)}),
 | 
				
			||||||
			errArgs: errArgs{
 | 
								errArgs: errArgs{
 | 
				
			||||||
				expectPass: false,
 | 
									expectPass: false,
 | 
				
			||||||
				msg:        "deposit 1000000Invalid Denom: invalid coins",
 | 
									msg:        "deposit 1000000Invalid Denom: invalid coins",
 | 
				
			||||||
@ -167,8 +168,8 @@ func (suite *CdpValidationSuite) TestDepositValidation() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *CdpValidationSuite) TestCdpGetTotalPrinciple() {
 | 
					func (suite *CdpValidationSuite) TestCdpGetTotalPrinciple() {
 | 
				
			||||||
	principal := sdk.Coin{"usdx", sdk.NewInt(100500)}
 | 
						principal := sdk.Coin{"usdx", sdkmath.NewInt(100500)}
 | 
				
			||||||
	accumulatedFees := sdk.Coin{"usdx", sdk.NewInt(25000)}
 | 
						accumulatedFees := sdk.Coin{"usdx", sdkmath.NewInt(25000)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cdp := types.CDP{Principal: principal, AccumulatedFees: accumulatedFees}
 | 
						cdp := types.CDP{Principal: principal, AccumulatedFees: accumulatedFees}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,8 @@ package types
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -21,7 +23,7 @@ func (d Deposit) Validate() error {
 | 
				
			|||||||
		return errors.New("depositor cannot be empty")
 | 
							return errors.New("depositor cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !d.Amount.IsValid() {
 | 
						if !d.Amount.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "deposit %s", d.Amount)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "deposit %s", d.Amount)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -50,7 +52,7 @@ func (d Deposit) Empty() bool {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SumCollateral returns the total amount of collateral in the input deposits
 | 
					// SumCollateral returns the total amount of collateral in the input deposits
 | 
				
			||||||
func (ds Deposits) SumCollateral() (sum sdk.Int) {
 | 
					func (ds Deposits) SumCollateral() (sum sdkmath.Int) {
 | 
				
			||||||
	sum = sdk.ZeroInt()
 | 
						sum = sdk.ZeroInt()
 | 
				
			||||||
	for _, d := range ds {
 | 
						for _, d := range ds {
 | 
				
			||||||
		if !d.Amount.IsZero() {
 | 
							if !d.Amount.IsZero() {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,54 +1,52 @@
 | 
				
			|||||||
package types
 | 
					package types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DONTCOVER
 | 
					// DONTCOVER
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	// ErrCdpAlreadyExists error for duplicate cdps
 | 
						// ErrCdpAlreadyExists error for duplicate cdps
 | 
				
			||||||
	ErrCdpAlreadyExists = sdkerrors.Register(ModuleName, 2, "cdp already exists")
 | 
						ErrCdpAlreadyExists = errorsmod.Register(ModuleName, 2, "cdp already exists")
 | 
				
			||||||
	// ErrInvalidCollateralLength error for invalid collateral input length
 | 
						// ErrInvalidCollateralLength error for invalid collateral input length
 | 
				
			||||||
	ErrInvalidCollateralLength = sdkerrors.Register(ModuleName, 3, "only one collateral type per cdp")
 | 
						ErrInvalidCollateralLength = errorsmod.Register(ModuleName, 3, "only one collateral type per cdp")
 | 
				
			||||||
	// ErrCollateralNotSupported error for unsupported collateral
 | 
						// ErrCollateralNotSupported error for unsupported collateral
 | 
				
			||||||
	ErrCollateralNotSupported = sdkerrors.Register(ModuleName, 4, "collateral not supported")
 | 
						ErrCollateralNotSupported = errorsmod.Register(ModuleName, 4, "collateral not supported")
 | 
				
			||||||
	// ErrDebtNotSupported error for unsupported debt
 | 
						// ErrDebtNotSupported error for unsupported debt
 | 
				
			||||||
	ErrDebtNotSupported = sdkerrors.Register(ModuleName, 5, "debt not supported")
 | 
						ErrDebtNotSupported = errorsmod.Register(ModuleName, 5, "debt not supported")
 | 
				
			||||||
	// ErrExceedsDebtLimit error for attempted draws that exceed debt limit
 | 
						// ErrExceedsDebtLimit error for attempted draws that exceed debt limit
 | 
				
			||||||
	ErrExceedsDebtLimit = sdkerrors.Register(ModuleName, 6, "proposed debt increase would exceed debt limit")
 | 
						ErrExceedsDebtLimit = errorsmod.Register(ModuleName, 6, "proposed debt increase would exceed debt limit")
 | 
				
			||||||
	// ErrInvalidCollateralRatio error for attempted draws that are below liquidation ratio
 | 
						// ErrInvalidCollateralRatio error for attempted draws that are below liquidation ratio
 | 
				
			||||||
	ErrInvalidCollateralRatio = sdkerrors.Register(ModuleName, 7, "proposed collateral ratio is below liquidation ratio")
 | 
						ErrInvalidCollateralRatio = errorsmod.Register(ModuleName, 7, "proposed collateral ratio is below liquidation ratio")
 | 
				
			||||||
	// ErrCdpNotFound error cdp not found
 | 
						// ErrCdpNotFound error cdp not found
 | 
				
			||||||
	ErrCdpNotFound = sdkerrors.Register(ModuleName, 8, "cdp not found")
 | 
						ErrCdpNotFound = errorsmod.Register(ModuleName, 8, "cdp not found")
 | 
				
			||||||
	// ErrDepositNotFound error for deposit not found
 | 
						// ErrDepositNotFound error for deposit not found
 | 
				
			||||||
	ErrDepositNotFound = sdkerrors.Register(ModuleName, 9, "deposit not found")
 | 
						ErrDepositNotFound = errorsmod.Register(ModuleName, 9, "deposit not found")
 | 
				
			||||||
	// ErrInvalidDeposit error for invalid deposit
 | 
						// ErrInvalidDeposit error for invalid deposit
 | 
				
			||||||
	ErrInvalidDeposit = sdkerrors.Register(ModuleName, 10, "invalid deposit")
 | 
						ErrInvalidDeposit = errorsmod.Register(ModuleName, 10, "invalid deposit")
 | 
				
			||||||
	// ErrInvalidPayment error for invalid payment
 | 
						// ErrInvalidPayment error for invalid payment
 | 
				
			||||||
	ErrInvalidPayment = sdkerrors.Register(ModuleName, 11, "invalid payment")
 | 
						ErrInvalidPayment = errorsmod.Register(ModuleName, 11, "invalid payment")
 | 
				
			||||||
	// ErrDepositNotAvailable error for withdrawing deposits in liquidation
 | 
						// ErrDepositNotAvailable error for withdrawing deposits in liquidation
 | 
				
			||||||
	ErrDepositNotAvailable = sdkerrors.Register(ModuleName, 12, "deposit in liquidation")
 | 
						ErrDepositNotAvailable = errorsmod.Register(ModuleName, 12, "deposit in liquidation")
 | 
				
			||||||
	// ErrInvalidWithdrawAmount error for invalid withdrawal amount
 | 
						// ErrInvalidWithdrawAmount error for invalid withdrawal amount
 | 
				
			||||||
	ErrInvalidWithdrawAmount = sdkerrors.Register(ModuleName, 13, "withdrawal amount exceeds deposit")
 | 
						ErrInvalidWithdrawAmount = errorsmod.Register(ModuleName, 13, "withdrawal amount exceeds deposit")
 | 
				
			||||||
	// ErrCdpNotAvailable error for depositing to a CDP in liquidation
 | 
						// ErrCdpNotAvailable error for depositing to a CDP in liquidation
 | 
				
			||||||
	ErrCdpNotAvailable = sdkerrors.Register(ModuleName, 14, "cannot modify cdp in liquidation")
 | 
						ErrCdpNotAvailable = errorsmod.Register(ModuleName, 14, "cannot modify cdp in liquidation")
 | 
				
			||||||
	// ErrBelowDebtFloor error for creating a cdp with debt below the minimum
 | 
						// ErrBelowDebtFloor error for creating a cdp with debt below the minimum
 | 
				
			||||||
	ErrBelowDebtFloor = sdkerrors.Register(ModuleName, 15, "proposed cdp debt is below minimum")
 | 
						ErrBelowDebtFloor = errorsmod.Register(ModuleName, 15, "proposed cdp debt is below minimum")
 | 
				
			||||||
	// ErrLoadingAugmentedCDP error loading augmented cdp
 | 
						// ErrLoadingAugmentedCDP error loading augmented cdp
 | 
				
			||||||
	ErrLoadingAugmentedCDP = sdkerrors.Register(ModuleName, 16, "augmented cdp could not be loaded from cdp")
 | 
						ErrLoadingAugmentedCDP = errorsmod.Register(ModuleName, 16, "augmented cdp could not be loaded from cdp")
 | 
				
			||||||
	// ErrInvalidDebtRequest error for invalid principal input length
 | 
						// ErrInvalidDebtRequest error for invalid principal input length
 | 
				
			||||||
	ErrInvalidDebtRequest = sdkerrors.Register(ModuleName, 17, "only one principal type per cdp")
 | 
						ErrInvalidDebtRequest = errorsmod.Register(ModuleName, 17, "only one principal type per cdp")
 | 
				
			||||||
	// ErrDenomPrefixNotFound error for denom prefix not found
 | 
						// ErrDenomPrefixNotFound error for denom prefix not found
 | 
				
			||||||
	ErrDenomPrefixNotFound = sdkerrors.Register(ModuleName, 18, "denom prefix not found")
 | 
						ErrDenomPrefixNotFound = errorsmod.Register(ModuleName, 18, "denom prefix not found")
 | 
				
			||||||
	// ErrPricefeedDown error for when a price for the input denom is not found
 | 
						// ErrPricefeedDown error for when a price for the input denom is not found
 | 
				
			||||||
	ErrPricefeedDown = sdkerrors.Register(ModuleName, 19, "no price found for collateral")
 | 
						ErrPricefeedDown = errorsmod.Register(ModuleName, 19, "no price found for collateral")
 | 
				
			||||||
	// ErrInvalidCollateral error for when the input collateral denom does not match the expected collateral denom
 | 
						// ErrInvalidCollateral error for when the input collateral denom does not match the expected collateral denom
 | 
				
			||||||
	ErrInvalidCollateral = sdkerrors.Register(ModuleName, 20, "invalid collateral for input collateral type")
 | 
						ErrInvalidCollateral = errorsmod.Register(ModuleName, 20, "invalid collateral for input collateral type")
 | 
				
			||||||
	// ErrAccountNotFound error for when no account is found for an input address
 | 
						// ErrAccountNotFound error for when no account is found for an input address
 | 
				
			||||||
	ErrAccountNotFound = sdkerrors.Register(ModuleName, 21, "account not found")
 | 
						ErrAccountNotFound = errorsmod.Register(ModuleName, 21, "account not found")
 | 
				
			||||||
	// ErrInsufficientBalance error for when an account does not have enough funds
 | 
						// ErrInsufficientBalance error for when an account does not have enough funds
 | 
				
			||||||
	ErrInsufficientBalance = sdkerrors.Register(ModuleName, 22, "insufficient balance")
 | 
						ErrInsufficientBalance = errorsmod.Register(ModuleName, 22, "insufficient balance")
 | 
				
			||||||
	// ErrNotLiquidatable error for when an cdp is not liquidatable
 | 
						// ErrNotLiquidatable error for when an cdp is not liquidatable
 | 
				
			||||||
	ErrNotLiquidatable = sdkerrors.Register(ModuleName, 23, "cdp collateral ratio not below liquidation ratio")
 | 
						ErrNotLiquidatable = errorsmod.Register(ModuleName, 23, "cdp collateral ratio not below liquidation ratio")
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ package types
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -40,7 +41,7 @@ type PricefeedKeeper interface {
 | 
				
			|||||||
type AuctionKeeper interface {
 | 
					type AuctionKeeper interface {
 | 
				
			||||||
	StartSurplusAuction(ctx sdk.Context, seller string, lot sdk.Coin, bidDenom string) (uint64, error)
 | 
						StartSurplusAuction(ctx sdk.Context, seller string, lot sdk.Coin, bidDenom string) (uint64, error)
 | 
				
			||||||
	StartDebtAuction(ctx sdk.Context, buyer string, bid sdk.Coin, initialLot sdk.Coin, debt sdk.Coin) (uint64, error)
 | 
						StartDebtAuction(ctx sdk.Context, buyer string, bid sdk.Coin, initialLot sdk.Coin, debt sdk.Coin) (uint64, error)
 | 
				
			||||||
	StartCollateralAuction(ctx sdk.Context, seller string, lot sdk.Coin, maxBid sdk.Coin, lotReturnAddrs []sdk.AccAddress, lotReturnWeights []sdk.Int, debt sdk.Coin) (uint64, error)
 | 
						StartCollateralAuction(ctx sdk.Context, seller string, lot sdk.Coin, maxBid sdk.Coin, lotReturnAddrs []sdk.AccAddress, lotReturnWeights []sdkmath.Int, debt sdk.Coin) (uint64, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AccountKeeper expected interface for the account keeper
 | 
					// AccountKeeper expected interface for the account keeper
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -74,7 +75,7 @@ func (gs GenesisState) Validate() error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewGenesisTotalPrincipal returns a new GenesisTotalPrincipal
 | 
					// NewGenesisTotalPrincipal returns a new GenesisTotalPrincipal
 | 
				
			||||||
func NewGenesisTotalPrincipal(ctype string, principal sdk.Int) GenesisTotalPrincipal {
 | 
					func NewGenesisTotalPrincipal(ctype string, principal sdkmath.Int) GenesisTotalPrincipal {
 | 
				
			||||||
	return GenesisTotalPrincipal{
 | 
						return GenesisTotalPrincipal{
 | 
				
			||||||
		CollateralType: ctype,
 | 
							CollateralType: ctype,
 | 
				
			||||||
		TotalPrincipal: principal,
 | 
							TotalPrincipal: principal,
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,7 @@ package types_test
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	"github.com/kava-labs/kava/x/cdp/types"
 | 
						"github.com/kava-labs/kava/x/cdp/types"
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
	"github.com/stretchr/testify/require"
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
@ -22,15 +22,15 @@ func TestGenesisTotalPrincipal(t *testing.T) {
 | 
				
			|||||||
	tests := []struct {
 | 
						tests := []struct {
 | 
				
			||||||
		giveName           string
 | 
							giveName           string
 | 
				
			||||||
		giveCollateralType string
 | 
							giveCollateralType string
 | 
				
			||||||
		givePrincipal      sdk.Int
 | 
							givePrincipal      sdkmath.Int
 | 
				
			||||||
		wantIsError        bool
 | 
							wantIsError        bool
 | 
				
			||||||
		wantError          string
 | 
							wantError          string
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{"valid", "usdx", sdk.NewInt(10), false, ""},
 | 
							{"valid", "usdx", sdkmath.NewInt(10), false, ""},
 | 
				
			||||||
		{"zero principal", "usdx", sdk.NewInt(0), false, ""},
 | 
							{"zero principal", "usdx", sdkmath.NewInt(0), false, ""},
 | 
				
			||||||
		{"invalid empty collateral type", "", sdk.NewInt(10), true, "collateral type cannot be empty"},
 | 
							{"invalid empty collateral type", "", sdkmath.NewInt(10), true, "collateral type cannot be empty"},
 | 
				
			||||||
		{"invalid negative principal", "usdx", sdk.NewInt(-10), true, "total principal should be positive"},
 | 
							{"invalid negative principal", "usdx", sdkmath.NewInt(-10), true, "total principal should be positive"},
 | 
				
			||||||
		{"both invalid", "", sdk.NewInt(-10), true, "collateral type cannot be empty"},
 | 
							{"both invalid", "", sdkmath.NewInt(-10), true, "collateral type cannot be empty"},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, tt := range tests {
 | 
						for _, tt := range tests {
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -39,14 +40,14 @@ func (msg MsgCreateCDP) Type() string { return "create_cdp" }
 | 
				
			|||||||
func (msg MsgCreateCDP) ValidateBasic() error {
 | 
					func (msg MsgCreateCDP) ValidateBasic() error {
 | 
				
			||||||
	_, err := sdk.AccAddressFromBech32(msg.Sender)
 | 
						_, err := sdk.AccAddressFromBech32(msg.Sender)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
 | 
							return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if msg.Collateral.IsZero() || !msg.Collateral.IsValid() {
 | 
						if msg.Collateral.IsZero() || !msg.Collateral.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "collateral amount %s", msg.Collateral)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "collateral amount %s", msg.Collateral)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if msg.Principal.IsZero() || !msg.Principal.IsValid() {
 | 
						if msg.Principal.IsZero() || !msg.Principal.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "principal amount %s", msg.Principal)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "principal amount %s", msg.Principal)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if strings.TrimSpace(msg.CollateralType) == "" {
 | 
						if strings.TrimSpace(msg.CollateralType) == "" {
 | 
				
			||||||
		return fmt.Errorf("collateral type cannot be empty")
 | 
							return fmt.Errorf("collateral type cannot be empty")
 | 
				
			||||||
@ -89,15 +90,15 @@ func (msg MsgDeposit) Type() string { return "deposit_cdp" }
 | 
				
			|||||||
func (msg MsgDeposit) ValidateBasic() error {
 | 
					func (msg MsgDeposit) ValidateBasic() error {
 | 
				
			||||||
	_, err := sdk.AccAddressFromBech32(msg.Owner)
 | 
						_, err := sdk.AccAddressFromBech32(msg.Owner)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid owner address %s", err)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid owner address %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err = sdk.AccAddressFromBech32(msg.Depositor)
 | 
						_, err = sdk.AccAddressFromBech32(msg.Depositor)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid depositor address %s", err)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid depositor address %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !msg.Collateral.IsValid() || msg.Collateral.IsZero() {
 | 
						if !msg.Collateral.IsValid() || msg.Collateral.IsZero() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "collateral amount %s", msg.Collateral)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "collateral amount %s", msg.Collateral)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if strings.TrimSpace(msg.CollateralType) == "" {
 | 
						if strings.TrimSpace(msg.CollateralType) == "" {
 | 
				
			||||||
		return fmt.Errorf("collateral type cannot be empty")
 | 
							return fmt.Errorf("collateral type cannot be empty")
 | 
				
			||||||
@ -140,15 +141,15 @@ func (msg MsgWithdraw) Type() string { return "withdraw_cdp" }
 | 
				
			|||||||
func (msg MsgWithdraw) ValidateBasic() error {
 | 
					func (msg MsgWithdraw) ValidateBasic() error {
 | 
				
			||||||
	_, err := sdk.AccAddressFromBech32(msg.Owner)
 | 
						_, err := sdk.AccAddressFromBech32(msg.Owner)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid owner address %s", err)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid owner address %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err = sdk.AccAddressFromBech32(msg.Depositor)
 | 
						_, err = sdk.AccAddressFromBech32(msg.Depositor)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid depositor address %s", err)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid depositor address %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !msg.Collateral.IsValid() || msg.Collateral.IsZero() {
 | 
						if !msg.Collateral.IsValid() || msg.Collateral.IsZero() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "collateral amount %s", msg.Collateral)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "collateral amount %s", msg.Collateral)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if strings.TrimSpace(msg.CollateralType) == "" {
 | 
						if strings.TrimSpace(msg.CollateralType) == "" {
 | 
				
			||||||
		return fmt.Errorf("collateral type cannot be empty")
 | 
							return fmt.Errorf("collateral type cannot be empty")
 | 
				
			||||||
@ -190,14 +191,14 @@ func (msg MsgDrawDebt) Type() string { return "draw_cdp" }
 | 
				
			|||||||
func (msg MsgDrawDebt) ValidateBasic() error {
 | 
					func (msg MsgDrawDebt) ValidateBasic() error {
 | 
				
			||||||
	_, err := sdk.AccAddressFromBech32(msg.Sender)
 | 
						_, err := sdk.AccAddressFromBech32(msg.Sender)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid sender address %s", err)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid sender address %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if strings.TrimSpace(msg.CollateralType) == "" {
 | 
						if strings.TrimSpace(msg.CollateralType) == "" {
 | 
				
			||||||
		return errors.New("cdp collateral type cannot be blank")
 | 
							return errors.New("cdp collateral type cannot be blank")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if msg.Principal.IsZero() || !msg.Principal.IsValid() {
 | 
						if msg.Principal.IsZero() || !msg.Principal.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "principal amount %s", msg.Principal)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "principal amount %s", msg.Principal)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -236,14 +237,14 @@ func (msg MsgRepayDebt) Type() string { return "repay_cdp" }
 | 
				
			|||||||
func (msg MsgRepayDebt) ValidateBasic() error {
 | 
					func (msg MsgRepayDebt) ValidateBasic() error {
 | 
				
			||||||
	_, err := sdk.AccAddressFromBech32(msg.Sender)
 | 
						_, err := sdk.AccAddressFromBech32(msg.Sender)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid sender address %s", err)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid sender address %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if strings.TrimSpace(msg.CollateralType) == "" {
 | 
						if strings.TrimSpace(msg.CollateralType) == "" {
 | 
				
			||||||
		return errors.New("cdp collateral type cannot be blank")
 | 
							return errors.New("cdp collateral type cannot be blank")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if msg.Payment.IsZero() || !msg.Payment.IsValid() {
 | 
						if msg.Payment.IsZero() || !msg.Payment.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "payment amount %s", msg.Payment)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "payment amount %s", msg.Payment)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -282,15 +283,15 @@ func (msg MsgLiquidate) Type() string { return "liquidate" }
 | 
				
			|||||||
func (msg MsgLiquidate) ValidateBasic() error {
 | 
					func (msg MsgLiquidate) ValidateBasic() error {
 | 
				
			||||||
	_, err := sdk.AccAddressFromBech32(msg.Keeper)
 | 
						_, err := sdk.AccAddressFromBech32(msg.Keeper)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid keeper address %s", err)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid keeper address %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err = sdk.AccAddressFromBech32(msg.Borrower)
 | 
						_, err = sdk.AccAddressFromBech32(msg.Borrower)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid borrower address %s", err)
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid borrower address %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if strings.TrimSpace(msg.CollateralType) == "" {
 | 
						if strings.TrimSpace(msg.CollateralType) == "" {
 | 
				
			||||||
		return sdkerrors.Wrap(ErrInvalidCollateral, "collateral type cannot be empty")
 | 
							return errorsmod.Wrap(ErrInvalidCollateral, "collateral type cannot be empty")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,8 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
						sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
	paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
 | 
						paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
 | 
				
			||||||
@ -25,24 +27,24 @@ var (
 | 
				
			|||||||
	DefaultDebtParam        = DebtParam{
 | 
						DefaultDebtParam        = DebtParam{
 | 
				
			||||||
		Denom:            "usdx",
 | 
							Denom:            "usdx",
 | 
				
			||||||
		ReferenceAsset:   "usd",
 | 
							ReferenceAsset:   "usd",
 | 
				
			||||||
		ConversionFactor: sdk.NewInt(6),
 | 
							ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
		DebtFloor:        sdk.NewInt(10000000),
 | 
							DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	DefaultCdpStartingID    = uint64(1)
 | 
						DefaultCdpStartingID    = uint64(1)
 | 
				
			||||||
	DefaultDebtDenom        = "debt"
 | 
						DefaultDebtDenom        = "debt"
 | 
				
			||||||
	DefaultGovDenom         = "ukava"
 | 
						DefaultGovDenom         = "ukava"
 | 
				
			||||||
	DefaultStableDenom      = "usdx"
 | 
						DefaultStableDenom      = "usdx"
 | 
				
			||||||
	DefaultSurplusThreshold = sdk.NewInt(500000000000)
 | 
						DefaultSurplusThreshold = sdkmath.NewInt(500000000000)
 | 
				
			||||||
	DefaultDebtThreshold    = sdk.NewInt(100000000000)
 | 
						DefaultDebtThreshold    = sdkmath.NewInt(100000000000)
 | 
				
			||||||
	DefaultSurplusLot       = sdk.NewInt(10000000000)
 | 
						DefaultSurplusLot       = sdkmath.NewInt(10000000000)
 | 
				
			||||||
	DefaultDebtLot          = sdk.NewInt(10000000000)
 | 
						DefaultDebtLot          = sdkmath.NewInt(10000000000)
 | 
				
			||||||
	stabilityFeeMax         = sdk.MustNewDecFromStr("1.000000051034942716") // 500% APR
 | 
						stabilityFeeMax         = sdk.MustNewDecFromStr("1.000000051034942716") // 500% APR
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewParams returns a new params object
 | 
					// NewParams returns a new params object
 | 
				
			||||||
func NewParams(
 | 
					func NewParams(
 | 
				
			||||||
	debtLimit sdk.Coin, collateralParams CollateralParams, debtParam DebtParam, surplusThreshold,
 | 
						debtLimit sdk.Coin, collateralParams CollateralParams, debtParam DebtParam, surplusThreshold,
 | 
				
			||||||
	surplusLot, debtThreshold, debtLot sdk.Int, breaker bool,
 | 
						surplusLot, debtThreshold, debtLot sdkmath.Int, breaker bool,
 | 
				
			||||||
) Params {
 | 
					) Params {
 | 
				
			||||||
	return Params{
 | 
						return Params{
 | 
				
			||||||
		GlobalDebtLimit:         debtLimit,
 | 
							GlobalDebtLimit:         debtLimit,
 | 
				
			||||||
@ -67,8 +69,8 @@ func DefaultParams() Params {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// NewCollateralParam returns a new CollateralParam
 | 
					// NewCollateralParam returns a new CollateralParam
 | 
				
			||||||
func NewCollateralParam(
 | 
					func NewCollateralParam(
 | 
				
			||||||
	denom, ctype string, liqRatio sdk.Dec, debtLimit sdk.Coin, stabilityFee sdk.Dec, auctionSize sdk.Int,
 | 
						denom, ctype string, liqRatio sdk.Dec, debtLimit sdk.Coin, stabilityFee sdk.Dec, auctionSize sdkmath.Int,
 | 
				
			||||||
	liqPenalty sdk.Dec, spotMarketID, liquidationMarketID string, keeperReward sdk.Dec, checkIndexCount sdk.Int, conversionFactor sdk.Int,
 | 
						liqPenalty sdk.Dec, spotMarketID, liquidationMarketID string, keeperReward sdk.Dec, checkIndexCount sdkmath.Int, conversionFactor sdkmath.Int,
 | 
				
			||||||
) CollateralParam {
 | 
					) CollateralParam {
 | 
				
			||||||
	return CollateralParam{
 | 
						return CollateralParam{
 | 
				
			||||||
		Denom:                            denom,
 | 
							Denom:                            denom,
 | 
				
			||||||
@ -90,7 +92,7 @@ func NewCollateralParam(
 | 
				
			|||||||
type CollateralParams []CollateralParam
 | 
					type CollateralParams []CollateralParam
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewDebtParam returns a new DebtParam
 | 
					// NewDebtParam returns a new DebtParam
 | 
				
			||||||
func NewDebtParam(denom, refAsset string, conversionFactor, debtFloor sdk.Int) DebtParam {
 | 
					func NewDebtParam(denom, refAsset string, conversionFactor, debtFloor sdkmath.Int) DebtParam {
 | 
				
			||||||
	return DebtParam{
 | 
						return DebtParam{
 | 
				
			||||||
		Denom:            denom,
 | 
							Denom:            denom,
 | 
				
			||||||
		ReferenceAsset:   refAsset,
 | 
							ReferenceAsset:   refAsset,
 | 
				
			||||||
@ -208,7 +210,7 @@ func validateGlobalDebtLimitParam(i interface{}) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !globalDebtLimit.IsValid() {
 | 
						if !globalDebtLimit.IsValid() {
 | 
				
			||||||
		return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "global debt limit %s", globalDebtLimit.String())
 | 
							return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "global debt limit %s", globalDebtLimit.String())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
@ -294,7 +296,7 @@ func validateCircuitBreakerParam(i interface{}) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func validateSurplusAuctionThresholdParam(i interface{}) error {
 | 
					func validateSurplusAuctionThresholdParam(i interface{}) error {
 | 
				
			||||||
	sat, ok := i.(sdk.Int)
 | 
						sat, ok := i.(sdkmath.Int)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return fmt.Errorf("invalid parameter type: %T", i)
 | 
							return fmt.Errorf("invalid parameter type: %T", i)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -307,7 +309,7 @@ func validateSurplusAuctionThresholdParam(i interface{}) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func validateSurplusAuctionLotParam(i interface{}) error {
 | 
					func validateSurplusAuctionLotParam(i interface{}) error {
 | 
				
			||||||
	sal, ok := i.(sdk.Int)
 | 
						sal, ok := i.(sdkmath.Int)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return fmt.Errorf("invalid parameter type: %T", i)
 | 
							return fmt.Errorf("invalid parameter type: %T", i)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -320,7 +322,7 @@ func validateSurplusAuctionLotParam(i interface{}) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func validateDebtAuctionThresholdParam(i interface{}) error {
 | 
					func validateDebtAuctionThresholdParam(i interface{}) error {
 | 
				
			||||||
	dat, ok := i.(sdk.Int)
 | 
						dat, ok := i.(sdkmath.Int)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return fmt.Errorf("invalid parameter type: %T", i)
 | 
							return fmt.Errorf("invalid parameter type: %T", i)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -333,7 +335,7 @@ func validateDebtAuctionThresholdParam(i interface{}) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func validateDebtAuctionLotParam(i interface{}) error {
 | 
					func validateDebtAuctionLotParam(i interface{}) error {
 | 
				
			||||||
	dal, ok := i.(sdk.Int)
 | 
						dal, ok := i.(sdkmath.Int)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return fmt.Errorf("invalid parameter type: %T", i)
 | 
							return fmt.Errorf("invalid parameter type: %T", i)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/cdp/types"
 | 
						"github.com/kava-labs/kava/x/cdp/types"
 | 
				
			||||||
@ -22,10 +23,10 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
		globalDebtLimit  sdk.Coin
 | 
							globalDebtLimit  sdk.Coin
 | 
				
			||||||
		collateralParams types.CollateralParams
 | 
							collateralParams types.CollateralParams
 | 
				
			||||||
		debtParam        types.DebtParam
 | 
							debtParam        types.DebtParam
 | 
				
			||||||
		surplusThreshold sdk.Int
 | 
							surplusThreshold sdkmath.Int
 | 
				
			||||||
		surplusLot       sdk.Int
 | 
							surplusLot       sdkmath.Int
 | 
				
			||||||
		debtThreshold    sdk.Int
 | 
							debtThreshold    sdkmath.Int
 | 
				
			||||||
		debtLot          sdk.Int
 | 
							debtLot          sdkmath.Int
 | 
				
			||||||
		breaker          bool
 | 
							breaker          bool
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	type errArgs struct {
 | 
						type errArgs struct {
 | 
				
			||||||
@ -67,19 +68,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -104,19 +105,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "susd",
 | 
										Denom:            "susd",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -141,19 +142,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -178,12 +179,12 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						Denom:                            "xrp",
 | 
											Denom:                            "xrp",
 | 
				
			||||||
@ -192,19 +193,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "xrp:usd",
 | 
											SpotMarketID:                     "xrp:usd",
 | 
				
			||||||
						LiquidationMarketID:              "xrp:usd",
 | 
											LiquidationMarketID:              "xrp:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(6),
 | 
											ConversionFactor:                 sdkmath.NewInt(6),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -229,12 +230,12 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						Denom:                            "xrp",
 | 
											Denom:                            "xrp",
 | 
				
			||||||
@ -243,19 +244,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "xrp:usd",
 | 
											SpotMarketID:                     "xrp:usd",
 | 
				
			||||||
						LiquidationMarketID:              "xrp:usd",
 | 
											LiquidationMarketID:              "xrp:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(6),
 | 
											ConversionFactor:                 sdkmath.NewInt(6),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -280,12 +281,12 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						Denom:                            "xrp",
 | 
											Denom:                            "xrp",
 | 
				
			||||||
@ -294,19 +295,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("susd", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("susd", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "xrp:usd",
 | 
											SpotMarketID:                     "xrp:usd",
 | 
				
			||||||
						LiquidationMarketID:              "xrp:usd",
 | 
											LiquidationMarketID:              "xrp:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(6),
 | 
											ConversionFactor:                 sdkmath.NewInt(6),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -330,19 +331,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -367,19 +368,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "",
 | 
											SpotMarketID:                     "",
 | 
				
			||||||
						LiquidationMarketID:              "",
 | 
											LiquidationMarketID:              "",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -404,12 +405,12 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						Denom:                            "bnb",
 | 
											Denom:                            "bnb",
 | 
				
			||||||
@ -418,19 +419,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -455,12 +456,12 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						Denom:                            "bnb",
 | 
											Denom:                            "bnb",
 | 
				
			||||||
@ -469,19 +470,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -506,19 +507,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.Coin{},
 | 
											DebtLimit:                        sdk.Coin{},
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -543,19 +544,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("1.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("1.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -584,15 +585,15 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -617,19 +618,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 1000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.1"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.1"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "usdx",
 | 
										Denom:            "usdx",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
@ -654,12 +655,12 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 1_000_000_000_000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 1_000_000_000_000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.1"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.1"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50_000_000_000),
 | 
											AuctionSize:                      sdkmath.NewInt(50_000_000_000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam:        types.DefaultDebtParam,
 | 
									debtParam:        types.DefaultDebtParam,
 | 
				
			||||||
@ -686,19 +687,19 @@ func (suite *ParamsTestSuite) TestParamValidation() {
 | 
				
			|||||||
						DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
											DebtLimit:                        sdk.NewInt64Coin("usdx", 2000000000000),
 | 
				
			||||||
						StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
											StabilityFee:                     sdk.MustNewDecFromStr("1.000000001547125958"),
 | 
				
			||||||
						LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
											LiquidationPenalty:               sdk.MustNewDecFromStr("0.05"),
 | 
				
			||||||
						AuctionSize:                      sdk.NewInt(50000000000),
 | 
											AuctionSize:                      sdkmath.NewInt(50000000000),
 | 
				
			||||||
						SpotMarketID:                     "bnb:usd",
 | 
											SpotMarketID:                     "bnb:usd",
 | 
				
			||||||
						LiquidationMarketID:              "bnb:usd",
 | 
											LiquidationMarketID:              "bnb:usd",
 | 
				
			||||||
						KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
											KeeperRewardPercentage:           sdk.MustNewDecFromStr("0.01"),
 | 
				
			||||||
						ConversionFactor:                 sdk.NewInt(8),
 | 
											ConversionFactor:                 sdkmath.NewInt(8),
 | 
				
			||||||
						CheckCollateralizationIndexCount: sdk.NewInt(10),
 | 
											CheckCollateralizationIndexCount: sdkmath.NewInt(10),
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				debtParam: types.DebtParam{
 | 
									debtParam: types.DebtParam{
 | 
				
			||||||
					Denom:            "",
 | 
										Denom:            "",
 | 
				
			||||||
					ReferenceAsset:   "usd",
 | 
										ReferenceAsset:   "usd",
 | 
				
			||||||
					ConversionFactor: sdk.NewInt(6),
 | 
										ConversionFactor: sdkmath.NewInt(6),
 | 
				
			||||||
					DebtFloor:        sdk.NewInt(10000000),
 | 
										DebtFloor:        sdkmath.NewInt(10000000),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				surplusThreshold: types.DefaultSurplusThreshold,
 | 
									surplusThreshold: types.DefaultSurplusThreshold,
 | 
				
			||||||
				surplusLot:       types.DefaultSurplusLot,
 | 
									surplusLot:       types.DefaultSurplusLot,
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -64,7 +65,7 @@ func ParseDecBytes(db []byte) (sdk.Dec, error) {
 | 
				
			|||||||
// RelativePow raises x to the power of n, where x (and the result, z) are scaled by factor b.
 | 
					// RelativePow raises x to the power of n, where x (and the result, z) are scaled by factor b.
 | 
				
			||||||
// For example, RelativePow(210, 2, 100) = 441 (2.1^2 = 4.41)
 | 
					// For example, RelativePow(210, 2, 100) = 441 (2.1^2 = 4.41)
 | 
				
			||||||
// Only defined for positive ints.
 | 
					// Only defined for positive ints.
 | 
				
			||||||
func RelativePow(x sdk.Int, n sdk.Int, b sdk.Int) (z sdk.Int) {
 | 
					func RelativePow(x sdkmath.Int, n sdkmath.Int, b sdkmath.Int) (z sdkmath.Int) {
 | 
				
			||||||
	if x.IsZero() {
 | 
						if x.IsZero() {
 | 
				
			||||||
		if n.IsZero() {
 | 
							if n.IsZero() {
 | 
				
			||||||
			z = b // 0^0 = 1
 | 
								z = b // 0^0 = 1
 | 
				
			||||||
@ -75,12 +76,12 @@ func RelativePow(x sdk.Int, n sdk.Int, b sdk.Int) (z sdk.Int) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	z = x
 | 
						z = x
 | 
				
			||||||
	if n.Mod(sdk.NewInt(2)).Equal(sdk.ZeroInt()) {
 | 
						if n.Mod(sdkmath.NewInt(2)).Equal(sdk.ZeroInt()) {
 | 
				
			||||||
		z = b
 | 
							z = b
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	halfOfB := b.Quo(sdk.NewInt(2))
 | 
						halfOfB := b.Quo(sdkmath.NewInt(2))
 | 
				
			||||||
	n = n.Quo(sdk.NewInt(2))
 | 
						n = n.Quo(sdkmath.NewInt(2))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for n.GT(sdk.ZeroInt()) {
 | 
						for n.GT(sdk.ZeroInt()) {
 | 
				
			||||||
		xSquared := x.Mul(x)
 | 
							xSquared := x.Mul(x)
 | 
				
			||||||
@ -88,12 +89,12 @@ func RelativePow(x sdk.Int, n sdk.Int, b sdk.Int) (z sdk.Int) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		x = xSquaredRounded.Quo(b)
 | 
							x = xSquaredRounded.Quo(b)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if n.Mod(sdk.NewInt(2)).Equal(sdk.OneInt()) {
 | 
							if n.Mod(sdkmath.NewInt(2)).Equal(sdk.OneInt()) {
 | 
				
			||||||
			zx := z.Mul(x)
 | 
								zx := z.Mul(x)
 | 
				
			||||||
			zxRounded := zx.Add(halfOfB)
 | 
								zxRounded := zx.Add(halfOfB)
 | 
				
			||||||
			z = zxRounded.Quo(b)
 | 
								z = zxRounded.Quo(b)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		n = n.Quo(sdk.NewInt(2))
 | 
							n = n.Quo(sdkmath.NewInt(2))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
	"github.com/stretchr/testify/require"
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -65,16 +66,16 @@ func TestParseSortableDecBytes(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func TestRelativePow(t *testing.T) {
 | 
					func TestRelativePow(t *testing.T) {
 | 
				
			||||||
	tests := []struct {
 | 
						tests := []struct {
 | 
				
			||||||
		args []sdk.Int
 | 
							args []sdkmath.Int
 | 
				
			||||||
		want sdk.Int
 | 
							want sdkmath.Int
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{[]sdk.Int{sdk.ZeroInt(), sdk.ZeroInt(), sdk.OneInt()}, sdk.OneInt()},
 | 
							{[]sdkmath.Int{sdk.ZeroInt(), sdk.ZeroInt(), sdk.OneInt()}, sdk.OneInt()},
 | 
				
			||||||
		{[]sdk.Int{sdk.ZeroInt(), sdk.ZeroInt(), sdk.NewInt(10)}, sdk.NewInt(10)},
 | 
							{[]sdkmath.Int{sdk.ZeroInt(), sdk.ZeroInt(), sdkmath.NewInt(10)}, sdkmath.NewInt(10)},
 | 
				
			||||||
		{[]sdk.Int{sdk.ZeroInt(), sdk.OneInt(), sdk.NewInt(10)}, sdk.ZeroInt()},
 | 
							{[]sdkmath.Int{sdk.ZeroInt(), sdk.OneInt(), sdkmath.NewInt(10)}, sdk.ZeroInt()},
 | 
				
			||||||
		{[]sdk.Int{sdk.NewInt(10), sdk.NewInt(2), sdk.OneInt()}, sdk.NewInt(100)},
 | 
							{[]sdkmath.Int{sdkmath.NewInt(10), sdkmath.NewInt(2), sdk.OneInt()}, sdkmath.NewInt(100)},
 | 
				
			||||||
		{[]sdk.Int{sdk.NewInt(210), sdk.NewInt(2), sdk.NewInt(100)}, sdk.NewInt(441)},
 | 
							{[]sdkmath.Int{sdkmath.NewInt(210), sdkmath.NewInt(2), sdkmath.NewInt(100)}, sdkmath.NewInt(441)},
 | 
				
			||||||
		{[]sdk.Int{sdk.NewInt(2100), sdk.NewInt(2), sdk.NewInt(1000)}, sdk.NewInt(4410)},
 | 
							{[]sdkmath.Int{sdkmath.NewInt(2100), sdkmath.NewInt(2), sdkmath.NewInt(1000)}, sdkmath.NewInt(4410)},
 | 
				
			||||||
		{[]sdk.Int{sdk.NewInt(1000000001547125958), sdk.NewInt(600), sdk.NewInt(1000000000000000000)}, sdk.NewInt(1000000928276004850)},
 | 
							{[]sdkmath.Int{sdkmath.NewInt(1000000001547125958), sdkmath.NewInt(600), sdkmath.NewInt(1000000000000000000)}, sdkmath.NewInt(1000000928276004850)},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for i, tc := range tests {
 | 
						for i, tc := range tests {
 | 
				
			||||||
		res := RelativePow(tc.args[0], tc.args[1], tc.args[2])
 | 
							res := RelativePow(tc.args[0], tc.args[1], tc.args[2])
 | 
				
			||||||
 | 
				
			|||||||
@ -6,10 +6,10 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/client"
 | 
						"github.com/cosmos/cosmos-sdk/client"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
	authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
 | 
						authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/committee/types"
 | 
						"github.com/kava-labs/kava/x/committee/types"
 | 
				
			||||||
@ -93,7 +93,7 @@ func QueryProposalByID(cliCtx client.Context, cdc *codec.LegacyAmino, queryRoute
 | 
				
			|||||||
	cdc.MustUnmarshalJSON(res, &nextProposalID)
 | 
						cdc.MustUnmarshalJSON(res, &nextProposalID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if proposalID >= nextProposalID {
 | 
						if proposalID >= nextProposalID {
 | 
				
			||||||
		return nil, 0, sdkerrors.Wrapf(types.ErrUnknownProposal, "%d", proposalID)
 | 
							return nil, 0, errorsmod.Wrapf(types.ErrUnknownProposal, "%d", proposalID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	events := []string{
 | 
						events := []string{
 | 
				
			||||||
@ -122,7 +122,7 @@ func QueryProposalByID(cliCtx client.Context, cdc *codec.LegacyAmino, queryRoute
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil, 0, sdkerrors.Wrapf(types.ErrUnknownProposal, "%d", proposalID)
 | 
						return nil, 0, errorsmod.Wrapf(types.ErrUnknownProposal, "%d", proposalID)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// calculateDeadline returns the proposal deadline for a committee and block height
 | 
					// calculateDeadline returns the proposal deadline for a committee and block height
 | 
				
			||||||
 | 
				
			|||||||
@ -86,16 +86,16 @@ func (suite *PermissionTestSuite) TestSubParamChangePermission_Allows() {
 | 
				
			|||||||
			Denom:  "bnb",
 | 
								Denom:  "bnb",
 | 
				
			||||||
			CoinID: 714,
 | 
								CoinID: 714,
 | 
				
			||||||
			SupplyLimit: bep3types.SupplyLimit{
 | 
								SupplyLimit: bep3types.SupplyLimit{
 | 
				
			||||||
				Limit:          sdk.NewInt(350000000000000),
 | 
									Limit:          sdkmath.NewInt(350000000000000),
 | 
				
			||||||
				TimeLimited:    false,
 | 
									TimeLimited:    false,
 | 
				
			||||||
				TimeBasedLimit: sdk.ZeroInt(),
 | 
									TimeBasedLimit: sdk.ZeroInt(),
 | 
				
			||||||
				TimePeriod:     time.Hour,
 | 
									TimePeriod:     time.Hour,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			Active:        true,
 | 
								Active:        true,
 | 
				
			||||||
			DeputyAddress: testDeputy,
 | 
								DeputyAddress: testDeputy,
 | 
				
			||||||
			FixedFee:      sdk.NewInt(1000),
 | 
								FixedFee:      sdkmath.NewInt(1000),
 | 
				
			||||||
			MinSwapAmount: sdk.OneInt(),
 | 
								MinSwapAmount: sdk.OneInt(),
 | 
				
			||||||
			MaxSwapAmount: sdk.NewInt(1000000000000),
 | 
								MaxSwapAmount: sdkmath.NewInt(1000000000000),
 | 
				
			||||||
			MinBlockLock:  bep3types.DefaultMinBlockLock,
 | 
								MinBlockLock:  bep3types.DefaultMinBlockLock,
 | 
				
			||||||
			MaxBlockLock:  bep3types.DefaultMaxBlockLock,
 | 
								MaxBlockLock:  bep3types.DefaultMaxBlockLock,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@ -103,16 +103,16 @@ func (suite *PermissionTestSuite) TestSubParamChangePermission_Allows() {
 | 
				
			|||||||
			Denom:  "inc",
 | 
								Denom:  "inc",
 | 
				
			||||||
			CoinID: 9999,
 | 
								CoinID: 9999,
 | 
				
			||||||
			SupplyLimit: bep3types.SupplyLimit{
 | 
								SupplyLimit: bep3types.SupplyLimit{
 | 
				
			||||||
				Limit:          sdk.NewInt(100000000000000),
 | 
									Limit:          sdkmath.NewInt(100000000000000),
 | 
				
			||||||
				TimeLimited:    true,
 | 
									TimeLimited:    true,
 | 
				
			||||||
				TimeBasedLimit: sdk.NewInt(50000000000),
 | 
									TimeBasedLimit: sdkmath.NewInt(50000000000),
 | 
				
			||||||
				TimePeriod:     time.Hour,
 | 
									TimePeriod:     time.Hour,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			Active:        false,
 | 
								Active:        false,
 | 
				
			||||||
			DeputyAddress: testDeputy,
 | 
								DeputyAddress: testDeputy,
 | 
				
			||||||
			FixedFee:      sdk.NewInt(1000),
 | 
								FixedFee:      sdkmath.NewInt(1000),
 | 
				
			||||||
			MinSwapAmount: sdk.OneInt(),
 | 
								MinSwapAmount: sdk.OneInt(),
 | 
				
			||||||
			MaxSwapAmount: sdk.NewInt(1000000000000),
 | 
								MaxSwapAmount: sdkmath.NewInt(1000000000000),
 | 
				
			||||||
			MinBlockLock:  bep3types.DefaultMinBlockLock,
 | 
								MinBlockLock:  bep3types.DefaultMinBlockLock,
 | 
				
			||||||
			MaxBlockLock:  bep3types.DefaultMaxBlockLock,
 | 
								MaxBlockLock:  bep3types.DefaultMaxBlockLock,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
				
			|||||||
@ -3,11 +3,11 @@ package keeper
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/store/prefix"
 | 
						"github.com/cosmos/cosmos-sdk/store/prefix"
 | 
				
			||||||
	storetypes "github.com/cosmos/cosmos-sdk/store/types"
 | 
						storetypes "github.com/cosmos/cosmos-sdk/store/types"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
 | 
					 | 
				
			||||||
	govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
 | 
						govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/kava-labs/kava/x/committee/types"
 | 
						"github.com/kava-labs/kava/x/committee/types"
 | 
				
			||||||
@ -119,7 +119,7 @@ func (k Keeper) GetNextProposalID(ctx sdk.Context) (uint64, error) {
 | 
				
			|||||||
	store := ctx.KVStore(k.storeKey)
 | 
						store := ctx.KVStore(k.storeKey)
 | 
				
			||||||
	bz := store.Get(types.NextProposalIDKey)
 | 
						bz := store.Get(types.NextProposalIDKey)
 | 
				
			||||||
	if bz == nil {
 | 
						if bz == nil {
 | 
				
			||||||
		return 0, sdkerrors.Wrap(types.ErrInvalidGenesis, "next proposal ID not set at genesis")
 | 
							return 0, errorsmod.Wrap(types.ErrInvalidGenesis, "next proposal ID not set at genesis")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return types.Uint64FromBytes(bz), nil
 | 
						return types.Uint64FromBytes(bz), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sdkmath "cosmossdk.io/math"
 | 
				
			||||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						sdk "github.com/cosmos/cosmos-sdk/types"
 | 
				
			||||||
	proposal "github.com/cosmos/cosmos-sdk/x/params/types/proposal"
 | 
						proposal "github.com/cosmos/cosmos-sdk/x/params/types/proposal"
 | 
				
			||||||
	upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
 | 
						upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
 | 
				
			||||||
@ -62,7 +63,7 @@ func (suite *MsgServerTestSuite) SetupTest() {
 | 
				
			|||||||
		[]types.Proposal{},
 | 
							[]types.Proposal{},
 | 
				
			||||||
		[]types.Vote{},
 | 
							[]types.Vote{},
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	suite.communityPoolAmt = sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(1000)))
 | 
						suite.communityPoolAmt = sdk.NewCoins(sdk.NewCoin("ukava", sdkmath.NewInt(1000)))
 | 
				
			||||||
	suite.app.InitializeFromGenesisStates(
 | 
						suite.app.InitializeFromGenesisStates(
 | 
				
			||||||
		app.GenesisState{types.ModuleName: cdc.MustMarshalJSON(testGenesis)},
 | 
							app.GenesisState{types.ModuleName: cdc.MustMarshalJSON(testGenesis)},
 | 
				
			||||||
		// TODO: not used?
 | 
							// TODO: not used?
 | 
				
			||||||
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user