✅ overflow, underflow and bytes and address

slot, abi, 継承におけるabiに関しての知識を求められる!

記事よも〜

■ Inheritance Contract Slot

contract Base {
    uint256 basevar = 0;
}
contract Base2 {
    uint256 basevar2 = 2;
}

contract C is Base, Base2 {
    // ---------------virtual ↓ ----------------------
    uint256 basevar = 0; // Base Contract // slot0 
    uint256 basevar2 = 2; // Base2 Contract // slot1
   // ---------------------------------------------------
    uint256 cvar = 0; //slot2
}

▪️Contract Storage

Every contract on Ethereum has storage like an array of 2^256 (indexing from 0 to 2^256 - 1) slots of 32 bytes each.

//これで書き換えるならcodexの配列におけるownerが格納されているslotを理解することで変更できるよ
function revise(uint i, bytes32 _content) contacted public {
    codex[i] = _content;
  }

▪️Dataを考える

slot0に対応するcodex[i]のiの値がわかればreviseで書き換えることができる!

ここでのiにおけるslotNumberはContractのmax容量**(2^256 - 1)** + 1の値

ということはslotNumberからiの値を計算したい

p = codex[0]の時のslotの値

<aside> ⛽ 例:slot10をrevise関数で変更したい!codexのiは何番だ? i = 10 - p p = 4だとしたら i = 6 //

</aside>