当前位置: 首页 > news >正文

ether.js—3—contract

使用合约的代码流程(用 ethers.js)

  1. 先拿到合约地址
    • 这个地址是合约部署后生成的唯一标识
    • 来源:
    • 你自己部署合约时得到的
    • 或者别人已经部署好的合约地址(公开项目、链上查询)

  1. 准备 ABI(合约的接口描述)
    • ABI 是合约编译后自动生成的 JSON,描述合约方法和事件
    • 来源:
    • 你自己写合约用 Remix、Hardhat 编译后生成的 ABI 文件
    • 如果是公共合约,比如 ERC-20,标准 ABI 可以直接拿(网上或者官方文档)
    • 也可以用 etherscan 上合约页面直接复制 ABI

  1. new 一个合约实例

const contract = new ethers.Contract(address, abi, providerOrSigner);

•	传入三个东西:
•	合约地址(必需)
•	ABI(必需)
•	Provider 或 Signer(决定调用的是只读还是可写接口)

Provider vs Signer 的区别
• Provider:只能调用合约的 view 或 pure 函数(即只读,不花 gas)
• Signer:有权限发起交易,调用修改链上状态的函数(需要 gas)

所以:

const readContract = new ethers.Contract(address, abi, provider); // 只读
const writeContract = new ethers.Contract(address, abi, signer); // 可写(发交易)

  1. 之后就可以调用合约方法
    • 只读方法可以直接 await contract.name() 等调用,得到返回值
    • 可写方法调用返回交易对象 tx = await contract.transfer(…),然后 await tx.wait() 等交易确认

简单示例流程(拿 ERC-20 查询和转账为例)

// 1. 合约地址(比如 USDT)
const address = “0xdAC17F958D2ee523a2206206994597C13D831ec7”;

// 2. 标准 ERC20 ABI(这里只写几个方法)
const abi = [
“function name() view returns (string)”,
“function symbol() view returns (string)”,
“function balanceOf(address) view returns (uint256)”,
“function transfer(address to, uint amount) returns (bool)”
];

// 3. 创建 provider 和 signer(假设是浏览器内注入的 Metamask)
const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();

// 4. 创建合约实例
const contractRead = new ethers.Contract(address, abi, provider); // 只读
const contractWrite = new ethers.Contract(address, abi, signer); // 可写

// 5. 调用只读方法
const name = await contractRead.name();
const symbol = await contractRead.symbol();
console.log(name, symbol);

// 6. 调用可写方法(转账)
const tx = await contractWrite.transfer(“0xRecipientAddress”, ethers.utils.parseUnits(“1.0”, 6));
await tx.wait();
console.log(“Transfer confirmed”);

总结

步骤 说明 来源/举例

  1. 合约地址 合约在链上的地址 自己部署、别人公开的地址
  2. ABI 合约接口定义,json格式或简写签名 编译生成、Etherscan、官方
  3. 创建合约实例 new Contract(address, abi, providerOrSigner) 传入 provider 只读,signer 可写
  4. 调用函数 await contract.readFunc() / await contract.writeFunc() 只读直接取值,写调用交易等待确认

http://www.dtcms.com/a/279625.html

相关文章:

  • 高密度PCB板生产厂商深度解析
  • Docker容器操作命令大全
  • C++-linux 7.文件IO(一)系统调用
  • 是时候重估蔚来的技术价值了
  • 【科研绘图系列】R语言绘制世界地图
  • python的小学课外综合管理系统
  • MMpretrain 中的 LinearClsHead 结构与优化
  • 分布式光伏并网中出现的电能质量问题,如何监测与治理?
  • 【数据库】慢SQL优化 - MYSQL
  • 系统调用入口机制:多架构对比理解(以 ARM64 为主)
  • MySQL高级篇(一):从存储引擎到索引优化实战
  • 人工智能正逐步商品化,而“理解力”才是开发者的真正超能力
  • 在数字工厂实施过程中,如何对计划、调度部门进行需求调研
  • 简单排序。
  • 1.连接MySQL数据库-demo
  • 基于Snoic的音频对口型数字人
  • OneCode 3.0 VFS客户端驱动(SDK)技术解析:从架构到实战
  • Kafka 时间轮深度解析:如何O(1)处理定时任务
  • 深度测评|2025年BPM厂商排名及选型指南
  • 设计模式》》门面模式 适配器模式 区别
  • 基于Android的
  • 数据可视化全流程设计指南
  • hi3519dv500开发环境搭建及SDK编译和烧录:
  • Linux从零到一的学习
  • 【DOCKER】-6 docker的资源限制与监控
  • Datawhale AI夏令营——用户新增预测挑战赛
  • 营销创意可以从哪些角度挖掘?
  • HNSW(分层导航最小世界)算法:高维向量检索的导航革命
  • 龙虎榜——20250714
  • 手滑误操作? vue + Element UI 封装二次确认框 | 附源码