Skip to content

Commit

Permalink
Merge branch 'issues/1034/feat/upload-state' into issues/1034/scaffol…
Browse files Browse the repository at this point in the history
…d/morse_account_claim

* issues/1034/feat/upload-state:
  chore: review feedback improvements
  fix: linter error
  chore: review improvements
  chore: review feedback improvements
  [OpenAPI] Add `Dockerfile` to reliability generate the OpenAPI spec using `ignite` (#1055)
  [Migration] scaffold: module migration (#1032)
  [CI][Quick change] downgrade docker/login-action version (#1056)
  [Upgrades] v0.0.12 upgrade (#1043)
  Add a couple TODO_UPNEXT
  • Loading branch information
bryanchriswhite committed Feb 6, 2025
2 parents 1f348f8 + a80f643 commit 60a6eb5
Show file tree
Hide file tree
Showing 21 changed files with 48,556 additions and 327 deletions.
10 changes: 5 additions & 5 deletions .github/workflows/release-artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ jobs:
with:
fetch-depth: "0" # Per https://github.com/ignite/cli/issues/1674#issuecomment-1144619147

- name: install ignite
run: |
make ignite_install
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: "1.23.0"

- name: install ignite
run: |
make ignite_install
- name: Install CI dependencies
run: make install_ci_deps

Expand Down Expand Up @@ -62,7 +62,7 @@ jobs:
type=sha,format=long,suffix=-prod
- name: Login to GitHub Container Registry
uses: docker/login-action@v4
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
Expand Down
17 changes: 16 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -283,8 +283,23 @@ ignite_poktrolld_build: check_go_version check_ignite_version ## Build the poktr
ignite chain build --skip-proto --debug -v -o $(shell go env GOPATH)/bin

.PHONY: ignite_openapi_gen
ignite_openapi_gen: ## Generate the OpenAPI spec for the Ignite API
ignite_openapi_gen: ## Generate the OpenAPI spec natively and process the output
ignite generate openapi --yes
$(MAKE) process_openapi

.PHONY: ignite_openapi_gen_docker
ignite_openapi_gen_docker: ## Generate the OpenAPI spec using Docker and process the output; workaround due to https://github.com/ignite/cli/issues/4495
docker build -f ./proto/Dockerfile.ignite -t ignite-openapi .
docker run --rm -v "$(PWD):/workspace" ignite-openapi
$(MAKE) process_openapi

.PHONY: process_openapi
process_openapi: ## Ensure OpenAPI JSON and YAML files are properly formatted
# The original command incorrectly outputs a JSON-formatted file with a .yml extension.
# This fixes the issue by properly converting the JSON to a valid YAML format.
mv docs/static/openapi.yml docs/static/openapi.json
yq -o=json '.' docs/static/openapi.json -I=4 > docs/static/openapi.json.tmp && mv docs/static/openapi.json.tmp docs/static/openapi.json
yq -P -o=yaml '.' docs/static/openapi.json > docs/static/openapi.yml

##################
### CI Helpers ###
Expand Down
202 changes: 103 additions & 99 deletions api/poktroll/migration/legacy.pulsar.go

Large diffs are not rendered by default.

44 changes: 22 additions & 22 deletions api/poktroll/migration/types.pulsar.go

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

14 changes: 11 additions & 3 deletions app/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,17 @@ import (
// The chain upgrade can be scheduled AFTER the new version (with upgrade strategy implemented) is released,
// so `cosmovisor` can automatically pull the binary from GitHub.
var allUpgrades = []upgrades.Upgrade{
upgrades.Upgrade_0_0_4,
upgrades.Upgrade_0_0_10,
upgrades.Upgrade_0_0_11,
// v0.0.4 was the first upgrade we implemented and tested on network that is no longer used.
// upgrades.Upgrade_0_0_4,

// v0.0.10 was the first upgrade we implemented on Alpha TestNet.
// upgrades.Upgrade_0_0_10,

// v0.0.11 was the Alpha TestNet exclusive upgrade to bring it on par with Beta TestNet.
// upgrades.Upgrade_0_0_11,

// v0.0.12 - the first upgrade going live on both Alpha and Beta TestNets.
upgrades.Upgrade_0_0_12,
}

// setUpgrades sets upgrade handlers for all upgrades and executes KVStore migration if an upgrade plan file exists.
Expand Down
3 changes: 3 additions & 0 deletions app/upgrades/historical.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ func defaultUpgradeHandler(
// For example, even if `ConsensusVersion` is not modified for any modules, it still might be beneficial to create
// an upgrade so node runners are signaled to start utilizing `Cosmovisor` for new binaries.
var UpgradeExample = Upgrade{
// PlanName can be any string.
// This code is executed when the upgrade with this plan name is submitted to the network.
// This does not necessarily need to be a version, but it's usually the case with consensus-breaking changes.
PlanName: "v0.0.0-Example",
CreateUpgradeHandler: defaultUpgradeHandler,

Expand Down
9 changes: 8 additions & 1 deletion app/upgrades/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,15 @@ import (
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.

// TECHDEBT: DO NOT use AlphaTestNetAuthorityAddress.
// This is the authority address used to create new authz authorizations. Defaults to x/gov module account address.
// Use `keepers.UpgradeKeeper.Authority(ctx, &upgradetypes.QueryAuthorityRequest{})` to query the authority address of the current Alpha Network.
// NOTE: This hard-coded address is kept for record-keeping historical purposes.
AlphaTestNetAuthorityAddress = "pokt10d07y265gmmuvt4z0w9aw880jnsr700j8yv32t"

// The default PNF/DAO address in the genesis file for Beta TestNet. Used to create new authz authorizations.
BetaTestNetPnfAddress = "pokt1f0c9y7mahf2ya8tymy8g4rr75ezh3pkklu4c3e"
)

// Upgrade represents a protocol upgrade in code.
Expand Down
197 changes: 197 additions & 0 deletions app/upgrades/v0.0.12.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
package upgrades

import (
"context"
"strings"

"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/pokt-network/poktroll/app/keepers"
sharedtypes "github.com/pokt-network/poktroll/x/shared/types"
)

const Upgrade_0_0_12_PlanName = "v0.0.12"

// Upgrade_0_0_12 handles the upgrade to release `v0.0.12`.
// This is planned to be issued on both Pocket Network's Shannon Alpha & Beta TestNets.
var Upgrade_0_0_12 = Upgrade{
PlanName: Upgrade_0_0_12_PlanName,
CreateUpgradeHandler: func(mm *module.Manager,
keepers *keepers.Keepers,
configurator module.Configurator,
) upgradetypes.UpgradeHandler {
// Parameter configurations aligned with repository config.yml specifications.
// These values reflect the delta between v0.0.11 and the main branch as of #1043.
// Reference:
// - Comparison: https://github.com/pokt-network/poktroll/compare/v0.0.11..7541afd6d89a12d61e2c32637b535f24fae20b58
// - Direct diff: `git diff v0.0.11..7541afd6d89a12d61e2c32637b535f24fae20b58 -- config.yml`
//
// DEV_NOTE: These parameter updates are derived from config.yml in the root directory
// of this repository, which serves as the source of truth for all parameter changes.
const (
supplierStakingFee = 1000000 // uPOKT
serviceTargetNumRelays = 100 // num relays
tokenomicsGlobalInflationPerClaim = 0.1 // % of the claim amount
)

applyNewParameters := func(ctx context.Context) (err error) {
logger := cosmosTypes.UnwrapSDKContext(ctx).Logger()
logger.Info("Starting parameter updates", "upgrade_plan_name", Upgrade_0_0_12_PlanName)

// Set supplier module staking_fee to 1000000upokt, in line with the config.yml in the repo.
// Verify via:
// $ poktrolld q supplier params --node=...
supplierParams := keepers.SupplierKeeper.GetParams(ctx)
supplierParams.MinStake = &cosmosTypes.Coin{
Denom: "upokt",
Amount: math.NewInt(supplierStakingFee),
}
err = keepers.SupplierKeeper.SetParams(ctx, supplierParams)
if err != nil {
logger.Error("Failed to set supplier params", "error", err)
return err
}
logger.Info("Successfully updated supplier params", "new_params", supplierParams)

// Add service module `target_num_relays` parameter, in line with the config.yml in the repo.
// Verify via:
// $ poktrolld q service params --node=...
serviceParams := keepers.ServiceKeeper.GetParams(ctx)
serviceParams.TargetNumRelays = serviceTargetNumRelays
err = keepers.ServiceKeeper.SetParams(ctx, serviceParams)
if err != nil {
logger.Error("Failed to set service params", "error", err)
return err
}
logger.Info("Successfully updated service params", "new_params", serviceParams)

// Add tokenomics module `global_inflation_per_claim` parameter, in line with the config.yml in the repo.
// Verify via:
// $ poktrolld q tokenomics params --node=...
tokenomicsParams := keepers.TokenomicsKeeper.GetParams(ctx)
tokenomicsParams.GlobalInflationPerClaim = tokenomicsGlobalInflationPerClaim
err = keepers.TokenomicsKeeper.SetParams(ctx, tokenomicsParams)
if err != nil {
logger.Error("Failed to set tokenomics params", "error", err)
return err
}
logger.Info("Successfully updated tokenomics params", "new_params", tokenomicsParams)
return nil
}

// Helper function to update all suppliers' RevShare to 100%.
// This is necessary to ensure that we have that value populated before suppliers are connected.
//
updateSuppliersRevShare := func(ctx context.Context) error {
logger := cosmosTypes.UnwrapSDKContext(ctx).Logger()
suppliers := keepers.SupplierKeeper.GetAllSuppliers(ctx)
logger.Info("Updating (overriding) all suppliers to delegate 100% revenue share to the supplier's operator address",
"num_suppliers", len(suppliers))

for _, supplier := range suppliers {
for _, service := range supplier.Services {
if len(service.RevShare) > 1 {
// WARNING: Overwriting existing revshare settings without preserving history.
// NOTE: While the canonical approach would be using Module Upgrade (docs.cosmos.network/v0.46/building-modules/upgrade)
// to handle protobuf type changes (see: github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/migrations/v043/store.go#L50-L71),
// we've opted for direct overwrite because:
// 1. No active revenue shares are impacted at time of writing
// 2. Additional protobuf and repo structure changes would be required for proper (though unnecessary) migration

// Create a string representation of just the revenue share addresses
addresses := make([]string, len(service.RevShare))
for i, rs := range service.RevShare {
addresses[i] = rs.Address
}
revShareAddressesStr := "[" + strings.Join(addresses, ",") + "]"
logger.Warn(
"Overwriting existing revenue share configuration",
"supplier_operator", supplier.OperatorAddress,
"supplier_owner", supplier.OwnerAddress,
"service", service.ServiceId,
"previous_revshare_count", len(service.RevShare),
"previous_revshare_addresses", revShareAddressesStr,
)
service.RevShare = []*sharedtypes.ServiceRevenueShare{
{
Address: supplier.OperatorAddress,
RevSharePercentage: uint64(100),
},
}
} else if len(service.RevShare) == 1 {
// If there is only one revshare setting, we can safely overwrite it (because it has 100%
// revenue share), keeping the existing address.
logger.Info("Updating supplier's revenue share configuration",
"supplier_operator", supplier.OperatorAddress,
"supplier_owner", supplier.OwnerAddress,
"service", service.ServiceId,
"previous_revshare_address", service.RevShare[0].Address,
)
currentRevShare := service.RevShare[0]
service.RevShare = []*sharedtypes.ServiceRevenueShare{
{
Address: currentRevShare.Address,
RevSharePercentage: uint64(100),
},
}
} else {
logger.Warn("That shouldn't happen: no revenue share configuration found for supplier",
"supplier_operator", supplier.OperatorAddress,
"supplier_owner", supplier.OwnerAddress,
"service", service.ServiceId,
)
}
}
keepers.SupplierKeeper.SetSupplier(ctx, supplier)
logger.Info("Updated supplier",
"supplier_operator", supplier.OperatorAddress,
"supplier_owner", supplier.OwnerAddress)
}
return nil
}

// Returns the upgrade handler for v0.0.12
return func(ctx context.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
logger := cosmosTypes.UnwrapSDKContext(ctx).Logger()
logger.Info("Starting upgrade handler", "upgrade_plan_name", Upgrade_0_0_12_PlanName)

logger.Info("Starting parameter updates section", "upgrade_plan_name", Upgrade_0_0_12_PlanName)
// Update all governance parameter changes.
// This includes adding params, removing params and changing values of existing params.
err := applyNewParameters(ctx)
if err != nil {
logger.Error("Failed to apply new parameters",
"upgrade_plan_name", Upgrade_0_0_12_PlanName,
"error", err)
return vm, err
}

logger.Info("Starting supplier RevShare updates section", "upgrade_plan_name", Upgrade_0_0_12_PlanName)
// Override all suppliers' RevShare to be 100% delegate to the supplier's operator address
err = updateSuppliersRevShare(ctx)
if err != nil {
logger.Error("Failed to update suppliers RevShare",
"upgrade_plan_name", Upgrade_0_0_12_PlanName,
"error", err)
return vm, err
}

logger.Info("Starting module migrations section", "upgrade_plan_name", Upgrade_0_0_12_PlanName)
vm, err = mm.RunMigrations(ctx, configurator, vm)
if err != nil {
logger.Error("Failed to run migrations",
"upgrade_plan_name", Upgrade_0_0_12_PlanName,
"error", err)
return vm, err
}

logger.Info("Successfully completed upgrade handler", "upgrade_plan_name", Upgrade_0_0_12_PlanName)
return vm, nil
}
},
// No changes to the KVStore in this upgrade.
StoreUpgrades: storetypes.StoreUpgrades{},
}
Loading

0 comments on commit 60a6eb5

Please sign in to comment.