Skip to content

ninanoo/PoR---Korean-Version

Repository files navigation

※ The English version of this article is here.
※ 변경 사항이나 추가되는 이슈들을 페이스북에도 올리고 있습니다.


This algorithm is a methodology for

      A New Distributed Consensus and Distributed Ledger Technology

rather than just a proof of what.



이 알고리즘은 작업증명에 부족한 부분들을 개선하기 위해 연구되었습니다.


지금에 블록체인은 노력에 대한 보상이라는 사회공학적 기법으로부터 정당한 과반수의 참여자를 보장받고 이 알고리즘도 그 틀 안에 있습니다.
그러나 이 알고리즘은 노드의 연산능력에 의한 작업량을 합의를 위한 선택의 기준으로 사용하지 않습니다.
작업증명에서는 각 노드에서의 반복 연산 수행을 통해 가장 관련성이 큰 하나의 블록이 만들어지나 이 알고리즘에서는 각 노드에서의 블록의 관련성이 유일하게 정하여지고 이 모든 블록 중 관련성이 가장 큰 하나의 블록을 전체 네트워크에서 찾습니다.
작업증명에서의 노력은 단일 노드에서의 높은 연산 수행 능력이나 이 알고리즘에서의 노력은 단일 노드가 체인에 대한 동기화 상태를 항상 높은 수준으로 유지하는 능력이고 이는 확률적입니다.
이를 위해 노드는 언제나 네트워크에 연결되어 있어야 하고 전송되는 프로토콜 패킷들을 성실히 처리하여야 합니다.

작업증명에서 관련성이 가장 큰 블록은 0에 가장 가까운 해시값을 갖는 블록이나 이 알고리즘에서 관련성이 가장 큰 블록은 바로 이전 블록의 해시값에 가장 가까운 해시값을 갖는 블록입니다.
이 알고리즘에서의 관련성은 결정적이면서도 난수에 기반하여 패턴을 갖지 않는 값을 사용합니다.
그러나 실제 구현에서는 0에 가장 가까운 해시값이 선택의 기준으로 사용될 수 있고 이를 통해 작업증명 체인과의 연결점을 찾을 수도 있습니다.

이 알고리즘도 작업증명과 같은 퍼블릭 블록체인으로 운용되는 것을 전제로 설계되었습니다.
그러나 중앙을 통한 새로운 소유정보의 생성 발급이나 이미 등록되어 보유하고 있는 정보를 소유정보로 사용함으로써 허가형 블록체인으로 운용될 수도 있습니다.
체인에 요구되는 성능이나 보안성 등에 맞추어 동작 관련 양적인 속성들이 동적으로 조절되고 합의에 참여하는 전체 노드들의 수나 노드 간의 전송시간과 같은 네트워크 상태와 관련된 속성들이 체인을 통해 확인될 수 있습니다.
이러한 특성들을 이용하여 폐쇄형이나 하이브리드 형태로 운용될 수도 있습니다.



이 알고리즘은 속도와 확장성 그리고 지역화를 해결하고 발행된 인증의 즉시성을 보장합니다.


원장에 대한 인증이 실린 블록들로 구성된 하나의 체인이 운용되고 이 체인은 작업증명의 체인과 기능이 같습니다.
그러나 이 알고리즘에서는 아직 인증을 발행하지는 않았으나 그럴 자격을 갖춘 블록들로 구성된 또 하나의 체인이 운용됩니다.
이 후보블록들로 구성된 체인의 첫 번째 블록에 의해 다음 원장에 대한 인증이 발행됩니다.
이를 통해 발행된 인증의 즉시성이 제공되고 발행의 속도가 보장됩니다.

작업증명 체인의 각 블록은 바로 이전 블록으로의 단일 링크를 갖고 이 알고리즘의 체인도 같은 구조와 기능을 갖습니다.
그러나 이 알고리즘에서의 각 블록은 바로 이전이 아닌 훨씬 더 이전의 또 다른 블록으로의 링크를 하나 더 갖습니다.
이 또 다른 링크에 의해 하나의 연결 정보로 묶인 병렬화된 체인 구조가 만들어집니다.
실제 체인의 물리 구조는 다수로 병렬화된 분산 체인이나 논리 구조는 단일 체인을 유지합니다.
각 노드는 이 병렬화된 체인들 중 어느 한 체인의 정보만을 자신의 노드에 유지하고 이로 인해 공유 원장이 아닌 분산 원장으로서 기능합니다.

작업증명에서는 무결함이 약속된 최초의 블록으로부터 이어지는 전체의 블록들에 의해 체인의 무결성이 보장됩니다.
그러나 이 알고리즘에서는 최근의 몇몇 인증블록들과 현재의 후보블록들만으로 체인 전체의 무결성이 보장됩니다.
과거의 참여자와 과거의 상태가 아닌 현재의 참여자와 현재의 상태로부터 보안성이 유지됩니다.
이를 통해 모든 원장에 대한 인증은 유효기간을 가질 수 있고 과거의 블록은 버려질 수 있습니다.
이 유효기간은 체인의 시간상에서의 확장성을 제공하고 분산 체인의 운용은 공간상에서의 확장성을 제공합니다.

작업증명에서는 추가될 하나의 블록에 대해서만 합의가 진행됩니다.
그러나 이 알고리즘에서는 또 다른 하나의 체인으로 관리되는 후보블록들 전체에 대해서 끊임없이 합의가 진행됩니다.
하나의 블록을 찾기 위해 다수의 합의가 전체 네트워크로 분산되어 진행되고 인증을 발행할 수 있기 전까진 합의에 대한 합의로서 계속해서 수렴됩니다.
하나의 합의가 아니라 후보블록으로 존재하는 전체의 시간과 네트워크 전체의 공간에 분포하는 분산 합의가 이루어집니다.
이 시간과 공간에 대한 상관관계를 이용한 다양한 기법들이 사용되고 이를 통해 지역화도 점진적으로 감소합니다.
또한, 블록의 선출을 위한 합의와 인증의 발행이 긴 시간에 걸쳐 분리되어 진행되므로 알고리즘이 포크 없이 변경될 수 있고 전체 네트워크에 점진적으로 반영됩니다.



이 알고리즘이 목표하는 모든 세부적인 부분들까지의 설계가 완료되었습니다.


기본 합의 방식에 대한 세부설계가 완료되었고 문서화가 이루어졌습니다.

Basic consensus
Possibility of double spending
Attempts to tamper with already confirmed authentication

위 문서들에서는 합의에 대한 이론적인 부분과 원장에 대한 인증블록이 발행될 때의 기술적인 부분들이 다루어집니다.


새로운 후보블록의 추가에 대한 세부설계가 완료되었고 문서화가 이루어졌습니다.

Addition of the next candidate block

위 문서에서는 새로운 후보블록이 후보블록체인에 추가될 때 지역화를 감소시키는 기법이 소개됩니다.


후보블록체인의 동기화와 확장성을 위한 구조들에 대한 세부설계가 완료되었습니다.
그러나 이 두 기능에 대한 문서화는 아직 진행되지 않았습니다.
다른 기능들이 설계됨에 따라 기존에 작성된 문서들에서 수정될 부분들도 있으나 아직 진행되지 않았습니다.
영어 번역 문서를 병행하고 있어 알고리즘 설계보다 문서작성에 예상보다 많은 시간이 소요되었습니다.
문서작성이 목적이 아니기에 알고리즘을 더 쉽게 이해할 수 있기 위한 구현이 먼저 이루어질 수도 있습니다.
상용화를 위한 실제의 엔진 개발이 아니라 전체 알고리즘이 코드로 작성되고 간단하게 동작 방식이 보일 수 있을 정도의 구현입니다.
그래서 아직 문서로 작성되지 못한 부분들을 여기서 먼저 간략하게 소개합니다.



이 알고리즘의 후보블록체인은 체인이 분기되는 것을 허용하여 트리 형태의 체인 구조가 만들어집니다.
그러나 다음 인증을 발행할 첫 번째 후보블록은 반드시 유일함이 보장되어야 하고 이를 위해 임계값에 해당하는 긴 시간에 걸쳐 후보블록체인의 동기화가 진행됩니다.
처음 고안되었던 동기화 설계는 새로운 후보블록의 추가에 맞추어 지역 단위로 분산되어 수렴되는 방식이었습니다.
그러나 최종 설계에서는 다음 인증블록의 발행에 맞추어 동기화되는 방식으로 변경되었습니다.
이는 알고리즘을 더 단순하게 만들고 전체의 네트워크를 기준으로 분기된 체인들을 더 효율적으로 수렴시킵니다.
각각의 방식에 장단점이 있어 구현 단계에서는 두 방식이 혼합된 형태가 사용됩니다.

아래는 단순화시킨 한정된 네트워크에서 하나의 후보블록체인에 대한 전체 분기들이 지역 단위로 분산되어 수렴되는 형태만을 모형화한 것입니다.

4 |                                                      wxyz
- | -------------------------------------------------------------------------------------------------------------
3 |                          0xyz                         |                          1xyz
- | -------------------------------------------------------------------------------------------------------------
2 |            00yz           |            01yz           |            10yz           |            11yz
- | -------------------------------------------------------------------------------------------------------------
1 |     000z    |     001z    |     010z    |     011z    |     100z    |     101z    |     110z    |     111z
- | -------------------------------------------------------------------------------------------------------------
0 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111

    N-00   N-01   N-02   N-03   N-04   N-05   N-06   N-07   N-08   N-09   N-10   N-11   N-12   N-13   N-14   N-15

가장 좌측 열의 4에서 0의 수는 해당 라인의 난이도 비트 수를 나타내고 그 우측 열들은 모두 후보블록의 헤더 해시값들입니다.
위의 모델에서는 소유정보와 해시의 비트 수가 4이고 해당 비트 수에서 충돌이 발생하지 않는 완전한 난수적 성질을 갖는 값들로 가정되었습니다.
새로운 후보블록의 생성에 난이도 0을 사용하여 난이도에 의한 제약을 두지 않았습니다.
또한, 지역화가 고려되지 않았고 완전한 계층형 구조이면서 각 홉의 시간 거리가 일정한 네트워크로 가정되었습니다.
이 네트워크는 전체 해시 비트에 해당하는 N-00에서 N-15까지의 16개의 노드들로 구성되어 있습니다.
이러한 네트워크의 특성과 전체 노드의 수가 반영되어 모든 노드에서의 후보블록체인은 다섯 개의 후보블록으로 구성됩니다.

지금까지는 하나의 인증블록이 발행될 수 있기 위한 임계값이 사용되었고 체인의 분기로 인해 각 노드에서의 후보블록의 수는 다를 수 있었습니다.
그러나 체인에 확장성을 위한 설계가 추가되면서 모든 노드가 같은 수의 후보블록을 갖는 것으로 변경되었습니다.
변경된 설계에서는 난이도를 만족하는 일정 수의 후보블록이 모이기만 하면 인증블록이 발행될 수 있습니다.
현재도 임계값이 사용은 되나 기존보다는 낮은 동적인 값이 사용됩니다.
임계값의 역할이 축소되어 인증 발행의 속도나 관련성 효율비는 네트워크의 규모와 함께 난이도에 더 크게 영향을 받습니다.

리더블록의 해시값은 wxyz으로 각 자릿수에서 0 또는 1의 특정한 어느 한 값을 갖습니다.
난이도가 0이므로 모든 노드가 각자의 후보블록을 발행할 수 있고 각각의 노드가 하나의 지역이 됩니다.
지역 단위로 분산되어 수렴되는 동기화 방식의 경우 각 노드가 발행한 후보블록은 인접한 지역에 먼저 도착하여 합의가 진행됩니다.
합의라는 용어가 사용되었으나 정확하게는 수렴을 위한 합의입니다.
이 알고리즘에는 분기된 후보블록들을 수렴시키기 위한 합의와 발행된 인증블록이 확정되기 위한 두 종류의 합의가 있습니다.
N-05 노드가 발행한 0101 후보블록은 N-04와 N-06 노드에 먼저 도착하여 합의가 진행됩니다.
N-05 노드에서의 후보블록체인은 각각 wxyz, 0xyz, 01yz, 010z, 0101의 해시값을 갖는 후보블록들로 구성됩니다.
난이도 2가 사용된 경우 위에서는 N-04, N-05, N-06, N-07의 네 노드가 하나의 지역이 되고 yz의 2비트를 만족하는 01yz이 가장 최근에 생성된 후보블록으로 공유됩니다.


이 알고리즘에도 형태는 다르나 작업증명의 작업에 비교될 수 있는 많은 양의 노력이 수반됩니다.
그러나 수반된 노력의 양보다 얻는 가치가 더 큰 경우나 체인의 무력화와 같은 악의적인 목적인 경우, 공모하여 인접한 두 후보블록에 의해 이중지불이 시도될 수 있습니다.
위의 체인에서 16개의 노드 중 8개의 노드가 실제로는 하나의 소유주에 의해 운영되는 노드들일 경우, 50%로의 확률로 이중지불이 시도될 수 있습니다.
이를 막기 위해 이 알고리즘은 하나의 소유주에 의해 하나의 논리적인 노드가 운영되는 것을 전제로 합니다.
그러나 실제로는 알고리즘의 여러 기준값에서 그 확률적인 상태에 크게 영향을 미치지 않을 만큼이 허용됩니다.

현실 세계에 기관이나 기업 또는 온라인 서비스들의 사용자 가입정보 등을 통해 어느 한 소유주를 특정할 수 있습니다.
SMS 인증을 통한 휴대전화 번호 등도 어느 한 소유주를 증명하는 소유정보로써 사용될 수 있습니다.
이때 현실 세계에서 어느 한 소유주를 특정하는 데는 보안상 무결한 시스템과 완전한 절차를 통한 식별과 인증이 이루어져야 합니다.
이렇게 인증된 다수의 소유주가 공모하는 경우 등도 생각해 볼 수 있으나 그 양적인 측면에서 작업증명에 논스(nonce)의 값과는 비교될 수 없습니다.
이는 허가형 블록체인의 형태입니다.

좀 더 퍼블릭 블록체인에 근접한 형태로 운영되기 위해서는 지분의 형태가 사용될 수 있습니다.
지분이라는 용어로 표현되었으나 후보블록 간에 합의를 위한 것이 아니라 하나의 후보블록을 발행할 수 있는 일회성의 권한만을 얻기 위한 것으로 지분증명의 것과는 다릅니다.
후보블록을 생성하길 원하는 소유주는 사전에 자신의 소유정보를 체인에 하나의 원장으로 등록하여 인증받아야 합니다.
하나의 소유정보를 등록하기 위해 소유주는 새로운 공개키와 개인키 쌍을 생성하여야 합니다.
원장에는 생성된 공개키와 등록 시의 시간 값이 포함됩니다.
후보블록 발행의 권한은 이 시간 값에 의해 유효기간을 갖고 이는 뒤에서 소개될 체인에 확장성을 제공하기 위한 유효기간과는 다를 수 있습니다.
소유정보는 이 시간 값과 병합되어 공개키로 암호화된 값으로 등록됩니다.
발행 권한을 획득한 소유주는 후보블록을 생성할 수 있습니다.
후보블록의 헤더에는 인증받은 소유정보 원장의 블록 번호가 포함되고 후보블록 헤더의 해시값은 개인키로 암호화되어 포함됩니다.

소유주의 지갑 주소 등이 소유정보로써 사용되고 영지식증명 등의 기술이 더해지면 소유주에 대한 익명성이 제공될 수 있습니다.
이 익명성은 소유주의 후보블록에 의해 새로운 인증블록이 발행된 이후에도 영구히 지속됩니다.
그러나 이러한 소유주의 익명성과는 별도로 모든 후보블록은 항상 익명으로 존재합니다.
소유주에 의한 새로운 인증블록이 발행될 때 소유정보에 대한 증명 정보가 헤더에 포함됩니다.

어느 한 소유주에 의해 다수의 발행 권한이 획득될 수 있습니다.
이를 방지하기 위해 하나의 권한을 받기 위해서는 그럴만한 자격이 있음을 증명하거나 그에 해당하는 가치를 체인에 제공하여야 합니다.
퍼블릭 블록체인으로 운영되기 위한 이 가치는 현실 세계의 화폐가 갖는 가치에 상응합니다.
이 가치의 비율은 모든 소유주가 합리적인 행동을 하도록 체인에 공간성능에 맞추어 동적으로 조절됩니다.
또한, 이 알고리즘에서는 개별 가치가 묶이는 각 원장이나 인증블록에 유효기간이 사용됩니다.
별도의 관리 구조를 갖지 않을 경우, 연동된 가치 또한 유효기간을 갖게 됩니다.

이 알고리즘에서는 어느 한 인증블록이 발행된 후 하나 이상의 또 다른 인증블록이 뒤따를 때 해당 블록의 인증이 확정됩니다.
이로 인해 인접한 두 후보블록이 어느 한 소유주에 의해 발행되었거나 공모되었을 경우, 이중지불이 발생할 수 있습니다.
이를 막기 위해 위에서 보인 것과 같은 방법들로 소유주를 제한하고 또한 큰 수들을 사용하여 확률적으로 더 어렵게 만듭니다.
공모되어 발행된 두 후보블록이 인접하지 않을 확률이 기준이 되어 임계값이나 난이도 등이 정해집니다.
불가능한 확률로 어느 한순간 이중지불이 성공하더라도 해당 블록들은 뒤따르는 다른 블록들에 의해 체인에서 제외 처리됩니다.
새로 발행된 인증블록의 무결하고 정당함이 실제로는 인접한 하나의 블록이 아닌 뒤따르는 전체 후보 블록들에 의해 확인되고 제외 처리가 이루어집니다.
인접한 블록에 의해 이중지불된 블록의 인증이 확정되더라도 그 이후에 뒤따르는 모든 정당한 블록들에 의한 암묵적인 합의로서 공모된 모든 블록은 제외 처리됩니다.
이어지는 모든 블록에서 하나의 이중지불을 위해 공모된 블록이 50% 이상일 경우, 50% 이상의 확률로 제외 처리되지 않을 수 있습니다.
그러나 인증이 확정된 이후에 그 하위의 또 다른 블록에서의 제외 처리가 실제 작동하는 경우는 체인에 장애가 발생한 상황입니다.
이 알고리즘에서는 공모될 수 있는 블록들의 비율과 공모된 두 블록이 인접할 수 있는 경우들이 확률적으로 불가능하도록 능동적으로 제어되어 하나의 뒤따르는 인증블록만으로 인증이 확정됩니다.


위의 모형에서는 말단 노드만이 존재하는 단순화시킨 계층형 네트워크가 사용되었습니다.
그러나 실제로는 계층의 형태가 완전하지도 않고 각 홉의 시간 거리가 일정하지도 않은 메시 형태의 P2P 네트워크가 사용됩니다.
또한, 트리의 각 경로는 각 노드에서의 후보블록체인이었고 이로부터 지역 단위의 분산 수렴을 보였습니다.
그러나 이 모형은 체인의 트리 분기가 아닌 계층형 구조로 묶인 P2P 네트워크의 어느 한 부분에서의 지역들에 연결 상태로 볼 수도 있습니다.
그럴 때 어느 한 지역의 블록이 전체 네트워크에 도달하기 위한 평균 홉 수는 트리의 높이에 근사합니다.

이 알고리즘의 네트워크는 전체 노드의 수를 기준으로 한 아래와 같은 관계들을 통해 논리적으로 구조화됩니다.

b : branch quotient bits
z : the total number of zones           ( z = 2 ^ b )

d : difficulty bits
p : the total number of peers per zone  ( p = 2 ^ d )

r : average relevance bits              ( r = b + d )
n : the total number of nodes           ( n = 2 ^ r = z * p )

h : zero-based height of tree           ( h = b / d )

난이도에 의해 노드마다 연결하여야 할 상대 피어의 수가 정해집니다.
그러나 이는 체인을 위한 논리적인 기준값으로 P2P 네트워크에서 실제 물리적인 피어의 수는 이와 다를 수 있습니다.

최근 문서에서 새로운 후보블록이 전송될 때 블록들의 묶음 단위로 전송된다고 언급되었습니다.
위에 보인 트리의 높이가 묶음의 단위로 사용되고 이는 하나의 인증블록이 발행되기 위해 요구되는 최소 후보블록들의 수에 해당합니다.
그러나 위에 보인 관계들은 모형화된 모델로부터 얻은 네트워크의 속성들로 실제 전체 후보블록의 수는 이보다는 훨씬 큰 수입니다.
실제 새로운 후보블록의 선출은 블록들의 묶음 단위로 처리되고 지수 비율이 적용된 누적관련성이 사용됩니다.
선출된 전체 후보블록은 네트워크에 연결된 전체의 노드를 대표하므로 이에 대한 선형비율도 적용됩니다.
또한, 확장성을 갖기 위한 분산 체인으로 운용되기 위해서도 후보블록들의 수는 충분히 커야 합니다.
통계치에 기반한 확률적인 값들이 사용되므로 표본의 크기가 더 클수록 알고리즘은 더 정확하게 동작합니다.
이러한 특성들이 이용되어 체인으로부터 노드의 수나 전송시간과 같은 네트워크의 상태가 확인될 수 있습니다.
인증블록체인은 전체 네트워크에 대한 동기화된 상태를 갖고 후보블록체인은 각 체인 분기에 대한 분산된 상태를 갖습니다.

실제로 작게는 1000개에서 10000개 정도의 후보블록들이 운용되고 이 블록들은 지역 단위로 분산되어 수렴됩니다.
이 과정에서 네트워크의 대역폭 관리를 위해 하나의 묶음에 대한 블록의 수와 다음 전송을 위한 대기 시간이 각 전송에 대해 동적으로 조절됩니다.
네트워크 규모가 커짐에 따라 단일 체인에 블록들의 수뿐만 아니라 분기들의 수도 커져 이를 위한 효율적인 버퍼링도 필요합니다.
그러나 이러한 방법들을 이용하더라도 높이가 10000인 트리에 대해 말단 부분부터 수렴시켜 올라가는 방법으로 전체 블록을 동기화시키는 데는 네트워크와 노드에서 많은 자원이 소모될 수 있고 이는 자원의 낭비일 수 있습니다.
전체 후보블록이 완전하게 동기화된 상태가 인증블록 발행의 기준은 아닙니다.
또한, 블록의 수렴 과정에 지수 비율 등이 사용되어 체인에 분기는 완전한 트리 형태가 아니라 아래쪽으로 갈수록 지수 증가하여 분기됩니다.
이러한 특성이 반영되어 지역 단위의 분산 수렴은 체인 하단부의 몇몇 묶음에 대해서만 진행됩니다.
하단부를 제외한 후보블록체인에 대부분이 실제로는 단일 체인을 유지합니다.
여기에 해당하는 블록들에 대해서는 체인의 상단부부터 동기화되는 방식이 적용됩니다.
이어지는 단락들에서는 실제의 네트워크를 기준으로 하여 이 동기화 방식이 동작하는 과정을 보입니다.


아래는 제임스, 엘리스, 루이스, 마리아 그리고 클라크의 다섯 소유주에 대한 그들 각 노드에서의 후보블록체인입니다.

James  {0} ~ {67372} - [67373]           ~ (77372)
Alice  {0} ~ {67372} - (67373) ~ [75428] ~ (77372)
Lewis  {0} ~ {67372} - (67373) ~ [74593] ~ (77372)
Maria  {0} ~ {67372} - (67373) ~ [77285] ~ (77372)
Clark  {0} ~ {67372} - (67373) ~ [77285] ~ (77372)

중괄호와 소괄호는 각각 인증블록과 후보블록이고 대괄호는 각 노드가 발행한 후보블록입니다.
이 알고리즘의 블록 헤더에는 순서번호가 포함되고 위의 예에서는 그 순서번호만을 보였습니다.
최초 블록의 순서번호는 0번입니다.
현재 67372번의 인증블록까지 발행이 되었고 모든 노드에서 동기화되어 있습니다.
위의 후보블록체인들은 10000개의 후보블록들로 구성되고 현재의 리더블록은 67373번 블록입니다.
위의 다섯 소유주는 각각 후보블록체인의 어느 한 블록을 발행하였습니다.
위의 후보블록체인들은 전체 후보블록체인에서 각각이 서로 다른 다섯 개의 체인 분기를 임의로 선정한 것입니다.
모두가 서로 다른 체인 분기에 속하므로 마지막으로 추가된 후보블록도 서로 다릅니다.

아래는 트리 형태로 분기되는 전체 후보블록체인에서 위 다섯 노드에서의 체인 분기들만을 모아서 보인 것입니다.

  {0}
   :
{67372}
   |
[67373]
   :
(74592)-------------
   |               |
(74593)         [74593]
   :               :
(75427)-----       :
   |       |       :
(75428) [75428]    :
   :       :       :
   :       :    (77284)-------------
   :       :       |       |       |
   :       :    (77285) [77285] [77285]
   :       :       :       :       :
(77372) (77372) (77372) (77372) (77372)

 James   Alice   Lewis   Maria   Clark

위에서 볼 수 있듯이 제임스를 제외한 다른 노드들은 모두 체인이 분기되는 지점의 첫 번째 후보블록을 소유하고 있습니다.
분기를 발생시킨 이 블록들에 의해 분기된 체인의 동기화가 이루어집니다.
현재의 리더블록인 67373번 블록을 소유한 제임스는 이 블록을 사용하여 다음 인증블록을 발행합니다.
그리고 이때 자신의 후보블록체인에 전체 블록인 67373번부터 77372번까지의 블록들의 헤더 정보를 하나로 묶어 인증블록과 함께 발행합니다.
제임스의 후보블록체인은 분기된 체인의 동기화를 위한 기준 체인으로 사용됩니다.
후보블록의 헤더에는 아직 새 원장들과 그에 대한 인증 정보들이 포함되지 않았으므로 100바이트를 넘지 않습니다.
그로 인해 어느 한 노드에서 전체 후보블록의 수인 10000개의 블록에 대한 정보도 1MB를 넘지 않습니다.
새로운 인증블록과 함께 새로운 기준 체인의 정보는 다른 네 노드에 임의의 순서로 도착합니다.
네 노드는 기준 체인과 각각 자신의 후보블록체인을 비교합니다.
기준 체인과 비교하여 분기가 발생한 블록이 발견되면 해당 지점에서의 누적 관련성을 비교합니다.
기준 체인의 관련성이 더 높으면 자신의 후보블록체인을 버리고 기준 체인을 새로운 후보블록체인으로 선택합니다.
자신의 후보블록체인의 관련성이 더 높으면 분기가 발생한 블록의 바로 이전의 블록부터 마지막 블록까지의 자신에 후보블록들의 헤더 정보를 네트워크로 전송합니다.
이 정보는 다른 모든 노드에서 동기화를 위한 새로운 기준 정보로써 사용됩니다.
새로운 기준 정보들은 전체 네트워크에서 계속해서 연쇄하여 발생하고 체인의 분기들은 긴 시간에 걸쳐 단일 체인으로 수렴해 나갑니다.



이 알고리즘은 시간과 공간에 대한 각각의 확장성을 제공합니다.
체인이 운용되는 전체 시간에 대한 확장성을 제공하기 위해 원장의 인증에 대한 유효기간이 사용됩니다.
어느 한 시간대에서 네트워크 전체 공간에 대한 확장성을 제공하기 위해 인증블록체인은 분산 체인으로 운용됩니다.
처음 고안되었던 공간에 대한 확장성 설계는 인증의 발행을 병렬화(pipelining)시키는 구조였습니다.
리더블록은 처리할 원장에 대한 동기화만을 수행한 후 인증을 발행할 다른 블록들로 분배하는 방식으로 BFT(byzantine fault tolerance)와 DAG(directed acyclic graph)에서 사용되는 방식과 구조들이 일부 혼합된 형태였습니다.
이 방식은 인증 발행에 대한 처리량을 높여주고 한 줄기의 인증블록체인을 병렬화된 다수의 체인으로 분산시켜줍니다.
그러나 이 방식은 하나의 원장에 대한 인증이 완료되기까지의 단일 응답시간을 길어지게 만들고 동기화를 위해 현재의 알고리즘에 많은 부분을 재설계되게 합니다.
첫 구현에서는 인증의 발행을 병렬화시키지 않습니다.
어느 한 시간에 단일 노드에 의해서만 인증이 발행되나 단일 인증블록체인을 병렬화된 다수의 분산 체인으로 운영하여 공간상에서의 확장성을 제공합니다.
그러나 이 단락의 마지막 부분에서 아직 설계가 진행 중인 인증의 발행을 병렬화시키는 구조를 간략하게 소개합니다.



( 이 부분에 확장성과 관련된 내용이 추가됩니다.

원장과 인증블록 각각이 유효기간을 갖습니다.
만료된 인증블록은 체인에서 분리되고 이때 유효기간이 남은 원장은 새 인증블록에 포함됩니다.

시간에 대한 확장성과 함께 공간에 대한 확장성이 적용됩니다.
전체 소유주는 소유정보를 통해 모듈러 분할되어 특정 그룹에 영구히 귀속됩니다.
이렇게 분할된 하나의 그룹은 하나의 새로운 체인이 되어 한줄기였던 인증블록체인은 분산 체인으로 운용되고 새로운 인증블록은 특정 체인에 귀속됩니다.
소유주는 자신이 속한 체인에 대해서만 새로운 후보블록을 발행할 수 있고 자신의 체인과 인접한 두 체인의 인증블록만을 유지합니다.
전체 체인과 네트워크의 상태에 따라 그룹의 수가 동적으로 증가하거나 감소하여 체인은 모듈러 그래프의 형태를 보이나 방향성 비순환 그래프의 특성을 갖습니다.
이와는 별도로 기존의 단일 체인으로의 운용도 그대로 유지되므로 하나의 블록은 서로 다른 체인 구조에 동시에 속하고 둘 이상의 이전 블록으로의 링크를 갖습니다.
발행된 인증블록은 각자의 그룹으로 분산되어 저장되나 새로운 인증블록은 기존의 단일 체인을 따라 한 번에 하나씩 발행됩니다.
새로운 후보블록의 선출이나 새로운 인증블록의 발행은 기존의 방식을 따르나 공유저장소가 아닌 분산저장소로 운영되어 공간에 대한 확장성을 얻습니다.

인증 발행의 병렬화는 인증 저장의 분산을 포함합니다.
인증 요청된 원장의 해시값에도 모듈러 n이 적용되어 모든 원장도 특정 분산 체인에 귀속됩니다.
각 분산 체인은 각각 분리된 후보블록체인으로 기능하여 기존의 단일 체인은 더 이상 사용되지 않으므로 완전한 분산 체인으로 운영됩니다.
각 분산 체인의 후보블록체인에서 또다시 각각의 체인 분기가 발생하므로 전체의 후보블록체인이 분기되는 모습은 공간 좌표상에서 확인될 수 있습니다.
그러나 각 분산 체인은 모든 동작에서 인접한 두 분산 체인과 관계지어지고 n/2번의 횟수 이후 어느 한 블록의 정보는 모든 분산 체인으로 확산됩니다.
인증 발행의 병렬화는 기존의 단일 체인일 때와 동일한 응답속도를 가지면서 n배의 처리량을 갖습니다.

이 모든 과정은 값들의 난수적 성질과 확률에 따른 양에 의한 방법론들에 기반합니다.

언제 여유가 될지 몰라 먼저 간략하게 소개하였습니다. )




이 알고리즘에는 세 종류의 시간에 대한 임계블록들이 있습니다.
인증을 발행한 블록은 알고리즘의 동작에 관여하지 않으므로 이 임계블록들은 모두 후보블록입니다.
첫 번째 문서에서 후보블록체인의 첫 번째 후보블록인 리더블록이 설명되었습니다.
이 블록은 자신을 뒤따르는 블록들에 의해 시간에 대한 제약을 받아 제외 처리될 수 있다고 설명되었습니다.
후보블록체인에 앞부분의 대략 1/10에 해당하는 후보블록들에 의해 리더블록이 제외 처리될 수 있고 목표값들과 상태값들에 따라 이 블록들의 수에 해당하는 기준값이 정해진다고 설명되었습니다.
그러나 첫 설계와는 다르게 지금까지의 최종 설계에서는 이 블록들의 수에 제한을 두지 않습니다.
극단적인 실험 상황에서 하나의 리더블록에 대한 제외 처리가 각 분기된 후보블록체인의 서로 다른 후보블록들에서 동시에 발생할 수 있고 네트워크 전체의 관점에서는 불확실성으로 여겨질 수 있습니다.
그러나 이 알고리즘에서는 체인에 분기가 하나의 순기능으로써 이용되고 알고리즘에 모든 기능은 각 분기에서 재귀적으로 동작합니다.
전체의 관점에서 불확실성은 공격을 더 어렵게 만드나 후보블록들은 자신이 속한 후보블록체인의 분기를 기준으로 하여 확률적으로 동작합니다.
또한, 첫 설계에서는 시간에 대한 제약을 두기 위해 역방향 관련성을 비교하는 간접적인 방법이 사용되었습니다.
그러나 변경된 설계에서는 최근 문서에서 소개된 평균전송시간과 유사한 직접적인 시간 기준이 사용됩니다.
이와 같은 시간에 대한 제약과 제외 처리 방식 등은 아직 문서로 작성되지 않은 다른 두 종류의 임계블록들에도 마찬가지로 적용됩니다.
후보블록체인의 동기화를 담당하는 각 분기 체인의 첫 번째 후보블록이 있습니다.
인증블록체인의 동기화를 담당하는 각 분산 체인의 첫 번째 후보블록이 있습니다.
세 경우에 대해 제외 처리를 위한 시간을 구하는 방법은 다르나 이러한 시간에 대한 규칙을 통해 체인은 영구히 동작합니다.




이 알고리즘은 하나의 새로운 분산 합의 기술과 분산 원장 기술에 대한 설계입니다.


아래는 일반적인 블록체인 응용 서비스들을 위해 이 알고리즘이 사용되는 방법론을 보여주는 계층화된 기술 스택입니다.

*********************************************************************
*                    Decentralized Applications                     *
*********************************************************************
*               ?              *           Smart Contracts          *
*********************************************************************
*            Distributed Consensus and Distributed Ledger           *
*********************************************************************

스마트계약 옆의 비어있는 영역은 현재의 퍼블릭 블록체인 알고리즘들에서 구현하고 있는 토큰시스템입니다.
이 알고리즘은 가장 하위 계층인 분산 합의와 분산 원장에 대한 설계이고 토큰시스템과 스마트계약 그리고 분산애플리케이션에 대한 설계는 포함하지 않습니다.
이 알고리즘은 계층화된 구조(Layered Architecture)를 지향합니다.
가장 하위 계층의 기반 기술로 동작하면서 바로 위 계층인 토큰시스템과 스마트계약으로의 인터페이스를 제공합니다.
이 알고리즘을 위한 별도의 스마트계약이 설계될 수도 있으나 다른 블록체인 알고리즘의 스마트계약들이 모듈로써 제공될 수도 있습니다.
상위 계층의 서비스 특성에 따라 다양한 특성을 갖는 스마트계약들이 병행하여 사용될 수도 있습니다.

노력에 대한 보상을 위해 반드시 토큰시스템이 필요한 것은 아닐 수도 있어 해당 영역을 이름 짓지 않았습니다.
현재의 토큰은 노력이라는 가치의 측정과 이동 그리고 저장 수단으로서 기능하고 있습니다.
가치로서 기능하기 위해 별도의 데이터로 구체화 되어 실물화폐와 교환되고 있습니다.
그러나 토큰이라는 구체화 된 매개체가 없더라도 보상을 실현할 수 있는 기술적인 방법론들은 있습니다.
현실 세계에서 화폐가 생겨나기 이전에 동기식으로 가치를 교환하는 물물교환이 있었고 서로에 노동력을 교환하기 위한 약속이 있었으며 이는 비동기 방식으로 동작합니다.
그러나 현실 세계에서 가치를 관리하기 위한 가장 효율적인 방법론은 화폐이고 블록체인에서는 토큰 또는 코인입니다.
화폐로 기능하거나 그와 유사한 효과가 있는 것이 맞다 거나 틀렸다고 말할 수 있을 만큼 충분한 사회와 경제 지식을 갖추지는 못했으나 퍼블릭 블록체인으로 운용되기 위해서는 아직은 필요한 기능입니다.
토큰 발행을 위한 이 알고리즘의 관련된 구조적인 부분들이 다른 블록체인 알고리즘들의 구조와 크게 다르지 않습니다.
그러나 이 알고리즘은 보상에 대한 구조적인 설계를 포함하지 않고 연동되기 위한 인터페이스를 제공합니다.
이 마지막 단락만의 내용은 완료된 전체 아키텍처 설계에 대한 요약이 아니라 이 알고리즘에 적용하려는 방향성을 보인 것입니다.




I think the distributed consensus technology can be used for the social infrastructure
                , which allows the will of the people to be fairly gathered,
        rather than being used as a tool for someone to make money.

And I hope this algorithm can be used for it.

Releases

No releases published

Packages

No packages published