7. CoinSwap
powrót do spisu treści
Gregory Maxwell16 po raz pierwszy przedstawił CoinSwap w następującym wątku:
https://bitcointalk.org/index.php?topic=321228.0
CoinSwap chroni informacje o transakcjach między płatnikiem a odbiorcą. CoinSwap pozwala zaangażowanym stronom na dokonywanie transakcji, gwarantując, że żadna ze stron nie może ukraść Bitcoinów innym stronom. W CoinSwap strona trzecia wymaga połączenia między płatnikiem a odbiorcą, aby również dokonać niektórych transakcji w schemacie CoinSwap. Niektóre metody transakcji stosowane w CoinSwap to 2-of-2 escrow i transakcje hash-locked.
Protokół CoinSwap:
Protokół ten zakłada, że wszystkie strony mają prywatne kanały komunikacji.
Protokół CoinSwap można wyjaśnić w następujący sposób:
Alice działa jako płatnik,
Bob jako odbiorca płatności,
i Carol jako pośrednik (powiernik).
Protokół ten jest podzielony na 3 fazy, a mianowicie fazę 0, fazę 1 i fazę 2.
Faza 0: Konfiguruje rachunki depozytowe i ich zwroty za przekroczenie czasu.
Faza 1: Jeśli Bob otrzyma zapłatę, nie ma możliwości, by Carol jej nie otrzymała.
Faza 2: Po prostu zwolnij rachunki escrow bezpośrednio, ponieważ wtedy wszyscy są zadowoleni, że nie ma możliwości oszustwa.
Alice Carol Bob
=====================================================================================
0.Computes TX_0: 2of2{A,C} |Computes TX_1: 2of2{C,B} | \
1.Send TX_0 TXID ------------> | |
2. |Send TX_1 TXID ------------> |
3. |Computes TX_0 locked refund |Computes TX_1 locked refund|
4. <------------ Send TX_0_refund | | Phase 0
5. | <------------ Send TX_1_refund. |
6.Announces TX_0 to network |Announces TX_1 to network | |
7. | | |
8.****** Network confirms TX_0: Alice pays according to 2 of {Alice, Carol} ******|
9.****** Network confirms TX_1: Carol pays according to 2 of {Carol, Bob} ******/
A. | |Selects secret value X \
B. | |Computes HX = H(X) |
C. | <------------ Send HX |
D. <----------------------------------------- Send HX |
E.Computes TX_2: TX_0>Carol+X | | | Phase 1
F.Send TX_2 ------------> | |
G. | Computes TX_3: TX_1>Bob+X | |
H. | Send TX_3 ------------> |
I. | <------------ Send X /
J. | Computes TX_4: TX_1>Bob | \
K. | Send TX_4 ------------> |
L. | |Signs and announces TX_4 |
M.****** Network confirms TX_4: Carol pays Bob via 2 of {Carol, Bob} ******|
N.Computes TX_5: TX_0>Carol | | | Phase 3
O.Send TX_5 ------------> | |
P. |Signs and announces TX_5 | |
Q.****** Network confirms TX_5: Alice pays Carol via 2 of {Alice, Carol} ******/
=====================================================================================
Schemat protokołu CoinSwap.16
Faza 0
W fazie 0 przeprowadzana jest transakcja escrow między uczestnikami. Alice wykonuje transakcję escrow TX_0, która jest escrow 2 na 2 między Alice i Carol z Bitcoinem Alice. Transakcję tę można odczytać w następujący sposób:
Alice zapłaci Carol określoną kwotę Bitcoinów, jeśli Alice i Carol wyrażą na to zgodę.
Następnie Carol wykonuje również transakcję TX_1, która jest depozytem 2 na 2 między Carol i Bobem przy użyciu Bitcoinów Carol. Transakcję tę można odczytać w następujący sposób: Carol zapłaci Bobowi określoną ilość Bitcoinów, jeśli Carol i Bob wyrażą na to zgodę.
Aby zabezpieczyć tę fazę, Carol dokonuje zwrotu TX_0 z określonym limitem czasowym, aby Alice odzyskała Bitcoiny zapłacone Carol, jeśli coś wydarzy się w przyszłości.
Podobnie jak Alice, Carol również przeprowadza transakcję TX_1_refund, którą Carol wykorzystuje do odzyskania Bitcoinów zapłaconych Bobowi, jeśli coś wydarzy się w przyszłości. Transakcje TX_0_refund i TX_1_refund nie są wysyłane do sieci przez Alice lub Carol. Transakcje wysyłane do sieci Bitcoin w tej fazie to TX_0 i TX_1.
Faza 1
W fazie 1 przygotowywane są gwarancje transakcji dla wszystkich zaangażowanych uczestników. Oznacza to, że jeśli Bob weźmie monety od Carol, Carol może również dokonać płatności od Alice. Schemat transakcji z blokadą hash obsługuje ten schemat.
W tej procedurze Bob wybiera tajne słowo kluczowe X, a następnie oblicza wartość HX, tj. wartość skrótu X przy użyciu wzoru HX=H(X) i wysyła HX do Alice i Carol. Alice tworzy nową transakcję TX_2, która pobiera monety z TX_0 przy użyciu podpisu Carol i wartości X i wypłaca je na adres Carol. Podobnie jak Alicja, Carol tworzy nową transakcję z zaszyfrowanym schematem transakcji TX_3, która pobiera monety z TX_1 przy użyciu podpisu Boba i wartości X i wypłaca je Bobowi.
Jeśli Bob oszukuje w tej fazie i zbiera monety za pomocą TX_3, Carol może akceptować płatności za pomocą TX_2, ponieważ wartość X może być znana, gdy Bob używa TX_3 i publikuje ją w sieci Bitcoin.
Faza 2
Jeśli TX_2 i TX_3 nie zostaną wysłane do sieci Bitcoin, faza 2 może być kontynuowana. W tej fazie Bob przekazuje Carol wartość X, a Carol wykonuje nową transakcję TX_4, która pobiera monety z TX_1 przy użyciu podpisu Boba. Bob może użyć transakcji TX_4, aby otrzymać płatność. Podobnie, Alicja wykonała transakcję TX_5, która pobiera monety z TX_0 przy użyciu podpisu Carol i płaci Carol. Carol może wysłać transakcje TX_5 do sieci Bitcoin, aby otrzymać zapłatę.
Po zakończeniu tego protokołu tylko transakcje TX_4 i TX_5 z TX_0 i TX_1 są wysyłane do sieci Bitcoin, podczas gdy inne transakcje są anulowane i nie są wysyłane do sieci Bitcoin.
CoinSwap jest przykładem metody Zero Knowledge Contingent Payment17, która ma następujące cechy:
1. Transakcja z blokadą hashową
2. Transakcja z blokadą czasową
3. Transakcja powiernicza 2-z-2
W przypadku CoinSwap każdy krok protokołu musi zostać wykonany we właściwej kolejności, aby zakończyć bezpieczną i gwarantowaną transakcję bez zaufanej strony.
Referencje:
16. gmaxwell, CoinSwap: Transaction graph disjoint trustless trading
17. Bitcoin Wiki. (2011, Wrzesień 28, 2015), Zero Knowledge Contingent Payment
- Dimaz A.W. & Oscar D., Blockchain dari Bitcoin untuk Dunia, Strony 105-107, 2017: Jasakom
- Dalsze referencje zobacz artykuł #1