Reino: Code Quality

Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.

Poor Style: Confusing Naming

Abstract
La clase contiene un campo y un método con el mismo nombre.
Explanation
Resulta confuso tener un campo miembro y un método con el mismo nombre. Facilita que el programador llame accidentalmente el método cuando intenta acceder al campo o viceversa.

Ejemplo 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
El contrato utiliza una variable oculta que es ambigua y propensa a ser mal utilizada.
Explanation
Solidity permite a los desarrolladores declarar ambiguamente variables de estado. Esto significa que aunque dos variables diferentes en dos contextos diferentes puedan declararse con el mismo nombre, su uso puede generar confusión y usos inadecuados.

Esto puede suceder tanto a nivel de función como a nivel de herencia. Por ejemplo, si Contrato1 declara var1 y hereda de Contrato2, que también declara una variable denominada var1, entonces las variables son ambiguas y se pueden confundir fácilmente entre sí más adelante en la ejecución del contrato inteligente.

Ejemplo 1: El siguiente código utiliza herencia y declara una variable de estado con el mismo nombre en ambos contratos inteligentes. Puede resultar difícil determinar cuál es el hardcap real de la venta del 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