Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de OpenZeppelin

Curso de OpenZeppelin

Sebastián Leonardo Perez

Sebastián Leonardo Perez

Reto: utilidades

16/19
Recursos

Aportes 4

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Comparto mi solución:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";

contract IdentificadorToken {

      using ERC165Checker for address;
      
      modifier onlyERC20(address _direccion) {
            require(_direccion.supportsInterface(type(IERC20).interfaceId),"La Direccion no es compatible, no es un token ERC20");
            _;
      }
      modifier onlyERC721 (address _direccion){
            require(_direccion.supportsInterface(type(IERC721).interfaceId),"La Direccion no es compatible, no es un token ERC721");
            _;
      }

      function verificarERC20(address _direccion) onlyERC20(_direccion) public view returns(string memory) {
            return "La Direccion es compatible, es un token ERC20";
      }

      function verificarERC721(address _direccion) onlyERC721(_direccion) public view returns(string memory) {
           return "La Direccion es compatible, es un token ERC721";
      } 
}

Mi solución al desafio:

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

import "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";

contract Verification {
    using ERC165Checker for address;

    bytes4 private InterfaceId_ERC721 = 0x80ac58cd;
    bytes4 private InterfaceId_ERC20 = 0x36372b07;

    function tryERC721(
        address token
    )
        public view returns(bool)
    {
        return token.supportsInterface(InterfaceId_ERC721);
        
    }

    function tryERC20(
        address token
    )
        public view returns(bool)
    {
        return token.supportsInterface(InterfaceId_ERC20);
        
    }
}

Luego de ver la solucion entendi mejor el uso de using en librerias.

Reto:

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

import "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
import "@openzeppelin/contracts/interfaces/IERC20.sol";
import "@openzeppelin/contracts/interfaces/IERC721.sol";



contract obervador  {

    function isTokenERC20(address account) public view returns (bool) {
        return ERC165Checker.supportsInterface(account, type(IERC20).interfaceId);
    }

    function isTokenERC721(address account) public view returns (bool) {
        return ERC165Checker.supportsInterface(account, type(IERC721).interfaceId);
    }
        
}