阅读 4004

以太坊智能合约开发实战

背景

经过前面两章的学习,相信大家已经对区块链有了一定认知,那么,区块链技术可以为互联网带来哪些改变呢?

区块链本身的特性是去中心化,以及无法篡改,源于此特性:商品溯源、区块链发票、电子货币、保险理赔、游戏互通等都变得易于实现

以谜恋猫为例,我们简单介绍下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

文章分类
后端
文章标签