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).