界: Code Quality

コードの質が低いと、予測できない動作につながります。ユーザーの視点には、それがしばしば使い勝手の悪さとなって現れます。攻撃者にとっては、予期せぬ方法でシステムにストレスを与える機会となります。

Solidity Bad Practices: Missing Constructor

Abstract
コントラクトはコンストラクターを宣言していません。
Explanation
バージョン 0.5.0 より前の Solidity コンパイラー バージョンを使用する際、開発者は、含めるコントラクトと同じ名前の関数を作成することでコンストラクターを定義できます。一般的に、コンストラクターは機密機能のために予約されており、コントラクトの作成時にのみ実行されることを意図しています。コンストラクターの名前にコントラクト名と一致しないなどの誤字があると、コンストラクター内の機密機能は公開されてしまいます。

例 1: 次のコードは、0.5.0 より前のバージョンの Solidity コンパイラーを使用し、コントラクト名とは正確に一致しない名前でコンストラクターを宣言しようとしています。この例では、コントラクト名とコンストラクター名の大文字小文字が一致していません (Missingmissing)。


pragma solidity 0.4.20;

contract Missing {
address private owner;
function missing() public {
owner = msg.sender;
}
}
References
[1] Enterprise Ethereum Alliance Declare Explicit Constructors
[2] Standards Mapping - CIS Azure Kubernetes Service Benchmark 2
[3] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 2
[4] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 3
[5] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[6] Standards Mapping - Common Weakness Enumeration CWE ID 665
[7] Standards Mapping - Smart Contract Weakness Classification SWC-118
desc.structural.solidity.swc118