트루빗 편집하기
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
− | [[파일: | + | [[파일:트루빗로고.png|썸네일|150픽셀|'''트루빗''']] |
− | [[파일:트루빗 | + | [[파일:트루빗 .png|썸네일|250픽셀|'''블록체인'''(Truebit)]] |
− | '''트루빗'''<!--트루비트-->( | + | '''트루빗'''<!--트루비트-->(truebit)<!--truebit-->은 [[이더리움]]의 연산 성능을 올리기 위한 오프체인 솔루션이다. <ref> 도예리 기자,〈[https://decenter.sedaily.com/NewsView/1VJ8NP79S8 서울대 연구원이 말하는 이더리움 연산력 한계 극복하기]〉,《decenter》2019-05-22 </ref> |
==개요== | ==개요== | ||
최근 다양하게 제시되고 있는 확장성 솔루션들은 메인체인의 트랜잭션 처리성능을 개선하여 TPS를 높이는데 중점을 둔 경우가 많다. 샤딩이나 플라즈마 등 많은 솔루션들이 이에 해당한다. 이에 반해 트루빗은 이더리움의 TPS가 아닌, 이더리움에서 처리할 수 있는 연산 성능의 한계를 극복하기 위해 등장한 확장성 오프체인 솔루션이다. | 최근 다양하게 제시되고 있는 확장성 솔루션들은 메인체인의 트랜잭션 처리성능을 개선하여 TPS를 높이는데 중점을 둔 경우가 많다. 샤딩이나 플라즈마 등 많은 솔루션들이 이에 해당한다. 이에 반해 트루빗은 이더리움의 TPS가 아닌, 이더리움에서 처리할 수 있는 연산 성능의 한계를 극복하기 위해 등장한 확장성 오프체인 솔루션이다. | ||
− | |||
;배경 | ;배경 | ||
이더리움에서 프로그램을 실행하기 위해서는 복잡도가 높아질수록 수수료가 증가하게 되는데 한 블록 안에 담길 수 있는 가스의 양이 제한되어 있다. 또한, 많은 연산 작업을 필요로 하기 때문에 블록 당 처리 가능한 연산에도 한계가 있다. 이로 인해 이더리움의 연산 성능 문제가 지속적으로 제기되어 왔다. <ref> 강민승 기자,〈[https://www.mk.co.kr/news/economy/view/2019/07/502822/ 도지더리움으로 보는 인터체인의 역사1 - 도지더리움의 탄생]〉,《매일경제》2019-07-11</ref> | 이더리움에서 프로그램을 실행하기 위해서는 복잡도가 높아질수록 수수료가 증가하게 되는데 한 블록 안에 담길 수 있는 가스의 양이 제한되어 있다. 또한, 많은 연산 작업을 필요로 하기 때문에 블록 당 처리 가능한 연산에도 한계가 있다. 이로 인해 이더리움의 연산 성능 문제가 지속적으로 제기되어 왔다. <ref> 강민승 기자,〈[https://www.mk.co.kr/news/economy/view/2019/07/502822/ 도지더리움으로 보는 인터체인의 역사1 - 도지더리움의 탄생]〉,《매일경제》2019-07-11</ref> | ||
− | ; | + | |
+ | ;Verifier의 딜레마 | ||
이더리움 채굴자는 다음 블록 채굴을 시작하기 전, 새로운 블록이 정확한 블록인지 검증할 필요가 있다. 하지만 해당 검증에 대해서 보상(수수료)은 받지 못한다. 그렇다고 해서 검증을 하지 않고 바로 그 위에 블록을 붙였다가는 잘못된 체인에 시간만 낭비하는 셈이 될 수 있다. 그렇기 때문에 검증할지, 건너뛸지에 대한 두 가지 상반된 행위 사이에서 고민하게 되는데 블록 가스 제한이 늘어날수록 심해지는 양상을 나타낸다. | 이더리움 채굴자는 다음 블록 채굴을 시작하기 전, 새로운 블록이 정확한 블록인지 검증할 필요가 있다. 하지만 해당 검증에 대해서 보상(수수료)은 받지 못한다. 그렇다고 해서 검증을 하지 않고 바로 그 위에 블록을 붙였다가는 잘못된 체인에 시간만 낭비하는 셈이 될 수 있다. 그렇기 때문에 검증할지, 건너뛸지에 대한 두 가지 상반된 행위 사이에서 고민하게 되는데 블록 가스 제한이 늘어날수록 심해지는 양상을 나타낸다. | ||
16번째 줄: | 16번째 줄: | ||
==기술== | ==기술== | ||
+ | |||
;원리 | ;원리 | ||
DApp이 블록 가스제한보다 많은 가스가 소모되는 연산을 수행하고 싶을 때, 트루빗 프로토콜로 넘긴 다음 트루빗 네트워크 참여자들이 복잡한 연산을 대신 수행하고 결과값만을 전달하여 온체인에 다시 반영하는 형태이다. | DApp이 블록 가스제한보다 많은 가스가 소모되는 연산을 수행하고 싶을 때, 트루빗 프로토콜로 넘긴 다음 트루빗 네트워크 참여자들이 복잡한 연산을 대신 수행하고 결과값만을 전달하여 온체인에 다시 반영하는 형태이다. | ||
26번째 줄: | 27번째 줄: | ||
Solver의 연산이 틀리면 Solver의 보증금에서 삭감되며, Solver의 연산이 맞으면 검증 게임에 발생된 비용을 Challenger의 보증금에서 삭감한다. | Solver의 연산이 틀리면 Solver의 보증금에서 삭감되며, Solver의 연산이 맞으면 검증 게임에 발생된 비용을 Challenger의 보증금에서 삭감한다. | ||
+ | |||
===트루빗 컨트랙트=== | ===트루빗 컨트랙트=== | ||
[[파일:트루빗1.png|450픽셀|오른쪽|'''트루빗 컨트랙트'''(Truebit Contracts)]] | [[파일:트루빗1.png|450픽셀|오른쪽|'''트루빗 컨트랙트'''(Truebit Contracts)]] | ||
− | + | ▶아라곤(Aragon)예시 | |
− | + | 온체인에서 투표 결과를 집계하는 연산처리는 비싸고, 블록 가스 제한도 초과하므로 트루빗 프로토콜로 넘긴다. | |
− | |||
DApp과 트루빗 프로토콜이 상호작용하기 위한 API이다. 트루빗 스마트 컨트랙트 안에는 createTask라는 함수가 있다. DApp은 createTask함수를 호출할 때 아래의 3가지 변수를 전달한다. | DApp과 트루빗 프로토콜이 상호작용하기 위한 API이다. 트루빗 스마트 컨트랙트 안에는 createTask라는 함수가 있다. DApp은 createTask함수를 호출할 때 아래의 3가지 변수를 전달한다. | ||
46번째 줄: | 47번째 줄: | ||
트루빗 클라이언트를 설치한 사람 누구나 트루빗 네트워크의 채굴자가 될 수 있으며, 이들은 트루빗 컨트랙트의 이벤트를 주시한다. | 트루빗 클라이언트를 설치한 사람 누구나 트루빗 네트워크의 채굴자가 될 수 있으며, 이들은 트루빗 컨트랙트의 이벤트를 주시한다. | ||
+ | |||
===트루빗 네트워크=== | ===트루빗 네트워크=== | ||
[[파일:트루빗3.png|450픽셀|오른쪽|'''트루빗 네트워크'''(Truebit Network)]] | [[파일:트루빗3.png|450픽셀|오른쪽|'''트루빗 네트워크'''(Truebit Network)]] | ||
− | 트루빗 채굴자들은 새로운 Task가 생기면 코드를 다운로드하고, 제공된 | + | 트루빗 채굴자들은 새로운 Task가 생기면 코드를 다운로드하고, 제공된 input과 함께 Truebit WebAssembly VM을 로컬로 실행하여 결과값을 컨트랙트에 제출한다. |
(이 때, 문제를 푼 채굴자를 문제 해결자(Solver)라고 하고, 결과값을 제출할 때 일정량의 보증금도 함께 제출해야 한다. 보증금을 통해 자신이 올바른 결과값을 제출했다고 간주하는 것이다.) | (이 때, 문제를 푼 채굴자를 문제 해결자(Solver)라고 하고, 결과값을 제출할 때 일정량의 보증금도 함께 제출해야 한다. 보증금을 통해 자신이 올바른 결과값을 제출했다고 간주하는 것이다.) | ||
57번째 줄: | 59번째 줄: | ||
;Challenge가 있을 경우 | ;Challenge가 있을 경우 | ||
− | Challenger가 보증금을 걸고 challenge 제출 시, 트루빗 컨트랙트에는 ①Task Giver가 제시한 보상, ②문제 해결자(Solver)의 보증금, | + | Challenger가 보증금을 걸고 challenge 제출 시, 트루빗 컨트랙트에는 ①Task Giver가 제시한 보상, ②문제 해결자(Solver)의 보증금, ③검증자(Challenger)의 보증금이 예치되어 있다. |
이제 문제 해결자와 챌린지를 제출한 검증자 사이에서 누구의 연산 결과값이 옳은지에 대한 검증게임이 시작된다. | 이제 문제 해결자와 챌린지를 제출한 검증자 사이에서 누구의 연산 결과값이 옳은지에 대한 검증게임이 시작된다. | ||
+ | |||
==검증게임== | ==검증게임== | ||
트루빗에 처리하는 모든 task의 프로그램 코드는 웹어셈블리 프로그램이며, 웹어셈블리는 매 명령어들이 하나씩 순서대로 실행된다. (물론, 예외도 존재한다.) 결국 몇 번째 명령어를 실행할 때 서로의 연산 결과가 달라지기 시작했는지를 알아내고 이를 온체인에서 실행하여 누가 맞았는지를 확인하는 것이 게임의 요지이기 때문이다. 또한 검증게임에서는 세 분류의 참여자가 존재한다. | 트루빗에 처리하는 모든 task의 프로그램 코드는 웹어셈블리 프로그램이며, 웹어셈블리는 매 명령어들이 하나씩 순서대로 실행된다. (물론, 예외도 존재한다.) 결국 몇 번째 명령어를 실행할 때 서로의 연산 결과가 달라지기 시작했는지를 알아내고 이를 온체인에서 실행하여 누가 맞았는지를 확인하는 것이 게임의 요지이기 때문이다. 또한 검증게임에서는 세 분류의 참여자가 존재한다. | ||
− | ;Solver | + | ;문제해결자 (Solver) |
task에 대한 연산을 수행하고 결과값을 제출한 사람 | task에 대한 연산을 수행하고 결과값을 제출한 사람 | ||
;챌린저 (challenger) | ;챌린저 (challenger) | ||
문제 해결자의 결과값이 틀렸음을 주장하는 사람 | 문제 해결자의 결과값이 틀렸음을 주장하는 사람 | ||
− | ;Judges | + | ;판사 (Judges) |
제한된 능력을 지녔으며 결과값이 맞았는지 아닌지를 판단해줄 주체 | 제한된 능력을 지녔으며 결과값이 맞았는지 아닌지를 판단해줄 주체 | ||
현재 트루빗은 판사를 이더리움 네트워크로 설정하고 있다. (실제 이더리움 네트워크가 망가진다면, 언제든지 다른 네트워크로 옮길 수 있다고 말하고 있다.) 따라서 최종적으로 이더리움 네트워크는 연산 능력이 제한되어 있으므로 부담을 최소해야 한다. | 현재 트루빗은 판사를 이더리움 네트워크로 설정하고 있다. (실제 이더리움 네트워크가 망가진다면, 언제든지 다른 네트워크로 옮길 수 있다고 말하고 있다.) 따라서 최종적으로 이더리움 네트워크는 연산 능력이 제한되어 있으므로 부담을 최소해야 한다. | ||
+ | |||
;실행 | ;실행 | ||
문제 해결자와 챌린저 모두 같은 프로그램 코드와 입력값을 다운로드 했으며 | 문제 해결자와 챌린저 모두 같은 프로그램 코드와 입력값을 다운로드 했으며 | ||
− | [[파일:검증1.png|| | + | [[파일:검증1.png||400픽셀|]] |
− | |||
− | |||
− | + | ==한계== | |
− | |||
− | + | ==결론== | |
− | |||
− | |||
− | + | {{각주}} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ==참고자료== | |
==같이 보기== | ==같이 보기== | ||
− | |||
− | |||
− | |||
* [[확장성]] | * [[확장성]] | ||
− | * [[ | + | * [[인터체인]] |
− | * [[ | + | * [[브릿지]] |
− | |||
− | {{블록체인 기술| | + | {{블록체인 기술|토막글}} |