
편집자 주: 이 기사의 출처는PolkaWorld(ID:gh_6c4c2038ddba), 승인을 받아 Odaily에서 복제했습니다.
), 승인을 받아 Odaily에서 복제했습니다.
블록체인 노드는 합의 엔진을 사용하여 블록체인 상태에 대한 합의에 도달합니다. 이 기사에서는 블록체인 시스템에서 합의의 기본 원칙, 합의가 Substrate 프레임워크의 런타임과 상호 작용하는 방법 및 프레임워크에서 사용할 수 있는 합의 엔진을 소개합니다.
mdnice 편집기
상태 머신과 충돌
블록체인 런타임은 상태 시스템입니다[1]. 현재 상태에서 미래 상태로 전환할 수 있는 일부 내부 상태 및 상태 전환 기능이 있습니다. 대부분의 런타임에서 일부 상태에는 여러 미래 상태로의 유효한 전환이 있지만 하나의 전환을 선택해야 합니다.
블록체인은 다음에 동의해야 합니다.
"제네시스"라고 하는 일부 초기 상태
최종(현재) 상태
전환 후 결과 상태에 동의하려면 블록체인의 상태 전환 기능 [2]의 모든 작업이 결정적이어야 합니다.
mdnice 편집기
충돌 배제
중앙 집중식 시스템에서 중앙 집중식 기관은 상태 전환을 보는 순서대로 기록하여 상호 배타적인 대안 중에서 선택하고 충돌이 발생할 경우 경쟁하는 대안 중 첫 번째 대안을 선택합니다. 분산형 시스템에서 노드는 다른 순서로 트랜잭션을 볼 수 있으므로 트랜잭션을 제외하려면 더 세분화된 방법을 사용해야 합니다. 문제를 더욱 복잡하게 만드는 것은 블록체인 네트워크가 내결함성을 갖추기 위해 노력한다는 것입니다. 즉, 일부 참가자가 규칙을 따르지 않더라도 시스템은 합의 데이터를 계속 제공해야 합니다.
Aura (Round Robin)
Substrate는 여러 블록 생성 알고리즘을 제공하며 사용자가 직접 생성할 수도 있습니다.
PoW
BABE(슬롯 기반)
mdnice 편집기
포크 선택 규칙
포크 선택 규칙은 블록체인을 선택하고 "최상의" 체인을 선택하여 확장해야 하는 체인을 선택하는 알고리즘입니다. Substrate는 SelectChain으로 이 개념을 보여줍니다.
Substrate를 사용하면 사용자 정의 포크 선택 규칙을 작성하거나 기성품을 사용할 수 있습니다. 예를 들어:
가장 긴 체인 규칙
가장 긴 체인 규칙 간단히 말해서 최고의 체인은 가장 긴 체인입니다. Substrate는 LongestChain 구조와 함께 이 체인 선택 규칙을 제공합니다. GRANDPA는 투표에 가장 긴 체인 규칙을 사용합니다.
고스트 규칙
GHOST 규칙은 제네시스 블록에서 시작하여 가장 많은 블록이 구축된 분기를 재귀적으로 선택하여 각 분기를 해결한다는 것입니다.
블록 생산
PoW
블록체인 네트워크의 특정 노드는 작성이라는 프로세스인 새 블록을 생성할 수 있습니다. 정확히 어떤 노드가 블록을 작성할 수 있는지는 사용하는 합의 엔진에 따라 다릅니다. 중앙 집중식 네트워크에서는 단일 노드가 모든 블록을 쓸 수 있는 반면, 완전히 무허가 네트워크에서는 알고리즘이 각 높이에서 블록의 생산자를 선택해야 합니다.
Bitcoin과 같은 PoW 시스템에서 모든 노드는 계산 집약적인 문제를 해결하는 한 언제든지 블록을 생성할 수 있습니다. 이 문제를 해결하려면 CPU 시간이 필요하므로 채굴자는 컴퓨팅 리소스에 비례하여 블록을 생성할 수 있습니다.
Substrate는 PoW 블록 생산 엔진을 제공합니다.
슬롯
슬롯 기반 합의 알고리즘에는 블록을 생성할 수 있는 알려진 검증자 세트가 있어야 합니다. 시간은 서로 다른 슬롯으로 나뉘며 각 슬롯에서는 일부 유효성 검사기만 블록을 생성할 수 있습니다. 각 슬롯 내에서 유효성 검사기가 블록을 작성할 수 있는 세부 정보는 엔진에 따라 다릅니다. Substrate는 슬롯 기반 블록 생산 엔진인 Aura와 Babe를 제공합니다.
mdnice 편집기
최종성
모든 시스템의 사용자는 트랜잭션이 완료되는 시점을 알고 싶어하며 블록체인도 예외는 아닙니다. 일부 기존 시스템에서는 영수증이 전달되거나 문서에 서명할 때 최종성이 발생합니다.
지금까지 설명한 블록 생성 방식과 포크 선택 규칙을 사용하면 트랜잭션이 완전히 완료되지 않습니다. 더 긴(또는 더 무거운) 체인이 나타나 트랜잭션을 복원할 가능성이 항상 있습니다. 그러나 특정 블록에 더 많은 블록이 구축될수록 되돌릴 가능성이 줄어듭니다. 이러한 방식으로 블록 생성 및 적절한 포크 선택 규칙은 확률적 최종성을 제공합니다.
일부 합의 시스템은 블록 생성과 최종성을 연결합니다. 예를 들어 최종성은 블록 생성 프로세스의 일부이며 블록 N이 완료될 때까지 새로운 블록 N+1을 생성할 수 없습니다. 그러나 Substrate는 이 두 프로세스를 분리하고 확률적 최종성을 가진 모든 블록 엔진을 단독으로 사용하거나 결정적 최종성을 위해 최종성 가젯과 결합할 수 있습니다.
파이널리티 가젯을 사용하는 시스템에서는 파이널리티 게임의 결과를 고려하여 포크 선택 규칙을 수정해야 합니다. 예를 들어 노드는 가장 긴 체인의 주기를 선택하는 대신 가장 최근에 완료된 블록을 포함하는 가장 긴 체인을 선택합니다.
기판의 합의
Aura
mdnice 편집기
BABE
Aura[4]는 슬롯 기반 블록 생성 메커니즘을 제공합니다. Aura에서는 알려진 권한 집합이 차례로 블록을 생성합니다.
mdnice 편집기
여러 검증자가 동일한 슬롯에서 블록을 생성할 수 있기 때문에 좋은 네트워크 조건에서도 포크가 Aura보다 BABE에서 더 일반적입니다.
PoW
mdnice 편집기
GRANDPA
mdnice 편집기
GRANDPA[6]는 블록 완결성을 제공합니다. BABE와 같이 알려진 가중치의 권한 집합이 있습니다. 그러나 GRANDPA는 블록을 생성하지 않고 생산 엔진에서 생성된 블록의 "가십"만 듣습니다(예: 위의 세 가지). GRANDPA 유효성 검사기는 온 블록이 아닌 온 체인에서 투표합니다. 즉, 그들은 "최고"라고 생각하는 블록에 투표하고 그들의 투표는 이전의 모든 블록에 전이적으로 적용됩니다. GRANDPA 당국의 2/3 이상이 특정 블록에 투표하면 최종 블록으로 간주됩니다.
mdnice 편집기
이러한 합의 기능을 수용하기 위해 Substrate에는 노드 외부(합의가 상주하는 곳)에서 런타임으로 또는 그 반대로 전달되는 메시지인 DigestItem이라는 개념이 있습니다.
더 알아보기
mdnice 편집기
BABE Research[7]
GRANDPA Research[8]
더 알아보기
GRANDPA를 포함한 모든 결정적 완결성 알고리즘에는 최소 2f + 1개의 비결함이 있는 노드가 필요합니다. 여기서 f는 결함이 있거나 악의적인 노드의 수입니다. 이 임계값의 출처와 이것이 이상적인 이유에 대한 자세한 내용은 결함 사례[9]의 합의에 대한 중요한 문서 또는 Wikipedia: Byzantine Errors[10]에서 읽을 수 있습니다.
모든 합의 프로토콜이 단일 표준 체인을 정의하는 것은 아닙니다. 일부 프로토콜은 부모 블록이 동일한 두 블록에 충돌하는 상태 변경이 없을 때 방향성 비순환 그래프[11](DAG)의 유효성을 검사합니다.