layout: post title: "Proof of Stake"

date: 2019-01-07 12:14:18

지분증명 (Proof of Stake)

지분증명(Proof-of-Stake)은 무엇인가요?

지분증명 (Proof-of-Stake, PoS)은 블록체인 시스템에서 합의에 이르기 위해 사용되는 알고리즘의 카테고리 중 하나입니다. 정확하게 말하면, 지분증명은 Sybil 공격을 방지하는 메커니즘입니다 (즉, 단일 참여자가 N 명의 다른 사람 인체 하는 것을 방지합니다). PoS 시스템에서 참여자의 투표는 소유하고 있는 코인 수와 직접 연결되어 있습니다 그래서 100 개의 동전 만 가지고있는 사람은 각각 100 개의 동전을 가진 1000 명의 다른사람 인 체 할 수 없습니다.

블록체인을 진행하려면 새로운 블록을 만들어 체인에 추가해야합니다. 누가 새로운 블록을 만들 권리가 있을까요? 작업증명 (Proof-of-Work,PoW) 시스템에서 블록을 만들 권리를 가지기 위해 마이너는 컴퓨팅 능력을 확장하고 랜덤한 암호 퍼즐을 풉니다. 문제를 푼 마이너 (Winner라고 원문에서 표기- 역자 주)는 다음 블록을 만들고 그에 대한 보상을 얻습니다. 이런 패러다임에서 마이너의 컴퓨팅 능력이 높을수록 다음 블록을 만들 확률이 높아집니다. 이와는 다르게, 마이너/ 밸리데이터(Validator) / 블록 생산자(Block producer)가 보유한 동전이 많을수록 다음 블록을 만들 가능성이 높아진다는 것이 PoS 시스템의 주요 아이디어 입니다.

대체로, 2 가지 종류의 지분증명 알고리즘이 있습니다 :

  1. 체인 기반(Chain-based) 지분 증명 (Proof-of-Stake)

    Bitcoin처럼 가장 긴 체인 (가장 길거나 무거운 체인)을 기반으로 블록을 만들려면 각 타임 슬롯에서 하나의 밸리데이터가 랜덤하게로 선택됩니다. 그러나 (지분증명 에서는) 퍼즐을 먼저 풀어 낸 밸리데이터를 선택하는 대신, (밸리데이터) 선택 가능성은 얼마나 많은 코인을 묶어(lock-up) 놓았는지 또는 얼마나 많은 코인을 걸어("Stake")놓았는지에 따라 (밸리데이터 선택)가중치가 부여됩니다.

  1. 비잔틴 실패 허용(Byzantine Fault Tolerant ,BFT) 지분증명 (Proof-of-Stake)

    블록을 만들 권리가있는 임의의 밸리데이터를 모든 참가자가 반드시(Must) 받아 들이는 대신, BFT 시스템은 제안(Proposing)승인(accepting) 아이디어를 소개합니다. 체인 기반(Chain-based) 지분증명 시스템과 마찬가지로 코인 지분으로 가중치가 부여된 무작위로 선택된 벨리데이터가 다른 밸리데이터에게 블록을 제안하도록 선택됩니다. 모든 밸리데이터는 정직한 모든 밸리데이터가 동의 할 때까지 서로 통신해야합니다. 일단 모든 밸리데이터 들이 동의하면 블록을 승인하고 최신 블록으로 확정합니다.

Tezos가 사용하는 합의 알고리즘 (Consensus Algorithm)은 무엇인가요?

Tezos는 Liquid Proof-of-Stake 라고 불리는 체인기반 PoS 알고리즘을 사용합니다. 이 지분증명 알고리즘을 이해하기 위해서 다음과 같이 3가지 섹션으로 나누어서 설명하겠습니다.

  1. Block 생성(Baking)

    블록 생성은 블록체인이 진행하는 방식입니다. Tezos에서는 블록을 만드는 참가자를 베이커라고 합니다. 베이커는 컴퓨팅 성능을 네트워크에 제공하여 트랜잭션의 유효성을 검사합니다. 그러기 위해 블록 당 16XTZ가 새로 발행된 형태로 프로토콜에 의해 보상을 받습니다.

    베이커가 되기 위해서 참가자는 적어도 10,000XTZ (1 roll)를 보유해야 합니다. 가지고 있는 롤이 많을수록 다음 블록을 구울 수있는( 블록을 생성 할 수 있는- 역자 주) 기회가 주어질 가능성이 높아집니다. 어느 때에 10개 롤이 활성화되어 있고 베이커가 롤의 2/10을 소유하고 있다면 다음 블록을 만들 수있는 권한이 20% 부여됩니다. 제빵업자가 XTZ가 10,000개이든 XTZ가 19,999 개일 경우 시스템에서 동일한 베이킹 권한을 갖게됩니다.

    제빵권(블록 생성 권한)은 우선순위(in terms of priorities)가 설정(set)됩니다. 예를 들어 롤이 10개인 경우 프로토콜은 다음과 같이 무작위로 우선 순위 목록을 선택할 수 있습니다.

    Priority1 = Roll 6
    Priority2 = Roll 9
    Priority3 = Roll 4
    Priority4 = Roll 3
    .
    .
    .
    Priority10 = Roll 7  

즉, 롤6을 소유 한 사람이 블록을 제안하는 데 첫번째 순위를 갖게됩니다. 1분 이내에 블록을 생성하고 전파하지 않으면 롤9 소유자가 블록 생성 권한을 넘겨 받을 수 있습니다. 자신이 가지고있는 롤이 많을수록 높은 우선권을 가질 확률이 높아집니다.

블록을 구우려면 블록 당 512XTZ의 안전 보증금 ("지분증명")을 내 걸어야 합니다 . 이 보증금은 5사이클 (약 14일) 동안 묶이게 됩니다. 베이커가 (블록을) 두번 굽는다면 이 보증금은 삭감 될 수 있습니다 ( "Nothing-at-Stake"문제).
  1. 위임하기

    누군가 10,000XTZ가 없거나 블록을 구울 수 있는 컴퓨팅 인프라를 구축하고 싶지 않다면 코인을 베이커에게 위임 할 수 있습니다. 위임을 통해 코인 보유자는 베이커에게 코인을 "빌려줄 수" 있습니다. 결과적으로 베이커의 (블록 생성자가 될)선택 확률이 높아지고 베이커는 추가로 코인 보유자와 수익을 나누게 됩니다. 중요한 것은 이 과정이 실제로 코인의 소유권(Ownership)을 양도하지 않는다는 것입니다. 베이커는 위임 된 XTZ를 쓸 수없고, 베이커는 다른 사람의 돈을 가지고 도망 칠 수 없습니다.

    베이킹 서비스에 경쟁력있는 요금을 제공하는 그룹들이 갑자기 생겨났고 대부분의 그룹들이 위임을 통해 얻을 수있는 보상에 대해 약 10 ~ 20 %의 수수료를 부과합니다. 여기에서 전체 베이킹 서비스의 목록을 찾을 수 있습니다.

  2. 포크(Fork) 선택 규칙

    어떻게 프로토콜이 어떤 체인 포크가 "올바른"체인 포크인지 결정하는가가 Tezos 합의 알고리즘을 이해하는 마지막 열쇠입니다. Bitcoin의 포크 선택 규칙은 간단합니다. 가장 긴 체인은 원본(Canonical)체인입니다. 대신 Tezos는 블록을 보증하는 베이커의 숫자로 정식 체인을 선택합니다. 위에서 언급 되었었지만 베이커에게는 블록을 생성 할 수 있는 베이킹 권한이 주어졌지만 블록을 보증할 2차 책임도 가집니다. 모든 블록높이에서 블록을 보증하기 위해 32 개의 랜덤 롤이 선택되고 가장 많이 보증돤 블록이 표준 블록이 됩니다.

    베이커가 정식 블록이 되는 블록을 보증하면 XTZ에 대한 보상을 받게됩니다. 따라서 베이커는 다른 베이커도 보증할거라고 생각하는 블록을 승인하게끔 인센티브가 생깁니다.(A.K.A우선 순위가 높다고 알려진 블록) 베이킹과 마찬가지로 블록을 보증하려면 베이커가 보증 당 64 XTZ를 예치해야합니다. 이것은 Nothing-at-Stake 문제를 방지합니다.

요약하자면: Tezos PoS 프로토콜은 체인 기반 PoS 알고리즘을 사용합니다. 따라서 PoS 알고리즘을 따라 (블록의) 보증으로 체인의 순위를 정하고 표준(Canonical) 체인을 결정합니다. 베이커 (10,000 XTZ를 소유 한 사람들)에게는 블록을 만들고 보증하는 책임이 주어집니다. 그들은 정직한 행동을 권장하기 위해 자신의 자본 일부를 예치해야(Stake) 합니다.

Nothing-at-Stake 문제가 무엇이고 Tezos는 이에 대해서 어떻게 해결하고 있나요?

PoW 시스템에서는 2 개의 체인 포크가 있을 때 마이너는 2 가지 옵션을 갖습니다. 즉, 포크된 2개의 체인에 각각 마이닝 파워을 분리하거나 하나의 포크에서만 마이닝을 할 수 ​​있습니다. 그러나 PoS로 보호된 시스템에는 해시 파워 개념이 없습니다. 따라서 밸리데이터는 이론적으로 동일한 블록 높이에서 여러 블록을 서명 할 수 있습니다. 따라서 순진하게 구현된 PoS 네트워크에서 밸리데이터는 자체적으로 비용을 들이지 않고 여러 포크를 생성하고 유지 관리 할 수 ​​있습니다.

이 문제를 해결하기 위해 Tezos 프로토콜에는 어떤 슬래시 조건이 포함되어 있습니다. 같은 높이에 있는 여러 블록을 생성하거나(Bake 라고 원문에서 표현함 - 역자 주) 지지하는 베이커는 보안 보증금을 잃습니다. 누군가 가 다른 베이커의 "더블 베이킹 (double-baking, 이중 지불의 의미함 - 역자 주)" 하는 것을 발견하면, (더블 베이킹의 )증거가 있는 미래의 블록에 (더블 베이킹에 대한 )혐의를 포함시킬 수 있습니다. 이로 인해 "더블 베이커"는 보안 보증금을 벌금으로 물게 되고 사이클 동안의 보상도 몰수됩니다. (몰수된 보증금과 보상)의 절반은 태워서 없애고 나머지 절반은 블록 보상 형태로 (더블 베이킹을 발견해서 혐의를 제기한) 고발인 에게 갑니다. 이 인센티브는 베이커가 다른 베이커를 점검하고 더블 베이킹을 발견 할 때 더블 베이킹에 대한 혐의를 제기하도록 합니다. 이 때문에 베이커는 여러 포크에서 블록을 생성하거나 (블록 )승인하는 것에 대한 인센티브를 잃습니다. 자신의 코인을 잃을 위험이 있으므로 Nothing-at-Stake Problem을 최소화 할 수 있습니다.

Tezos의 트랜잭션은 finality를 가지나요?

Finality를 가지지 않습니다. 현재 Tezos 프로토콜에서 (약 30 분 동안 이뤄지는)30번의 확인(confirmations)은 대체적으로 트랜잭션이 변경 불가능한 것으로 되기에 경험에 기반한 좋은 규칙으로 여겨집니다. Tezos는 체인 기반 PoS 컨센서스 알고리즘을 사용하므로 체인 재구성(re-organization)의 가능성은 트랜잭션 이후에도 있습니다. 사용자들은 트랜잭션이 취소되지 않을 것이라고 완전하게(Overwhelmingly) 확신하기 전에 여러번의 확인(confirmation)을 기다려야합니다.

누락 된 (블록에 대한) 보증(endorsement), 누락 된 블록 및 앞으로 할당 된 베이킹 권한(블록생성 권한 - 역자 주) 으로부터 정보를 모으면 (네트워크 참여자이자 노드인 ) 참관자는 롤의 X%를 제어하는 ​​액터가 주어진 블록을 재구성 할 수 있는지 없는지를 결정할 수 있습니다.

테조스는 어떻게 확장하나요?

현재 Tezos는 초당 30~40건의 트랜잭션을 처리합니다.

Tezos의 확장성(Scalability)를 개선하기 위한 로드맵(roadmap)이 있나요?

"로드맵"이라고 말할것은 없습니다. Tezos의 온 체인 (on-chain) 거버넌스 시스템에서 베이커는 프로토콜을 업그레이 제안에 투표 할 수 있습니다. 이 메커니즘을 사용하면 합의 프로토콜은 하드포크(hardfork) 없이도 체인 투표를 통해 바꿀 수 있습니다. Finality와 높은 처리량(higher throughput)을 가진 Algorand 또는 Tendermint와 같은 새로운 합의 알고리즘을 Tezos에서 사용할 수도 있습니다.

빠른 최종성을 가진 새로운 Tezos 합의 알고리즘을 찾기 위한 여러 노력이 진행 중입니다. 그 중 하나는 각 블록에 (즉각적인 finality 와)Byzantine Agreement을 가지고 있는 Tendermint를 블록 승인(block acceptance)에 사용한다는 것입니다. 또 다른 하나는 Igloo 프로젝트로 Tezos에 아발란체(Avalanche)를 (적용하는 것을) 연구하는 것입니다.

더해서 Tezos의 Sharding 연구가 Cornell 대학교에서 Tezos 재단의 지원금을 통해 진행해되 있습니다.

Arthur Breitman의 새로운 아이디어는 "Scaling Tezos" 라고 해서 블로그 에 게시되어 있습니다.이 아이디어는 재귀 zk-SNARK 를 사용해서 각 블록마다 확장성을 드라마티컬 하게 늘리는것에 대해서 설명합니다.