Web3js 回归基础 |调用方法可以,发送方法不行

问题描述 投票:0回答:1

所以我陷入了 Web3js 的一个非常简单的问题,我不知道问题可能是什么,我开始认为我在元掩码或 chrome 方面遇到了某种问题,但我首先想确保我的基本代码已写。

重点是,我为了测试目的创建了一个非常简单的 Solidity 智能合约,它有两个简单的函数,一个是“只读”函数,另一个是“修改”智能合约中的参数,目的是从前端测试 Call 和 Send 方法。

**智能合约代码如下: **

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract TestContract{

  string public variable;

  function white() public {
    variable = 'white';
  }

  function black() public {
    variable = 'black';
  }
}

**前端代码如下: **

src="https://unpkg.com/[email protected]/dist/web3.min.js"

window.onload = async function() {

  let from;
  let web3;
  let DappContract;

  web3 = new Web3(window.ethereum)
  DappContract = new web3.eth.Contract(DappABI,DappAddress)

  let accounts = await web3.eth.getAccounts()
  from = accounts[0] 

  console.log ("Initial value : " + await DappContract.methods.variable().call() );
  console.log ("Send method: " + await DappContract.methods.white().send({from:from}) );
  console.log ("Final value: " + await DappContract.methods.variable().call() );

}

在执行“发送”方法之前,一切似乎都工作正常。

Web3 对象已创建正常。 DappContract 也已创建正常 从变量正确加载元掩码地址

甚至“call”方法也能够检索“variable”中的任何信息。

但是,每次我尝试调用“发送”时,我都会收到失败的交易。

对我做错的事情有什么帮助吗?

javascript solidity web3js
1个回答
0
投票

我面临着完全相同的问题。我在网上找到的一些建议是;

  • 检查您在前端使用的 ABI 是否与该 ABI 完全匹配 已部署的合约。
  • 检查您是否已连接到正确的网络并且您的帐户是否已登录 有足够的 ETH 来支付汽油费。
  • 检查您的 web3 库是否与您正在构建的链兼容
  • 尝试通过手动构建和提交交易来绕过 web3。
  • 检查您的钱包提供商是否已连接到该网站,并且该网站已被授予建议交易的权限。

但是这些建议都没有解决我的问题。我希望有人能帮忙!

© www.soinside.com 2019 - 2024. All rights reserved.