Reto: control de acceso

Clase 5 de 19Curso de Introducción a OpenZeppelin

Resumen

Es momento de afianzar los conocimientos y poner a prueba todo lo aprendido hasta aquí.

Desafío de roles y acceso en un contrato

Utilizando como base el siguiente contrato inteligente que puedes encontrar por defecto en el entorno de Remix.

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

/**
 * @title Storage
 * @dev Store & retrieve value in a variable
 * @custom:dev-run-script ./scripts/deploy_with_ethers.ts
 */
contract Storage {

    uint256 number;

    /**
     * @dev Store value in variable
     * @param num value to store
     */
    function store(uint256 num) public {
        number = num;
    }

    /**
     * @dev Return value 
     * @return value of 'number'
     */
    function retrieve() public view returns (uint256){
        return number;
    }
}

Implementa las siguientes funcionalidades:

  • Implementa dos roles: “Admin” y “Writer”.
  • El rol “Admin” podrá asignar nuevos “Writer”.
  • El rol “Writer” será el único habilitado a utilizar la función store() del contrato base.
  • La función retrieve() no tendrá limitaciones de acceso.
  • Utiliza modificadores para validar los permisos del usuario.

Ponte a prueba. Te aconsejo no hacerte spoiler con las soluciones de los compañeros. Has un esfuerzo primero por implementar tu solución antes de continuar.

Finalmente, comparte tu solución y compárala con otras. Nunca hay una sola solución a un mismo problema.


Contribución creada por: Kevin Fiorentino (Platzi contributor).