palabra clave 'interna' en una definición de función en Solidity

¿La internalpalabra clave en una definición de función como:

function doSomeThing(uint _param) internal {...}

funciona de manera similar a designar un método como privado en otros idiomas y, por lo tanto, hace que la función solo se pueda llamar desde dentro del contrato?

Respuestas (2)

El internalmodificador se puede comparar mejor con protectedlos lenguajes de programación orientados a objetos. Las funciones internas del contrato C son visibles para el código que se ejecuta en la dirección actual (es decir, la instancia del contrato actual), pero también para los contratos derivados de C.

Tenga en cuenta que debido a la arquitectura de EVM, la visibilidad es algo que se puede aplicar estrictamente a nivel de máquina: no hay forma de llamar a una función en otra dirección a menos que esté explícitamente disponible (es decir, no puede simplemente "lanzar" el contrato a otro tipo). Tampoco es posible convocar funciones internas o privadas del mismo tipo de contrato en una dirección diferente.

Bueno... no hay una forma directa de hacer esas últimas cosas. Pero un elaborado mecanismo de verificación de desafío de depósito técnicamente podría permitirle eludir esta restricción dentro de otro contrato. Después de todo, la función es públicamente visible en la cadena de bloques.
Sí, existen mecanismos para ejecutar la función de otro contrato (con EXTCODECOPY ni siquiera necesitas un servicio externo), pero no en el contexto del otro contrato.

Sí. El internalmodificador significa que la función solo se puede llamar dentro del propio contrato y cualquier contrato derivado.

privateLas funciones no están disponibles en los contratos derivados.

De los documentos :

interno:

Solo se puede acceder a esas funciones y variables de estado internamente (es decir, desde dentro del contrato actual o contratos derivados de él), sin usar esto.

privado:

Las funciones privadas y las variables de estado solo son visibles para el contrato en el que están definidas y no en los contratos derivados.