Можете ли вы определить, является ли msg.sender умным контрактом? - PullRequest
0 голосов
/ 24 сентября 2018

Если у меня вызывается функция в твердости, есть ли способ, которым функция может узнать, является ли msg.sender умным контрактом?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Я не думаю, что есть надежный способ определить, является ли msg.sender смартконтрактом, поскольку его можно взломать, выполнив вызовы от конструктора умного контракта.

Сторож 14-го уровня Этеренавта "Привратник"Два "об этом вопросе.См. Объяснение в: Ethernaut Lvl 14 Gatekeeper 2 Пошаговое руководство: как инициализируются контракты (и как выполнять побитовые операции)

extcodesize (отправитель) должен возвращать 0, если extcodesize является подпрограммойвнутри оригинальной функции конструктора контракта отправителя

0 голосов
/ 24 сентября 2018

Да, вы можете:

function isContract(address _address) returns (bool isContract){
  uint32 size;
  assembly {
    size := extcodesize(_address)
  }
  return (size > 0);
}
...