@@ -15,6 +15,69 @@ timezone: UTC+8
1515## Notes
1616
1717<!-- Content_START -->
18+ # 2025-08-14
19+
20+ 部署一个简单的链上留言板项目。
21+
22+ 代码:
23+
24+ ``` solidity
25+ //SPDX-License-Identifier:MIT
26+ pragma solidity ^0.8.0;
27+
28+ contract MessageBoard{
29+ //保存所有人的留言记录
30+ //每个地址对应一个字符串数组,存储该用户的所有留言
31+ mapping(address => string[]) public messages;
32+
33+ //留言事件,便于检索器和区块链浏览器追踪
34+ //indexed参数:address标记为indexed,可以高效过滤特定地址的留言事件
35+ event NewMessage(address indexed sender, string message);
36+
37+ //构造函数,在部署时留言一条欢迎词
38+ constructor(){
39+ //在函数参数和局部变量中使用memory表示数据临时存储在内存中
40+ string memory initMsg = "Hello ETH Pandas";
41+ //将消息存入部署者(msg.sender)的留言数组中
42+ //msg是内置全局变量,msg.sender获取部署者地址
43+ messages[msg.sender].push(initMsg);
44+ //触发NewMessage事件记录这次初始化留言
45+ emit NewMessage(msg.sender, initMsg);
46+
47+ }
48+
49+ //发送一条留言
50+ function leaveMessage(string memory _msg) public{
51+ messages[msg.sender].push(_msg); //添加到发言记录
52+ emit NewMessage(msg.sender, _msg); //发出事件
53+ }
54+
55+ // 查询某人第 n 条留言(从 0 开始)
56+ //view修饰符:表示只读取不修改链上状态,不消耗gas
57+ function getMessage(address user, uint256 index) public view returns (string memory) {
58+ return messages[user][index];
59+ }
60+
61+ // 查询某人一共发了多少条
62+ function getMessageCount(address user) public view returns (uint256) {
63+ return messages[user].length;
64+ }
65+ }
66+ ```
67+
68+ 部署成功,命令终端查看部署日志和构造函数的执行信息:
69+
70+ ![ f45dcd7c978c53d457709f1ada0fb02c] ( https://adurey-picture.oss-cn-chengdu.aliyuncs.com/img/20250814230613147.PNG )
71+
72+ 调用留言函数:
73+
74+ 1 . 在合约实例中找到 ` leaveMessage ` 函数输入框;
75+ 2 . 在输入框中填入留言内容(例如:` Hello World ` );
76+ 3 . 点击 ** leaveMessage** 按钮,发起交易调用;
77+ 4 . 右侧命令终端将显示一条新的交易记录,点击该记录可查看交易详情与链上存储的留言信息。
78+
79+ ![ bc928a779b51d6176e7f3a38f7237f50] ( https://adurey-picture.oss-cn-chengdu.aliyuncs.com/img/20250814230613161.PNG )
80+
1881# 2025-08-13
1982
2083# ERC-20标准
0 commit comments