Multisig (кошелёк с мультиподписью): пример Polkadot
В этом цикле попробую продолжить историю, начатую когда-то на Forklog, рассказавая о самых интересных, важных и просто достойных мультисиг-решениях. Начнёс с Polkadot. Почему? Просто потому, что использовал сервис, с этим чейном связанный, недавно.
Зачем вам мультисиг?
Скорее, важно ответить на вопрос: "а почему вы всё ещё не используете мультисиг?". Если из-за отсутствия знаний, то самое время восполнить сей пробел!
Дисклеймеры
- Всё течёт, всё изменяется, особенно в области Web 3.0/Web3, поэтому то, что актуально в марте 2024 года, может быть не актуально уже в апреле, но общие принципы - всегда таковы;
- Работайте с мультисигом сначала ВСЕГДА в ТЕСТНЕТЕ, а уж потом переходите в майннет;
- Автор не несёт и не может нести ответственность за ваши финансы - поэтому будьте бдительны, осторожны и проверяйте всё, в первую очередь - ссылки, т.к. атаки на криптопроекты происходят ежесекундно.
В остальном - наберитесь терпения и удачи вам!
Шаг №01. Заходим на сайт
- https://cloudflare-ipfs.com/ipns/polkadot.dotapps.io/#/accounts
- https://polkadot.js.org/apps/#/staking
Собственно, второй - рекомендую выбирать первый, поэтому на нём и остановимся.
Собственно, стрелками указал, что нас интересует: это кнопка в виде "+" и с описанием "Мультиподпись", а также появление самого кошелька мультиподписи. Что дальше? Сейчас расскажу...
Шаг №02. Добавляем контакты
Итак, кликаем в верхнем меню на раздел "Аккаунты" и выбираем подраздел "Книга адресов". После этого окажемся на вот такой странице https://cloudflare-ipfs.com/ipns/polkadot.dotapps.io/#/addresses:
Здесь и нужно добавить те аккаунты, которые будут участвовать в мультисиге: их может быть довольно много, но рекомендую использовать от 3 до 15, т.к. даже при 5 участниках, как показывает опыт, крайне сложно найти время для постоянных подписей, а если мультисиг делаете для себя (как средство лучшей защиты), то хватит 2 из 3х.
Что, кстати, это значит, 2 из 3х? Это значит, что у вас 3 подписанта (тех, кто может подписывать транзакции), но достаточно получить 2 подписи, чтобы транзакция прошла. Помните кадры из фильмов, где надо достать и одновременно повернуть на большом расстоянии 2 ключа? Вот примерно об этом речь, только в онлайне и ончейне.
Выше я добавил как раз 2 контакта, которые вместе с моим публичным (тестовым) кошельком Menaskop и будут участниками мультисига с правилом 2 из 3х:
Шаг №03. Создаём Мультиподпись
Далее нам нужно вернуться в раздел аккаунт: https://cloudflare-ipfs.com/ipns/polkadot.dotapps.io/#/accounts:
Здесь, на странице аккаунтов, нажимаем в правом углу ту самую кнопку "+" с надписьмю "Мультисиг", о которой шла речь выше, и оказываемся в меню, которое показано на картинке сверху. В этом меню и нужно назначить подписанктов, а также "Порог" - в данном случае под ним подразумевается необходимое (пороговое) количество подписей, которые следует собрать, чтобы транзакция с Мультисига состоялась (отправилась). Кроме того, нужно указать имя: лучше давать понятные, человекочитаемые имена, чтобы не путаться.
Когда подписанты назначены, Порог установлен и название дано - появляется кнопка "Создать":
И да, если вы - продвинутый пользователь, то можете работать через загрузку JSON-файлов, но, если нет, смело пропускайте этот чекбокс, т.к. для нашего примера он не существенен.
ВНИМАНИЕ! Возьмите за правило читать мануалы. В частности, в этом окне написана следующая важная информация: "Подписанты имеют возможность создавать транзакции с помощью мультподписи и одобрять транзакции других. По достижении порога одобрений транзакция мультиподписи будет исполнена в сети", - то есть есть два базовых типа транзакций: создание и одобрение.
Далее: "Поскольку мультиподпись работает как любой другой аккаунт, то после создания он становится доступным везде где используются аккаунты, и должен иметь средства на балансе", - в конкретном случае 21 DOT для первичной активации и остальное - то, что можно отправлять (21 DOT можно забрать, когда будете закрывать мультисиг: для этого есть специальная транзакция - о ней будет несколько слов ниже по тексту).
Всё, когда нажали кнопку "Создать" (в указанном интерфейсе она станет тёмно-розового цвета), то на странице аккаунтов появится новый Мультисиг: https://cloudflare-ipfs.com/ipns/polkadot.dotapps.io/#/accounts:
Вы можете определить его по названию "Test For Menaskop". Дальше... в разных инструкциях на английском было много всего написано, но вот 4 тезиса, которые надо знать вам, исходя из опыта, а не теории:
- Каждый аккаунт на мультисиге должен быть активирован через наличие 21 DOT;
- Мультисиг тоже должен иметь не сгораемый остаток (кроме последней транзакции - когда "закрываете" его) в 21 DOT;
- Если вы импортировали аккаунт через кошелёк Polkadot.JS https://polkadot.js.org/ - то важно выбрать в настройках при экспорте(см. ниже) именно ту сеть, в которой будет создан Мультисиг;
- Если вы работаете через Ledger/Trezor/etc., то обычно требуется обновление, т.к. версия ПО на сайте https://polkadot.js.org/ и старого ПО вашего аппаратноо кошелька - может конфликтовать: вроде, очевидная мелочь, но буквально на днях был коллега, который с этим промучался не один день, пока просто не обновился до новых версий и там (в кошельке Polkadot), и там (в кошельке Ledger).
Итак, скрин выше о том, что при импорте и/или создании аккаунта, который будет использован для Мультисига, необходимо указывать сразу сеть, где Мультисиг создаётся, иначе можете получить (и почти обязательно получите) вот такое уведомление: "This account is available on all networks. It is recommended to link to a specific network via the account options («only this network» option) to limit availability. For accounts from an extension, set the network on the extension", - что дословно переводится так: "Эта учётная запись доступна во всех сетях. Рекомендуется привязываться к определённой сети через параметры учётной записи (опция "Только эта сеть"), чтобы ограничить доступность. Для учётных записей из аддона - установите сеть в самом аддоне (браузерном расширении)".
Шаг №04. Пополняем аккаунт
Эта стадия самая простая: по сути всё, что нужно знать, это где найти адрес самого Мультисига:
Собственно, просто находим в аккаунтах наш Мультисиг, наводим на него, нажимаем и в правом углу (смотря какой экран - но конкретно в примере - в правом углу) видим название Мультисига (в нашем случае это "TEST FOR MENASKOP"), кнопку "Копировать" (выделена маленьким жёлтым прямоугольником), Пояснение (в данном случае - белыми буквами на зелёном фоне), что это Мультиподпись, а также функции Просмотра в разных эксплорерах (иконки серые внизу блока справа).
Всё, как скопировали аккаунт (адрес его, если точнее) - можете пополнить любым удобным способом: с другого кошелька, с биржи и т.п.
Шаг №05. Отправляем транзакцию
Скажу сразу и ещё раз: пока баланс ваших кошельков, участвующих в Мультисиге и баланс самого Мультисига не будет 21 DOT + комиссия на отправку, вы не сможете ничего сделать (но можете протестировать всегда в тестнете: https://paritytech.github.io/polkadot-testnet-faucet/westend - это кран для одноимённой (под) сети в экосистеме Polkadot, где можно всё тестировать бесплатро).
Итак, нажимаем кнопку "Отправить" (она высветится нужным цветом):
У вас появится вот такое окно:
Здесь крайне важно заполнить параметры верно:
- Отправить с аккаунта: тут нужно выбрать тот Мультисиг, с которого отправляете средства;
- Отправить на адрес: эти адреса указаны в книге адресов и их лучше именовать понятными вам названиями;
- Сумма: любая отличная от нуля и так, чтобы после отправки на аккаунте было 21 DOT.
После заполнения у вас появится вот такая примерно страница, на которой самое важное - это "multisig call data":
Здесь есть дополнительные настройки, НО рекомендую с ними заморачиваться только тогда, когда освоите общий процесс отправки транзакций, это следующие пункты:
- Разрешить с хэшем мультиподписи (не финальное разрешение) - по умолчанию он выключен: пусть таким и остаётся, пока не разберётесь, как финалить транзакции;
- Не включать чаевые для сбора: сеть Polkadot не самая дорогая, поэтому с этим пунктом стоит заморачиваться крайне редко (опишу когда-нибудь ситуации), поэтому тоже пусть остаётся выключенным.
- Подписать и отправить: лучше оставить как раз включенным.
После всех манипуляций (копирование multisig call data - ключевая из них) - можете подписать и отправить другому подписанту multisig call data, чтобы он завершил транзакцию (если речь идёт о Мультисиге 2 из 3х).
После этого вам нужно будет подписать транзакцию через приложение (кошелёк), как показано на рисунке выше: если редко делаете подписи через Мультисиг - не ставьте галочку о сохранении сессии на введённый пароль на 15 минут.
После этого у вас и у ваших со-подписантов по Мультисигу появится символ, похожий на нечто среднее между пиктограммой "Бензоколонка" и "Документ с условным символом "галочка"":
Собственно, наведя на него окажемся в меню "Транзакций, ожидающих подтверждение" и нажав на него - окажемся в меню ввода данных, необходимых для подтверждения платежа, в том числе multisig call data.
Вот так это выглядело у моего коллеги к транзакции:
И после вставки multisig call data видим изменение:
Здесь показано, что тип операции "balances.transferKeepAlive", то есть операция без полного списания (см. ниже).
Всё! Как только коллеги подтвердят и завершат транзакцию - можно проверить всё в экплорере: https://polkadot.subscan.io/ - например, здесь.
Если же вы хотите закрыть Мультисиг и вывести все средства, то шаги ровно те же, за исключением одного:
Когда будете делать отправку, нужно установить чекбокс "Передать баланс с удалением отправителя" включенным. ВНИМАНИЕ! Крайне осторожно используйте подобный функционал и только после того, как научитесь пользоваться Мультисигом на уровне пользователя продвинутого.
Дополнительные фичи
- Вы можете использовать мультисиги, где подписанты... тоже будут мультисигами;
- В разделе "Разработчик" - есть продвинутый функционал взаимодействия с Мультисигом: рекомендую использовать его, когда достигните уровня продвинутого пользователя;
- У Мультисига можно создать "Прокси": что это и как - расскажу как-нибудь отдельно;
- И да, аккаунт всегда можно индвидуализировать в блокчейне (см. ниже), дав ему имя, навроде ENS в сети Ethereum.
На самом деле тайн и фич у Мультисигов ещё много, но не обо всех надо за один раз рассказывать, поэтому пока всё и