Loading...

퀀텀 오프라인 스테이킹 파트 2 - QIP 25

2020-04-12 20:00

QIP(Qtum Improvement Proposals)는 퀀텀 커뮤니티가 깃허브를 통해 퀀텀에 대한 건의사항을 제안하는 방식이다. 이를 통해 사용자 UI, 기술 변수, 새로운 명령어 등에 대한 개선안을 제안할 수 있다. 이번에 퀀텀 오프라인 스테이킹에 관한 QIP-25가 공개되어 이번 블로그를 통해 소개하고자 한다.

요약

이번 QIP는 오프라인 주소들이 블록체인 프로토콜 수정과 스마트 컨트랙트의 실행을 통해 온라인 노드에게 스테이킹 권한을 위임하는 방법을 소개하고 있습니다.

메인넷 론칭부터 퀀텀은 온라인 노드만 지분증명(PoS) 스테이킹에 참여하여 블록체인의 보안과 운행을 맡게 했습니다. 이번 프로토콜 수정을 통해 오프라인 주소들이 안전하게 UTXO(Unspent Transaction Outputs, 미사용 거래 출력)들을 지분증명 스테이킹을 실행하는 온라인 노드에 위임하여 대신 스테이킹을 할 수 있게 할 예정입니다. 주소 위임은 스마트 컨트랙트를 통해 진행될 것이고 새로운 블록체인 헤더와 거래 프로토콜은 위임에 대한 검증을 제공할 것이며 실시간으로 온라인 노드에게 수수료를 지불하는 기능도 지원할 예정입니다. 퀀텀 코어 노드와 라이트 클라이언트는 스마트 컨트랙트 콜을 통해 위임과 위임 철회를 쉽게 할 수 있는 방법을 제공할 예정입니다. 위임은 보관하는 방식이 아니며(오프라인 주소의 소유자가 프라이빗 키를 컨트롤해야 함) 위임된 UTXO들은 어떤 방식으로든 락업되지 않습니다.

동기

퀀텀 커뮤니티에서 오프라인 스테이킹에 대한 요구가 많았습니다. 론칭 때부터 퀀텀 메인넷에서 스테이킹하기 위해서는 퀀텀 코어 풀노드 지갑을 활용하는 온라인 노드가 필요했습니다. 스테이킹을 하는 지갑들은 퀀텀 블록체인의 모든 데이터를 보유해야 했고 24시간 동안 온라인에 접속해서 네트워크 보안을 유지해야만 블록 생성에 대한 자격이 주어졌습니다. 이로 인해 풀노드를 운영하고 싶지 않거나 보안적인 부분을 우려하는 퀀텀 홀더들은 스테이킹에 참여할 수가 없었습니다.

풀노드 운영에 드는 리소스와 전력 또한 커뮤니티 멤버들의 고민 사항이었습니다. 보안적으로 바이러스를 예방하는 가장 좋은 방법은 이메일이나 인터넷 서핑을 하지 않는 스테이킹 전용 기계를 이용하는 것인데 이는 리소스 이슈를 야기합니다. 특히 전력 소비가 우려되는 소규모 홀더들에게는 고민 사항이었습니다.

퀀텀 풀노드를 24시간 운영하는 것이 어려운 일은 아니었지만 리소스가 필요했고 온프레미스 또는 클라우드 공간이 필요했고 지속적으로 노드 업그레이드, 하드 포크, 운영 시스템 업그레이드 등의 운영, 유지 보수 작업이 필요했습니다.

용어 설명

스테이킹 서비스(Staking Services): 수수료를 받고 노드를 통해 주소들을 위임받아 UTXO 스테이킹을 실행해 주는 서비스.

솔로 스테이커(Solo Staker): 보유하고 있는 UTXO를 직접 스테이킹하는 온라인 풀노드 지갑 (퀀텀 코어).

스테이킹 서비스 비용: 스테이킹 서비스 제공에 대한 대가로 받는 수수료. 위임자가 0-100 퍼센트 사이에서 동의한 요율대로 서비스 제공자가 지급받는 방식.

슈퍼 스테이커(Super Staker): 위임받은 주소에 스테이킹 서비스를 제공하는 퀀텀 코어 지갑(노드).

오프라인 스테이킹: 슈퍼 스테이커에게 오프라인 주소를 위임하여 UTXO를 스테이킹하는 스테이킹 방식.

오프라인 스테이킹

오프라인 스테이킹 설계 목표는 아래와 같습니다.

  • 보관 스테이킹 솔루션이 아닌 방식으로 사용자가 자신의 프라이빗 키에 대한 권한을 유지해야 한다.

  • 위임 주소에 있는 UTXO 락업되지 않고 언제든지 송금 또는 개별 스테이킹이 가능해야 한다.

  • 위임된 UTXO의 성숙 기간은 기존 500개의 블록 검증 시간과 동일해야 한다.

  • 사용자들이 직접 스테이킹 서비스 제공자들에게 지불할 수수료를 설정할 수 있어야 한다.

  • 코인스테이크 프로토콜 수정을 통해 블록 보상으로 수수료를 즉각 지불하는 방법을 도입해야 한다.

  • 스테이킹 서비스 제공자들은 온라인 상태를 유지해야 하고 스테이킹을 실행하여 'nothing at stake' 이슈를 예방해야 한다.

  • 다중 클라이언트 솔루션 개발을 통해 쉽고 빠른 위임-위임 해제 기능을 제공한다.

오프라인 스테이킹은 주소에 있는 UTXO들을 다른 온라인 노드에 위임하여 스테이킹을 하는 방식이므로 블록 보상에 대한 추정 시간은 지금의 시스템과 동일하다. 위임 스테이킹 방식은 스테이킹 풀과는 다른 개념이다.

코인스테이크 출력

코인스테이크는 모든 블록의 2번째 거래로 1) 새로운 블록에 대한 블록 보상과 2) 해당 블록에 포함된 수수료 및 가스 비용을 처리합니다. 오프라인 스테이킹에서 블록 리워드는 아래와 같은 방식으로 계산됩니다.

블록 보상 금액 - 스테이킹 서비스 수수료 = 위임 주소에 지불되는 금액 스테이킹 서비스 수수료 = 슈퍼 스테이커의 주소

오프라인 스테이킹에서 코인스테이크 거래의 프로토콜은 아래 예시와 같이 수정될 예정입니다. 예시에서 앨리스(Alice)는 스테이킹 서비스를 제공하는 밥(Bob)에게 오프라인 주소를 위임합니다. '수정 여부(Changed?)'란은 현재 프로토콜과 비교해서 수정이 필요한지를 표시합니다.

더 자세한 설명을 위해 가정을 더해봅니다. 앨리스가 오프라인 스테이킹을 위해 스테이킹 서비스 제공자인 밥에게 20%의 수수료를 지급하기로 하고 오프라인 스테이킹을 원하는 다른 사용자인 캐롤은 15%의 수수료를 스테이킹 서비스 제공자인 데이비드에게 지급하기로 했다고 가정합니다. 그리고 각각의 블록 보상에 0.1 QTUM의 거래 수수료와 가스 비용이 추가되어 각각의 블록 보상이 4.1 QTUM이 된다는 가정입니다. 이 가정에서 코인스테이크의 출력은 아래와 같습니다.

앨리스의 블록 보상:

캐롤의 블록 보상:

주의사항:

  1. 코인스테이크 거래에 대해서는 수수료를 부과하지 않습니다.
  2. 수수료 요율을 0% 또는 100%로 설정했을 경우 출력값은 하나만 존재하게 됩니다. (가치가 0인 값은 출력되지 않습니다.)
  3. 위에 예시는 설명을 위해 실행 방식을 간소화했습니다. 퀀텀의 현재 시스템은 블록 보상을 509개의 블록에 걸쳐서 분할 지급합니다.

새로운 RPC 명령어

슈퍼 스테이커 운영을 위해 원격 프로시저 호출(Remote Procedure Call)이 필요합니다. 해당 명령어들은 RPC 호출, Qtum-Qt GUI 지갑 콘솔, qtum-cli 등을 통해 실행될 예정입니다. 아래와 같은 새로운 명령어들이 오프라인 스테이킹을 위해 추가될 예정입니다.

새로운 명령어 매개변수

슈퍼 스테이커는 실행 시 명령어 매개변수를 읽습니다. 이 명령어들은 커맨드 라인에 표시됩니다. 예를 들어 qtumd daemon 서버 지갑을 실행하는 경우: "./qtumd -parameter1 -parameter2=nn -parameter3=nn"

새로 추가될 명령어 매개변수는 아래와 같습니다.

슈퍼 스테이커 노드 운영

슈퍼 스테이커는 위임받은 주소의 UTXO를 스테이킹할 수 있는 퀀텀 코어 지갑(풀 노드)입니다. 새로운 명령어와 설정을 통해 아래와 같은 작업을 수행할 수 있습니다.

  1. getdelegationsforstaker 명령을 통해 위임 주소 리스트 불러오기
  2. getaddressutxos 명령을 통해 주소 내에 위임받은 UTXO 리스트 불러오기
  3. stakingminutxovalue 또는 stakingminfee 명령을 통해 UTXO 리스트에서 최소 금액과 최소 수수료 기준으로 선택
  4. 퀀텀 지분증명(PoS) 알고리즘을 통해 커널 솔루션 계산.
  5. 커널 솔루션 도출 시 현재 위임 내역 검증 후 코인스테이크에 수수료 지급 내역이 포함된 블록 생성.
  6. 새로운 블록을 제출하며 슈퍼 스테이커가 보유하고 있는 UTXO 스테이킹 내역 제출.

클라이언트 운영 - 지갑

클라이언트는 스테이킹을 위임하는 지갑입니다. 클라이언트에게는 슈퍼 스테이커에게 UTXO 주소를 쉽게 위임할 수 있는 방법이 제공될 예정입니다. 예를 들어 오프라인 스테이킹 페이지는 아래와 같을 수 있습니다. (최종 디자인은 다를 수 있습니다.)

오프라인 스테이킹 위임을 위해 클라이언트는 스마트 컨트랙트 호출을 실행해야 합니다. 퀀텀 코어 지갑은 현재 스마트 컨트랙트 호출 기능을 지원하며 오프라인 스테이킹 기능이 출시되면 우선 퀀텀 코어 지갑에 적용될 예정이고 퀀텀 웹 지갑과 안드로이드 지갑에 순차적으로 적용될 예정입니다. 서드파티 지갑들도 스마트 컨트랙트 호출 기능을 합병한다면 해당 기능을 적용할 수 있을 것입니다.

퀀텀 웹 지갑은 'Ledger에서 복구' 기능을 제공하고 있습니다. 간소화된 오프라인 스테이킹 페이지가 출시되면 Ledger 하드웨어 지갑에서도 오프라인 스테이킹 위임이 가능해질 예정입니다.

스마트 컨트랙트 위임

스마트 컨트랙트를 통해 위임 내역에 대한 조정을 실행하게 될 예정입니다. 위임 정보 추가/업데이트, 위임 해제, 특정 주소로부터 위임 실행 등 기능을 조정할 수 있게 됩니다. 스마트 컨트랙트는 위임된 사용자 주소, 슈퍼 스테이커 주소, 사용자가 동의한 위임 수수료, 위임을 실행할 블록 높이 등 위임 정보를 보유할 예정입니다. 위에 예시를 통해 설명하자면 아래와 같은 정보를 포함할 예정입니다.

호환성

오프라인 스테이킹은 블록과 거래 프로토콜에 대한 수정이 필요하고 이를 위해 하드포크가 요구됩니다. 하드 포크 실행 후 노드와 클라이언트는 이전 버전과 호환되지 않게 됩니다. 이를 위해 사전에 테스트넷에서 새로운 노드와 클라이언트를 실험할 예정입니다. 퀀텀 코어 0.18.1버전의 하드포크와 같이 테스트넷 실험 후 메인넷에 적용할 예정입니다.

초기에 적용되지 않을 기능들

오프라인 스테이킹의 초기 버전은 보안성과 편의성에 초점을 맞춰 최소한의 기능만 적용할 예정입니다. 오프라인 스테이킹 기술이 성숙해지고 커뮤니티에 추가적인 요구 사항이 있을 경우 추후에 더 많은 기능들을 추가할 예정입니다.

아래와 같은 기능들은 초기 버전에 추가되지 않을 예정입니다.

  1. 다중 서명 주소로부터 스테이킹 위임
  2. 세그윗 주소(p2sh-segwit 또는 bech32)로부터 스테이킹 위임. 퀀텀 기본 주소(Q로 시작하는 주소)만 지원될 예정입니다.
  3. 스테이킹 서비스 노드 자신의 UTXO에 대한 오프라인 스테이킹
  4. 스테이킹 서비스 노드의 UTXO 재결합 기능
  5. 위임된 주소의 소규모 UTXO 재결합 기능 (수동으로 작업해야 합니다.)

개발자:

퀀텀 오프라인 스테이킹을 위해 초기 설계를 제공한 Neil Mahi에게 감사를 표하며 이후 기술 설계와 검토를 진행한 퀀텀 개발팀에게도 감사를 표합니다.

참고 자료:

퀀텀 공식 커뮤니티

Naver Blog

Telegram

Kakao Talk

Facebook