---
# System prepended metadata

title: Allianceblock Multisig

---

# Allianceblock Multisig

### Storage

**signers** - array of addresses
**txDataHash** => signer => boolean
  - txDataHash is IPFS CID where txData is stored
  - if signer signed txData, set bool flag
    
### Methods

- addSigner 
    - can every signer add new signer? do we have single admin adding signers? do signers vote to add new signer?
- removeSigner
    - same as above
- initiateTx (txDataHash)
- approveTx (txDataHash, signature)
    - verify signature and set signer to true if valid
- executeTx (txData, signature) payable?!
    - we should be able to hash txData so we can get txDataHash- not sure if we can calculate ipfs cid in solidity :(
    - verify signature (to save gas, we can skip signature if threshold of 51% is met)




### Factory
We need to deploy factory so each party can create own Multisig contract
https://github.com/OpenZeppelin/gnosis-multisig/blob/master/contracts/MultiSigWalletFactory.sol


### Multisig storing entire tx
https://github.com/OpenZeppelin/gnosis-multisig/blob/master/contracts/MultiSigWallet.sol