solidity编写登录注册
时间: 2023-06-30 16:09:24 浏览: 122
solidity_simple:Sinatra的超级简单登录
以下是一个简单的 Solidity 合约,用于实现基本的登录和注册功能:
```solidity
pragma solidity ^0.8.0;
contract Login {
struct User {
string username;
string password;
}
mapping(address => User) private users;
event UserRegistered(address indexed user, string username);
event UserLoggedIn(address indexed user, string username);
function register(string memory _username, string memory _password) public {
require(bytes(_username).length > 0, "Username can't be empty");
require(bytes(_password).length > 0, "Password can't be empty");
require(users[msg.sender].username == "", "User already registered");
users[msg.sender] = User(_username, _password);
emit UserRegistered(msg.sender, _username);
}
function login(string memory _username, string memory _password) public view returns(bool) {
require(bytes(_username).length > 0, "Username can't be empty");
require(bytes(_password).length > 0, "Password can't be empty");
User storage user = users[msg.sender];
if (keccak256(bytes(user.username)) == keccak256(bytes(_username)) &&
keccak256(bytes(user.password)) == keccak256(bytes(_password))) {
emit UserLoggedIn(msg.sender, _username);
return true;
} else {
return false;
}
}
}
```
该合约中定义了一个名为 `User` 的结构体,用于存储用户名和密码。使用 `mapping` 将每个用户的地址映射到其对应的 `User` 结构体中。
其中,`register` 函数用于注册新用户,并在注册成功后触发 `UserRegistered` 事件;`login` 函数用于验证用户登录信息,并在验证成功后触发 `UserLoggedIn` 事件。
在实际应用中,建议使用更加安全的加密算法存储用户密码,以保障用户信息的安全。
阅读全文