本文首发于深刻浅出区块链社区 原文连接:如何使用Web3.js API 在页面中进行转帐原文已更新,请读者前往原文阅读html
本文介绍如何使用Web3.js API 在页面中进行转帐,是我翻译的文档Web3.js 0.2x 中文版 及 区块链全栈-以太坊DAPP开发实战 中Demo的文章说明。web
阅读本文前,你应该对以太坊、智能合约、钱包的概念有所了解,若是你还不了解,建议你先看以太坊是什么 除此以外,你最好还了解一些HTML及JavaScript知识。浏览器
转帐UI主体的界面如图: 安全
实现这个界面很简单,这里就不代码了。你们能够打开Demo,右击查看页面源码。服务器
既然须要使用Web3.js API 在页面中进行转帐, 首先应该检查在浏览器环境有没有安装好钱包,而且钱包应该是解锁状态。app
window.addEventListener('load', function() { if (typeof web3 !== 'undefined') { web3 = new Web3(web3.currentProvider); if (web3.currentProvider.isMetaMask == true) { // "MetaMask可用" } else { // "非MetaMask环境" } } else { $("#env").html("No web3? 须要安装<a href='https://metamask.io/'>MetaMask</a>!"); } }
MetaMask推荐在window加载时,进行MetaMask的检查,固然在没有安装MetaMask时,也能够指定一个节点Provider来建立web3,能够参考Web3.js 文档引入web3ide
能够把下面的代码加到上面的监听函数中:函数
web3.eth.getAccounts(function (err, accounts) { if (accounts.length == 0) { $("#account").html("请检查钱包是否解锁"); } });
若是MetaMask钱包是解锁的,咱们就能够来发送交易,发送交易使用sendtransaction这个方法。学习
web3.eth.sendTransaction(transactionObject [, callback])
第二个参数是回调函数用来得到发送交易的Hash值。区块链
第一个参数是一个交易对象,交易对象里面有几个字段:
若是from没有的话,他就会用当前的默认帐号, 若是是转帐to和value是必选的两个字段。 在发送交易的时候弹出来MetaMask的一个受权的窗口,若是咱们gas和gasPrice没有设置的话,就能够在MetaMask里面去设置。若是这两个gas和gas Price设置了的话,MetaMask就会使用咱们设置的gas。
所以在发送交易的时候,关键是构造这样一个交易对象,JavaScrpt代码以下:
// 这里使用Metamask 给的gas Limit 及 gas 价 var fromAccount = $('#fromAccount').val(); var toAccount = $('#toAccount').val(); var amount = $('#amount').val(); // 对输入的数字作一个检查 if (web3.isAddress(fromAccount) && web3.isAddress(toAccount) && amount != null && amount.length > 0) { var message = {from: fromAccount, to:toAccount, value: web3.toWei(amount, 'ether')}; web3.eth.sendTransaction(message, (err, res) => { var output = ""; if (!err) { output += res; } else { output = "Error"; } } }
补充说明:$('#fromAccount').val()
是使用JQuery用来获取用户输入内容,其次应该在实际构造发送交易以前对输入的参数作一个判断,web3.isAddress
用来检查字符串是否是地址。另外对于一个向普通外部地址帐号的转帐,消耗的gas 是固定的21000。
须要注意一点的是,因为安全缘由,MetaMask只支持站点方式访问的页面,即经过http:// 来访问页面,在浏览器中经过file:// + 文件地址的方式是不行的。 所以须要把编写的代码放置到web服务器的目录下,本身试验下。
线上的Demo地址为https://web3.learnblockchain.cn/transDemo.html
想好好系统学习以太坊DApp开发,这门视频课程以太坊DAPP开发实战不容错过。
深刻浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。 深刻浅出区块链知识星球,最专业的区块链问题技术社区,欢迎加入,做为星友福利,星友还能够加入我建立优质区块链技术群,群内汇集了300多位区块链技术大牛和爱好者。