Estándares ERC para la emisión de tokens en Ethereum

Los estándares ERC definen interfaces comunes para contratos de tokens en Ethereum. Su adopción permite que billeteras, exchanges y otras dapps interactúen con cualquier implementación compatible sin conocer su código interno.

ERC-20: activos fungibles

EIP-20 establece el contrato de referencia para tokens fungibles, donde cada unidad es idéntica e intercambiable. La interfaz mínima incluye métodos para consultar metadatos, saldos, transferencias y autorizaciones de gasto.

interface IFungibleToken {
    // Metadatos
    function name() external view returns (string memory tokenName);
    function symbol() external view returns (string memory tokenSymbol);
    function decimals() external view returns (uint8 precision);

    // Suministro y saldos
    function totalSupply() external view returns (uint256 maxSupply);
    function balanceOf(address account) external view returns (uint256 accountBalance);

    // Transferencias directas
    function transfer(address recipient, uint256 amount) external returns (bool success);

    // Transferencias delegadas
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool success);
    function approve(address spender, uint256 amount) external returns (bool success);
    function allowance(address owner, address spender) external view returns (uint256 remainingAmount);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

decimals indica la cantidad de posiciones decimales: si vale 18, una unidad mínima representa 10⁻¹⁸ tokens. approve autoriza a un tercero a mover fondos desde la cuenta del llamante, mientras que transferFrom ejecuta ese movimiento previa autorización.

ERC-721: activos no fungibles

EIP-721 modela tokens únicos e indivisibles. Cada activo se identifica mediante un uint256 distinto y cuenta con un único propietario, lo que permite representar objetos de colección, identidades digitales o derechos de propiedad.

interface INonFungibleToken {
    // Consulta de propiedad
    function balanceOf(address holder) external view returns (uint256 ownedCount);
    function ownerOf(uint256 assetId) external view returns (address currentOwner);

    // Autorizaciones
    function approve(address delegate, uint256 assetId) external payable;
    function getApproved(uint256 assetId) external view returns (address delegate);
    function setApprovalForAll(address operator, bool authorized) external;
    function isApprovedForAll(address holder, address operator) external view returns (bool approved);

    // Transferencias
    function transferFrom(address currentOwner, address newOwner, uint256 assetId) external payable;
    function safeTransferFrom(address currentOwner, address newOwner, uint256 assetId) external payable;
    function safeTransferFrom(address currentOwner, address newOwner, uint256 assetId, bytes calldata extraData) external payable;

    // Metadatos
    function name() external view returns (string memory collectionName);
    function symbol() external view returns (string memory collectionSymbol);
    function tokenURI(uint256 assetId) external view returns (string memory resourceLocation);

    // Enumerabilidad
    function totalSupply() external view returns (uint256 issuedCount);
    function tokenByIndex(uint256 index) external view returns (uint256 assetId);
    function tokenOfOwnerByIndex(address holder, uint256 index) external view returns (uint256 assetId);

    event Transfer(address indexed previousOwner, address indexed newOwner, uint256 indexed assetId);
    event Approval(address indexed assetOwner, address indexed approvedAccount, uint256 indexed assetId);
    event ApprovalForAll(address indexed assetOwner, address indexed authorizedOperator, bool approved);
}

Las variantes safeTransferFrom verifican que el destinatario sea una cuenta externa o un contrato que implemente IERC721Receiver, evitando así la pérdida accidental de activos en direcciones que no pueden gestionarlos.

Otros estándares relevantes

  • ERC-1155: contratos multi-token que gestionan tanto activos fungibles como no fungibles dentro de una misma implementación, reduciendo costes de despliegue y transferencia.
  • ERC-918: especificación para tokens minables mediante prueba de trabajo dentro del propio contrato.
  • ERC-888 y ERC-1178: propuestas orientadas a representar múltiples clases de activos y balances multidimensionales.
  • ERC-874: propuesta cerrada que exploraba mecanismos de transferencia con pesos no fungibles.

Etiquetas: ERC-20 ERC-721 ERC-1155 ERC-918 Solidity

Publicado el 6-30 05:38