TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.49K subscribers
Post #1393 845
Стандарт ERC-6909 Minimal Multi-Token Standard. Часть 1

Следующий цикл постов я хочу посвятить этому интересному стандарту.

ERC-6909 - это оптимизированная альтернатива ERC-1155. Он представляет интерфейс для нескольких токенов, который позволяет одному смарт контракту включать в себя fungible and non-fungible токены (т. е. ERC20 и ERC721).

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

Однако он привел к некоторому раздуванию и газовой неэффективности из-за обязательных callbacks для каждого трансфера, принудительного включения batch transfer и отсутствия тонкого контроля разрешений одного оператора. ERC-6909 устраняет эти недостатки, а как - узнаем дальше.

ERC-6909 удаляет требование callbacks

Спецификация ERC-1155 требует, чтобы функции safeTransferFrom и safeBatchTransferFrom проверяли, является ли получатель контрактом. Если это так, то они ОБЯЗАТЕЛЬНО должны вызвать функции интерфейса ERC1155TokenReceiver (onERC1155Received, onERC1155BatchReceived) в контракте-получателе, чтобы проверить, принимает ли он переводы.

Эти callbacks полезны в некоторых случаях. Однако они становятся ненужными внешними вызовами для получателя, который хочет отказаться от такого поведения. Callbacks влияют на стоимость газа и размер кода контрактов-получателей, поскольку требуют реализации нескольких callback-функций (например, onERC1155Received, onERC1155BatchReceived) и возврата специальных 4-байтовых значений для получения токенов. В отличие от этого, разработчики, реализующие стандарт ERC-6909, могут самостоятельно выбирать архитектуру своих callback-функций.

ERC-6909 не включает логику пакетных переводов (batch transfer)

Пакетные переводы, несмотря на свою полезность в некоторых случаях, намеренно исключены из стандарта ERC-6909. Это позволяет разработчикам реализовывать логику таких переводов, адаптированную под конкретные среды исполнения. Разработчики могут реализовать переводы любым удобным для них способом и не обязаны добавлять дополнительную функцию переводов только ради соответствия стандарту.

Функция safeBatchTransferFrom , показанная ниже, отвечает за выполнение таких переводов в стандарте ERC-1155. Однако её обязательное присутствие увеличивает объём кода у приложений, которым такие функции не нужны:

// ERC-1155
function safeBatchTransferFrom(
address _from,
address _to,
uint256[] calldata _ids,
uint256[] calldata _values,
bytes calldata _data
) external;


Ниже представлена функция ERC-6909 transferFrom. Видно, что функция batch и параметр _data были удалены.

// ERC-6909
function transferFrom(
address sender,
address receiver,
uint256 id,
uint256 amount
) public returns (bool) {
if (sender != msg.sender && !isOperator[sender][msg.sender]) {
uint256 senderAllowance = allowance[sender][msg.sender][id];
if (senderAllowance < amount) revert InsufficientPermission();
if (senderAllowance != type(uint256).max) {
allowance[sender][msg.sender][id] = senderAllowance - amount;
}
}
if (balanceOf[sender][id] < amount) revert InsufficientBalance();
balanceOf[sender][id] -= amount;
balanceOf[receiver][id] += amount;
emit Transfer(msg.sender, sender, receiver, id, amount);
return true;
}

ERC-6909 поддерживает как глобальные разрешения, так и детализированные лимиты

// in ERC-1155 →
function setApprovalForAll(
address _operator,
bool _approved
) external;


Функция setApprovalForAll , показанная выше, реализует модель глобального оператора из стандарта ERC-1155. Она позволяет одному аккаунту авторизовать другой аккаунт для управления (в качестве оператора) всеми идентификаторами токенов от его имени. После авторизации оператор получает неограниченный доступ к переводу любых количеств любых токенов, принадлежащих авторизующему аккаунту.

Хотя этот подход упрощает делегирование прав, он не предоставляет возможности точного контроля:
  • ❤ 2
More from @solidityset
  1. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  2. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  3. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  4. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
  5. Sep 9, 2026Работа с чистой энергией Дисклеймер Сегодня ава и название канала, наконец, поменялись. Я…
  6. Sep 9, 2026Channel name was changed to «Из Solidity в AI и дальше»
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →