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.

Poor Style: Confusing Naming

Abstract
A classe contém um campo e um método com o mesmo nome.
Explanation
É confuso ter um campo membro e um método com o mesmo nome. Isso torna mais fácil para um programador chamar o método acidentalmente ao tentar acessar o campo, ou vice-versa.

Exemplo 1:

public class Totaller {
private int total;
public int total() {
...
}
}
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 1
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Common Weakness Enumeration CWE ID 398, CWE ID 710
[6] Standards Mapping - Smart Contract Weakness Classification SWC-119
desc.structural.java.poor_style_confusing_naming.member_and_method
Abstract
O contrato usa uma variável sombreada que é ambígua e propensa a uso indevido.
Explanation
O Solidity permite que os desenvolvedores declarem variáveis de estado de forma ambígua. Isso significa que mesmo que duas variáveis diferentes em dois contextos diferentes possam ser declaradas com o mesmo nome, usá-las poderá levar à confusão e ao uso indevido.

Isso pode acontecer tanto no nível da função quanto no nível da herança. Por exemplo, se Contrato1 declara var1 e herda de Contrato2, que também declara uma variável chamada var1, então a variável será ambígua e poderá ser facilmente confundida entre si posteriormente na execução do contrato inteligente.

Exemplo 1: O código a seguir usa herança e declara uma variável de estado com o mesmo nome em ambos os contratos inteligentes. Pode ser difícil determinar qual é o hardcap real da venda do token.


contract Tokensale {
uint hardcap = 10000 ether;

function Tokensale() { }

function fetchCap() public constant returns(uint) {
return hardcap;
}
}

contract Presale is Tokensale {
uint hardcap = 1000 ether;

function Presale() Tokensale() { }
}
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 1
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Common Weakness Enumeration CWE ID 398, CWE ID 710
[6] Standards Mapping - Smart Contract Weakness Classification SWC-119
desc.structural.solidity.swc119