Я хочу хранить свой эфир в форме, которая требует более одной цифровой подписи для авторизации трат. Как мне это сделать на Ethereum?
Адреса «мультиподписи» в Ethereum отличаются от адресов в биткойнах. Хотя обе сети допускают произвольные сложные транзакции, концепции по своей сути не совпадают:
В Биткойне есть 2 основных класса транзакций:
Первая представляет собой более традиционную систему Биткойн, основанную на учетных записях, тогда как вторая представляет собой расширение BIP, написанное Гэвином Андресеном для обеспечения более сложных транзакций. По сути, P2SH позволяет использовать произвольный сценарий для создания подписи для получения некоторого ввода.
В отличие от Ethereum , существует 2 основных класса счетов:
Основное различие между ними заключается в том, что учетные записи контрактов содержат код, который может выполняться и взаимодействовать с блокчейном. Поскольку Ethereum является «полным по Тьюрингу», код может быть любым, включая кошелек с мультиподписью. Для сравнения, Биткойн имеет более ограниченный язык сценариев, который позволяет использовать некоторые функции сценариев Ethereum, но не все.
Например, вот код кошелька , написанный на Solidity, который компилируется для работы в сети Ethereum в качестве контрактной учетной записи. Он имеет различные функции, включая поддержку нескольких подписей (с неограниченным количеством участников) и ежедневные ограничения на снятие средств, что позволяет вам тратить небольшие суммы, но требует нескольких подписей для крупных транзакций. Этот кошелек полностью работает на Blochchain и доступен в Mist (браузере Ethereum DApp) с простым в использовании HTML-интерфейсом, не требующим знаний в области программирования.
Я бы порекомендовал вам скачать бета-версию Ethereum Wallet здесь.
Кошелек предоставляет вам простой графический интерфейс для создания контракта кошелька с несколькими подписями.
Недавно я работал над универсальным смарт-контрактом Solidity для мультиподписи: https://github.com/bitclave/Multiownable
Вы можете легко внедрить функциональность с несколькими подписями в любой смарт-контракт, создав подклассы Multiownable
и добавив onlyManyOwners
модификатор к методам, которые вы хотите защитить. Это пример простейшего мультиподписного кошелька, который вы можете себе представить:
contract SimplestMultiWallet is Multiownable {
function transferTo(address to, uint256 amount) onlyManyOwners {
to.transfer(amount);
}
}
Технически вы сможете получить transferOwnership
массив адресов, и защищенный onlyManyOwners
модификатором метод будет выполняться только тогда, когда последний из владельцев вызовет этот метод с теми же аргументами.