Solidity
無法使用 web3.js 執行支付功能,因為 Metamask 要求我提供大量的乙太幣
我正在嘗試在我的契約中執行應付功能,儘管價格固定為 0.001 乙太幣,但 Metamask 要求我支付超過 2 乙太幣的費用,而不是汽油費。我認為問題在於我在交易請求中發送的值,但我不確定。
為什麼 Metamask 要求我提供一定數量的乙太幣,而不是我的契約中固定的價格?
契約.sol:
function mintNFTs(uint _count) public payable { uint totalMinted = _tokenIdCounter.current(); require(totalMinted.add(_count) <= MAX_SUPPLY, "Not enough NFTs left!"); require(_count >0 && _count <= MAX_PER_MINT, "Cannot mint specified number of NFTs."); require(msg.value >= PRICE.mul(_count), "Not enough ether to purchase NFTs."); for (uint i = 0; i < _count; i++) { _mintSingleNFT(); } } function _mintSingleNFT() private { uint newTokenID = _tokenIdCounter.current(); _safeMint(msg.sender, newTokenID); _tokenIdCounter.increment(); }
應用程序.js
const tx = { 'from': currentAccount, 'to': contractAddress, 'nonce': nonce.toString(), 'gas': "500000", 'value': web3.utils.toWei('0.002', 'ether'), 'data': nftContract.methods.mintNFTs(1).encodeABI(), };
我找到了答案。您必須將十六進制數字發送到 value 參數而不是 wei,因此,您必須將十進制轉換為 wei 到十六進制。這個對我有用。
'value': web3.utils.toHex(web3.utils.toWei(nftPrice.toString(), 'ether')),