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.0pragma 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.