Solidity
無法將 react.js (2**256-1) 中的大 uint 傳遞給 Solidity 批准函式
我正在嘗試呼叫一個簡單的批准()來允許我的契約使用我的代幣。試圖使金額參數 = (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