Single Nominator Pool
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
Single Nominator – это простой брандмауэрный смарт-контракт TON, который обеспечивает безопасную валидацию блокчейна TON через холодный кошелек. Контракт предназначен для валидаторов TON, которые имеют достаточный объем средств для стейкинга и проведения самостоятельной валидации, не полагаясь на ставки сторонних номинаторов. Контракт предоставляет альтернативную упрощенную реализацию смарт-контракта Nominator Pool, который поддерживает только одного номинатора. Преимущество этой реализации в том, что она более безопасна, поскольку поверхность атаки значительно меньше. Это происходит благодаря значительному снижению сложности смарт-контракта пула номинаторов, который обычно поддерживает несколько сторонних номинаторов.
Подходящее решение для валидаторов
Этот смарт-контракт предназначен для валидаторов TON, которые имеют достаточный объем средств для стейкинга и самостоятельной валидации. Другими доступными альтернативами являются:
- использование горячего кошелька (небезопасно, поскольку холодный кошелек необходим для предотвращения кражи в случае взлома узла валидатора)
- использование restricted-кошелька (который не поддерживается и имеет нерешенные векторы атак, например, атаки на слив газа)
- использование Пула номинаторов с max_nominators_count = 1 (излишне сложно при большой площади атаки)
Смотрите более подробное сравнение существующих альтернатив.
Официальный хэш-код
Проверьте смарт-контракт на сайте https://verifier.ton.org, прежде чем отправлять средства на реальный контракт.
Single nominator v1.0:
pCrmnqx2/+DkUtPU8T04ehTkbAGlqtul/B2JPmxx9bo=
Single nominator v1.1 (с выводом средств через комментарий):
zA05WJ6ywM/g/eKEVmV6O909lTlVrj+Y8lZkqzyQT70=
Архитектура
Архитектура практически идентична смарт-контракту Nominator Pool:
Разделение на две роли
- Владелец – холодный кошелек (приватный ключ, не подключенный к интернету), который владеет средствами, используемыми для стейкинга, и выступает в качестве single nominator
- Валидатор – кошелек, чей приватный ключ находится на узле валидатора (может подписывать блоки, но не может украсть средства, используемые для ставки)
Рабочий процесс
- Владелец хранит средства для стейкинга ($$$) в своем защищенном холодном кошельке.
- Владелец вносит депозит ($$$) в контракт Single Nominator (этот контракт).
- MyTonCtrl запускается на узле валидатора, подключенном к интернету.
- MyTonCtrl использует кошелек Валид атора, чтобы дать указание Single Nominator восстановить ставку в следующем избирательном цикле.
- Single Nominator отправляет ставку ($$$) Избирателю на один цикл.
- Избирательный цикл закончился, ставка может быть восстановлена.
- MyTonCtrl использует кошелек Валидатора, чтобы дать указание Single Nominator восстановить ставку в следующем избирательном цикле.
- Single Nominator восстанавливает ставку ($$$) из предыдущего цикла у Избирателя.
- Шаги 4-8 повторяются до тех пор, пока Владелец будет готов продолжать валидацию.
- Владелец выводит средства ($$$) из контракта Single Nominator и забирает их.
Ослабление векторов атак
-
Для подписи новых блоков узлу-валидатору требуется горячий кошелек. Данный кошелек небезопасен по своей сути, поскольку его приватный ключ имеет доступ к интернету. Если этот ключ будет скомпрометирован, Валидатор не сможет извлечь средст ва, используемые для валидации. Только Владелец может вывести эти средства.
-
Даже если кошелек Валидатора скомпрометирован, Владелец может попросить Single Nominator изменить адрес валидатора. Это не позволит злоумышленнику в дальнейшем взаимодействовать с Single Nominator. Здесь нет состояния гонки, Владелец всегда будет иметь приоритет.
-
На балансе Single Nominator хранятся только основные средства для стейкинга – этот баланс не используется для затрат газа. Деньги на газ для начала избирательного цикла хранятся в кошельке Валидатора. Это решение не позволит злоумышленнику, скомпрометировавшему валидатора, слить средства для стейкинга с помощью атаки на трату газа.
-
Single Nominator проверяет формат всех операций, выполняемых Валидатором, чтобы убедиться, что он не передает недействительные сообщения Избирателю.
-
В случае необходимости, например, если контракт Избирателя был обновлен и изменил свой интерфейс, Владелец все еще может отправить любое необработанное сообщение как Single Nominator, чтобы вернуть ставку от Избирателя.
-
В случае крайней необходимости, Владелец может установить код Single Nominator и переопределить его текущую логику работы для устранения непредвиденных обстоятельств.
Некоторые из этих векторов атак невозможно ослабить с помощью обычного контракта Nominator Pool, поскольку это позволит человеку, управляющему валидатором, красть средства у своих номинаторов. Это не проблема с Single Nominator потому, что Владелец и Валидатор принадлежат одной и той же стороне.
Аудиты безопасности
Полный аудит безопасности, проведенный компанией Certik, доступен в репозитории: Certik Audit.
Сравнение существующих альтернатив
Предполагая, что вы валидатор с достаточной ставкой для самостоятельной валидации, вот альтернативные настройки, которые вы можете использовать с MyTonCtrl:
1. Обычный горячий кошелек
Это простейшая настройка, при которой MyTonCtrl подключен к тому же standard wallet, на котором хранятся средства. Поскольку этот кошелек подключен к интернету, он считается горячим кошельком.
Использование небезопасно, так как злоумышленник может получить приватный ключ, поскольку кошелек подключен к интернету. С помощью приватного ключа злоумышленник может отправить средства в стейкинг кому угодно.
2. Restricted-кошелек
Эта настройка заменяет стандартный кошелек на restricted wallet, который позволяет отправлять исходящие транзакции только заранее определенным адресам назначения, таким как Избиратель и Владелец.
Данный тип кошелька не обслуживается (заменен на Пул номинаторов) и имеет нерешенные векторы атак, например, атаки на трату газа. Поскольку в одном и том же кошельке на одном балансе хранятся и плата за газ и основная сумма ставки, злоумышленник, скомпрометировавший приватный ключ, может генерировать транзакции, что повлечет за собой значительные убытки. Кроме того, при попытке вывода средств злоумышленник и владелец могут столкнуться с состоянием гонки из-за коллизий seqno.