You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Next.js项目中使用ABI调用ZKSwap的DepositETH方法

问题原因
  1. 直接报错是因为ethers不存在utils.parse方法,该方法是你记错了API:
    • 如果你用的是ethers v5版本,将ETH金额字符串转换为wei单位的方法是utils.parseEther()
    • 如果你用的是ethers v6版本,相关方法已经从utils模块迁移到ethers根导出,直接调用parseEther()即可
  2. ABI配置方式非常简单,你已经正确导入了本地的ABI JSON文件,只要该文件内容是官方提供的完整ZKSwap合约ABI数组,直接传给Contract构造函数的第二个参数即可正常调用合约方法,不需要额外处理。
  3. 代码还有其他潜在问题:
    • 不要在前端代码硬编码钱包私钥,Next.js前端页面的代码会完全暴露给访问用户,私钥会直接泄露,资产有被盗风险,正确做法是调用用户浏览器插件钱包(如MetaMask)的provider获取签名者
    • 不要在组件根作用域直接调用depositETH方法,组件每次渲染都会触发执行,会重复发起交易
    • 按钮点击触发depositETH时没有传入amount参数,会导致数值转换失败
修正后的示例代码(ethers v5版本)
import { Contract, utils, ethers } from 'ethers'
import { useState } from 'react'
import zkswapABI from '../src/zkswap.ABI.json'

const ZK_CONTRACT_ADDRESS = '0x8ECa806Aecc86CE90Da803b080Ca4E3A9b8097ad'

export default function Zkswap() {
  const [signer, setSigner] = useState(null)
  const [contract, setContract] = useState(null)

  // 初始化连接用户钱包
  const connectWallet = async () => {
    if (!window.ethereum) return alert('请先安装MetaMask钱包')
    const provider = new ethers.providers.Web3Provider(window.ethereum)
    await provider.send("eth_requestAccounts", [])
    const userSigner = provider.getSigner()
    setSigner(userSigner)
    setContract(new Contract(ZK_CONTRACT_ADDRESS, zkswapABI, userSigner))
  }

  async function depositETH(amount) {
    if (!contract) return alert('请先连接钱包')
    const tx = await contract.depositETH(await signer.getAddress(), {
      value: utils.parseEther(amount)
    })
    const receipt = await tx.wait()
    console.log('交易成功', receipt)
    return receipt
  }

  return (
    <div>
      <section className="h-screen w-4/5 max-w-5xl mx-auto flex items-center justify-center flex-col">
        <h1 className="mb-4 text-green-500 text-3xl">sample</h1>
        <p className="mb-2 text-center"> ZKSwap </p>
        <button className="btn-blue mb-2" onClick={connectWallet}> 先连接钱包 </button>
        <button className="btn-blue" onClick={() => depositETH('0.5')}> 存入0.5 ETH</button>
      </section>
    </div>
  )
}

内容的提问来源于stack exchange,提问作者user16697491

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 16:30:03