一个完整的智能合约—区块链上永存的留言

目标:

基于以太坊开发一个完整的DAPP应用,实现留言及随机展示留言功能。

总结:

本次从零开发发哦部署上线约耗时六小时,前期在solidity合约开发上费时较多,主要是对其语言特性不了解,后续在react的动画上有些费时,源于对动画的生疏及类库的选择。
整个的开发流程比较清晰:

  1. 编写、调试合约
  2. 编写react前端页面、与合约交互的逻辑、显示逻辑、动画等
  3. 部署合约,与前端联调
  4. 编译项目,上传代码,配置nginx解析。

补充:

整个项目的的实现比较简单,这里不做具体分析,可以git查看,同时参考前几篇文章即可。这里贴一下solidity合约开发中开始的一些“美(错)好(误)想(代)法(码)”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
pragma solidity ^0.4.19;

contract SimpleStorage {

// 定义存储留言的数据结构
struct Message {
string word; // 留言
string time; // 写入时间
}

mapping(address => Message[]) public words; // 以字典形式存储

// 写入留言
function setWord(string s, string t) public {
if(words[msg.sender].length==0) {
addrArr.push(msg.sender);
}
words[msg.sender].push(Message({
word: s,
time: t
}));
}

// 获取某地址对应的所有留言(获取我的所有留言)
function getWordByAddress() public view returns (Message[]) {
return words[msg.sender];
}

// 随机返回十条留言
function getRandomWord() public view returns (Message[]) {
Message[] memory result;
for w, i := range words {
result.push(w)
if(i==9) break;
}
return result;
}

}

solidity熟悉的大佬应该看完几声冷笑。是的,以下是重点!!!:

  1. solidity中的字典不支持枚举/遍历
  2. solidity中对外暴露的函数不能返回字典/结构体/数组(简单的数字类型数组除外)

这两点实在是让我觉得solidity很鸡肋?没有了这两个语言特性,使得智能合约的功能复杂度上限制很大,这或许就是没有“杀手级”应用出现的原因之一。不过话说回来,毕竟solidity还很年轻,相信随着时间推进,这门语言会愈加完善健全。

组织

喜欢智能合约开发的同志,请加qq交流群 236380268

Author

Ludis

Posted on

2018-03-04

Updated on

2018-03-04

Licensed under

Comments