INTEGRITY Документация

Аварийные выключатели

При написании контрактов особенно важно писать безопасный код и предусмотреть аварийный выключатель, чтобы в случае обнаружения ошибок их можно было устранить. Если аварийный выключатель не предусмотрен, а в смарт-контракте есть уязвимости, которые можно использовать, это может привести к краже ресурсов из смарт-контракта или у других людей.

Это особенно ярко проявилось во время нашумевший инцидент с DAO ↗. Смарт-контракт DAO работал как сложный децентрализованный венчурный фонд и в пиковый момент удерживал Ether на сумму 250 миллионов долларов, собранных от группы инвесторов. Хакеры воспользовались уязвимостями смарт-контракта и похитили Ether на сумму 50 миллионов долларов.

Поскольку транзакции в Ether отменить невозможно, произошёл весьма спорный «хардфорк»: большинство сообщества согласилось принять блок, который содержал нештатное изменение состояния по сути направил все средства DAO в специальный восстановительный контракт «WithdrawDAO». Убедив достаточное количество майнеров признать этот нестандартный блок действительным, DAO смогла вернуть средства инвесторам. Однако согласились не все: несогласные отклонили нестандартный блок и создали сеть Ethereum Classic, после чего каждый блокчейн развивался независимо.

Ограничения

Аварийные выключатели способны создавать и собственные проблемы. Например, если сработает аварийный выключатель у контракта-библиотеки, все зависящие от него контракты перестают работать как задумано, хотя код самой библиотеки остаётся неизменным. Так, злоумышленник однажды активировал аварийный выключатель в функции базовой библиотеки, из-за чего более 500 000 Ether оказались заблокированы в мультиподписных кошельках ↗. Пользователи библиотеки мультиподписи предполагали, что неизменность кода гарантирует её работу именно так, как задумано, и приняли этот блок. После этого случая появилось много инструментов для проверки смарт-контрактов на ошибки и организации программ баг-баунти.

Смарт-контракты, взаимодействующие с блокчейном, детерминированны только с учётом состояния блокчейна.

В чём отличие?

Это принципиально иной подход к обеспечению прозрачности и подотчётности. Поскольку все контракты и транзакции публичны и проверяются силами консенсус, доверие распределено между людьми, а не сосредоточено в руках нескольких крупных институтов.

Доверие к институтам сформировалось исторически. Эта история формирует надёжность.

Доверие к алгоритмам, основанным на консенсусе, строится на предположении, что большинство людей честны, или точнее, что достаточно большую часть людей невозможно склонить к сговору с целью получения злонамеренного результата. Это и есть демократизация доверия. В ходе атаки на DAO большинство узлов согласились принять нестандартный переход состояния. Это фактически свело на нет последствия атаки и показало, что в мире блокчейна восприятие имеет значение как реальность. Поскольку большинство людей «поверили», то есть приняли этот нестандартный блок, он стал «настоящим», то есть действительным блоком.