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

一文读懂AI圈爆火的Skills:是什么、怎么用

一文读懂AI圈爆火的Skills:是什么、怎么用

大家好,我是jobleap.cn的小九。 最近AI圈,Skills彻底火了。Github上相关仓库动辄斩获上万星标,比如含50多个Claude技能的仓库、Superpowers工作流项目,均已突破18K星。这股热度,堪比2023-2024年的Prompt模板热潮——彼时大家疯狂分享Prompt,现在则扎堆交流Skills。 不少人疑惑:Skills到底是什么?和Prompt、MCP有啥区别?我花了两天整理,用直白的案例和方法,带你搞懂Skills的本质与用法。 一、Skills到底是什么?先看两个实战案例 Skills直译是“技能”,核心是「给AI智能体(Agent)用的技能包」。光说定义太抽象,分享两个我们公司的实战案例,帮你直观理解它的价值。 案例1:AI选题系统,把2-3小时工作缩成一句话指令 做内容的都懂,选题是个“海量信息筛精选”的耗时活。以前我们每天要刷遍推特、Reddit、Github、知乎、小红书等近10个平台,筛选热点、判断价值、找切入角度,整套流程要2-3小时,严重挤占核心工作时间。 去年12月,

用 Python 搭建本地 AI 问答系统:避开 90% 新手都会踩的环境坑

用 Python 搭建本地 AI 问答系统:避开 90% 新手都会踩的环境坑

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 前言 * 一、整体架构概览 * 二、新手踩坑分布图 * 三、环境搭建:最容易翻车的第一步 * 3.1 用虚拟环境隔离,别污染全局 * 3.2 PyTorch 安装:版本对齐是关键 * 3.3 依赖管理:用 requirements.txt 锁定版本 * 四、模型下载:别让网络毁了你的心情 * 4.1 使用 Ollama 管理本地模型(强烈推荐) * 4.2 用 Python 调用 Ollama * 五、搭建 RAG 问答系统 * 5.

大模型工程化vs传统AI工程:核心差异解析

大模型工程化vs传统AI工程:核心差异解析

大模型工程化vs传统AI工程:核心差异解析 📝 本章学习目标:本章是基础入门部分,帮助读者建立大模型工程化的初步认知。通过本章学习,你将全面掌握"大模型工程化vs传统AI工程:核心差异解析"这一核心主题。 一、引言:为什么这个话题如此重要 在大模型技术快速发展的今天,大模型工程化vs传统AI工程:核心差异解析已经成为每个AI工程师必须掌握的核心技能。大模型的工程化落地不仅需要理解模型原理,更需要掌握系统化的部署、优化和运维能力。 1.1 背景与意义 💡 核心认知:大模型工程化是将研究模型转化为生产级服务的关键环节。一个优秀的模型如果缺乏良好的工程化支持,将难以在实际场景中发挥价值。 从GPT-3到GPT-4,从LLaMA到Qwen,大模型参数量从数十亿增长到数千亿。这种规模的增长带来了巨大的工程挑战:如何高效部署?如何优化推理速度?如何控制成本?这些问题都需要系统化的工程化能力来解决。 1.2 本章结构概览 为了帮助读者系统性地掌握本章内容,我将从以下几个维度展开: 📊 概念解析 → 技术原理 → 实现方法 → 实践案例 → 最佳实践 → 总结展望 二、

OpenClaw + MCP:让 AI 助手连接任意工具的终极方案

MCP(Model Context Protocol)是 2026 年最火的 AI 协议,而 OpenClaw 作为开源 AI 助手框架,已经率先支持 MCP 集成。本文将带你深入了解如何用 OpenClaw + MCP 打造一个能连接任意工具的超级 AI 助手。 什么是 MCP? MCP(Model Context Protocol)是一个开源协议标准,用于连接 AI 应用和外部系统。 简单理解:MCP 就像是 AI 的 USB-C 接口。就像 USB-C 让你的电脑能连接显示器、硬盘、手机等各种设备一样,MCP 让你的 AI 助手能连接数据库、文件系统、