What is a Multi Signature Ethereum Wallet?
A multisig (short for “multisignature”) blockchain wallet is a type of cryptocurrency wallet that requires more than one private key to authorize a transaction. This means that in order to move funds from the wallet, multiple people (or devices) must sign off on the transaction.
Multisig wallets are often used in corporate or organizational settings to increase security and protect against unauthorized spending. They can also be used by individuals as an extra layer of security for their cryptocurrency holdings.
How Do Multi Signature Ethereum Wallets Work?
The specific details of how a multisig wallet works can vary depending on the specific implementation, but in general, the process goes something like this:
- The wallet is set up with multiple private keys, which can be held by different people or devices.
- When a user wants to make a transaction from the wallet, they create a transaction request and submit it to the wallet.
- The request is then sent to the other private key holders, who must each sign off on the transaction before it can be broadcast to the blockchain.
- Once the required number of private key holders have signed the transaction, it is broadcast to the network and the funds are transferred.
In some implementations of multisig wallets, the private keys are held on different devices or in different locations, so that they can’t all be accessed by a single person or entity. This helps to ensure that the funds can’t be stolen or spent without the consent of multiple parties.
Tools Used When Building a Multi Signature Ethereum Wallet
here are several tools and frameworks that can be used to build multisig Ethereum wallets:
- Truffle: A popular Ethereum development framework that includes a suite of tools for building, testing, and deploying smart contracts.
- Embark: An open-source framework for developing and deploying decentralized applications.
- MetaMask: A browser extension that allows users to interact with the Ethereum blockchain and manage their cryptocurrency wallets.
- Ledger Nano: A hardware wallet that supports multiple cryptocurrencies, including Ethereum, and allows users to manage their wallet using a combination of private keys stored on the device and a PIN code.
Examples of Multi Signature Ethereum Wallets
Here are a few examples of multi signature Ethereum wallets currently available on the market:
- Gnosis Safe: An open-source, multisig Ethereum wallet that allows users to securely manage their cryptocurrency holdings and interact with decentralized applications.
- BlockSafe: A multisig Ethereum wallet that allows users to store and manage their cryptocurrency holdings and interact with decentralized applications.
- Argent: A multisig Ethereum wallet that aims to make it easy for users to manage their cryptocurrency holdings and interact with decentralized applications.
- InstaDApp: A multisig Ethereum wallet that allows users to manage their cryptocurrency holdings and interact with decentralized applications in a user-friendly interface.
- MyCrypto: An open-source, client-side interface for managing cryptocurrency wallets, including multisig Ethereum wallets.
- Ledger Nano X: A hardware wallet that supports multiple cryptocurrencies, including Ethereum, and allows users to manage their wallet using a combination of private keys stored on the device and a PIN code.
- Trezor: A hardware wallet that supports multiple cryptocurrencies, including Ethereum, and allows users to manage their wallet using a combination of private keys stored on the device and a PIN code.
Challenges When Developing Multi Sig Wallets
There are several challenges that developers may encounter when building a multisignature wallet:
- Security: Ensuring the security of a multisig wallet is particularly important, as it requires the protection of multiple private keys. This can be challenging, as it requires robust security measures to be implemented in the wallet’s design and codebase.
- Complexity: Implementing a multisig wallet can be more complex than building a traditional single-sig wallet, as it requires the coordination of multiple private keys and the management of pending transactions.
- User experience: A poorly designed multisig wallet can be frustrating for users, as it may be difficult to understand or use. This can lead to a poor user experience, which can be a challenge for developers to address.
- Compatibility: Ensuring that a multisig wallet is compatible with different devices and platforms can be challenging, as it requires the wallet to be tested on a wide range of hardware and software configurations.
- Scalability: As multisig wallets become more popular, the number of transactions being processed by the wallet may increase, which can put a strain on the wallet’s scalability. This can be a challenge for developers to address, as it may require significant resources and optimization efforts.
Your entity or company has a wallet and as a part of governance you require that multiple people need to approve and sign off on transactions before funds can be transferred.
Solution: Chainwave Multi Signature Ethereum Wallet
This wallet allows n number of participants (“approvers”) to share control over a wallet’s transactions.
We use a super simple quorum which can be set upon contract creation.
Basically anyone who is an approver in the smart contract can submit a transaction.
If the transaction is approved by a quorum (usually majority) of all approvers, then the transaction can go through.
This multi signature ethereum wallet demonstrates the simple ability to achieve this.
Features of this multi sig wallet include:
- Add Approvers
- Get List of Approvers
- Create Transfers
- Get List of Transfers
- Approve Transfers
- Modify Quorum (with a vote)
- Modify Approvers (with a vote)
- Receive Ether
- Access Control
- Web Based Interface
- Solidity 0.6.0;
- Truffle Framework
Technical Implementation of Multi Signature Ethereum Wallet
We cover how we produce this contract in order to demonstrate how Chainwave Engineers build on the blockchain.
Creating a New Transfer in our Multi Signature Ethereum Wallet
First we need to create a data structure to describe transfers.
We have created a struct that defines a transfer:
With our data structure solved, creating a transfer involves populating a new instance of a “proposed” Transfer and adding it to this contract’s stored array of transfers.
Approving a Transfer in A Multi Signature Smart Contract
To approve a transfer, we must first check to ensure that the Transfer has not yet been sent and it has not already been approved.
If the amount of approvals received by the smart contract reach quorum, then we populate a new ethereum transaction with the information stored in our proposed Transfer.
Utility Functions: Getting Approvers, Get Transfers, and Access Control
In the smart contract you will also find utility functions to get approvers and other data out of the contract.
The most important utility here is access control.
This function restricts actions to users to have been added to the approver array.
Testing Multi Signature Ethereum Wallet Smart Contracts
We use truffle framework to test and deploy smart contracts.
Our tests cover the important behaviors that this multi sig wallet achieves, which in include:
- Creating a Transfer proposal
- Approval of Transfer with Quorum
- Ensuring failures when Transfer is incorrectly approved or created
Unit test for Transfer approval
Results of running test suite:
Front End Development for Multi Signature Ethereum Wallet
The front end is built with React for pure front end/UI, while web3.js is used by the front end to interact with the blockchain and wallets.
Caveat – this is meant for demostration only and has not had a smart contract audit. Not intended for main net usage
Multi signature Ethereum Wallet Contract Address
The Smart Contract for the Multi Signature Ethereum Wallet is Live on the Ethereum main net and test nets:
Kovan Testnet Contract Address: 0xDB6ff940d53698797734E59Fb5f629c7d10229d5
Kovan Deploy TX: 0x088a20921a86ab720ddb1382c345dfb695e8da9084451fa1c53318cd50101c8e
Ethereum Main Net Address: