As the title says, I want to make a smart contract one of the keyholders to a multisig wallet so that transactions from the wallet can be approved if they meet certain conditions. I think this should be possible but I'm not sure which method of the basic multisig wallet my contract should be calling. Also how can my contract know when it's appropriate to call the method or does the multisig wallet itself actually call the individual keyholders' accounts and I just need to specify a response?

3 Answers 3


If I understand your use case correctly, you wish to make a contract authorize some transaction by participating in a multisig wallet. If this transaction is on the blockchain, this feature is inherent to Ethereum. You can setup a transaction contract that will not only seek approval of users, but also other participant contracts.

These participant contracts can be programmed in Solidity to approve an instance of said transaction contract after satisfying certain conditions.

I hope that answers your question.


In answer to your second question, a contract can not initiate a transaction, therefore, it will never be able to "know when it's appropriate" to do anything.

The contract must be prompted by a transaction sent from an external account (a regular user account) or some sort of Oracle such as Oraclize.it.

Also, just to note, if the contract is able to sign transactions, this means that its private key must be stored openly on the blockchain (or the key is sent to the contract each time it needs to sign something). In either case, everyone will be able to see the private key, and therefore anyone will be able to sign transactions from that account. It's not clear in your question that you recognize this.

  • Ah okay. But could the contract only have to approve the transaction, not actually sign it? Jun 6, 2017 at 22:09
  • Couldn't you just modify the multi-sig to respond properly to the conditions you mention in the original post? Why create a second contract? Why not just build the conditions into the multi-sig itself? Sorry--I'm just a little bit confused. Jun 6, 2017 at 22:18

Yesterday I shipped universal Solidity smart contract for multi-signature: https://github.com/bitclave/Multiownable

Using it yesterday you will be able easily add multi-signatire functionality to any smart contract method. Just subclass from Multiownable contract and add onlyManyOwners modifier to methods you want to protect. This is an example of simplest multisig wallet you may imagine:

contract SimplestMultiWallet is Multiownable {
    function transferTo(address to, uint256 amount) onlyManyOwners {

Technically you will be able to transferOwnership to array of wallets and methods marked with onlyManyOwners modifier will be executed only when latest of the owners will call this method with the same arguments as all other owners.

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.