Función getter para variables públicas

Sep 12 2020

Muchos contratos de token tienen funciones de obtención sin restricciones para las variables de estado, lo que parece redundante (por ejemplo, consulte el contrato ERC20 de OpenZepplin ). Por ejemplo, un contrato podría tenerlo de esta manera:

uint private _totalSupply;

function totalSupply() view public returns (uint) {
return _totalSupply
}

o de esta manera:

uint public totalSupply;

Web3.js y solidity usarían exactamente la misma sintaxis, totalSupply, para recuperar la variable "totalSupply". Como el primero es más común, pero también más detallado, supongo que me falta alguna forma en la que una función getter domina la consulta de un contrato directamente. ¿Alguien puede iluminarme?

Respuestas

1 goodvibration Sep 14 2020 at 21:28

Le falta el hecho de que en el primer caso, solo este contrato puede cambiar el valor de la totalSupplyvariable privada, mientras que en el segundo caso, cada contrato heredado también puede cambiar el valor de la totalSupplyvariable pública.

Por cierto, es por eso que OpenZepplin pasó de variables públicas a variables privadas cuando lanzaron v2.

Fuera de la cadena (por ejemplo, web3.js), ambos paradigmas son idénticos, por supuesto, porque el compilador Solidity genera automáticamente una función pública para cada variable de estado pública en el contrato.

1 LauriPeltonen Sep 12 2020 at 20:39

Se trata de una mejor reutilización. No puede anular las funciones de captador generadas en posibles contratos secundarios, pero puede hacerlo si la función está escrita explícitamente (como en su primer ejemplo). También diría que es una cuestión de mejor legibilidad: muchas personas externas no conocen las funciones getter generadas, por lo que es difícil para ellos entender el código con funciones getter implícitas.