From 29b59b4ddaa308f5813d1f5ad67b1418e31740c4 Mon Sep 17 00:00:00 2001 From: void* Date: Fri, 11 Oct 2024 05:13:22 +0100 Subject: [PATCH] Refactoring generation of FrontEnd cahe to be callable independently (#395) --- app/upgrade_cudos.go | 44 +++++++++++++++++++++---------- app/upgrade_cudos_distribution.go | 27 +++++++++++-------- cmd/fetchd/cmd/cudos_merge.go | 13 ++++++++- go.mod | 3 +++ go.sum | 6 +++++ 5 files changed, 67 insertions(+), 26 deletions(-) diff --git a/app/upgrade_cudos.go b/app/upgrade_cudos.go index 0d292f7b..e8b46f69 100644 --- a/app/upgrade_cudos.go +++ b/app/upgrade_cudos.go @@ -19,6 +19,7 @@ import ( ibctransfertypes "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" ibccore "github.com/cosmos/ibc-go/v3/modules/core/24-host" "github.com/spf13/cast" + "github.com/tendermint/tendermint/libs/log" tmtypes "github.com/tendermint/tendermint/types" "strings" ) @@ -158,15 +159,7 @@ func LoadCudosGenesis(app *App, manifest *UpgradeManifest) (*map[string]interfac } -func CudosMergeUpgradeHandler(app *App, ctx sdk.Context, cudosCfg *CudosMergeConfig, genesisData *GenesisData, manifest *UpgradeManifest) error { - if cudosCfg == nil { - return fmt.Errorf("cudos merge: cudos CudosMergeConfig not provided (null pointer passed in)") - } - - if app.cudosGenesisPath == "" { - return fmt.Errorf("cudos merge: cudos path not set") - } - +func ProcessSourceNetworkGenesis(logger log.Logger, cudosCfg *CudosMergeConfig, genesisData *GenesisData, manifest *UpgradeManifest) error { err := genesisUpgradeWithdrawIBCChannelsBalances(genesisData, cudosCfg, manifest) if err != nil { return fmt.Errorf("cudos merge: failed to withdraw IBC channels balances: %w", err) @@ -177,12 +170,12 @@ func CudosMergeUpgradeHandler(app *App, ctx sdk.Context, cudosCfg *CudosMergeCon return fmt.Errorf("cudos merge: failed to withdraw genesis contracts balances: %w", err) } - err = withdrawGenesisStakingDelegations(app, genesisData, cudosCfg, manifest) + err = withdrawGenesisStakingDelegations(logger, genesisData, cudosCfg, manifest) if err != nil { return fmt.Errorf("cudos merge: failed to withdraw genesis staked tokens: %w", err) } - err = withdrawGenesisDistributionRewards(app, genesisData, cudosCfg, manifest) + err = withdrawGenesisDistributionRewards(logger, genesisData, cudosCfg, manifest) if err != nil { return fmt.Errorf("cudos merge: failed to withdraw genesis rewards: %w", err) } @@ -197,6 +190,23 @@ func CudosMergeUpgradeHandler(app *App, ctx sdk.Context, cudosCfg *CudosMergeCon return fmt.Errorf("cudos merge: failed to move funds: %w", err) } + return nil +} + +func CudosMergeUpgradeHandler(app *App, ctx sdk.Context, cudosCfg *CudosMergeConfig, genesisData *GenesisData, manifest *UpgradeManifest) error { + if cudosCfg == nil { + return fmt.Errorf("cudos merge: cudos CudosMergeConfig not provided (null pointer passed in)") + } + + if app.cudosGenesisPath == "" { + return fmt.Errorf("cudos merge: cudos path not set") + } + + err := ProcessSourceNetworkGenesis(app.Logger(), cudosCfg, genesisData, manifest) + if err != nil { + return err + } + err = MigrateGenesisAccounts(genesisData, ctx, app, cudosCfg, manifest) if err != nil { return fmt.Errorf("cudos merge: failed process accounts: %w", err) @@ -736,7 +746,7 @@ func parseGenesisValidators(jsonData map[string]interface{}) (*OrderedMap[string return validatorInfoMap, nil } -func withdrawGenesisStakingDelegations(app *App, genesisData *GenesisData, cudosCfg *CudosMergeConfig, manifest *UpgradeManifest) error { +func withdrawGenesisStakingDelegations(logger log.Logger, genesisData *GenesisData, cudosCfg *CudosMergeConfig, manifest *UpgradeManifest) error { // Handle delegations for i := range genesisData.Validators.Iterate() { validatorOperatorAddress, validator := i.Key, i.Value @@ -813,7 +823,10 @@ func withdrawGenesisStakingDelegations(app *App, genesisData *GenesisData, cudos return fmt.Errorf("remaining bonded pool balance %s is too high", bondedPool.balance.String()) } - app.Logger().Info("cudos merge: remaining bonded pool balance", "amount", bondedPool.balance.String()) + if logger != nil { + logger.Info("cudos merge: remaining bonded pool balance", "amount", bondedPool.balance.String()) + } + err = moveGenesisBalance(genesisData, genesisData.BondedPoolAddress, cudosCfg.config.RemainingStakingBalanceAddr, bondedPool.balance, "remaining_bonded_pool_balance", manifest, cudosCfg) if err != nil { return err @@ -828,7 +841,10 @@ func withdrawGenesisStakingDelegations(app *App, genesisData *GenesisData, cudos return fmt.Errorf("remaining not-bonded pool balance %s is too high", notBondedPool.balance.String()) } - app.Logger().Info("cudos merge: remaining not-bonded pool balance", "amount", notBondedPool.balance.String()) + if logger != nil { + logger.Info("cudos merge: remaining not-bonded pool balance", "amount", notBondedPool.balance.String()) + } + err = moveGenesisBalance(genesisData, genesisData.NotBondedPoolAddress, cudosCfg.config.RemainingStakingBalanceAddr, notBondedPool.balance, "remaining_not_bonded_pool_balance", manifest, cudosCfg) if err != nil { return err diff --git a/app/upgrade_cudos_distribution.go b/app/upgrade_cudos_distribution.go index dd05944a..b0afc05e 100644 --- a/app/upgrade_cudos_distribution.go +++ b/app/upgrade_cudos_distribution.go @@ -5,6 +5,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" "github.com/spf13/cast" + "github.com/tendermint/tendermint/libs/log" "math" "sort" ) @@ -320,7 +321,7 @@ func verifyOutstandingBalances(genesisData *GenesisData) error { return nil } -func withdrawGenesisDistributionRewards(app *App, genesisData *GenesisData, cudosCfg *CudosMergeConfig, manifest *UpgradeManifest) error { +func withdrawGenesisDistributionRewards(logger log.Logger, genesisData *GenesisData, cudosCfg *CudosMergeConfig, manifest *UpgradeManifest) error { // block height is used only to early stop rewards calculation //blockHeight := getMaxBlockHeight(genesisData) + 1 blockHeight := uint64(math.MaxUint64) @@ -336,7 +337,7 @@ func withdrawGenesisDistributionRewards(app *App, genesisData *GenesisData, cudo for _, delegatorAddr := range delegatorStartInfo.Keys() { delegation := validator.delegations.MustGet(delegatorAddr) - _, err := withdrawDelegationRewards(app, genesisData, validator, delegation, endingPeriod, blockHeight, cudosCfg, manifest) + _, err := withdrawDelegationRewards(logger, genesisData, validator, delegation, endingPeriod, blockHeight, cudosCfg, manifest) if err != nil { return err } @@ -364,7 +365,9 @@ func withdrawGenesisDistributionRewards(app *App, genesisData *GenesisData, cudo remainingBalance := distributionModuleAccount.balance.Sub(communityBalance) // Withdraw remaining balance - app.Logger().Info("cudos merge: remaining dist balance", "amount", remainingBalance.String()) + if logger != nil { + logger.Info("cudos merge: remaining dist balance", "amount", remainingBalance.String()) + } // TODO: Write to manifest? err = checkTolerance(remainingBalance, maxToleratedRemainingDistributionBalance) @@ -591,7 +594,7 @@ func (d DistributionInfo) GetDelegatorWithdrawAddr(delAddr string) string { return b } -func withdrawDelegationRewards(app *App, genesisData *GenesisData, val *ValidatorInfo, del *DelegationInfo, endingPeriod uint64, blockHeight uint64, cudosCfg *CudosMergeConfig, manifest *UpgradeManifest) (sdk.Coins, error) { +func withdrawDelegationRewards(logger log.Logger, genesisData *GenesisData, val *ValidatorInfo, del *DelegationInfo, endingPeriod uint64, blockHeight uint64, cudosCfg *CudosMergeConfig, manifest *UpgradeManifest) (sdk.Coins, error) { // check existence of delegator starting info genesisData.DistributionInfo.DelegatorStartingInfos.Has(val.operatorAddress) @@ -612,13 +615,15 @@ func withdrawDelegationRewards(app *App, genesisData *GenesisData, val *Validato // of the decCoins due to operation order of the distribution mechanism. rewards := rewardsRaw.Intersect(outstanding) if !rewards.IsEqual(rewardsRaw) { - app.Logger().Error( - "rounding error withdrawing rewards from validator", - "delegator", del.delegatorAddress, - "validator", val.operatorAddress, - "got", rewards.String(), - "expected", rewardsRaw.String(), - ) + if logger != nil { + logger.Error( + "rounding error withdrawing rewards from validator", + "delegator", del.delegatorAddress, + "validator", val.operatorAddress, + "got", rewards.String(), + "expected", rewardsRaw.String(), + ) + } } // truncate reward dec coins, return remainder to community pool diff --git a/cmd/fetchd/cmd/cudos_merge.go b/cmd/fetchd/cmd/cudos_merge.go index 07e8cf5b..4cda3e95 100644 --- a/cmd/fetchd/cmd/cudos_merge.go +++ b/cmd/fetchd/cmd/cudos_merge.go @@ -7,6 +7,8 @@ import ( genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/fetchai/fetchd/app" "github.com/spf13/cobra" + "github.com/tendermint/tendermint/libs/log" + "os" ) // Module init related flags @@ -59,7 +61,10 @@ func utilNetworkMergeCommand() *cobra.Command { Short: "Verifies the configuration JSON file of the network merge", Long: `This command verifies the structure and content of the network merge config JSON file. It checks whether the network merge config file conforms to expected schema - presence of all required fields and validates their values against predefined rules. -`, +` + + "Verification fully executes the front-end of the upgrade procedure using source chain genesis json and " + + "network config files as inputs, constructing front-end cache containing all necessary structures and " + + "derived data, exactly as it would be executed during the real upgrade.", Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { ctx := client.GetClientContextFromCmd(cmd) @@ -185,5 +190,11 @@ func VerifyConfigFile(configFilePath string, GenesisFilePath string, ctx client. return fmt.Errorf("list of backup validators is empty") } + logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)) + err = app.ProcessSourceNetworkGenesis(logger, cudosConfig, genesisData, manifest) + if err != nil { + return err + } + return nil } diff --git a/go.mod b/go.mod index 4646cc52..fc8044f0 100644 --- a/go.mod +++ b/go.mod @@ -19,6 +19,7 @@ require ( require ( github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce github.com/cosmos/btcutil v1.0.4 + github.com/vektra/mockery/v2 v2.14.0 ) require ( @@ -118,10 +119,12 @@ require ( go.etcd.io/bbolt v1.3.6 // indirect golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect golang.org/x/net v0.0.0-20220726230323-06994584191e // indirect golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 // indirect golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect golang.org/x/text v0.4.0 // indirect + golang.org/x/tools v0.1.12 // indirect google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b // indirect google.golang.org/grpc v1.50.1 // indirect google.golang.org/protobuf v1.28.1 // indirect diff --git a/go.sum b/go.sum index e057dea6..99215f72 100644 --- a/go.sum +++ b/go.sum @@ -769,6 +769,8 @@ github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/vektra/mockery/v2 v2.14.0 h1:KZ1p5Hrn8tiY+LErRMr14HHle6khxo+JKOXLBW/yfqs= +github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= @@ -862,6 +864,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1079,6 +1083,8 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=