← Назад в блог

Pausable в OpenZeppelin: рубильник для смарт-контракта

Опубликовано
•
1 мин чтения
•
--- просмотров

В мире блокчейна обязательно нужна возможность остановить хаос. Бывает, что продумать всё не получилось, и в какой-то момент заложенные механизмы дают сбой. Тогда остаётся последний механизм: рубильник, включить или выключить.

Слайд «Access Control Design Patterns: Pausable» с примером токена на OpenZeppelin, Devconnect 2025

Этот слайд показывали на конференции Devconnect 2025, которая прошла в Буэнос-Айресе, в Аргентине.

Pausable из OpenZeppelin

Для этого придуман механизм и интерфейс Pausable в библиотеке OpenZeppelin. На слайде выше он подключён к токену ERC20 через ERC20Pausable. Ставить контракт на паузу и снимать с неё может только владелец роли PAUSER_ROLE, а функции с модификатором whenNotPaused во время паузы не выполняются:

function pause() public onlyRole(PAUSER_ROLE) {
    _pause();
}

function unpause() public onlyRole(PAUSER_ROLE) {
    _unpause();
}

function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) whenNotPaused {
    _mint(to, amount);
}

Не забывайте про рубильник

Я крайне рекомендую Pausable всем разработчикам смарт-контрактов. Никогда про него не забывайте: когда всё остальное уже не сработало, только он и позволяет остановить контракт.

Открыт для работы по контракту

Я доступен для работы по контракту. Если у вас есть интересная идея проекта, запишитесь на звонок через Calendly.

Записаться на 30-минутный звонок