前端VUE使用web3调用小狐狸(metamask)和合约(ERC20)交互

这篇具有很好参考价值的文章主要介绍了前端VUE使用web3调用小狐狸(metamask)和合约(ERC20)交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.创建vue项目

2.安装web3

npm install web3

3.项目web3

main.js

import Vue from 'vue'
import App from './App.vue'
import Web3 from 'web3'
Vue.config.productionTip = false
Vue.prototype.Web3 = Web3

new Vue({
  render: h => h(App),
}).$mount('#app')

项目结构

vue中调用metamask,区块链,javascript,vscode

页面代码中引用web3,倒入ERC20代币的abi

<template>
  <div>
    <p>{{msg}}</p>
    <button @click="get">连接钱包</button>
    <button @click="getETH">获取账户信息</button>
    <button @click="getTransfer">ETH转帐</button>
    <button @click="getTokenBalance">代币余额</button>
    <button @click="getTokenTransfer">转账代币</button>
    <button @click="getAllowance">查询授权金额</button>
    <button @click="getApprove">授权</button>


  </div>
  
</template>

<script>
import Web3 from 'web3'
import abi from '../abi/ERC20.json'
export default {
  name: 'Connect',
  props: {
    msg: String
  },
  data() {
    return {};
  },
  mounted() {},
  methods: {
    getData(){
      console.log('first')
    },
    get() {  // 唤起钱包
      if (window.ethereum) {
        window.ethereum.enable().then((res) => {
          alert("当前钱包地址:" + res[0]);
        });
      } else {
        alert("请安装MetaMask钱包");
      }
    },
    async getETH() {
      let web3 = new Web3(window.web3.currentProvider)
      console.log(web3)
      // console.log(web3.eth.getAccounts())
      let fromAddress = await web3.eth.getAccounts()
      console.log(web3.eth.getBalance(fromAddress[0]))
      console.log(fromAddress)
      web3.eth.getBalance(fromAddress[0],(err, res) => {
        if (!err) {
            alert("ETH余额=="+res/Math.pow(10,18));
            //console.log(res)
        }
      })
    },
    //ETH转账
    async getTransfer(){
      let web3 = new Web3(window.web3.currentProvider)
      let fromAddress = await web3.eth.getAccounts()
      let amount = 0.01*Math.pow(10,18);
      let toAddress = "0x17D98A1c1D4814B03d71a08a07AF4C8CCABb7E2E";
      web3.eth.sendTransaction({
        gas: 21000,
        gasPrice: 5000000000,
        from: fromAddress[0],
        to: toAddress,
        value: amount
      }, (err, result) => {
        console.log("转账Hash=",result)
      })
    },
    //查询代币余额
    async getTokenBalance(){
      if(window.web3) {
        var web3 = web3 = new Web3(window.web3.currentProvider);
        let fromAddress = "0x394A64e586FC05bD28783351F14dfcc426EFD230";//查询用户地址
        let ethContract = new web3.eth.Contract(abi.abi,"0x3d2dd604866d0ec1ddd5e8ef27848a6fc0962018") //所有代币的abi可以通用(abi,合约地址)
        let balance = await ethContract.methods.balanceOf(fromAddress).call()
        alert(balance)

      }
    },
    //直接转账充币地址
    async getTokenTransfer(){
      if(window.web3) {
        let web3 = new Web3(window.web3.currentProvider)
         let ethContract = new web3.eth.Contract(abi.abi,"0x3d2dd604866d0ec1ddd5e8ef27848a6fc0962018") //所有代币的abi可以通用(abi,合约地址)
        //转账数量
        let amount = 100*Math.pow(10,18);//转账100个
        //小狐狸账户
        let fromAddress = await web3.eth.getAccounts()
        //接收地址
        let toAddress = "0xcaD75EADAf24F41d6274E129d7aE54764d7cd8E7";
        ethContract.methods.transfer(toAddress,amount+'').send({ from: fromAddress[0] })
    }

  },
  //查询授权金额
    async getAllowance(){
      if(window.web3) {
        let web3 = new Web3(window.web3.currentProvider)
        let fromAddress = "0x394A64e586FC05bD28783351F14dfcc426EFD230";//查询地址
        let ethContract = new web3.eth.Contract(abi.abi,"0x3d2dd604866d0ec1ddd5e8ef27848a6fc0962018") //所有代币的abi可以通用(abi,合约地址)
        let toAddress = "0xcaD75EADAf24F41d6274E129d7aE54764d7cd8E7";//被授权地址
        let balance = await ethContract.methods.allowance(fromAddress,toAddress).call()
        alert("授权金额"+balance/Math.pow(10,18))

      }
    },

    //授权
    async getApprove(){
      if(window.web3) {
        let web3 = new Web3(window.web3.currentProvider)
        let ethContract = new web3.eth.Contract(abi.abi,"0x3d2dd604866d0ec1ddd5e8ef27848a6fc0962018") //所有代币的abi可以通用(abi,合约地址)
        //授权数量
        let amount = 100*Math.pow(10,18);//转账100个
        let toAddress = "0xcaD75EADAf24F41d6274E129d7aE54764d7cd8E7";//被授权地址
        //小狐狸账户
        let fromAddress = await web3.eth.getAccounts()
        ethContract.methods.approve(toAddress,amount+'').send({ from: fromAddress[0] })
      }
    }
}
}
</script>

<style>

</style>


项目页面

vue中调用metamask,区块链,javascript,vscode 

调用小狐狸metamask演示

vue中调用metamask,区块链,javascript,vscode 

项目任何难题,可以加入qq群:981921011

 文章来源地址https://www.toymoban.com/news/detail-613293.html

 

 

到了这里,关于前端VUE使用web3调用小狐狸(metamask)和合约(ERC20)交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java Web3J :使用web3j调用自己的智能合约的方法(教程)

    代码世界有很多令人大呼小叫的技巧!有的代码像魔术师一样巧妙地隐藏了自己,有的像魔法师一样让你眼花缭乱,还有的像瑜伽大师一样灵活自如。它们让我们惊叹不已,让我们觉得自己仿佛置身于编码的魔幻世界。快来分享你见过哪些令你膛目结舌的代码技巧吧! web3j是

    2024年02月04日
    浏览(69)
  • java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)

    最近在学区块链相关,想做点自己感兴趣的。网上关于这块部分的坑也比较多,最近也是问了很多行业从事者才慢慢填坑,因此记录下来分享一下。 钱包 :metemask、 solidity编译器 :remix 、 java ide :idea。 智能合约编写的我选择在remix上方便,而且部署的时候不需要自定义gasP

    2024年01月16日
    浏览(58)
  • Java Web3J :使用web3j调用自己的智能合约,返回一个内部有数组的对象结构时出现NPE问题

    之前有写过一篇文章Java Web3J :使用web3j调用自己的智能合约的方法(教程),当时只是简单的方法调用,也不涉及到什么复杂的数据类型,入参是long类型,出参是String类型。 遇到这个问题是因为有一个方法,需要通过提案的治理id,查询链上提案数据,这个就需要接收提案

    2024年01月19日
    浏览(67)
  • 使用Ganache,web3js和remix在个人区块链上部署并调用合约

    Ganache是一个运行在本地的个人区块链,适用于以太坊的开发者。 首先我们需要下载Ganache web3js的中文文档 remix英文版的网址 有以上的准备之后我们就可以开始了 首先启动Ganache 这就是Ganache的主页面,下面有10个供我们使用的账号,上面有他们的地址以及余额,我们暂时需要

    2024年01月19日
    浏览(77)
  • 海康WEB3.3控件开发包 V3.3 前端vue项目调用实时监控画面

    公司业务迭代, 需要前端vue项目里增加一个查看实时监控模块, 这个需求是之前离职的前端小哥没有研究明白的, 现在落在了我的肩上, 压力还是有的. 但是压力归压力, 问题还是要解决的. 第一步: 调研大佬们已经实现的方案, 找设备对接. 公司后端大佬提出用官方SDK稍加修改即

    2024年02月08日
    浏览(42)
  • 使用 React、Web3.js 和 Metamask 构建 Web3 dApp 身份验证

    我相信您和我一样对 Web3 充满热情。本文介绍了一种新的区块链开发登录方法:使用 MetaMask 扩展的一键式加密安全登录流程,所有数据都存储在我们自己的后端。它还可以保护我们的数据和加密货币的安全。 在这里,我们将构建一个允许用户使用 MetaMask 登录的身份验证解决

    2024年02月04日
    浏览(62)
  • 记录分享vue3通过web3.js连接MetaMask的流程及签名、验签方法

    记录下web3.js连接,希望对像我一样的小白有帮助。废话不多说,开整! 一、先在浏览器上面下载 小狐狸MetaMask插件,然后创建账户,创建成功之后默认连接的是以太坊 Ethereum 主网络,如果有相关网络的信息(如RPC URL和和链id等,可以自己添加,没有就先不管)。  二、本地项

    2024年02月06日
    浏览(58)
  • Web3.js在以太坊上部署和调用智能合约

    介绍如何使用Web3.js在以太坊上部署和调用智能合约;Web3.js是以太坊JavaScript API的实现,它可以与以太坊区块链进行交互 智能合约编写 使用Solidity编写一个简单的智能合约,然后使用Web3.js将其部署到以太坊区块链,通过JavaScript调用该智能合约 这个智能合约非常简单。它有两

    2024年02月16日
    浏览(46)
  • 以太坊Dapp通过web3js部署调用智能合约

    参考视频:https://www.bilibili.com/video/BV14z4y1Z7Jd?p=1 https://remix.ethereum.org/ 创建一个新的文件夹 mkdir MyDapp2 启动 ganache-cli 下载web3 npm install web3 ,注:ganache的启动和deploy.js要在同一个目录。 先进行测试 node deploy.js 部署合约 web3的版本:1.7.1 复制 WEB3DEPLOY 的内容到deploy.js == ganache需要

    2023年04月23日
    浏览(46)
  • 手把手部署区块链智能合约及python的web3接口调用

    说句实话,在做区块链、智能合约、搭私链、pythonWeb3接口调用这些东西的时候,心里崩溃了不止四五十回,如果可以选别的方向,博主劝你赶紧换,人生已经很不容易了,别给自己找罪受。。。。。 创世块是什么请自行搜索,网络上很多示例的创世块博主都试过,在实际使

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包