contract-design – How to Create a Multisignature Address on Ethereum

accountscontract-designmultisignature

I want to store my ether in a form that requires more than one digital signature in order to authorise spends. How do I do on that on Ethereum?

Best Answer

"Multisignature" addresses on Ethereum differ from that of Bitcoin. Though both networks allow for arbitrary complex transactions, the concepts are not intrinsically the same:

In Bitcoin, there are 2 major classes of transactions:

  • pay to pubkey (addresses starting with "1")
  • pay to script hash (addresses starting with "3", also known as P2SH)

The former is the more traditional account-based system of Bitcoin, whereas the latter was a BIP extension written by Gavin Andresen to enable more complex transactions. Essentially, P2SH allows for an arbitrary script to be used to produce a signatures to consume some input.

In contrast, Ethereum there are 2 major classes of accounts:

  • externally-owned accounts
  • contract accounts

The major difference between these is that contract accounts contain code that can execute and interact with the blockchain. Because Ethereum is "turing-complete", the code can be anything, including a multisignature-type wallet. In comparison, Bitcoin has a more limited scripting language that allow for some scripting features of Ethereum, but not all.

Execute contract

For example, here is some Wallet code, written in Solidity, which compiles to run on the Ethereum network as a contract account. It has various features including multiple signature support (with unlimited participants) and daily withdraw limits, allowing you to spend small amounts, but require multiple signatures for large transactions. This wallet runs entirely on the Blochchain and is available in Mist, (Ethereum DApp browser) with an easy-to-use HTML interface requiring no programming knowledge.

Multisignature contract in Mist

Related Topic