我创建了具有以下功能的智能合约:
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
})