테크 #기술분석
특별한 디앱 개발의 필수품 '제너럴라이즈드' 스테이트 채널
2019년 주목할 블록체인 기술 톱10 ④제너럴라이즈드 스테이트 채널
강민승 기자
등록일: 2019-02-07  수정일: 2019-02-12


이더리움의 창시자인 비탈린 부테릭은 최근 인터뷰에서 응용기술이 2019년에 다시 올 것으로 예상되는 암호화폐 붐을 이끌 것이라고 밝힌 바 있습니다. 작년부터 시작된 ICO 열풍이 사그라들고 거래량도 감소하면서 블록체인 업계가 보릿고개에 시달리고 있지만 한편으로는 이를 계기로 좀더 유용하고 의미있는 기술을 개발하자는 움직임에도 힘이 실리고 있습니다. 디스트리트는 블로코가 추진중인 기업용 블록체인 프로젝트 아르고와 함께 2019년 주목할 블록체인 기술 톱10을 선정해 분석하는 기획 연재를 시작합니다. 이번 기획이 블록체인과 암호화폐 업계의 뱃길을 비추는 작은 등대가 되기를 소망합니다. <편집자 주>


“블록체인 위에서 모든 작업을 처리하기엔 한계가 있기에 오프체인 기술이 필수적이다. 스테이트 채널을 구현하는 여러 방법이 존재하지만 그중에도 제너럴라이즈드 스테이트 채널 프레임워크는 개발자에게 맥가이버 칼처럼 유용할 것이며 디앱(dApp) 개발의 전환점이 될 것이다”


강봉재 아르고 수석연구원은 제너럴라이즈드 스테이트 채널의 중요성을 강조하며 이같이 말했다. 스테이트 채널은 이더리움의 스테이트를 블록체인이 아니라 허가받은 한정된 구성원이 네트워크에서 수정하고 업데이트 하기 위해 별도로 조직한 채널을 말한다.

블록체인에서 스테이트 채널 기술을 적용하면 거래의 완결성을 즉각 확보하고 수수료도 절감하는 효과가 있다. 그러나 스테이트 채널을 만들려면 아키텍처와 소프트웨어를 처음부터 다시 설계하고 개발해야 하는 어려움이 있다. 스테이트 채널 기술만 놓고 보면 개발도 어렵고 사용자가 사용하기도 어려운 이중고의 상황이다.


제너럴라이즈드 스테이트 채널은 이같은 상황을 타개하기 위해 고안됐다. 이 기술은 스테이트 채널의 개발을 손쉽게 할 수 있는 라이브러리와 프레임워크 등의 개발 도구를 말한다. 이로써 개발자는 스테이트 채널에서 사용하는 기능을 모듈과 응용프로그램인터페이스(API)로 구현할 수 있게 된다. 이미 개설된 채널에 기능 추가도 손쉬워질 전망이다.


이달 말 예정된 이더리움의 콘스탄티노플 업데이트에도 스테이트 채널에 적용될 업데이트가 예정돼 있다. 현재까지는 스테이트 채널을 먼저 개설하면 온체인의 컨트랙트를 스테이트 채널에 연결할 때 어려움이 많았다. 스테이트 채널의 컨트랙트가 생성될 때의 주소를 미리 알 수 없어 개발의 장애물로 작용했다. 


이번 하드포크에는 이더리움향상제안(EIP) 1014번이 포함돼 개설될 컨트랙트의 주소를 예측할 수 있는 기능이 추가됐다. 이로써 채널은 컨트랙트를 좀 더 유연하게 참조할 수 있게 된다. 전세계의 블록체인 개발자들은 스테이트 채널을 다시 한 번 위대하게 만들어보자는 등 뜨거운 반응을 보이고 있다.


프로토콜 기능의 선택과 집중으로 탄생한 스테이트 채널

블록체인에는 확장성 문제를 해결하기 위한 솔루션이 여럿 존재한다. 마스터 키 같은 완벽한 솔루션은 아직 없으며 상황에 따라 솔루션을 달리 해야 효과적이다. 블록체인의 확장성을 개선할 여러 솔루션은 기술적인 의미를 부여하는 방식에 따라 오프체인 기술, 온체인 기술, 세컨드 레이어 솔루션 등으로 표현된다.


세컨드 레이어 솔루션은 샤딩, 캐스퍼 등 프로토콜을 자체적으로 개선하는 퍼스트 레이어 솔루션과의 대조를 위해 등장한 개념이다. 퍼스트 레이어 솔루션은 온체인 솔루션이라고도 부른다. 반면 오프체인 기술은 블록체인의 외부에서 데이터를 처리하고 받아오는 기술을 뜻한다. 오프체인 솔루션과 세컨드 레이어 솔루션은 구분 없이도 종종 쓰인다.



이중에서 스테이트 채널은 스테이트를 다루는 오프체인 솔루션으로 이더리움의 확장성 솔루션에 해당하며 비트코인의 페이먼트 채널이 진화한 형태다.  스테이트 채널은 사용자가 게임, 내기 등의 상황에서 사용할 특정 기능만을 설계해 개설하는 퍼블릭 망 내부의 사설 거래망이다. 하지만 엄밀히 말해 프라이빗 블록체인 기술은 아니다. 별도의 합의 알고리즘이 구동되지 않으며 로그나 중간 거래 이력이 남지 않기 때문이다. 


확장성 솔루션 중에서 스테이트 채널이 크게 각광받는 이유는 네트워크의 거래 속도를 최적으로 높일 수 있다는 데 있다. 스테이트 채널을 통하면 거래가 쾌적하고 빠르다. 불필요한 기능을 덜어 프로토콜 레이어가 얇아지고 오버헤드가 줄어드는데서 오는 효과다. 외부에서 데이터를 처리하고 마지막 값만 블록체인으로 전송하는 구조 또한 블록체인의 전체 메모리와 실행 시간을 줄인다. 


페이먼트 채널은 단지 코인만 주고받지만 스테이트 채널의 경우 다양한 사용자화가 가능하다. 대개의 경우 스테이트 채널은 개발하는 디앱에 특화돼 최적화된다. 예를 들어 카지노 도박 앱인 펀페어는 스테이트 채널을 갬블 기능에 특화했다.


애초에 스테이트 채널에는 미리 제한된 참여자만 합의해 참가할 수 있다. 스테이트 채널을 개설하려면 제일 먼저 구성원들의 합의가 필수적이다. 스테이트 채널의 자산은 참가자들의 동의하에 다중 서명으로 관리된다.


스테이트 채널에서는 거래의 완결성이 즉각 부여되기 때문에 마이크로페이먼트 등의 결제 솔루션으로도 효과가 좋다. 하지만 프로토콜을 통해 참여자들의 행동을 정의해야 하고 감시 기능 등 거래의 안전망도 필수적이다. 이런 이유로 전체적으로 볼 때 오프체인 솔루션 중 구현을 위한 제약이 가장 많다. 


스테이트 채널을 만들려면 블록체인의 프로토콜에 맞춰 아키텍처를 처음부터 설계해야 하는 데다가 개발을 위한 시간과 노력이 많이 드는 문제가 있다. 최소 기능으로 구현된 스테이트 채널에는 스테이트 디파짓을 잠그는 멀티시그 월릿과 거래가 실패했을 때 원상태로 복구시키는 기능만 정의돼 있을 뿐이다. 이더리움 온체인에서 오프체인으로 끌려 내려온 스테이트를 스테이트 디파짓이라고 부른다.


반면 필수 기능을 제외하면 스테이트 채널 개발에 확실히 정해진 바가 없기에 다양한 설계가 가능하다는 것은 장점으로 꼽힌다. 스테이트 채널의 구현체에 따라 채널에 이더리움가상머신(EVM)을 포함하기도 하지만 필수는 아니다. 예를 들어 EVM 없이 메시지를 보내는 기능에 집중하는 채널도 있는가 하면 참여자의 프라이빗 노드에서 리믹스 등을 통해 EVM을 실행하는 경우도 있다. 한편 메타마스크 지갑과 분산화 파일시스템인 IPFS로 메시지를 보내는 스테이트 채널도 있다.


또 스테이트 업데이트를 위해 꼭 필요한 컨트랙트는 대부분 솔리디티 언어로 만들지만 스테이트 채널에서 사용하는 내부 로직이나 참여자 간 메시지를 주고받는 기능은 솔리디티 외에도 자바스크립트 등 다른 언어를 제한 없이 사용해 개발할 수 있다.


마이크로페이먼트 전성시대...라이트닝, 라이덴, 리플, 스텔라 페이먼트 채널

스테이트 채널을 더 잘 이해하려면 스테이트 채널의 전신인 비트코인의 페이먼트 채널을 돌아볼 필요가 있다. 스테이트 채널은 기술적으로는 비트코인의 오프체인 기술인 페이먼트 채널에서 출발했고 유사한 특징들을 많이 포함한다. 페이먼트 채널 기술을 토대로 한 라이트닝 네트워크는 진전이 지금까지 꽤 많이 있었다.


애초에 비트코인은 초당트랜잭션(TPS)이 7개를 겨우 넘길 정도에 불과해 개인 간 송금 거래를 하기에는 태생적으로 느리고 수수료도 비싼 편이었다. 이같은 환경에서 블록체인 안에서 거래의 모든 내역을 처리하는 건 현실적이지 못하다. 페이먼트 채널은 비트코인의 비싸고 느린 프로토콜을 극복하기 위해 등장했다. 다른 말로는 마이크로페이먼트 채널이라고도 한다.   


사용자가 페이먼트 채널에 들어가기 위해서는 멀티시그 월릿이 필요하다. 비트코인을 들고 페이먼트 채널에 진입하면 또 다른 세상이 펼쳐진다. 페이먼트 채널이 개설되면 거래를 무제한으로 마음껏 진행해도 문제가 없다. 페이먼트 채널에서 진행하는 거래는 비트코인의 간섭에서 벗어나기에 거래마다 블록 검증 시간을 기다릴 필요가 당연히 없다. 심지어 수수료도 거의 없거나 들지 않는다. 비트코인의 페이먼트 채널은 미사용트랜잭션아웃풋(UTXO) 장부로 관리되며 특수한 옵코드를 사용한다. 페이먼트 채널에서 처리할 수 있는 변수는 단지 비트코인의 잔고로만 한정된다. 


참여자들은 비트코인을 주고받음을 표현하는 메시지를 보내고 받는다. 거래를 정산하는 절차에서 채널의 알고리즘은 제일 마지막의 기록만을 택한다. 마지막 기록을 제외한 나머지 기록은 메인 블록체인이 추적해 알아낼 수 없기에 부수적으로 익명성이 확보되는 효과도 있다. 택한 기록에 서명이 담기며 비트코인 블록체인으로 전파돼 전 세계에 진행 중인 비트코인의 블록에 포함된다. 


비트코인의 라이트닝 네트워크는 페이먼트 채널을 여럿 연결하는 허브를 구성하는 프로젝트를 말한다. 허브는 페이먼트 채널의 추가적인 레이어인데 사용자 간 자유롭게 페이먼트 채널을 개설하도록 장소를 제공한다. 라이트닝 네트워크는 비트코인과 라이트코인에서 거래 속도를 높이기 위해 사용된다.


라이트닝 네트워크는 초당 10만 TPS를 실현할 기술력을 목표로 암호화폐공모(ICO)를 추진하기도 했다. 10만 TPS는 명목상 값이지만 라이트닝 네트워크가 충실히 구현되면 비자, 마스터카드, 페이팔 등의 기존 업체와 경쟁할 수준이 될 전망이다. 비자카드의 경우 평균 2만 TPS에서 주문이 몰릴 때에는 최대 5만 TPS까지 기록하고 있다. 


라이트닝 네트워크를 통하면 가맹점 간 빠르게 결제 메시지를 주고받고 수수료도 절감할 수 있다는 장점이 있다. 라이트닝 네트워크의 채널은 최근 2만2000개를 넘었고 현재도 증가 추세다. 스타벅스 커피를 비트코인으로 결제하는 스타블록 등의 서비스도 등장했다.


라이트닝 네트워크는 속도는 빠르지만 완벽하지는 않다. 비트코인의 탄탄한 공개형 프로토콜을 기반으로 하나 라이트닝 네트워크가 실제로 높은 보안을 담보하는지는 아직 검증이 되지 않았다. 보안상의 이유로 라이트닝 네트워크는 마이크로페이먼트에 주로 사용되고 있는 실정이다. 거래금이 큰 경우 주로 탈중앙화된 거래를 지원하는 비트코인의 본체에서 거래가 이뤄지고 있다.


이더리움에도 라이트닝 네트워크와 같은 프로젝트가 있으며 이외에도 스텔라, 리플에도 유사한 페이먼트 채널이 존재한다. 이 중 이더리움의 라이덴 네트워크는 스테이트 채널을 여럿 모으는 허브를 구성한다. 라이덴 네트워크는 ERC-20 토큰과 이더리움 코인 등을 주고받는데 효율적이다. 


라이트닝이나 라이덴 네트워크처럼 채널 허브를 건설하면 강력한 이점이 있다. 허브를 통하면 UTXO장부나 스테이트 내역을 직접 일일이 공유하지 않더라도 매우 광범위한 거래를 진행할 수 있다. 또 라이트닝 네트워크에 소속돼 있으면 일대일 거래 등을 위해 별도의 채널을 추가적으로 개설할 필요가 없어진다. 노드와 연결된 시스템이 알아서 연결된 상대방의 소속된 채널을 최단 경로로 찾아가기 때문이다. 


한편 라이트닝 네트워크에는 서로 다른 블록체인 간 코인을 교환하는 아토믹 스왑 기능이 추가될 예정이다. 아토믹 스왑 기능을 사용하면 예를 들어 비트코인과 라이트 코인은 즉각적으로 상대방 코인으로 치환되는데 이를 위한 테스트가 성공적으로 진행된 바 있다.


코드를 통해 본 이더리움 스테이트 채널의 작동 방법

스테이트는 이더리움의 커다란 종합 데이터베이스라고 볼 수 있다. 이더리움의 스테이트에는 (내 잔고, 100ETH), (캐릭터의 x좌표, y좌표) 처럼 키와 밸류의 순서쌍을 표현될 수 있는 자료형이 모두 기록돼 히스토리에 적재된다. 스테이트 채널은 이더리움에 존재하는 계정의 정보인 어카운트의 스테이트를 오프체인으로 끌어와 바꿀 수 있도록 하는데 목표가 있다. 어카운트 스테이트는 토큰 등의 각종 잔고, 코드, 컨트랙트 등 계정에 종속된 정보가 들어있다.


참여자들이 별도의 채널을 구성하기로 합의하면 채널 개설이 시작된다. 스테이트 채널을 구동하려면 별도의 프라이빗 네트워크가 필요하다. 스테이트 채널은 프라이빗 망에서 참여자 간 메시지를 교환하며 스테이트 디파짓을 업데이트하는 방식으로 작동한다. 즉 사용자가 오프체인으로 가져온 토큰의 수량 만큼 메시지를 통해 주고 받으며 거래를 진행한다.


스테이트 채널의 개발은 일종의 애플리케이션을 만드는 과정이다. 스테이트 채널을 개설하려면 메인 컨트랙트 역시 그에 걸맞는 설계가 필요하다. 일반적으로 스테이트 채널은 온체인에 메인 컨트랙트가 배포된 이후 개설할 수 있다. 채널을 개설하며 자산을 오프체인에 묶어두는 트랜잭션을 앵커 트랜잭션 혹은 펀딩 트랜잭션이라고 한다. 


앵커 트랜잭션은 주로 멀티시그 월릿을 통해 전파된다. 예치된 자산의 관리도 주로 멀티시그 월릿을 통해 이뤄진다. 멀티시그 월릿은 스마트 컨트랙트의 수준에서 구현하는 지갑의 한 형태다. 스테이트 채널에서는 멀티시그 컨트랙트의 역할이 핵심이다. 


멀티시그 월릿은 지난 2019년 주목할 블록체인 기술 톱10 ③사이드 체인에서 살펴본 바와 같이 사이드 체인의 브릿지를 구성하는데 사용되지만 이외에도 쓰임새가 많다. 스테이트 채널에서 멀티시그 월릿은 일종의 스마트 컨트랙트로 채널에 이더 등의 스테이트 값을 가져오고 완성된 값을 다시 온체인으로 보내는 역할을 담당한다. 즉 스테이트 채널과 온체인의 문지기의 역할을 수행하는 셈이다.


스테이트 채널을 게임 등의 디앱에 접목할 경우 멀티시그 월릿은 단순한 문지기의 역할 뿐만 아니라 자금 관리, 앱 내의 부정행위와 분쟁 해결, 자산 분배 등에서 감독하는 역할까지 수행할 수 있다. 멀티시그 월릿이 아닌 일반적인 스마트 컨트랙트로 여러 역할을 수행하게끔 설계할 수도 있지만 보안상 권장되지는 않는다. 


참여자가 스테이트 채널에 접속하기 위한 통신 좌표인 엔드포인트도 멀티시그 월릿으로 열린다. 스테이트 채널에서 메시지를 보내는 내부 거래와 스테이트 채널을 종료하고 정산하는 작업도 모두 멀티시그로 진행된다. 멀티시그 월릿은 그노시스, 패리티, 컨센시스 등에서 솔리디티 언어로 개발한 오픈소스가 있으며 이를 그대로 사용하거나 목적에 맞게 수정해 사용할 수 있다. 


멀티시그 월릿을 사용하면 컨트랙트 코드의 프라이버시 관리가 용이하며 온체인에서 스테이트 채널의 존재 자체를 보이지 않도록 감출 수도 있다. 참여자의 합의 절차나 권한 등을 다중 서명으로 관리해 후속 업그레이드 등을 진행하기도 쉽다. 멀티시그는 블록체인에서 탄생한 새로운 기술은 아니며 중요한 열쇠를 나눠갖는 기초적인 행위에서 출발한 고전적인 기술로 블록체인을 비롯해 핀테크나 여러 산업 분야에서 활용되고 있다. 


참여자들은 개설된 채널에서 메시지를 주고받으며 자산의 거래를 진행한다. 메시지는 트랜잭션의 발행과 유사한 방식으로 서명을 통해 적힌다. 서명은 개인키로 생성되며 멀티시그 월릿에 제출될 때 검증을 위해 메시지에 포함된 서명에서 공개키를 뽑아 비교하는 과정을 거친다. 메시지를 발행할 때 토큰 등의 스테이트 디파짓을 보내거나 다른 컨트랙트를 참조하도록 요청을 보낼 수도 있다.


한편 이 과정에서 멀티시그 월릿을 사용하지 않고도 스테이트 채널을 구현할 수도 있다. 예를 들어 다음은 자바스크립트로 구현한 사용자의 스테이트 채널로 내부 동작을 나타내는 코드의 일부로 메시지를 전송하는 기능을 볼 수 있다. 이 스테이트 채널은 EVM을 직접 사용하지 않고 자바스크립트 가상머신(VM)에서 스테이트를 저장해 사용하고 있다. 


메시지를 전송하는 함수 proposeUpdate에는 채널 아이디, 거래 번호, 내부 스테이트 값을 받고 있다. 해당 채널에서는 다중 서명이 아닌 web3.eth.sign에서 뽑아낸 서명을 키・밸류로 첨부하는 절차가 들어있음을 확인할 수 있다. 



이같은 거래 메시지가 오고가며 참가자들의 스테이트 디파짓이 변경된다. 이는 결과값만 있는 오직 한 개의 정산 트랜잭션으로 요약된다. 압축된 정산 트랜잭션은 멀티시그 월릿 등 스마트 컨트랙트를 통해 이더리움 블록체인에 전파된다. 



정산 과정은 멀티시그 월릿의 코드를 보면 잘 나타나 있다. 코드는 멀티시그를 사용하는 카운터팩츄얼 스테이트 채널의 컨트랙트를 참조했다. 컨트랙트에 포함된 execTrasaction 함수를 통해 스테이트 채널에서 연산된 스테이트 디파짓의 결과값을 온체인에 업데이트하게 된다. 스테이트 채널을 통해 거래를 하면 블록체인의 실질적인 수수료는 처음의 앵커 트랜잭션과 마지막의 정산 트랜잭션에만 지불하면 돼 경제적이다.


멀티시그 컨트랙트에서는 온체인에 결과를 반영하는 정산 트랜잭션을 보내는 과정에서 진행할 다른 함수를 요청할 수도 있다. 이를 통해 채널을 닫으며 진행할 일도 미리 정해놓을 수 있다. 해당 멀티시그 코드의 데이터 변수에는 다른 컨트랙트에 있는 함수를 콜이나 델리게이트 콜로 요청하기 위한 함수명과 함수 인자를 받고 있다.


델리게이트 콜은 어떤 컨트랙트에서 다른 컨트랙트의 함수를 요청할 때 상대방의 컨트랙트 코드만 가져와 요청하며 현재 컨트랙트의 스테이트를 변경하는 방식이다. 델리게이트 콜은 함수 단위로 요청이 가능하다. 


믿는 도끼에 발등 찍힐까, 스테이트 채널 거버넌스

스테이트 채널이 등장하면 앱에서 정한 모든 계산이 스테이트 채널로 위임된다. 이때 이더리움 체인은 스테이트 채널을 감시하는 커널의 역할을 수행하게 된다. 테이트 채널에서 문제가 발생하면 이더리움 체인이 심판처럼 기능하게 된다. 스테이트 채널은 플라즈마와 마찬가지로 불의의 사고로 메커니즘이 고장 나도 스테이트를 원래 상태로 복구할 수 있다. 


스테이트 채널은 메인 체인의 높은 보안 수준을 끌어와 외부의 침투로부터 안전하다고 인식되지만 그렇다고 허점이 없는 건 아니다. 애초에 믿을 만한 사람들로 구성됐다고는 하지만 스테이트 채널의 운영은 참여자들의 자율적인 도덕에 의존하며 따로 정해진 정책이 없어 거래의 무법지대와 사실상 다름이 없다. 스테이트 채널에서는 상황에 따라 즉각적인 인출이 되는 장점도 있지만 프로토콜에 정의한 정책을 악용하거나 우회해 다른 참가자에게 손해를 끼치는 그리핑도 발생할 수 있다.


실제로 스테이트 채널에는 참여자 모두가 아닌 일부 혹은 한 사람이 거래 결과를 제출할 수 있는 기능이 있다. 네트워크 참여자들이 불의의 사고로 연결이 끊길 경우를 수습하기 위한 비상 장치인 셈이다. 하지만 어떤 사람이 변심해서 이를 악용해 바뀌기 전 결과물을 최종 결과물로 올리는 경우 전체 구성원의 피해로 이어질 수 있다.


이같은 비정상적인 행위를 예방하기 위한 확실한 해법이 달리 있지는 않다. 대신 스테이트 채널은 일반적으로 구성원들의 참여에 크게 의존해 해결하려 한다. 변심한 사람의 독단적인 행동을 막고자 스테이트 채널에는 챌린지라고 불리는 참여자의 항의 메커니즘이 있다. 손해를 보지 않도록 항상 최신 업데이트를 올리게끔 유도하는데 이는 게임 이론 디자인에 기반한다. 게임 이론은 경쟁 상대의 반응을 고려해 매순간 최적의 행동 전략을 분석해주는 응용 수학이론으로 경제학에서 주로 활용된다.


다수의 동의 없이 누군가 한 명이 일방적으로 스테이트 디파짓을 업데이트하려 시도하면 챌린지가 시작된다. 챌린지는 스테이트 채널과 온체인을 연결하는 스마트 컨트랙트에 발생하는 일종의 대기 기간이다. 챌린지 동안 다른 사용자로부터 새로운 값이나 기존보다 거래 번호가 더 나중인 메시지가 제출되면 그값으로 새로 대체된다. 만약 챌린지 기간에 최신값을 업데이트하지 않거나 기간을 놓치면 나머지 참가자들이 토큰 등의 자산을 잃을 우려가 있다. 반면 여러 사람이 합의해서 올린 업데이트의 경우 별도의 챌린지 과정이 필요하지는 않다.


한편 스테이트 채널에서의 피해를 예방하기 위해 적극적인 기록도 필수적이다. 실제로 스테이트 채널은 최종 값만 올리고 나머지 중간값들을 모두 버리고 닫히기 때문에 이력이 남지 않는다. 문제가 발생하면 일반적으로 채널이 닫히기 때문에 구성원들은 만약의 사태에 대비해 기록을 별도로 하는 등 주의할 필요가 있다. 


스테이트 채널을 만드는 제너럴 메쏘드, 페룬 네트워크

비트코인의 페이먼트 채널에서 시작돼 이더리움의 스테이트 채널로 이어지는 오프체인 솔루션의 오디세이는 제너럴라이즈드 스테이트 채널에서 다시 한 번 성장의 기회를 맞이하게 된다. 제너럴라이즈드 스테이트 채널 프레임워크를 사용하면 블록체인의 프로토콜을 기초로 스테이트 채널을 마음대로 구현할 수 있게 된다.


제너럴라이즈드 스테이트 채널에서도 멀티시그를 사용해 채널에 접속하고 거래를 정산하는 등의 운영 절차는 같다. 다만 프레임워크를 사용하기에 스테이트 채널의 개설 절차가 단축돼 편리하다. 프레임워크는 멀티시그 솔루션을 포함하기도 한다.



특히 제너럴라이즈드 스테이트 채널은 특정 응용프로그램에 한정되지 않는 채널로 새로운 애플리캐이션을 상태 변경 없이 도입할 수 있는 장점이 있다. 하지만 스테이트 채널을 하나만 직접 구현하기도 만만치 않은데 표준화된 스테이트 채널 솔루션인 제너럴라이즈드 스테이트 채널을 만들고자 하는 프로젝트는 매우 험난한 도전일 수밖에 없다.


일반적으로 제너럴라이즈드 스테이트 채널 기술에는 부정 사용을 막는 보안적 요소와 스테이트 채널의 성능 향상 등 두 가지 조건이 요구된다. 제너럴라이즈드 스테이트 채널이 이들 조건을 모두 만족시키고 스테이트 채널에서 메시지를 매우 빠르게 주고받도록 지원한다고 하더라도 아직 안심할 수 없다. 인출을 위해서는 참여자 다수의 동의가 결국 필요한데 여기서 승인이 나지 않고 대기만 하게 되는 병목 현상이 발생할 수도 있기 때문이다.


예를 들어 자산이 묶여있는 거래나 내기 등을 하는 상황에서 참여자 본인의 패배가 확실시되면 마지막 수를 두지 않는 행위 등이 그것이다. 이같은 문제를 내쉬균형이라고 부른다. 내쉬 균형이란 게임 이론에서 참여자가 피해를 보지 않기 거래를 진전시키지 않는 상황을 말한다. 


때문에 제너럴라이즈드 스테이트 채널 프로젝트는 아키텍처 부분에서 이러한 내쉬 균형을 풀기 위한 솔루션도 제시해야 한다. 내쉬 균형을 극복하기 위해 스테이트 채널에 외부 데이터를 가져오는 어거 등의 오라클 솔루션을 추가하는 방식도 효과적으로 떠오르고 있다. 예를 들어 어거를 사용하면 스포츠나 정치적 예측 등의 결과를 사실에 근거해 블록체인 서비스로 받아와 분쟁 없이 내기 등의 승패를 바로 결정해 준다. 이외에도 내기 등의 거래에서 패배의 결과에 승복하면 인센티브를 주는 방식도 있다.


제너럴라이즈드 스테이트 채널을 만드는 프로젝트는 스테이트 채널을 구현하는 방식과 스테이트를 관리하는 방식에 따라 구분된다. 페룬 네트워크는 스마트 컨트랙트의 코드를 온체인에 먼저 배포하고 스테이트 채널을 만드는 방식이다.


이렇게 배포된 컨트랙트 코드는 스테이트 채널과 메인 체인을 연결하며 참가자들의 행위를 규정하는 법으로 작용한다. 페룬의 솔루션으로 개설한 스테이트 채널은 단순하지만 유연성이 다소 떨어진다. 채널에 없는 기능을 추가하려면 기존 컨트랙트의 연결을 끊고 컨트랙트를 다시 배포해야 하기 때문이다.


'제너럴라이즈'를 풀어보자...블록체인의 논리학, 카운터팩츄얼 프로젝트

보편적이고 어떤 상황이든 막힘없이 기능할 스테이트 채널을 만들기 위해 블록체인의 세계에 논리학의 개념이 등장했다. 카운터팩츄얼이란 우리말로 반사실 증명을 뜻한다. 추리의 방식으로 A가 실제 일어나진 않았지만 A가 발생하면 B가 발생한다는 개념으로 쓰인다. 카운터팩츄얼은 머신러닝 분야에서도 자주 쓰이는 말이다.


블록체인에서는 컨트랙트가 카운터팩츄얼 명제의 주체가 된다. 즉 컨트랙트가 지금은 온체인에 배포돼 있지 않지만 배포되면 스테이트 채널의 결과값은 어차피 C일 것이므로 따라서 C의 값은 컨트랙트 배포와 상관없이 구할 수 있다고 카운터팩츄얼에서는 가정한다. 카운터팩츄얼의 개념을 어느 정도 구현한 프로젝트로는 제너럴라이즈드 스테이트 채널 프레임워크를 만드는 카운터팩츄얼, 성인물을 관리하는 스팽크체인, 이더리움의 마이크로페이먼트 서비스인 머시노미가 있다.


이 중 카운터팩츄얼은 작년 6월 등장한 프로젝트다. 반사실 증명을 활용해 온체인에 메인컨트랙트 코드를 올리지 않고도 가정에 근거한 스테이트 채널을 먼저 만들 수 있다. 카운터팩츄얼의 내부에는 채널 속에서의 거래나 계약을 담당하는 레이어가 존재한다. 때문에 컨트랙트를 구동해 온체인과 비슷한 환경을 얼마든지 만들 수 있다. 일종의 시뮬레이션인 셈이다. 이렇게 사용자들은 컨트랙트가 없어도 컨트랙트가 있는 것처럼 거래를 진행할 수 있다. 


그렇다고 해서 온체인에 스마트 컨트랙트 배포가 아예 필요 없는 건 아니다. 스테이트 채널은 컨트랙트로 이더리움 체인과 연결되기 때문에 온체인에 코드 배포는 반드시 필요하다. 아무리 오프체인에서 거래를 많이 했어도 온체인에 코드가 없으면 연결 고리가 없어 거래 내역을 업데이트할 수 없기 때문이다.


하지만 카운터팩츄얼에서는 스테이트 채널의 셋업 과정에서 컨트랙트를 처음에 바로 제출해야 하는 건 아니다. 거래를 끝내고 다중 서명으로 금액을 정산하기 전까지 온체인에 여유롭게 배포해주면 된다. 물론 스테이트 채널을 개설할 때 동시에 배포해도 상관은 없다. 


카운터팩츄얼은 객체지향프로그래밍(OOP)으로 구현돼 있고 내부의 모든 컨트랙트는 객체다. 카운터팩츄얼에서는 스마트 컨트랙트 레이어가 있어 일반적인 스테이트 채널과 달리 내부에 스마트 컨트랙트를 배포할 수 있다. 레이어에 컨트랙트가 배포되면 카운터팩츄얼의 내부 주소값을 갖는 인스턴스가 생성된다. 사용자들은 인스턴스의 주소를 참조해 거래를 매개하거나 커밋 메시지를 보내게 돼 간편하다. 한편 이더리움의 실제 주소와 컨트랙트의 주소는 카운터팩츄얼의 전역 레지스트리를 통해 일대일로 매핑된다.


이더리움은 컨트랙트가 배포되기 전까지 주소의 값을 명확히 알 수 없다. 이더리움에서 생성되는 주소의 값은 스테이트가 업데이트되며 1씩 증가하는 논스값에 따라 달려있다. 스테이트를 변경할 트랜잭션이 몇 번 발생하는지 짐작하기는 쉽지 않기에 스테이트 채널뿐만 아니라 사이드 체인 등 여러 분야에서 이더리움 개발의 장애물로 작용하고 있다.


그러나 카운터팩츄얼의 주소 기법과 같은 효과를 갖는 업데이트가 이달 말 진행될 이더리움의 하드포크에 예정돼 있어 화제다. 콘스탄티노플 하드포크에서는 EIP 1014의 크리에이트2가 적용될 예정으로 이를 통해 컨트랙트의 주소값을 예측할 수 있게 된다. 때문에 스테이트 채널 셋업 절차도 한 단계 줄어든다.


견고한 스테이트 채널 프레임워크를 위한 험난한 블록체인 여정...현재 진행중

카운터팩츄얼은 현존하는 오프체인 솔루션 중에서 온체인에 반영되는 요소를 가장 최소화하는 스테이트 채널을 개설하는 솔루션으로 평가받고 있다. 또 채널에 기능을 추가 설치할 수 있어 제너럴라이즈드 스테이트 채널 솔루션을 구현하는 유망 프로젝트로 꼽힌다. 하지만 제너럴라이즈드 스테이트 채널은 스테이트 채널에서 수시로 발생할 수 있는 사건 사고의 예방책과 각종 특수 케이스에 대한 예외 처리 등 풀어야 할 문제가 많다.


무엇보다도 제너럴라이즈드 프레임워크에서는 거버넌스와 관련해 참여자들의 내쉬 균형을 풀 수 있는 해결책이 필요하다. 카운터팩츄얼에는 강제 메커니즘이 탑재돼 있다. 참여자가 알고 있는 스테이트 디파짓이 전파된 값과 다르면 채널에 최신값을 밀어 넣도록 강제하는 장치다. 이는 자신의 손실을 막고자 하는 인간의 본성에 착안한 게임 이론 디자인이다. 돈을 가로채기 위해 모험을 했다가 발각된 사람도 돈을 잃는다.


하지만 탐욕을 위한 인간의 본성도 만만치 않기에 완벽한 장치가 될 수 없어 한계다. 예를 들어 갬블 등의 스테이트 채널에서 이전에 소유했던 자산의 기록을 복구하기 위해 참여자 간 공격을 공모하거나 서비스 거부공격(DoS)를 가할 가능성도 배제할 수 없다.


정직한 사람이 끝까지 정직하리라는 법이 없고 변심할 수도 있는데 트랜잭션이 대량 발생해 생기는 교통 체증이나 상대방 컴퓨터에서 소프트웨어 에러로 연결이 끊기는 등 어지러운 네트워크의 상황에서는 공격으로 인한  리스크가 더욱 커진다. 때문에 네트워크에서 참여자의 활발한 행동을 촉발할 메커니즘이 반드시 필요하다. 


한편 데이터 가용성 등의 문제를 만드는 악의적인 그리핑을 예방하기 위해 믿을 만한 써드 파티를 두는 방법도 제시하고는 있으나 탈중앙화의 이념에서 벗어나게 되는 한계점이 있다. 카운터팩츄얼은 이더리움에 생성된 모든 스테이트 채널의 참여자를 한곳에 모은 일종의 슈퍼 채널에서 거래를 진행하는 방안도 모색중이다.


디앱 개발을 원하는 자, 제너럴라이즈 스테이트 채널에 주목하라

이밖에 스테이트 채널을 구현하는 일반화된 표준이 현재 없고 각 구현체에 대한 검증이 부족하다는 점도 높은 허들이다. 솔리디티 언어를 통한 개발의 장벽이 높다는 점도 장애물로 작용한다. 스테이트 채널의 개발자는 전체적인 연산 과정에서 수수료 가스의 사용량을 예측해야 한다. 이더리움은 가스 수수료의 최대치를 초과하면 에러가 발생해 코드가 실행되지 않기 때문이다. 


스테이트 채널은 구현해야 할 부분도 많고 신경 써야 하는 복잡한 부분도 많아 구현을 위한 체감 난이도는 더욱 높을 수밖에 없다. 사용자들도 애플리케이션을 하나씩 사용하는 게 아니라 실제로 여러 프로그램을 동시에 사용하고 드나들기에 제너럴라이즈드 스테이트 채널은 사용자의 이같은 비동기적인 다중 접속도 고려해야 한다.


사용자 입장에서도 스테이트 채널을 직접 사용하기란 쉽지 않다. 스테이트 채널의 인터페이스가 일반적인 사용자가 현재 사용하기 어려운 편이기 때문이다. 제너럴라이즈드 스테이트 채널 프레임워크는 기존의 스테이트 채널의 여러 문제점을 극복할 목표로 현재도 개발이 진행 중에 있다. 


특히 제너럴라이즈드 스테이트 채널은 스테이트 채널을 구현하기 쉽도록 모듈을 제공함으로써 개발의 장벽을 낮출 것으로 전망된다. 이를 사용하면 애플리케이션이 속한 분야에 특화된 앱을 만들 수 있기 때문이다. 그뿐만 아니라 블록체인 앱의 데이터 처리를 효율적으로 설계할 수 있게 돼 디앱의 내실화를 기할 것으로 기대된다. 비트코인의 페이먼트 채널이 단지 잔고만 처리했다면 제너럴라이즈드 스테이트 채널에서는 하나의 채널에서 여러 앱들을 사용하고 결과만 블록체인에 반영할 수 있어 활용도가 더욱 높아진다.


강봉재 아르고 수석연구원은 “사람들이 쓰기 편하도록 프레임워크를 제공하는 제너럴라이즈드 스테이트 채널은 블록체인의 활용 사례가 많아질수록 발전 가능성이 크고 연구할 부분도 많아 주의 깊게 보는 중”이라고 말한다. 그는 “오프체인 기술은 여러 블록체인에 응용이 가능하기 때문에 블록체인 기술 자체보다 앞으로 더욱 쓰임새가 많을 것”이라고 전망했다.


기사작성에 참여하고 검수를 진행한 강봉재 수석연구원은 티맥스데이터에서 데이터베이스 SQL 엔진 부분을 담당했으며 작년부터 아르고에서 스마트 컨트랙트의 개발을 담당하고 있다.


[강민승 기자]


[SDS멀티캠퍼스] 시큐어 코딩 기반 블록체인 개발
북마크
좋아요 : 2
공유
https://dstreet.io/news/view-detail?id=N20190122164106845063
URL복사
댓글 0
댓글쓰기
댓글 쓰기
에어드랍 가즈아