2

Calling the multisig extrinsics requires to pass it additional data. Every cosignatory validating the multisig transaction needs to pass the threshold and otherSignatories, the block number of the first approval and its index in the block, and the call hash. (see here)

I created a multisig account in the polkadotjs app, and initiated a transaction. I then watched that multisig on https://multix.chainsafe.io, and it complained that No Call data found on-chain. Use Multix to initiate multisig transactions and avoid this annoyance..

Is there a way to handle multisig initiation to final approval with only on-chain data? How can the call data be stored on-chain? Why doesn't polkadotjs store the call data on-chain?

1 Answer 1

2

The Polkadot multisig is designed to be "stateless", which means it has many different behaviors when compared to standard multisigs like Gnosis on Ethereum.

The Polkadot multisig is ultimately designed to minimize the amount of on-chain state needed, since this is one of the major long term costs and scaling factors for blockchains.

When you are doing the multisig approval process, by default, Polkadot JS only records the hash of the call data on chain, and waits for all approvals before requiring the final call data to be posted to the chain.

With this design in mind, let's answer your questions:

Is there a way to handle multisig initiation to final approval with only on-chain data?

No.

How can the call data be stored on-chain?

You can place arbitrary data on Polkadot using the Preimage Pallet, but this will not directly help the multisig execute. You will still require logic for the user to look up this call, and provide it back to the multisig pallet through the final approval transaction.

Why doesn't polkadotjs store the call data on-chain?

Polkadot JS is also stateless, and the multisig pallet is designed explicitly to keep the call data off-chain.


This is why other end to end multisig solutions like Multix exist.

I also want to note that if you are building your own system, you do not need to strictly use Polkadot's multisig. You can develop your own multisig pallet, there are examples of that, or use traditional smart contract platforms on Polkadot to provide 1:1 support to the multisigs you are used to in Ethereum.


The main thing I want you to take away from this is that all design decisions have tradeoffs.

I am sure you are looking at this response and thinking "wow the polkadot multisig system really sucks, I can't do what I want with it", and from your perspective you are probably 100% correct.

But as I mentioned, by keeping the multisig stateless and keeping data off-chain, we reduce a lot of long term debt to the chain, and make a more scalable and resilient platform.

With the combination of off chain layers, we can ultimately provide exactly the same experience to end users (as Multix and others have done), but as an application developer trying to build on top of the Polkadot bare metal, your abilities will be more limited as a result.

2
  • Would I be right to say that decentralisation has been sacrificed so less data is stored on-chain?
    – ytresza
    Commented May 16 at 6:30
  • 1
    I think it depends on what you mean by decentralization. It wouldn't be sacrificed in the context of how the term is used in blockchain. But yeah, the blockchain itself is not backing up everything for the user. But really the blockchain should only have data needed for coming to consensus, and nothing more.
    – Shawn Tabrizi
    Commented May 16 at 15:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.