diff --git a/app/ordered_map.go b/app/ordered_map.go index b70fe631..cc600df2 100644 --- a/app/ordered_map.go +++ b/app/ordered_map.go @@ -112,13 +112,17 @@ func (om *OrderedMap[K, V]) Has(key K) bool { func (om *OrderedMap[K, V]) Delete(key K) { if _, exists := om.values[key]; exists { delete(om.values, key) - // Remove key from slice - for i, k := range om.keys { - if k == key { - om.keys = append(om.keys[:i], om.keys[i+1:]...) - break + // Create a new slice to avoid modifying the original reference + newKeys := make([]K, 0, len(om.keys)-1) + + // Remove the key from the keys slice + for _, k := range om.keys { + if k != key { + newKeys = append(newKeys, k) } } + + om.keys = newKeys // Assign the newly created slice to om.keys } } diff --git a/app/upgrade_cudos.go b/app/upgrade_cudos.go index 780eedc0..9db82c92 100644 --- a/app/upgrade_cudos.go +++ b/app/upgrade_cudos.go @@ -2032,9 +2032,11 @@ func DoGenesisAccountMovements(genesisData *GenesisData, cudosCfg *CudosMergeCon // Handle delegations movement remainingAmountToMove := sdk.NewIntFromBigInt(accountMovement.Amount.BigInt()) + if sourceDelegations, exists := genesisData.Delegations.Get(accountMovement.SourceAddress); exists { - for i := range sourceDelegations.Iterate() { - validatorAddr, delegatedAmount := i.Key, i.Value + // We iterate and delete from source array at the same time + for _, validatorAddr := range sourceDelegations.Keys() { + delegatedAmount := sourceDelegations.MustGet(validatorAddr) if delegatedAmount.GTE(remainingAmountToMove) { // Split delegation