Uint256
錯誤:溢出
我正在嘗試使用這樣的 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]); });