Uint256

錯誤:溢出

  • October 20, 2021

我正在嘗試使用這樣的 tokenId 編號從我的測試中鑄造一個 nft 令牌:123456789123456789123456一個非常大的數字,但是當我嘗試鑄造時,我收到以下錯誤:

{ 錯誤:溢出(故障=“溢出”,操作=“BigNumber.from”,值=1.0341003020512021e+23,程式碼=NUMERIC_FAULT,版本=大數字/5.0.8)

但我不認為 uint256 是一個像115792089237316195423570985008687907853269984665640564039457

這是測試

it('should allow to mint a new nft', async () => {
   await MyInstance
     .mintMyNFT([103410030205120203030613], {
       from: accounts[1],
       value: 60000000000000001,
     })
     .catch((error) => {
       console.log(error);
     });

   const NFTOwner = await MyInstance.ownerOf(
     103410030205120203030613
   );
   assert.equal(NFTOwner, accounts[1]);
 });

我怎麼解決這個問題?

JavaScript 只能處理大小為2^53 - 1的整數。因此,要處理 Solidity 中的大數字,您可以使用 BigNumber 庫。假設您正在使用 truffle 的測試套件,那看起來像

const { BigNumber } = require("@ethersproject/bignumber");

it('should allow to mint a new nft', async () => {
   const NFTIndex = BigNumber.from('103410030205120203030613');
   await MyInstance
     .mintMyNFT([NFTIndex], {
       from: accounts[1],
       value: 60000000000000001,
     })
     .catch((error) => {
       console.log(error);
     });

   const NFTOwner = await MyInstance.ownerOf(
     NFTIndex
   );
   assert.equal(NFTOwner, accounts[1]);
 });

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