Solidity

堅固的大數字 - 返回值

  • December 8, 2020

假設乙太坊 Solidity 從它的一個函式中返回一個數字,我把它輸入到 Javascript 中。

現在,因為我在我的 js 應用程序中編寫測試,我必須檢查返回值是否等於某個數字乘以某個數字。

基本上,讓我們看一下場景。

在 JavaScript 中,

方式1)

web3.utils.toBN('100000000000000') * 30

方式2)

web3.utils.toBN('100000000000000') * web3.utils.toBN('30')

根據以上2個,我可以使用方式1)嗎?原因是如果我使用方式 2,我的程式碼就會變得臃腫不堪toBN

兩者都不。您不能使用*將兩個 BN 相乘。為此,您應該使用該mul功能(https://github.com/indutny/bn.js/#arithmetics

如果您真正想要做的是從/轉換為 wei/ether,您可以使用web3.utils.toWeiweb3.utils.toEther與 結合使用web3.utils.toBN,例如web3.utils.toBN(web3.utils.toWei("30", "ether")).

請注意,您可以使用 JavaScript 的本機BigInt進行許多計算和比較。BigInt("0x100000000000000") * 30n是有效的 JavaScript 並將生成有效的 BigInt。您只需要確保您的目標平台支持它(https://caniuse.com/?search=bigint)。

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