背景
经过前面两章的学习,相信大家已经对区块链有了一定认知,那么,区块链技术可以为互联网带来哪些改变呢?
区块链本身的特性是去中心化,以及无法篡改,源于此特性:商品溯源、区块链发票、电子货币、保险理赔、游戏互通等都变得易于实现
以谜恋猫为例,我们简单介绍下Dapp应用实现:
cryptokitties:聚众云吸猫的游戏,是基于以太坊平台运行的。用户在游戏中可以养大、买卖并繁育“电子宠物”小猫。

从商用角度审视,每一只猫都独立无二,具有"收藏价值",在谜恋猫游戏中,创世猫最后以77万RMB成交。 详情
从技术角度审视,智能合约生成“猫”数据,用户通过钱包购买此份数据,并做绑定。A猫和B猫做“繁殖”,通过算法(七种猫属性,每种256种情况)生成C猫。所有"猫数据"及交易明细存储在以太坊区块内。
Dapp应用开发
留言薄:镌刻用户新留言,也可以看到各自历史留言,永远保留,无法篡改
01 编写合约

- pragma solidity ^0.6.8 : solidity版本不高于0.6.8
- mapping(address=>string) public notes : mapping表示映射,键是address类型,键值是string[]类型
- event NewNote(address, string note) : 新增笔记成功后,事件记入日志,客户端可以通过web3订阅这些事件,可以理解为服务端回调
- getNotesLen() : 获取该用户留言总条数
- modifyNote() : 获取该用户所有留言内容
02 编写Web3.js交互
Web3:是一套和以太坊节点进行通信的API,其对节点暴露出来的JSON-RPC接口进行了封装,提供多种语言实现
简单来说,通过Web3来获取节点状态,获取账号信息,调用合约、监听合约事件等。
创建Web3实例
访问以太坊合约,首先要获取Web3实例,以太坊支持的浏览器(例如Mist或MetaMask)将具有ethereumProvider或web3.currentProvider可用。如下所示:

创建好Web3实例后,我们就可以做接口调用和交互
获取留言


新增留言

监听留言
当我们新增一则留言后,前端需要实时显示此留言,这里用到了js监听,对应我们合约中ModifyNote事件:

03 编译合约
执行truffle compile
04 部署到Rinkeby
Geth:以太坊区块链管理客户端,集成以太坊各种API
具体用法可参见 我们执行命令,将以太坊Rekinby同步至本地
Rinkeby:以太坊测试链
我们执行命令,将Rinkeby同步至本地:
geth --rinkeby --allow-insecure-unlock --syncmode "fast" --rpc --rpcapi db,eth,net,web3,personal --cache=1024 --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain “*”
Rinkey区块链示意:

在truffle.js完成配置

执行truffle migrate命令,成功部署智能合约到Rinkeby

Rinkeby部署,除了下载完整链路本地部署,还可以借助Infura部署
05 最终效果

06 尾声
笔者初衷是想将Dapp作超级账本,嵌入APP做核心日志所用,后面发现操作必须经由MetaMask或以太坊浏览器访问Dapp,有些小失望~
不过,Dapp也只有短短六年发展期,随着以太坊发展壮大,相信在未来,可以更好的落地与企业。
结语
边学边用成长最快,Truffle官方提供很多项目模板,其种类繁多,亦支持Vue、React框架,推荐深入实践。
Dapp开发由于技术新颖,除了以太坊基础概念,还需要掌握Solidity、Web3.js语言,以及MetaMask、Truffle、Geth、Rinkeby工具,不过大家调整好心态,戒骄戒躁,一定可以享受到新技术带来的乐趣~
参考资料:
以太坊数据同步常见问题 二师兄
基于Truffle编写、编译、部署和调用合约 未来边缘
以太坊实战之同步区块链 Mahesh Murthy