Как работают службы оракула под капотом?

Я прочитал много вопросов об услугах оракула, но я не понимаю , как они работают. Часто я читаю ответы следующим образом: https://ethereum.stackexchange.com/a/9825/5892

  

Умный контракт не может получить доступ к внешней среде ...

Но как работают «Oraclize» или «RealityKeys» и как я могу создать свою собственную службу оракула в публичной блок-цепочке?

30 голосов | спросил Artem 23 Jam1000000amMon, 23 Jan 2017 10:53:03 +030017 2017, 10:53:03

3 ответа


28

Эдмунд Эдгар из Настоящие ключи здесь.

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

Это можно сделать либо по цепочке, либо по сети. Мы делаем это вне сети, поэтому мы просто предоставляем подписанные данные и ключ, и пользователи захватывают эти данные с нашего сайта и отправляют их самим контрактам. Обычно это будет часть DApp, поэтому PredictionToken имеет экран, который создает транзакцию, чтобы захватить идентификатор с нашего сайта и установить контракт, а также другой экран, чтобы захватить подписанные данные с нашего сайта и отправить транзакцию для урегулирования контракта. Oraclize делает это в сети, поэтому ваш контракт отправляет запрос на их контракт, и их контракт записывает событие в журнал событий и возвращает идентификатор. У них есть процесс просмотра журнала событий, и когда данные готовы, они отправляют его в качестве подписанной транзакции к вашему контракту, которая проверяет отправителя контракта (это еще один способ проверить, кто подписал данные), и делает все, что предполагается сделать.

С точки зрения разработчика преимущество использования on-chain заключается в том, что вам нужно иметь дело только с запросами в одном месте (RPC-интерфейс вашего узла), и если вы точно знаете, когда ответ будет вызван, ваш пользователь только должен отправить одну транзакцию, а не одну, чтобы настроить контракт, а другой - отправить результат. Недостатком является то, что это сложно проверить правильно (вам либо нужно макетировать свои услуги, либо использовать живую тестовую сеть), и есть неприятные краевые случаи, связанные с использованием газа. (Есть несколько способов сделать это правильно, но если вы посмотрите на фактические контракты с использованием Oraclize, они часто позволят Oraclize сбрасывать все деньги из баланса контракта.)

Обратите внимание, что, поскольку вы никогда не сможете полностью доверять службе (Oraclize имеет криптографическое доказательство, подтверждающее их утверждение о том, что данные, которые они извлекли, действительно поступали с сайта, который они говорят, но контракт не может проверить его, help), вы можете захотеть, чтобы несколько служб выполняли одно и то же, и для контракта требуется несколько подписей. Это также то, что вы, возможно, захотите сделать в разрешенном контексте blockchain, где уже есть несколько известных участников, выполняющих узлы и блокирующие блоки, поэтому имеет смысл заставить их подписать данные.

ответил Edmund Edgar 23 Jam1000000amMon, 23 Jan 2017 11:48:30 +030017 2017, 11:48:30
22

Я возьму удар на очень высоком уровне обзора, описав обобщенную цель, ограничения Smart Contracts и контуры решения. Это, мы надеемся, предоставит некоторый контекст для деталей реализации.

1) Цель . Smart Contract, который может реагировать на наблюдаемое событие или точку данных во Вселенной. Поскольку в Интернете так много данных, что в Интернете, естественно рассматривать автоматизированные ответы на происходящие события. Это настолько распространено вне блочных цепей, что может показаться удивительным, что в блочных цепочках это так сложно.

2) Проблема . Смарт-контракт не может использоваться для получения данных, например, типичный веб-сервер может подключаться к API или RSS-каналу (или экранированию экрана и т. Д.). На довольно глубоком уровне здесь существует настоящая проблема, потому что все, что есть в блокчейне, должно подлежит проверке всеми шахтерами. Любой такой внешний источник входных данных также будет источником неопределенности, которая приведет к запутыванию проверки. Все в цепочке должно проверяться не только одним сервером, но и серверами ALL, а не только сегодня. Навсегда.

Как бы какой-либо узел подтвердил, спустя годы, что сегодня, точно в это время, определенный URL-адрес создал определенный поток данных? Если он не может этого сделать, то как бы подтвердить истину данных в цепочке? Если это ненадежно (это не так), тогда все будет разваливаться. Если блок-цепь не объективно проверяема, используя только данные в самой блок-цепочке, она не работает.

3) Решение Oracle . Мы можем представить себе, что доверенный человек нанят на службу (бедный парень). У него есть привилегированная учетная запись, которая может вводить данные, которые он получает из-за блокады, и он зависит от обновления блок-цепи с интервалами. Предположим, он никогда не спит, и он обновляет данные тикера каждые несколько минут.

Мы можем представить упрощенную функцию вдоль этих строк:

function recordTickerData(bytes8 symbol, uint high, uint low, uint close) 
  onlyOracle 
  returns(bool success) 
{
  // store the data
  // possibly react to the data
  return true;
}

Великий. Только Oracle может вводить данные таким образом, но как только данные будут введены, мы можем начать с ними делать что-то, чего мы хотим.

Шахтеры смогут проверить блокировку. Они не смогут подтвердить, что входы Oracle соответствуют чему-либо во внешнем юниверсе, но они смогут подтвердить, что входные данные Oracle разрешены, и любые результирующие транзакции являются законными.

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

Посмотрите, где это происходит?

Не вдаваясь в детали реализации, Oracle должен будет разрешить входящие данные из источника и сопоставить их с интерфейсом контракта. Там будет информация о том, как часто вызывать функцию и т. Д. И будет административная проблема финансирования, поскольку Oracle потребуется постоянный источник финансирования для оплаты газа за периодические инъекции данных. Любой, кто имеет серьезное финансирование, захочет проверить, что соглашение Oracle заслуживает доверия, поскольку его исходные данные будут иметь нетривиальные последствия. Поэтому у нас есть требование выбора источника данных, который будет очень приятным. У нас есть несколько общих черт для обобщенных решений Oracle - давайте иметь надежную внешнюю службу, которая отображает внешние данные в одну из наших функций ввода и периодически отправляет транзакции обновления.

Мнение рынков, таких как Оже и Гнозис, представляет собой несколько иной подход к информации из внешнего мира. Предположим, что ваш контракт зависит от одноразового истинного /ложного условия, и не очевидно, что есть внешний источник, о котором вы можете знать заранее, который передаст вам простой прав на ваш контракт.

Например, выиграет ли Трамп на выборах 2017 года?

Мнения рынков дают возможность задать вопрос и, по сути, передать аутсорсинг правде в человеческое сообщество. Он принимает форму рынка ставок, который в конечном итоге решает вопрос таким образом, который вы можете настроить заранее.

В псевдокоде ваш контракт может рассмотреть:

if(AugurQuestion(123).isDecided and isTrue) then ... do stuff.

Надеюсь, что вышеизложенное несколько сработает, а также предоставит некоторый контекст деталям реализации этих усилий.

ответил Rob Hitchens B9lab 23 Jpm1000000pmMon, 23 Jan 2017 12:01:21 +030017 2017, 12:01:21
9

У них есть контракт, который взаимодействует с реальным миром.

  1. вы регистрируетесь в своем контракте и определяете функцию, которую они должны вызывать
  2. их контракт считывается внешним объектом, который видит ваш «запрос»
  3. внешний объект выполняет запрос (например, вызов random.org)
  4. вызывает вашу функцию обратного вызова либо напрямую, либо через свой контракт.
  5. прибыль; -)
ответил Roland Kofler 23 Jam1000000amMon, 23 Jan 2017 11:16:33 +030017 2017, 11:16:33

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

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

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