Skip to content

XODE 스테이킹 ​

Xode 합의 ​

Polkadot은 하이브리드 합의 모델(hybrid consensus model)을 사용합니다. 이 방식에서는 블록 최종성 가젯(block finality gadget)과 블록 생성 메커니즘이 분리되어 있습니다. 따라서 파라체인은 블록 생성에만 집중하고, 상태 전이 검증은 릴레이 체인에 맡길 수 있습니다.

파라체인인 Xode Blockchain은 다음 문제들을 무신뢰(trustless)하고 탈중앙화된 방식으로 해결해야 합니다.

  1. 어떤 노드가 블록을 작성(author)할 수 있는가?
  2. 여러 노드가 블록을 작성할 수 있다면, 특정 시점에는 단 하나의 작성자만 있어야 하므로 그 시점에 어떤 노드가 작성 권한을 갖는가?

여기서 Xode 합의(Xode Consensus)가 등장합니다. Xode 합의는 Cumulus 기반 파라체인에서 슬롯 기반(slot-based) 합의 알고리즘을 구축하기 위한 프레임워크입니다. 이러한 합의 엔진의 운영적인 부분에 대한 표준 구현을 제공하고, 연구자와 개발자가 사용자 지정하고자 하는 요소(필터)를 구현하는 데 유용한 트레이트(trait)를 제공하는 것을 목표로 합니다. 이러한 필터는 블록 작성 슬롯이 무엇인지 정의하도록 사용자 지정할 수 있으며, 여러 필터를 조합하여 블록 작성 권한을 여러 단계에 걸쳐 콜레이터의 일부 집합으로 제한할 수 있습니다.

Xode Blockchain에서는 2계층 필터 방식을 사용합니다.

  1. 스테이킹(Staking): 첫 번째 계층은 파라체인 스테이킹 필터로 구성되며, 스테이킹 기반 순위를 사용하여 모든 콜레이터 후보 중에서 활성 콜레이터 풀을 선정합니다.
  2. 할당(Allocating): 두 번째 계층은 또 다른 필터를 추가하여 각 슬롯마다 콜레이터 수를 일부 집합으로 좁힙니다.

Xode 합의는 다음 사용 가능한 슬롯에서 어떤 콜레이터가 파라체인 블록을 생성할 자격이 있는지만 결정할 수 있습니다. 이 파라체인 블록을 최선(best) 블록으로 표시하는 것은 Cumulus 합의 메커니즘이며, 최종적으로 이 파라체인 블록을 릴레이 체인에 포함하고 최종 확정하는 것은 (릴레이 체인의) BABE와 GRANDPA 하이브리드 합의 모델입니다. 릴레이 체인 수준에서 릴레이 체인 포크(fork)가 해결되면, 해당 파라체인 블록은 결정론적으로 최종 확정됩니다.

스테이킹 ​

콜레이터는 익스트린직(extrinsic)을 통해 일정량의 XON을 본딩(bonding)하는 것만으로 후보 풀에 참여할 수 있습니다. 풀에 들어가면 XON 보유자는 위임(delegation, 스테이킹이라고도 함)을 통해 후보의 지분을 늘릴 수 있습니다.

Nimbus는 후보의 본드와 XON 보유자의 위임을 포함하여 네트워크에 스테이킹된 XON 기준 상위 36명의 후보를 선정합니다. 이렇게 필터링된 풀을 선정된 후보(selected candidates)라고 하며, 선정된 후보는 매 라운드(1,200 블록 동안 지속)마다 갱신됩니다.

할당 ​

Aura 프로토콜(PoA)은 Xode Blockchain의 블록 생성 메커니즘에서 중요한 역할을 합니다. 구체적으로, Nimbus가 생성한 후보 목록에 대해 Xode Blockchain은 Polkadot의 표준 Aura 프로토콜을 채택하여 블록 작성 책임을 할당합니다. 이 구성에서 각 타임 슬롯의 블록 작성자는 결정론적인 라운드 로빈(round-robin) 방식으로 결정됩니다.

즉, Xode 콜레이터 세트의 36명의 후보 모두가 고정된 순서로 배열되고, 각 타임 슬롯은 목록의 다음 콜레이터에게 할당됩니다. 라운드 로빈 방식은 모든 콜레이터가 블록을 생성할 동등하고 예측 가능한 기회를 갖도록 보장합니다. 마지막 콜레이터가 블록을 생성하면 순서는 첫 번째 콜레이터부터 다시 시작됩니다.

Aura를 활용함으로써 Xode Blockchain은 Polkadot의 합의 설계와의 호환성을 유지하면서 블록 생성의 공정성, 효율성, 예측 가능성을 보장합니다. 또한 이 프로토콜은 주어진 슬롯에 할당된 콜레이터만 블록을 생성할 수 있도록 하므로 블록 생성 충돌 위험을 최소화하여 블록체인의 안정성과 연속성을 보장합니다.

무효화 불가 후보 ​

Xode Blockchain 합의에서 무효화 불가 후보(invulnerable candidates)란 네트워크 운영에 필수적인 것으로 지정된 특정 콜레이터 노드를 의미합니다. 이러한 노드는 합의 유지에 특별한 역할을 하며 특정 조건에서 슬래싱(slashing)되거나 강제로 제거되지 않도록 보호되기 때문에 "invulnerable"로 표시됩니다. 자세한 내용은 다음과 같습니다:

네트워크 운영에 필수적: ​

  • 이러한 콜레이터는 Xode Blockchain에 사전 구성되어 있습니다.
  • 네트워크 초기 단계나 테스트넷(testnet)을 운영할 때 안정성과 신뢰성을 보장하는 데 매우 중요합니다.

슬래싱 불가: ​

  • 다른 후보와 달리 무효화 불가 노드는 잘못된 동작(예: 오프라인 상태가 되거나 이중 서명(equivocate)하는 경우)을 하더라도 슬래싱과 같은 페널티를 받지 않습니다.
  • 이러한 보호 장치는 네트워크가 핵심 콜레이터 노드를 잃지 않도록 보장합니다.

Nimbus 후보 선정에 포함: ​

  • 무효화 불가 노드는 일반적인 Nimbus 후보 선정 절차의 대상이 아닙니다.
  • 이들은 활성 검증자 세트에 자동으로 포함됩니다.

Xaver 무효화 불가 노드 ​

Xaver 노드는 Xode Blockchain에서 지정된 무효화 불가 노드로, 네트워크의 안정성과 신뢰성을 보장하는 데 핵심적인 역할을 합니다. Xaver 노드는 전용 장치에 설치된 라이트 클라이언트(light client)로 구성되어, 효율적이고 가벼운 방식으로 네트워크에 참여할 수 있습니다. 무효화 불가 노드인 Xaver는 슬래싱의 대상이 되지 않으며 표준 콜레이터 후보 선출 절차를 거치지 않으므로 지속적인 운영이 보장됩니다. 이러한 설계 덕분에 콜레이터 가용성이 줄어들거나 네트워크 장애가 발생하는 상황에서도 Xaver 노드는 블록 생성을 유지하여 잠재적인 중단을 방지할 수 있습니다. 또한 가벼운 클라이언트 구성을 활용하여 자원 효율성을 높이는 동시에, Xode 네트워크에서 무신뢰하고 탈중앙화된 운영을 유지하는 중추 역할을 합니다.

스테이킹 절차 ​

스테이킹 절차는 노드가 네트워크에 참여하는 데 필수적인 노드 키를 생성하고 세션 키(session key)를 설정하는 것으로 시작됩니다. 노드에 유효한 세션 키가 있는지 확인한 후, 노드를 등록하여 블록 작성 및 스테이킹 활동에 참여하기 시작합니다. 등록된 노드는 다양한 방식으로 관리할 수 있습니다. 일시적으로 오프라인으로 전환하거나, 다시 온라인으로 복귀시키거나, 필요한 경우 네트워크에서 영구적으로 제거할 수 있습니다.

노드가 등록되고 활성화되면 작성 절차에 참여하기 위해 본딩되어야 합니다. 노드가 세션 동안 블록을 작성하면 활성 상태를 유지하며 계속 참여합니다. 그러나 노드가 세션 동안 블록을 작성하지 못하면 슬래싱되고 자동으로 오프라인으로 설정되어 향후 세션에 참여할 기회가 줄어듭니다. 이 메커니즘은 활성 상태이고 신뢰할 수 있는 노드만 네트워크에 남도록 보장합니다.

또한 노드 운영자는 커미션 비율(commission rate)을 정의할 수 있으며, 이는 노드와 스테이커(위임자, delegator) 간에 보상이 분배되는 방식을 결정합니다. 스테이커는 자신의 XON 토큰을 노드에 위임하여 지분에 따라 보상을 받을 수 있습니다. 보상은 노드의 커미션을 공제한 후 지급됩니다. 스테이커가 참여를 변경하고자 하는 경우, XON 토큰을 언스테이킹(unstake)하여 위임을 해제하고 토큰을 회수할 수 있습니다. 이 절차는 활성 노드와 참여자가 지속적으로 보상을 받는 역동적이고 안전한 스테이킹 시스템을 유지하는 데 도움이 됩니다.

작성 절차 ​

노드를 등록하고 일정 금액을 본딩하면 자동으로 Waiting 상태가 할당됩니다. 다음 세션에서 Waiting 상태이고 유효한 세션 키를 가진 노드는 Aura 검증자 대기열에 추가됩니다. 이러한 노드는 그다음 세션부터 블록을 작성할 자격을 얻습니다. 그러나 대기열에 있는 검증자 중 두 세션이 지나도 작성을 시작하지 않은 검증자는 현재 세션의 블록 작성에 참여하지 않습니다. 이러한 단계적 절차는 올바르게 구성되고 활성 상태인 노드만 블록 생성에 기여하도록 보장합니다.

노드가 블록을 성공적으로 작성하면 보상은 트레저리(Treasury), 작성자(Author), 스테이커(Stakers) 간에 분배됩니다. 구체적으로 보상의 20%는 트레저리로 가고, 나머지 80%는 작성자와 스테이커가 나눠 갖습니다. 스테이커는 전체 지분 대비 자신의 지분 비율에 따라 보상을 받으며, 작성자는 작성자의 커미션에서 스테이커 보상을 공제한 나머지 잔액을 갖습니다. 반대로 노드가 세션 동안 블록을 작성하지 못하면 slashedAuthors 메커니즘이 해당 노드의 성과를 추적합니다. 지정된 최대 기간 동안 비활성 상태로 남아 있는 노드는 자동으로 Offline으로 설정됩니다. 오프라인 노드는 스테이킹 시스템의 무결성과 신뢰성을 유지하기 위해 점진적으로 등급이 낮아지고 결국 네트워크에서 제거됩니다.

보상 계산 예시 ​

보상 분배는 총 보상 22,114,400을 기준으로 계산됩니다. 먼저 보상의 20%(4,422,880)가 트레저리에 할당되고, 나머지 80%(17,691,520)는 작성자와 스테이커 간에 분배됩니다. 작성자의 커미션은 50%로 설정되어 있으며, 나머지 절반(8,845,760)은 각 스테이커의 지분 비율에 따라 스테이커들에게 분배됩니다. 예를 들어 비율이 6%(1/15)인 스테이커 1은 530,746을 받으며, 이는 시작 잔액 90,000,000,000,000에 더해집니다. 이후 스테이커들도 각자의 비율에 따른 몫을 받으며(예: 13%인 스테이커 2는 1,115,451, 20%인 스테이커 3은 1,604,533 등), 각 계산마다 다음 스테이커를 위한 잔여 금액이 줄어듭니다.

마지막으로 모든 스테이커에게 보상이 지급된 후, 남은 금액 10,490,511은 작성자의 잔액에 더해지며, 이는 작성자의 커미션 몫과 분배되지 않은 보상을 반영합니다. 이를 통해 지분 비율에 기반한 정확하고 공정한 분배를 보장하며, 계산된 잔액을 예상 값과 비교하는 어설션(assertion)을 통해 결과를 검증합니다.

후보 정렬 ​

sort_proposed_candidates 함수는 공정하고 논리적인 순서를 보장하기 위해 세 가지 기준에 따라 후보 목록을 정렬합니다. 먼저 오프라인 상태에 따라 후보의 우선순위를 정하며, 오프라인으로 표시되지 않은 후보가 우선됩니다. 다음으로 후보의 본드와 총 스테이크를 합한 값을 고려하여 값이 더 높은 후보를 우선합니다. 그래도 동률인 경우에는 마지막 업데이트 타임스탬프를 사용하여 타임스탬프가 더 오래된 후보를 우선합니다. 이 정렬 로직은 활성 상태이고, 스테이킹이 충분하며, 경험이 많은 후보가 더 높은 순위를 갖도록 보장합니다.

정렬 후 업데이트된 목록은 블록체인 상태에 다시 저장됩니다. 정렬은 then_with 메서드를 사용하여 이러한 기준을 순차적으로 적용하며, 이전 기준으로 순서가 결정되지 않을 때만 다음 기준으로 넘어갑니다. 이 방식은 결정론적이고 공정한 순위를 보장하여 스테이킹이나 검증과 같은 작업을 위한 후보 선정을 최적화합니다.