Токены Ethereum: знакомство с ERC 777 и снижение рисков

Токены Ethereum: знакомство с ERC 777 и снижение рисков

17 февраля 2022 г.

Токены являются цифровыми активами, присущими их блокчейну, для обеспечения интерактивности, удобства использования и единообразия были введены стандарты токенов, наиболее широко используемый стандарт для создания токенов в (Ethereum Request for Comment 20) ERC20, ERC-20 и ERC-20. 777 — это некоторые стандарты взаимозаменяемых токенов, которые существуют в блокчейне Ethereum. Существует множество стандартов токенов для разработки смарт-контрактов; однако ERC 20 является базовым стандартом или стандартом по умолчанию, неизменным и широко используемым при разработке смарт-контрактов.


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


Выбор стандарта токена: ERC20 VS ERC777


ERC20 и ERC777 — два предпочтительных токена для разработки взаимозаменяемых токенов. Выбор токена в основном зависит от использования, принятия, функций и безопасности.


ERC20 имеет широкое применение, внедрение и безопасность, в то время как ERC777 имеет улучшенные функции и обратную совместимость.


Цель ERC 777


EIP (Предложение по улучшению Ethereum) ERC777 представляет расширенные функции, чтобы сделать взаимодействие с токенами более оперативным и улучшенным.


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


Также с помощью операторов смарт-контракты получают разрешения на выполнение задач и могут отправлять токены от имени другого контракта или обычного адреса.


Стандарт ERC777 обратно совместим с ERC20, что позволяет беспрепятственно взаимодействовать с этими токенами, как если бы они были ERC20, используя стандартные функции и по-прежнему пользуясь расширенными функциями.


Что такое смарт-контракты?


Смарт-контракт — это самоисполняющийся код, написанный разработчиком для обеспечения соблюдения условий соглашения между покупателем и продавцом. Код и его соглашения распространяются и децентрализуются в безопасной и неизменной сети блокчейнов.


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


Почему токены ERC777 используются в эксплойтах?


Смарт-контракты действительно сталкиваются с эксплойтами, эти эксплойты в основном являются результатом ошибки в коде, будь то коды смарт-контрактов ERC20 или ERC777, написанные людьми в основном на языке программирования Solidity, и все люди подвержены ошибкам и ошибкам, а иногда и непредвиденным события в один момент времени могут сделать существующие инфраструктуры уязвимыми, если их включение не ожидается. ERC777 только упростил работу с плохо разработанными протоколами.


Пул Uniswap (децентрализованная биржа) V1 для imBTC и Dforce был взломан с использованием векторной атаки с повторным входом. Атаки с повторным входом стали широко известной уязвимостью, она обнаружилась во время знаменитого взлома DAO (Децентрализованная автономная организация) в 2016 году, когда стандарта ERC777 еще не существовало.


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


Варианты использования ERC777


  • Его можно использовать для внесения в черный список или отклонения токенов с определенных адресов.

  • Используя операторов, его можно использовать для автоматической обработки подписок или платежей от вашего имени.

  • Функция отправки позволяет добавлять данные транзакций пользователя и данные транзакций оператора для более быстрого согласования.

  • Это может позволить автоматически перенаправлять определенные токены на другой контракт.

Используя хук ERC777 tokensReceived


```javascript


// SPDX-идентификатор лицензии: MIT


прочность прагмы >=0,8,4;


импортировать "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/token/ERC777/ERC777.sol";


контракт my777Receiver - IERC777Recipient {


отображение (адрес=>uint) государственных балансов;


ERC777 my_erc777;


Частный реестр IERC1820Registry1820 = IERC1820Registry (0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);


конструктор (адрес my_erc777_address){


register1820.setInterfaceImplementer (адрес (этот), keccak256 («ERC777TokensRecipient»), адрес (этот));


my_erc777 = ERC777 (мой_erc777_адрес);


//Крючок получателя ERC777


функция tokensReceived (оператор адреса, адрес от, адрес до, сумма uint256, байты данных calldata,


bytes calldata operatorData) external {


// вернуть или потребовать


функция () внешняя кредиторская задолженность {}


Используя хук ERC777 tokensToSend


```javascript


// SPDX-идентификатор лицензии: MIT


//Используя https://remix.ethereum.org


прочность прагмы >=0,8,4;


импортировать "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/token/ERC777/ERC777.sol";


контракт ERC777 является IRC777Recipient {


// вызов функции setInterfaceImplementer в реестре ERC-1820 с адресом держателя в качестве адреса


Частный реестр IERC1820Registry1820 = IERC1820Registry (0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);


register1820.setInterfaceImplementer (адрес (этот), keccak256 («ERC777TokensSender»), адрес (этот));


отображение (адрес=>uint) государственных балансов;


//ERC777 Отправитель Hook


функция tokensToSend (оператор адреса, адрес от, адрес до, сумма uint256, байты, calldata, userData,


байты calldata operatorData) external{


функция () внешняя кредиторская задолженность {}


Использование операторов ERC777


```javascript


// SPDX-идентификатор лицензии: MIT


//Используя https://remix.ethereum.org


прочность прагмы >=0,8,4;


импортировать "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.1/contracts/token/ERC777/ERC777.sol";


контракт my777Receiver - IERC777Recipient {


отображение (адрес=>uint) государственных балансов;


ERC777 my_erc777;


Частный реестр IERC1820Registry1820 = IERC1820Registry (0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);


конструктор (адрес my_erc777_address){


register1820.setInterfaceImplementer (адрес (этот), keccak256 («ERC777TokensRecipient»), адрес (этот));


my_erc777 = ERC777 (мой_erc777_адрес);


//ERC 777 КРЮК


функция tokensReceived(оператор адреса,адрес от,адрес до,сумма uint256,


байты calldata userData, байты calldata operatorData) переопределить внешний {


// возвращаться();


//Депозит авторизованного оператора


функция депозита(сумма uint) public{


my_erc777.operatorSend (адрес (msg.sender), адрес (этот), сумма, "", "");


балансы[msg.sender] += сумма;


//санкционированный вывод Оператора


функция removeTokens () общедоступная {


my_erc777.operatorSend(адрес(этот), адрес(msg.sender), балансы[msg.sender], "", "");


балансы[msg.sender] = 0;


Процесс отправки ERC777


  • Отправитель, являющийся владельцем токена, который хотел бы перевести токены на контракт ERC777, вызовет функцию отправки ERC777.

  • Затем контракт узнает из контракта реестра, таким образом, развернутый ERC1820 (доверенный реестр, уже развернутый в блокчейне), зарегистрировался ли адрес получателя для получения токенов.

  • Если есть запись в реестре, то для получения токенов будет вызываться функция tokensReceived в контракте-получателе.

  • Контракт получателя также может принять решение об отклонении токенов в функции tokensReceived.

Контракт получателя ERC777 может зарегистрировать токены ERC20 в реестре ERC1820, чтобы также воспользоваться преимуществами хуков.


Предотвращение рисков смарт-контрактов


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


Аудит


В связи с увеличением стоимости, заблокированной в децентрализованных финансах (DeFi), возрастает потребность в аудитах безопасности. Уязвимости смарт-контрактов, ковер тянет и другие ошибки кода. Аудит смарт-контрактов может выполняться вручную или автоматически. Аудиторы смарт-контрактов изучают коды смарт-контрактов для обнаружения уязвимостей и проблем безопасности, тем самым обеспечивая уровень уверенности в том, что код проекта может быть безопасно развернут.


Certik, Chainsulting, Openzeppellen, Perkshield — некоторые известные фирмы, занимающиеся безопасностью блокчейнов, которые проводят аудит смарт-контрактов.


Покупка страхового покрытия


Страхование DeFi относится к страхованию себя или «покупке покрытия» от убытков и рисков, возникающих в результате событий в пространстве DeFi.


Страхование децентрализованных финансов (DeFi) — это покрытие, которое защищает пользователей от убытков в обмен на комиссию. Поставщики страхового покрытия могут быть централизованными или децентрализованным пулом поставщиков страхового покрытия. Покупая страховое покрытие, можно минимизировать эффект убытков.


Opium Insurance, InsurAce, Nexus Mutual, Bridge Mutual, Insure Defi и Unslashed — это некоторые поставщики децентрализованного финансового страхования.


Использование опытных разработчиков: Использование опытных разработчиков может помочь снизить некоторые риски, связанные со смарт-контрактами. Разработчикам сезонных смарт-контрактов лучше узнать о некоторых рисках, с которыми сталкивается отрасль, и о лучших практиках, которые можно использовать при развертывании смарт-контрактов.


Избегайте копирования других кодов: Копирование или разветвление кода из других протоколов — это быстрый способ разработки, но это может привести к легкому взлому из-за знакомости и возможных проблем несовместимости.


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


Заворачивать


ERC777 представляет удивительные функции для использования смарт-контрактов; однако из-за него


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


Стратегии снижения риска не могут устранить убытки, но могут уменьшить их влияние.



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE