From f324e946b8990957316bcf85e5ff2da5504f7d78 Mon Sep 17 00:00:00 2001 From: javiersuweijie Date: Wed, 7 Aug 2024 22:03:07 +0800 Subject: [PATCH] fix: script + commission update --- app/upgrades/v2.12/upgrade.go | 38 ++++++++++++++----- .../chain-upgrade/upgrade-simulation-12.sh | 26 +++++++++++-- 2 files changed, 50 insertions(+), 14 deletions(-) diff --git a/app/upgrades/v2.12/upgrade.go b/app/upgrades/v2.12/upgrade.go index 5949aa6d..5624b7fc 100644 --- a/app/upgrades/v2.12/upgrade.go +++ b/app/upgrades/v2.12/upgrade.go @@ -2,6 +2,9 @@ package v2_12 import ( "cosmossdk.io/math" + "fmt" + accountkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" "github.com/terra-money/core/v2/app/keepers" sdk "github.com/cosmos/cosmos-sdk/types" @@ -39,14 +42,14 @@ func CreateUpgradeHandler( addr = sdk.MustAccAddressFromBech32("") multisigAddr = sdk.MustAccAddressFromBech32("") } else { - addr = sdk.MustAccAddressFromBech32("") - multisigAddr = sdk.MustAccAddressFromBech32("") + addr = sdk.MustAccAddressFromBech32("terra1v0eee20gjl68fuk0chyrkch2z7suw2mhg3wkxf") + multisigAddr = sdk.MustAccAddressFromBech32("terra1v0eee20gjl68fuk0chyrkch2z7suw2mhg3wkxf") } - if err := burnTokensFromAccount(ctx, k.StakingKeeper, k.BankKeeper, k.DistrKeeper, addr); err != nil { + if err := burnTokensFromAccount(ctx, k.StakingKeeper, k.BankKeeper, k.DistrKeeper, k.AccountKeeper, addr); err != nil { return nil, err } - if err := burnTokensFromAccount(ctx, k.StakingKeeper, k.BankKeeper, k.DistrKeeper, multisigAddr); err != nil { + if err := burnTokensFromAccount(ctx, k.StakingKeeper, k.BankKeeper, k.DistrKeeper, k.AccountKeeper, multisigAddr); err != nil { return nil, err } @@ -66,14 +69,13 @@ func updateValidatorsMinCommissionRate(ctx sdk.Context, sk *stakingkeeper.Keeper validators := sk.GetAllValidators(ctx) for _, validator := range validators { update := false - commission := validator.Commission - if commission.MaxRate.LT(sdk.MustNewDecFromStr("0.05")) { - commission.MaxRate = sdk.MustNewDecFromStr("0.05") + if validator.Commission.MaxRate.LT(sdk.MustNewDecFromStr("0.05")) { + validator.Commission.MaxRate = sdk.MustNewDecFromStr("0.05") update = true } - if commission.Rate.LT(sdk.MustNewDecFromStr("0.05")) { + if validator.Commission.Rate.LT(sdk.MustNewDecFromStr("0.05")) { // force update without checking the <24h restriction and the max update rate - commission.Rate = sdk.MustNewDecFromStr("0.05") + validator.Commission.Rate = sdk.MustNewDecFromStr("0.05") update = true } if update { @@ -87,7 +89,11 @@ func updateValidatorsMinCommissionRate(ctx sdk.Context, sk *stakingkeeper.Keeper return nil } -func burnTokensFromAccount(ctx sdk.Context, sk *stakingkeeper.Keeper, bk bankkeeper.Keeper, dk distributionkeeper.Keeper, addr sdk.AccAddress) error { +func burnTokensFromAccount(ctx sdk.Context, sk *stakingkeeper.Keeper, bk bankkeeper.Keeper, dk distributionkeeper.Keeper, ak accountkeeper.AccountKeeper, addr sdk.AccAddress) error { + acc := ak.GetAccount(ctx, addr) + if acc == nil { + return fmt.Errorf("account %s not found", addr) + } // Iterate delegations and unbond all shares // burning the coins immediately bondDenom := sk.GetParams(ctx).BondDenom @@ -169,6 +175,18 @@ func burnTokensFromAccount(ctx sdk.Context, sk *stakingkeeper.Keeper, bk bankkee return false }) + // Set account back to a base account before burning to vest everything + switch vestingAcc := acc.(type) { + case *types.ContinuousVestingAccount: + ak.SetAccount(ctx, vestingAcc.BaseVestingAccount) + case *types.DelayedVestingAccount: + ak.SetAccount(ctx, vestingAcc.BaseVestingAccount) + case *types.PeriodicVestingAccount: + ak.SetAccount(ctx, vestingAcc.BaseVestingAccount) + default: + // do nothing + } + // Burn all coins in the addr bk.IterateAccountBalances(ctx, addr, func(balance sdk.Coin) bool { err = bk.SendCoinsFromAccountToModule(ctx, addr, stakingtypes.NotBondedPoolName, sdk.NewCoins(balance)) diff --git a/integration-tests/src/setup/chain-upgrade/upgrade-simulation-12.sh b/integration-tests/src/setup/chain-upgrade/upgrade-simulation-12.sh index 5bb49505..6dacca5a 100755 --- a/integration-tests/src/setup/chain-upgrade/upgrade-simulation-12.sh +++ b/integration-tests/src/setup/chain-upgrade/upgrade-simulation-12.sh @@ -56,7 +56,7 @@ CURRENT_TIME=$(date +%s) echo "Current time: $CURRENT_TIME" $OLD_BINARY genesis add-genesis-account $($OLD_BINARY --home $CHAIN_HOME keys show wallet1 --keyring-backend test -a) 100000000000uluna --vesting-amount 200000000uluna --vesting-start-time $CURRENT_TIME --vesting-end-time $(($CURRENT_TIME + 10000)) --home $CHAIN_HOME -$OLD_BINARY genesis gentx val1 1000000000uluna --home $CHAIN_HOME --chain-id $CHAIN_ID --keyring-backend test +$OLD_BINARY genesis gentx val1 1000000000uluna --home $CHAIN_HOME --chain-id $CHAIN_ID --keyring-backend test --commission-max-rate 0.01 --commission-rate 0.01 --commission-max-change-rate 0.01 $OLD_BINARY genesis collect-gentxs --home $CHAIN_HOME sed -i -e "s/\"max_deposit_period\": \"172800s\"/\"max_deposit_period\": \"$GOV_PERIOD\"/g" $CHAIN_HOME/config/genesis.json @@ -151,20 +151,38 @@ else fi sleep 15 -DELEGATIONS=$($NEW_BINARY query staking delegations $WALLET_ADDR_1 --output=json | jq ".delegation_responses | length") +DELEGATIONS=$($NEW_BINARY query staking delegations $WALLET_ADDR_1 --home $CHAIN_HOME --output=json | jq ".delegation_responses | length") echo "DELEGATIONS $DELEGATIONS" if [[ "$DELEGATIONS" == "0" ]]; then echo "Delegations removed when upgrading" fi -UNBONDINGS=$($NEW_BINARY query staking unbonding-delegations $WALLET_ADDR_1 --output=json | jq ".unbonding_responses | length") +UNBONDINGS=$($NEW_BINARY query staking unbonding-delegations $WALLET_ADDR_1 --home $CHAIN_HOME --output=json | jq ".unbonding_responses | length") echo "UNBONDINGS $UNBONDINGS" if [[ "$UNBONDINGS" == "0" ]]; then echo "Unbondings removed when upgrading" fi -BALANCES=$($NEW_BINARY query bank balances $WALLET_ADDR_1 --output=json | jq ".balances | length") +BALANCES=$($NEW_BINARY query bank balances $WALLET_ADDR_1 --home $CHAIN_HOME --output=json | jq ".balances | length") echo "BALANCES $BALANCES" if [[ "$BALANCES" == "0" ]]; then echo "Balance removed when upgrading" fi + +COMISSION_RATE=$($NEW_BINARY query staking validator $VALOPER_ADDR_1 --home $CHAIN_HOME --output=json | jq ".commission.commission_rates.rate" -r) +echo "COMISSION_RATE $COMISSION_RATE" +if [[ "$COMISSION_RATE" != "0.050000000000000000" ]]; then + echo "Commission rate not updated" +fi + +MAX_COMISSION_RATE=$($NEW_BINARY query staking validator $VALOPER_ADDR_1 --home $CHAIN_HOME --output=json | jq ".commission.commission_rates.max_rate" -r) +echo "MAX_COMISSION_RATE $MAX_COMISSION_RATE" +if [[ "$MAX_COMISSION_RATE" != "0.050000000000000000" ]]; then + echo "Max commission rate not updated" +fi + +COMISSION_RATE_CHANGE=$($NEW_BINARY query staking validator $VALOPER_ADDR_1 --home $CHAIN_HOME --output=json | jq ".commission.commission_rates.max_change_rate" -r) +echo "COMISSION_RATE_CHANGE $COMISSION_RATE_CHANGE" +if [[ "$COMISSION_RATE_CHANGE" != "0.010000000000000000" ]]; then + echo "Commission rate change not preserved" +fi