15. DAPP react界面-web3.js库-Metemask调用和显示-调用合约方法

15. DAPP react界面-web3.js库-Metemask调用和显示-调用合约方法

测试Solidity ERC20合约 - web3.js结合Metemask调用合约方法

一. 系列视频
二. 系列文章

1. Remix编写、编译、部署、测试Solidity ERC20合约 - 基础篇
2. Remix编写、编译、部署、测试Solidity ERC20合约 - 进阶篇
3. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 基础篇
4. JSON-RPC调用区块链方法
5. JSON-RPC调用合约方法
6. JSON-RPC给合约账户同时转以太币和代币
7. web3.js调用区块链方法
8. web3.js调用合约方法
9. web3.js给合约账户同时转以太币和代币
10. Go-Ethereum调用区块链方法
11. Go-Ethereum调用合约方法
12. sendTransaction和sendRawTransaction区别
13. Metamask导入代币,转账ETH,转账代币 - 界面操作
14. Metamask连接hardhat本地节点
15. DAPP react界面-web3.js库-Metemask调用和显示-调用合约方法
16. web3js结合sepolia测试网
17. 总结

1. 环境配置和合约代码

参考文章12. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - Metamask导入代币,转账ETH,转账代币

2. 编写调试代码

可连接hardhat node本地网络和sepolia测试网络
vscode创建React项目

npx create-react-app metamask 

安装web3.js

npm install web3 

导入合约编译后的abi.json

在这里插入图片描述


js代码

import ABI from './abi.json'; import Web3 from 'web3'; import { useState } from 'react';functionApp(){ const [account1, setAccount1]=useState(''); const [web3, setWeb3]=useState(null); const [contract, setContract]=useState(null); const [balance1_before, setBalance1_before]=useState(0); const [balance2_before, setBalance2_before]=useState(0); const [balance1_after, setBalance1_after]=useState(0); const [balance2_after, setBalance2_after]=useState(0); const [name, setName]=useState(0); const hardhat_contractAddress ="0x5FbDB2315678afecb367f032d93F642f64180aa3"; const sepolia_contractAddress ='0x451Dc02Cee616361815253C858Df0a3028c42901'; const contractAddress = sepolia_contractAddress; const account2 ="0xE78Ff27498c9a6Fd8BC3ff8170Ecf9a13ECBE49e"; const valueMTK =100*10**18; const loadAccount = async ()=>{// metamask是否已安装if(!window.ethereum)alert("Please install MetaMask to use this dApp!");// metamsk中的账户 const accounts = await window.ethereum.request({ method:'eth_requestAccounts'});setAccount1(accounts[0]);// 连接metamask const web3 =newWeb3(window.ethereum);setWeb3(web3);// 实例化合约 const contract = await newweb3.eth.Contract(ABI, contractAddress);setContract(contract);} const Name = async ()=>{setName(await contract.methods.name().call());} const Balance_Before = async ()=>{setBalance1_before(await contract.methods.balanceOf(account1).call());setBalance2_before(await contract.methods.balanceOf(account2).call());} const Balance_After = async ()=>{setBalance1_after(await contract.methods.balanceOf(account1).call());setBalance2_after(await contract.methods.balanceOf(account2).call());} const Transfer = async ()=>{ await contract.methods.transfer(account2, valueMTK).send({ from: account1 });}return(<div><h1>Your Ethereum Account</h1><button onClick={loadAccount}>Load Account</button><p>{account1}</p><p>{account2}</p><button onClick={Name}>Name</button><p>token:{name}</p><button onClick={Balance_Before}>Balance</button><p>balance:{balance1_before}</p><p>balance:{balance2_before}</p><button onClick={Transfer}>Transfer</button><p></p><button onClick={Balance_After}>Balance</button><p>balance:{balance1_after}</p><p>balance:{balance2_after}</p></div>);} export default App;

3. 测试

3.1 MetaMask连接hardhat node

const contractAddress = hardhat_contractAddress;
在这里插入图片描述


在这里插入图片描述

可以看到Account1账户在合约中的余额是0

在这里插入图片描述

3.2 MetaMask连接sepolia

const contractAddress = sepolia_contractAddress;
在这里插入图片描述


在这里插入图片描述


点击Transfer,Metamask确认

在这里插入图片描述


在这里插入图片描述

转账100MTK.

可以看到Account1账户在合约中的余额是681,Account2是289

在这里插入图片描述


在这里插入图片描述

一. 系列视频
二. 系列文章

Read more

VsCode远程Copilot无法使用Claude Agent问题

最近我突然发现vscode Copilot中Claude模型突然没了,我刚充的钱啊!没有Claude我还用啥Copilot 很多小伙伴知道要开代理,开完代理后确实Claude会出来,本地使用是没有任何问题的,但是如果使用远程ssh的话,会出现访问异常,连接不上的情况。这时候很多小伙伴就在网上寻找方法,在vscode setting中添加这么一段代码。可以看看这篇博客 "http.proxy": "http://127.0.0.1:1082", "remote.extensionKind": { "GitHub.copilot": [ "ui" ], "GitHub.copilot-chat": [ "ui" ], "pub.name": [ "ui&

从零到一:Ubuntu上llama.cpp的编译艺术与性能调优实战

从零到一:Ubuntu上llama.cpp的编译艺术与性能调优实战 在人工智能技术快速发展的今天,大型语言模型(LLM)已成为开发者工具箱中不可或缺的一部分。而llama.cpp作为一款高效、轻量级的LLM推理框架,因其出色的性能和跨平台支持,越来越受到开发者的青睐。本文将带您深入探索在Ubuntu环境下编译和优化llama.cpp的全过程,从基础环境搭建到高级性能调优,为您呈现一套完整的解决方案。 1. 环境准备与基础编译 在开始编译llama.cpp之前,我们需要确保系统环境满足基本要求。Ubuntu 22.04 LTS是最推荐的系统版本,它提供了稳定的软件包支持和良好的兼容性。 首先更新系统并安装必要的开发工具: sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential cmake git curl libcurl4-openssl-dev 对于希望使用CUDA加速的用户,还需要安装NVIDIA驱动和CUDA工具包: sudo apt install

基于改进YOLO11-ASF-P2的多旋翼无人机检测识别系统_红外航拍目标检测算法优化_1

1. 基于改进YOLO11-ASF-P2的多旋翼无人机检测识别系统 🚁 随着无人机技术的飞速发展,多旋翼无人机在军事、民用和商业领域的应用日益广泛。然而,这也带来了安全隐患和管理挑战。本文将介绍一种基于改进YOLO11-ASF-P2的红外航拍目标检测算法优化方案,用于多旋翼无人机的检测识别系统。 1.1. 红外航拍目标检测的挑战 📡 红外航拍目标检测面临着诸多挑战,包括: 1. 小目标检测:无人机在远距离航拍时往往呈现为小目标,传统检测算法难以准确识别。 2. 背景复杂:航拍图像通常包含大量复杂背景,如建筑物、树木等,容易干扰目标检测。 3. 尺度变化:无人机在不同高度和角度拍摄时,目标尺寸变化较大。 4. 光照条件:红外成像受光照条件影响较小,但仍存在噪声和模糊问题。 传统目标检测算法在这些挑战面前表现不佳,因此我们需要改进YOLO11-ASF-P2算法,以适应红外航拍场景下的无人机检测任务。 1.2. YOLO11-ASF-P2算法概述 🧠 YOLO11-ASF-P2是一种基于YOLOv11的目标检测算法,结合了自适应特征融合(ASF)和P2尺度采样