Xone Mainnet Hard Fork Upgrade Announcement

Dear node operators and developer community:
Xone will perform a hard fork upgrade at the designated block height of the main network to formally introduce the new Epochs module. This module is based on Evmos epochs and has more flexible time cycle management capabilities, laying the foundation for future incentives, governance and scheduled task mechanisms.
This upgrade involves changes to the state machine and storage structure, requiring all nodes to complete restart and binary replacement before the previous block at the specified block height.
⛓ Upgrade Overview
Upgrade Method: Hard Fork
New Modules: Epochs (introducing modules StoreKey, lifecycle hooks, Genesis logic)
Target Block Height: # 6397023
Execution Time: 2025-05-28 11:00:00 (UTC+0)
Operation Requirements: All mainnet nodes must complete the new version deployment and restart before Height # 6397022
🔍 Technical Change Notes
1. StoreKey Registration and IAVL State Consistency
-
Each module needs to register its storage prefix (StoreKey) through
store.NewKVStoreKey
at startup. -
Dynamically adding StoreKey will destroy the structure and hash certainty of the IAVL state tree, resulting in consensus forks.
-
Therefore, the node must be restarted before height
# 6397022
to ensure that the new binary correctly loads the module's storage structure.
2. Lifecycle Hooks (BeginBlocker / EndBlocker)
-
The Epochs module triggers corresponding logic processing in each block and needs to be registered in
SetOrderBeginBlockers()
. -
Nodes that have not been restarted will miss the hook call, resulting in state differences and unable to participate in consensus.
3. InitGenesis Execution and Module Initialization
-
New modules need to register the initial state logic through
SetOrderInitGenesis()
. -
When upgrading, the
InitGenesis
initialization state will be executed before the block#6397023
is started. Non-upgraded nodes will crash due to missing data.
🧩 Upgrade mechanism implementation
We use the Cosmos SDK standard UpgradeStoreLoader
and version control logic to implement secure on-chain module introduction:
app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(
ForkAddEpochsMainNetHeight,
&storetypes.StoreUpgrades{
Added: []string{epochsmoduletypes.StoreKey},
},
))
-
Fork height is dynamically injected after being determined by chain ID;
-
StoreKey registration and module status initialization are completed when the upgrade block is initialized;
-
Avoid writing in inconsistent states.
🧑💻 Node Operation Guide
-
Confirm the upgrade height
# 6397023
; -
Complete the node binary replacement and restart before the height
# 6397022
; -
Use the new version of the Xone node program containing the Epochs module;
-
After restarting, the system will automatically initialize the state tree and operation logic of the new module.
🧠 Why can't modules be added dynamically?
-
The Cosmos SDK state machine requires that all node state changes are completely consistent;
-
StoreKey is directly associated with the state hash, and dynamic addition will destroy the hash consistency;
-
The lack of
BeginBlocker
,EndBlocker
andInitGenesis
logic will cause unpredictable operating behavior;
Therefore, restarting the binary and loading the module before upgrading is the best way to upgrade safely.
If you have any questions about the upgrade process, please go to our developer support channel for assistance.
Thank you❤️ every validator, developer and community member for your support and trust in the Xone network!
Xone Team
May 27, 2025
For any help or support, please contact us:
Support: [email protected]
Official: [email protected]
Business: [email protected]
News: Medium
Community: Telegram | Twitter | Discord | YouTube | Reddit | ChatMe | Github