Criaremos uma lista de permissão (allowedList) para que apenas as pessoas que estiverem nela possam modificar o valor da variável storedInfo. O dono do contrato será o único que poderá adicionar ou remover pessoas da lista branca.
Passos a seguir:
Programe o contrato no Remix,
Faça o deploy do contrato no Remix,
Adicione endereços na allowedList utilizando aqueles fornecidos pelo Remix,
Verifique que apenas as pessoas incluídas na allowedList podem modificar o valor de storedInfo.
Código Solidity
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
/// @title Conceitos: mapping e controle de acesso: allowedList
/// @author Solange Gueiros
contract Whitelist {
string private storedInfo;
address public owner;
mapping (address => bool) public allowedList;
// O construtor inicializa o owner e o inclui na whitelist
constructor() {
owner = msg.sender;
allowedList[msg.sender] = true;
storedInfo = "Hello world";
}
modifier onlyOwner {
require(msg.sender == owner,"Somente o dono");
_;
}
// Requer que quem enviar a transação esteja na whitelist
modifier onlyAllowedlist {
require(allowedList[msg.sender] == true, "Somente alowedList");
_;
}
// setInfo só é acessível por quem está na allowedList
function setInfo(string memory myInfo) external onlyAllowedlist {
storedInfo = myInfo;
}
// addMember só é acessível pelo dono do contrato
function addMember (address member) external onlyOwner {
allowedList[member] = true;
}
// delMember só é acessível pelo dono do contrato
function delMember (address member) external onlyOwner {
allowedList[member] = false;
}
function getInfo() external view returns (string memory) {
return storedInfo;
}
}