Solidity

無法將 react.js (2**256-1) 中的大 uint 傳遞給 Solidity 批准函式

  • September 13, 2021

我正在嘗試呼叫一個簡單的批准()來允許我的契約使用我的代幣。試圖使金額參數 = (2**256 - 1) 但是我每次都收到以下錯誤消息。

未處理的拒絕(錯誤):無效的數值(arg=“amount”, coderType=“uint256”, value=“1.157920892373162e+77”)▶ 11 個堆棧幀被折疊。

我嘗試將數字輸入十六進制,我也嘗試過 toString(),但每次都會遇到相同的錯誤。

當我的前端中的一個按鈕被按下時,下面的程式碼被呼叫。

approveSpend = async() => {
   const maxSpend = (2**256-1);
   const forwardAuctionAddress = ForwardAuction.networks[this.networkId].address;
   await this.tokenInstance.methods.approve(forwardAuctionAddress, maxSpend.toString()).send({from: this.accounts[0]});
   
 }

誰能幫忙

謝謝!

JavaScript 無法原生處理大數字。這就是各種BigNumber圖書館發揮作用的地方。

為了保持一致,最好總是BigNumber在處理 web3 項目中的整數時使用。那裡有很多不同的庫,但我建議使用你的 web3 庫在後台使用的那個——你可能會直接從你的 web3 庫中獲得它的實用程序。

我想到了。我試圖擁有

const maxInt = new BN(2^256 - 1);

您需要使每個數字成為一個新的 BN 並執行算術以使其工作。我認為這些數字也必須在引號中。

const maxInt= new BN("2").pow(new BN("256").sub(new BN("1"))); // Will pass into solidity as uint 2**256 - 1

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