The Flow service account contract and the Flow staking contract, two of the Flow core contracts, are deployed to two different accounts - the service account and the staking account, respectively on all three Flow networks - Testnet, Mainnet and Sandboxnet. This has been done to maintain a clear separation of concerns - all critical elements required for the proper functioning of the chain are under the administration of the service account, while all staking-related elements are under the staking account.
The staking account, however, also owns resources which are required for the continuous operation of the chain, namely:
- The Epoch Heartbeat
- The Epoch Admin
- The Staking Admin
- The FlowClusterQC Admin and FlowDKG Admin
- The newly introduced NodeVersion Heartbeat (while this resource is defined in the service account, the staking account is its authorizer).
For conceptual clarity, we plan to move these resources to the service account, so that all system resources are consolidated on one account.
In order to minimize the risk of disruption, we will implement this change in three steps:
- Modify the system chunk transaction to load Heartbeat resources from either the staking or service account.
- Move the resources.
- Revert the system chunk transaction fallback: load Heartbeat resources only from the service account.
On Mainnet, these changes require approval and transaction signatures from the service account committee to update the contracts on chain.
Along with this, we plan to move the reset_epoch function from the heartbeat resource to the admin resource in the Flow Epoch contract. This is to separate actions manually performed by the service account committee (Admin) from actions automatically performed by the system chunk (Heartbeat).
These changes will be implemented in the coming weeks before the next Mainnet spork and will not have any user impact.