2 февраля был запущен Pandora, проект, посвященный фрагментации NFT. Его основной особенностью является ERC404, стандарт токенов, который сочетает в себе ERC20 и ERC721 и обладает характеристиками собственной ликвидности и фрагментации NFT. Будучи недавно выпущенным протоколом, ERC404 вызвал обширные дискуссии в сообществе. Ежедневный объем торгов ее первого проекта Pandora также превысил 50 миллионов долларов. Другие проекты на основе ERC404 или аналогичных стандартов токенов готовы к запуску.
Поскольку ERC404 был напрямую открыт для сообщества для экспериментов без обсуждения и рассмотрения предложения по улучшению Ethereum (EIP) и запроса комментариев Ethereum (ERC), сам протокол имеет множество областей, требующих улучшения. Команда безопасности Beosin проведет подробный анализ механизма проектирования и контрактного кода ERC404, чтобы помочь пользователям криптовалюты понять ERC404.
Что такое ERC404?
ERC404 — это новый экспериментальный протокол, который «объединяет» два стандарта токенов: ERC20 и ERC721. Проще говоря, ERC404 позволяет разделять и продавать NFT как токены ERC20. Токены ERC404 являются одновременно токенами ERC20 и NFT, то есть один токен ERC404 может рассматриваться как один токен ERC20 или один NFT.
Когда пользователь приобретает токен ERC404, его кошелек автоматически получает репликант NFT. Когда пользователь продает токен, соответствующий NFT будет автоматически уничтожен.
В качестве примера возьмем Pandora, первый проект ERC404. Токеном ERC404 этого проекта является PANDORA, а его соответствующим репликантом NFT является Pandora Replicants. Общий запас токенов PANDORA составляет 10 000, поэтому соответствующий общий объем предложения Pandora NFT также составляет 10 000.
Когда пользователь покупает токены PANDORA на Uniswap, хранение 1 токена PANDORA эквивалентно одновременному хранению 1 Pandora NFT. Затем вы можете продать токены PANDORA или перейти на торговые рынки NFT, такие как OpenSea, чтобы продать Pandora NFT. Пользователи также могут сначала приобрести Pandora NFT, а затем выбрать продажу токенов PANDORA на DEX.

Поскольку ERC404 включает в себя две характеристики токенов ERC20 и NFT, ниже приведены конструктивные особенности ERC404, на которые также следует обратить внимание пользователям:
1.
Если токены ERC404 торгуются как токены ERC20, десятичные дроби будут задействованы и учтены. ERC404 предусматривает, что количество токенов округляется до соответствующего номера NFT. Например, если пользователь владеет 2,9 токенами PANDORA, он/она владеет только 2 токенами Pandora NFT с точки зрения NFT.
2.
В ERC404 v1, если токены ERC404 торгуются как токены ERC20, соответствующий NFT будет уничтожен, а новый NFT будет создан во время торговли. Таким образом, каждый раз, когда генерируется новый NFT, его идентификационный номер будет добавляться из самого высокого идентификационного номера исходного NFT. ERC404 v2 меняет этот механизм записи, который будет объяснен позже. Поскольку Pandora NFT имеет редкость, пользователи будут обменивать токены Pandora, чтобы увеличить редкость Pandora NFT для арбитража и заменять исходный NFT на более редкий Pandora NFT.
3.
В случае ERC404 v1, если пользователь владеет 2,9 токенами PANDORA и продает 1 токен PANDORA, токен не имеет редкости, но соответствующий NFT имеет другую редкость. При продаже 1 токена последний NFT Pandora, полученный пользователем, будет уничтожен первым, поэтому пользователям необходимо обратить внимание на редкость NFT, соответствующего токену PANDORA. Рекомендуется, чтобы на одном адресе хранился только один токен PANDORA, соответствующий одному NFT Pandora, или пользователи могли напрямую торговать своими NFT Pandora.
Анализ кода ERC404
ERC404 v1 был выпущен на Github компанией Acme, бывшим инженером-программистом в Coinbase, и имеет много возможностей для улучшения. С помощью сообщества команда ERC404 в настоящее время занимается созданием и улучшением ERC404 и запустила ERC404 v2 15 февраля. ERC404 v2 значительно снижает потребление газа и оптимизирует механизм покупки и продажи ERC. 404 токена. Его последний репозиторий кода – https://github.com/Pandora-Labs-Org/erc404.
На этот раз мы будем использовать инструмент Beosin VaaS для сканирования смарт-контракта ERC404 v2, анализа кодов ERC404 v2 и предоставления рекомендаций по безопасности для проектов ERC404 совместно с экспертами Beosin по безопасности:

Контракты ERC404 v2 в основном включают ERC404.sol, ERC721Receiver.sol и DoubleEndedQueue.sol. DoubleEndedQueue — это новая структура данных, представленная командой ERC404 для изменения логики торговли токенами и сжигания NFT.
ERC404 v2, аналогичный v1, представляет собой гибридную реализацию ERC721 и ERC20, позволяющую представлять токены ERC721 как токены ERC20. Среди них каждый токен ERC721 соответствует фиксированному количеству токенов ERC20 (определяется параметром unit). При передаче токенов ERC721 соответствующие токены ERC20 передаются в единицах.
По сравнению с версией 1, ERC404 v2 имеет следующие улучшения:
1.
Поддержка EIP-2612
ERC404 v2 поддерживает EIP-2612, что позволяет осуществлять транзакции без газа посредством подписанных сообщений (разрешений). "DOMAIN_SEPARATOR" рассчитывается в конструкторе и может быть пересчитан, если идентификатор цепи изменится, что улучшает совместимость ее контракта.
constructor(string memory name_, string memory symbol_, uint8 decimals_) {
имя = имя_;
символ = символ_;
если (десятичные числа_ < 18) {
вернуть DecimalsTooLow();
}
десятичные дроби = десятичные дроби_;
единицы = 10 ** десятичных знаков;
// EIP-2612 инициализация
INITIAL_CHAIN_ID = block.chainid;
INITIAL_DOMAIN_SEPARATOR = _computeDomainSeparator();
}
2.
Проверка безопасного перевода
Функция SafeTransferFrom в своем контракте следует за onERC721Received() в стандарте ERC721 и проверит получателя, чтобы убедиться, что получатель может обрабатывать токены ERC721 (например, получатель является контрактом).
функция SafeTransferFrom(
адрес от_,
Отправить_,
uint256 id_,
байты памяти data_
) общедоступный виртуальный {
if (id_ > отчеканено || id == 0) {
вернуть InvalidId();
}
TransferFrom(from_, to_, id_);
если (
to_.code.length != 0 &&
ERC721Receiver(to_).onERC721Received(msg.sender, from_, id_, data_) !=
ERC721Receiver.onERC721Received.селектор
) {
вернуть UnsafeRecipient();
}
}
3. Улучшенная логика создания и записи.
В отличие от версии 1, при торговле токенами ERC404 версии 2 соответствующий NFT не будет уничтожен. Вместо этого все идентификаторы NFT хранятся в двусторонней очереди для повторного использования. Таким образом, NFT, соответствующий ERC404, аналогичен типичному токену ERC721. То же, что и монеты. Такой подход не только снижает потребление газа, но и упрощает логику передачи ERC404.

Усовершенствования ERC404 v2 делают ERC404 более масштабируемым и устойчивым, но все еще существуют некоторые риски безопасности, заслуживающие внимания:
1.
Функция белого списка
ERC404 позволяет определенным адресам из белого списка передавать токены ERC721 внутри компании, которые можно использовать для оптимизации использования газа конкретными контрактами или адресами. Однако это также может привести к проблемам централизации или возможности злоупотреблений.
абстрактный контракт ERC404 является IERC404 {
.......
маппинг(адрес => bool) public erc721TransferExempt;
......
// Обрабатывает исключения ERC-721.
функция _transferERC20WithERC721(
//экономим газ за счет внутренней торговли
}
}
2.
Проблема с передаточной функцией
Функция TransferFrom обрабатывает передачи ERC20 и ERC721 и различает логику двух стандартов токенов на основе параметра valueOrId_. Разработчики или пользователи могут допускать ошибки при вызове этой функции, поскольку эта функция предполагает, что если значение перевода превышает значение счетчика чеканки, то передача связана с передачей токенов ERC20.
функция TransferFrom(
адрес от_,
Отправить_,
uint256 значениеOrId_
) публичные виртуальные возвраты (bool) {
......
if (valueOrId_ <= _minted) {
// Намерение — передать как токен ERC-721 (id).
uint256 идентификатор = valueOrId_;
......
}
3.
Оптимизация газа
Хотя ERC404 v2 значительно снизил плату за газ, необходимую для взаимодействия с пользователем, по сравнению с v1, по-прежнему существует много возможностей для улучшения. Например, в контракте ERC404 v2 используется специальный возврат ошибок NotFound() вместо оператора require с сообщением об ошибке, что увеличивает потребление газа.
4.
Отсутствие функции экстренной паузы.
Будучи новым протоколом, ERC404 может иметь потенциальные уязвимости контракта, которые нельзя игнорировать. Поэтому при разработке контракта командой следует рассмотреть возможность установки в контракте функции экстренной паузы и сформулировать план реагирования на риски, позволяющий быстро реагировать и устранять уязвимости при возникновении рисков.
Ранее Беосин упомянул вышеизложенные предложения по безопасности команде проекта при завершении аудита "Аватара", инновационного проекта на основе ERC404, который помог команде "Аватара" повысить безопасность своих смарт-контрактов и обеспечить безопасную работу системы. Проект «Аватар». Этот аудит включает в себя формальную проверку и ручной аудит экспертами по безопасности, чтобы убедиться, что код не имеет логических уязвимостей:

В целом, ERC404 пытается решить проблемы неделимости NFT и недостаточной ликвидности с новой точки зрения. По сравнению с предыдущими проектами фрагментации NFT, он начинается с собственных стандартов токенов, которые проще и эффективнее реализовать и предоставляют новые методы для торговли NFT. Однако ERC404 является относительно сложным контрактом среди контрактов токенов. Разработчикам необходимо обратить внимание на характеристики ERC20 и ERC721, а также на риски, которые могут быть введены при добавлении новых функций. Службам безопасности необходимо тщательно изучать взаимодействие между функциями ERC20 и ERC721 в ходе аудитов, а также влияние различных рисков оптимизации газа и централизации в контрактах ERC404.
Beosin — ведущая мировая компания по обеспечению безопасности блокчейнов. У него есть офисы в Сингапуре, Корее, Японии и других 10+ странах. Выполняя миссию "Защита экосистемы блокчейна", Beosin предлагает решение "все в одном" для обеспечения безопасности блокчейна, охватывающее аудит смарт-контрактов, мониторинг и оповещение о рисках, KYT/AML и отслеживание криптовалют. Beosin уже провела аудит более 3000 смарт-контрактов, и проекты ERC404 могут запросить у нас консультацию и аудит.