产品动态

您的位置: 首页产品动态

最新技术更多

开发实战:如何使用Web3.js API 在页面中进行转账

作者:Tiny熊(来源:巴比特——技术指南)发布时间:2018-12-28

 写在前面

 

阅读本文前,你应该对以太坊、智能合约、钱包的概念有所了解,如果你还不了解,建议你先看以太坊是什么 除此之外,你最好还了解一些HTML及JavaScript知识。

 

转账UI 页面的编写

 

转账UI主体的界面如图:

 

https://attachfiles.oss-cn-beijing.aliyuncs.com/attachFiles/p2p_article/p2p_article/90969540455564505439589852123811/20190531145619968.png

 

实现这个界面很简单,这里就不代码了。大家可以打开Demo,右击查看页面源码。

 

用户环境检查

 

既然需要使用Web3.js API 在页面中进行转账, 首先应该检查在浏览器环境有没有安装好钱包,并且钱包应该是解锁状态。

 

1.先检查是否安装了MetaMask钱包:

 

https://attachfiles.oss-cn-beijing.aliyuncs.com/attachFiles/p2p_article/p2p_article/86713048630848658714528710123416/20190531145648875.png

 

MetaMask推荐在window加载时,进行MetaMask的检查,当然在没有安装MetaMask时,也可以指定一个节点Provider来创建web3,可以参考Web3.js 文档引入web3

 

1.检查是否钱包已经解锁: 我们在发送交易之前应该先首先检查一下当前钱包的一个状态,检查钱包是否解锁(是否输入了密码进入了MetaMask),通常使用eth下面的getAccounts来进行检查,getAccounts是会返回账号的一个列表,如果当前账号列表里面有数据的话,说明钱包已经解锁可以获得到账号,如果账号拿到的列表是空的话,那么说明钱包没有解锁。

 

可以把下面的代码加到上面的监听函数中:

 

https://attachfiles.oss-cn-beijing.aliyuncs.com/attachFiles/p2p_article/p2p_article/45496658927886508857648404210148/20190531145719046.png

 

发送交易

 

如果MetaMask钱包是解锁的,我们就可以来发送交易,发送交易使用sendtransaction这个方法。

 

https://attachfiles.oss-cn-beijing.aliyuncs.com/attachFiles/p2p_article/p2p_article/82961149194173355892255160116889/20190531145736562.png

 

第二个参数是回调函数用来获得发送交易的Hash值。

 

第一个参数是一个交易对象,交易对象里面有几个字段:

 

from : 就是从哪个账号发送金额

to : 发动到到哪个账号

value 是发送的金额

gas: 设置gas limit

gasPrice: 设置gas 价格

 

如果from没有的话,他就会用当前的默认账号, 如果是转账to和value是必选的两个字段。 在发送交易的时候弹出来MetaMask的一个授权的窗口,如果我们gas和gasPrice没有设置的话,就可以在MetaMask里面去设置。如果这两个gas和gas Price设置了的话,MetaMask就会使用我们设置的gas。

 

因此在发送交易的时候,关键是构造这样一个交易对象,JavaScrpt代码如下:

 

https://attachfiles.oss-cn-beijing.aliyuncs.com/attachFiles/p2p_article/p2p_article/43880201034108529333255829066371/20190531145756515.png

 

补充说明:$('#fromAccount').val()是使用JQuery用来获取用户输入内容,其次应该在实际构造发送交易之前对输入的参数做一个判断,web3.isAddress用来检查字符串是不是地址。另外对于一个向普通外部地址账号的转账,消耗的gas 是固定的21000。

 

运行测试

 

需要注意一点的是,由于安全原因,MetaMask只支持站点方式访问的页面,即通过http:// 来访问页面,在浏览器中通过file:// + 文件地址的方式是不行的。 因此需要把编写的代码放置到web服务器的目录下,自己试验下。

 

线上的Demo地址为https://web3.learnblockchain.cn/transDemo.html。以太坊DApp开发视频课程以太坊DAPP开发实战。

 

深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。

联系我们

400-090-3910

(北京总部:全国统一咨询热线)

北京地址:北京市朝阳区领地OFFICE1号楼A座1403

上海分部:13911340419

上海地址:上海市宝山区泸太路6395号1_2层B区2440室

广州分部:13161766437

广州地址:广州市天河区广汕一路715号2号楼1-7楼405-5房

关注我们 了解最新动态消息
关注微信
关注微博
专题子站: