본문 바로가기

크립토/암호화화폐

비트코인 지불증명 (Proof of payment, Pop)

비트 코인으로 결제를하면 그 내용은 블록 체인에 기록 된 사람이 검증 가능한 상태가된다. 이 블록 체인의 특성을 이용하면 블록 체인 인 결제를 한 사람에게만 특정 서비스를 제공하는 일도 가능하다.

예를 들어 호텔 숙박 결제를 비트 코인으로하면 그 호텔의 방 잠금 비트 코인 결제 정보에서 컨트롤하거나 지불을 증명 함으로서 회원 가입 필요없이 각종 서비스를 어떤 장치에서도 사용할 수 하게하거나 관련 회사의 서비스를 구매하는 경우 혜택을 받을 수 있을것이다.

이때 필요한 것이 블록 체인에 결제를 본인임을 증명하는 구조다. BIP-120이 지불 증명 (Proof of Payment)에 대해 제안되어 있기 때문에 소개하고자한다.

https://github.com/bitcoin/bips/blob/master/bip-0120.mediawiki

Proof of Payment의 구조

Proof of Payment의 구조는 간단하고 결제에 사용한 트랜잭션 입력 잠금을 해제 할 수 있다는 것을 증명하는 것으로, 지불 증명한다.

Proof of Payment 만들기

먼저 사용자는 Bitcoin 트랜잭션을 만들고 그것을 Bitcoin 네트워크에 브로드 캐스트하여 비트 코인 지급한다. 이 때 생성 된 트랜잭션을 다음과 같은 트랜잭션(T1)을 한다.

서명 된 Proof of Payment 트랜잭션을받은 사업자는 다음과 같이 Proof of Payment를 검증한다.

  1. 1. Proof of Payment 트랜잭션을 검증한다. 입력이 사용 된 것을 제외하고는 트랜잭션의 검증에 성공한다.
  2. 2. 잠금 시간이 499999999인지 체크한다.
  3. 3. 출력은 단 하나, pop output 페이로드 포맷을 준수하고 있는지 확인한다.
  4. 4. pop output에 기재되어있는 txid이 검증 대상 거래 여부를 확인한다.
  5. 5. 페이로드의 nonce가 사업자가 보낸 것인지 확인한다.
  6. 6. 모든 입력이 sequence를 제외하고 T1과 동일한 지 확인한다.
  7. 7. 모든 입력 스크립트를 실행하여 모든 true가되는 지 확인한다.

모든 검사를 통과하면 올바른 지불의 증명이라고 판정 할 수있다.

※ 사용자의 지갑과 사업자의 서버간에 청구 트랜잭션을 식별하는 데 txid가 사용할 수있는 간단하기 때문에 txid 관한 malleability 문제가없는 Segwit 트랜잭션의 사용을 권장한다.

Bitcoin의 지갑에서 Mycelium이 Proof of Payment에 대응하고,이 BIP의 저자 인 Kalle Rosenbaum이 Proof of Payment하는 서버 측 코드와 데모를 공개하고 있기 때문에, 이 사이트 에서 실제로 시연해볼 수 있다. 또한, 프로토콜 자체는 Bitcoin에 한정 한 것이 아니기 때문에 다른 암호화 통화에도 적용 가능하다.

아래는 위의 지불증명과 관련한 동영상이니 참고하도록 하자.


https://youtu.be/euzZcoCilhc