Overflow

如果填充數組索引的最大大小會發生什麼

  • May 31, 2018

假設我有一個包含 2 ^ 256-1 個元素的數組如果我添加另一個元素會發生什麼?

測試契約

pragma solidity ^0.4.0;

contract Bar {
   uint256[] public data;
   constructor() public {
       data.length = uint256(~0);
   }
   function foo(uint256 value) public {
       data.push(value);
   }
}

在 remix 開始時,您可以訪問 0 到 0xFFFF..FF 之間的任何索引,返回值始終為 0。

如果您呼叫foo(1234)它將成功,但數組將顯示為空。

如果您foo(1234)第二次呼叫它將成功,並且該數組將在索引 0 處具有單個值 1234。

我已經有了我的答案:實際上溢出所做的是長度,那麼數組是不可訪問的,雖然它沒有被擦除但它仍然在最後從頭開始添加數據

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