A MultiSig in Move

Hi guys,

I was thinking about implementing a MultiSig on top of Libra, something similar to the Gnosis one.

For example, I can imagine building a Move module that anyone can open a MultiSig by calling a function. It will then save a resource in the opener account that will contain the signatories, the required confirmations for a TX, and a counter of TXs.

In addition, it will contain an array of transactions, each will have the TX details (receiver, amount), the number of confirmations and the signatories that confirmed it already.

But the fact that there is no notion of a contract as an entity similar to how EVM works makes things much more difficult. For example, I will have to hardcode each type of asset that the MultiSig is managing up front. In addition, even for supported tokens, one cannot simply deposit them into the MultiSig, as it has no address, rather, the MultiSig will need to have a function for depositing them.

My main questions are:

  1. Does my design fit the Move spirit? Does it make sense?
  2. Am I correct regarding the limitations it has?

I can also imagine an option where the module is dedicated for one multi-sig and not many. And thus the initialization can happen only once. And the signatories own a resource that lets them confirm TXs.

4 Likes

hello there, we implemented one Introducing the first non-custodial keyless wallet for Libra testnet

3 Likes

I’m not on the Libra team, but what it looks to me the answer is “not yet” since you can’t yet submit third-party modules to Libra (and because the transaction format only has the one signature). If you could add third-party modules, then the trick would be to create a MultiSig module that stores acceptable addresses in an account. Then you’d send additional signed transactions that updates that account via your module. Say it’s M-N Multisig, there’d be N addresses in that account (and N minus M). The module would remove an address from the list any time it matches the sender address and once it’s down to N minus M signatures, the module would complete the payment.

Once Libra adds support for multiple signatures in a single transaction, you’d be able to create a simpler MultiSig module that executes that same operation but all at once.

1 Like

I think this news is related to the topic

looks like this example: