Reto: control de acceso
Clase 5 de 19 • Curso de Introducción a OpenZeppelin
Contenido del curso
Control de acceso
Tokens
Utilidades
Conceptos avanzados
Despedida
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).