Overflow
如果填充數組索引的最大大小會發生什麼
假設我有一個包含 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。
我已經有了我的答案:實際上溢出所做的是長度,那麼數組是不可訪問的,雖然它沒有被擦除但它仍然在最後從頭開始添加數據