검수요청.png검수요청.png

"스펙터"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (같이 보기)
 
(다른 사용자 한 명의 중간 판 하나는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''스펙터'''<!--스팩터-->(SPECTRE)<!--SpecTre-->는
+
'''스펙터'''<!--스팩터-->(SPECTRE)<!--SpecTre-->는 (SPECTRE; Serialization of Proof-of-work Events: Confirming Transactions via Recursive Elections)의 약자로, [[합의 알고리즘]]의 일종이다. 스펙터에서는 다수의 부모 블록들이 자식 블록들의 거래내역의 유효성을 검증함으로 채굴한다. 다수의 부모 블록들이 짧은 시간 내에 많은 블록들의 유효성을 검증하므로 높은 효율성을 가진다. [[작업증명]](PoW)에서는 가장 긴 체인이 블록으로 채택되지만, 스펙터에서는 가장 많은 자식 블록들을 가진 체인이 선택된다.
  
 
== 개요 ==
 
== 개요 ==
 +
쉽게 말해 [[비트코인]]에 [[사토시 나카모토]] 프로토콜이 있다면, [[하이콘]] 합의 유지에 사용되는 프로토콜은 스펙터인 것이다. 스펙터는 고스트 프로토콜 다음 컨센시스 프로토콜로써, 비트코인처럼 싱글 체인으로 블록을 연결하지 않고, 채굴과 동시에 기본적인 블록 검사 후에 바로 연결한다. 스펙터는 고스트 프로토콜 다음 컨센시스 프로토콜로써, 비트코인처럼 싱글 체인으로 블록을 연결하지 않고, 채굴과 동시에 기본적인 블록 검사 후에 바로 연결한다. 이때, 블록이 일정 방향 지그재그 형태로 연결되는데, 이것을 [[방향성 비순환 그래프]](DAG) 구조라고 한다. 방향성 비순환 그래프 형식의 체인구조에서는 한 개의 블록이 다른 여러 블록을 검증하기 때문에 트랜잭션의 처리속도를 향상시킬 수 있다. 또한, 스펙터는 채굴된 블록들을 검증할 때 투표를 진행한다. 이중지불 등으로 서로 상충되는 내용의 트랜잭션을 담고 있는 블록 간에 투표 과정을 거치게 되며, 이 과정에서 가장 긴 체인이 살아남게 된다. 기존의 방식과 같이 이전 블록의 해시값을 참조하지 않아도 안전하게 합의를 이룰 수 있음은 물론, 훨씬 빠른 속도로 합의를 이룰 수 있다. 즉, 하이콘 [[블록체인]] 네트워크에 스펙터를 적용하게 되면, 블록체인 기술의 한계라고 지적되어 온 트랜잭션 속도를 상용화 가능한 수준으로 끌어올릴 수 있는 것입이다. 또한, 이는 세계 최초 이기도 하며, 지금까지의 스펙터는 이스라엘 연구팀 요나탄 솜폴린스키, 아비브 조하르가 설계한 논문으로만 존재하였을 뿐, 실제로 구현된 사례가 없었다. 이를 하이콘 팀에서 세계 최초로 구현, 적용시키게 된 것이다. 현재 하이콘 팀은 기본적인 스펙터 컨센서스와 보팅 1차 개발을 완료한 상태이며, 동기화 및 네트워크 처리량 최적화 작업을 진행 중입니다. 또한, 테스트 넷을 오픈하여 다양한 피드백을 받고 의견을 수렴하여 안정화 단계를 거칠 예정이다.<ref>하이콘 공식 홈페이지 - https://hycon.io </ref>
  
== 특징 ==
+
== 등장배경 ==
 +
자체 블록체인 [[메인넷]]을 성공적으로 가동하고 있는 [[글로스퍼]] 하이콘은 최근 하이콘 [[프라이빗 블록체인]] 플랫폼에 추가된 스마트 컨트랙트 기능을 소개하고, 세계 최초 스펙터 알고리즘 기술 구현에 성공한 내용을 공개했다. 하이콘 프라이빗 블록체인 하이콘 엔터프라이즈 플랫폼에 추가되는 스마트 컨트랙트 기능은 엔터프라이즈 시장에서 발생하는 수요를 충족시키며 블록체인 상용화 서비스 시장을 정조준 하게 된다. 하이콘은 (to, from, amount, fee, nonce)의 데이터 항목으로 이뤄진 기존의 [[스마트 계약]] 구조에서, 하이콘 스마트 컨트랙트는 가변 길이의 데이터를 적재할 수 있는 데이터 항목도 추가했다. 이미 검증된 이더리움의 [[이더리움 가상머신]](EVM) 모듈을 사용하고 있기 때문에 이더리움의 스마트 컨트랙트 소스를 변경 없이 사용할 수 있는 장점이 있다.
 +
 
 +
또한, 스펙터 기술 구현 공개 영상에서는 비저벌 스펙터(VisibleSpectre) 프로젝트에서의 난점들과 해결 과정 및 네트워크에서 신규 블록이 생성되는 구조를 소개했다. 비트코인이나 이더리움과 같은 기존 암호화폐가 사용하고 있는 싱글 체인이 아닌, 방향성 비순환 그래프(DAG)를 사용하는 스펙터-하이콘 컨센서스 프로토콜은 싱글 체인의 제약을 벗어나기 위해 방향성 비순환 그래프 구조를 필요로 한다. 이 방향성 비순환 그래프 구조에서의 문제를 해결하기 위해 탄생한 것이 스펙터 프로토콜이다. 방향성 비순환 그래프구조는 하나의 부모 블록 상에서만 생성되어야 한다는 구조적 제약에서 벗어나 블록 생성을 상대적으로 빠르게 할 수 있다. 김태원 글로스퍼 하이콘 대표는 "하이콘은 프라이빗 블록체인 플랫폼 출시뿐만 아니라, 동시에 스마트 컨트랙트 기능을 탑재했으며, 세계 최초 스펙터 기술 구현을 성공시켰고, 현재는 결과를 완성시키는 단계에 진입했다"고 설명했다.<ref>조중환 기자, 〈[http://www.epnc.co.kr/news/articleView.html?idxno=82390 하이콘, 최초 구현 스펙터 기술공개∙프라이빗 블록체인 스마트 컨트랙트 본격 가동]〉, 《테크월드》, 2019-02-11 </ref>
  
 
== 활용 ==
 
== 활용 ==
 +
=== 하이콘 ===
 +
[[파일:스펙터 합의알고리즘 0.jpg|썸네일|300픽셀|스팩터 합의 알고리즘 설명1]]
 +
[[파일:스펙터 합의알고리즘 1.jpg|썸네일|400픽셀|스팩터 합의 알고리즘 설명2]]
 +
[[파일:스펙터 합의알고리즘 2.jpg|썸네일|400픽셀|스팩터 합의 알고리즘 설명3]]
 +
[[파일:스펙터 합의알고리즘 3.PNG|썸네일|400픽셀|스팩터 합의 알고리즘 설명4]]
 +
 +
==== 방향성 비순환 그래프 체인 ====
 +
[[블록체인]]보다 방향성 비순환 그래프 체인이 유리한 이유는 블록 생성 간격을 줄여 [[트랜잭션]] 속도를 높여주기 때문이다. 기존 블록체인에서 새로 만들어진 블록은 이전 블록의 해시값을 참조하여 체인 끝에 연결되는 반면, 방향성 비순환 그래프 체인에 추가되는 새 블록은 방향성 비순환 그래프의 끝부분을 참조한다. 이에 따라 블록을 차례로 검증하는 기존 블록체인의 틀을 깨고, 방향성 비순환 그래프에서는 수많은 [[노드]]들이 분산되어 각자 검증을 동시에 진행한다. 여러 선행 블록이 존재하므로 새 블록이 동시에 추가될 수 있고, 채굴자는 자신의 블록이 고아 블록이 될 걱정 없이 채굴 보상을 거두어들일 수 있다. 즉, 방향성 비순환 그래프 구조에서는 블록을 거부하는 규칙이 구조적으로 존재할 수 없기 때문에 모든 블록을 허용한다. 이 방식으로 빠른 트랜잭션 처리가 가능하다. 방향성 비순환 그래프는 [[아이오타]]와 [[헤데라 해시그래프]]의 [[탱글]]과 같은 여러 방향으로 블록 생성이 가능한 기술로, 비자카드의 3,000TPS 수준의 [[트랜잭션]] 속도를 지원한다. 문제는 노드가 다른 곳에 발표된 트랜잭션을 다시 발표하여 이중지불을 유발할 때 발생한다. 그러나, 스펙터 합의 알고리즘을 사용하면 고아 블록이 생기지 않는 선에서 어느 트랜잭션을 거부할지에 대한 합의를 이끌어낼 수 있다. 즉, 방향성 비순환 그래프 구조에서의 문제를 해결하기 위해 탄생한 것이 스펙터 합의 알고리즘이다.<ref name="하백">하이콘 백서 - https://hycon.io/wp-content/uploads/2018/08/whitepaper.1.2.2_kr.pdf</ref>
 +
 +
==== 스팩터 합의 알고리즘 ====
 +
스펙터는 블록들 사이의 투표라는 방법을 해결책으로 제시했다. 즉, 스펙터는 블록 간의 순서를 정하기 위해 블록 사이에 투표 알고리즘을 적용함으로써 블록체인을 방향성 비순환 그래프 체인의 형태로 일반화한다. 스펙터 알고리즘을 사용한 블록체인은 블록의 생성속도를 높여도 보안성이 일정 수준 이상으로 유지된다. 이에 따라 스펙터 합의 알고리즘을 통해 안정성과 확장성을 동시에 해결할 수 있다. 다음은 이중지불 사례이다.
 +
 +
오른쪽 그림의 네모들은 모두 블록이다. 노란색 블록 <math>A</math>는 트랜색션 <math>t1</math>을, 빨간색 블록 <math>B</math>는 <math>t1</math>과 충돌하는 트랜잭션 <math>t2</math>를 담고 있다. 이러한 이중지불 문제를 스펙터 알고리즘은 해결할 수 있는데, 이는 두 블록의 <math>past</math>와 <math>future</math>가 다르기 때문이다. <math>past</math>와 <math>future</math>는 스펙터 투표 과정에 주목해야 할 중요한 용어이다. <math>past(x)</math>는 <math>x</math>로부터 도달 가능한 블록을, <math>future(x)</math>는 선행 블록 <math>x</math>를 참조하는 블록을 가리킨다. 초기에 블록 <math>A</math>와 블록 <math>B</math>가 블록 5와 거의 동시에 생성되는 경우 다음과 같은 양상을 띤다. 하지만 이 단계에서는 시스템에서 이중지불을 인식하지 못한다. 충돌하는 두 블록을 모두 참조하는 후속 블록이 생성되지 않았기 때문이다. 그러나 방향성 비순환 그래프의 구조가 발전하고 블록이 추가되면 이중지불이 발견되고, 방향성 비순환 그래프의 구조가 분석되어 어느 블록이 선행하는지를 결정한다. 블록 12는 생성된 블록 중 <math>A</math>와 <math>B</math> 사이의 이중 지불을 감지하는 첫 블록이다. 규칙에 따라 투표수는 다음과 같이 계산될 수 있다. 블록 '''(6, 7, 8)''' 모두 블록 <math>B</math>가 <math>past</math>에 속하지 않기 때문에 블록 <math>A</math>에 투표한다. 동일한 이유로 블록 '''(9, 10, 11)'''은 블록 <math>B</math>에 투표한다.
 +
 +
블록 12는 <math>past(12)</math>의 재귀 호출을 기반으로 투표한다. 블록 10과 11은 <math>past(12)</math>에 속하지 않음으로 블록 12의 투표를 결정할 때 고려되지 않는다. 블록 1부터 5까지는 <math>future(A)</math> 또는 <math>future(B)</math>에 속하지 않음으로 <math>future(1)</math>부터 <math>future(5)</math>까지의 블록 대다수와 동일한 투표를 하게 된다. 이 재귀 투표의 경우, <math>future(1)</math>부터 <math>future(5)</math>까지의 블록들이 블록 <math>A</math>에 투표를 더 많이 했으므로 블록 1부터 5는 블록 <math>A</math>에 투표하게 된다. 블록 12의 과거, 즉 <math>past(12)</math>에서는 블록 <math>A</math>에 9표, 블록 <math>B</math>에 2표를 투표했으므로 블록 12는 블록 <math>A</math>에 투표한다. 만일 투표수가 동점이 되면 블록 12가 결정적으로 그 동점을 깨서 투표에 참여하는 노드 모두 블록 12의 투표에 동의하도록 한다. 블록 12의 투표를 결정하는 블록은 모두 <math>past(12)</math>에 속한 블록이므로 블록 12의 표는 절대 바뀌지 않는다. 이후, 방향성 비순환 그래프에서의 투표 과정은 남은 블록의 <math>future</math> 블록을 기반으로 진행한다. 블록 12의 투표가 확정되면 블록 5는 블록 <math>A</math>에 투표하게 되는데, 이는 블록 '''(7, 8, 12)'''에 의한 투표가 블록 9와 1에 의한 투표수를 넘어서기 때문이다. 블록 4는 블록 <math>(A, 5, 6, 7, 8, 12)</math> 에서 <math>A</math>에 대한 투표를, 블록 <math>(B, 9, 10, 11)</math>에서 <math>B</math>에 대해 투표를 확인한 후 블록 <math>A</math>에 투표한다. 블록 '''(3, 2, 1)'''도 마찬가지로 모두 블록 <math>A</math>에 투표한다. 이러한 투표 과정을 거쳐 최종적으로 블록 <math>A</math>에 10표, 블록 <math>B</math>에 4표라는 결과가 도출된다.
 +
 +
스펙터의 흥미로운 특성은, 특히 합의알고리즘 설명(4)와 같이 단순한 사례의 경우, 여타 블록체인 기술처럼 가장긴 체인을 선택한다는 것이다. 블록 <math>A</math>를 통과하여 블록 1부터 블록 12까지 도달하는 경로와 <math>B</math>를 통과하는 경로를 보면, <math>1 \rarr A \rarr 12</math> 경로가 <math>1 \rarr B \rarr 12</math> 경로보다 길다는 것을 알 수 있다. 즉, 가장 긴 체인이 살아남는 것이다.<ref name="하백"></ref>
 +
 +
* '''투표규칙'''
 +
: 스펙터의 투표 규칙 논의를 위해 투표 과정을 시각적으로 다룰 필요가 있다. 한 가지 주목해야 하는 사실은 어떤 투표도 노드 사이에서 전달되지 않으며, 각 노드가 명시적으로 투표를 행사할 필요도 없다는 점이다. 오히려 투표는 블록에서 이루어지며 투표 방식은 방향성 비순환 그래프 구조를 보면 알 수 있다. 스펙터 투표 과정에 사용되는 기준은 다음과 같다. 주목해야 할 중요한 용어는 <math>past(x)</math>와 <math>future(x)</math>인데, <math>past(x)</math>는 <math>x</math>로부터 도달 가능한 블록을, <math>future(x)</math>는 선행 블록 <math>x</math>를 참조하는 블록을 가리킨다. 예를 들어, <math>x</math>가 <math>past(y)</math>에 속한다면, <math>y</math>는 <math>future(x)</math>에 속한다고 표현할 수 있다.
 +
 +
<math>y \isin future(x) \hArr x \isin past(y)</math>
 +
 +
: 또 한 가지 주목할 것은 <math>virtual(G)</math>로 표기되는 가상 블록의 <math>past</math>는 방향성 비순환 그래프 전체라는 것이다. <math>z</math>라는 블록이 블록 <math>x</math>, 블록 <math>y</math>에 투표할 때 아래와 같은 규칙이 적용된다.<ref name="하백"></ref>
 +
# <math>z</math>가 <math>future(x)</math>에 속하지만, <math>future(y)</math>에 속하지 않는다면 <math>z</math>는 블록 <math>x</math>에 투표한다.
 +
# <math>z</math>가 <math>future(x)</math> 및 <math>future(y)</math>에 속한다면 <math>z</math>와 <math>past</math>가 동일한 가상 블록의 투표에 근거하여 <math>z</math>의 투표가 재귀적으로 결정된다.
 +
# <math>z</math>가 <math>future(x)</math>와 <math>future(y)</math>에 둘 다 속하지 않는다면 <math>z</math>의 투표는 <math>future(z)</math>에 속한 모든 블록의 다수결 투표에 의해 결정된다.
 +
# <math>z</math>가 <math>past(virtual(G))</math>를 갖는 가상 블록이라면, 즉 <math>past(z) = DAG</math> 전체라면, <math>z</math>의 투표는 방향성 비순환 그래프의 다수결 투표에 의해 결정된다.
 +
# <math>z = x</math> 혹은 <math>z = y</math>인 경우, 만일 <math>y</math>가 <math>future(x)</math>에 속하지 않거나 <math>x</math>가 <math>future(y)</math>에 속하지 않는다면 <math>z</math>는 스스로에게 투표한다.
 +
 +
* '''인피니티 스텍터 구현 '''
 +
: 스펙터에서의 투표 과정에 자원이 상당히 소모되므로 구현은 신중하게 관리될 필요가 있다. 개발의 편의를 위해 초기 프로토타입은 파이썬으로 작성되었지만, 인피니티 스펙터 구현의 최종 버전은 데이터 구조 및 메모리 관리에 대한 완전한 제어가 유지되어 더 나은 성능을 제공할 수 있도록 [[C 언어]], [[C++]] 또는 [[러스트]](Rust)와 같은 언어로 작성될 것이다.<ref name="하백"></ref>
  
 
{{각주}}
 
{{각주}}
  
 
== 참고자료 ==
 
== 참고자료 ==
 +
* 하이콘 공식 홈페이지 - https://hycon.io
 +
* sobly tv, 〈[https://medium.com/@sobly/%EB%93%A4%EC%96%B4%EB%B3%B4%EC%A7%80-%EB%AA%BB%ED%95%9C-%ED%95%A9%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-6%EA%B0%80%EC%A7%80-e94943447578 들어보지 못한 합의 알고리즘 6가지: 블록 라티스, 스펙터, 무게증명 합의 알고리즘, 권한증명 알고리즘, 해시그래프, 비잔틴 장애허용 알고리즘이란?]〉, 《미디엄》, 2018-08-24
 +
* 조중환 기자, 〈[http://www.epnc.co.kr/news/articleView.html?idxno=82390 하이콘, 최초 구현 스펙터 기술공개∙프라이빗 블록체인 스마트 컨트랙트 본격 가동]〉, 《테크월드》, 2019-02-11
 +
* 하이콘 백서 - https://hycon.io/wp-content/uploads/2018/08/whitepaper.1.2.2_kr.pdf
  
 
== 같이 보기 ==
 
== 같이 보기 ==
 +
* [[하이콘]]
 +
* [[김태원]]
 +
* [[방향성 비순환 그래프]]
  
{{토막글}}
+
{{합의 알고리즘|검토 필요}}

2019년 11월 18일 (월) 16:04 기준 최신판

스펙터(SPECTRE)는 (SPECTRE; Serialization of Proof-of-work Events: Confirming Transactions via Recursive Elections)의 약자로, 합의 알고리즘의 일종이다. 스펙터에서는 다수의 부모 블록들이 자식 블록들의 거래내역의 유효성을 검증함으로 채굴한다. 다수의 부모 블록들이 짧은 시간 내에 많은 블록들의 유효성을 검증하므로 높은 효율성을 가진다. 작업증명(PoW)에서는 가장 긴 체인이 블록으로 채택되지만, 스펙터에서는 가장 많은 자식 블록들을 가진 체인이 선택된다.

개요[편집]

쉽게 말해 비트코인사토시 나카모토 프로토콜이 있다면, 하이콘 합의 유지에 사용되는 프로토콜은 스펙터인 것이다. 스펙터는 고스트 프로토콜 다음 컨센시스 프로토콜로써, 비트코인처럼 싱글 체인으로 블록을 연결하지 않고, 채굴과 동시에 기본적인 블록 검사 후에 바로 연결한다. 스펙터는 고스트 프로토콜 다음 컨센시스 프로토콜로써, 비트코인처럼 싱글 체인으로 블록을 연결하지 않고, 채굴과 동시에 기본적인 블록 검사 후에 바로 연결한다. 이때, 블록이 일정 방향 지그재그 형태로 연결되는데, 이것을 방향성 비순환 그래프(DAG) 구조라고 한다. 방향성 비순환 그래프 형식의 체인구조에서는 한 개의 블록이 다른 여러 블록을 검증하기 때문에 트랜잭션의 처리속도를 향상시킬 수 있다. 또한, 스펙터는 채굴된 블록들을 검증할 때 투표를 진행한다. 이중지불 등으로 서로 상충되는 내용의 트랜잭션을 담고 있는 블록 간에 투표 과정을 거치게 되며, 이 과정에서 가장 긴 체인이 살아남게 된다. 기존의 방식과 같이 이전 블록의 해시값을 참조하지 않아도 안전하게 합의를 이룰 수 있음은 물론, 훨씬 빠른 속도로 합의를 이룰 수 있다. 즉, 하이콘 블록체인 네트워크에 스펙터를 적용하게 되면, 블록체인 기술의 한계라고 지적되어 온 트랜잭션 속도를 상용화 가능한 수준으로 끌어올릴 수 있는 것입이다. 또한, 이는 세계 최초 이기도 하며, 지금까지의 스펙터는 이스라엘 연구팀 요나탄 솜폴린스키, 아비브 조하르가 설계한 논문으로만 존재하였을 뿐, 실제로 구현된 사례가 없었다. 이를 하이콘 팀에서 세계 최초로 구현, 적용시키게 된 것이다. 현재 하이콘 팀은 기본적인 스펙터 컨센서스와 보팅 1차 개발을 완료한 상태이며, 동기화 및 네트워크 처리량 최적화 작업을 진행 중입니다. 또한, 테스트 넷을 오픈하여 다양한 피드백을 받고 의견을 수렴하여 안정화 단계를 거칠 예정이다.[1]

등장배경[편집]

자체 블록체인 메인넷을 성공적으로 가동하고 있는 글로스퍼 하이콘은 최근 하이콘 프라이빗 블록체인 플랫폼에 추가된 스마트 컨트랙트 기능을 소개하고, 세계 최초 스펙터 알고리즘 기술 구현에 성공한 내용을 공개했다. 하이콘 프라이빗 블록체인 하이콘 엔터프라이즈 플랫폼에 추가되는 스마트 컨트랙트 기능은 엔터프라이즈 시장에서 발생하는 수요를 충족시키며 블록체인 상용화 서비스 시장을 정조준 하게 된다. 하이콘은 (to, from, amount, fee, nonce)의 데이터 항목으로 이뤄진 기존의 스마트 계약 구조에서, 하이콘 스마트 컨트랙트는 가변 길이의 데이터를 적재할 수 있는 데이터 항목도 추가했다. 이미 검증된 이더리움의 이더리움 가상머신(EVM) 모듈을 사용하고 있기 때문에 이더리움의 스마트 컨트랙트 소스를 변경 없이 사용할 수 있는 장점이 있다.

또한, 스펙터 기술 구현 공개 영상에서는 비저벌 스펙터(VisibleSpectre) 프로젝트에서의 난점들과 해결 과정 및 네트워크에서 신규 블록이 생성되는 구조를 소개했다. 비트코인이나 이더리움과 같은 기존 암호화폐가 사용하고 있는 싱글 체인이 아닌, 방향성 비순환 그래프(DAG)를 사용하는 스펙터-하이콘 컨센서스 프로토콜은 싱글 체인의 제약을 벗어나기 위해 방향성 비순환 그래프 구조를 필요로 한다. 이 방향성 비순환 그래프 구조에서의 문제를 해결하기 위해 탄생한 것이 스펙터 프로토콜이다. 방향성 비순환 그래프구조는 하나의 부모 블록 상에서만 생성되어야 한다는 구조적 제약에서 벗어나 블록 생성을 상대적으로 빠르게 할 수 있다. 김태원 글로스퍼 하이콘 대표는 "하이콘은 프라이빗 블록체인 플랫폼 출시뿐만 아니라, 동시에 스마트 컨트랙트 기능을 탑재했으며, 세계 최초 스펙터 기술 구현을 성공시켰고, 현재는 결과를 완성시키는 단계에 진입했다"고 설명했다.[2]

활용[편집]

하이콘[편집]

스팩터 합의 알고리즘 설명1
스팩터 합의 알고리즘 설명2
스팩터 합의 알고리즘 설명3
스팩터 합의 알고리즘 설명4

방향성 비순환 그래프 체인[편집]

블록체인보다 방향성 비순환 그래프 체인이 유리한 이유는 블록 생성 간격을 줄여 트랜잭션 속도를 높여주기 때문이다. 기존 블록체인에서 새로 만들어진 블록은 이전 블록의 해시값을 참조하여 체인 끝에 연결되는 반면, 방향성 비순환 그래프 체인에 추가되는 새 블록은 방향성 비순환 그래프의 끝부분을 참조한다. 이에 따라 블록을 차례로 검증하는 기존 블록체인의 틀을 깨고, 방향성 비순환 그래프에서는 수많은 노드들이 분산되어 각자 검증을 동시에 진행한다. 여러 선행 블록이 존재하므로 새 블록이 동시에 추가될 수 있고, 채굴자는 자신의 블록이 고아 블록이 될 걱정 없이 채굴 보상을 거두어들일 수 있다. 즉, 방향성 비순환 그래프 구조에서는 블록을 거부하는 규칙이 구조적으로 존재할 수 없기 때문에 모든 블록을 허용한다. 이 방식으로 빠른 트랜잭션 처리가 가능하다. 방향성 비순환 그래프는 아이오타헤데라 해시그래프탱글과 같은 여러 방향으로 블록 생성이 가능한 기술로, 비자카드의 3,000TPS 수준의 트랜잭션 속도를 지원한다. 문제는 노드가 다른 곳에 발표된 트랜잭션을 다시 발표하여 이중지불을 유발할 때 발생한다. 그러나, 스펙터 합의 알고리즘을 사용하면 고아 블록이 생기지 않는 선에서 어느 트랜잭션을 거부할지에 대한 합의를 이끌어낼 수 있다. 즉, 방향성 비순환 그래프 구조에서의 문제를 해결하기 위해 탄생한 것이 스펙터 합의 알고리즘이다.[3]

스팩터 합의 알고리즘[편집]

스펙터는 블록들 사이의 투표라는 방법을 해결책으로 제시했다. 즉, 스펙터는 블록 간의 순서를 정하기 위해 블록 사이에 투표 알고리즘을 적용함으로써 블록체인을 방향성 비순환 그래프 체인의 형태로 일반화한다. 스펙터 알고리즘을 사용한 블록체인은 블록의 생성속도를 높여도 보안성이 일정 수준 이상으로 유지된다. 이에 따라 스펙터 합의 알고리즘을 통해 안정성과 확장성을 동시에 해결할 수 있다. 다음은 이중지불 사례이다.

오른쪽 그림의 네모들은 모두 블록이다. 노란색 블록 는 트랜색션 을, 빨간색 블록 과 충돌하는 트랜잭션 를 담고 있다. 이러한 이중지불 문제를 스펙터 알고리즘은 해결할 수 있는데, 이는 두 블록의 가 다르기 때문이다. 는 스펙터 투표 과정에 주목해야 할 중요한 용어이다. 로부터 도달 가능한 블록을, 는 선행 블록 를 참조하는 블록을 가리킨다. 초기에 블록 와 블록 가 블록 5와 거의 동시에 생성되는 경우 다음과 같은 양상을 띤다. 하지만 이 단계에서는 시스템에서 이중지불을 인식하지 못한다. 충돌하는 두 블록을 모두 참조하는 후속 블록이 생성되지 않았기 때문이다. 그러나 방향성 비순환 그래프의 구조가 발전하고 블록이 추가되면 이중지불이 발견되고, 방향성 비순환 그래프의 구조가 분석되어 어느 블록이 선행하는지를 결정한다. 블록 12는 생성된 블록 중 사이의 이중 지불을 감지하는 첫 블록이다. 규칙에 따라 투표수는 다음과 같이 계산될 수 있다. 블록 (6, 7, 8) 모두 블록 에 속하지 않기 때문에 블록 에 투표한다. 동일한 이유로 블록 (9, 10, 11)은 블록 에 투표한다.

블록 12는 의 재귀 호출을 기반으로 투표한다. 블록 10과 11은 에 속하지 않음으로 블록 12의 투표를 결정할 때 고려되지 않는다. 블록 1부터 5까지는 또는 에 속하지 않음으로 부터 까지의 블록 대다수와 동일한 투표를 하게 된다. 이 재귀 투표의 경우, 부터 까지의 블록들이 블록 에 투표를 더 많이 했으므로 블록 1부터 5는 블록 에 투표하게 된다. 블록 12의 과거, 즉 에서는 블록 에 9표, 블록 에 2표를 투표했으므로 블록 12는 블록 에 투표한다. 만일 투표수가 동점이 되면 블록 12가 결정적으로 그 동점을 깨서 투표에 참여하는 노드 모두 블록 12의 투표에 동의하도록 한다. 블록 12의 투표를 결정하는 블록은 모두 에 속한 블록이므로 블록 12의 표는 절대 바뀌지 않는다. 이후, 방향성 비순환 그래프에서의 투표 과정은 남은 블록의 블록을 기반으로 진행한다. 블록 12의 투표가 확정되면 블록 5는 블록 에 투표하게 되는데, 이는 블록 (7, 8, 12)에 의한 투표가 블록 9와 1에 의한 투표수를 넘어서기 때문이다. 블록 4는 블록 에서 에 대한 투표를, 블록 에서 에 대해 투표를 확인한 후 블록 에 투표한다. 블록 (3, 2, 1)도 마찬가지로 모두 블록 에 투표한다. 이러한 투표 과정을 거쳐 최종적으로 블록 에 10표, 블록 에 4표라는 결과가 도출된다.

스펙터의 흥미로운 특성은, 특히 합의알고리즘 설명(4)와 같이 단순한 사례의 경우, 여타 블록체인 기술처럼 가장긴 체인을 선택한다는 것이다. 블록 를 통과하여 블록 1부터 블록 12까지 도달하는 경로와 를 통과하는 경로를 보면, 경로가 경로보다 길다는 것을 알 수 있다. 즉, 가장 긴 체인이 살아남는 것이다.[3]

  • 투표규칙
스펙터의 투표 규칙 논의를 위해 투표 과정을 시각적으로 다룰 필요가 있다. 한 가지 주목해야 하는 사실은 어떤 투표도 노드 사이에서 전달되지 않으며, 각 노드가 명시적으로 투표를 행사할 필요도 없다는 점이다. 오히려 투표는 블록에서 이루어지며 투표 방식은 방향성 비순환 그래프 구조를 보면 알 수 있다. 스펙터 투표 과정에 사용되는 기준은 다음과 같다. 주목해야 할 중요한 용어는 인데, 로부터 도달 가능한 블록을, 는 선행 블록 를 참조하는 블록을 가리킨다. 예를 들어, 에 속한다면, 에 속한다고 표현할 수 있다.

또 한 가지 주목할 것은 로 표기되는 가상 블록의 는 방향성 비순환 그래프 전체라는 것이다. 라는 블록이 블록 , 블록 에 투표할 때 아래와 같은 규칙이 적용된다.[3]
  1. 에 속하지만, 에 속하지 않는다면 는 블록 에 투표한다.
  2. 에 속한다면 가 동일한 가상 블록의 투표에 근거하여 의 투표가 재귀적으로 결정된다.
  3. 에 둘 다 속하지 않는다면 의 투표는 에 속한 모든 블록의 다수결 투표에 의해 결정된다.
  4. 를 갖는 가상 블록이라면, 즉 전체라면, 의 투표는 방향성 비순환 그래프의 다수결 투표에 의해 결정된다.
  5. 혹은 인 경우, 만일 에 속하지 않거나 에 속하지 않는다면 는 스스로에게 투표한다.
  • 인피니티 스텍터 구현
스펙터에서의 투표 과정에 자원이 상당히 소모되므로 구현은 신중하게 관리될 필요가 있다. 개발의 편의를 위해 초기 프로토타입은 파이썬으로 작성되었지만, 인피니티 스펙터 구현의 최종 버전은 데이터 구조 및 메모리 관리에 대한 완전한 제어가 유지되어 더 나은 성능을 제공할 수 있도록 C 언어, C++ 또는 러스트(Rust)와 같은 언어로 작성될 것이다.[3]

각주[편집]

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 스펙터 문서는 합의 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.