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

使用函数选择器交互合约:区块哈希获取及代码报错求助

问题解答

一、如何获取区块哈希

获取区块哈希可通过ethers.js的Provider对象实现,常见场景如下:

  • 获取最新区块的哈希:
    const latestBlock = await provider.getBlock('latest');
    console.log("最新区块哈希:", latestBlock.hash);
    
  • 获取指定区块号的哈希:
    const blockNumber = 12345678; // 替换为目标区块号
    const targetBlock = await provider.getBlock(blockNumber);
    console.log("指定区块哈希:", targetBlock.hash);
    

二、代码错误排查

你遇到的The method eth_sendTransaction does not exist/is not available错误,核心问题是误用了调用方法:

  1. 问题根源:wallet.call()会通过签名者发起调用,底层触发的是需要上链的eth_sendTransaction方法,但你的需求是静态调用合约(仅读取数据,无需上链),此时应该用provider.call()——它调用的是只读的eth_call RPC方法,不会触发交易发送。
  2. 修正后的代码:
    require('dotenv').config();
    require('events').EventEmitter.defaultMaxListeners = 0
    
    const { ethers } = require('ethers');
    
    // Provider and contract address
    const provider = new ethers.providers.JsonRpcProvider('https://polygon-mumbai.infura.io/v3/7d803b173d114ba8a1bffafff7ff541a');
    const wallet = new ethers.Wallet(process.env.KEY, provider)
    const contractAddress = '0x57C98f1f2BC34A0054CBc1257fcc9333c1b6730c';
    
    // Function selector
    const functionSelector = '0x838ad0ee';
    
    
    // Call the contract
    const send = async () => {
      try {
        // 替换为provider.call()实现静态调用
        const result = await provider.call({
            to: contractAddress,
            data: functionSelector
        });
        console.log("Result:", result);
      } catch (error) {
        console.error("Error:", error);
      }
    }
    
    send()
    
  3. 额外说明:如果你的函数选择器对应链上写操作(需要修改合约状态),则需使用wallet.sendTransaction()方法,示例如下:
    const result = await wallet.sendTransaction({
        to: contractAddress,
        data: functionSelector
    });
    await result.wait(); // 等待交易上链确认
    console.log("交易哈希:", result.hash);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:56:12