2

What are the different multisig contracts are currently supported by tezos-client and which ones are planned to be supported? What is the difference between them and their respective hashes? Which ones have been formally verified?

1

Here is the detailed history of the multisig contract supported in tezos-client:

Basic multisig, with replay attack

Hash 475e37a6386d0b85890eb446db1faad67f85fc814724ad07473cac8c0a124b31.

The first basic multisig supported by tezos-client.

This version supports:

  • single transfers
  • updating the delegate
  • updating keys and threshold All transfers of funds to the contract require a multisigned-authentication.

This version should not be used anymore because it is subject to a small replay attack: when the test chain is forked both instances have the same address and counter so whatever happens on the test chain can be replayed on the main chain.

Patched basic multisig

Hash 36cf0b376c2d0e21f0ed42b2974fedaafdcafb9b7f8eb9254ef811b37cb46d94.

To fix the issue in the previous version of Basic multisig, the CHAIN_ID Michelson instruction was added in Babylon and the contract was rewritten at Babylon activation (by rewriting the chain history: this is called stitching) with this new instruction.

This version has been verified using Mi-Cho-Coq here.

Patched basic multisig, new DIIP macro definition

Hash a59ea55f38e1bcdde29e72a7f3608faf4314165d07083383efadfcf023e4c1e2

If you originate the Patched basic multisig now you will get a different hash because the DIIP {code} macro has changed (from DIP {DIP {code}} to DIP 2 {code}).

Forthcoming: Generic multisig

Work is ongoing (in !1857) to add support in tezos-client for the generic multisig contract.

In this new version:

  • transfers can be batched
  • transfers can contain parameters
  • sending funds to the contract does not require multi-signed authentication anymore

This version has been verified using Mi-Cho-Coq here.

When released, the only reason to prefer the basic multisig contract over the generic one is that it is currently the only one supported by tezos-client. Once the generic version is fully supported by the client, I don't think it will make sense to use the client to originate new instances of the basic contract so this functionality will be dropped. Interacting with instances of previous versions that are already on the chain should however continue to work.

Acknowledgements

This answer is largely sourced from Raphaël's comment here.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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