In this blog, we will be deploying a multisignature wallet contract on a local ethereum private network setup.
We are setting up the MultiSigWallet contract made open source by the gnosis project and it can be accessed here.
After compiling the source code on Remix tool, we get the wallet contract's ABI details and deploy on our private network, passing in the required signature values to initiate a transaction as 2 and the following addresses as the initial owners - ["0x38ce8c9e1843ebb88edb952551963fda0d0fa0ba", "0x3f817bc1e7c52c341a6de942850f23f88fc476d6"].
On the private net, the contract is deployed at the address 0x7b6c5e7f9f7d2a81e400fb176ca95f781f6005e4, using this address, we load the contract instance, hereby referred as mwinstance.
To confirm the above details, we call the getOwners() method on the contract as -
mwinstance.getOwners(), which results in the following address  output - ["0x38ce8c9e1843ebb88edb952551963fda0d0fa0ba", "0x3f817bc1e7c52c341a6de942850f23f88fc476d6"]. You can check the required confirmations for executing the transaction through - mwinstance.requirements () which returns 2.
Now, the first thing needed to be done is to transfer some ethers to the contract's address, the contract accepts ether as it has a payable function of the form
and emits a Deposit event, when it receives some ETH.
event Deposit(address indexed sender, uint value);
To check the contract's ether balance, we can use the eth.getBalance method itself.
a) Let one of the owners submit a transaction using the method
submitTransaction function then calls the addTransaction method
This function updates the transaction mapping stored in the contract and also the transactionCount on the smart contract.
On the console, use the following call to initiate a transfer of Ether from the contract -
This initiates the submission of transaction, and the transaction gets one approval as it is sent by one of the owners.
b) Approving the transaction by the other owner
To fetch the transaction ID you want to confirm, get it as follows
mwinstance.transactions(6), in the above example the transaction id is 6, the result of this call is
["0x832652e6ca3393daf3f9318ffc3b5199e85fa440", 100000000000000000, "0x", false]
'false' indicates that the transaction has not been executed.
To execute it, the other owner makes a call like
Once both the calls are succesful, you can see via transactionreceipts the logs emitted by those transactions. You can also check the latest balances of the accounts and contract address.