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

2018-03-04 23:12:04

目标:

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

总结:

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

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

补充:

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

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

基于React+truffle的完整智能合约构建

内容:使用solidity的truffle框架开发智能合约,前端使用react框架,最终完成智能合约从前端到后端,从开发到部署的完整流程。 1、truffle安装 在nodejs安装完成的环境下,全局安装truffle:cnpm i -g truffle。 Truffle Boxes是truffle框架集成的脚手架工具,可以使用这个脚手架快捷的生成完备的DAPP的项目结构,其中集成了前端视图、编译压缩工具等。可以在http://truffleframework.com/boxes/中查看并选择合适的模板来进行项目初始化。 2、项目初始化 这里我在http://truffleframework.com/boxes/上选择react模板来开发DAPP,直接在终端执行truffle unbox React即可完成项目的初始化,期间需要安装nodejs依赖,耐心等待即可(都没个安装进度提示,差评!)。 ludis@MacBook -> ~/Desktop/golang -> mkdir truffle && cd

DAPP结合IPFS — 去中心化图床

内容:打造一款去中心化图床,用户可上传图片至IPFS上,文件hash保存在以太坊的区块上,以此实现永存的去中心化图床。 技术栈:依旧使用truffle框架快速构建项目truffle unbox react 1、什么是 IPFS 星际文件系统IPFS(InterPlanetary File System)是一个面向全球的、点对点的分布式版本文件系统,目标是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP),将所有具有相同文件系统的计算设备连接在一起。原理用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。 直白了说,就是类似BT下载的p2p文件存储、传输系统。 2、安装 IPFS IPFS官网下载对应系统的安装包(需要翻墙) 以Mac为例,终端执行: cd /Users/ludis/Downloads tar xvfz go-ipfs_v0.4.