Reino: Code Quality

Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.

Solidity Bad Practices: Missing Constructor

Abstract
O contrato não declara um construtor.
Explanation
Ao usar versões do compilador Solidity anteriores à versão 0.5.0, os desenvolvedores podem definir um construtor criando uma função com o mesmo nome do contrato que o contém. Os construtores em geral são reservados para funcionalidades confidenciais e devem ser executados apenas na criação do contrato. Se o construtor tiver um erro de digitação que faça com que o nome não corresponda ao nome do contrato, a funcionalidade confidencial no construtor será exposta.

Exemplo 1: O código a seguir usa uma versão do compilador Solidity anterior à 0.5.0 e tenta declarar um construtor com um nome que não corresponde exatamente ao nome do contrato. Nesse exemplo, as maiúsculas e as minúsculas do nome do contrato e do nome do construtor não são correspondentes (Missing vs missing).


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