Import

如果導入合約發生變化,為什麼這個合約的creationCode會發生變化?

  • September 19, 2020

對於以下內容:

pragma solidity >=0.5.0;

contract Include {
   uint z = 1;
}

contract CreationCode {
   uint k = 1;
   function get() external returns (bytes32) {
       return keccak256(type(Include).creationCode);
   }
}

為什麼creationCode更改時 Include.sol 會更改k,這不是 Include.sol 中的變數?

預設情況下,solc 會在生成的字節碼中嵌入編譯元數據的散列。有關詳細資訊,請參閱solidity 文件。原始碼的雜湊包含在編譯的元數據中,因此原始碼的更改將影響元數據和生成的字節碼。

一種解決方案是將 Include 放在與 CreationCode 不同的文件中,並在需要時導入,這樣對 CreationCode 的任何更改都不會影響 Include 的字節碼。

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