微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在web3上调用solidity合约函数时如何添加ETH作为参数

如何解决在web3上调用solidity合约函数时如何添加ETH作为参数

我已经创建了具有功能的智能合约:

function putOrder() external payable {
  require(msg.value == itemPrice);
  (bool sent,bytes memory data) = shopManager.call{value: msg.value}("");
  require(sent,"Failed to purchase");
}

这只是检查 eth/bnb 值是否正确传递给函数,然后将其发送到管理器地址。

这就是我在 web3 上使用 react 的函数的样子:

const putOrder() = async () => {
    ...
  window.contract.methods.orderStuff().send({from: accounts[0]}).on(
    'receipt',function(){
      processOrder();
    }
  );
    ...
}

显然,我收到一个错误,指出 itemPrice 不符合要求。那么如何通过 eth/bnb 值通过 web3 发送到合约函数调用

解决方法

您可以将其作为名为 send() 的属性传递给 value 函数参数。它的值是要发送的wei数量(不是ETH数量)。

它只是对 transaction 参数(执行合约功能的交易)的覆盖。因此,如果需要,您还可以使用它来覆盖 gas 值、nonce 和其他参数。

.send({
    from: accounts[0],value: 1  // 1 wei
})
.send({
    from: accounts[0],value: web3.utils.toWei(1,'ether')  // 1 ETH == 10^18 wei
})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。