비트코인의 지불 채널(Payment Channels) 과 스마트컨트랙트(Smart Contracts) by Wei Zhang — Senior Researcher, nChain
- 이 글은 nChain 의 수석연구원 Wei Zhang 의 아래 링크 글을 번역한 글입니다. (번역과 게시에 대한 원작자의 사전허락을 득하였습니다.) 제가 이해한 내용을 바탕으로 일반인들이 이해하기 쉽게 의역이 추가 되어 오역이 있을 수 있습니다. 오역과 의견에 대한 댓글 부탁드립니다.
- 원글 : https://nchain.com/en/blog/payment-channels-smart-contracts-bitcoin/
사람들은 흔히 비트코인은 다른 블록체인들에 비해 스마트컨트랙트에 덜 적합하다는 오해를 하고 있다.
비트코인의 스크립트 언어는 가능한 원시적인 형태(OP 코드)로 설계되어 있다. 이러한 OP 코드들의 조합은 외부의 공격 가능한 요소를 의도적으로 최소화 함으로써 최고 수준의 보안성을 확보하게 된다. 하지만 이러한 방식이 때때로 사람들로 하여금 비트코인의 잠재력을 과소평가 하게 만든다. 사실 비트코인 스크립트 언어자체에만 주목 하다보면 이 비트코인 스크립트 언어가 가지고 있는 더 다양한 흥미로운 특징들을 간과하게 되는 위험이 뒤따르게 된다. 비트코인이 스마트컨트랙트에 어떻게 적합한지 이해하기 위해서는 비트코인 트랜잭션들간의 전체 흐름에서 각각의 단계가 어떤 역할로 작동하는지 가까이(자세히) 그리고 멀리서도 살펴볼 필요가 있다.
이렇게 살펴보다 보면 비트코인상에 스마트컨트랙트를 구현하는 많은 방식이 존재함을 분명히 알 수 있다. 대략적으로 다음과 같이 요약할 수 있겠다.
- 스마트 잠금(locking) 스크립트
- 스마트 서명해시 플래그(sighash flags)의 사용
- 지불 채널(payment channels)
이 글은 이 셋중 어떻게 지불 채널이 비트코인을 스마트컨트랙트에 적합하게 만드는지에 대한 내용을 담고있다.
지불채널이 무엇인가?
지불 채널이란 비트코인 트랜잭션을 통해 거래 당사자들이 소통하는 채널을 말한다. 모든 소통하는 정보는 비트코인 트랜잭션내에 표현된다.
몇가지 필수 사전 지식
각각의 비트코인 트랜잭션은 하나이상의 인풋(input)을 가질 수 있다. 그리고 각각의 인풋은 시퀀스 넘버(sequence number)라는 파라미터를 가지고 있다. 이 숫자는 해당 인풋이 최종본인지 아닌지를 나타내게 된다. 만약 이 값이 최대값(0xFFFFFFFF)이 아닐 경우 트랜잭션 검증 프로세스는 락타임(locktime) 값을 추가적으로 체크하게 된다. 이 락타임은 비트코인 트랜잭션에 정의되어 있으며 이 것은 해당 트랜잭션이 언제 유효(valid)하게 되는지를 나타낸다. 현재시간이 비트코인 트랜잭션에 설정된 락타임을 지나야 해당 트랜잭션이 유효하게 되는 것이다. 락타임을 미래로 설정함으로써 이 락타임의 기능을 유용하게 쓸 수 있다. ( 가장 먼 미래의 락타임으로 현재 시간으로 부터 9,500년 이후를 설정할 수 있을것이다.) 설정된 락타임이 도래하기 전에 더 높은 시퀀스 넘버를 가진 새로운 버젼의 트랜잭션이 만들어 진다면 더 낮은 시퀀스 넘버를 가진 트랜잭션은 무효화 되고 이전 버젼(낮은 시퀀스넘버) 트랜잭션의 동일한 인풋을 더 높은 시퀀스 넘버를 가진 트랜잭션이 사용(spend)할 수 있게 된다. (역자주: RBF(Replace by Fee)와 비슷하게 동작한다 생각 할 수 있으나 RBF는 유효한 이전 트랜잭션보다 높은 수수료로 이전의 유효한 트랜잭션을 앞질러서 블록에 담기게 할 수 있는기능이지만 locktime 과 시퀀스 넘버는 현재는 무효한 트랜잭션을 유효하게 바꿀 수 있다는 점에서 완전히 다른 목적으로 사용된다고 할 수 있다.)
이 기능은 오리지날 비트코인 프로토콜에 이미 있으며 나카모토 지불 채널(Nakamoto Payment Channel)이라 알려진 지불 채널 형태에 있어서 필수적인 요소라 할 수 있다.
비트코인상의 스마트 컨트랙트 기본형태
이제 설명할 스마트 컨트랙트 기본형태의 핵심 요소는 펀딩 트랜잭션(funding transaction)이라 불리는 것이다. 이 트랜잭션이 온체인에 기록되는즉시 지불 채널이 열리게 된다.
전형적인 펀딩 트랜잭션은 다음과 같이 되어있다.:

그리고 이러한 펀딩 트랜잭션에 해당하는 환불 트랜잭션(refund transaction)이 또한 존재하게 된다. 이것은 락타임이 지난 후 초기 자금을 참가자에게 되돌려 주게 되는 트랜잭션이다.

일단 트랜잭션 TxIDo 가 블록체인에 기록되고 나면 펀딩 트랜잭션내에 명시된 계약내용대로 지불채널이 열리게 된 것이다. 이후 앨리스와 밥간에 일어나는 모든 소통은 비트코인 트랜잭션을 통하게 된다. 이러한 트랜잭션들은 비트코인 프로토콜과 호환되어야 하는것 뿐만 아니라 지불채널에 명시된 규칙을 따라야 한다. 이 소통을 위한 트랜잭션의 검증은 각 참여자에 의해 이루어 질 수 있다. 이과정을 간단히 요약하면 다음과 같다. :
1. 앨리스(Alice)는 그녀의 제안을 담은 트랜잭션을 그녀의 서명과 함께 밥(Bob)에게 전달한다.
2. 밥은 앨리스에게 받은 트랜잭션의 내용(제안)을 확인한다.
a. 만약 앨리스에게 받은 제안이 마음에 들 경우 밥은 그 트랜잭션에 자신의 서명을 더한 후 앨리스에게 다시 돌려준다. 이 행위는 지불 채널의 체크포인트(Check Point)가 된다.(가장 마지막으로 서로 합의한 트랜잭션)b. 만약 앨리스에게 받은 제안이 마음에 들지 않으면 밥이 원하는 제안 내용을 수정 한 트랜잭션을 작성하여 앨리스에게 다시 돌려준다.
3. 각각의 수정된 트랜잭션은 시퀀스 넘버를 1씩 더하여 간다.
4. 앨리스와 밥은 제안 내용을 확정짓기 전까지 1. ~ 3. 의 행위를 반복한다.
어떻게 이것이 스마트 컨트랙트 인가?
우리는 계약이 자동화 될 수 있고, 강제화될 수 있고, 무신뢰를 요구 할 수 있다면 그 계약은 스마트 하다고 말할 수 있다. 이런 스마트 컨트택트의 요건을 하나씩 검증해보자.
자동화
앨리스와 밥 양측의 행동은 완전히 자동화 될 수 있다. 펀딩 트랜잭션을 생성할 때 계약 이행에 관련한 프로그램 소스코드를 OP_RETURN 상에 기록할 수 있다. 해당 트랜잭션에 양쪽 계약당사자의 서명이 포함되었다는것은 계약 프로그램의 자동화 내용이 확인되었고 앨리스와 밥에 의해 승인되었다는것을 시사한다.
강제화
만약 계약 당사자중 한쪽이 사기를 치려고 한다면 다른쪽이 단순히 마지막으로 합의된 계약 이행 트랜잭션을 블록체인에 전파 해버리면된다. 비트코인 트랜잭션의 특성상 마지막으로 합의(양측이 서명한)된 트랜잭션의 내용을 어느한쪽이 독자적으로 수정하여 더 많은 이득을 취하는것이 불가능 하다. 다른말로 펀딩 트랜잭션과 환불 트랜잭션의 쌍으로 인해 강제화를 가능케 하는 것이다.
신뢰
지불채널은 앨리스와 밥이 상호간의 신뢰를 필요로 하지 않는다. 일단 펀딩 채널이 블록체인에 기록되면 합의를 위해 지불 채널을 위해 서로 소통을 해야 할 것이다. 그렇지 않으면 그들은 항상 마지막 합의된 트랜잭션으로 밖에 되돌아 갈 수 없다. 이것은 위의 강제화 요소에서 비롯된다.
어떻게 이것이 더 나은가?
우리는 이것이 여타 다른 스마트 컨트랙트 보다 나은 방법이라고 주장한다. 왜냐하면 확장성, 유연성, 프라이버시, 비용 효율성 때문이다.
확장성
지불 채널은 일반적으로 단지 두개의 트랜잭션만 온체인에 기록되면 된다. 펀딩 트랜잭션과 확정(settlement 또는 refund) 트랜잭션. 지불 채널에서 모든 소통은 P2P(Peer to Peer)로 일어난다. 따라서 다른 블록체인들의 스마트 컨트랙트처럼 모든 단계의 스마트컨트랙트들을 모든 채굴자가 일일이 검증해야 하는것과 같이 지불채널에서 일어나는 중간과정의 트랜잭션들을 일일이 채굴자가 검증할 필요가 없다. 이러한 P2P 패러다임이 확장성을 제공해 주게 된다.
유연성
특정 플랫폼에서만 실행되거나 계약 참여자가 따라야 하는 추가적인 규칙을 요구하는 프로그램 소스코드로 계약내용을 작성할 필요가 없다. 비트코인 스마트컨트랙트 작성시 필요한것은 단지 지불채널에 참여하는 모든 참여자가 모든 계약내용과 규칙이 명시된 펀딩 트랜잭션에 동의(서명)하기만 하면 된다.
프라이버시
계약내용을 명시적으로 펀딩 트랜잭션에 반드시 넣을 필요는 없다. 보다 높은 수준의 프라이버시를 확보하기 위해 OP_RETURN 에 계약 내용의 해시값만을 포함시켜도 될 것이다.
비용 효율성
스마트 컨트랙트에 특별히 실행되어야 하는 서비스같은것이 없기때문에 이런 행위를 위해 채굴자들에게 비용을 지불할 필요가 없다.
위에 나열된 장점들에 더해서 다양한 형태의 펀딩 트랜잭션 템플릿을 만들어 시장에서 일어나는 유사한 케이스의 지불채널에 공유될 수 있을 것이다. 예를들어 체스 경기를 위한 지불채널의 펀딩 트랜잭션의 템플릿은 또다른 체스 경기자들이 재사용 할 수 있을 것이다. 또한 채굴풀을 위한 펀딩 트랜잭션 템플릿을 또다른 채굴풀 들이 채택할 수 있을것이다. 이런 지불채널 템플릿을 설계할때의 과제는 지불 채널에 명시된 규칙들이 특정 참여자의 이익에 편향되지 않도록 설계 하는것이다.
결론
우리가 이 글에서 제공했던 일반적인 비트코인의 스마트 컨트랙트의 패러다임은 많은 사람들이 비트코인상에서는 불가능하다고 말해왔던 특징들이다. 우리는 비트코인 지불 채널이 확장성, 유연성, 프라이버시와 비용 효율성으로 이러한 기능들을 제공한다는 것을 보았다. 가능한 사용예들을 나열해 보면 소액결재, 콘텐츠 스트리밍, 온라인 게임 과 e-스포츠, 빈번한 결제를 필요로 하는 상업 계약들 그리고 수많은 다른 케이스들이 존재할 것이다. 얼마나 창의적으로 이 비트코인 스마트 컨트랙트를 활용하는 가는 이제 당신의 몫이다.
* 이글은 오리지날 비트코인 프로토콜을 따르는 진짜 비트코인, 비트코인 SV(BSV)에 관한 글이다.
Translated and published with permission from https://nchain.com/en/blog/payment-channels-smart-contracts-bitcoin/ copyright 2019 nChain Limited.
