Если вы знакомы с кошельком Electrum, тогда знаете, что он использует мнемоническую фразу (
seed), обычно из 12-ти английских слов, для генерации
master private key (xprv), который используется для генерации бесконечной последовательности приватных ключей (
private key) и, следовательно, открытых ключей (
public key) и адресов (
address).
Обычно, когда люди говорят публичный адрес, они думают что адрес кошелька и публичный ключ одно и тоже. Это не так. Адрес кошелька (
address) --- это хэш публичного ключа (
public key), и им можно делиться с другими, он не содержит в себе приватной информации.
Некоторые иерархически детерминированные кошельки (HD-кошельки), для повышения безопасности, позволяют разделять создание
master private key (xprv) и публичного ключей. При такой схеме, кошелек может быть настроен зная только
master public key (xpub).
Плюсы такого подхода:
- кошелек может создавать столько адресов (address), сколько это необходимо;
- если master public key (xpub) будет скомпрометирован, это не позволит злоумышленнику потратить BTC из кошелька;
Также, держа по отдельности
master public key (xpub) и
master private key (xprv) их можно использовать в кошельках Electrum или Armory, для полностью автономного хранилища, в котором один компьютер (в автономном режиме) знает приватный ключ (
xprv), а второй (подсоединен к интернету) знает только публичный ключ (
xpub).
Master public key (xpub) может генерировать одну и ту же последовательность адресов (
address) независимо от мнемонической фразы (
seed). Таким образом, вы можете ввести
master public key (xpub) в кошелек, и получить безопасный вариант только для приема средств (
watch-only wallet).
Вы сможете видеть баланс кошелька, генерировать новые адреса, но не сможете отправить с него средства. BTC отправленные на сгенерированные адреса, автоматически будут отображаться в вашем кошельке.
Пару слов о мультиподписиМультиподпись (транзакция с несколькими подписями ---
multi-signature transaction) впервые появилась в кошельке BitGo в 2013 году.
В 2015-ом году кошелек Electrum обновился до версии 2.0, где была добавлена возможность создавать адреса с мультиподписью по схеме 2-из-3 (наиболее распространенный вариант). В последней версии возможны разные вариации вплоть до 15-из-15.
На момент написания этого поста, последний релиз кошелька
Electrum-3.1.2Актуальную версию Electrum кошелька смотрите только на официальном сайте кошелька:
https://electrum.org/#downloadНикогда не качайте кошельки с непроверенных источников!Мультиподпись позволяет:
- Отправлять BTC только с одновременного согласия нескольких сторон сделки владельцев ключей (xpub), каждый из которых должен подписать транзакцию своим ключом;
- Значительно повысить безопасность личного кошелька;
Создание мультисиг кошелька Electrum со стороны покупателя (2-из-3) Скачайте последную версию Electrum:
https://www.electrum.org/#download и запустите кошелек:
Задайте имя файлу кошелька (я задал
buyer_wallet), или оставьте
default_wallet и нажмите
Дальше.
В следующем окне, вы должны выбрать какой тип кошелька хотите создать. Выберите Multi-signature wallet и нажмите Дальше:
Далее нужно выбрать количество подписей, необходимых для отправки с этого кошелька. В нашем случае выбираем 2-из-3 и нажимаем Дальше:
В следующем окне выбираем
Create a new seed (Создать новую мнемоническую фразу):
Далее выбираем какой тип адресов будет поддерживать наш кошелек (я выбрал
Standard), но вы можете договорится между собой о создании
Segwit-кошелька.
*Примечание. Все стороны сделки обязательно должны выбрать одинаковый тип кошелька, будь то Standard или Segwit. Далее кошелек выдаст вам сгенерированную мнемоническую фразу (
seed) фраза из 12-ти произвольных слов, необходимая для восстановления кошелька. Скопируйте ее и сохраните в безопасном месте. Google/Яндекс диски, DropBox, iCloud, черновики в электронной почте -- не являются безопасными местами. Если эта фраза попадет в чужие руки -- ваши BTC украдут. Если вы её потеряете -- потеряете BTC навсегда.
Хороший вариант, зашифровать мнемоническую фразу
с помощью PGP. Вторую копию -- хранить на обыкновенной бумаге, третью -- поместить в
зашифрованный контейнер, четвертую -- спрятать на
видном месте, пятую -- можно даже
здесь, все равно это будет лучшим вариантом чем облачные хранилища. Можно комбинировать все перечисленные варианты выше + добавить свои.
Помните, что безопасность ваших BTC зависит только от вас.
Далее кошелек попросит ввести мнемоническую фразу, чтобы убедиться что вы сохранили её. Введите свою мнемоническую фразу и нажмите Дальше.
Следующее что вы должны увидеть, это ваш
master public key (xpub), которым нужно поделиться с гарантом сделки и продавцом. Все стороны сделки должны обменяться своими
master public key (xpub) между собой.
Сохраните свой
master public key (xpub) в текстовом редакторе и нажмите Дальше:
И последнее окно, где вам нужно выбрать способ добавления других подписантов (гаранта и продавца). В данном мануале я выберу
Enter cosigner key (ввести ключ подписанта), то есть
master public key (xpub):
Чтобы добавить подписанта №2 и №3, мне нужны их
master publickey (xpub), поэтому гарант и продавец должны сделать все тоже самое, что написано выше, то есть, создать мультисиг кошелек 2-из-3 и отправить мне (покупателю) свои
master publickey (xpub), последовательность добавления подписантов не имеет значения.
Вставляем в кошелек полученный
master publickey (xpub) от гаранта:
Следующий шаг,
master publickey (xpub) полученный от продавца:
После того как вы введете ключи подписантов
master public key (xpub), кошелек попросит придумать пароль. Не пропускайте этот шаг, надежный пароль нужен, чтобы хранить средства в безопасности и осуществлять переводы.
Зашифрованный файл кошелька --- если вы забудете пароль от кошелька, то сможете восстановить кошелек по мнемонической фразе. Но если ваш компьютер (или файл кошелька) попадет в руки злоумышленника, без вашего пароля он не может украсть ваши BTC:
Чтобы не забывать пароли, пользуйтесь
KeePassXC.
В данном мануале все кошельки создавались на одном компьютере, так что вот названия кошельков, их
seed-ы и
master public key (xpub), можете потренироваться и восстановить их у себя:
Имя кошелька: buyer_wallet
seed: faculty rail juice copper size camp unusual speed danger mass crystal high
xpub: xpub661MyMwAqRbcGj32Tppb7WXTo27f4ZUbD6Mo8xkkaWcKEmTjmXCN2YhYBd6Yc6RmT4GTypSC3UW
Wa7BhjygPED5UuHDiHBU37QFcmHSZNLd
Имя кошелька: escrow_wallet
seed: minor regular avoid auto aisle window vintage intact deal stem coyote innocent
xpub: xpub661MyMwAqRbcGENw1uYVR8DNiZkvU3KJJVm8zuf7CXpCWBpMfHRGjJbneKTXwvsE3Gr6L6WW87f
FWsPeQFqqGQpbZ43z9n6oPnUWWPAny6h
Имя кошелька: seller_wallet
seed: goat diesel screen cluster doctor winter slush silly run diary express number
xpub: xpub661MyMwAqRbcFw6zcN2BNgpQn3hWb6oTBqeWQU7S9MTX7iNPHe95oKYxhBRtWoV94YfJrcjWRQH
dgC777rr5TakKmdCJoVrHyzX3mWruRmm
Скрин созданных кошельков:
Индикатор в правом нижнем углу должен загореться зеленым. Это значит, что кошелек работает исправно и готов к работе. Обратите внимание, адрес для получения средств начинается с тройки, а не с единицы, это подтверждает что используется мультиподпись (хотя есть P2SH-P2WPKH segwit-адреса которые тоже начинаются с тройки). Также надеюсь что вы заметили заметили, что у всех сторон сделки один и тот же адрес, значит мультисиг кошелек был создан правильно.
Теперь покупателю нужно перевести необходимое количество BTC на мультисиг адрес, в данном случае используем адрес:
38BU9oXBXgmjmAu8pWSyehxbYkW22BDqtF Помните, в данном мультисиг кошельке отправленные средства не могут быть возвращены без минимум двух подписей, из трех (2-из-3).
Покупатель отправляет BTC на мульсиг кошелек:
Когда продавец видит, что покупатель отправил BTC на мультисиг кошелек (желательно дождаться трех подтверждений в сети), тогда он должен исполнить свою часть сделки --- отправить покупателю товар/предоставить услугу. Когда сделка между покупателем и продавцом проходит успешно, гарант может вообще не участвовать в отправки BTC на личный адрес продавца.
Продавец может создать транзакцию (где указывает свой личный кошелек, куда должны быть отправлены BTC за предоставленный товар/услугу), подписывает транзакцию своим ключом и передает её покупателю, чтобы тот подписал своим ключом и транслировал в сеть.
Давайте рассмотрим ситуацию, когда после отправки BTC со стороны покупателя, продавец исчезает, и не выходит на связьТак как все стороны сделки (покупатель, гарант и продавец) создали один кошелек на троих, но, чтобы потратить средства, нужно согласие большинства (в данном случае необходимо две подписи из трёх).
В таком случае, покупатель пишет гаранту сделки о проблеме (продавец не выходит на связь на протяжении нескольких дней), гарант пробует связаться с продавцом по указанным контактам, но ответа нет. Тогда покупатель создает транзакцию, в которой указывает свой личный адрес кошелька (куда должны вернуться BTC), подписывает транзакцию своим ключом, после чего передает подписанную транзакцию гаранту сделки в виде файла, QR-кода, текста или с помощью TXID.
При получении подписанной транзакции со стороны покупателя, гарант перепроверяет адрес, куда будут отправлены BTC, если покупатель подтверждает адрес для возврата средств, тогда гарант подписывает транзакцию своим ключом (получается 2-из-3) и транслирует её в сеть. Таким образом BTC вернулись на личный кошелек покупателя.
Давайте посмотрим пару скринов, где покупатель хочет вернуть BTC (так как товар/услугу от продавца он не получил) на адрес, с которого они пришлиПокупатель создает транзакцию, где указывает свой личный кошелек и подписывает своим ключом:
Покупатель видит что успешно подписал транзакцию:
Теперь транзакцию нужно передать гаранту, чтобы и он её подписал, и транслировал в сеть.
1. Статус подписи;
2.
Копировать -- копирует скрипт, который можно передать гаранту любым удобным способом. Проверить скрипт можно на сайте
https://coinb.in, вкладка
Verify:
Вот скрипт, кому интересно самому проверить:
010000000137f1921d1909ea4b60d473e5becde7c8c8014a52b4423a2dfec69b6424e7976d00000000fd52010001ff47304402207ee1ebb0069bd21080b67a1422a1dd854fc3feff204121dbdc94bd97186bfcbf02207744d6d166aaaa3827af9134fadf619ca8fbd802f324161dba3cc7a653d2bda10101ff4d0201524c53ff0488b21e000000000000000000a99db2f694f2786327827290aebe8165bb89c6e374f69757f86f1d388dfa743602d181eea96c9a70bbca7d05e592b85511491abeaaface65d2d46a1fb8f4b79aa7000000004c53ff0488b21e000000000000000000db3e12dbc85740d9bb9046858cb73be9557adcbda6e8f0a74d474f6eb93630e9020821d6550d44d5bf01ea3c3efff302f209f734c57fdc35ccc5dc1d86a9d8f87f000000004c53ff0488b21e0000000000000000008bb34a163ee3fbf426111eb26d21e57ae0b98f0a95907fcb9afd51d88b3e90340313964abd62c145ad99e1c2c83fb1edf70e696b032f699bce913aa52fce70ad000000000053aefdffffff011f8b0600000000001976a9145a2bb3c2dd6eb177bdec8f55cca26e286285ce7f88accde60700
3. Значок QR-кода -- передать транзакцию с помощью QR-кода.
4. Экспортировать --- вы можете экспортировать этот же скрипт, который вы видели выше, только сразу в текстовый файл, который готов для импортирования в кошелек Electrum и последующей подписи.
Припустим покупатель решил передать транзакцию с помощью текста. Смотрим скрины со стороны кошелька гаранта:
Инструменты → Загрузить транзакцию → Из текста:
В появившееся окно гарант вставляет полученный скрипт от покупателя, и нажимает на кнопку
Загрузить транзакцию:
После чего видит такое же окно транзакции как и покупатель. Гарант сверяет адрес возврата, с адресом откуда изначально пришли BTC на мультисиг адрес, если все в порядке, подписывает транзакцию своим ключом и транслирует в сеть:
Финальный скрин мультивалютного кошелька со стороны покупателя, гаранта и продавца:

BTC были отправлены/возвращены на адрес с которого они пришли. Покупатель не получил товар/услугу со стороны продавца и вернул свои BTC. Продавец получил негативный отзыв.
Пользуйтесь мультиподписью, и берегите свои BTC.
Спасибо за внимание.