Angenommen, in einem Bankensystem sind viele Personen registriert (verwaltet durch Mapping).mapping (address => bool) enrolled;
Und nur diejenigen können einzahlen, die bei der Bank registriert sind.
Kann ich überprüfen, ob der msg.sender als Schlüssel in der obigen Zuordnung vorhanden ist?
Der Standardwert eines Bool in einem Mapping ist false
. Wenn Sie es auch als Teil Ihres Tracking-Systems verwenden false
, können Sie nicht feststellen, ob ein Wert festgelegt wurde false
oder überhaupt nicht.
Dazu benötigen Sie möglicherweise ein zweites Mapping, das nachverfolgt, ob der Wert zuvor festgelegt wurde.
mapping (address => bool) enrolledSet;
Hier ist eine minimale Möglichkeit, den wahlfreien Zugriff abzudecken, eindeutige Elemente zu zählen und die Liste zu durchlaufen.
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;
}
}
Sie können ein vorläufiges Löschen hinzufügen, indem Sie das bool
auf false setzen.
function disableCustomer(address customer) public {
require(isAddress[customer]);
isAddress[customer] = false;
}
Schauen Sie hier nach verschiedenen Mustern: Gibt es gut gelöste und einfache Speichermuster für Solidity?
Ich hoffe es hilft.
Ja, mit Ihrem Beispiel können Sie einfach Folgendes tun:
require(enrolled[msg.sender]);
CryptoScroller
Shawn Tabrizi