Сделка оракула позволяет заблокировать монеты в произвольное внешнее состояние (например, погода на следующей неделе). Это может рассматриваться как форма опосредованного спора, но один, в котором посредник слеп по отношению к ценности того, что они опосредования, поэтому требуется доверие ниже.
Я прилагается новейшее предложение ниже. Ваши мысли приветствуются, как всегда. Нечто подобное, возможно, было предложено ранее.
сделки Oracle
Сценарии, дизайн, чистые функции. Они не могут опрашивать внешние сервера или импортировать любое состояние, которое может измениться, поскольку это позволит злоумышленнику обогнать блок цепь. Но мы можем совершать сделки, связанные с миром и другими способами.
Рассмотрим пример старика, который хочет дать наследство внуку, либо на внукам восемнадцатый день рождения, или когда человек умирает, что наступит первым.
Чтобы решить эту проблему, человек первого посылает сумму наследства к себе так, есть один выход нужного количества. Затем он создает транзакцию с замком времени внук восемнадцатого дня рождения, который платит монеты в другой ключ принадлежит внуке, подписывает его и дает ему - но не передает его. Это берет на себя 18-й день рождения состояния. Если дата проходит, внук передает сделку и утверждает монету. Он мог бы сделать это раньше, но это не позволяет ему получить монеты любой раньше, а некоторые узлы могут выбрать уронить операции в пуле памяти со временем блокировки далеко в будущем.
Условие смерти сложнее. Как Bitcoin узлы не могут измерить произвольные условия, мы должны полагаться на оракула. Оракул сервер, который имеет пару ключей, а также знаки операций по запросу, когда выражение предоставленный пользователем имеет значение верно.
Вот пример. Человек создает сделку тратит свою продукцию, и устанавливает на выходе:
Код:
<оракул Публичных> CHECKSIGVERIFY <гашиш> OP_TRUE
Это оракул сценарий. Он имеет необычную форму - после подписания проверки толкает данные в стек, то не использовать его. Публичных публикуется на сайте оракулов и хорошо известен. Хэш установлен быть хэш предоставленного пользователем выражение о том, что он умер, написанный в форме оракул знает, как оценить. Например, это может быть хэш строки:
Код:
если (has_died ( 'Джон Смит', born_on = 1950/01/02)) возвращают 1JxgRXEHBi86zYzHN2U4KMyRCg4LvwNUrp;
Этот маленький язык является гипотетическим, было бы определить оракул и может быть что угодно. Возвращаемое значение представляет собой адрес принадлежит внуку.
Еще раз, человек создает эту сделку, но дает его непосредственно к внуку вместо его вещания. Он также обеспечивает выражение, хешируется в транзакции и имя оракула, который может разблокировать его.
Он используется в следующем алгоритме:
- Оракула принимает запрос измерения. Запрос содержит предоставленный пользователем выражение, копию выходного сценария и частично полную транзакцию, предоставленный пользователем. Все в этой операции закончено для scriptSig, который пуст, за исключением.
- Оракул проверяет предоставленные пользователем выражения хэш-хэш в указанном выходном скрипте. Если это не так, она возвращает ошибку.
- Оракул оценивает выражение. Если результат не является адресом назначения выхода, она возвращает ошибку.
- В противном случае оракул подписывает сделку и вставляет подпись в scriptSig. Обратите внимание, что при подписании сделки Bitcoin, входной скрипт устанавливается на подключенный выходной сценарий. Причина заключается в том, что при запуске OP_CHECKSIG, скрипт, содержащий опкод помещается в входной оцениваемого, не скрипт, содержащий саму подпись. Оракул никогда не видел полный вывод его просят подписать, но он не должен. Он знает, выходной сценарий, свой собственный открытый ключ и хэш предоставленного пользователя выражения, которое все это необходимо проверить выходной сценарий и завершить сделку.
- Оракул возвращает недавно подписанный, unbroadcast сделки пользователю.
Если и только если оракул соглашается человек мертв, внук может транслировать две сделки (договор и требование) и возьмите монеты.
Оракул не должен быть большим доверием. Он не видел сделку внук пытается разблокировать, так как он никогда не был показан, таким образом, оракул не может держать внука на выкуп, потому что он не знает, если сделка его подписания для еще существует. Люди могут и должны регулярно оспаривать оракул в автоматическом режиме, чтобы убедиться, что он всегда выдает то, что, как ожидается. Проблемы можно сделать, не тратя ни монеты, потому что ТХ должен быть подписан может быть недействительным (т.е., связанные с операциями, которые не существуют). Оракул не имеет никакого способа знать, если запрос должен быть подписан случайна или реальной. CHECKSIGVERIFY можно заменить CHECKMULTISIGVERIFY, чтобы при п-о-т оракулов, если это будет необходимо.
Оракулы потенциально может оценить что-либо, но ссылка на блок-цепи всегда могут быть одинаковыми. Рассмотрим следующие возможности:
Код:
// Требовать обменный курс между двумя величинами на определенную дату
сегодня () == 2011/09/25 && EXCHANGE_RATE (mtgoxUSD) >= 12,5 && EXCHANGE_RATE (mtgoxUSD) <= 13,5
// Ставка на меня делать то, что я никогда не буду на самом деле сделать
google_results_count (сайт: www.google.com/hostednews «Майк Хирн» Олимпийская золотая медаль) > 0
// Выбор между одним из двух победителей ставки на исход конкурса Евровидение.
если (eurovision_winner () == 'Азербайджан')
вернуться 1Lj9udBVDwptFffGSJSC2sohCfudQgSTPD;
еще
вернуться 1JxgRXEHBi86zYzHN2U4KMyRCg4LvwNUrp;
сегодня () == 2011/09/25 && EXCHANGE_RATE (mtgoxUSD) >= 12,5 && EXCHANGE_RATE (mtgoxUSD) <= 13,5
// Ставка на меня делать то, что я никогда не буду на самом деле сделать
google_results_count (сайт: www.google.com/hostednews «Майк Хирн» Олимпийская золотая медаль) > 0
// Выбор между одним из двух победителей ставки на исход конкурса Евровидение.
если (eurovision_winner () == 'Азербайджан')
вернуться 1Lj9udBVDwptFffGSJSC2sohCfudQgSTPD;
еще
вернуться 1JxgRXEHBi86zYzHN2U4KMyRCg4LvwNUrp;
Условия, которые контролируют ли гадательные знаки могут быть сколь угодно сложными, но блок цепь никогда не должно содержать более одного хэш.