Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Upgrade] Alpha TestNet v0.0.10 upgrade #894

Merged
merged 11 commits into from
Nov 15, 2024
14 changes: 6 additions & 8 deletions api/poktroll/application/types.pulsar.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/poktroll/tokenomics/event.pulsar.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

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 (
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ty for the comments

// 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))
Olshansk marked this conversation as resolved.
Show resolved Hide resolved
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"
}
}
]
}
}
14 changes: 6 additions & 8 deletions x/application/types/types.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion x/tokenomics/types/event.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading