智能合约在DApp项目中使用
本篇内容将介绍如何将部署好的智能合约整合到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,目的是为了在非公网情况下更方便更有效地满足本地开发的需要。感谢您的阅读,下一篇再见!
声明:本站所提供的资讯信息不代表任何投资暗示, 本站所发布文章仅代表个人观点,仅供参考。