如何使用户电子邮件地址具有唯一性
Posted
技术标签:
【中文标题】如何使用户电子邮件地址具有唯一性【英文标题】:How to make user email address unique in solidity 【发布时间】:2021-09-03 04:11:00 【问题描述】:我想注册用户,并希望每个用户都有唯一的电子邮件地址。如果有人输入了已经从其他用户那里获得的电子邮件地址,则会显示错误消息。
【问题讨论】:
【参考方案1】: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
消息引发异常。
【讨论】:
我建议使用电子邮件哈希而不是原始字符串,因为对于这个用例,不需要将整个字符串存储在公共区块链中。 @MikkoOhtamaa 关于如何在solidity 中创建散列的任何想法? @AndrewMiracle 你可以使用内置的keccak256()
函数(docs)。以上是关于如何使用户电子邮件地址具有唯一性的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Jmeter 为 100 个手机号码和电子邮件唯一的用户加载测试注册 API