mirror of
https://github.com/0glabs/0g-chain.git
synced 2025-02-23 12:36:45 +00:00
172 lines
4.7 KiB
Go
172 lines
4.7 KiB
Go
package keeper
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
"github.com/cosmos/cosmos-sdk/store"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/cosmos/cosmos-sdk/x/auth"
|
|
"github.com/cosmos/cosmos-sdk/x/bank"
|
|
"github.com/cosmos/cosmos-sdk/x/params"
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
"github.com/tendermint/tendermint/libs/log"
|
|
tmtime "github.com/tendermint/tendermint/types/time"
|
|
dbm "github.com/tendermint/tm-db"
|
|
|
|
"github.com/kava-labs/kava/x/auction"
|
|
"github.com/kava-labs/kava/x/cdp"
|
|
"github.com/kava-labs/kava/x/liquidator/types"
|
|
"github.com/kava-labs/kava/x/pricefeed"
|
|
)
|
|
|
|
// Avoid cluttering test cases with long function name
|
|
func i(in int64) sdk.Int { return sdk.NewInt(in) }
|
|
func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
|
|
func cs(coins ...sdk.Coin) sdk.Coins { return sdk.NewCoins(coins...) }
|
|
|
|
type keepers struct {
|
|
paramsKeeper params.Keeper
|
|
accountKeeper auth.AccountKeeper
|
|
bankKeeper bank.Keeper
|
|
pricefeedKeeper pricefeed.Keeper
|
|
auctionKeeper auction.Keeper
|
|
cdpKeeper cdp.Keeper
|
|
liquidatorKeeper Keeper
|
|
}
|
|
|
|
func setupTestKeepers() (sdk.Context, keepers) {
|
|
|
|
// Setup in memory database
|
|
keyParams := sdk.NewKVStoreKey(params.StoreKey)
|
|
tkeyParams := sdk.NewTransientStoreKey(params.TStoreKey)
|
|
keyAcc := sdk.NewKVStoreKey(auth.StoreKey)
|
|
keyPriceFeed := sdk.NewKVStoreKey(pricefeed.StoreKey)
|
|
keyCDP := sdk.NewKVStoreKey("cdp")
|
|
keyAuction := sdk.NewKVStoreKey("auction")
|
|
keyLiquidator := sdk.NewKVStoreKey("liquidator")
|
|
|
|
db := dbm.NewMemDB()
|
|
ms := store.NewCommitMultiStore(db)
|
|
ms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db)
|
|
ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db)
|
|
ms.MountStoreWithDB(keyAcc, sdk.StoreTypeIAVL, db)
|
|
ms.MountStoreWithDB(keyPriceFeed, sdk.StoreTypeIAVL, db)
|
|
ms.MountStoreWithDB(keyCDP, sdk.StoreTypeIAVL, db)
|
|
ms.MountStoreWithDB(keyAuction, sdk.StoreTypeIAVL, db)
|
|
ms.MountStoreWithDB(keyLiquidator, sdk.StoreTypeIAVL, db)
|
|
err := ms.LoadLatestVersion()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// Create Codec
|
|
cdc := makeTestCodec()
|
|
|
|
// Create Keepers
|
|
paramsKeeper := params.NewKeeper(cdc, keyParams, tkeyParams, params.DefaultCodespace)
|
|
accountKeeper := auth.NewAccountKeeper(
|
|
cdc,
|
|
keyAcc,
|
|
paramsKeeper.Subspace(auth.DefaultParamspace),
|
|
auth.ProtoBaseAccount,
|
|
)
|
|
blacklistedAddrs := make(map[string]bool)
|
|
bankKeeper := bank.NewBaseKeeper(
|
|
accountKeeper,
|
|
paramsKeeper.Subspace(bank.DefaultParamspace),
|
|
bank.DefaultCodespace,
|
|
blacklistedAddrs,
|
|
)
|
|
pricefeedKeeper := pricefeed.NewKeeper(keyPriceFeed, cdc, paramsKeeper.Subspace(pricefeed.DefaultParamspace), pricefeed.DefaultCodespace)
|
|
cdpKeeper := cdp.NewKeeper(
|
|
cdc,
|
|
keyCDP,
|
|
paramsKeeper.Subspace(cdp.DefaultParamspace),
|
|
pricefeedKeeper,
|
|
bankKeeper,
|
|
)
|
|
auctionKeeper := auction.NewKeeper(cdc, cdpKeeper, keyAuction, paramsKeeper.Subspace(auction.DefaultParamspace)) // Note: cdp keeper stands in for bank keeper
|
|
liquidatorKeeper := NewKeeper(
|
|
cdc,
|
|
keyLiquidator,
|
|
paramsKeeper.Subspace(types.DefaultParamspace),
|
|
cdpKeeper,
|
|
auctionKeeper,
|
|
cdpKeeper,
|
|
) // Note: cdp keeper stands in for bank keeper
|
|
|
|
// Create context
|
|
ctx := sdk.NewContext(ms, abci.Header{ChainID: "testchain"}, false, log.NewNopLogger())
|
|
|
|
return ctx, keepers{
|
|
paramsKeeper,
|
|
accountKeeper,
|
|
bankKeeper,
|
|
pricefeedKeeper,
|
|
auctionKeeper,
|
|
cdpKeeper,
|
|
liquidatorKeeper,
|
|
}
|
|
}
|
|
|
|
func makeTestCodec() *codec.Codec {
|
|
var cdc = codec.New()
|
|
auth.RegisterCodec(cdc)
|
|
bank.RegisterCodec(cdc)
|
|
pricefeed.RegisterCodec(cdc)
|
|
auction.RegisterCodec(cdc)
|
|
cdp.RegisterCodec(cdc)
|
|
types.RegisterCodec(cdc)
|
|
sdk.RegisterCodec(cdc)
|
|
codec.RegisterCrypto(cdc)
|
|
return cdc
|
|
}
|
|
|
|
func defaultParams() types.LiquidatorParams {
|
|
return types.LiquidatorParams{
|
|
DebtAuctionSize: sdk.NewInt(1000),
|
|
CollateralParams: []types.CollateralParams{
|
|
{
|
|
Denom: "btc",
|
|
AuctionSize: sdk.NewInt(1),
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func cdpDefaultGenesis() cdp.GenesisState {
|
|
return cdp.GenesisState{
|
|
cdp.CdpParams{
|
|
GlobalDebtLimit: sdk.NewInt(1000000),
|
|
CollateralParams: []cdp.CollateralParams{
|
|
{
|
|
Denom: "btc",
|
|
LiquidationRatio: sdk.MustNewDecFromStr("1.5"),
|
|
DebtLimit: sdk.NewInt(500000),
|
|
},
|
|
},
|
|
},
|
|
sdk.ZeroInt(),
|
|
cdp.CDPs{},
|
|
}
|
|
}
|
|
|
|
func pricefeedGenesis() pricefeed.GenesisState {
|
|
ap := pricefeed.Params{
|
|
Markets: []pricefeed.Market{
|
|
pricefeed.Market{MarketID: "btc", BaseAsset: "btc", QuoteAsset: "usd", Oracles: pricefeed.Oracles{}, Active: true}},
|
|
}
|
|
return pricefeed.GenesisState{
|
|
Params: ap,
|
|
PostedPrices: []pricefeed.PostedPrice{
|
|
pricefeed.PostedPrice{
|
|
MarketID: "btc",
|
|
OracleAddress: sdk.AccAddress{},
|
|
Price: sdk.MustNewDecFromStr("8000.00"),
|
|
Expiry: tmtime.Now().Add(1 * time.Hour),
|
|
},
|
|
},
|
|
}
|
|
}
|