【发布时间】:2021-09-03 04:11:00
【问题描述】:
我想注册用户,并希望每个用户都有唯一的电子邮件地址。如果有人输入了已经从其他用户那里获得的电子邮件地址,则会显示错误消息。
【问题讨论】:
我想注册用户,并希望每个用户都有唯一的电子邮件地址。如果有人输入了已经从其他用户那里获得的电子邮件地址,则会显示错误消息。
【问题讨论】:
gas-wise 最便宜的选择是创建映射,其中键是字符串(电子邮件地址),值是布尔值(显示它是否已注册)。
然后您可以根据映射验证键的值是true 还是false。
pragma solidity ^0.8.5;
contract MyContract {
mapping (string => bool) isRegistered;
function register(string memory _email) external {
require(!isRegistered[_email], 'This e-mail is already registered');
// TODO perform the registration
isRegistered[_email] = true; // mark it as registered
}
}
试试看:
john@example.com 执行register() 函数。它通过了require() 语句,因为isRegistered['john@example.com'] 是false。然后它将isRegistered['john@example.com'] 映射值设置为true。require() 语句失败,因为isRegistered['john@example.com'] 已经是true,并使用This e-mail is already registered 消息引发异常。【讨论】:
keccak256()函数(docs)。