slot, abi, 継承におけるabiに関しての知識を求められる!
記事よも〜
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
}
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;
}
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>