Solidity. Смарт контракты и аудит
2.62K subscribers
246 photos
7 videos
18 files
547 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
Function pointer как аргумент

Для начала посмотрите на код ниже:

contract FunctionPointer {

function f1(uint256 x) internal pure returns(uint256) {
return x;
}

function f2(function(uint256) internal pure returns(uint256) a) internal pure returns(uint256) {
return a(27);
}

function f3() public pure returns(uint256) {
return f2(f1);
}

}

В Solidity вы можете создавать функции, которые будут принимать другие функции в качестве аргументов. Они называются function pointer.

В предыдущем примере у нас есть три функции. f1 - самая простая и возвращает то, что получает в аргументах.

f2 функция с function pointer a ожидает в качестве аргумента функцию со специальной сигнатурой.

В f3 мы вызываем функцию f2 и передаем функцию f1, как параметр. И в данном примере она просто вернет число 27.

Достаточно необычный и редкий формат функций в смарт контрактах. Даже в конкурсных аудитах за все время я встречал их один или два раза.

#function #pointer
👍3🔥2