0g-chain/x/hard/legacy/v0_16/migrate_test.go
2024-08-03 15:03:23 +08:00

199 lines
5.8 KiB
Go

package v0_16
import (
"io/ioutil"
"path/filepath"
"testing"
"time"
sdkmath "cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/suite"
app "github.com/0glabs/0g-chain/app"
v015hard "github.com/0glabs/0g-chain/x/hard/legacy/v0_15"
v016hard "github.com/0glabs/0g-chain/x/hard/types"
)
type migrateTestSuite struct {
suite.Suite
addresses []sdk.AccAddress
cdc codec.Codec
legacyCdc *codec.LegacyAmino
}
func (s *migrateTestSuite) SetupTest() {
app.SetSDKConfig()
config := app.MakeEncodingConfig()
s.cdc = config.Marshaler
legacyCodec := codec.NewLegacyAmino()
s.legacyCdc = legacyCodec
_, accAddresses := app.GeneratePrivKeyAddressPairs(10)
s.addresses = accAddresses
}
func (s *migrateTestSuite) TestMigrate_JSON() {
file := filepath.Join("testdata", "v15-hard.json")
data, err := ioutil.ReadFile(file)
s.Require().NoError(err)
var v15genstate v015hard.GenesisState
err = s.legacyCdc.UnmarshalJSON(data, &v15genstate)
s.Require().NoError(err)
genstate := Migrate(v15genstate)
actual := s.cdc.MustMarshalJSON(genstate)
file = filepath.Join("testdata", "v16-hard.json")
expected, err := ioutil.ReadFile(file)
s.Require().NoError(err)
s.Require().JSONEq(string(expected), string(actual))
}
func (s *migrateTestSuite) TestMigrate_GenState() {
v15genstate := v015hard.GenesisState{
Params: v015hard.Params{
MoneyMarkets: v015hard.MoneyMarkets{
{
Denom: "kava",
BorrowLimit: v015hard.BorrowLimit{
HasMaxLimit: true,
MaximumLimit: sdk.MustNewDecFromStr("0.1"),
LoanToValue: sdk.MustNewDecFromStr("0.2"),
},
SpotMarketID: "spot-market-id",
ConversionFactor: sdkmath.NewInt(110),
InterestRateModel: v015hard.InterestRateModel{
BaseRateAPY: sdk.MustNewDecFromStr("0.1"),
BaseMultiplier: sdk.MustNewDecFromStr("0.2"),
Kink: sdk.MustNewDecFromStr("0.3"),
JumpMultiplier: sdk.MustNewDecFromStr("0.4"),
},
ReserveFactor: sdk.MustNewDecFromStr("0.5"),
KeeperRewardPercentage: sdk.MustNewDecFromStr("0.6"),
},
},
},
PreviousAccumulationTimes: v015hard.GenesisAccumulationTimes{
{
CollateralType: "kava",
PreviousAccumulationTime: time.Date(1998, time.January, 1, 12, 0, 0, 1, time.UTC),
SupplyInterestFactor: sdk.MustNewDecFromStr("0.1"),
BorrowInterestFactor: sdk.MustNewDecFromStr("0.2"),
},
},
Deposits: v015hard.Deposits{
{
Depositor: s.addresses[0],
Amount: sdk.NewCoins(sdk.NewCoin("kava", sdkmath.NewInt(100))),
Index: v015hard.SupplyInterestFactors{
{
Denom: "kava",
Value: sdk.MustNewDecFromStr("1.12"),
},
},
},
},
Borrows: v015hard.Borrows{
{
Borrower: s.addresses[1],
Amount: sdk.NewCoins(sdk.NewCoin("kava", sdkmath.NewInt(100))),
Index: v015hard.BorrowInterestFactors{
{
Denom: "kava",
Value: sdk.MustNewDecFromStr("1.12"),
},
},
},
},
TotalSupplied: sdk.NewCoins(sdk.NewCoin("kava", sdkmath.NewInt(100))),
TotalBorrowed: sdk.NewCoins(sdk.NewCoin("bnb", sdkmath.NewInt(200))),
TotalReserves: sdk.NewCoins(sdk.NewCoin("xrp", sdkmath.NewInt(300))),
}
expected := v016hard.GenesisState{
Params: v016hard.Params{
MoneyMarkets: v016hard.MoneyMarkets{
{
Denom: "kava",
BorrowLimit: v016hard.BorrowLimit{
HasMaxLimit: true,
MaximumLimit: sdk.MustNewDecFromStr("0.1"),
LoanToValue: sdk.MustNewDecFromStr("0.2"),
},
SpotMarketID: "spot-market-id",
ConversionFactor: sdkmath.NewInt(110),
InterestRateModel: v016hard.InterestRateModel{
BaseRateAPY: sdk.MustNewDecFromStr("0.1"),
BaseMultiplier: sdk.MustNewDecFromStr("0.2"),
Kink: sdk.MustNewDecFromStr("0.3"),
JumpMultiplier: sdk.MustNewDecFromStr("0.4"),
},
ReserveFactor: sdk.MustNewDecFromStr("0.5"),
KeeperRewardPercentage: sdk.MustNewDecFromStr("0.6"),
},
{
Denom: UATOM_IBC_DENOM,
BorrowLimit: v016hard.BorrowLimit{
HasMaxLimit: true,
MaximumLimit: sdk.NewDec(25000000000),
LoanToValue: sdk.MustNewDecFromStr("0.5"),
},
SpotMarketID: "atom:usd:30",
ConversionFactor: sdkmath.NewInt(1000000),
InterestRateModel: v016hard.InterestRateModel{
BaseRateAPY: sdk.ZeroDec(),
BaseMultiplier: sdk.MustNewDecFromStr("0.05"),
Kink: sdk.MustNewDecFromStr("0.8"),
JumpMultiplier: sdk.NewDec(5),
},
ReserveFactor: sdk.MustNewDecFromStr("0.025"),
KeeperRewardPercentage: sdk.MustNewDecFromStr("0.02"),
},
},
},
PreviousAccumulationTimes: v016hard.GenesisAccumulationTimes{
{
CollateralType: "kava",
PreviousAccumulationTime: time.Date(1998, time.January, 1, 12, 0, 0, 1, time.UTC),
SupplyInterestFactor: sdk.MustNewDecFromStr("0.1"),
BorrowInterestFactor: sdk.MustNewDecFromStr("0.2"),
},
},
Deposits: v016hard.Deposits{
{
Depositor: s.addresses[0],
Amount: sdk.NewCoins(sdk.NewCoin("kava", sdkmath.NewInt(100))),
Index: v016hard.SupplyInterestFactors{
{
Denom: "kava",
Value: sdk.MustNewDecFromStr("1.12"),
},
},
},
},
Borrows: v016hard.Borrows{
{
Borrower: s.addresses[1],
Amount: sdk.NewCoins(sdk.NewCoin("kava", sdkmath.NewInt(100))),
Index: v016hard.BorrowInterestFactors{
{
Denom: "kava",
Value: sdk.MustNewDecFromStr("1.12"),
},
},
},
},
TotalSupplied: sdk.NewCoins(sdk.NewCoin("kava", sdkmath.NewInt(100))),
TotalBorrowed: sdk.NewCoins(sdk.NewCoin("bnb", sdkmath.NewInt(200))),
TotalReserves: sdk.NewCoins(sdk.NewCoin("xrp", sdkmath.NewInt(300))),
}
genState := Migrate(v15genstate)
s.Require().Equal(expected, *genState)
}
func TestHardMigrateTestSuite(t *testing.T) {
suite.Run(t, new(migrateTestSuite))
}