在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没有得到满足。那么我如何通过web3将eth/bnb值传递给contract函数调用呢?

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

它只是事务参数(执行合约功能的事务(的覆盖。因此,如果需要,您也可以使用它来覆盖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
})

相关内容

  • 没有找到相关文章

最新更新