Summary
Create child fee accounts on the mainnet FlowFees account (0xf919ee77447b7497) to enable concurrent fee collection. This is a prerequisite for enabling concurrent transaction execution on mainnet Execution Nodes.
Part of onflow/flow-go#7571; timing coordinated with the mainnet rollout plan (onflow/flow-okrs#212).
Update: the FlowFees contract upgrade (originally step 1 of this issue) is already deployed on mainnet — it went out on May 27, 2026 as part of the may-20 contract-upgrade batch (tx 1fe387d45a0ade030a4cee5043835a8dfb45e65037ff44ca33266dc68bb30cef, block 152872348). /storage/ChildFeeAccounts is still empty, so the contract currently runs in its single-vault fallback mode. Only the transaction below remains.
Background
With concurrent transaction execution, every transaction deposits its fee into the single FlowFees vault, making it a guaranteed write-conflict hotspot. onflow/flow-core-contracts#575 distributes fee deposits across N child accounts (getTransactionIndex() % N), removing the contention; getFeeBalance() and withdrawTokensFromFeeVault() aggregate across all of them. The contract falls back to the original single-vault behavior when no child accounts are configured.
The same setup has been live on testnet (3 child fee accounts) for months, alongside an execution node running with --computer-max-concurrency=3, with no issues.
Transaction — add child fee accounts
Notes
- No multisig ceremony is needed. The FlowFees account has a single key (index 0), and signs for itself — same flow as the May 27 contract upgrade and the testnet deployment. The signer configuration is in
transactions/update-contract/2026/may-20/flow-staking.json (accounts.flow-fees).
- After execution, verify fees start sharding across the child accounts and that
getFeeBalance() / withdrawTokensFromFeeVault() behave correctly (they are exercised during rewards payout).
- Safe to execute well before any EN configuration changes.
Summary
Create child fee accounts on the mainnet
FlowFeesaccount (0xf919ee77447b7497) to enable concurrent fee collection. This is a prerequisite for enabling concurrent transaction execution on mainnet Execution Nodes.Part of onflow/flow-go#7571; timing coordinated with the mainnet rollout plan (onflow/flow-okrs#212).
Update: the
FlowFeescontract upgrade (originally step 1 of this issue) is already deployed on mainnet — it went out on May 27, 2026 as part of the may-20 contract-upgrade batch (tx1fe387d45a0ade030a4cee5043835a8dfb45e65037ff44ca33266dc68bb30cef, block 152872348)./storage/ChildFeeAccountsis still empty, so the contract currently runs in its single-vault fallback mode. Only the transaction below remains.Background
With concurrent transaction execution, every transaction deposits its fee into the single
FlowFeesvault, making it a guaranteed write-conflict hotspot. onflow/flow-core-contracts#575 distributes fee deposits across N child accounts (getTransactionIndex() % N), removing the contention;getFeeBalance()andwithdrawTokensFromFeeVault()aggregate across all of them. The contract falls back to the original single-vault behavior when no child accounts are configured.The same setup has been live on testnet (3 child fee accounts) for months, alongside an execution node running with
--computer-max-concurrency=3, with no issues.Transaction — add child fee accounts
transactions/FlowServiceAccount/add_fee_child_accounts.cdc0xf919ee77447b7497)accounts: 5(testnet uses 3; the transaction appends to the existing list, so more can be added later if concurrency is raised further)Notes
transactions/update-contract/2026/may-20/flow-staking.json(accounts.flow-fees).getFeeBalance()/withdrawTokensFromFeeVault()behave correctly (they are exercised during rewards payout).