Inheritance

在 Solidity 中,當存在繼承時,插槽分配如何用於儲存變數?

  • December 2, 2018

在一個簡單的solidity合約中,沒有繼承,儲存變數從slot 0開始按順序分配。

但是在繼承的情況下,被繼承的變數出現在之前還是之後呢?

賦值如下:首先到繼承的變數,從最左邊的合約到最右邊,最後以你所在的目前合約結束。

在以下範例中,C繼承自Baseand Base2,按此順序。插槽分配將從 開始Base,跟隨Base2,最後C

pragma solidity ^0.5;

contract Base {
   uint256 basevar = 0;
   constructor() public {
       basevar = 1;
   }
}

contract Base2 {
   uint256 basevar2 = 2;
   constructor() public {
       basevar2 = 1;
   }
}

contract C is Base, Base2 {
   uint256 cvar = 0;

   function getCvar() public view returns(uint256) {
       return cvar;
   }

   function getBasevar () public view returns(uint256) {
       return basevar;
   }

}

basevar分配槽 0, basevar2分配槽 1,cvar分配槽 2。

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