Quiero almacenar mi ether en un formulario que requiera más de una firma digital para autorizar gastos. ¿Cómo hago eso en Ethereum?
Las direcciones de "firma múltiple" en Ethereum difieren de las de Bitcoin. Aunque ambas redes permiten transacciones complejas arbitrarias, los conceptos no son intrínsecamente iguales:
En Bitcoin , hay 2 clases principales de transacciones:
El primero es el sistema basado en cuentas más tradicional de Bitcoin, mientras que el segundo era una extensión BIP escrita por Gavin Andresen para permitir transacciones más complejas. Esencialmente, P2SH permite que se use un script arbitrario para producir firmas para consumir alguna entrada.
En contraste, Ethereum hay 2 clases principales de cuentas:
La principal diferencia entre estos es que las cuentas de contrato contienen código que puede ejecutarse e interactuar con la cadena de bloques. Debido a que Ethereum es "turing-complete", el código puede ser cualquier cosa, incluida una billetera de tipo de firma múltiple. En comparación, Bitcoin tiene un lenguaje de secuencias de comandos más limitado que permite algunas funciones de secuencias de comandos de Ethereum, pero no todas.
Por ejemplo, aquí hay un código de Wallet , escrito en Solidity, que se compila para ejecutarse en la red Ethereum como una cuenta de contrato. Tiene varias características que incluyen compatibilidad con múltiples firmas (con participantes ilimitados) y límites de retiro diarios, lo que le permite gastar pequeñas cantidades, pero requiere múltiples firmas para transacciones grandes. Esta billetera se ejecuta completamente en Blochchain y está disponible en Mist , (navegador Ethereum DApp) con una interfaz HTML fácil de usar que no requiere conocimientos de programación.
Le recomendaría que descargue la versión beta de Ethereum Wallet aquí.
La billetera le brinda una GUI fácil para crear un contrato de billetera multi-sig.
Recientemente trabajé en el contrato inteligente universal Solidity para firmas múltiples: https://github.com/bitclave/Multiownable
Puede enviar fácilmente la funcionalidad de múltiples firmantes a cualquier contrato inteligente mediante la subclasificación Multiownable
y la adición onlyManyOwners
de modificadores a los métodos que desea proteger. Este es un ejemplo de la billetera multisig más simple que puedas imaginar:
contract SimplestMultiWallet is Multiownable {
function transferTo(address to, uint256 amount) onlyManyOwners {
to.transfer(amount);
}
}
Técnicamente, podrá usar transferOwnership
una matriz de direcciones y onlyManyOwners
el método protegido con modificador se ejecutará solo cuando el último de los propietarios llame a este método con los mismos argumentos.