• © Goverland Inc. 2026
  • v1.0.5
  • Privacy Policy
  • Terms of Use
BalancerBalancerby0x9f74662aD05840Ba35d111930501c617920dD68eveballer.eth

[BIP-216] Add permissions for Batch Relayer V5 (second attempt)

Voting ended almost 3 years agoSucceeded

Payload PR - BIP-216

Background on repeat governance

BIP-214 was approved by governance, but upon review, which occurred after the snapshot, was found to specify the old V4 version of the relayer in both the BIP text and the payloads. The problem resulted the fact that there are many batch relayers with the same contract name. The script used found the most recent address of a given contract by looking through a reverse lookup table in the monorepo that was not up-to-date. The BIP-214 text specified the BalancerRelayer as the target to receive permissions, but did not include details about which deployment was listed.

The script that generates these BIPs has been updated to allow for targets to be specified as task/deployment (specified a specific version) and to print that information back out in the tables. The revised script was used to regenerate the BIP output and payloads defined below.

Background on the change

A new version of the primary relayer, BatchRelayer 5.0 deployed by task 20230314-batch-relayer-v5. Deployment of the fifth BalancerRelayer using BatchRelayerLibrary, for combining multiple operations (swaps, joins, etc.) in a single transaction.

As described in the payload json, the authorizer will be called to grant the roles as described.

The change can be reviewed by the below by comparing the results_deployment_sorted.md file to the source of truth, which should match the order found in the source of truth for actionIds on the balancer-v2-monorepo.

Target addresses can be verified by checking the outputs of the v5 Vault deployments here

For record, the contents of results_address_sorted.md are printed here:

deployment chain function role target target_address
20210418-vault arbitrum batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256) 0x1282ab709b2b70070f829c46bc36f76b32ad4989fecb2fcb09a1b3ce00bbfc30 20230314-batch-relayer-v5/BalancerRelayer 0x598ce0f1ab64B27256759ef99d883EE51138b9bd
20210418-vault arbitrum exitPool(bytes32,address,address,(address[],uint256[],bytes,bool)) 0xc149e88b59429ded7f601ab52ecd62331cac006ae07c16543439ed138dcb8d34 20230314-batch-relayer-v5/BalancerRelayer 0x598ce0f1ab64B27256759ef99d883EE51138b9bd
20210418-vault arbitrum joinPool(bytes32,address,address,(address[],uint256[],bytes,bool)) 0x78ad1b68d148c070372f8643c4648efbb63c6a8a338f3c24714868e791367653 20230314-batch-relayer-v5/BalancerRelayer 0x598ce0f1ab64B27256759ef99d883EE51138b9bd
20210418-vault arbitrum manageUserBalance((uint8,address,uint256,address,address)[]) 0xeba777d811cd36c06d540d7ff2ed18ed042fd67bbf7c9afcf88c818c7ee6b498 20230314-batch-relayer-v5/BalancerRelayer 0x598ce0f1ab64B27256759ef99d883EE51138b9bd
20210418-vault arbitrum setRelayerApproval(address,address,bool) 0x0014a06d322ff07fcc02b12f93eb77bb76e28cdee4fc0670b9dec98d24bbfec8 20230314-batch-relayer-v5/BalancerRelayer 0x598ce0f1ab64B27256759ef99d883EE51138b9bd
20210418-vault arbitrum swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256) 0x7b8a1d293670124924a0f532213753b89db10bde737249d4540e9a03657d1aff 20230314-batch-relayer-v5/BalancerRelayer 0x598ce0f1ab64B27256759ef99d883EE51138b9bd
20210418-vault gnosis batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256) 0x1282ab709b2b70070f829c46bc36f76b32ad4989fecb2fcb09a1b3ce00bbfc30 20230314-batch-relayer-v5/BalancerRelayer 0x3536fD480CA495Ac91E698A703248A8915c137a3
20210418-vault gnosis exitPool(bytes32,address,address,(address[],uint256[],bytes,bool)) 0xc149e88b59429ded7f601ab52ecd62331cac006ae07c16543439ed138dcb8d34 20230314-batch-relayer-v5/BalancerRelayer 0x3536fD480CA495Ac91E698A703248A8915c137a3
20210418-vault gnosis joinPool(bytes32,address,address,(address[],uint256[],bytes,bool)) 0x78ad1b68d148c070372f8643c4648efbb63c6a8a338f3c24714868e791367653 20230314-batch-relayer-v5/BalancerRelayer 0x3536fD480CA495Ac91E698A703248A8915c137a3
20210418-vault gnosis manageUserBalance((uint8,address,uint256,address,address)[]) 0xeba777d811cd36c06d540d7ff2ed18ed042fd67bbf7c9afcf88c818c7ee6b498 20230314-batch-relayer-v5/BalancerRelayer 0x3536fD480CA495Ac91E698A703248A8915c137a3
20210418-vault gnosis setRelayerApproval(address,address,bool) 0x0014a06d322ff07fcc02b12f93eb77bb76e28cdee4fc0670b9dec98d24bbfec8 20230314-batch-relayer-v5/BalancerRelayer 0x3536fD480CA495Ac91E698A703248A8915c137a3
20210418-vault gnosis swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256) 0x7b8a1d293670124924a0f532213753b89db10bde737249d4540e9a03657d1aff 20230314-batch-relayer-v5/BalancerRelayer 0x3536fD480CA495Ac91E698A703248A8915c137a3
20210418-vault mainnet batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256) 0x1282ab709b2b70070f829c46bc36f76b32ad4989fecb2fcb09a1b3ce00bbfc30 20230314-batch-relayer-v5/BalancerRelayer 0xfeA793Aa415061C483D2390414275AD314B3F621
20210418-vault mainnet exitPool(bytes32,address,address,(address[],uint256[],bytes,bool)) 0xc149e88b59429ded7f601ab52ecd62331cac006ae07c16543439ed138dcb8d34 20230314-batch-relayer-v5/BalancerRelayer 0xfeA793Aa415061C483D2390414275AD314B3F621
20210418-vault mainnet joinPool(bytes32,address,address,(address[],uint256[],bytes,bool)) 0x78ad1b68d148c070372f8643c4648efbb63c6a8a338f3c24714868e791367653 20230314-batch-relayer-v5/BalancerRelayer 0xfeA793Aa415061C483D2390414275AD314B3F621
20210418-vault mainnet manageUserBalance((uint8,address,uint256,address,address)[]) 0xeba777d811cd36c06d540d7ff2ed18ed042fd67bbf7c9afcf88c818c7ee6b498 20230314-batch-relayer-v5/BalancerRelayer 0xfeA793Aa415061C483D2390414275AD314B3F621
20210418-vault mainnet setRelayerApproval(address,address,bool) 0x0014a06d322ff07fcc02b12f93eb77bb76e28cdee4fc0670b9dec98d24bbfec8 20230314-batch-relayer-v5/BalancerRelayer 0xfeA793Aa415061C483D2390414275AD314B3F621
20210418-vault mainnet swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256) 0x7b8a1d293670124924a0f532213753b89db10bde737249d4540e9a03657d1aff 20230314-batch-relayer-v5/BalancerRelayer 0xfeA793Aa415061C483D2390414275AD314B3F621
20210418-vault optimism batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256) 0x1282ab709b2b70070f829c46bc36f76b32ad4989fecb2fcb09a1b3ce00bbfc30 20230314-batch-relayer-v5/BalancerRelayer 0x03F1ab8b19bcE21EB06C364aEc9e40322572a1e9
20210418-vault optimism exitPool(bytes32,address,address,(address[],uint256[],bytes,bool)) 0xc149e88b59429ded7f601ab52ecd62331cac006ae07c16543439ed138dcb8d34 20230314-batch-relayer-v5/BalancerRelayer 0x03F1ab8b19bcE21EB06C364aEc9e40322572a1e9
20210418-vault optimism joinPool(bytes32,address,address,(address[],uint256[],bytes,bool)) 0x78ad1b68d148c070372f8643c4648efbb63c6a8a338f3c24714868e791367653 20230314-batch-relayer-v5/BalancerRelayer 0x03F1ab8b19bcE21EB06C364aEc9e40322572a1e9
20210418-vault optimism manageUserBalance((uint8,address,uint256,address,address)[]) 0xeba777d811cd36c06d540d7ff2ed18ed042fd67bbf7c9afcf88c818c7ee6b498 20230314-batch-relayer-v5/BalancerRelayer 0x03F1ab8b19bcE21EB06C364aEc9e40322572a1e9
20210418-vault optimism setRelayerApproval(address,address,bool) 0x0014a06d322ff07fcc02b12f93eb77bb76e28cdee4fc0670b9dec98d24bbfec8 20230314-batch-relayer-v5/BalancerRelayer 0x03F1ab8b19bcE21EB06C364aEc9e40322572a1e9
20210418-vault optimism swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256) 0x7b8a1d293670124924a0f532213753b89db10bde737249d4540e9a03657d1aff 20230314-batch-relayer-v5/BalancerRelayer 0x03F1ab8b19bcE21EB06C364aEc9e40322572a1e9
20210418-vault polygon batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256) 0x1282ab709b2b70070f829c46bc36f76b32ad4989fecb2fcb09a1b3ce00bbfc30 20230314-batch-relayer-v5/BalancerRelayer 0xd18d5D377eb23362e54Fa496597d7E962d56C554
20210418-vault polygon exitPool(bytes32,address,address,(address[],uint256[],bytes,bool)) 0xc149e88b59429ded7f601ab52ecd62331cac006ae07c16543439ed138dcb8d34 20230314-batch-relayer-v5/BalancerRelayer 0xd18d5D377eb23362e54Fa496597d7E962d56C554
20210418-vault polygon joinPool(bytes32,address,address,(address[],uint256[],bytes,bool)) 0x78ad1b68d148c070372f8643c4648efbb63c6a8a338f3c24714868e791367653 20230314-batch-relayer-v5/BalancerRelayer 0xd18d5D377eb23362e54Fa496597d7E962d56C554
20210418-vault polygon manageUserBalance((uint8,address,uint256,address,address)[]) 0xeba777d811cd36c06d540d7ff2ed18ed042fd67bbf7c9afcf88c818c7ee6b498 20230314-batch-relayer-v5/BalancerRelayer 0xd18d5D377eb23362e54Fa496597d7E962d56C554
20210418-vault polygon setRelayerApproval(address,address,bool) 0x0014a06d322ff07fcc02b12f93eb77bb76e28cdee4fc0670b9dec98d24bbfec8 20230314-batch-relayer-v5/BalancerRelayer 0xd18d5D377eb23362e54Fa496597d7E962d56C554
20210418-vault polygon swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256) 0x7b8a1d293670124924a0f532213753b89db10bde737249d4540e9a03657d1aff 20230314-batch-relayer-v5/BalancerRelayer 0xd18d5D377eb23362e54Fa496597d7E962d56C554

Risk Assessment

This BIP is routine operation for provisioning a contract deployment/Batch Relayer. Users must also approve BatchRelayers before they have access. More details can be found in the Special Vault Permissions Context doc.

References

Directory of Addresses used by script which generated the table and multsig payloads

The full proposal with the English specification can be read on the forum. The snapshot proposal has been shortened to adhere to the 14'400 character limit

Off-Chain Vote

Yes, let's do it
4.28M veBAL100%
No, this is not the way
0.11 veBAL0%
Abstain
0.56 veBAL0%
Quorum:214%
Download mobile app to vote

Discussion

Balancer [BIP-216] Add permissions for Batch Relayer V5 (second attempt)

Timeline

Mar 22, 2023Proposal created
Mar 23, 2023Proposal vote started
Mar 27, 2023Proposal vote ended
Feb 16, 2026Proposal updated