本篇内容将介绍如何将部署好的智能合约整合到Dapp项目中运行。

Dapp架构

首先确定我们Dapp的框架,目前使用是KOA架构 + nodejs 。

项目架构图

关于如何搭建koa框架及环境搭建,此处先不详细讲解会另起一篇再来详细介绍一下。

智能合约在Dapp中实现

如何在项目中配置合约信息

根据上一篇文章中在remix 线上IDE中编绎生成的合约地址和ABI信息拷贝到项目用一个工具函数封装。

如下图所示

如何基于私有网络创建Web3 对象

这是项目区块链网络连接的重点,创建Web3对象并配置私有链网络的连接地址参数。以下是代码示例(端口根据你创建私有链网络的配置)

通过web3对象获取eth余额

通过合约获得代币余额

项目完成后使用以下命令启动运行测试,然后根据项目中监听的端口,直接在浏览器上查看效果。

node index.js

私有链网络重启

为了安全起启,在运行项目前,先重启一下Terminal网络节点,确保运行DApp 合约正常。

重启terminal 窗口,并进行上次创建的geth 节点目录,然后执行跟上次开始执行geth 命令步骤相同

andychendeMacBook-Pro:prechainandy_mac$lseth_data genesis.json p2_data andychendeMacBook-Pro:prechain andy_mac$ geth --networkid 555 --dev --datadir "p2_data" --rpc --rpcaddr 127.0.0.1 --rpcport 8545 --port 3005

另外再启动一个新Terminal窗口,然后执行geth attach 加截节点并打开console

andychendeMacBook-Pro:p2_dataandy_mac$lsgethgeth.ipckeystoreandychendeMacBook-Pro:p2_dataandy_mac$gethattachipc:geth.ipcWelcome to the Geth JavaScript console!

验证私有链网络是否已启动运行正常

> personal.listAccounts

["0x7607a55b06370e59d041fc7b10ef85a327c61a79","0x7fcf166700c24466b7d57df5096136a52c0ffd1f","0x0a625c2e24b0aa7ae36982d4703f29973a940b78","0x0ca0685c064ec9aec2b602616823bd9b051ba246"]

> eth.getBalance(eth.accounts[0])

1.15792089237316195423570985008687907853269984665640564039455854007913129660935e+77

> eth.getBalance(eth.accounts[1])

200000000000000000

> eth.getBalance(eth.accounts[2])

1029999999999978992

> eth.getBalance(eth.accounts[3])

500000000000000000

> miner.setEtherbase(eth.accounts[2])

true

> miner.coinbase

undefined

> eth.coinbase

"0x0a625c2e24b0aa7ae36982d4703f29973a940b78"

>

如果验证网络处理正常状态,此时可以在浏览器中体验Dapp项目

注意:在dapp 中执行一笔交易后,需要回到terminal 上执行挖矿才最终达成交易,miner.start(1) —> miner.stop()

区块链钱包

使用Metamask 浏览器插件钱包

(如何安装Metamask插件,在另外篇文环境搭建中介绍)

打开metamask插件钱包并登录,选择localhost:8545 连接本地私有链

点击Metamask右上角用户,然后导入本地创建的新钱包地址,私有链钱包地址存放位置是在节点目录下的keystore目录。

导入钱包地址成功后可以看到类似以下图的一些个人账号信息,此时你就可以在你的Dapp应用中正常进行相关的交易操作了。

结语

Dapp是属于应用层的开发,如何设计出一款受欢迎的Dapp, 关键就是如何把智能合约设计得更合理更规范更符合市场的需要;本文算是私有链开发相关的收尾之作,它是以前两篇为基础实现基于私有链网络上开发Dapp,目的是为了在非公网情况下更方便更有效地满足本地开发的需要。感谢您的阅读,下一篇再见!