Pular para conteúdo

ERC-1155

ERC-1155 é um padrão multi- token: um único contrato pode gerenciar vários tipos de tokens distintas simultaneamente (alguns fungible, alguns não-fungible, em qualquer combinação) onde ERC-20 e ERC-721 cada um requer uma implantação de contrato separada por tipo de tokens. Este capítulo abrange a interface e o ganho específico de eficiência (batch) que o motivou.

A interface do núcleo

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

interface IERC1155 {
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(
        address[] calldata accounts,
        uint256[] calldata ids
    ) external view returns (uint256[] memory);

    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
}

Verificado: isto compila-se perfeitamente com solc 0.8.26.

Um contrato, muitos tipos de tokens

Aviso balanceOf Toma. dois parâmetros (uma conta e um ID token) diferente da versão de um parâmetro único do ERC-20. Este contrato único pode representar, simultaneamente: uma moeda fungível no jogo (muitos endereços diferentes cada detentor de uma quantidade de id = 1), uma edição limitada coleccionável (id = 2, com uma quantidade total fixa, pequena, funcionando muito como um token ERC-721, mesmo que seja implementado através da mesma interface), e qualquer número de outros tipos distintos. Cada id funciona efetivamente como seu próprio símbolo independente, todos gerenciados por um contrato implantado.

Batting: a motivação real e prática

safeBatchTransferFrom e balanceOfBatch permite que muitos tipos de tokens sejam transferidos ou consultados numa única transação, diretamente análogo à poupança de taxa on-chain demonstrada com números reais em Correcção de Transações, um jogo distribuindo dezenas de diferentes tipos de itens no jogo para um jogador em uma transação paga uma fração do que dezenas de transferências separadas ERC-721 ou ERC-20, cada um com sua própria sobrecarga de transação fixa, custaria. Esta é a vantagem mais concreta e prática do ERC-1155 sobre a implantação de muitos contratos de token de propósito único: economia de gás real e mensurável para qualquer aplicação que gerencie vários tipos de token que precisam se mover juntos.

Conceitos errôneos comuns

ERC-1155 não substitui ERC-20 ou ERC-721 como "melhor norma" em todos os casos, um projeto que precisa genuinamente de apenas um token fungible, sem outros tipos de token para gerenciar, geralmente não tem razão para adicionar a complexidade do modelo multi-token; as vantagens do ERC-1155 são especificamente sobre gerenciar muitos tipos de token distintos de forma eficiente, não sobre ser uma interface estritamente superior para um caso de uso único.

safeTransferFrom no ERC-1155 requer sempre a verificação do contrato do destinatário, ao contrário do ERC-721, que ERC-721) oferece simultaneamente um controle (safeTransferFrom) e sem controle (transferFrom) caminho; ERC-1155 não tem nenhum desmarcado transferFrom equivalente em tudo, significa que cada transferência para um endereço de contrato passa pelo onERC1155Received (ou onERC1155BatchReceived) chamada de regresso por projeto, uma exigência de segurança deliberadamente mais consistente do que a abordagem de dois níveis do ERC-721.

Outras leituras


← Anterior: ERC-721 · Voltar aos Tokens · Próximo: NFT Metadata →