Контракты Oracle
Oracle Контракт представляет собой набор Bitcoin операций, которая позволяет несколько сторон заключить соглашение на основе результатов события с минимальным доверием. Многочисленные партии каждый потратить Bitcoins, которые объединяются в один выход. Этот выход может быть погашен только подмножеством сторон на основе результатов этого мероприятия. Например, обе стороны могли бы поставить, если Royal ребенок будет мальчик или девочка. Каждая ставка 1 Биткойн. Если ребенок родится мальчик, то первая партия получит выход (2 Bitcoins минус сборы), а если ребенок девочка, то вторая сторона получит выход. Третья сторона, называемая оракул, несет ответственность за принятие решения о результатах мероприятия и позволяет выигрышную партию выкупить сделку.
Основные Bitcoin Обзор транзакций
Сделки являются основой книги Bitcoin. Транзакция состоит из набора входов и выходов. Выходы должны добавить до меньше или равно к входам. Каждый вход является выходом предыдущей операции. Каждый выход представляет собой скрипт, который принимает набор данных в качестве входных данных. Когда вы проводите Bitcoins, вы должны дать данные, которые правильно выполняет сценарий. Как правило, сценарий требует, чтобы вы доказать, что вы имеете доступ к закрытому ключу. Тем не менее, сценарий может иметь множество других форматов, которые считаются нестандартными.
Определения
Событие - То, что происходит в будущем со многими возможными результатами.
Договор сделка - сделка, которая содержит входы, которые приходят от некоторых или всех сторон, участвующих в договоре. Сделка содержит единственный вывод, который описывает то, что условия позволят выкупу сторон.
Выкуп сделка - сделка, которая проводит вход контракта сделки.
Oracle - третья сторона, которая соглашается с тем, чтобы решить, происходит ли событие или нет. Оракул позволит Договор Выкуп должен быть создан.
Возврат сделка - сделка, которая автоматически вернет выход контракта сделки в том случае, если Oracle не может связаться по указанной дате.
Выражение Event - это строка, которая содержит определяет, что событие определяет выплату для случая, вместе с тем, кто должен получить выплату для каждого результата.
Изменение - когда вход при условии, что больше, чем предполагаемый выход, дополнительный выход добавляется получить «изменение». Например, если вы проводите вход 1 BTC, и хотите отправить .75 BTC по адресу, вы хотите получить .25 BTC назад как изменение. Это делается путем создания дополнительного вывода на адрес вы контролируете и добавив значение .25 BTC к нему.
Основные сведения
Две стороны желают быть выплачены на основании результатов мероприятия. Если событие происходит с Итоговым А, то партия 1 должна быть оплачена. Если событие происходит с Итогового В, то партия 2 должна быть оплачена. Для того, чтобы определить исход события, третьей стороной, называется Oracle, зачислен. Оракул просто определяет, если событие произошло, и то, что исход. Если результат А, то он позволит партии 1, подлежащей выплате. Если результат B, то он позволит партии 2, подлежащей выплате. Если событие еще не произошло, то ни одна из сторон могут быть оплачены.
Подготовка к Договору
Оракул создает набор событий, он готов вынести решение. Событие является то, что произойдет в будущем, и каждое событие будет иметь набор результатов. Вот некоторые примеры событий и результатов:
- Англия 2016 Чемпионат мира по
- Англия победит
- Англия не выиграет
- 2016 Победитель Кубка мира
- Англия победит
- Франция победит
- Бразилия победит
- Кто-нибудь еще выиграет
- 2016 Чемпионат мира по Классификатор США против Коста-Рика
- США Победит
- Коста-Рика выиграет
- Привлечь
- По крайней мере одна страна покинет ЕС на 1 января 2015 года
- да
- нет
Простейший тип события является бинарным событие. В то время как другие виды договоров возможно, первоначальная реализация контрактов будет сосредоточена на этих бинарных событиях. В приведенных выше примерах «Англия победы на чемпионате 2016 World» и «По крайней мере одна страна выйдет из ЕС». Для остальной части этого документа, только бинарные контракты рассматриваются.
После того, как оракул публикует список событий и результатов он будет выносить решения, обе стороны должны согласиться принять противоположные стороны о результатах мероприятия. Стороны должны договориться о цене каждого из них готов платить, и общую сумму ставки. Такое согласование может происходить вручную (я хочу, чтобы заключить договор с другом), или даже может быть автоматизирован с помощью службы сопоставления (каждая сторона представляет готовность заплатить определенную сумму за один исход какого-либо события, и если какие-либо двух сторон может создать ставку соответствия, договор генерируется и передается сторонам подписать).
Соответствующие услуги могут быть запущены оракулом или быть отдельной и обрабатывать несколько оракулов. Соответствующие услуги могут быть запущены как P2P службы, где оракулы и пользователи могут зарегистрироваться в сети.
Финансирование контракта
После того, как контракт готов быть создан, он должен финансироваться. Этот процесс может быть сделано несколькими способами, например, следующее:
Каждая сторона может добавить вход в сделку контракта и выход для изменения
Каждая сторона может представить средства для доверенного лица, который держит баланс для каждой учетной записи, а затем доверенная сторона будет финансировать входы контракта.
Общий адрес может быть использован, например, что каждая сторона может представить платеж, который можно потратить только если обе стороны согласны.
Этот документ посвящен третий метод - с помощью общего адреса. Ниже приведен пример транзакции, где Сторона 1 имеет неизрасходованный выход 2 BTC и желает внести свой вклад в 1,5 BTC к договору, и Сторона 2 имеет неизрасходованный выход 3 BTC и хочет внести свой вклад 0,5 BTC. В конце этого множества сделок, есть 2 BTC готова финансировать контракт.
Есть еще проблемы, связанные с этим типом финансирования. Обе стороны не имеет никакой гарантии, что другие будут финансировать свои сделки. Точно так же, как только средства прибывают, нет никакой гарантии, что другая сторона не будет держать заложника Bitcoins, поскольку обе стороны должны договориться, чтобы провести их из общего адреса. Есть менее зловещие проблемы, которые могут существовать, например, другая сторона теряет свой секретный ключ к общему адресу или просто становится недоступным.
Один из способов избежать этого, чтобы иметь прикован транзакцию, которая будет автоматически проводить выходы общего адреса перед финансированием. Реализация Микроплатеж канала делает этот подобный тип сцепления. В то время как он уязвим к транзакции пластичностью, эта проблема, вероятно, произойдет с текущей сети, поскольку такие изменения не являются стандартными и не будут передаваться не.
Самым очевидным решением этой проблемы является иметь обе стороны разделяют хэш их финансирования операций, таких, что контракт может быть создан. Тем не менее, это по-прежнему уязвимы к другому эксплуатируют, где одна стороны отказывается представить свои сделки финансирования после того, как другие ПРЕДСТАВЛЯЮТ, что делает сделки договора недействительными и оставить монеты unspendable (входы будут содержать транзакции, которая не существует).
Чтобы избежать этого, сделка возврата, содержащая каждый вход должна быть создана, чтобы вернуться к адресу, который финансировал его. Эта сделка будет содержать значение входной последовательности из 0, так что он может быть заменен на более позднее время, а время блокировки некоторого небольшое количество времени в будущем, такой договор может быть создан после того, как оба сторон профинансировали общий адрес.
Сделка по контракту также генерируется с более высоким значением последовательности (1), который проводит оба входа с одним выходом. Это выход расходуемый когда два из трех участвующих сторон (оракул и два финансирования сделки) согласно, что условия были выполнены, чтобы провести его.
В этом случае, если сделка договора не будет создана в течение 30 минут, возврат сделка может быть опубликована в blockchain. Если сделка договора создана и подписана, он заменит операцию возврата и добавить к blockchain. Обе стороны защищены друг от друга и не должны доверять другие будут соблюдать и только в опасности для платы за транзакцию для возврата. Кроме того, можно установить блокировку время, чтобы быть после этого события, так что сделка договора не должен быть опубликована только после этого события, таким образом, оракул может не знать, если сделка реальна или нет.
Договор сделки Выход Структура
Контракт будет состоять из входов от общего адреса и один выход. Содержимое скрипта для этого вывода являются для контракта две партии:
<выражение хэш> OP_DROP 2
Выражение является хэш hash160 (х) строки выражения. Выражение представляет собой строку в следующем формате: «
Можно иметь другой язык выражений, который поддерживает более сложные контракты. Для контрактов с несколькими сторонами, другой синтаксис должен быть использован. Сценарий также придется модифицировать, так как больше не будут иметь н- М проверка multisignature работы, так как стороны, теряющих может сотрудничать с победителем. В этом случае потребуется скрипт, который требует оракула плюс победителя подписать. Кроме того, можно иметь контракты, которые требуют N из M оракулов договориться, прежде чем он может быть выплачен, но другой сценарий будет необходимо.
Вполне возможно, оракул не может быть доступен для рассмотрения события, может отказаться подписать сделку, или может удерживать заложник средств. В этом случае сделка возврата может быть создана на выходе контракта для возврата средств. Время блокировки может быть установлено в течение нескольких дней после того, как событие должно быть завершено, и последовательность ввода установлен в 0. Когда происходит событие, новая транзакция может быть создана с последовательностью 1 на входе и стопорное время финала.
Есть два возможных договоров выкупа, один для каждого исхода события. Так как оракул будет подписывать только один из них, только один может быть действительным, и опубликован блок цепи.
Возможные проблемы
Основной эксплойт, который существует в том, что нет никакой гарантии, что оракул также занимают позиции в контрактах, и всегда на стороне с собой для этих операций. Репутация оракула будет по-прежнему иметь важное значение и оракул операции будут видны в blockchain. Пользователи, которые эксплуатируют могут сообщить об этом и доказать свое утверждение, показав выражение, которое соответствует хэш. Если это становится проблемой, более продвинутое использование случай, имеющий несколько оракулов, необходимых может предотвратить эту проблему (требующий 3 из 5 подписей, например, и с 3 оракулов участвует).
Более чем две стороны
Язык выражений не поддерживает более двух сторон, хотя это может быть продлен. Случай структура синтаксис может быть использован для результатов. Подписание контракта должно быть изменено таким образом, чтобы проигравшие стороны не могут сотрудничать, чтобы претендовать на контракт. Пример сценария, чтобы сделать это потребовало бы одной из сторон (1 из N подписи) и п м оракулов выкупить. Такие сценарии становятся более сложными, но возможно.
Несколько оракулы
Несколько оракулы могут снизить риск возникновения один оракул ввести договор в качестве участника и всегда вынесения решений в его пользу, если он участвует. Там еще есть риск того, что несколько оракулов могут сговариваются или даже один и тот же объект. Там также должны быть координация оракулов по согласованию с теми же идентификаторами событий и результаты такие, что контракты могут быть обработаны.
Передача договоров
Сторона может хотеть купить права на контракт с одной из сторон, которые в настоящее время его владельцем. Это может быть сделано путем создания транзакции, которая принимает два ВВОД одну из новой партии и сделки по контракту, и один выход (обновленный контракт с адресом Party 3 Scandinavia и открытым ключом вместо партии 1). Оракул мог позволить этому произойти, потому что Сторона 2 в области прав не изменится в этом случае и подписать выход первоначальный договор наряду с партией 1. Новая сделка должна была бы быть дано Часть 2, который теперь будет не в состоянии погасить первоначальный договор сделка, поскольку это будет потрачено.