Import
如果導入合約發生變化,為什麼這個合約的creationCode會發生變化?
對於以下內容:
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 的字節碼。