Skip to content

Create child fee accounts on FlowFees to enable concurrent fee collection #460

Description

@janezpodhostnik

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions