Skip to content

Commit

Permalink
Merge pull request #5409 from multiversx/deterministic-sort-on-valida…
Browse files Browse the repository at this point in the history
…tors-info

Deterministic sort on validators info
  • Loading branch information
iulianpascalau authored Jul 11, 2023
2 parents 192ebc3 + 056a257 commit aee68cc
Show file tree
Hide file tree
Showing 13 changed files with 1,019 additions and 59 deletions.
3 changes: 3 additions & 0 deletions cmd/node/config/enableEpochs.toml
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,9 @@
# SetGuardianEnableEpoch represents the epoch when the guard account feature is enabled in the protocol
SetGuardianEnableEpoch = 1

# DeterministicSortOnValidatorsInfoEnableEpoch represents the epoch when the deterministic sorting on validators info is enabled
DeterministicSortOnValidatorsInfoEnableEpoch = 2

# BLSMultiSignerEnableEpoch represents the activation epoch for different types of BLS multi-signers
BLSMultiSignerEnableEpoch = [
{ EnableEpoch = 0, Type = "no-KOSK"},
Expand Down
1 change: 1 addition & 0 deletions common/enablers/enableEpochsHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ func (handler *enableEpochsHandler) EpochConfirmed(epoch uint32, _ uint64) {
handler.setFlagValue(epoch >= handler.enableEpochsConfig.AlwaysSaveTokenMetaDataEnableEpoch, handler.alwaysSaveTokenMetaDataFlag, "alwaysSaveTokenMetaDataFlag")
handler.setFlagValue(epoch >= handler.enableEpochsConfig.SetGuardianEnableEpoch, handler.setGuardianFlag, "setGuardianFlag")
handler.setFlagValue(epoch >= handler.enableEpochsConfig.RelayedNonceFixEnableEpoch, handler.relayedNonceFixFlag, "relayedNonceFixFlag")
handler.setFlagValue(epoch >= handler.enableEpochsConfig.DeterministicSortOnValidatorsInfoEnableEpoch, handler.deterministicSortOnValidatorsInfoFixFlag, "deterministicSortOnValidatorsInfoFixFlag")
}

func (handler *enableEpochsHandler) setFlagValue(value bool, flag *atomic.Flag, flagName string) {
Expand Down
4 changes: 4 additions & 0 deletions common/enablers/enableEpochsHandler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ func createEnableEpochsConfig() config.EnableEpochs {
AlwaysSaveTokenMetaDataEnableEpoch: 76,
RuntimeCodeSizeFixEnableEpoch: 77,
RelayedNonceFixEnableEpoch: 78,
DeterministicSortOnValidatorsInfoEnableEpoch: 79,
}
}

Expand Down Expand Up @@ -216,6 +217,7 @@ func TestNewEnableEpochsHandler_EpochConfirmed(t *testing.T) {
assert.True(t, handler.IsAlwaysSaveTokenMetaDataEnabled())
assert.True(t, handler.IsRuntimeCodeSizeFixEnabled())
assert.True(t, handler.IsRelayedNonceFixEnabled())
assert.True(t, handler.IsDeterministicSortOnValidatorsInfoFixEnabled())
})
t.Run("flags with == condition should be set, along with all >=", func(t *testing.T) {
t.Parallel()
Expand Down Expand Up @@ -317,6 +319,7 @@ func TestNewEnableEpochsHandler_EpochConfirmed(t *testing.T) {
assert.True(t, handler.IsAlwaysSaveTokenMetaDataEnabled())
assert.True(t, handler.IsRuntimeCodeSizeFixEnabled())
assert.True(t, handler.IsRelayedNonceFixEnabled())
assert.True(t, handler.IsDeterministicSortOnValidatorsInfoFixEnabled())
})
t.Run("flags with < should be set", func(t *testing.T) {
t.Parallel()
Expand Down Expand Up @@ -413,5 +416,6 @@ func TestNewEnableEpochsHandler_EpochConfirmed(t *testing.T) {
assert.False(t, handler.IsAlwaysSaveTokenMetaDataEnabled())
assert.False(t, handler.IsRuntimeCodeSizeFixEnabled())
assert.False(t, handler.IsRelayedNonceFixEnabled())
assert.False(t, handler.IsDeterministicSortOnValidatorsInfoFixEnabled())
})
}
7 changes: 7 additions & 0 deletions common/enablers/epochFlags.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ type epochFlagsHolder struct {
alwaysSaveTokenMetaDataFlag *atomic.Flag
setGuardianFlag *atomic.Flag
relayedNonceFixFlag *atomic.Flag
deterministicSortOnValidatorsInfoFixFlag *atomic.Flag
}

func newEpochFlagsHolder() *epochFlagsHolder {
Expand Down Expand Up @@ -183,6 +184,7 @@ func newEpochFlagsHolder() *epochFlagsHolder {
alwaysSaveTokenMetaDataFlag: &atomic.Flag{},
setGuardianFlag: &atomic.Flag{},
relayedNonceFixFlag: &atomic.Flag{},
deterministicSortOnValidatorsInfoFixFlag: &atomic.Flag{},
}
}

Expand Down Expand Up @@ -673,3 +675,8 @@ func (holder *epochFlagsHolder) IsSetGuardianEnabled() bool {
func (holder *epochFlagsHolder) IsRelayedNonceFixEnabled() bool {
return holder.relayedNonceFixFlag.IsSet()
}

// IsDeterministicSortOnValidatorsInfoFixEnabled returns true if deterministicSortOnValidatorsInfoFix is enabled
func (holder *epochFlagsHolder) IsDeterministicSortOnValidatorsInfoFixEnabled() bool {
return holder.deterministicSortOnValidatorsInfoFixFlag.IsSet()
}
1 change: 1 addition & 0 deletions common/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,7 @@ type EnableEpochsHandler interface {
IsAlwaysSaveTokenMetaDataEnabled() bool
IsSetGuardianEnabled() bool
IsRelayedNonceFixEnabled() bool
IsDeterministicSortOnValidatorsInfoFixEnabled() bool

IsInterfaceNil() bool
}
1 change: 1 addition & 0 deletions config/epochConfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ type EnableEpochs struct {
AlwaysSaveTokenMetaDataEnableEpoch uint32
SetGuardianEnableEpoch uint32
RelayedNonceFixEnableEpoch uint32
DeterministicSortOnValidatorsInfoEnableEpoch uint32
BLSMultiSignerEnableEpoch []MultiSignerConfig
}

Expand Down
110 changes: 57 additions & 53 deletions config/tomlConfig_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -712,6 +712,9 @@ func TestEnableEpochConfig(t *testing.T) {
# RelayedNonceFixEnableEpoch represents the epoch when the nonce fix for relayed txs is enabled
RelayedNonceFixEnableEpoch = 65
# DeterministicSortOnValidatorsInfoEnableEpoch represents the epoch when the deterministic sorting on validators info is enabled
DeterministicSortOnValidatorsInfoEnableEpoch = 66
# MaxNodesChangeEnableEpoch holds configuration for changing the maximum number of nodes and the enabling epoch
MaxNodesChangeEnableEpoch = [
{ EpochEnable = 44, MaxNumNodes = 2169, NodesToShufflePerShard = 80 },
Expand Down Expand Up @@ -756,59 +759,60 @@ func TestEnableEpochConfig(t *testing.T) {
NodesToShufflePerShard: 80,
},
},
BlockGasAndFeesReCheckEnableEpoch: 13,
StakingV2EnableEpoch: 18,
StakeEnableEpoch: 17,
DoubleKeyProtectionEnableEpoch: 19,
ESDTEnableEpoch: 20,
GovernanceEnableEpoch: 21,
DelegationManagerEnableEpoch: 22,
DelegationSmartContractEnableEpoch: 23,
CorrectLastUnjailedEnableEpoch: 24,
BalanceWaitingListsEnableEpoch: 14,
ReturnDataToLastTransferEnableEpoch: 15,
SenderInOutTransferEnableEpoch: 16,
RelayedTransactionsV2EnableEpoch: 25,
UnbondTokensV2EnableEpoch: 26,
SaveJailedAlwaysEnableEpoch: 27,
ValidatorToDelegationEnableEpoch: 29,
ReDelegateBelowMinCheckEnableEpoch: 28,
WaitingListFixEnableEpoch: 30,
IncrementSCRNonceInMultiTransferEnableEpoch: 31,
ESDTMultiTransferEnableEpoch: 32,
GlobalMintBurnDisableEpoch: 33,
ESDTTransferRoleEnableEpoch: 34,
BuiltInFunctionOnMetaEnableEpoch: 35,
ComputeRewardCheckpointEnableEpoch: 36,
SCRSizeInvariantCheckEnableEpoch: 37,
BackwardCompSaveKeyValueEnableEpoch: 38,
ESDTNFTCreateOnMultiShardEnableEpoch: 39,
MetaESDTSetEnableEpoch: 40,
AddTokensToDelegationEnableEpoch: 41,
MultiESDTTransferFixOnCallBackOnEnableEpoch: 42,
OptimizeGasUsedInCrossMiniBlocksEnableEpoch: 43,
FixOOGReturnCodeEnableEpoch: 44,
RemoveNonUpdatedStorageEnableEpoch: 45,
OptimizeNFTStoreEnableEpoch: 46,
CreateNFTThroughExecByCallerEnableEpoch: 47,
IsPayableBySCEnableEpoch: 48,
CleanUpInformativeSCRsEnableEpoch: 49,
StorageAPICostOptimizationEnableEpoch: 50,
TransformToMultiShardCreateEnableEpoch: 51,
ESDTRegisterAndSetAllRolesEnableEpoch: 52,
FailExecutionOnEveryAPIErrorEnableEpoch: 53,
ManagedCryptoAPIsEnableEpoch: 54,
ESDTMetadataContinuousCleanupEnableEpoch: 55,
FixAsyncCallBackArgsListEnableEpoch: 56,
FixOldTokenLiquidityEnableEpoch: 57,
SetSenderInEeiOutputTransferEnableEpoch: 58,
MaxBlockchainHookCountersEnableEpoch: 59,
WipeSingleNFTLiquidityDecreaseEnableEpoch: 60,
AlwaysSaveTokenMetaDataEnableEpoch: 61,
RuntimeCodeSizeFixEnableEpoch: 62,
RuntimeMemStoreLimitEnableEpoch: 63,
SetGuardianEnableEpoch: 64,
RelayedNonceFixEnableEpoch: 65,
BlockGasAndFeesReCheckEnableEpoch: 13,
StakingV2EnableEpoch: 18,
StakeEnableEpoch: 17,
DoubleKeyProtectionEnableEpoch: 19,
ESDTEnableEpoch: 20,
GovernanceEnableEpoch: 21,
DelegationManagerEnableEpoch: 22,
DelegationSmartContractEnableEpoch: 23,
CorrectLastUnjailedEnableEpoch: 24,
BalanceWaitingListsEnableEpoch: 14,
ReturnDataToLastTransferEnableEpoch: 15,
SenderInOutTransferEnableEpoch: 16,
RelayedTransactionsV2EnableEpoch: 25,
UnbondTokensV2EnableEpoch: 26,
SaveJailedAlwaysEnableEpoch: 27,
ValidatorToDelegationEnableEpoch: 29,
ReDelegateBelowMinCheckEnableEpoch: 28,
WaitingListFixEnableEpoch: 30,
IncrementSCRNonceInMultiTransferEnableEpoch: 31,
ESDTMultiTransferEnableEpoch: 32,
GlobalMintBurnDisableEpoch: 33,
ESDTTransferRoleEnableEpoch: 34,
BuiltInFunctionOnMetaEnableEpoch: 35,
ComputeRewardCheckpointEnableEpoch: 36,
SCRSizeInvariantCheckEnableEpoch: 37,
BackwardCompSaveKeyValueEnableEpoch: 38,
ESDTNFTCreateOnMultiShardEnableEpoch: 39,
MetaESDTSetEnableEpoch: 40,
AddTokensToDelegationEnableEpoch: 41,
MultiESDTTransferFixOnCallBackOnEnableEpoch: 42,
OptimizeGasUsedInCrossMiniBlocksEnableEpoch: 43,
FixOOGReturnCodeEnableEpoch: 44,
RemoveNonUpdatedStorageEnableEpoch: 45,
OptimizeNFTStoreEnableEpoch: 46,
CreateNFTThroughExecByCallerEnableEpoch: 47,
IsPayableBySCEnableEpoch: 48,
CleanUpInformativeSCRsEnableEpoch: 49,
StorageAPICostOptimizationEnableEpoch: 50,
TransformToMultiShardCreateEnableEpoch: 51,
ESDTRegisterAndSetAllRolesEnableEpoch: 52,
FailExecutionOnEveryAPIErrorEnableEpoch: 53,
ManagedCryptoAPIsEnableEpoch: 54,
ESDTMetadataContinuousCleanupEnableEpoch: 55,
FixAsyncCallBackArgsListEnableEpoch: 56,
FixOldTokenLiquidityEnableEpoch: 57,
SetSenderInEeiOutputTransferEnableEpoch: 58,
MaxBlockchainHookCountersEnableEpoch: 59,
WipeSingleNFTLiquidityDecreaseEnableEpoch: 60,
AlwaysSaveTokenMetaDataEnableEpoch: 61,
RuntimeCodeSizeFixEnableEpoch: 62,
RuntimeMemStoreLimitEnableEpoch: 63,
SetGuardianEnableEpoch: 64,
RelayedNonceFixEnableEpoch: 65,
DeterministicSortOnValidatorsInfoEnableEpoch: 66,
BLSMultiSignerEnableEpoch: []MultiSignerConfig{
{
EnableEpoch: 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,8 @@
0a60556bc447ef27d409f58c0aa6ee3c84e2e00040b1e98845cb1c1fa2e2be1f80033e8a2beb0c22bbb5d5d5cb8ae63bc5194dba93083302b16b9a4d132963f2f7948eeaa4274ba45939a1f82e6ccd3c75aa34c54c90f76676bd6266e19d5751490c10011a08656c696769626c6520cf012880ade204
0a6055a73c70605738ebe00dad86ee629c6045520e7ec315ea824289f7a4934fb2bd7b495575d4fcebe60f898f5db4667f16a17b946f87c2fcd1aa5f0ef1a688e52abfda22c832586f823df9ad12779e4629561ff7be15951c4aca0ef1f245ce6d9510011a0777616974696e6720a1012880ade204
0a6055d4010354af276bf58936a1124868216e706558c798737dd9a214060e773e79a08dc4ebee984e3e1ce0e0a66e7e7118c6c2dfee536e7a22cbe325bea7d82b8b97995d873657b75c662f1f5abcb5a3089ce667b8bf95be151bdd47e84da2091310011a08656c696769626c6520512880ade204
0a60567ce6bf4222365af2d0fbae2685aac8e84eb4594e67d03a3b4a635e9d03f7496469862f85e3cff5f69cea89d406800923a90a9c095742644ad7a13d64da3e2a54c0e3cd0b26a40ca6d9090989e6c74d139905d70f249724690ceb8cbae3e18f10011a036e65772095eacf0328c196b102
0a60567ce6bf4222365af2d0fbae2685aac8e84eb4594e67d03a3b4a635e9d03f7496469862f85e3cff5f69cea89d406800923a90a9c095742644ad7a13d64da3e2a54c0e3cd0b26a40ca6d9090989e6c74d139905d70f249724690ceb8cbae3e18f10011a08696e61637469766520b4ccca0328c196b102
0a60567ce6bf4222365af2d0fbae2685aac8e84eb4594e67d03a3b4a635e9d03f7496469862f85e3cff5f69cea89d406800923a90a9c095742644ad7a13d64da3e2a54c0e3cd0b26a40ca6d9090989e6c74d139905d70f249724690ceb8cbae3e18f10011a036e65772095eacf0328c196b102
0a605762674f75217679132507a4fbd8622b52b8fd6b35be4d9bcccdae44286a7a4d33d31f558f33a2b49735a9c29998521056736a3841faa50ca1b12107ec033e7c1f5475db75b52cda2479e49144e6903cee897b8ee0145fa3bee9c5d92b46db9910011a0777616974696e6720f9012880ade204
0a6057e0ca9f73fea200dba2a503a7a1e5fad55169c0664ee235f168ca4a88f342bb94f04d9196ec2d8bb708a481dfdf6c11a5a1cce6adc884d65cdf8a0f39ab0b3a1a7e678ecf6132d48a885a2dd53b9b48137837296869715db1abfb6938306a0810011a0777616974696e672093022880ade204
0a60586c6642e1f5350d790c9b0067a4fd0f8a49e3c929143fb820634fb412a22bc5100a425bfb7ee269fa047466493cde0a048068ce11680b072b1b1463c65ac4e3ba82615a348cd9d490cc28b0c9ca7832f40a48af7fc0f75139d735b694d7329810011a0777616974696e67202b2880ade204
Expand Down Expand Up @@ -810,4 +810,4 @@
0a60fef99e92a9c82cd45923d245c4300eed1f5148098924bda861e1007a8be66ff3b61a56de3fb6c9bc7fef56325d1ad1133bbe2000b8dcf9da8c02ddcc3d7c20c178e232aa2e0b78487f5101a452be3325532170bb23dfa6de65302c61931ac29210011a0777616974696e6720e6012880ade204
0a60ff21d036559227e887b7ca63b618135cc96ff3bdbf2ac2975aec59900116ac3b9dbb5824fed24652314a602083eda703ed6de3be561cbc8f696d5600419355a3e7361098757c2303a2d2db685630d3d7de2788842a7f8277481af8a4e246b81610011a08656c696769626c6520c5022880ade204
0a60ff5b4afee6e69d6b6316ea04f29974f218a4e51ab3b18ca06da00626fd46586e389c22770ccf7f5af19cdc72936c330f9151bc15712f023c70bbf1d1ac69ff9606342e8b8381a163d42614f4e0430f0d87fd899c79ff1d502890f9dc0defef8210011a0777616974696e6720d4012880ade204
0a60ff84deb3b60be99d543459c9d69aaf59f9a32a4a5f377a8e2c78a8bbf1c7ab14b0f0613c523048221d69ad8a10233d0c4cc6d44b35a65abacdba7e307f1d336cb7009bce8035dbea91ed75d7932e4a41b920a1e534e55e2b345eb95927b5229410011a08656c696769626c6520b0012880ade204
0a60ff84deb3b60be99d543459c9d69aaf59f9a32a4a5f377a8e2c78a8bbf1c7ab14b0f0613c523048221d69ad8a10233d0c4cc6d44b35a65abacdba7e307f1d336cb7009bce8035dbea91ed75d7932e4a41b920a1e534e55e2b345eb95927b5229410011a08656c696769626c6520b0012880ade204
Loading

0 comments on commit aee68cc

Please sign in to comment.