Reto: control de acceso
Clase 5 de 19 • Curso 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).