비트 코인으로 결제를하면 그 내용은 블록 체인에 기록 된 사람이 검증 가능한 상태가된다. 이 블록 체인의 특성을 이용하면 블록 체인 인 결제를 한 사람에게만 특정 서비스를 제공하는 일도 가능하다.
예를 들어 호텔 숙박 결제를 비트 코인으로하면 그 호텔의 방 잠금 비트 코인 결제 정보에서 컨트롤하거나 지불을 증명 함으로서 회원 가입 필요없이 각종 서비스를 어떤 장치에서도 사용할 수 하게하거나 관련 회사의 서비스를 구매하는 경우 혜택을 받을 수 있을것이다.
이때 필요한 것이 블록 체인에 결제를 본인임을 증명하는 구조다. 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. Proof of Payment 트랜잭션을 검증한다. 입력이 사용 된 것을 제외하고는 트랜잭션의 검증에 성공한다.
- 2. 잠금 시간이 499999999인지 체크한다.
- 3. 출력은 단 하나, pop output 페이로드 포맷을 준수하고 있는지 확인한다.
- 4. pop output에 기재되어있는 txid이 검증 대상 거래 여부를 확인한다.
- 5. 페이로드의 nonce가 사업자가 보낸 것인지 확인한다.
- 6. 모든 입력이 sequence를 제외하고 T1과 동일한 지 확인한다.
- 7. 모든 입력 스크립트를 실행하여 모든 true가되는 지 확인한다.
모든 검사를 통과하면 올바른 지불의 증명이라고 판정 할 수있다.
※ 사용자의 지갑과 사업자의 서버간에 청구 트랜잭션을 식별하는 데 txid가 사용할 수있는 간단하기 때문에 txid 관한 malleability 문제가없는 Segwit 트랜잭션의 사용을 권장한다.
Bitcoin의 지갑에서 Mycelium이 Proof of Payment에 대응하고,이 BIP의 저자 인 Kalle Rosenbaum이 Proof of Payment하는 서버 측 코드와 데모를 공개하고 있기 때문에, 이 사이트 에서 실제로 시연해볼 수 있다. 또한, 프로토콜 자체는 Bitcoin에 한정 한 것이 아니기 때문에 다른 암호화 통화에도 적용 가능하다.
아래는 위의 지불증명과 관련한 동영상이니 참고하도록 하자.
https://youtu.be/euzZcoCilhc