Solidity

無法使用 web3.js 執行支付功能,因為 Metamask 要求我提供大量的乙太幣

  • March 17, 2022

我正在嘗試在我的契約中執行應付功能,儘管價格固定為 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')),

來源:如何使用 Node 和 Web3 發送乙太坊

引用自:https://ethereum.stackexchange.com/questions/123923