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

refactor: CDS logs #383

Merged
merged 12 commits into from
Oct 4, 2024
21 changes: 18 additions & 3 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ func New(

app.GovKeeper = *govKeeper.SetHooks(
govtypes.NewMultiGovHooks(
// register the governance hooks
// register the governance hooks
),
)

Expand Down Expand Up @@ -727,18 +727,33 @@ func (app *App) GetSubspace(moduleName string) paramstypes.Subspace {
return subspace
}

func getNetworkInfo(app *App, ctx sdk.Context) (*NetworkConfig, error) {
func getNetworkInfo(app *App, ctx sdk.Context, manifest *UpgradeManifest) (*NetworkConfig, error) {
// Load network config from file if given
var networkInfo *NetworkConfig
var err error
if app.cudosMigrationConfigPath != "" {
app.Logger().Info("cudos merge: loading network config", "file", app.cudosMigrationConfigPath, "hash", app.cudosMigrationConfigSha256)
pbukva marked this conversation as resolved.
Show resolved Hide resolved
networkInfo, err = LoadNetworkConfigFromFile(app.cudosMigrationConfigPath, &app.cudosMigrationConfigSha256)
if err != nil {
return nil, err
}

if networkInfo.ChainID != ctx.ChainID() {
return nil, fmt.Errorf("source file chain id %s and current node chain id %s is different", networkInfo.ChainID, ctx.ChainID())
}
Copy link
Collaborator

@pbukva pbukva Oct 4, 2024

Choose a reason for hiding this comment

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

Suggested change
if networkInfo.ChainID != ctx.ChainID() {
return nil, fmt.Errorf("source file chain id %s and current node chain id %s is different", networkInfo.ChainID, ctx.ChainID())
}
if networkInfo.MergeSourceChainID != mergeSourceGenesisDoc.ChainID {
return nil, fmt.Errorf("source file chain id %s and current node chain id %s is different", networkInfo.MergeSourceChainID, mergeSourceGenesisDoc.ChainID)
}
if networkInfo.DestinationChainID != ctx.ChainID() {
return nil, fmt.Errorf("source file chain id %s and current node chain id %s is different", networkInfo.DestinationChainID, ctx.ChainID())
}

See my previous post .


manifest.NetworkConfigFileSha256 = app.cudosMigrationConfigSha256
manifest.MergeSourceChainID = networkInfo.ChainID
manifest.DestinationChainID = ctx.ChainID()

// Config file not given, config from hardcoded map
} else if info, ok := NetworkInfos[ctx.ChainID()]; ok {
app.Logger().Info("cudos merge: loading network from map", "chain", ctx.ChainID())
manifest.NetworkConfigFileSha256 = "config map"
networkInfo = &info

manifest.MergeSourceChainID = ctx.ChainID()
manifest.DestinationChainID = ctx.ChainID()
} else {
return nil, fmt.Errorf("network info not found for chain id: %s", ctx.ChainID())
}
Expand All @@ -759,7 +774,7 @@ func (app *App) RegisterUpgradeHandlers(cfg module.Configurator) {
return nil, fmt.Errorf("cudos path not set")
}

networkInfo, err := getNetworkInfo(app, ctx)
networkInfo, err := getNetworkInfo(app, ctx, manifest)
if err != nil {
return nil, err
}
Expand Down
27 changes: 7 additions & 20 deletions app/upgrade_cudos.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ func CudosMergeUpgradeHandler(app *App, ctx sdk.Context, cudosCfg *CudosMergeCon
if app.cudosGenesisSha256 != actualGenesisSha256Hex {
return fmt.Errorf("sha256 failed to verify: genesis file \"%v\" hash %v does not match expected hash %v", app.cudosGenesisPath, actualGenesisSha256Hex, app.cudosGenesisSha256)
}
manifest.GenesisFileSha256 = actualGenesisSha256Hex

_, genDoc, err := genutiltypes.GenesisStateFromGenFile(app.cudosGenesisPath)
if err != nil {
Expand Down Expand Up @@ -185,12 +186,12 @@ func CudosMergeUpgradeHandler(app *App, ctx sdk.Context, cudosCfg *CudosMergeCon
return fmt.Errorf("failed to withdraw genesis contracts balances: %w", err)
}

err = withdrawGenesisStakingDelegations(genesisData, cudosCfg, manifest)
err = withdrawGenesisStakingDelegations(app, genesisData, cudosCfg, manifest)
if err != nil {
return fmt.Errorf("failed to withdraw genesis staked tokens: %w", err)
}

err = withdrawGenesisDistributionRewards(genesisData, cudosCfg, manifest)
err = withdrawGenesisDistributionRewards(app, genesisData, cudosCfg, manifest)
if err != nil {
return fmt.Errorf("failed to withdraw genesis rewards: %w", err)
}
Expand Down Expand Up @@ -693,7 +694,7 @@ func parseGenesisValidators(jsonData map[string]interface{}) (*OrderedMap[string
return validatorInfoMap, nil
}

func withdrawGenesisStakingDelegations(genesisData *GenesisData, cudosCfg *CudosMergeConfig, manifest *UpgradeManifest) error {
func withdrawGenesisStakingDelegations(app *App, genesisData *GenesisData, cudosCfg *CudosMergeConfig, manifest *UpgradeManifest) error {
// Handle delegations
for _, validatorOperatorAddress := range genesisData.validators.Keys() {
validator := genesisData.validators.MustGet(validatorOperatorAddress)
Expand Down Expand Up @@ -767,7 +768,7 @@ func withdrawGenesisStakingDelegations(genesisData *GenesisData, cudosCfg *Cudos
return fmt.Errorf("remaining bonded pool balance %s is too high", bondedPool.balance.String())
}

println("remaining bonded pool balance: ", bondedPool.balance.String())
app.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
Expand All @@ -782,7 +783,7 @@ func withdrawGenesisStakingDelegations(genesisData *GenesisData, cudosCfg *Cudos
return fmt.Errorf("remaining not-bonded pool balance %s is too high", notBondedPool.balance.String())
}

println("Remaining not-bonded pool balance: ", notBondedPool.balance.String())
app.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
Expand Down Expand Up @@ -1042,22 +1043,8 @@ func convertBalance(balance sdk.Coins, cudosCfg *CudosMergeConfig) (sdk.Coins, e
newAmount := coin.Amount.ToDec().Quo(conversionConstant).TruncateInt()
sdkCoin := sdk.NewCoin(cudosCfg.config.ConvertedDenom, newAmount)
resBalance = resBalance.Add(sdkCoin)
} else {
//println("Unknown denom: ", coin.Denom)
// Ignore unlisted tokens
continue
/*
// Just add without conversion
newAmount, ok := sdk.NewIntFromString(amount)
if !ok {
panic("failed to convert amount to big.Int")
}

sdkCoin := sdk.NewCoin(denom, newAmount)

resBalance = resBalance.Add(sdkCoin)
*/
}
// Denominations that are not in conversion constant map are ignored
}

return resBalance, nil
Expand Down
12 changes: 6 additions & 6 deletions app/upgrade_cudos_distribution.go
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ func verifyOutstandingBalances(genesisData *GenesisData) error {
return nil
}

func withdrawGenesisDistributionRewards(genesisData *GenesisData, cudosCfg *CudosMergeConfig, manifest *UpgradeManifest) error {
func withdrawGenesisDistributionRewards(app *App, 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)
Expand All @@ -370,7 +370,7 @@ func withdrawGenesisDistributionRewards(genesisData *GenesisData, cudosCfg *Cudo
for _, delegatorAddr := range delegatorStartInfo.Keys() {
delegation := validator.delegations.MustGet(delegatorAddr)

_, err := withdrawDelegationRewards(genesisData, validator, delegation, endingPeriod, blockHeight, cudosCfg, manifest)
_, err := withdrawDelegationRewards(app, genesisData, validator, delegation, endingPeriod, blockHeight, cudosCfg, manifest)
if err != nil {
return err
}
Expand All @@ -396,12 +396,12 @@ func withdrawGenesisDistributionRewards(genesisData *GenesisData, cudosCfg *Cudo

communityBalance, _ := genesisData.distributionInfo.feePool.communityPool.TruncateDecimal()
remainingBalance := distributionModuleAccount.balance.Sub(communityBalance)
println("Remaining dist balance: ", remainingBalance.String())
app.Logger().Info("cudos merge: remaining dist balance", "amount", remainingBalance.String())

// TODO: Write to manifest?
err = checkTolerance(remainingBalance, maxToleratedRemainingDistributionBalance)
if err != nil {
return fmt.Errorf("Remaining distribution balance %s is too high", remainingBalance.String())
return fmt.Errorf("remaining distribution balance %s is too high", remainingBalance.String())
pbukva marked this conversation as resolved.
Show resolved Hide resolved
}

err = moveGenesisBalance(genesisData, genesisData.distributionInfo.distributionModuleAccountAddress, cudosCfg.config.RemainingDistributionBalanceAddr, distributionModuleAccount.balance, "remaining_distribution_module_balance", manifest, cudosCfg)
Expand Down Expand Up @@ -620,7 +620,7 @@ func (d DistributionInfo) GetDelegatorWithdrawAddr(delAddr string) string {
return b
}

func withdrawDelegationRewards(genesisData *GenesisData, val *ValidatorInfo, del *DelegationInfo, endingPeriod uint64, blockHeight uint64, cudosCfg *CudosMergeConfig, manifest *UpgradeManifest) (sdk.Coins, error) {
func withdrawDelegationRewards(app *App, 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)
Expand All @@ -641,7 +641,7 @@ func withdrawDelegationRewards(genesisData *GenesisData, val *ValidatorInfo, del
// of the decCoins due to operation order of the distribution mechanism.
rewards := rewardsRaw.Intersect(outstanding)
if !rewards.IsEqual(rewardsRaw) {
println(
app.Logger().Error(
"rounding error withdrawing rewards from validator",
"delegator", del.delegatorAddress,
"validator", val.operatorAddress,
Expand Down
25 changes: 15 additions & 10 deletions app/upgrade_v_11_4_manifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,21 @@ import (
const manifestFilenameBase = "upgrade_manifest.json"

type UpgradeManifest struct {
Reconciliation *UpgradeReconciliation `json:"reconciliation,omitempty"`
Contracts *Contracts `json:"contracts,omitempty"`
IBC *UpgradeIBCTransfers `json:"ibc,omitempty"`
Migration *UpgradeMigation `json:"migration,omitempty"`
MoveGenesisBalance *UpgradeMoveGenesisBalance `json:"move_genesis_balance,omitempty"`
Delegate *UpgradeDelegate `json:"delegate,omitempty"`
MoveMintedBalance *UpgradeMoveMintedBalance `json:"move_minted_balance,omitempty"`
VestingCollision *UpgradeVestingCollision `json:"vesting_collision,omitempty"`
MoveDelegations *UpgradeMoveDelegations `json:"move_delegation,omitempty"`
CreatedAccounts *UpgradeCreatedAccounts `json:"created_accounts,omitempty"`
// Following 2 hash data members are intentionally without `omitempty` parameter in `json:...` decorator
GenesisFileSha256 string `json:"genesis_file_sha256"`
NetworkConfigFileSha256 string `json:"network_config_file_sha256"`
MergeSourceChainID string `json:"merge_source_chain_id"`
DestinationChainID string `json:"destination_chain_id"`
Reconciliation *UpgradeReconciliation `json:"reconciliation,omitempty"`
Contracts *Contracts `json:"contracts,omitempty"`
IBC *UpgradeIBCTransfers `json:"ibc,omitempty"`
Migration *UpgradeMigation `json:"migration,omitempty"`
MoveGenesisBalance *UpgradeMoveGenesisBalance `json:"move_genesis_balance,omitempty"`
Delegate *UpgradeDelegate `json:"delegate,omitempty"`
MoveMintedBalance *UpgradeMoveMintedBalance `json:"move_minted_balance,omitempty"`
VestingCollision *UpgradeVestingCollision `json:"vesting_collision,omitempty"`
MoveDelegations *UpgradeMoveDelegations `json:"move_delegation,omitempty"`
CreatedAccounts *UpgradeCreatedAccounts `json:"created_accounts,omitempty"`
}

func NewUpgradeManifest() *UpgradeManifest {
Expand Down
6 changes: 5 additions & 1 deletion app/upgrade_v_11_4_network_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,10 @@ var NetworkInfos = map[string]NetworkConfig{
//cudos15jpukx39rtkt8w3u3gzwwvyptdeyejcjade6he

MovedAccounts: []Pair[string, string]{
//{"cudos1dslwarknhfsw3pfjzxxf5mn28q3ewfectw0gta", "cudos15jpukx39rtkt8w3u3gzwwvyptdeyejcjade6he"}, // Replace this
//{"cudos196nrmandtwz67d8h4h0ux7amlcluecglx00wlw", "cudos1nj49l56x7sss5hqyvfmctxr3mq64whg273g3x5"}, // Replace this
//{"cudos1xcwjdw09cc9dyshr4gt5520sgsh582mjj03jge", "cudos1dslwarknhfsw3pfjzxxf5mn28q3ewfectw0gta"}, // Replace this
//{"cudos1ejmf96efvjp6pmsaj8djv3gpmnsvmpnctger4v", "fetch15p3rl5aavw9rtu86tna5lgxfkz67zzr6ed4yhw"}, // Replace this

},

BackupValidators: []string{"fetchvaloper1m9cjw6xgt04f9ddw25fff3cfe2exgwk07eu46u", "fetchvaloper122j02czdt5ca8cf576wy2hassyxyx67wdsecml"},
Expand Down Expand Up @@ -265,6 +268,7 @@ var NetworkInfos = map[string]NetworkConfig{
}

type NetworkConfig struct {
ChainID string `json:"chain_id"`
Copy link
Collaborator

@pbukva pbukva Oct 4, 2024

Choose a reason for hiding this comment

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

Suggested change
ChainID string `json:"chain_id"`
MergeSourceChainID string `json:"merge_source_chain_id"`
DestinationChainID string `json:"destination_chain_id"````

ReconciliationInfo *ReconciliationInfo `json:"reconciliation_info,omitempty"`
Contracts *ContractSet `json:"contracts,omitempty"`
CudosMerge *CudosMergeConfigJSON `json:"cudos_merge,omitempty"`
Expand Down
21 changes: 21 additions & 0 deletions cmd/fetchd/cmd/cudos_merge.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,25 @@ func AddCudosFlags(startCmd *cobra.Command) {
startCmd.Flags().String(FlagCudosMigrationConfigPath, "", "Upgrade config file path. Required to be provided *exclusively* during cudos migration upgrade node start, *ignored* on all subsequent node starts.")
startCmd.Flags().String(FlagCudosGenesisSha256, "", "Sha256 of the cudos genesis file. Optional to be provided *exclusively* during cudos migration upgrade node start, *ignored* on all subsequent node starts.")
startCmd.Flags().String(FlagCudosMigrationConfigSha256, "", fmt.Sprintf("Sha256 of the upgrade config file. Required if to be provided *exclusively* during cudos migration upgrade node start and *only IF* \"%v\" flag has been provided, *ignored* on all subsequent node starts.", FlagCudosMigrationConfigPath))

// Capture the existing PreRunE function
existingPreRunE := startCmd.PreRunE

// Set a new PreRunE function that includes the old one
startCmd.PreRunE = func(cmd *cobra.Command, args []string) error {
// Check for positional arguments
if len(args) > 0 {
return fmt.Errorf("no positional arguments are allowed")
}

// Call the existing PreRunE function if it exists
if existingPreRunE != nil {
if err := existingPreRunE(cmd, args); err != nil {
return err
}
}

return nil
}

}
Loading