Upgrade to the FlowIDTable Staking Contract coming to testnet and mainnet!

We want to let you know that there will be an upgrade to the FlowIDTableStaking smart contract that will impact users who try to register nodes and development teams who query certain information from the staking contract. This is an critical upgrade to improve performance of the smart contract and support the rollout of permissionless node operation.

This change will go into effect on the following dates:

  • CanaryNet: Wednesday, Jan 24th
  • Testnet: Thursday, Jan 25th

And assuming that the upgrades on canary and testnet go well,

  • Mainnet: Wednesday, Feb 1st (This date may be delayed)

The details for the exact transaction that will be run to upgrade are shown in this PR in the service account repo.

Why This Change is Happening

  • Refactoring certain functions to eliminate excessive gas usage and making the contract more efficient, such as utilizing more stored fields instead of derived fields.
  • Adding additional events
  • Adds fields to track candidate nodes and staking slots, which limit the number of nodes who can register and stake per epoch. This is an important upgrade that lays the foundation for staking auctions and permissionless node operation and will be used initially for permissionless access nodes. (FLIP)

Action Required

  • Users who register nodes are required to commit the minimum stake required for their node at the time of registration instead of by the end of the staking auction. This prevents a spam vector that currently exists on the contract. This means that if you are running any automated tests that deploy the contract and register nodes, or are planning on registering any nodes, including access nodes, in the future, you’ll need to provide the minimum number of FLOW required to stake the node when you call the addNodeRecord method.

  • The minimum stake required for Access nodes is being increased to 100 FLOW. (FLIP here)

  • Users who are querying the approved list with getApprovedList need to expect {String: Bool} return types instead of [String] as it was before.

There are more changes in addition to these breaking changes, so please go to the upgrade PR to find all key information regarding these upgrades.

If you have any questions regarding these changes, please ask in the PR comments, on Discord in the #staking channel, or reply here.