[PAPI] Stateless Multisig Tool

Greetings!

I’d like to share a small tool I developed over the past few days. It’s a multisig tool built with PAPI that’s completely stateless: It doesn’t rely with any indexer, instead it uses on-chain data and URL parameters to provide the necessary off-chain information required for multisig calls.

dApp URL: https://multisig.usepapi.app/
Source Code: https://github.com/polkadot-api/multisig-tool

One of the main goals of this tool is to serve as an example of what multisigs actually are and how they were originally designed, as many people are often confused by the process of “creating a multisig account”.

Multisig accounts are deterministic: the account address depends only on the list of signatories and the “threshold” parameter (which is the number of signatories needed to approve a call). Thus, multisig accounts don’t need to be explicitly created, they can be used straight away.

User Journey

Wrapping a call with a multisig is complex, as it involves calculating the call hash, estimated weight and other parameters based on current state. This tool abstracts away that complexity. The flow to perform a call using this tool is as follows:

  1. Select the target chain
    Choose the network on which the call will be executed. The default ones use the light-client, but there’s also the possibility to provide a specific RPC URL.

  2. Select multisig
    Set the list of signatories and the threshold. These values deterministically generate the multisig address.

  3. Provide the call data
    Input the actual call to be executed. Currently, the tool only accepts call data as a hex string, which you can generate using any developer console.

  4. Generate call URL
    Once all parameters are set, the tool will generate a shareable URL. This URL can be sent to all members of the multisig group, allowing them to sign the call.

For example, I have prepared one call for westend, containing a simple remark for a multisig of Alice, Bob, Charlie and myself: https://multisig.usepapi.app/?chain=sm-westend&calldata=0x00073c48656c6c6f206d756c746973696721&signatories=5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY_5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty_5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y_5CA18eyorMR9XuKDs8uHMhvBbfdbbW5HaKWVyV2hWbM3eLo3&threshold=2

To perform this call, I would sign and submit it myself, then share the URL with Alice, Bob and Charlie so that one of them can sign them and get it executed (since I configured threshold 2).

This off-chain coordination process typically relies on an indexer, but this tool works differently. All necessary off-chain information is carried through the URL, allowing users to coordinate via any messaging platform.

Integration with other dApps

Since the tool operates entirely through URL parameters, it integrates with any other dApp that needs to send multisig calls. For example, I have updated our Polkadot Bounties dApp to generate URLs that can be signed through this multisig tool.

Disclaimer

This tool is primarily educational and serves as a tech demo. The UI is intentionally minimal, as it’s not meant to be a full-featured production app.

Also, it’s not intended to compete with existing tools like Multix, which I think it has a lot of value and utility that this multisig tool won’t be able to provide.

Closing thoughts

I hope you liked it and found it intersting! Please reach out with any questions, feedback or comments you might have.

11 Likes