当前位置:   article > 正文

使用Web3JS的API在页面中进行转账交易-案例_eth_sendtransaction 转账金额

eth_sendtransaction 转账金额

注意:代码需要在服务端运行!!!切勿双击html文件运行,点击下载源文件

web3.eth.sendTransaction

  1. web3.eth.sendTransaction(transactionObject [, callback])
  2. 参数:
  3. Object - 要发送的交易对象。
  4. from: String - 指定的发送者的地址。如果不指定,使用web3.eth.defaultAccount。
  5. to: String - (可选)交易消息的目标地址,如果是合约创建,则不填.
  6. value: Number|String|BigNumber - (可选)交易携带的货币量,以wei为单位。如果合约创建交易,则为初始的基金。
  7. gas: Number|String|BigNumber - (可选)默认是自动,交易可使用的gas,未使用的gas会退回。
  8. gasPrice: Number|String|BigNumber - (可选)默认是自动确定,交易的gas价格,默认是网络gas价格的平均值 。
  9. data: String - (可选)或者包含相关数据的字节字符串,如果是合约创建,则是初始化要用到的代码。
  10. nonce: Number - (可选)整数,使用此值,可以允许你覆盖你自己的相同nonce的,正在pending中的交易11
  11. Function - 回调函数,用于支持异步的方式执行[async]。
  12. 返回值:
  13. String - 32字节的交易哈希串。用16进制表示

获取个人账户信息

  1. async function getAccount() {
  2. // 请求用户授权 解决web3js无法直接唤起Meta Mask获取用户身份
  3. const enable = await ethereum.enable();
  4. console.log(enable,11)
  5. // 授权获取账户
  6. // let accounts = await ethereum.request({ method: 'eth_requestAccounts' });
  7. let accounts = await web3.eth.getAccounts();
  8. AccountValue = accounts[0];
  9. console.log(AccountValue,1);
  10. // 返回指定地址账户的余额
  11. let balance = await web3.eth.getBalance(AccountValue);
  12. BalanceValue = web3.utils.fromWei(balance, 'ether');
  13. console.log(balance,BalanceValue,2);
  14. showAccount.innerHTML = AccountValue;
  15. showBalance.innerHTML = `wei:${balance}, ether:${BalanceValue}`;
  16. }

转账交易

  1. async function toPay() {
  2. showCont();
  3. // 转账
  4. var r = confirm("确认转账吗?");
  5. if (r == true) {
  6. // const res = await web3.eth.sendTransaction({
  7. // from:AccountValue,
  8. // to:toAccountValue,
  9. // value:toBalanceValue,
  10. // });
  11. // console.log(res);
  12. web3.eth.sendTransaction({
  13. from: AccountValue,
  14. to: toAccountValue,
  15. value: toBalanceValue,
  16. }, (err, address) => {
  17. if (!err) {
  18. console.log(address);
  19. alert("转账成功!");
  20. } else {
  21. console.log(err);
  22. }
  23. });
  24. }
  25. else {
  26. alert("您已经取消转账!");
  27. }
  28. }

附源码

  1. <div id="app">
  2. <h5>转账</h5>
  3. <button class="Web3Button">获取我信息</button>
  4. <h2>我账户: <span class="showAccount"></span></h2>
  5. <h2>&nbsp;&nbsp;&nbsp;额: <span class="showBalance"></span></h2>
  6. <hr>
  7. <p class="cont"></p>
  8. <hr>
  9. <input type="text" class="account" value="" placeholder="填写被转账的账户">
  10. <input type="text" class="balance" value="" placeholder="转账金额,单位ETH"><br>
  11. <button class="btnPay">确认转账</button>
  12. <script src="./node_modules/web3/dist/web3.min.js"></script>
  13. </div>

操作流程 

  1. const ethereumButton = document.querySelector('.Web3Button');
  2. const showAccount = document.querySelector('.showAccount');
  3. const showBalance = document.querySelector('.showBalance');
  4. const cont = document.querySelector('.cont');
  5. const toAccount = document.querySelector('.account');
  6. const toBalance = document.querySelector('.balance');
  7. const btnPay = document.querySelector('.btnPay');
  8. // 我的账户余额,对方账户余额
  9. let AccountValue, BalanceValue, toAccountValue, toBalanceValue;
  10. // 页面显示转账内容
  11. function showCont() {
  12. // 我的账户余额,对方账户余额
  13. // AccountValue,BalanceValue,toAccountValue,toBalanceValue
  14. cont.innerHTML = `我的账户:${AccountValue}-->对方账户:${toAccountValue},余额:${BalanceValue},转账金额:${web3.utils.fromWei(toBalanceValue, 'ether')}`;
  15. }
  16. // 获取内容
  17. toAccount.onblur = () => {
  18. toAccountValue = toAccount.value;
  19. console.log(toAccount.value);
  20. }
  21. toBalance.onblur = () => {
  22. if (toBalance.value) {
  23. // eth转wei 转账 web3.utils.toWei('1', 'ether')
  24. toBalanceValue = web3.utils.toWei(toBalance.value, 'ether');
  25. showCont();
  26. }
  27. console.log(toBalance.value, toBalanceValue);
  28. }
  29. // Web3浏览器检测
  30. if (typeof window.ethereum !== 'undefined') {
  31. console.log('MetaMask is installed!');
  32. }
  33. // 实例化
  34. window.web3 = new Web3(ethereum);
  35. var web3 = window.web3;
  36. // 检测MetaMask
  37. if (web3.currentProvider.isMetaMask == true) {
  38. console.log('metamask 可用');
  39. } else {
  40. console.log('metamask 不可用');
  41. }
  42. // 获取账户信息
  43. ethereumButton.addEventListener('click', () => {
  44. getAccount();
  45. });
  46. async function getAccount() {
  47. // 请求用户授权 解决web3js无法直接唤起Meta Mask获取用户身份
  48. const enable = await ethereum.enable();
  49. console.log(enable,11)
  50. // 授权获取账户
  51. // let accounts = await ethereum.request({ method: 'eth_requestAccounts' });
  52. let accounts = await web3.eth.getAccounts();
  53. AccountValue = accounts[0];
  54. console.log(AccountValue,1);
  55. // 返回指定地址账户的余额
  56. let balance = await web3.eth.getBalance(AccountValue);
  57. BalanceValue = web3.utils.fromWei(balance, 'ether');
  58. console.log(balance,BalanceValue,2);
  59. showAccount.innerHTML = AccountValue;
  60. showBalance.innerHTML = `wei:${balance}, ether:${BalanceValue}`;
  61. console.log(AccountValue, balance, BalanceValue);
  62. }
  63. // 转账
  64. btnPay.addEventListener('click', () => {
  65. toPay();
  66. });
  67. async function toPay() {
  68. showCont();
  69. // 转账
  70. var r = confirm("确认转账吗?");
  71. if (r == true) {
  72. // const res = await web3.eth.sendTransaction({
  73. // from:AccountValue,
  74. // to:toAccountValue,
  75. // value:toBalanceValue,
  76. // });
  77. // console.log(res);
  78. web3.eth.sendTransaction({
  79. from: AccountValue,
  80. to: toAccountValue,
  81. value: toBalanceValue,
  82. }, (err, address) => {
  83. if (!err) {
  84. console.log(address);
  85. alert("转账成功!");
  86. } else {
  87. console.log(err);
  88. }
  89. });
  90. }
  91. else {
  92. alert("您已经取消转账!");
  93. }
  94. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/445159
推荐阅读
相关标签
  

闽ICP备14008679号