Multisig Vault proposal


For now we need a multi-signature Vault but the concept of multi-sig will be needed in other contexts as well.

For this reason, the multi-sig component should be decoupled from the vault implementation as the vault is just one of its possible usages.

The design of the Vault should be done such that most of the implementation is shared between the single-sig and the multi-sig implementation. 

NOTE: I'm not up to date with the design of the deployerId / rootAuth so that part might not fit with the current work but it can certainly be adapted without too much effort.



create : (owners : List[(PublicKey, Int)], requiredWeight : Int) → Vault

transfer : (deployerId : DeployerId, to : RevAddress, amount : Int)


create : (owners : List[(PublicKey, Int)], requiredWeight : Int, whenSigned : (signers : List[PublicKey], message : List[Any]) → Unit) → Signer

sign : (this : Signer, (message : List[Any]) → SigningSession


create : (owners : List[(PublicKey, Int)], requiredWeight : Int, deployerId : DeployerId, message : List[Any]) → SigningSession

sign : (deployerId : DeployerId, message : List[Any]) → Unit