Skip to content

Commit

Permalink
[Upgrade] Alpha TestNet v0.0.10 upgrade (#894)
Browse files Browse the repository at this point in the history
## Summary

Prep for `v0.0.10` release and upgrade.

## Type of change

Select one or more from the following:

- [x] New feature, functionality or library
- [ ] Consensus breaking; add the `consensus-breaking` label if so. See
#791 for details
- [ ] Bug fix
- [ ] Code health or cleanup
- [ ] Documentation
- [ ] Other (specify)

## Testing

Went through upgrade testing locally.

## Sanity Checklist

- [x] I have tested my changes using the available tooling
- [x] I have commented my code
- [x] I have performed a self-review of my own code; both comments &
source code
- [x] I create and reference any new tickets, if applicable
- [x] I have left TODOs throughout the codebase, if applicable

---------

Co-authored-by: Daniel Olshansky <[email protected]>
  • Loading branch information
okdas and Olshansk authored Nov 15, 2024
1 parent 5aa4510 commit e0aa1ff
Show file tree
Hide file tree
Showing 4 changed files with 174 additions and 0 deletions.
1 change: 1 addition & 0 deletions app/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
// so `cosmovisor` can automatically pull the binary from GitHub.
var allUpgrades = []upgrades.Upgrade{
upgrades.Upgrade_0_0_4,
upgrades.Upgrade_0_0_10,
}

// setUpgrades sets upgrade handlers for all upgrades and executes KVStore migration if an upgrade plan file exists.
Expand Down
12 changes: 12 additions & 0 deletions app/upgrades/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@ import (
"github.com/pokt-network/poktroll/app/keepers"
)

// TODO_MAINNET_DISCUSSION(@Olshansk): different networks should have the same gov module address, but might have different DAO addresses,
// unless we specifically write in these addresses in the genesis file.
// Should we use the same address/wallet for DAO or find a way to detect the network the upgrade is being applied to,
// to pick different addresses depending on the name of the network? (e.g chain-id)

const (
// The default PNF/DAO address in the genesis file for Alpha TestNet. Used to create new authz authorizations.
AlphaTestNetPnfAddress = "pokt1r6ja6rz6rpae58njfrsgs5n5sp3r36r2q9j04h"
// Authority address. Defaults to gov module address. Used to create new authz authorizations.
AlphaTestNetAuthorityAddress = "pokt10d07y265gmmuvt4z0w9aw880jnsr700j8yv32t"
)

// Upgrade represents a protocol upgrade in code.
// Once a `MsgSoftwareUpgrade` is submitted on-chain, and `Upgrade.PlanName` matches the `Plan.Name`,
// the upgrade will be scheduled for execution at the corresponding height.
Expand Down
146 changes: 146 additions & 0 deletions app/upgrades/v0.0.10.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
package upgrades

import (
"context"
"fmt"
"time"

"cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
upgradetypes "cosmossdk.io/x/upgrade/types"
cosmosTypes "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
"github.com/cosmos/cosmos-sdk/x/authz"
"github.com/pokt-network/poktroll/app/keepers"
prooftypes "github.com/pokt-network/poktroll/x/proof/types"
)

// Upgrade_0_0_10 is the upgrade handler for v0.0.10 Alpha TestNet upgrade
// Before/after validations should be done using the correct version, mimiching real-world scenario:
// - Before: v0.0.9
// - After: v0.0.10
var Upgrade_0_0_10 = Upgrade{
PlanName: "v0.0.10",
CreateUpgradeHandler: func(mm *module.Manager,
keepers *keepers.Keepers,
configurator module.Configurator,
) upgradetypes.UpgradeHandler {

// Adds new parameters using ignite's config.yml as a reference. Assuming we don't need any other parameters.
// https://github.com/pokt-network/poktroll/compare/v0.0.9-3...ff76430
applyNewParameters := func(ctx context.Context) (err error) {
// Add application min stake
// Validate with: `poktrolld q application params --node=https://testnet-validated-validator-rpc.poktroll.com/`
appParams := keepers.ApplicationKeeper.GetParams(ctx)
newMinStakeApp := cosmosTypes.NewCoin("upokt", math.NewInt(100000000))
appParams.MinStake = &newMinStakeApp
err = keepers.ApplicationKeeper.SetParams(ctx, appParams)
if err != nil {
return err
}

// Add supplier min stake
// Validate with: `poktrolld q supplier params --node=https://testnet-validated-validator-rpc.poktroll.com/`
supplierParams := keepers.SupplierKeeper.GetParams(ctx)
newMinStakeSupplier := cosmosTypes.NewCoin("upokt", math.NewInt(1000000))
supplierParams.MinStake = &newMinStakeSupplier
err = keepers.SupplierKeeper.SetParams(ctx, supplierParams)
if err != nil {
return err
}

// Add gateway min stake
// Validate with: `poktrolld q gateway params --node=https://testnet-validated-validator-rpc.poktroll.com/`
gatewayParams := keepers.GatewayKeeper.GetParams(ctx)
newMinStakeGW := cosmosTypes.NewCoin("upokt", math.NewInt(1000000))
gatewayParams.MinStake = &newMinStakeGW
err = keepers.GatewayKeeper.SetParams(ctx, gatewayParams)
if err != nil {
return err
}

// Adjust proof module parameters
// Validate with: `poktrolld q proof params --node=https://testnet-validated-validator-rpc.poktroll.com/`
newProofRequirementThreshold := cosmosTypes.NewCoin("upokt", math.NewInt(20000000))
newProofMissingPenalty := cosmosTypes.NewCoin("upokt", math.NewInt(320000000))
newProofSubmissionFee := cosmosTypes.NewCoin("upokt", math.NewInt(1000000))
proofParams := prooftypes.NewParams(
0.25,
&newProofRequirementThreshold,
&newProofMissingPenalty,
&newProofSubmissionFee,
)

err = keepers.ProofKeeper.SetParams(ctx, proofParams)
if err != nil {
return err
}

// Add new shared module params
// Validate with: `poktrolld q shared params --node=https://testnet-validated-validator-rpc.poktroll.com/`
sharedParams := keepers.SharedKeeper.GetParams(ctx)
sharedParams.SupplierUnbondingPeriodSessions = uint64(1)
sharedParams.ApplicationUnbondingPeriodSessions = uint64(1)
sharedParams.ComputeUnitsToTokensMultiplier = uint64(42)
err = keepers.SharedKeeper.SetParams(ctx, sharedParams)
if err != nil {
return err
}
return
}

// Adds new authz authorizations from the diff:
// https://github.com/pokt-network/poktroll/compare/v0.0.9-3...ff76430
applyNewAuthorizations := func(ctx context.Context) (err error) {
// Validate before/after with:
// `poktrolld q authz grants-by-granter pokt10d07y265gmmuvt4z0w9aw880jnsr700j8yv32t --node=https://testnet-validated-validator-rpc.poktroll.com/`
grantAuthorizationMessages := []string{
"/poktroll.gateway.MsgUpdateParam",
"/poktroll.application.MsgUpdateParam",
"/poktroll.supplier.MsgUpdateParam",
}

expiration, err := time.Parse(time.RFC3339, "2500-01-01T00:00:00Z")
if err != nil {
return fmt.Errorf("failed to parse time: %w", err)
}

for _, msg := range grantAuthorizationMessages {
err = keepers.AuthzKeeper.SaveGrant(
ctx,
cosmosTypes.AccAddress(AlphaTestNetPnfAddress),
cosmosTypes.AccAddress(AlphaTestNetAuthorityAddress),
authz.NewGenericAuthorization(msg),
&expiration,
)
if err != nil {
return fmt.Errorf("failed to save grant for message %s: %w", msg, err)
}
}
return
}

// Returns the upgrade handler for v0.0.10
return func(ctx context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
err := applyNewParameters(ctx)
if err != nil {
return vm, err
}

err = applyNewAuthorizations(ctx)
if err != nil {
return vm, err
}

// RelayMiningDifficulty have been moved from `tokenomics` to `services` in this diff.
// Ideally (in prod), we should have migrated the data before removing query/msg types in `tokenomics` module.
// In practice (development), we don't want to spend time on it.
// Since we know that new RelayMiningDifficulty will be re-created and real tokens are not in danger,
// we can skip this step now.

return mm.RunMigrations(ctx, configurator, vm)
}
},
// No changes to the KVStore in this upgrade.
StoreUpgrades: storetypes.StoreUpgrades{},
}
15 changes: 15 additions & 0 deletions tools/scripts/upgrades/local_test_v0.0.10.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"body": {
"messages": [
{
"@type": "/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade",
"authority": "pokt10d07y265gmmuvt4z0w9aw880jnsr700j8yv32t",
"plan": {
"name": "v0.0.10",
"height": "20",
"info": "This field is not used for local testing"
}
}
]
}
}

0 comments on commit e0aa1ff

Please sign in to comment.