«внутреннее» ключевое слово в определении функции в Solidity

Ключевое internalслово в определении функции, например:

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

работает аналогично назначению метода как частного на других языках и, таким образом, делает функцию вызываемой только из контракта?

Ответы (2)

Модификатор internalможно лучше сравнить с protectedобъектно-ориентированными языками программирования. Внутренние функции контракта C видны коду, работающему по текущему адресу (т. е. текущему экземпляру контракта), а также контрактам, производным от C.

Обратите внимание, что благодаря архитектуре EVM видимость может быть строго обеспечена на машинном уровне: невозможно вызвать функцию по другому адресу, если она явно не доступна (т. е. вы не можете просто «привести» контракт к другой вид). Также нельзя вызывать внутренние или приватные функции одного и того же типа контракта по другому адресу.

Ну... нет прямого способа сделать эти последние вещи. Но сложный механизм проверки депозита технически может позволить вам обойти это ограничение в рамках другого контракта. В конце концов, функция общедоступна в блокчейне.
Да, есть механизмы для выполнения функции другого контракта (с EXTCODECOPY вам даже не нужна внешняя служба), но не в контексте другого контракта.

Да. Модификатор internalозначает, что функция может быть вызвана только внутри самого контракта и любых производных контрактов.

privateфункции недоступны в производных контрактах.

Из документов :

внутренний:

К этим функциям и переменным состояния можно получить доступ только внутри (т.е. из текущего контракта или контрактов, производных от него), без использования this.

частный:

Частные функции и переменные состояния видны только для контракта, в котором они определены, а не для производных контрактов.