의견.png

트루빗

해시넷
chlheewoo (토론 | 기여)님의 2019년 9월 3일 (화) 10:29 판 (검증게임)
이동: 둘러보기, 검색
트루빗
블록체인(Truebit)

트루빗(truebit)은 이더리움의 연산 성능을 올리기 위한 오프체인 솔루션이다. [1]

개요

최근 다양하게 제시되고 있는 확장성 솔루션들은 메인체인의 트랜잭션 처리성능을 개선하여 TPS를 높이는데 중점을 둔 경우가 많다. 샤딩이나 플라즈마 등 많은 솔루션들이 이에 해당한다. 이에 반해 트루빗은 이더리움의 TPS가 아닌, 이더리움에서 처리할 수 있는 연산 성능의 한계를 극복하기 위해 등장한 확장성 오프체인 솔루션이다.

배경

이더리움에서 프로그램을 실행하기 위해서는 복잡도가 높아질수록 수수료가 증가하게 되는데 한 블록 안에 담길 수 있는 가스의 양이 제한되어 있다. 또한, 많은 연산 작업을 필요로 하기 때문에 블록 당 처리 가능한 연산에도 한계가 있다. 이로 인해 이더리움의 연산 성능 문제가 지속적으로 제기되어 왔다. [2]


Verifier의 딜레마

이더리움 채굴자는 다음 블록 채굴을 시작하기 전, 새로운 블록이 정확한 블록인지 검증할 필요가 있다. 하지만 해당 검증에 대해서 보상(수수료)은 받지 못한다. 그렇다고 해서 검증을 하지 않고 바로 그 위에 블록을 붙였다가는 잘못된 체인에 시간만 낭비하는 셈이 될 수 있다. 그렇기 때문에 검증할지, 건너뛸지에 대한 두 가지 상반된 행위 사이에서 고민하게 되는데 블록 가스 제한이 늘어날수록 심해지는 양상을 나타낸다.

블록체인의 확장성 문제를 해결하는 방법에는 크게 온체인 솔루션오프체인 솔루션으로 나눌 수 있다. 온체인 솔루션은 블록체인 상에서 확장성 문제를 해결하는 것으로 거래 처리 속도나 용량을 늘리는 등 처리 방식의 효율화를 의미하며, 오프체인 솔루션은 블록체인 외부에서 거래를 처리하여 네트워크가 효율적으로 돌아가는 것을 의미한다. [3]

기술

원리

DApp이 블록 가스제한보다 많은 가스가 소모되는 연산을 수행하고 싶을 때, 트루빗 프로토콜로 넘긴 다음 트루빗 네트워크 참여자들이 복잡한 연산을 대신 수행하고 결과값만을 전달하여 온체인에 다시 반영하는 형태이다.

Solver(문제를 푸는 채굴자)

스마트 컨트랙트에 보증금(토큰)을 예치하고 연산을 처리한다. 연산을 올바르게 처리했을 경우 예치해 두었던 보증금과 보상을 받는다.

Solver의 답이 틀렸다고 판단될 경우

Challenger가 보증금을 예치하고 Solver의 답에 이의를 제기한다. 이후 검증 게임을 실시한다. (Solver와 Challenger의 결과가 다르게 나타나는 부분만 검증한다.)

Solver의 연산이 틀리면 Solver의 보증금에서 삭감되며, Solver의 연산이 맞으면 검증 게임에 발생된 비용을 Challenger의 보증금에서 삭감한다.


트루빗 컨트랙트

트루빗 컨트랙트(Truebit Contracts)

▶아라곤(Aragon)예시 온체인에서 투표 결과를 집계하는 연산처리는 비싸고, 블록 가스 제한도 초과하므로 트루빗 프로토콜로 넘긴다. DApp과 트루빗 프로토콜이 상호작용하기 위한 API이다. 트루빗 스마트 컨트랙트 안에는 createTask라는 함수가 있다. DApp은 createTask함수를 호출할 때 아래의 3가지 변수를 전달한다.

  • Program

실행하고 싶은 코드. 트루빗은 WebAssembly VM코드를 사용한다. DApp은 bytecode를 넘길 수 있고, IPFS 해시값이나 코드가 저장된 다른 콘텐츠 주소로 전달할 수 있다.

  • Input

실행할 프로그램의 입력 값이다. DApp은 input값을 직접 제공하거나 input값이 저장된 다른 콘텐츠 주소로 전달할 수 있다.

  • Reward

프로그램을 실행한 사람에게 지급할 보상

트루빗 클라이언트를 설치한 사람 누구나 트루빗 네트워크의 채굴자가 될 수 있으며, 이들은 트루빗 컨트랙트의 이벤트를 주시한다.


트루빗 네트워크

트루빗 네트워크(Truebit Network)

트루빗 채굴자들은 새로운 Task가 생기면 코드를 다운로드하고, 제공된 input과 함께 Truebit WebAssembly VM을 로컬로 실행하여 결과값을 컨트랙트에 제출한다. (이 때, 문제를 푼 채굴자를 문제 해결자(Solver)라고 하고, 결과값을 제출할 때 일정량의 보증금도 함께 제출해야 한다. 보증금을 통해 자신이 올바른 결과값을 제출했다고 간주하는 것이다.)

Challenge가 없을 경우

문제 해결자가 결과 값을 제출한 시기부터 타이머가 시작된다. 타이머 동안 제출된 결과값을 검증하여 틀린 결과라고 생각된다면 누구나 챌린지를 다시 신청할 수 있다. 이 때, 챌린지를 신청한 검증자 역시 보증금을 함께 지불해야 한다. 또한, 타이머 동안 아무 챌린지도 제출되지 않았을 경우 문제 해결자가 올바르게 코드 연산을 수행했다고 생각할 것이다. 따라서 트루빗 컨트랙트가 DApp 컨트랙트로 해당 결과값을 다시 콜백하여 준다.

Challenge가 있을 경우

Challenger가 보증금을 걸고 challenge 제출 시, 트루빗 컨트랙트에는 ①Task Giver가 제시한 보상, ②문제 해결자(Solver)의 보증금, ③검증자(Challenger)의 보증금이 예치되어 있다.

이제 문제 해결자와 챌린지를 제출한 검증자 사이에서 누구의 연산 결과값이 옳은지에 대한 검증게임이 시작된다.


검증게임

트루빗에 처리하는 모든 task의 프로그램 코드는 웹어셈블리 프로그램이며, 웹어셈블리는 매 명령어들이 하나씩 순서대로 실행된다. (물론, 예외도 존재한다.) 결국 몇 번째 명령어를 실행할 때 서로의 연산 결과가 달라지기 시작했는지를 알아내고 이를 온체인에서 실행하여 누가 맞았는지를 확인하는 것이 게임의 요지이기 때문이다. 또한 검증게임에서는 세 분류의 참여자가 존재한다.

문제해결자 (Solver)

task에 대한 연산을 수행하고 결과값을 제출한 사람

챌린저 (challenger)

문제 해결자의 결과값이 틀렸음을 주장하는 사람

판사 (Judges)

제한된 능력을 지녔으며 결과값이 맞았는지 아닌지를 판단해줄 주체

현재 트루빗은 판사를 이더리움 네트워크로 설정하고 있다. (실제 이더리움 네트워크가 망가진다면, 언제든지 다른 네트워크로 옮길 수 있다고 말하고 있다.) 따라서 최종적으로 이더리움 네트워크는 연산 능력이 제한되어 있으므로 부담을 최소해야 한다.


실행

문제 해결자와 챌린저 모두 같은 프로그램 코드와 입력값을 다운로드 했으며

한계

결론

각주

참고자료

같이 보기


  의견.png 이 트루빗 문서는 블록체인 기술에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.