вызов функции другого контракта динамически

Можно ли создать функцию в Solidity, которая вызывала бы произвольную функцию на произвольном контракте со всеми параметрами?

В JavaScript я бы написал что-то вроде этого

function callArbitrary(contract, func, params){
    contract[func](params);
}

есть ли версия целостности?

5 голосов | спросил Dr Gorb 29 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 29 Sep 2016 18:55:41 +0300 2016, 18:55:41

1 ответ


4

Это обычно не рекомендуется, если вы не уверены, что делаете, поскольку он может открыть много дыр в безопасности, и лучше всего только называть контракты, которые известны заранее.

Тем не менее, техника выглядит так:

address myContract = 0xabcdef....;
myContract.call.gas(msg.gas-3000).value(1 ether)(bytes4(sha3("myFunction(uint256,bytes32,string)")), 42, 0xabc, "hello")

По существу, вы используете метод call, а затем используйте gas и value, чтобы добавить газ и значение (вы можете опустить значение, если оно равно 0) , Затем вы передаете первые 4 байта хэша sha3 функции, которую вы хотите вызвать.

ответил Tjaden Hess 29 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 29 Sep 2016 23:41:25 +0300 2016, 23:41:25

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132