Atomic swap은 서로 다른 블록체인을 기반으로 한 암호화폐를 거래소와 같이 신뢰할 수 있는 제3의 기관을 통하지 않고 원자적으로 교환하는 방법입니다. 기술적으로 다양한 방법이 연구되고 있는데, 그중 대표적인 것이 스마트컨트랙트의 nLockTime 파라미터를 이용해서 구현하는 것입니다.

본 문서에서는 Atomic swap의 기본 거래가 어떻게 이루어지는지 살펴보겠습니다.

기본 거래

알고리즘

앨리스(이하 A)와 밥(이하 B)이 서로의 암호화폐(이하 코인)를 교환할 때, A와 B 각각 a코인과 b코인에 모두 wallet을 소유하고 있다고 가정합니다. (이하 공개키를 Aa, Ab, Ba, Bb로 지칭)

[1단계]

A가 임의의 숫자 x를 골라서 혼자만 알고 있음

i. A가 a체인 트랜잭션(이하 TX1)을 생성 (아직 체인에 미등록)

  • 컨트랙트: 아래 조건을 만족하면 A가 소유한 a코인을 Ba에게 보냄

– 조건: B가 H(x)를 만족하는 x를 제시하면서 서명, 혹은 A와 B가 함께 서명(Multisig)

ii. A가 거래를 취소할 때 필요한 또 다른 a체인 트랜잭션(이하 TX2)을 생성 (체인에 미등록)

  • 컨트랙트: TX1의 출력 코인(=Ba 소유 코인)이 발생한 지 48시간이 지나고, A가 서명을 하면 Aa에게 보냄

iii. A가 B에게 TX2를 전달 (* 이메일이든 메신저든 체인과 상관없는 경로를 통해 전달)

iv. B가 TX2를 서명해서 A에게 반환 (=A가 a체인에 등록 가능)

[2단계]

A가 TX1을 a체인에 등록

i. B가 b체인 트랜잭션(이하 TX3)을 생성 (아직 체인에 미등록)

  • 컨트랙트: 아래 조건을 만족하면 B가 소유한 b코인을 Ab에게 보냄

– 조건: A가 H(x)를 만족하는 x를 제시하면서 서명, 혹은 A와 B가 함께 서명

ii. B가 거래를 취소할 때 필요한 또 다른 b체인 트랜잭션(이하 TX4)을 생성 (체인에 미등록)

  • 컨트랙트: TX3의 출력 코인(=Ab 소유 코인)이 발생한 지 24시간이 지나고, B가 서명을 하면 Bb에게 보냄

iii. B가 TX4를 A에게 전달

iv. A가 TX4를 서명해서 B에게 반환

[3단계]

B가 TX3를 b체인에 등록

[4단계]

A가 TX3를 소비 (=파라미터에 x를 입력해야 해서 x가 노출됨)

[5단계]

B가 4단계에서 노출된 x를 이용해 TX1을 소비

거래 중단 상황

거래가 중간에 진행이 되지 않을 때, 거래에 넣었던 돈을 되돌립니다.

  • 2단계 이전: 네트워크(체인)에 등록한 트랜잭션이 없기 때문에 그냥 취소함
  • 2~3단계 사이: A가 TX2를 a체인에 등록해서 72시간 후(최초 대기 24시간 + TX2의 락타임 48시간) 자금 회수
  • 3~4단계 사이: B가 TX4를 b체인에 등록해서 24시간 후 자금 회수 (A는 TX2를 등록해 그다음 회수)
  • 4단계 이후: 거래 컨트랙트의 등록이 완료된 시점이라 취소 불가

– A가 24시간(=TX3의 제한 시간) 이내에 TX3을 소비해야 함 (소비하지 않으면 제한 시간 이후 B가 회수할 수 있음)

– B가 72시간 이내에 TX1을 소비해야 함 (소비하지 않으면 제한 시간 이후 A가 회수할 수 있음)

제약사항
  • 거래가 잘되지 않을 때, 자금 회수에 시간이 많이 걸림 (72시간)
  • 트랜잭션을 각각 두 개씩 사용해야 함
  • 거래 자금 회수에 현재 비트코인 프로토콜 상에서는 표준이 아닐 수도 있는 블록체인의 트랜잭션 교체 현상을 활용함

전용 알트코인 활용 거래

Atomic swap을 위해 고안된 특별한 코인을 사용하는 방법으로, 비트코인에서 하나의 평범한 지불 트랜잭션만 존재합니다. (잠금 시간 없음, Multisig 사용 안 함, 특수한 컨트랙트 스크립트도 사용 안 함)

알고리즘

A는 알트체인, B는 비트코인 일 때

[1단계]

i. B가 평범한 트랜잭션을 만들어 서명하고 txid를 미리 계산

ii. A에게 입력 스크립트와 서명이 빠진 불완전한 트랜잭션 바디와 txid를 전송

[2단계]

i. A가 불완전한 바디의 해시(이하 bhash)를 계산

ii. 알트체인에서 제공하는 bitcointxid(bhash, txid) 옵코드를 이용해 트랜잭션을 생성한 후 체인에 등록

[3단계]

i. B가 해당 트랜잭션이 확정과 검증이 끝나기를 기다림

ii. B는 A가 체인에 등록할 수 있도록 원래 트랜잭션을 전송 (그와 동시에 알트체인의 트랜잭션도 유효해짐)

iii. B는 알트체인의 트랜잭션이 충분히 확정되어 재배치가 일어나지 않는 것을 확인한 후 A에게 전송

알트체인쪽 특성
  • bitcointx 옵코드: txid가 비트코인 블록체인에서 컨펌되었고 (알트코인이 비트코인을 바라봐야 함), 출력이 소비 가능하고, bhash가 tx 바디와 일치하면 true를 반환함
  • 알트체인은 비트코인에 txid/bhash가 아직 없는 경우에도 bitcointx 트랜잭션이 등록이 될 수 있어야 함
  • 트랜잭션 출력은 비트코인 txid의 컨펌이 확정되기 전까지는 소비가 불가능하고, 입력도 다른 tx가 사용할 수 없음
  • 선택적으로 비트코인 쪽 트랜잭션 고정이 발생한 지점을 가리키는 block# 파라미터가 있을 수 있음
  • 입력은 여러 번 언급 -> 트랜잭션의 입력으로 쓰일 수는 있지만, 가장 먼저 고정된 트랜잭션만 사용 가능하고 나머지는 무효화됨

 

참고 출처: https://en.bitcoin.it/wiki/Atomic_swap

블록체인을 활용한 쇼핑몰
BaaS – ARK Deployer

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

필수 입력 사항입니다.
필수 입력 사항입니다.
유효한 이메일 주소를 입력해주세요.
You need to agree with the terms to proceed

메뉴