Loading...

퀀텀 오프라인 스테이킹 파트 1 - UTXO의 역할

2020-04-11 20:00

올해 들어 퀀텀 개발자들은 오프라인 스테이킹 기능 개발에 집중하고 있습니다. 이번 블로그 시리즈는 오프라인 스테이킹의 기술 설계와 실험 그리고 적용을 소개하려 합니다.

퀀텀의 지분증명(PoS)에 있어 UTXO는 매우 중요한 역할을 하고 있기에 이번 블로그에서는 현재 사용되고 있는 퀀텀 온라인 스테이킹 시스템에서 UTXO의 역할을 설명드리고자 합니다. 앞으로 오프라인 스테이킹 개발이 완료되면 오프라인 스테이킹에서 UTXO의 중요성에 대해서도 설명드릴 예정입니다.

요약: UTXO(Unspent Transaction Outputs, 미사용 트랜잭션 출력값)는 블록체인의 기초 가치 단위로 퀀텀 지분증명(PoS)에 매우 중요한 역할을 하고 있습니다. 대규모의 스테이킹은 두 개의 UTXO로 나뉘고 소규모의 스테이킹은 여러 개의 UTXO로 결합되게 됩니다. UTXO가 오프라인 스테이킹에서의 역할을 설명하기 앞서 이번 블로그에서는 현재 온라인 스테이킹 시스템에서 UTXO의 역할을 분석했습니다.

UTXO란

퀀텀 블록체인은 비트코인 UTXO 모델을 사용해 '코인'을 전송하고 있습니다. UTXO 모델을 사용한다는 것은 QTUM 토큰의 가치가 블록체인에 저장된 하나 또는 여러 개의 거래 결과값을 의미한다는 것입니다. 'Unspent(미사용)' 거래는 다음 거래에서 'input(입력값)'으로 사용될 수 있습니다. 이 경우 송금 받는 주소로 하나 또는 여러 개의 'output(출력값)'을 보내는 것을 의미합니다.

UTXO가 지갑에서 사용되는 방식을 살펴보겠습니다. 아래 그림은 총 300 QTUM을 보유하고 있는 2개의 주소에 있는 6개의 UTXO에 대한 예시입니다. UTXO는 지갑이 아닌 블록체인에 저장된 거래들입니다. 지갑이 프라이빗 키를 보유하고 있어서 해당 UTXO들에 대한 권한을 주장할 수 있게 되고 송금 또는 스테이킹을 진행할 수 있게 됩니다. (해당 주소들에 대한 프라이빗 키가 없는 다른 지갑들은 그럴 권한이 없습니다.) 해당 UTXO들은 '성숙'한 상태(500개 블록 검증 완료)로 지갑에서 스테이킹을 실행할 수 있습니다.

이해를 돕기 위해 지갑 화면에 'My UTXO'란을 가상으로 추가해봤습니다. 실제의 지갑에서는 'Transactions'란에서 지갑의 거래 내역들을 확인하실 수 있습니다.

UTXO를 스테이킹하는 방법

지분증명 합의 알고리즘은 스테이킹 중인 각각의 UTXO에 대해 연산을 실행합니다. 그중 한 개의 UTXO가 커널 솔루션(Kernel solution, 블록 생성을 위한 연산값)을 제공하면 알고리즘은 해당 UTXO에게 다음 블록을 생성할 권한을 부여합니다. 커널 솔루션을 찾을 확률은 해당 UTXO의 크기에 따라 결정되고 UTXO가 클수록 더 자주 결과값을 제공하게 됩니다. 이로 인해 지갑에 모든 UTXO의 '무게(크기)'는 해당 지갑의 블록 생성 빈도를 결정하게 됩니다.

UTXO 스테이킹

UTXO가 커널 솔루션을 제공하고 나면 블록체인에서 스테이킹을 진행하게 됩니다. 모든 퀀텀 블록에 두 번째 거래는 스테이킹을 확인하고 블록 보상을 지급하는 '코인스테이크(coinstake)' 거래입니다. 해당 거래에서 지갑은 블록 보상을 자신에게 돌려주는 작업을 진행하고 이후 500개의 블록 검증(약 18시간 소요)이 지날 때까지 락업이 됩니다. 아래 그림은 코인스테이크 거래에 관한 것입니다.

코인스테이크 거래의 진행 과정

위 그림을 보면 300 QTUM을 보유하고 있는 UTXO가 커널 솔루션(지분증명 합의 알고리즘에 정확한 결과값을 제공하는 것)을 제공하여 다음 블록을 생성하게 되었습니다. 이후 기존에 있던 300 QTUM에 새로 얻게 된 4 QTUM이 추가됩니다. 퀀텀 블록체인에서는 200 또는 그 이상의 QTUM을 보유한 코인스테이크 입력(input)을 둘로 나누게 되고 초기 블록 보상인 0.4 QTUM도 둘로 나뉘게 되어 150.2 QTUM의 출력(output)이 2개 생겨납니다. 그리고 9개의 0.4 QTUM 출력은 이전 블록 생성자들에게 송금 됩니다.

지갑은 거래 출력(이 경우 2개의 150.2 QTUM의 출력)을 자신에게 보내고 해당 코인들은 송금 또는 스테이킹에 활용하기까지 500개의 블록 검증을 거쳐야만 합니다. 코인스테이크 거래에 대해서는 수수료나 가스 비용이 요구되지 않습니다. 또한 위에 그림에는 표시되지 않았지만 보통 해당 블록에 포함된 거래에 대한 수수료와 가스비도 십등분해서 각각의 출력에 포함시킵니다. 이것이 퀀텀 지분증명이 상호 작용하는 방식입니다.

스테이킹 과정에서 다시 결합하는 UTXO

스테이킹의 또 다른 기능은 작은 UTXO들을 재결합하여 소규모의 UTXO를 줄이는 것입니다. 아래 그림은 150 QTUM의 UTXO가 커널 솔루션을 제공한 경우입니다. 해당 거래는 이전에 생성한 블록에 대한 보상으로 0.4 QTUM 금액의 UTXO를 9개 입력받습니다. 150 QTUM은 200 QTUM보다 작으므로 둘로 나뉘지 않고 9개의 0.4 QTUM에 새로 생성한 블록에 대한 초기 보상인 0.4 QTUM을 더해 총 154 QTUM 크기에 UTXO를 출력 받게 됩니다.

극단적인 예시로 퀀텀 블록체인 500947번 블록에서 0.4 QTUM의 UTXO가 커널 솔루션을 제공하여 99개의 다른 0.4 QTUM 크기의 UTXO들과 결합하는 경우가 생긴 적이 있다.

스테이크 생성

스테이크가 생성되어 UTXO가 결합하거나 분리되는 과정은 아래 플로우 차트와 같다. 200 QTUM보다 큰 UTXO는 둘로 나누고 작은 UTXO들은 100 QTUM이 될 때까지 결합을 한다. 최종 스테이킹은 지갑에 있는 사용 가능한 UTXO에 의해 결정된다.

블록에 포함된 수수료(거래 수수료와 가스비) 또한 블록 보상과 같이 십등분으로 나눠서 지급된다.

초기 투자자들의 UTXO 크기

스테이킹 과정에서 UTXO들의 결합, 분리 규정을 더 자세히 살펴보기 위해 지난달 스테이킹 순위 Top 8에 속하는 초기 투자자들 지갑에 있는 UTXO 크기를 확인해보았습니다. 해당 지갑들은 모두 1년 반 이상 스테이킹을 진행해왔고 지속적으로 UTXO 결합/분리를 하고 있습니다.

평균적인 UTXO 크기는 0.5 QTUM 이상인 것만 확인했습니다(0.4QTUM 이하 잔액 제외). 해당 차트를 보면 최초 투자자들의 평균 UTXO 크기는 150-180 QTUM 범위에 가까운 것을 확인할 수 있습니다. 재결합 알고리즘은 0.18.0버전 이후로 더 많이 실행되게 설계되어서 재결합된 UTXO들이 대부분 9의 배수인 것을 확인할 수 있는데 이는 일반적으로 커널 솔루션 제공 시 9의 배수인 0.4 QTUM 크기에 블록 보상을 같이 받아서 그렇습니다.

약 2주간의 블록체인 데이터(블록 543,792-553,241) 추출하여 실제 스테이킹 크기를 살펴보았습니다. 총 9,450개의 블록이 4에서 100,002.4 QTUM 크기 범주 내에서 스테이킹을 진행하고 있었습니다. 이중 46.3%는 200 QTUM보다 작은 범주에 있었습니다(더 이상 나뉘지 않는 범주). 전체적인 크기 분포는 아래와 같습니다.

해당 도표를 보면 스테이킹 크기가 100-150 QTUM(회색 영역)인 경우는 전체의 26.6%를 차지하고 있고 150-200 QTUM(노란색 영역)인 경우는 전체의 16.7%를 차지하는 것을 알 수 있습니다. 이 영역들이 큰 비중을 차지하는 것을 보면 200 QTUM 이상의 UTXO들이 나눠지고 있고 소규모의 UTXO들은 결합되고 있다는 것을 알 수 있습니다.

UTXO 크기 세팅 - sendmanywithdupes

스테이킹 확률을 높이기 위해 가장 이상적인 방법은 사전에 UTXO 크기를 100-150 QTUM으로 분할해둘 필요가 있습니다. 큰 UTXO들을 이상적인 크기로 분할하기 위한 명령어는 sendmanywithdupes입니다. 거래마다 100개의 UTXO를 포함하는 게 이상적이고 새로운 스테이킹 주소로 보내는 가장 쉬운 방법이기도 합니다. 참고 자료 2를 참고하시면 워드 프로세서를 통해 스테이킹 주소를 대체할 수 있습니다.

결론

UTXO은 스테이킹에 필수적인 요소이고 스테이킹 과정에서 결합과 분리 알고리즘을 엄격하게 준수합니다. 퀀텀 오프라인 스테이킹이 출시되면 새로운 설계에서 UTXO의 역할을 좀 더 논의할 예정입니다.

참고 자료

  1. An Introduction to Qtum Proof-of-Stake Mining — A Racing Story
  2. sendmanywithdupes 해당 명령어는 다중 거래를 하나의 주소로 보낼 수 있게 하고 큰 UTXO를 스테이킹에 적합한 크기로 나눠줍니다. 아래는 10개의 새로운 UTXO를 생성하는 명령어이고 같은 패턴을 활용하면 최대 100개의 UTXO까지 확장할 수 있고 '전부 대체'를 통해 소유하고 계신 스테이킹 주소를 입력할 수도 있습니다.
    sendmanywithdupes “” “{ \”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100}”

퀀텀 공식 커뮤니티

Naver Blog

Telegram

Kakao Talk

Facebook