[BIP-207] Grant Balancer Maxis the authorisation to register protocolIds for LinearPools



Balancer’s boosted pools have seen great adoption over the recent year. In order to expand the Boosted Pools product to more protocols in addition to Aave, a Linear Pool registration process needs to be established so that LP’s and Swappers can experience great UX during the user flow.

One typical example of a boosted pool is the inclusion of a Balancer Pool Token (BPT) in the Form of a Linear Pool. Each Linear Pool is being deployed from the respective ProtocolLinearPoolFactory. One and the same LinearPoolFactory can however be used to create Linear Pools for multiple different protocols, if they are for example forks. During the creation of a Linear Pool, a protocolId parameter needs to be passed. Let’s look at some examples.

  • Create a (Aaave protocol) DAI-aDAI Linear Pool - deployed from the AaveLinearPoolFactory - pass 1 as an example protocolId parameter.
  • Create a (Aave protocol) USDC-aUSDC Linear Pool - deployed from the AaveLinearPoolFactory - pass 1 as an example protocolID parameter.
  • Create a (Sturdy protocol) Dai-sDAI Linear Pool - deployed from the AaveLinearPoolFactory - pass 13 as an example protocolId parameter.
  • Create a (Euler protocol) USDC-eUSDC Linear Pool - deployed from the EulerLinearPoolFactory - pass 5 as an example protocolId parameter.

Creating a boosted pool is permissionless. Therefore a process to register protocols is required to allow data-consumers to distinguish which pool belongs to which protocol, even if the pool has been created from the same factory.


Only authorized accounts can register a protocolId. Orb collective proposes to have this be handled by the Balancer Maxis.

In order for this to happen, a Balancer Maxis account needs to be granted the permission to call the function registerProtocolId(uint256,string) and renameProtocolId(uint256,string), which requires a previously granted authorisation. For this an interaction with the Authoriser contract is necessary. Once this has been done, the Balancer Maxis account can call registerProtocolId() and renameProtocolId on a global protocolID registry contract. This contract is deployed on the following networks:

chain address
mainnet 0xc3ccacE87f6d3A81724075ADcb5ddd85a8A1bB68
polygon 0xa523f47A933D5020b23629dDf689695AA94612Dc
arbitrum 0x5cF4928a3205728bd12830E1840F7DB85c62a4B9
optimism 0x9805dcfD25e6De36bad8fe9D3Fe2c9b44B764102
gnosis 0x6B5dA774890Db7B7b96C6f44e6a4b0F657399E2e
goerli 0x4fb47126Fa83A8734991E41B942Ac29A3266C968

The protocolIDs registered by the Balancer Maxis shall be unique.


  1. As per the linked payload, The DAO multisig in each network will initiate transactions with the Authorizer 0xA331D84eC860Bf466b4CdCcFb4aC09a1B43F3aE6 and call grantRole providing the address of LM Multisig on a given chain as the account, and the list of the ActionIDs per chain in the table below as roles.

  2. Once a new protocolId registration is required, the Balancer Maxis activate the LM Multisig to call registerProtocolId() on the ProtocolIdRegistry with a protocolId parameter and name. The protocolId and Name will be determined in collaboration with Orb and the original change requestor.

  3. A protocol looking to get its protocolId registered should engage with the Balancer Maxis or Orb Collective to determine what the appropriate protocolId and name to be registered is and action the on-chain change.

deployment chain function role target target_address
20230223-protocol-id-registry arbitrum registerProtocolId(uint256,string) 0xfed0eb6041728fc141bad70d04446ff0e9c8289a4f53cc060addc832c914b44f BalancerMaxis 0xc38c5f97B34E175FFd35407fc91a937300E33860
20230223-protocol-id-registry arbitrum renameProtocolId(uint256,string) 0xdc8681b640b547e98ee6f4d708df559b807526d976644c3aca24bc12c4f839c3 BalancerMaxis 0xc38c5f97B34E175FFd35407fc91a937300E33860
20230223-protocol-id-registry gnosis registerProtocolId(uint256,string) 0x0ed00e8835e2d2867dcdf863354062a805ff3fe1dabf44c0b68378c84c52616e BalancerMaxis 0x14969B55a675d13a1700F71A37511bc22D90155a
20230223-protocol-id-registry gnosis renameProtocolId(uint256,string) 0xfb760772d39ec169b9e7cd49bccd8858c635114d103dea72a7a694d094e8930c BalancerMaxis 0x14969B55a675d13a1700F71A37511bc22D90155a
20230223-protocol-id-registry mainnet registerProtocolId(uint256,string) 0x09a880cf3d54a213316bf4d92d60e72ba0ab61a639fce84378eefb9a63d6abd5 BalancerMaxis 0xc38c5f97B34E175FFd35407fc91a937300E33860
20230223-protocol-id-registry mainnet renameProtocolId(uint256,string) 0x4f3dee5b767f91b4faa9979f01808dd2490fde931a9eb355d5f8e0187826dade BalancerMaxis 0xc38c5f97B34E175FFd35407fc91a937300E33860
20230223-protocol-id-registry optimism registerProtocolId(uint256,string) 0x176a1b54ac0ba4509b1a508223c85146627bbe203b18b2beaa28b6992b3b021d BalancerMaxis 0x09Df1626110803C7b3b07085Ef1E053494155089
20230223-protocol-id-registry optimism renameProtocolId(uint256,string) 0x8630bf555a7a5baabd493fc2afc07b7baa6ea598eaea016acd0d926a6a6962fa BalancerMaxis 0x09Df1626110803C7b3b07085Ef1E053494155089
20230223-protocol-id-registry polygon registerProtocolId(uint256,string) 0x8f64bed4b4e908316d1d51abae6d2ca2c0f6ac132d219882be578341027b587b BalancerMaxis 0xc38c5f97B34E175FFd35407fc91a937300E33860
20230223-protocol-id-registry polygon renameProtocolId(uint256,string) 0x5dd6754fa5d8d56f6177c0265c35ab00ee57aa8a190975f1fba56a18796f0aeb BalancerMaxis 0xc38c5f97B34E175FFd35407fc91a937300E33860
20230223-protocol-id-registry goerli registerProtocolId(uint256,string) 0xdfc349d88d311b76af85f0bdc6a81be0e30485d488472e3813359f8e26fc1c95 BalancerMaxis 0x3bAbEBfD684506A5B47701ee231A53427Ad413Ef
20230223-protocol-id-registry goerli renameProtocolId(uint256,string) 0x397a10db2c15733cdb7c0fad6226786d83e216ed46c740257186765f4018bec5 BalancerMaxis 0x3bAbEBfD684506A5B47701ee231A53427Ad413Ef

Going forward, whenever a protocol seeks to get its protocolId registered, Orb Collective and Balancer Maxis will coordinate with the respective protocol to ensure a proper registration process. The Balancer Maxis are mandated by this BIP to make necessary on-chain changes to the registry at the instructions of the Orb collective without individual veBAL governance around each change.


All needed information is checked in and PR was created, vote is queued: https://snapshot.org/#/balancer.eth/proposal/0x1420cd61a3d5f4e24320dd209efd088e3ec5c4ca178957de972f16baa8b66702