Supongamos que en un sistema bancario muchas personas están inscritas (gestionadas a través de mapeo)mapping (address => bool) enrolled;
Y solo pueden depositar los que están inscritos en el banco.
¿Puedo comprobar si msg.sender existe como clave en la asignación anterior?
El valor predeterminado de un bool en una asignación es false
. Si también lo usa false
como parte de su sistema de seguimiento, entonces no, no podrá saber si se ha establecido un valor false
o si no se ha establecido en absoluto.
Para eso, es posible que necesite una segunda asignación que rastree si el valor se ha establecido antes.
mapping (address => bool) enrolledSet;
Aquí hay una forma mínima de cubrir el acceso aleatorio, contando únicos e iterando sobre la lista.
pragma solidity 0.5.0;
contract InterableMapping {
address[] public addressList;
mapping(address => bool) public isAddress;
function insertAddress(address customer) public {
require(!isAddress[customer]);
addressList.push(customer);
isAddress[customer] = true;
}
function getAddressCount() public view returns(uint count) {
return addressList.length;
}
}
Puede agregar una eliminación temporal configurando el bool
en falso.
function disableCustomer(address customer) public {
require(isAddress[customer]);
isAddress[customer] = false;
}
Eche un vistazo aquí para ver diferentes patrones: ¿Existen patrones de almacenamiento sencillos y bien resueltos para Solidity?
Espero eso ayude.
Sí, con tu ejemplo, puedes hacer lo siguiente:
require(enrolled[msg.sender]);
CryptoScroller
shawn tabrizi