Tokens

Ethers.js - 使用 eth 值呼叫 mint 函式時出錯

  • March 18, 2022

我開始使用智能合約和 ERC721 Collectible NFT,我使用乙太幣作為提供者和Metamask來連接使用者。

我正在使用 React 網站上的 Mint 功能,當我是所有者時它執行良好(因此無需發送 Eth)但是當我嘗試實現它時,我收到一個錯誤:

index.ts:225 Uncaught (in promise) Error: overflow (fault="overflow", operation="BigNumber.from", value=70000000000000000, code=NUMERIC_FAULT, version=bignumber/5.5.0)
   at Logger.makeError (index.ts:225)
   at Logger.throwError (index.ts:237)
   at throwFault (bignumber.ts:358)
   at Function.from (bignumber.ts:249)
   at index.ts:263
   at Generator.next (<anonymous>)
   at fulfilled (index.ts:1)

這是我的智能合約鑄幣功能:

   function mint(uint256 _mintAmount) public payable {
       uint256 supply = totalSupply();

       require(!paused);
       require(_mintAmount > 0);

       if (msg.sender != owner()) {
           require(msg.value >= cost * _mintAmount);
       }
       for (uint256 i = 1; i <= _mintAmount; i++) {
           _safeMint(msg.sender, supply + i);
       }
   }

這是一個工作程式碼(當我是契約的所有者時)

await contract.mint(1);

但是這個不起作用(即使我是所有者與否)

await contract.mint(1, {value: cost});

這是我試圖遵循的文件。


Metamask 和 Ethers 已使用

connect(ethers.providers.Web3Provider, "any");

並且使用以下命令創建(並簽署)契約:

const signer = (new ethers.providers.Web3Provider(window.ethereum)).getSigner();
const contract = new ethers.Contract(address, ABI, signer);

變數為 0.07Eth(鑄造一個 NFT 所需的cost數量),並且已使用 contract.cost 函式檢索

const cost = parseInt((await contract.cost()).toString())


我真的不明白如何解決它?謝謝大家的幫助!:)

value參數將字元串作為輸入,因此您無需將成本轉換為 int。當您嘗試轉換它時,它變得太大而不能成為正常整數,這就是您得到溢出的原因。

因此,如果您parseInt從中刪除cost,並將其mint作為字元串發送,它應該可以工作。

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