Solidity

在返回數組的庫中呼叫函式時出現異常

  • November 5, 2021

我有一個具有公共功能的 Solidity 庫,它返回一個 uint8

$$ $$大批。

pragma solidity ^0.8.4;

library LibA {
   function getArray() public pure returns (uint8[] memory) {
       uint8[] memory arr;
       arr[0] = 100;
       ...

       return arr;
   }
}

然後我有一個引用庫的 Solidity 智能合約,並呼叫試圖訪問庫中定義的數組的函式。程式碼看起來像這樣。

pragma solidity ^0.8.4;

import "./LibA.sol";

contract SampleContract {

   function doSomething(uint8 _index) public pure returns (uint8) {
       return LibA.getArray()[_index];
   }
}

程式碼編譯得很好。我有一個使用 Hardhat 執行的 mocha 單元測試來測試該方法,當我執行單元測試時,我得到以下異常。

錯誤:處理事務時出現 VM 異常:使用緊急程式碼 0x32 恢復(在越界或負索引處訪問的數組)

我對 Solidity 很陌生,我無法準確理解異常的原因是什麼以及如何解決它。一些幫助將不勝感激。

我以前從未使用過庫,但我相信問題可能是您試圖在記憶體中擁有一個動態大小的數組。這應該是

uint8[] memory arr = new uint8[](arraySize);

為了預先分配記憶體中的空間。

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