Что такое предварительно скомпилированный контракт и как они отличаются от собственных кодов операций?

В Желтой бумаге указано:

  

Это четыре так называемых «скомпилированных» контракта, предназначенных как   предварительная часть архитектуры, которая позже может стать родной   расширения. Четыре договора в адресах 1, 2, 3 и 4 выполняют   эллиптическая кривая функция восстановления открытого ключа, 256-битный хэш SHA2   схемы, 160-битной хэш-схемы RIPEMD и функции идентификации   соответственно.

Что такое предварительно скомпилированный контракт и как они отличаются от собственных кодов операций? Если предварительно скомпилированный контракт становится родным расширением, что он получает? Учитывая широкое использование SHA2-256, почему он не был реализован изначально?

26 голосов | спросил eth 23 Jam1000000amSat, 23 Jan 2016 04:40:45 +030016 2016, 04:40:45

2 ответа


23

Даже если я не знаю истинной причины, я постараюсь угадать. Были бы следующие соображения:

  1. Размер пространства имен . Существует не так много возможных кодов операций, поэтому их нужно распределять очень экономно. С другой стороны, пространство контрактных адресов практически не ограничено для всех практических целей.

  2. Риск повторного использования имени . Это хороший принцип разработки программного обеспечения не для повторного использования имен (или кодов операций), особенно в системе, в которой никто не контролирует обновления.

  3. Utility . Есть некоторые операции, которые всегда полезны, например, арифметические операции, сверление бит, управление потоком и другие. С другой стороны, криптографические примитивы могут быть в будущем доказаны неадекватными, и вместо этого будет использовано другое. Приведение таких примитивов в коды операций рискует потратить ценное пространство имен на то, что может стать устаревшим.

  4. Нежное продвижение популярного /полезного кода . Если некоторые вещи, например, операции zkSNARK или проверка Dogecoin PoW, начиная с кода целостности, а затем частично оптимизируются, становятся очень полезными и популярными, они могут стать предварительно скомпилированным контрактом. Такое продвижение является гораздо более мягким изменением в сети, чем введение нового кода операции.

ответил Alexey Akhunov 1 FebruaryEurope/MoscowbMon, 01 Feb 2016 01:08:48 +0300000000amMon, 01 Feb 2016 01:08:48 +030016 2016, 01:08:48
5

Не авторитет, но я знаю кого-то, кто ...

Из статьи Виталика Предыстория протокола Ethereum

  Вторая - идея «прекомпиляций», решение проблемы   позволяя использовать сложные криптографические вычисления в EVM   без необходимости иметь дело с EVM накладными расходами. Мы также прошли   много более амбициозных идей относительно «национальных контрактов», где, если шахтеры   имеют оптимизированную реализацию некоторых контрактов, которые они могли бы «использовать»   газовый тариф этих контрактов вниз, поэтому контракты, которые большинство шахтеров   может выполнять гораздо быстрее, естественно, иметь более низкий газ   цена; однако все эти идеи были отвергнуты, потому что мы не могли   придумать криптоэкономически безопасный способ реализовать такую ​​вещь.   Злоумышленник всегда может создать контракт, который выполняет некоторые   скрытая криптографическая операция, распределите люк   себя и своих друзей, чтобы позволить им выполнить этот контракт   гораздо быстрее, затем проголосуйте за газприбор и используйте это для DoS   сеть. Вместо этого мы выбрали гораздо менее амбициозный подход   с меньшим количеством прекомпиляций, которые просто указаны в   протокол, для общих операций, таких как хэши и подпись   схемы.

Я не думаю, что есть «правильный ответ» о том, должна ли какая-либо данная функциональность быть предварительно компилируемой или родной. Похоже, что это сводилось к дизайнерскому решению по всем причинам, изложенным ранее. Если VB или gavofyork сами не взвешивают, мы никогда не узнаем наверняка ...

ответил benjaminion 14 +03002017-10-14T21:59:51+03:00312017bEurope/MoscowSat, 14 Oct 2017 21:59:51 +0300 2017, 21:59:51

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

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

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