Solidity

uint16轉換問題

  • March 11, 2021

所以我想使用 Typescript 測試這個 Solidity 程式碼,但遇到了類型轉換問題。


uint16 base;

function addNumberToBase(uint16 number_) {
   // This number must be between 1 ~ 5
   require(number_ < 1 && number_ >= 5, "This number must be between 1 ~ 5");
   base += number_;
}

這是 TS 測試程式碼,我在這裡嘗試了很多類型,但沒有奏效。

it("Should add a number between 1 ~ 5 to base", async () => {
    const number_ : Number = 4;
    await contract.addNumberToBase(number_); 

    // But here getting this error: 
    // Error: VM Exception while processing transaction: revert This number must be between 1~5
});

使用Uint16ArrayBigNumberish類型也是如此。

我的建議是,這是因為在兩種語言的類型之間進行轉換時存在問題。那麼,是否有任何有用的庫來轉換uint16

謝謝。

這一行:

require(number_ < 1 && number_ >= 5, "This number must be between 1 ~ 5");

這是不可能的。

它應該說:

require(number_ >= 1 && number_ <= 5, "This number must be between 1 ~ 5");

如果你會得到一個 JavaScript 數字或 BigNumber,我不是 100%,因為uint16它可以由 JavaScript 處理。對於 JavaScript 原生類型來說太大的類型,它總是BigNumber 。uint256

如果返回的值看起來像一個奇怪的對象,用toString(10)它來解析它,例如var value = parseInt(response.toString(10));

希望能幫助到你。

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