2020-08-17 15:06:59 +00:00
package v0_11
import (
2020-09-30 23:14:07 +00:00
"fmt"
2020-08-27 02:05:27 +00:00
"time"
2020-08-17 15:06:59 +00:00
sdk "github.com/cosmos/cosmos-sdk/types"
2020-09-30 23:14:07 +00:00
v39_1auth "github.com/cosmos/cosmos-sdk/x/auth"
v39_1authexported "github.com/cosmos/cosmos-sdk/x/auth/exported"
"github.com/cosmos/cosmos-sdk/x/auth/vesting"
v39_1vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
v39_1gov "github.com/cosmos/cosmos-sdk/x/gov"
v39_1supply "github.com/cosmos/cosmos-sdk/x/supply"
2020-08-17 15:06:59 +00:00
2020-09-30 23:14:07 +00:00
v38_5auth "github.com/kava-labs/kava/migrate/v0_11/legacy/cosmos-sdk/v0.38.5/auth"
v38_5supply "github.com/kava-labs/kava/migrate/v0_11/legacy/cosmos-sdk/v0.38.5/supply"
2020-09-30 23:21:34 +00:00
v0_11bep3 "github.com/kava-labs/kava/x/bep3"
2020-08-17 15:06:59 +00:00
v0_9bep3 "github.com/kava-labs/kava/x/bep3/legacy/v0_9"
2020-09-30 22:58:50 +00:00
v0_11cdp "github.com/kava-labs/kava/x/cdp"
v0_9cdp "github.com/kava-labs/kava/x/cdp/legacy/v0_9"
2020-10-01 19:22:26 +00:00
v0_11committee "github.com/kava-labs/kava/x/committee"
v0_9committee "github.com/kava-labs/kava/x/committee/legacy/v0_9"
2020-09-30 23:07:30 +00:00
v0_11harvest "github.com/kava-labs/kava/x/harvest"
2020-09-30 18:41:46 +00:00
v0_11incentive "github.com/kava-labs/kava/x/incentive"
v0_9incentive "github.com/kava-labs/kava/x/incentive/legacy/v0_9"
2020-09-30 18:33:48 +00:00
v0_11pricefeed "github.com/kava-labs/kava/x/pricefeed"
v0_9pricefeed "github.com/kava-labs/kava/x/pricefeed/legacy/v0_9"
2020-09-30 23:14:07 +00:00
v0_11validator_vesting "github.com/kava-labs/kava/x/validator-vesting"
v0_9validator_vesting "github.com/kava-labs/kava/x/validator-vesting/legacy/v0_9"
2020-08-17 15:06:59 +00:00
)
2020-09-30 23:14:07 +00:00
var deputyBnbBalance sdk . Coin
var hardBalance sdk . Coin
2020-08-17 15:06:59 +00:00
// MigrateBep3 migrates from a v0.9 (or v0.10) bep3 genesis state to a v0.11 bep3 genesis state
func MigrateBep3 ( oldGenState v0_9bep3 . GenesisState ) v0_11bep3 . GenesisState {
var assetParams v0_11bep3 . AssetParams
2020-08-27 02:05:27 +00:00
var assetSupplies v0_11bep3 . AssetSupplies
2020-08-17 15:06:59 +00:00
v0_9Params := oldGenState . Params
for _ , asset := range v0_9Params . SupportedAssets {
2020-09-30 23:21:34 +00:00
v11AssetParam := v0_11bep3 . AssetParam {
2020-08-17 15:06:59 +00:00
Active : asset . Active ,
Denom : asset . Denom ,
CoinID : asset . CoinID ,
DeputyAddress : v0_9Params . BnbDeputyAddress ,
FixedFee : v0_9Params . BnbDeputyFixedFee ,
2020-09-30 23:21:34 +00:00
MinSwapAmount : v0_9Params . BnbDeputyFixedFee . Add ( sdk . OneInt ( ) ) , // set min swap to one (after fees)- prevents accounts that hold zero bnb from creating spam txs
2020-08-17 15:06:59 +00:00
MaxSwapAmount : v0_9Params . MaxAmount ,
MinBlockLock : v0_9Params . MinBlockLock ,
MaxBlockLock : v0_9Params . MaxBlockLock ,
2020-08-27 02:05:27 +00:00
SupplyLimit : v0_11bep3 . SupplyLimit {
Limit : asset . Limit ,
TimeLimited : false ,
TimePeriod : time . Duration ( 0 ) ,
TimeBasedLimit : sdk . ZeroInt ( ) ,
2020-08-17 15:06:59 +00:00
} ,
}
2020-09-30 23:21:34 +00:00
assetParams = append ( assetParams , v11AssetParam )
2020-08-17 15:06:59 +00:00
}
for _ , supply := range oldGenState . AssetSupplies {
2020-08-27 02:05:27 +00:00
newSupply := v0_11bep3 . NewAssetSupply ( supply . IncomingSupply , supply . OutgoingSupply , supply . CurrentSupply , sdk . NewCoin ( supply . CurrentSupply . Denom , sdk . ZeroInt ( ) ) , time . Duration ( 0 ) )
assetSupplies = append ( assetSupplies , newSupply )
2020-08-17 15:06:59 +00:00
}
var swaps v0_11bep3 . AtomicSwaps
for _ , oldSwap := range oldGenState . AtomicSwaps {
newSwap := v0_11bep3 . AtomicSwap {
Amount : oldSwap . Amount ,
RandomNumberHash : oldSwap . RandomNumberHash ,
ExpireHeight : oldSwap . ExpireHeight ,
Timestamp : oldSwap . Timestamp ,
Sender : oldSwap . Sender ,
Recipient : oldSwap . Recipient ,
SenderOtherChain : oldSwap . SenderOtherChain ,
RecipientOtherChain : oldSwap . RecipientOtherChain ,
ClosedBlock : oldSwap . ClosedBlock ,
Status : v0_11bep3 . SwapStatus ( oldSwap . Status ) ,
CrossChain : oldSwap . CrossChain ,
Direction : v0_11bep3 . SwapDirection ( oldSwap . Direction ) ,
}
swaps = append ( swaps , newSwap )
}
2020-09-30 23:21:34 +00:00
// -------------- ADD BTCB To BEP3 params --------------------
btcbAssetParam := v0_11bep3 . NewAssetParam (
"btcb" ,
0 ,
v0_11bep3 . SupplyLimit {
Limit : sdk . NewInt ( 100000000 ) , // 1 BTC limit at launch
TimeLimited : false ,
TimePeriod : time . Duration ( 0 ) ,
TimeBasedLimit : sdk . ZeroInt ( ) } ,
true ,
mustAccAddressFromBech32 ( "kava14qsmvzprqvhwmgql9fr0u3zv9n2qla8zhnm5pc" ) ,
sdk . NewInt ( 2 ) , // 2 satoshi fee
sdk . NewInt ( 3 ) ,
sdk . NewInt ( 1000000000 ) ,
220 ,
270 ,
)
btcbAssetSupply := v0_11bep3 . NewAssetSupply (
sdk . NewCoin ( "btcb" , sdk . ZeroInt ( ) ) ,
sdk . NewCoin ( "btcb" , sdk . ZeroInt ( ) ) ,
sdk . NewCoin ( "btcb" , sdk . ZeroInt ( ) ) ,
sdk . NewCoin ( "btcb" , sdk . ZeroInt ( ) ) ,
time . Duration ( 0 ) )
assetParams = append ( assetParams , btcbAssetParam )
assetSupplies = append ( assetSupplies , btcbAssetSupply )
// -------------- ADD XRPB To BEP3 params --------------------
xrpbAssetParam := v0_11bep3 . NewAssetParam (
"xrpb" , // NOTE: XRPB has 8 decimals on binance chain, whereas XRP has 6 decimals natively
144 ,
v0_11bep3 . SupplyLimit {
Limit : sdk . NewInt ( 1000000000000 ) , // 10,000 XRP limit at launch
TimeLimited : false ,
TimePeriod : time . Duration ( 0 ) ,
TimeBasedLimit : sdk . ZeroInt ( ) } ,
true ,
mustAccAddressFromBech32 ( "kava1c0ju5vnwgpgxnrktfnkccuth9xqc68dcdpzpas" ) ,
sdk . NewInt ( 100000 ) , // 0.001 XRP fee
sdk . NewInt ( 100001 ) ,
sdk . NewInt ( 10000000000000 ) ,
220 ,
270 ,
)
xrpbAssetSupply := v0_11bep3 . NewAssetSupply (
sdk . NewCoin ( "xrpb" , sdk . ZeroInt ( ) ) ,
sdk . NewCoin ( "xrpb" , sdk . ZeroInt ( ) ) ,
sdk . NewCoin ( "xrpb" , sdk . ZeroInt ( ) ) ,
sdk . NewCoin ( "xrpb" , sdk . ZeroInt ( ) ) ,
time . Duration ( 0 ) )
assetParams = append ( assetParams , xrpbAssetParam )
assetSupplies = append ( assetSupplies , xrpbAssetSupply )
// -------------- ADD BUSD To BEP3 params --------------------
busdAssetParam := v0_11bep3 . NewAssetParam (
"busd" ,
727 , // note - no official SLIP 44 ID
v0_11bep3 . SupplyLimit {
Limit : sdk . NewInt ( 100000000000 ) , // 1,000 BUSD limit at launch
TimeLimited : false ,
TimePeriod : time . Duration ( 0 ) ,
TimeBasedLimit : sdk . ZeroInt ( ) } ,
true ,
mustAccAddressFromBech32 ( "kava1hh4x3a4suu5zyaeauvmv7ypf7w9llwlfufjmuu" ) ,
sdk . NewInt ( 20000 ) ,
sdk . NewInt ( 20001 ) ,
sdk . NewInt ( 1000000000000 ) ,
220 ,
270 ,
)
busdAssetSupply := v0_11bep3 . NewAssetSupply (
sdk . NewCoin ( "busd" , sdk . ZeroInt ( ) ) ,
sdk . NewCoin ( "busd" , sdk . ZeroInt ( ) ) ,
sdk . NewCoin ( "busd" , sdk . ZeroInt ( ) ) ,
sdk . NewCoin ( "busd" , sdk . ZeroInt ( ) ) ,
time . Duration ( 0 ) )
assetParams = append ( assetParams , busdAssetParam )
assetSupplies = append ( assetSupplies , busdAssetSupply )
2020-08-17 15:06:59 +00:00
return v0_11bep3 . GenesisState {
2020-09-30 23:21:34 +00:00
Params : v0_11bep3 . NewParams ( assetParams ) ,
2020-08-27 02:05:27 +00:00
AtomicSwaps : swaps ,
Supplies : assetSupplies ,
PreviousBlockTime : v0_11bep3 . DefaultPreviousBlockTime ,
2020-08-17 15:06:59 +00:00
}
}
2020-09-30 18:33:48 +00:00
2020-10-01 19:22:26 +00:00
// MigrateCommittee migrates from a v0.9 (or v0.10) committee genesis state to a v0.11 committee genesis state
func MigrateCommittee ( oldGenState v0_9committee . GenesisState ) v0_11committee . GenesisState {
var newCommittees [ ] v0_11committee . Committee
var newStabilityCommittee v0_11committee . Committee
var newSafetyCommittee v0_11committee . Committee
var newProposals [ ] v0_11committee . Proposal
var newVotes [ ] v0_11committee . Vote
for _ , committee := range oldGenState . Committees {
if committee . ID == 1 {
newStabilityCommittee . Description = committee . Description
newStabilityCommittee . ID = committee . ID
newStabilityCommittee . Members = committee . Members
newStabilityCommittee . VoteThreshold = committee . VoteThreshold
newStabilityCommittee . ProposalDuration = committee . ProposalDuration
var newStabilityPermissions [ ] v0_11committee . Permission
var newStabilitySubParamPermissions v0_11committee . SubParamChangePermission
for _ , permission := range committee . Permissions {
subPermission , ok := permission . ( v0_9committee . SubParamChangePermission )
if ok {
oldCollateralParam := subPermission . AllowedCollateralParams [ 0 ]
newCollateralParam := v0_11committee . AllowedCollateralParam {
Type : "bnb-a" ,
Denom : false ,
AuctionSize : oldCollateralParam . AuctionSize ,
ConversionFactor : oldCollateralParam . ConversionFactor ,
DebtLimit : oldCollateralParam . DebtLimit ,
LiquidationMarketID : oldCollateralParam . LiquidationMarketID ,
SpotMarketID : oldCollateralParam . SpotMarketID ,
LiquidationPenalty : oldCollateralParam . LiquidationPenalty ,
LiquidationRatio : oldCollateralParam . LiquidationRatio ,
Prefix : oldCollateralParam . Prefix ,
StabilityFee : oldCollateralParam . StabilityFee ,
}
oldDebtParam := subPermission . AllowedDebtParam
newDebtParam := v0_11committee . AllowedDebtParam {
ConversionFactor : oldDebtParam . ConversionFactor ,
DebtFloor : oldDebtParam . DebtFloor ,
Denom : oldDebtParam . Denom ,
ReferenceAsset : oldDebtParam . ReferenceAsset ,
SavingsRate : oldDebtParam . SavingsRate ,
}
oldAssetParam := subPermission . AllowedAssetParams [ 0 ]
newAssetParam := v0_11committee . AllowedAssetParam {
Active : oldAssetParam . Active ,
CoinID : oldAssetParam . CoinID ,
Denom : oldAssetParam . Denom ,
Limit : oldAssetParam . Limit ,
MaxSwapAmount : true ,
MinBlockLock : true ,
}
oldMarketParams := subPermission . AllowedMarkets
var newMarketParams v0_11committee . AllowedMarkets
for _ , oldMarketParam := range oldMarketParams {
newMarketParam := v0_11committee . AllowedMarket ( oldMarketParam )
newMarketParams = append ( newMarketParams , newMarketParam )
}
// add btc, xrp, busd markets to committee
btcMarketParam := v0_11committee . AllowedMarket {
MarketID : "btc:usd" ,
BaseAsset : false ,
QuoteAsset : false ,
Oracles : false ,
Active : true ,
}
btc30MarketParam := v0_11committee . AllowedMarket {
MarketID : "btc:usd:30" ,
BaseAsset : false ,
QuoteAsset : false ,
Oracles : false ,
Active : true ,
}
xrpMarketParam := v0_11committee . AllowedMarket {
MarketID : "xrp:usd" ,
BaseAsset : false ,
QuoteAsset : false ,
Oracles : false ,
Active : true ,
}
xrp30MarketParam := v0_11committee . AllowedMarket {
MarketID : "xrp:usd:30" ,
BaseAsset : false ,
QuoteAsset : false ,
Oracles : false ,
Active : true ,
}
busdMarketParam := v0_11committee . AllowedMarket {
MarketID : "busd:usd" ,
BaseAsset : false ,
QuoteAsset : false ,
Oracles : false ,
Active : true ,
}
busd30MarketParam := v0_11committee . AllowedMarket {
MarketID : "busd:usd:30" ,
BaseAsset : false ,
QuoteAsset : false ,
Oracles : false ,
Active : true ,
}
newMarketParams = append ( newMarketParams , btcMarketParam , btc30MarketParam , xrpMarketParam , xrp30MarketParam , busdMarketParam , busd30MarketParam )
oldAllowedParams := subPermission . AllowedParams
var newAllowedParams v0_11committee . AllowedParams
for _ , oldAllowedParam := range oldAllowedParams {
newAllowedParam := v0_11committee . AllowedParam ( oldAllowedParam )
if oldAllowedParam . Subspace == "bep3" && oldAllowedParam . Key == "SupportedAssets" {
newAllowedParam . Key = "AssetParams"
}
harvestParam := v0_11committee . AllowedParam { Subspace : "harvest" , Key : "Active" }
newAllowedParams = append ( newAllowedParams , newAllowedParam , harvestParam )
}
// --------------- ADD BUSD, XRP-B, BTC-B BEP3 parameters to Stability Committee Permissions
busdAllowedAssetParam := v0_11committee . AllowedAssetParam {
Active : true ,
CoinID : true , // allow busd coinID to be updated in case it gets its own slip-44
Denom : "busd" ,
Limit : true ,
MaxSwapAmount : true ,
MinBlockLock : true ,
}
xrpbAllowedAssetParam := v0_11committee . AllowedAssetParam {
Active : true ,
CoinID : false ,
Denom : "xrpb" ,
Limit : true ,
MaxSwapAmount : true ,
MinBlockLock : true ,
}
btcbAllowedAssetParam := v0_11committee . AllowedAssetParam {
Active : true ,
CoinID : false ,
Denom : "btcb" ,
Limit : true ,
MaxSwapAmount : true ,
MinBlockLock : true ,
}
// --------- ADD BTC-B, XRP-B, BUSD(a), BUSD(b) cdp collateral params to stability committee
busdaAllowedCollateralParam := v0_11committee . NewAllowedCollateralParam (
"busd-a" , false , false , true , true , true , false , false , false , false , false ,
)
busdbAllowedCollateralParam := v0_11committee . NewAllowedCollateralParam (
"busd-b" , false , false , true , true , true , false , false , false , false , false ,
)
btcbAllowedCollateralParam := v0_11committee . NewAllowedCollateralParam (
"btcb-a" , false , false , true , true , true , false , false , false , false , false ,
)
xrpbAllowedCollateralParam := v0_11committee . NewAllowedCollateralParam (
"xrpb-a" , false , false , true , true , true , false , false , false , false , false ,
)
newStabilitySubParamPermissions . AllowedAssetParams = v0_11committee . AllowedAssetParams {
newAssetParam , busdAllowedAssetParam , btcbAllowedAssetParam , xrpbAllowedAssetParam }
newStabilitySubParamPermissions . AllowedCollateralParams = v0_11committee . AllowedCollateralParams {
newCollateralParam , busdaAllowedCollateralParam , busdbAllowedCollateralParam , btcbAllowedCollateralParam , xrpbAllowedCollateralParam }
newStabilitySubParamPermissions . AllowedDebtParam = newDebtParam
newStabilitySubParamPermissions . AllowedMarkets = newMarketParams
newStabilitySubParamPermissions . AllowedParams = newAllowedParams
newStabilityPermissions = append ( newStabilityPermissions , newStabilitySubParamPermissions )
}
}
newStabilityPermissions = append ( newStabilityPermissions , v0_11committee . TextPermission { } )
newStabilityCommittee . Permissions = newStabilityPermissions
newCommittees = append ( newCommittees , newStabilityCommittee )
} else {
newSafetyCommittee . ID = committee . ID
newSafetyCommittee . Description = committee . Description
newSafetyCommittee . Members = committee . Members
newSafetyCommittee . Permissions = [ ] v0_11committee . Permission { v0_11committee . SoftwareUpgradePermission { } }
newSafetyCommittee . VoteThreshold = committee . VoteThreshold
newSafetyCommittee . ProposalDuration = committee . ProposalDuration
newCommittees = append ( newCommittees , newSafetyCommittee )
}
}
for _ , oldProp := range oldGenState . Proposals {
newPubProposal := v0_11committee . PubProposal ( oldProp . PubProposal )
newProp := v0_11committee . NewProposal ( newPubProposal , oldProp . ID , oldProp . CommitteeID , oldProp . Deadline )
newProposals = append ( newProposals , newProp )
}
for _ , oldVote := range oldGenState . Votes {
newVote := v0_11committee . NewVote ( oldVote . ProposalID , oldVote . Voter )
newVotes = append ( newVotes , newVote )
}
return v0_11committee . GenesisState {
NextProposalID : oldGenState . NextProposalID ,
Committees : newCommittees ,
Proposals : newProposals ,
Votes : newVotes ,
}
}
2020-09-30 23:14:07 +00:00
// MigrateAuth migrates from a v0.38.5 auth genesis state to a v0.39.1 auth genesis state
func MigrateAuth ( oldGenState v38_5auth . GenesisState ) v39_1auth . GenesisState {
var newAccounts v39_1authexported . GenesisAccounts
deputyAddr , err := sdk . AccAddressFromBech32 ( "kava1r4v2zdhdalfj2ydazallqvrus9fkphmglhn6u6" )
if err != nil {
panic ( err )
}
for _ , account := range oldGenState . Accounts {
switch acc := account . ( type ) {
case * v38_5auth . BaseAccount :
a := v39_1auth . BaseAccount ( * acc )
// Remove deputy bnb
if a . GetAddress ( ) . Equals ( deputyAddr ) {
deputyBnbBalance = sdk . NewCoin ( "bnb" , a . GetCoins ( ) . AmountOf ( "bnb" ) )
err := a . SetCoins ( a . GetCoins ( ) . Sub ( sdk . NewCoins ( sdk . NewCoin ( "bnb" , a . GetCoins ( ) . AmountOf ( "bnb" ) ) ) ) )
if err != nil {
panic ( err )
}
}
newAccounts = append ( newAccounts , v39_1authexported . GenesisAccount ( & a ) )
case * v38_5auth . BaseVestingAccount :
ba := v39_1auth . BaseAccount ( * ( acc . BaseAccount ) )
bva := v39_1vesting . BaseVestingAccount {
BaseAccount : & ba ,
OriginalVesting : acc . OriginalVesting ,
DelegatedFree : acc . DelegatedFree ,
DelegatedVesting : acc . DelegatedVesting ,
EndTime : acc . EndTime ,
}
newAccounts = append ( newAccounts , v39_1authexported . GenesisAccount ( & bva ) )
case * v38_5auth . ContinuousVestingAccount :
ba := v39_1auth . BaseAccount ( * ( acc . BaseVestingAccount . BaseAccount ) )
bva := v39_1vesting . BaseVestingAccount {
BaseAccount : & ba ,
OriginalVesting : acc . BaseVestingAccount . OriginalVesting ,
DelegatedFree : acc . BaseVestingAccount . DelegatedFree ,
DelegatedVesting : acc . BaseVestingAccount . DelegatedVesting ,
EndTime : acc . BaseVestingAccount . EndTime ,
}
cva := v39_1vesting . ContinuousVestingAccount {
BaseVestingAccount : & bva ,
StartTime : acc . StartTime ,
}
newAccounts = append ( newAccounts , v39_1authexported . GenesisAccount ( & cva ) )
case * v38_5auth . DelayedVestingAccount :
ba := v39_1auth . BaseAccount ( * ( acc . BaseVestingAccount . BaseAccount ) )
bva := v39_1vesting . BaseVestingAccount {
BaseAccount : & ba ,
OriginalVesting : acc . BaseVestingAccount . OriginalVesting ,
DelegatedFree : acc . BaseVestingAccount . DelegatedFree ,
DelegatedVesting : acc . BaseVestingAccount . DelegatedVesting ,
EndTime : acc . BaseVestingAccount . EndTime ,
}
dva := v39_1vesting . DelayedVestingAccount {
BaseVestingAccount : & bva ,
}
newAccounts = append ( newAccounts , v39_1authexported . GenesisAccount ( & dva ) )
case * v38_5auth . PeriodicVestingAccount :
ba := v39_1auth . BaseAccount ( * ( acc . BaseVestingAccount . BaseAccount ) )
bva := v39_1vesting . BaseVestingAccount {
BaseAccount : & ba ,
OriginalVesting : acc . BaseVestingAccount . OriginalVesting ,
DelegatedFree : acc . BaseVestingAccount . DelegatedFree ,
DelegatedVesting : acc . BaseVestingAccount . DelegatedVesting ,
EndTime : acc . BaseVestingAccount . EndTime ,
}
var newPeriods v39_1vesting . Periods
for _ , p := range acc . VestingPeriods {
newPeriods = append ( newPeriods , v39_1vesting . Period ( p ) )
}
pva := v39_1vesting . PeriodicVestingAccount {
BaseVestingAccount : & bva ,
StartTime : acc . StartTime ,
VestingPeriods : newPeriods ,
}
newAccounts = append ( newAccounts , v39_1authexported . GenesisAccount ( & pva ) )
case * v38_5supply . ModuleAccount :
ba := v39_1auth . BaseAccount ( * ( acc . BaseAccount ) )
ma := v39_1supply . ModuleAccount {
BaseAccount : & ba ,
Name : acc . Name ,
Permissions : acc . Permissions ,
}
newAccounts = append ( newAccounts , v39_1authexported . GenesisAccount ( & ma ) )
case * v0_9validator_vesting . ValidatorVestingAccount :
ba := v39_1auth . BaseAccount ( * ( acc . BaseAccount ) )
bva := v39_1vesting . BaseVestingAccount {
BaseAccount : & ba ,
OriginalVesting : acc . BaseVestingAccount . OriginalVesting ,
DelegatedFree : acc . BaseVestingAccount . DelegatedFree ,
DelegatedVesting : acc . BaseVestingAccount . DelegatedVesting ,
EndTime : acc . BaseVestingAccount . EndTime ,
}
var newPeriods v39_1vesting . Periods
for _ , p := range acc . VestingPeriods {
newPeriods = append ( newPeriods , v39_1vesting . Period ( p ) )
}
pva := v39_1vesting . PeriodicVestingAccount {
BaseVestingAccount : & bva ,
StartTime : acc . StartTime ,
VestingPeriods : newPeriods ,
}
var newVestingProgress [ ] v0_11validator_vesting . VestingProgress
for _ , p := range acc . VestingPeriodProgress {
newVestingProgress = append ( newVestingProgress , v0_11validator_vesting . VestingProgress ( p ) )
}
vva := v0_11validator_vesting . ValidatorVestingAccount {
PeriodicVestingAccount : & pva ,
ValidatorAddress : acc . ValidatorAddress ,
ReturnAddress : acc . ReturnAddress ,
SigningThreshold : acc . SigningThreshold ,
CurrentPeriodProgress : v0_11validator_vesting . CurrentPeriodProgress ( acc . CurrentPeriodProgress ) ,
VestingPeriodProgress : newVestingProgress ,
DebtAfterFailedVesting : acc . DebtAfterFailedVesting ,
}
newAccounts = append ( newAccounts , v39_1authexported . GenesisAccount ( & vva ) )
default :
panic ( fmt . Sprintf ( "unrecognized account type: %T" , acc ) )
}
}
// ---- add harvest module accounts -------
lpMacc := v39_1supply . NewEmptyModuleAccount ( v0_11harvest . LPAccount , v39_1supply . Minter , v39_1supply . Burner )
err = lpMacc . SetCoins ( sdk . NewCoins ( sdk . NewCoin ( "hard" , sdk . NewInt ( 80000000000000 ) ) ) )
if err != nil {
panic ( err )
}
newAccounts = append ( newAccounts , v39_1authexported . GenesisAccount ( lpMacc ) )
delegatorMacc := v39_1supply . NewEmptyModuleAccount ( v0_11harvest . DelegatorAccount , v39_1supply . Minter , v39_1supply . Burner )
err = delegatorMacc . SetCoins ( sdk . NewCoins ( sdk . NewCoin ( "hard" , sdk . NewInt ( 40000000000000 ) ) ) )
if err != nil {
panic ( err )
}
newAccounts = append ( newAccounts , v39_1authexported . GenesisAccount ( delegatorMacc ) )
hardBalance = sdk . NewCoin ( "hard" , sdk . NewInt ( 200000000000000 ) )
hardTeam := createHardTeamVestingAccount ( )
hardTreasury := createHardTreasuryVestingAccount ( )
hardIEO := createHardIEOAccount ( )
newAccounts = append ( newAccounts , hardTeam , hardTreasury , & hardIEO )
return v39_1auth . NewGenesisState ( v39_1auth . Params ( oldGenState . Params ) , newAccounts )
}
// MigrateSupply reconciles supply from kava-3 to kava-4
// deputy balance of bnb coins is removed (deputy now mints coins)
// hard token supply is added
func MigrateSupply ( oldGenState v39_1supply . GenesisState , deputyBalance sdk . Coin , hardBalance sdk . Coin ) v39_1supply . GenesisState {
oldGenState . Supply = oldGenState . Supply . Sub ( sdk . Coins { deputyBalance } ) . Add ( hardBalance )
return oldGenState
}
// MigrateGov migrates gov genesis state
func MigrateGov ( oldGenState v39_1gov . GenesisState ) v39_1gov . GenesisState {
oldGenState . VotingParams . VotingPeriod = time . Hour * 24 * 7
return oldGenState
}
2020-09-30 23:07:30 +00:00
// MigrateHarvest initializes the harvest genesis state for kava-4
func MigrateHarvest ( ) v0_11harvest . GenesisState {
// total HARD per second for lps (week one): 633761
// HARD per second for delegators (week one): 1267522
incentiveGoLiveDate := time . Date ( 2020 , 10 , 16 , 14 , 0 , 0 , 0 , time . UTC )
incentiveEndDate := time . Date ( 2024 , 10 , 16 , 14 , 0 , 0 , 0 , time . UTC )
claimEndDate := time . Date ( 2025 , 10 , 16 , 14 , 0 , 0 , 0 , time . UTC )
harvestGS := v0_11harvest . NewGenesisState ( v0_11harvest . NewParams (
true ,
v0_11harvest . DistributionSchedules {
v0_11harvest . NewDistributionSchedule ( true , "usdx" , incentiveGoLiveDate , incentiveEndDate , sdk . NewCoin ( "hard" , sdk . NewInt ( 310543 ) ) , claimEndDate , v0_11harvest . Multipliers { v0_11harvest . NewMultiplier ( v0_11harvest . Small , 1 , sdk . MustNewDecFromStr ( "0.33" ) ) , v0_11harvest . NewMultiplier ( v0_11harvest . Large , 12 , sdk . OneDec ( ) ) } ) ,
v0_11harvest . NewDistributionSchedule ( true , "hard" , incentiveGoLiveDate , incentiveEndDate , sdk . NewCoin ( "hard" , sdk . NewInt ( 285193 ) ) , claimEndDate , v0_11harvest . Multipliers { v0_11harvest . NewMultiplier ( v0_11harvest . Small , 1 , sdk . MustNewDecFromStr ( "0.33" ) ) , v0_11harvest . NewMultiplier ( v0_11harvest . Large , 12 , sdk . OneDec ( ) ) } ) ,
v0_11harvest . NewDistributionSchedule ( true , "bnb" , incentiveGoLiveDate , incentiveEndDate , sdk . NewCoin ( "hard" , sdk . NewInt ( 12675 ) ) , claimEndDate , v0_11harvest . Multipliers { v0_11harvest . NewMultiplier ( v0_11harvest . Small , 1 , sdk . MustNewDecFromStr ( "0.33" ) ) , v0_11harvest . NewMultiplier ( v0_11harvest . Large , 12 , sdk . OneDec ( ) ) } ) ,
v0_11harvest . NewDistributionSchedule ( true , "ukava" , incentiveGoLiveDate , incentiveEndDate , sdk . NewCoin ( "hard" , sdk . NewInt ( 25350 ) ) , claimEndDate , v0_11harvest . Multipliers { v0_11harvest . NewMultiplier ( v0_11harvest . Small , 1 , sdk . MustNewDecFromStr ( "0.33" ) ) , v0_11harvest . NewMultiplier ( v0_11harvest . Large , 12 , sdk . OneDec ( ) ) } ) ,
} ,
v0_11harvest . DelegatorDistributionSchedules { v0_11harvest . NewDelegatorDistributionSchedule (
v0_11harvest . NewDistributionSchedule ( true , "ukava" , incentiveGoLiveDate , incentiveEndDate , sdk . NewCoin ( "hard" , sdk . NewInt ( 1267522 ) ) , claimEndDate , v0_11harvest . Multipliers { v0_11harvest . NewMultiplier ( v0_11harvest . Small , 1 , sdk . MustNewDecFromStr ( "0.33" ) ) , v0_11harvest . NewMultiplier ( v0_11harvest . Large , 12 , sdk . OneDec ( ) ) } ) ,
time . Hour * 24 ,
) ,
} ,
) , v0_11harvest . DefaultPreviousBlockTime , v0_11harvest . DefaultDistributionTimes )
return harvestGS
}
2020-09-30 22:58:50 +00:00
// MigrateCDP migrates from a v0.9 (or v0.10) cdp genesis state to a v0.11 cdp genesis state
func MigrateCDP ( oldGenState v0_9cdp . GenesisState ) v0_11cdp . GenesisState {
var newCDPs v0_11cdp . CDPs
var newDeposits v0_11cdp . Deposits
var newCollateralParams v0_11cdp . CollateralParams
newStartingID := oldGenState . StartingCdpID
for _ , cdp := range oldGenState . CDPs {
newCDP := v0_11cdp . NewCDPWithFees ( cdp . ID , cdp . Owner , cdp . Collateral , "bnb-a" , cdp . Principal , cdp . AccumulatedFees , cdp . FeesUpdated )
newCDPs = append ( newCDPs , newCDP )
}
for _ , dep := range oldGenState . Deposits {
newDep := v0_11cdp . NewDeposit ( dep . CdpID , dep . Depositor , dep . Amount )
newDeposits = append ( newDeposits , newDep )
}
for _ , cp := range oldGenState . Params . CollateralParams {
newCollateralParam := v0_11cdp . NewCollateralParam ( cp . Denom , "bnb-a" , cp . LiquidationRatio , cp . DebtLimit , cp . StabilityFee , cp . AuctionSize , cp . LiquidationPenalty , 0x01 , cp . SpotMarketID , cp . LiquidationMarketID , cp . ConversionFactor )
newCollateralParams = append ( newCollateralParams , newCollateralParam )
}
btcbCollateralParam := v0_11cdp . NewCollateralParam ( "btcb" , "btcb-a" , sdk . MustNewDecFromStr ( "1.5" ) , sdk . NewCoin ( "usdx" , sdk . NewInt ( 100000000000 ) ) , sdk . MustNewDecFromStr ( "1.000000001547125958" ) , sdk . NewInt ( 100000000 ) , sdk . MustNewDecFromStr ( "0.075000000000000000" ) , 0x02 , "btc:usd" , "btc:usd:30" , sdk . NewInt ( 8 ) )
busdaCollateralParam := v0_11cdp . NewCollateralParam ( "busd" , "busd-a" , sdk . MustNewDecFromStr ( "1.01" ) , sdk . NewCoin ( "usdx" , sdk . NewInt ( 3000000000000 ) ) , sdk . OneDec ( ) , sdk . NewInt ( 1000000000000 ) , sdk . MustNewDecFromStr ( "0.075000000000000000" ) , 0x03 , "busd:usd" , "busd:usd:30" , sdk . NewInt ( 8 ) )
busdbCollateralParam := v0_11cdp . NewCollateralParam ( "busd" , "busd-b" , sdk . MustNewDecFromStr ( "1.1" ) , sdk . NewCoin ( "usdx" , sdk . NewInt ( 1000000000000 ) ) , sdk . MustNewDecFromStr ( "1.000000012857214317" ) , sdk . NewInt ( 1000000000000 ) , sdk . MustNewDecFromStr ( "0.075000000000000000" ) , 0x04 , "busd:usd" , "busd:usd:30" , sdk . NewInt ( 8 ) )
xrpbCollateralParam := v0_11cdp . NewCollateralParam ( "xrpb" , "xrpb-a" , sdk . MustNewDecFromStr ( "1.5" ) , sdk . NewCoin ( "usdx" , sdk . NewInt ( 100000000000 ) ) , sdk . MustNewDecFromStr ( "1.000000001547125958" ) , sdk . NewInt ( 4000000000000 ) , sdk . MustNewDecFromStr ( "0.075000000000000000" ) , 0x05 , "xrp:usd" , "xrp:usd:30" , sdk . NewInt ( 8 ) )
newCollateralParams = append ( newCollateralParams , btcbCollateralParam , busdaCollateralParam , busdbCollateralParam , xrpbCollateralParam )
oldDebtParam := oldGenState . Params . DebtParam
newDebtParam := v0_11cdp . NewDebtParam ( oldDebtParam . Denom , oldDebtParam . ReferenceAsset , oldDebtParam . ConversionFactor , oldDebtParam . DebtFloor , oldDebtParam . SavingsRate )
newGlobalDebtLimit := oldGenState . Params . GlobalDebtLimit . Add ( btcbCollateralParam . DebtLimit ) . Add ( busdaCollateralParam . DebtLimit ) . Add ( busdbCollateralParam . DebtLimit ) . Add ( xrpbCollateralParam . DebtLimit )
newParams := v0_11cdp . NewParams ( newGlobalDebtLimit , newCollateralParams , newDebtParam , oldGenState . Params . SurplusAuctionThreshold , oldGenState . Params . SurplusAuctionLot , oldGenState . Params . DebtAuctionThreshold , oldGenState . Params . DebtAuctionLot , oldGenState . Params . SavingsDistributionFrequency , false )
return v0_11cdp . NewGenesisState (
newParams ,
newCDPs ,
newDeposits ,
newStartingID ,
oldGenState . DebtDenom ,
oldGenState . GovDenom ,
oldGenState . PreviousDistributionTime ,
sdk . ZeroInt ( ) ,
)
}
2020-09-30 18:41:46 +00:00
// MigrateIncentive migrates from a v0.9 (or v0.10) incentive genesis state to a v0.11 incentive genesis state
func MigrateIncentive ( oldGenState v0_9incentive . GenesisState ) v0_11incentive . GenesisState {
var newRewards v0_11incentive . Rewards
var newRewardPeriods v0_11incentive . RewardPeriods
var newClaimPeriods v0_11incentive . ClaimPeriods
var newClaims v0_11incentive . Claims
var newClaimPeriodIds v0_11incentive . GenesisClaimPeriodIDs
newMultiplier := v0_11incentive . NewMultiplier ( v0_11incentive . Large , 12 , sdk . OneDec ( ) )
smallMultiplier := v0_11incentive . NewMultiplier ( v0_11incentive . Small , 1 , sdk . MustNewDecFromStr ( "0.25" ) )
for _ , oldReward := range oldGenState . Params . Rewards {
newReward := v0_11incentive . NewReward ( oldReward . Active , oldReward . Denom + "-a" , oldReward . AvailableRewards , oldReward . Duration , v0_11incentive . Multipliers { smallMultiplier , newMultiplier } , oldReward . ClaimDuration )
newRewards = append ( newRewards , newReward )
}
newParams := v0_11incentive . NewParams ( true , newRewards )
for _ , oldRewardPeriod := range oldGenState . RewardPeriods {
newRewardPeriod := v0_11incentive . NewRewardPeriod ( oldRewardPeriod . Denom + "-a" , oldRewardPeriod . Start , oldRewardPeriod . End , oldRewardPeriod . Reward , oldRewardPeriod . ClaimEnd , v0_11incentive . Multipliers { smallMultiplier , newMultiplier } )
newRewardPeriods = append ( newRewardPeriods , newRewardPeriod )
}
for _ , oldClaimPeriod := range oldGenState . ClaimPeriods {
newClaimPeriod := v0_11incentive . NewClaimPeriod ( oldClaimPeriod . Denom + "-a" , oldClaimPeriod . ID , oldClaimPeriod . End , v0_11incentive . Multipliers { smallMultiplier , newMultiplier } )
newClaimPeriods = append ( newClaimPeriods , newClaimPeriod )
}
for _ , oldClaim := range oldGenState . Claims {
newClaim := v0_11incentive . NewClaim ( oldClaim . Owner , oldClaim . Reward , oldClaim . Denom + "-a" , oldClaim . ClaimPeriodID )
newClaims = append ( newClaims , newClaim )
}
for _ , oldClaimPeriodID := range oldGenState . NextClaimPeriodIDs {
newClaimPeriodID := v0_11incentive . GenesisClaimPeriodID {
CollateralType : oldClaimPeriodID . Denom + "-a" ,
ID : oldClaimPeriodID . ID ,
}
newClaimPeriodIds = append ( newClaimPeriodIds , newClaimPeriodID )
}
return v0_11incentive . NewGenesisState ( newParams , oldGenState . PreviousBlockTime , newRewardPeriods , newClaimPeriods , newClaims , newClaimPeriodIds )
}
2020-09-30 18:33:48 +00:00
// MigratePricefeed migrates from a v0.9 (or v0.10) pricefeed genesis state to a v0.11 pricefeed genesis state
func MigratePricefeed ( oldGenState v0_9pricefeed . GenesisState ) v0_11pricefeed . GenesisState {
var newMarkets v0_11pricefeed . Markets
var newPostedPrices v0_11pricefeed . PostedPrices
var oracles [ ] sdk . AccAddress
for _ , market := range oldGenState . Params . Markets {
newMarket := v0_11pricefeed . NewMarket ( market . MarketID , market . BaseAsset , market . QuoteAsset , market . Oracles , market . Active )
newMarkets = append ( newMarkets , newMarket )
oracles = market . Oracles
}
// ------- add btc, xrp, busd markets --------
btcSpotMarket := v0_11pricefeed . NewMarket ( "btc:usd" , "btc" , "usd" , oracles , true )
btcLiquidationMarket := v0_11pricefeed . NewMarket ( "btc:usd:30" , "btc" , "usd" , oracles , true )
xrpSpotMarket := v0_11pricefeed . NewMarket ( "xrp:usd" , "xrp" , "usd" , oracles , true )
xrpLiquidationMarket := v0_11pricefeed . NewMarket ( "xrp:usd:30" , "xrp" , "usd" , oracles , true )
busdSpotMarket := v0_11pricefeed . NewMarket ( "busd:usd" , "busd" , "usd" , oracles , true )
busdLiquidationMarket := v0_11pricefeed . NewMarket ( "busd:usd:30" , "busd" , "usd" , oracles , true )
newMarkets = append ( newMarkets , btcSpotMarket , btcLiquidationMarket , xrpSpotMarket , xrpLiquidationMarket , busdSpotMarket , busdLiquidationMarket )
for _ , price := range oldGenState . PostedPrices {
newPrice := v0_11pricefeed . NewPostedPrice ( price . MarketID , price . OracleAddress , price . Price , price . Expiry )
newPostedPrices = append ( newPostedPrices , newPrice )
}
newParams := v0_11pricefeed . NewParams ( newMarkets )
return v0_11pricefeed . NewGenesisState ( newParams , newPostedPrices )
}
2020-09-30 23:14:07 +00:00
func mustAccAddressFromBech32 ( bech32Addr string ) sdk . AccAddress {
addr , err := sdk . AccAddressFromBech32 ( bech32Addr )
if err != nil {
panic ( err )
}
return addr
}
func createHardTeamVestingAccount ( ) * v39_1vesting . PeriodicVestingAccount {
bacc := v39_1auth . NewBaseAccountWithAddress ( mustAccAddressFromBech32 ( "kava17a9m9zxs3r5zhxnultt5k5kyer0afd7kc8dq80" ) )
coins := sdk . NewCoin ( "hard" , sdk . NewInt ( 20000000000000 ) )
tokenSchedule := [ ] sdk . Coin {
sdk . NewCoin ( "hard" , sdk . NewInt ( 6666666720000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 1666666660000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 1666666660000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 1666666660000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 1666666660000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 1666666660000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 1666666660000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 1666666660000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 1666666660000 ) ) ,
}
err := bacc . SetCoins ( sdk . NewCoins ( coins ) )
if err != nil {
panic ( err )
}
bva , err := v39_1vesting . NewBaseVestingAccount ( & bacc , sdk . NewCoins ( coins ) , 1697378400 )
if err != nil {
panic ( err )
}
vestingPeriodLengths := [ ] int64 { 31536000 , 7948800 , 7776000 , 7862400 , 7948800 , 7948800 , 7776000 , 7862400 , 7948800 }
periods := v39_1vesting . Periods { }
for i , vestingCoin := range tokenSchedule {
period := v39_1vesting . Period { Length : vestingPeriodLengths [ i ] , Amount : sdk . NewCoins ( vestingCoin ) }
periods = append ( periods , period )
}
return vesting . NewPeriodicVestingAccountRaw ( bva , 1602770400 , periods )
}
func createHardTreasuryVestingAccount ( ) * v39_1vesting . PeriodicVestingAccount {
bacc := v39_1auth . NewBaseAccountWithAddress ( mustAccAddressFromBech32 ( "kava1yqt02z2e4gpt4w0jnw9n0hnqyfu45afns669r2" ) )
coins := sdk . NewCoin ( "hard" , sdk . NewInt ( 50000000000000 ) )
originalVestingCoins := sdk . NewCoin ( "hard" , sdk . NewInt ( 35000000000000 ) )
tokenSchedule := [ ] sdk . Coin {
sdk . NewCoin ( "hard" , sdk . NewInt ( 4375000000000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 4375000000000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 4375000000000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 4375000000000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 4375000000000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 4375000000000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 4375000000000 ) ) ,
sdk . NewCoin ( "hard" , sdk . NewInt ( 4375000000000 ) ) ,
}
err := bacc . SetCoins ( sdk . NewCoins ( coins ) )
if err != nil {
panic ( err )
}
bva , err := v39_1vesting . NewBaseVestingAccount ( & bacc , sdk . NewCoins ( originalVestingCoins ) , 1665842400 )
if err != nil {
panic ( err )
}
vestingPeriodLengths := [ ] int64 { 7948800 , 7776000 , 7862400 , 7948800 , 7948800 , 7776000 , 7862400 , 7948800 }
periods := v39_1vesting . Periods { }
for i , vestingCoin := range tokenSchedule {
period := v39_1vesting . Period { Length : vestingPeriodLengths [ i ] , Amount : sdk . NewCoins ( vestingCoin ) }
periods = append ( periods , period )
}
return vesting . NewPeriodicVestingAccountRaw ( bva , 1602770400 , periods )
}
func createHardIEOAccount ( ) v39_1auth . BaseAccount {
bacc := v39_1auth . NewBaseAccountWithAddress ( mustAccAddressFromBech32 ( "kava16yapwtdxm5hkjfpeatr39vhu5c336fgf4utlyf" ) )
coins := sdk . NewCoin ( "hard" , sdk . NewInt ( 10000000000000 ) )
err := bacc . SetCoins ( sdk . NewCoins ( coins ) )
if err != nil {
panic ( err )
}
return bacc
}