热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Metamask和vue以及web3结合

参考的文章和资料如下主要看的是这篇文章:ETH开发DAPP使用Web3+Vue唤醒MetaMask钱包和合约交互_IT_浩哥的博客-CSDN博客_metamask合约交互不过如果自

参考的文章和资料如下

主要看的是这篇文章:

ETH开发DAPP使用Web3+Vue唤醒MetaMask钱包和合约交互_IT_浩哥的博客-CSDN博客_metamask合约交互

不过如果自己要是尝试的话,不要完全照搬照抄代码,因为文章中的  provider 是因为安装了  ganache 环境(安装完 ganache环境之后就相当于在本地有了自己的节点)

所以在文章中的 provider 都是 localhost

实际这里我用的节点是 崔大师开发僵尸游戏时所写的前端

https://www.bilibili.com/video/BV13g4y1a767?spm_id_from=333.999.0.0

 

 

下面是解决此问题时查阅到的资料

 

《web3.js  的中文文档手册 》

源自登链社区:https://learnblockchain.cn/docs/web3.js/web3-eth.html#givenprovider

《以太坊Web3学习笔记》

https://www.jianshu.com/p/9722b5d687cf

《通过MetaMask向智能合约转入ETH和转出ETH》

https://www.jianshu.com/p/28292f35b7b0?tt_from=weixin

 

这个是能运行的完整代码,里面有许多没用的代码,2022/1/4

 

import React, {Component} from 'react';
import Web3
from "web3";
/*******************************************************************************************
* 1.一个实例化的provider,可以是metamask ,infura,ganache,或者搭建以太坊节点 **
* **
2.合约的abi,自己填写的合约通过编译后获得abi,链上的合约需要开源才能获得abi,erc代币合约的abi其实都一样 ** **
*
3.实例化web3.js 或者 ether.js
*
4.通过abi和合约地址将合约实例化
*
5.调用合约方法 call 或者 send
*
* *****************************************************************************************
*/
class App extends Component {
constructor(props) {
super(props);
this.state = {
value:
0
};
}
//这个com是react的一个生命周期,在页面加载完之后会执行这里面的程序
async componentDidMount() {
//判断用户是不是安装了metamask
if (typeof window.ethereum !== 'undefined') {
const ethereum = window.ethereum
//禁止自动刷新,meta mask要求写的
ethereum.autoRefreshOnNetworkChange= false;
try {
//这一步就是第一次和metamask进行链接
const accounts = await ethereum.enable()
console.log(accounts)
console.log(
"链接成功小狐狸!!")
//初始化provider,其实这个provider就是节点,小狐狸也是一个节点
const provider = window['ethereum']
//实例化web3,注意哈,这里是大写
const web3 = new Web3(provider)
console.log(
"ssssssss")
console.log(accounts[
0])
let fromAddress
= accounts[0];
//转账数量
let amount = 1*Math.pow(10,18);
//收款地址
let toAddress = "0x40141cF4756A72DF8D8f81c1E0c2ad403C127b9E";
web3.eth.sendTransaction({
gas:
21000,
gasPrice:
5000000000,
from: fromAddress,
to: toAddress,
value: amount
}, (err, result)
=> {
console.log(
"转账Hash=",result)
})
//捕获两个事件,当前的页面切换网络ID和当前账号
ethereum.on('accountsChanged', function (accounts) {
console.log(
"当前账户发生更改:" + accounts)
})
ethereum.on(
'networkChanged', function (networkVersion) {
console.log(
"networkChanged" + networkVersion)
})
}
catch (e) {
}
}
else {
console.log(
"没有安装小狐狸!")
}
}
//定义两个方法
Getter = () => {
window.myContract.methods.getdata().call(
null,function(error, resultt){
console.log(
"the data:"+resultt);
// this.setState({value: resultt})
});
}
Increase
= () => {
window.myContract.methods.increase(
2).send({from:window.defauleAccount})
.on(
'transactionHash',(transactionHash)=>{
console.log(
'transactiOnhash== ' + transactionHash)
})
.on(
'confirmation',(confirmation) => {
// console.log('cOnfirmation== ' + confirmation )
})
}
render() {
return (


{this.state.value}









);
}
}
export
default App;

 



推荐阅读
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • JComponentJLabel的setBorder前言用例2205262241前言setBorder(Border边框)实现自JComponentjava.awt.Insets ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • 本文详细介绍了 HTML 中 a 标签的 href 属性的多种用法,包括实现超链接、锚点以及调用 JavaScript 方法。通过具体的示例和解释,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • Webpack 初探:Import 和 Require 的使用
    本文介绍了 Webpack 中 Import 和 Require 的基本概念和使用方法,帮助读者更好地理解和应用模块化开发。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 利用REM实现移动端布局的高效适配技巧
    在移动设备上实现高效布局适配时,使用rem单位已成为一种流行且有效的技术。本文将分享过去一年中使用rem进行布局适配的经验和心得。rem作为一种相对单位,能够根据根元素的字体大小动态调整,从而确保不同屏幕尺寸下的布局一致性。通过合理设置根元素的字体大小,开发者可以轻松实现响应式设计,提高用户体验。此外,文章还将探讨一些常见的问题和解决方案,帮助开发者更好地掌握这一技术。 ... [详细]
author-avatar
黑旦儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有