【问题标题】:Solidity contract method not working on web3Solidity 合约方法在 web3 上不起作用
【发布时间】:2022-08-20 04:35:23
【问题描述】:

我的合同上有一个方法:

function reservePlace(address _address, uint _place) public{
    require(places[_place] == 0, \"Place is already reserved\");
    userIds[_address] = lastUserId;
    places[_place] = lastUserId;
    lastUserId += 1;
  }

它在truffle 上完美运行,我可以执行它并且运行良好 但是当我使用web3 并且我通过时:

      contract.methods
        .reservePlace(\"0x95f086ee384d54a056d87dC8A64E354cC55E2690\", 1)
        .call();

它没有做任何事情,也没有显示任何错误。当我将它们与web3 一起使用时,其他方法工作正常,因此web3 设置是正确的。我该如何解决?

  • 你设置正确吗。你需要 provider 来实例化一个 web3 实例,然后你需要合约 abi 来实例化一个合约实例。最后你可以调用合约上的方法

标签: solidity web3js


【解决方案1】:

这是因为您是从区块链调用数据而不是发送数据。为了让它工作,你应该调用:

contract.methods.reservePlace("0x95f086ee384d54a056d87dC8A64E354cC55E2690", 1).send({from:'your authorized address'});

【讨论】:

  • 是的,你是对的......我认为我必须使用 send 仅当功能支付时,我怎么知道我必须在哪里使用 send 以及何时使用 call
  • 基本上,当一个函数被定义为视图或纯实体时,你会想要调用它们,因为你只是从区块链中读取。当你想写入区块链时,当你想进行任何更改时,你想使用 send 方法并支付 gas 费。此外,如果你想发送一些以太币,你可以在 send() 参数中指定。
  • 嗨,我也面临同样的问题,我尝试了 callsend 但似乎都不起作用。还有其他选择吗?
猜你喜欢
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 2021-10-17
  • 1970-01-01
  • 2021-07-25
  • 2018-12-28
  • 2018-09-16
相关资源
最近更新 更多