Edit: протокол Адама Бэка в сообщение # 37 вытесняет этот протокол (см также пост # 49).
1. Алиса и Боб желают сделать честную монету бросают, где каждый из них вводит X монет, а победитель получает 2X монеты.
2. Алиса выбирает некоторый секретный A1 и раскрывает Бобу значение А2 = SHA256 (А1), и Боб выбирает какой-то секрет B1 и показывает Алисе значение В2 = SHA256 (В1)
3. Алиса создает "делать ставку" сделка, которая принимает данные Алисы из X монет и вход Боба Х монет, и может быть потрачено ((подпись Алисы + подпись Боба) ИЛИ (младший бит (A1 исключающего B1) является 0, и подпись Алисы) ИЛИ (LSB (А1 исключающее B1) является 1, и подпись Боба)), я имею в виду здесь, что это "делать ставку" транзакция имеет A2 и B2 жестко прописана в нем, и (A1 XOR B1) вычисляется с использованием OP_SHA256 при выполнении сценария с необходимыми прообразами.
4. Алиса подписывает сделку возврата, которая проводит эти 2X монеты обратно адрес Алисы и Боба (так что каждый получает X монету обратно), и имеет Locktime из (скажу) 300 блоков в будущее, и просит Боб подписать этот возврат сделку.
5. После того, как Боб подписывает сделку возврата, Алиса просит Боба подписать "делать ставку" сделка и транслировать "делать ставку" сделка по сети Bitcoin.
6. Алиса создает "Reveal1" сделка, которая принимает в качестве входного сигнала (скажем) 3X своих собственных монет, и может быть потрачено ((подпись Алисы + подпись Боба) ИЛИ (выявление какой-B, который удовлетворяет OP_SHA256 (B) == B2, и подпись Боба))
7. Алиса просит Боба подписать сделку возврата для "Reveal1" с Locktime из (скажем) 100 блоков в будущее.
8. Боб создает "Reveal2" сделка, которая принимает в качестве входного сигнала (скажу) 3X своих собственных монеты, и может быть потрачена ((подпись Алисы + подпись Боба) ИЛИ (показывая некоторые А, удовлетворяющую OP_SHA256 (А) == А2 и раскрывая некоторые B, удовлетворяющие OP_SHA256 (B ) == B2 и подпись Алисы))
9. Боб просит Алису подписать сделку возврата для "Reveal2" с Locktime из (скажем) 200 блоков в будущем.
10. Боб передает His "Reveal2" сделка, и когда Алиса достаточно, чтобы уверенно "Reveal2" будет добываться в blockchain она транслирует ее "Reveal1" сделка. В зависимости от суммы Х ставки, Алиса может выбрать соответствующий порог доверия. Например. если Алиса не ждать, по крайней мере, 1-подтверждение, то это может быть рискованно, так как Боб мог бы попытаться транслировать конфликтующую транзакцию (после трансляции Alice "Reveal1") С более высокой платой, которая тратит на 3X монету ввод "Reveal2" по адресу, который он контролирует.
11. Если Боб проводит Алисес 3X монеты игрового с помощью операции "Reveal1" в течение следующих 100 блоков, то он показывает его прообраз B1
12. Теперь Алиса может провести сделку "Reveal2" в следующем (по крайней мере) 100 блоков и тем самым раскрыть ее прообраза A1, чтобы получить обратно 3X монеты, которые она потеряла.
13. Теперь победитель ставки могут потратить 2X монеты на адрес своего выбора, в следующем (по крайней мере) 100 блоков.
Конечно, мы можем заменить этот номер 300 Locktime с меньшим числом, как 6 или любой другой. Если клиент реализует этот протокол без необходимости вмешательства человека, то число короткие Locktime должно быть в порядке.
Таким образом, это правда, что этот протокол дает справедливая жеребьевку, без возможности для вымогательства и нет необходимости доверять третью сторону, или кто-то может обнаружить какие-либо дефекты в нем?
Может быть, кто-то мог придумать более простой протокол, который обеспечит достижение той же цели?