Skip to content

Add a convenient way to handle group accounts

Our runtimes already include the Substrate pallet-multisig; this pallet allows you to create an account owned by a group, but the group composition and threshold are immutable.

We can combine pallet-multisig with the proxy pallet (also already in our runtimes) to allow changing the composition of a group while keeping the same public address for the group account:

The idea is to define the multisig account as a proxy that acts on behalf of a fixed “anchor” address. Then, when the group changes, we simply update the proxy. We can do this with “pure” proxies, but there are several downsides:

  • It’s not possible to know the proxy’s public address before its on-chain creation.
  • If the group threshold ≥ 2, you can’t create the pure proxy directly: the creator must submit a proposal and coordinate with the other members via the multisig to instantiate the proxy.
  • You can’t migrate an existing account into a group account.
  • pallet-multisig events don’t list group members (only the multisig hash), so indexers can’t easily determine who’s in the group.
  • Overall DX is cumbersome and error-prone.

We can add some calls in our runtime to fix all these downsides and expose an API that is more convenient to use, and we don’t need to add any new storage for that. Under the hood, our calls will verify that the origin is a multisig hash and create/remove proxies accordingly.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information