Web3.0-使用metamask获取某个账号(钱包地址)的余额、交易回执
获取某个账号(钱包地址)的最新余额
以下代码就是获取制定账户余额的方法,获取到的余额是16进制的wei,在获取余额成功后我已经做了转换,params中两个参数,第1个是你要查询的账户(钱包地址),第2个是固定参数,表示最新余额。
//获取余额 ethereum.request({ method: 'eth_getBalance', params: [ '0xBcFf5a3c1970D795777d7471F2792832BAF5679d' , 'latest' ] }) .then((result) => { console.log("获取余额success--->" + result) let formartEther = ethers.utils.formatEther(result); //16进制的wei console.log(formartEther) }) .catch((error) => { console.log("获取余额error--->" + error.code) });
或者:
// 连接账号 function connect() { console.log('Calling connect()') ethereum .request({ method: 'eth_requestAccounts' }) .then(handleAccountsChanged) .catch((err) => { if (err.code === 4001) { // EIP-1193 userRejectedRequest error // If this happens, the user rejected the connection request.账号拒绝登录metamask console.log('Please connect to MetaMask.'); $('#status').html('You refused to connect Metamask') } else { console.error(err); } }); }
获取交易回执
//发出支付请求 ethereum .request({ method: 'eth_sendTransaction', params: [ { from: fromAddress, to: toAddress, value: value, } ] }) .then((result) => { console.log(result) //'0xec9026d3a9d4cd4d44ac7cd49186a05c8a2db4d697a05207d8e804d2a245455a' if (result != null || result != undefined){ console.log("开始计时") let paramsStr = []; //对应查询时的参数params,列表 paramsStr[0] = result; //需要等待十秒 才能收到回执单信息 返回回执代码串 和 回执单不是同时的 所以有时候能直接通过回执代码串获取到回执单 有时候获取不到 可能跟网速有关系 所以在获取到 //回执代码串之后 延时十秒再获取回执单即可 setTimeout(function () { getReceipt(paramsStr) // 10秒后执行下面的函数,获取交易回执 },10000); } }) .catch((error) => { }); //获取回执单的方法 function getReceipt(paramsStr) { ethereum.request({ method: 'eth_getTransactionReceipt', params: paramsStr }) .then((result) => { console.log(result) }) .catch((error) => { console.log("error--->" + error.message) // If the request fails, the Promise will reject with an error. }); }
//发出支付请求之10秒后,通过返回值paramsStr,即Transaction Hash从以太坊交易中读取交易回执信息。

编辑切换为居中
回执:

编辑切换为居中
实际操作
在交易提交返回到Transaction Hash时,说明交易成功,可以在这个时候将Transaction Hash及其他交易信息,一并提交至数据库。至于获取订单回执,随时可以通过钱包地址及Transaction Hash获取。
