Back to list
Obelisk: 스카이코인 합의 알고리즘 | 정보 페이지
합의 알고리즘 핵심내용
왜 합의 알고리즘인가?
스카이코인 합의 알고리즘( “Obelisk”)은 모든 네트워크 노드에 걸쳐서 스카이코인 블록 체인 상태를 동기화합니다. 결과적으로 일관된 회계 처리가 이루어지는데, 즉, 주어진 공개키(또는 주소)에 대한 잔고를 계산할 때, 계산을 수행한 각 노드에서 동일한 값이 산출됩니다.
높은 확장성과 낮은 에너지 소비
설계 상, 알고리즘은 작업-증명방식에 비해 확장 가능하며 연산 비용이 저렴한 대안이며, 게다가 합의 알고리즘과 블록-생성을 저렴한 가격과 낮은 에너지 소비를 가진 하드웨어에서 모두 실행할 수 있으므로, 따라서 암호화폐 네트워크를 구축하는 것은 네트워크 가능한 중앙 집중화 시도보다 보다 강력합니다.(예. 일반 대중에게 알맞는 노드를 통해)
치밀한 협동 공격
우리의 합의 알고리즘은(i) 빠르게 적용되며, (ii) 최소한의 네트워크 트래픽을 필요로 하고, 그리고 (iii) 악성노드로 잘 구성된 네트워크에 의한 대규모 협동 공격을 견딜 수 있습니다. 이 알고리즘은 비-반복, 빠른, 최근접 이웃 노드 연결만으로 개별 네트워크를 실행할 수 있습니다. (예. 메쉬 네트워크), 그리고 연결 그래프의 사이클 주기가 활발합니다. (예. DAG-타입 연결은 필요하지 않습니다.)
51-퍼센트 공격
제한된 상황에서, 알고리즘의 초기 버전은 이 공격을 받을 수 있습니다. 특히, 대다수의 변조 또는 악성 노드는 프로토콜 호환 및 UTXO-호환 후보 블록을 브로드캐스트하고, 이러한 블록이 합의를 이룹니다. 그러나, 블록이 합의 심사에 참여할 기회를 갖기 전에 모든 비-호환 블록은 알고리즘에(변조되지 않은) 의해 삭제됩니다.
합의 노드는 미확인 노드(즉, 신뢰할 수 없는 공개키로 서명된)와 관련된 합의-관련 메시지가 무시되는 방식으로 Web-of-Trust 개념을 선택적으로 사용할 수 있습니다.
Web-of-Trust 모드가 활성화되면 대다수의 악성 컨센서스 노드가 (a) 블록 체인 포크를 발생시키거나 (b) 거의 영향을 미치지 못할 합의 프로세스를 중단시키기 위해서 실행되는데, 많은 수의 주요 Web-of-Trust 멤버들이 무의식적으로 그들의 신뢰할 수 있는 노드의 로컬 노드에 악성 노드를 포함시키지 않는 이상 거의 영향을 미치지 못합니다.
숨겨진 IP 주소
노드는 그들의 암호 공개키로 설명됩니다. 노드의 IP주소는 노드가 직접 연결된 노드에만 알려집니다.
시간 동기화의 독립성
알고리즘은 “벽시계”(예. 달력 날짜 / 시간)를 사용하지 않습니다. 대신, 유효성이 검증된 합의- 및 블록 체인- 관련 메시지에서 추출한 블록 시퀀스 번호를 사용하여 노드의 내부 시간을 계산합니다. 비공식적으로 “블록 시계"라고 할 수 있습니다.
두 가지 유형의 노드 : 합의 및 블록-생성
합의 노드는 하나 또는 몇 개의 블록-생성 노드로부터 입력을 받습니다. 합의 및 블록-생성을 위핸 알고리즘은 분리되어 있지만, 둘 다 동일한 데이터 구조에서 작동합니다. 우리는 합의 알고리즘을 이해하고 그것이 나머지 시스템과 어떻게 통합되는지 알기 위해 블록-생성을 설명합니다.
두 가지 유형의 노드는 항상 권한 적절성 및 불법 행위에 대해 감시합니다. 불법 또는 유효하지 않은 메시지가 감지되고, 삭제되며 전파되지 않습니다; 의심스러운 활동이 발견된 피어 노드는 연결이 끊어지며, 그들의 공개키는 차단됩니다.
스카이코인 합의 알고리즘 작동 방식
단지 설명을 위해서, 다음을 가정합니다. (i) 각 노드가 블록-생성자이며 합의 참가자이고, (ii) 신뢰할 수 없는 노드에 의해 생성된 합의 관련 메시지가 허용되며, 즉, web-of-trust가 수행됩니다. 스카이코인 GitHub 저장소에서 전체 실행(이러한 간단한 가정없이)이 가능할 것입니다. 시뮬레이션 결과 및 자세한 사항은, 하나의 합의 시험 예제 도표를 참조하십시오. [1]. 스카이코인 알고리즘과는 달리, 신뢰 관계를 갖는 네트워크의 시뮬레이션은 [2]에서 찾을 수 있습니다. 스카이코인 합의 알고리즘에 대한 설명은 다음과 같습니다.
-
블록 생성. 각 블록-생성 노드는 새 트랜잭션을 수집하고 원하는 시퀀스 번호의 UTXO와 대조하여 해당 트랜잭션을 새 블록으로 패키지화 한 다음 해당 블록을 네트워크로 브로드 캐스트합니다.
-
블록 수집. 각 합의 노드는 블록 생성자가 생성한 블록을 수집하여, 블록의 시퀀스 번호가 입력된 컨테이너(블록 체인과 별도)에 배치합니다.
-
승리한 블록을 선택합니다.. 각 합의 노드는, 충분히 많은 수의1 후보 블록을 받거나 다른 조건을 충족 시, 블록-생성자의 최대 숫자에 의해 만들어진 블록을 찾습니다. 동점은 결정론적으로 해결됩니다. 이러한 블록은 “로컬 승자” 2 라고 표시 되며 로컬 블록 체인에 추가됩니다. 로컬 승자의 블록 시퀀스 번호에 해당하는 키 - 값 쌍이 삭제되므로 저장소가 비워집니다. 로컬 우승자의 해시 코드가 브로드캐스트/알려집니다.
-
확인 단계 각 노드는 다른 노드가 알려준 로컬 승자에 대한 통계를 보관합니다. 로컬 우승자가 모든 노드 또는 대부분의 노드3 에서 알려지면, 노드는 특정 시퀀스 번호에 대한 전체 우승자를 결정합니다. 전체 승자가 로컬 승자라면, 노드는 위와 같이 계속 작동합니다. 그렇지 않으면 노드는 외부 데이터 및 로컬 로그를 기반으로 (a) 네트워크 자체와 다시 동기화되거나 (b) 합의 및/또는 블록 작성에서 탈락하거나, (c) 블록 체인을 유지하고 비상 정지를 요청하게 됩니다.
참고 문헌
[1] johnstuartmill et al. 암호화폐 네트워크를 위한 분산된 합의 알고리즘 https://github.com/skycoin/whitepapers/blob/master/whitepaper_skycoin_consensus_v01_jsm.pdf 2016
[2] Houwu Chen and Jiwu Shu. 스카이 : P2P네트워크를 통한 합의를 위한 다양한 프레임워크 및 모델 https://github.com/skycoin/whitepapers/blob/master/Sky-%20Opinion%20Dynamics%20Based%20Consensus%20for%20P2P%20Network%20with%20Trust%20Relationships.pdf 201?
더 읽기: