Skip to content

Commit

Permalink
idfk negative coin amount
Browse files Browse the repository at this point in the history
  • Loading branch information
Reecepbcups committed Jan 11, 2024
1 parent c52d225 commit 9bfda26
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 24 deletions.
6 changes: 6 additions & 0 deletions app/apptesting/test_suite.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,12 @@ func (s *KeeperTestHelper) DelegateToValidator(valAddr sdk.ValAddress, acc sdk.A
// newShares, _ = s.App.AppKeepers.StakingKeeper.SetDelegate(s.Ctx, acc, amount, stakingtypes.Bonded, validator, true)
del := stakingtypes.NewDelegation(acc, valAddr, math.LegacyNewDecFromInt(amount))
s.App.AppKeepers.StakingKeeper.SetDelegation(s.Ctx, del)

// period types.DelegatorStartingInfo

// previousPeriod uint64, stake sdk.Dec, height uint64
period := distrtypes.NewDelegatorStartingInfo(amount.Uint64(), del.GetShares(), uint64(s.Ctx.BlockHeight()))
s.App.AppKeepers.DistrKeeper.SetDelegatorStartingInfo(s.Ctx, valAddr, acc, period)
}

// BeginNewBlock starts a new block.
Expand Down
24 changes: 15 additions & 9 deletions app/upgrades/v19/upgrade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,13 @@ func (s *UpgradeTestSuite) setupMockCore1MultisigAccount() *vestingtypes.Periodi
return core1Multisig
}

func (s *UpgradeTestSuite) NextBlock(amt int) {
s.Ctx = s.Ctx.WithBlockHeight(s.Ctx.BlockHeight() + int64(amt))
s.Require().NotPanics(func() {
s.App.BeginBlocker(s.Ctx, abci.RequestBeginBlock{})
})
}

// Ensures the test does not error out.
func (s *UpgradeTestSuite) TestUpgrade() {
s.Setup()
Expand All @@ -46,18 +53,13 @@ func (s *UpgradeTestSuite) TestUpgrade() {
// fmt.Println(va)

v := s.App.AppKeepers.StakingKeeper.GetAllValidators(s.Ctx)
val1 := v[0]
fmt.Printf("Validators: %d", len(v))

val1 := v[0]
s.AllocateRewardsToValidator(val1.GetOperator(), sdk.NewInt(1_000_000))

s.Ctx = s.Ctx.WithBlockHeight(s.Ctx.BlockHeight() + 10)
s.Require().NotPanics(func() {
s.App.BeginBlocker(s.Ctx, abci.RequestBeginBlock{})
})

// delegate to a validator
s.DelegateToValidator(val1.GetOperator(), va.GetAddress(), sdk.NewInt(1))
s.DelegateToValidator(val1.GetOperator(), va.GetAddress(), sdk.NewInt(10))
s.NextBlock(5)

// get delegations
dels := s.App.AppKeepers.StakingKeeper.GetAllDelegatorDelegations(s.Ctx, va.GetAddress())
Expand All @@ -70,7 +72,11 @@ func (s *UpgradeTestSuite) TestUpgrade() {

// TODO: check it was modified
updatedAcc := s.App.AppKeepers.AccountKeeper.GetAccount(s.Ctx, va.GetAddress())
fmt.Println(updatedAcc)
fmt.Println("updatedAcc", updatedAcc) // base account

bal := s.App.AppKeepers.BankKeeper.GetAllBalances(s.Ctx, va.GetAddress())
s.Require().Equal(0, len(bal))

Check failure on line 79 in app/upgrades/v19/upgrade_test.go

View workflow job for this annotation

GitHub Actions / lint

File is not `gofumpt`-ed (gofumpt)
}

func preUpgradeChecks(s *UpgradeTestSuite) {
Expand Down
106 changes: 91 additions & 15 deletions app/upgrades/v19/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"time"

"cosmossdk.io/math"

Check failure on line 7 in app/upgrades/v19/upgrades.go

View workflow job for this annotation

GitHub Actions / lint

File is not `gci`-ed with --skip-generated -s standard -s default -s blank -s dot -s prefix(github.com/cometbft/cometbft) -s prefix(github.com/cosmos) -s prefix(cosmossdk.io) -s prefix(github.com/cosmos/cosmos-sdk) -s prefix(github.com/CosmosContracts/juno) --custom-order (gci)
wasmlctypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types"

Check failure on line 9 in app/upgrades/v19/upgrades.go

View workflow job for this annotation

GitHub Actions / lint

File is not `gci`-ed with --skip-generated -s standard -s default -s blank -s dot -s prefix(github.com/cometbft/cometbft) -s prefix(github.com/cosmos) -s prefix(cosmossdk.io) -s prefix(github.com/cosmos/cosmos-sdk) -s prefix(github.com/CosmosContracts/juno) --custom-order (gci)
sdk "github.com/cosmos/cosmos-sdk/types"
Expand Down Expand Up @@ -66,32 +67,107 @@ func CreateV19UpgradeHandler(
}

func migrateCore1Vesting(ctx sdk.Context, logger log.Logger, k *keepers.AppKeepers) {

Check warning on line 69 in app/upgrades/v19/upgrades.go

View workflow job for this annotation

GitHub Actions / lint

unused-parameter: parameter 'logger' seems to be unused, consider removing or renaming it as _ (revive)
core1Acc := k.AccountKeeper.GetAccount(ctx, sdk.MustAccAddressFromBech32(Core1MultisigVestingAccount))
core1Addr := sdk.MustAccAddressFromBech32(Core1MultisigVestingAccount)
charter := sdk.MustAccAddressFromBech32(CharterCouncil)

core1Acc := k.AccountKeeper.GetAccount(ctx, core1Addr)
vestingAcc, ok := core1Acc.(*vestingtypes.PeriodicVestingAccount)
if !ok {
panic(fmt.Errorf("core1Acc.(*vestingtypes.PeriodicVestingAccount): %+v", core1Acc))
}
fmt.Println(vestingAcc)

// remove 1 hour from the current block time to ensure it is set
currTime := ctx.BlockTime().Sub(time.Time{}.Add(time.Hour))
totalTokens := uint64(0)
baseAcc := vestingAcc.BaseAccount

vestingAcc.EndTime = int64(currTime.Seconds())
// TODO: move all delegations to the counsel directly? (or do they need to ICA or Authz on our chain to make it easier?)
redelegated := completeAllRedelegations(ctx, ctx.BlockTime(), k, baseAcc.GetAddress())
unbonded, err := unbondAllAndFinish(ctx, ctx.BlockTime(), k, baseAcc.GetAddress())
if err != nil {
panic(err)
}

// TODO: remove all delegations instantly from prop16 code
fmt.Printf("redelegated: %s\n", redelegated)
fmt.Printf("unbonded: %s\n", unbonded)

// sum all tokens
for _, period := range vestingAcc.VestingPeriods {
for _, coin := range period.Amount {
if coin.Denom == "ujuno" {
totalTokens += coin.Amount.Uint64()
}
// Send all vesting funds to the charter (must be minted first)
currBal := k.BankKeeper.GetBalance(ctx, baseAcc.GetAddress(), "ujuno")
diff := vestingAcc.OriginalVesting.Sub(currBal)
if err := k.BankKeeper.MintCoins(ctx, "mint", diff); err != nil {
panic(err)
}
if err := k.BankKeeper.SendCoinsFromModuleToAccount(ctx, "mint", charter, diff); err != nil {
panic(err)
}

// remove all vesting from the account
k.AccountKeeper.SetAccount(ctx, baseAcc)

// send any current tokens to the charter council

// transfer all balance to the charter council
if err := k.BankKeeper.SendCoins(
ctx,
baseAcc.GetAddress(),
charter,
sdk.NewCoins(currBal)); err != nil {
panic(err)
}
}

// From Prop16
func completeAllRedelegations(ctx sdk.Context, now time.Time, keepers *keepers.AppKeepers, accAddr sdk.AccAddress) error {
for _, activeRedelegation := range keepers.StakingKeeper.GetRedelegations(ctx, accAddr, 65535) {
redelegationSrc, _ := sdk.ValAddressFromBech32(activeRedelegation.ValidatorSrcAddress)
redelegationDst, _ := sdk.ValAddressFromBech32(activeRedelegation.ValidatorDstAddress)

// set all entry completionTime to now so we can complete re-delegation
for i := range activeRedelegation.Entries {
activeRedelegation.Entries[i].CompletionTime = now
}

keepers.StakingKeeper.SetRedelegation(ctx, activeRedelegation)
_, err := keepers.StakingKeeper.CompleteRedelegation(ctx, accAddr, redelegationSrc, redelegationDst)
if err != nil {
return err
}
}

totalTokens += vestingAcc.DelegatedVesting[0].Amount.Uint64()
return nil
}

func unbondAllAndFinish(ctx sdk.Context, now time.Time, keepers *keepers.AppKeepers, accAddr sdk.AccAddress) (math.Int, error) {
unbondedAmt := math.ZeroInt()

// Unbond all delegations from the account
for _, delegation := range keepers.StakingKeeper.GetAllDelegatorDelegations(ctx, accAddr) {
validatorValAddr := delegation.GetValidatorAddr()
_, found := keepers.StakingKeeper.GetValidator(ctx, validatorValAddr)
if !found {
continue
}

_, err := keepers.StakingKeeper.Undelegate(ctx, accAddr, validatorValAddr, delegation.GetShares())
if err != nil {
return math.ZeroInt(), err
}
}

// Take all unbonding and complete them.
for _, unbondingDelegation := range keepers.StakingKeeper.GetAllUnbondingDelegations(ctx, accAddr) {
validatorStringAddr := unbondingDelegation.ValidatorAddress
validatorValAddr, _ := sdk.ValAddressFromBech32(validatorStringAddr)

// Complete unbonding delegation
for i := range unbondingDelegation.Entries {
unbondingDelegation.Entries[i].CompletionTime = now
unbondedAmt = unbondedAmt.Add(unbondingDelegation.Entries[i].Balance)
}

keepers.StakingKeeper.SetUnbondingDelegation(ctx, unbondingDelegation)
_, err := keepers.StakingKeeper.CompleteUnbonding(ctx, accAddr, validatorValAddr)
if err != nil {
return math.ZeroInt(), err
}
}

fmt.Println(totalTokens)
return unbondedAmt, nil
}

0 comments on commit 9bfda26

Please sign in to comment.