Нужен ли мне компилированный контракт, чтобы получить определение ABI?

Почему мне нужна скомпилированная версия контракта только для определения ABI? Похоже, что адрес контракта должен быть достаточным.

Я очень смущен, потому что я просто пытаюсь запустить контракт, предположив, что он был сделан на другом компьютере. Похоже, сначала мне нужен весь код, используемый для создания контракта, который, я думаю, не гипотетически. (Я буквально просто следую примеру «приветствия»)

16 голосов | спросил ZMitton 17 FebruaryEurope/MoscowbWed, 17 Feb 2016 04:38:12 +0300000000amWed, 17 Feb 2016 04:38:12 +030016 2016, 04:38:12

2 ответа


13
  

Похоже, что адрес контракта должен быть достаточным.

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

Итак, зачем писателям-контрактникам также необходимо предоставить ABI , в дополнение к адресу контракта?

Одна из причин заключается в том, что функция Идентификаторы метода в контракте вычисляются с использованием хэш-функции. Таким образом, невозможно использовать инструмент для поиска байт-кода контракта и извлекать имена функций /методов внутри этого контракта. (Инструмент должен был бы угадать, что такое имена функций, хешировать их и посмотреть, соответствуют ли первые 4 байта идентификатору метода - существует слишком много возможных имен функций.)

ответил eth 17 FebruaryEurope/MoscowbWed, 17 Feb 2016 05:42:41 +0300000000amWed, 17 Feb 2016 05:42:41 +030016 2016, 05:42:41
10

Вам не нужен исходный код, просто ABI. ABI создается, когда код компилируется, но может быть и, как правило, распределен отдельно.

ABI - это просто список имен функций в контракте и типы аргументов, которые они принимают. Вам даже не нужен весь ABI, просто части, с которыми вы хотите взаимодействовать. Например, чтобы сгенерировать ABI для функции greeter контракта greet, вы можете просто перекомпилировать этот контракт:

contract Greeter {
  function greet() constant returns(string);
}

используя solc или онлайн-компилятор . Найдите поле Interface в онлайн-компиляторе. Это определение ABI.

ответил Tjaden Hess 17 FebruaryEurope/MoscowbWed, 17 Feb 2016 04:46:00 +0300000000amWed, 17 Feb 2016 04:46:00 +030016 2016, 04:46:00

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

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

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