мотивация:
Алиса хотела бы платить Бобу, но не хочет, чтобы весь мир (или даже Боб) трассировку ее операции. Кэрол предлагает получить монету Алисы и платить Боб несвязной монеты, но ни одна из этих партий не доверяет друг Другие- и Кэрол возможности украсть монеты делают Кэрол в системный риск, так как потребность в доверие означает, что не может быть много Колядки и Кэрол могла бы заработать прибыль на стороне шпионаж на Алисесе, или может быть ограбленной и т.д.
О, и они не хотят, чтобы вызвать новую криптографию или изменить протокол Bitcoin.
Здесь я представляю протокол, где Алиса может платить Бобу путем Кэрол, где Кэрол не может лишить их. Протокол требует четыре опубликованных транзакций, но операции выглядят как обычные 2 из 2 депозитных операций (два платежа эских, два эскроу-релизов) в общем случае, где каждый честно. Если Алиса и Кэрол пытается отказаться от выполнения своей части протокола, он либо чисто раскручивается или дополнительные операции публикуются протолкнуть сделки, но без личной жизни.
Ключевая концепция этого протокола является понимание того, что транзакции могут быть защищены знаниями прообраза хэша. Например, вы можете написать транзакцию со значением HX, указанным в нем, где выкупить сделку Искупитель должен предоставить некоторые X такие, что Hash (X) = HX. Пример scriptPubKey будет "OP_RIPEMD160 PUSH {0xDEADBEEF} OP_EQUALVERIFY PUSH {Публичный} CHECKSIGVERIFY"; провести эту монету подписи нужно будет заканчиваться нажатием любой стоимости хэшей к 0xDEADBEEF.
Мы формируем hashlocked сделки в протоколе предложенного здесь, но они на самом деле не используются или объявили если кто-то пытается обмануть.
Основная идея заключается в том, что Алиса<>Carol образуют 2of2 эскроу с монетами Алисы, и Кэрол<>Боб образуют 2of2 эскроу с монетами Кэрол. Эти escrows имеют слой предварительно вычисленного тайм-аут погашения в случае, если ни одна из сторон равна нуль (нулевая фаза). Затем они настроить набор взаимно подписанные депозитных искупительных сделки, которые совместно используют общий хэш-блокировки, так что оба они могут быть выкуплены, если один есть, но они не объявляют их (фаза один). Делая это, Кэрол может быть уверен, что если Боб получает деньги, что Кэрол также платит. После того, как Кэрол уверена, что она не может получить обманутыми, она выпускает свой эскроу Бобу, а затем Алиса выпускает свой эскроу Кэрол (этап два).
Результат является довольно сложным протоколом просто потому, что он имеет много этапов. Из-за этого он подробно описан в схеме протокола ниже.
история:
В "Идея для смесителя, который не может работать с монетами" Murphant предложил увеличить финансовую конфиденциальность, выполняя пары сделок, которые были публично, отделяться, если бы все было честно, но если кто-то пытался обманывать средства могут быть погашены путем воздействия на связь. Предложенные им протокол привел бы к необычным перспективным сделкам и, к сожалению, не может работать без некоторых довольно сильных усовершенствований Script-то потребуется, чтобы иметь возможность проверить SPV доказательства внедренного в сделках. Подобные идеи без SPV доказательства были предложены время от времени, но они имеют экстремальный риск затора / вымогательство.
В P2PTradeX Серхио предложил удивительно аналогичный протокол с использованием SPV доказательства для ведения сделок между различным blockchains. В этой теме я предложил преобразование протокола, что позволило большую часть безопасности, но работал с Script сегодня с помощью хэш-блокировки, чтобы связать иначе независимые операции и задавался вопросом, если же преобразование может быть применено к тому, что предлагал Murphant.
Моя первая попытка не удалась из-за отключенных О.П. кодов, я хотел бы использовать OP_ADD ослепить хэш-блокировки, так что в общем не-обманывающего случае хэш-связь будет скрыта, но OP_ADD работает только для небольших целых чисел и подходящие опкоды отключены , В # Bitcoin-волшебниках, Гэвины заметили мою ошибку и Питер Тодд спас протокол, указав, что хэш-блокировку часть может быть сделано скрытым, просто никогда не объявляя об этом. Это значительно повысило протокол, потому что в результате всех операций в общем случае выглядит как простое использование депозитного, плюс он сделал это на самом деле работает в неизмененных сетях Bitcoin. Jcorgan предложил название.
протокол CoinSwap:
В протоколе предполагается все стороны имеют частные каналы связи.
Фаза 0. Настраивает escrows и их тайм-аут возвраты.
Фаза 1. Делает так, что если Боб получает деньги нет никакого способа для Кэрол не платят.
Этап 2. Просто отпускает escrows напрямую, потому что все счастливы, что обман не представляется возможным.
Алиса Кэрол Боб
================================================== ===================================
0.Computes TX_0: 2of2 {A, C} | Вычисляет TX_1: 2of2 {C, B} | \
1.Send TX_0 TXID ------------> | |
2. | Отправить TX_1 TXID ------------> |
3. | Вычисляет TX_0 заблокирован возврат | Вычисляет TX_1 заблокирован возврат |
4. <------------ Отправить TX_0_refund | | Фаза 0
5. | <------------ Отправить TX_1_refund. |
6.Announces TX_0 к сети | объявляет TX_1 к сети | |
7. | | |
. 8 ****** Сеть подтверждает TX_0: Алиса платит согласно 2 {Алисе, Кэрол} ****** |
. 9 ****** Сеть подтверждает TX_1: Кэрол платит в соответствии с 2 {Carol, Боб} ****** /
А. | | Выбирается секретное значение Х \
B. | | Вычисляет Нх = Н (Х) |
C. | <------------ Отправить HX |
D. <----------------------------------------- Отправить HX |
E.Computes TX_2: TX_0>Carol + X | | | Фаза 1
F.Send TX_2 ------------> | |
Г. | Вычисляет TX_3: TX_1>Боб + X | |
H. | Отправить TX_3 ------------> |
I. | <------------ Отправить X /
J. | Вычисляет TX_4: TX_1>Боб | \
К. | Отправить TX_4 ------------> |
Л. | | Знаки и объявляет TX_4 |
. М ****** Сеть подтверждает TX_4: Кэрол платит Бобу через 2 {Кэрол, Боб} ****** |
N.Computes TX_5: TX_0>Carol | | | Фаза 3
O.Send TX_5 ------------> | |
П. | Знаки и объявляет TX_5 | |
. Вопрос ****** Сеть подтверждает TX_5: Алиса платит Carol через 2 {Алиса, Кэрол} ****** /
================================================== ===================================
Обратите внимание, что Алиса могла бы также обратить роль Боба, так что Боб не должен принимать участие в протоколе. Она могла бы послать на свеже отключенных монет непосредственно Бобу в финальной версии.
Также обратите внимание, что уход связан с изменчивостью требуется для возмещения до транзакции Изменчивость не будет решен.
Еще одним ключевым моментом является то, что Кэрол также получает несвязанные монеты (от Алисы), и поэтому в сети P2P сторона может в равной степени играть роль Алисы или Кэрол, принимая на какую позицию требуется.
TX_0_refund должны иметь дальнейшее будущее Locktime чем TX_1_refund. В противном случае Боб может задержать шаг (I.) в протоколе, пока возвраты не вступают в силу, а затем объявить TX_3 в то время как Алиса объявляет TX_0_refund для того, чтобы попытаться вызвать Алисе, чтобы получить возвращается в то время как Боб все еще получает деньги.
Сравнение с CoinJoin:
Есть целый ряд сравнительных преимуществ и недостатков между CoinSwap и CoinJoin.
CoinJoin операции являются эффективными, когда люди соединяются, они могут даже немного сэкономить пространство над общей сделкой. В отличие от CoinSwap требует как минимум четырех сделок, хотя два CoinSwaps эффективно могут выполняться одновременно. Это означает, что CoinJoin это что-то бумажники могла сделать оппортунистически на многих операциях в то время как CoinSwap должны быть какие-то периодического процесса.
Набор Анонимность CoinJoin равен числу участников сделки (или каскадом сделок). Набор Анонимность CoinSwap является все CoinSwaps происходит в то же время, даже если пользователи не взаимодействуют друг с другом, и все 2of2 обеспеченных сделок бумажник происходит в то время.
CoinSwap сделки выглядят как обычные 2of2 эскроу сделки. Если 2of2 escrows стали обычным явлением, то CoinSwap сделки могут быть менее идентифицируемой, чем крупные CoinJoin сделок с кучей одинакового размера выходов, и, таким образом, более устойчивые к цензуре.
Для достижения секретности сделки CoinJoin должно быть много участников. Это несколько усложняет конструкцию программного обеспечения (основное состояние обработки машины, с помощью атак DOS, и т.д.). Если Алиса играет роль Боба в CoinSwap, это протокол двухпартийная, что может сделать его проще реализовать, даже если речь идет примерно в восемь раз количество операций по сравнению с максимально простым CoinJoin.
CoinJoins может быть сделано с помощью одного путешествия туда и обратно и не ждет в сети Bitcoin. CoinSwaps требует гораздо больше назад и Фортов, а также в ожидании подтверждения эских платежей.
CoinSwaps может произойти через цепь. CoinJoins по своей сути единичные операции цепи.
Можно построить криптографический ослепленный CoinJoins где _на one_ учится выход которого которого (для владельца каждого выходного, за исключение). CoinSwap приводит участник знающих связи.
Я думаю, что есть место для обоих видов сделок. CoinJoins можно использовать приспосабливаемый и может быть использован для достижения более сильной анонимности в небольших группах (избегая риск Сибли колядку), в то время как потенциально CoinSwaps могли бы достичь гораздо больших наборов анонимности в стоимости дополнительных сборов сделки.