# Consensus Algorithm of NPICKBLOCK

> 엔픽블록 메인넷은 SNS 서비스 플랫폼를 위한 블록체인 플랫폼입니다. 엔픽블록은 따라서 SNS 서비스에 적합한 합의 방식을 기반으로 동작합니다.
>
> 엔픽블록 메인넷은 DPoS(Delegated Proof of Stake)와 유사한 방식으로 참여 Node를 선택하게 되는데 Node들은 SNS 서비스내에 존재하는 다양한 활동을 근거로 결정됩니다. SNS 서비스 내에는 인플루언서(Influencer) 라는 영향력을 지닌 사용자들이 존재합니다. 이러한 사용자들은 서비스 내에서 다양한 활동을 하고 타사용자들에게 강한 영향력을 미치는 사용자들을 의미합니다.
>
> &#x20;
>
> DPoS는 PoS 중에서도 특정 대표 Node를 선출하여 합의를 진행하는 과정으로 이루어집니다. 즉, 특정 블록체인 네트워크에서 많은 지분을 갖는 참여자를 블록생성을 위한 Node로 참여시키는 구조입니다. 여기서 많은 지분을 SNS 서비스내의 영향력으로 치환할 수 있습니다. 이렇게 치환된 영향력 개념을 바탕으로 엔픽블록 메인넷은 참여 Node를 선정하게 됩니다.



**Gaussian distribution 기반 사용자 선택**

영향력 특징 수치 벡터는 댓글, 업로드 등 소셜미디어 서비스 내에 존재하는 사용자 행위 기반의 기능들로 차원이 구성됩니다. 그리고 각 차원의 수치는 어떤 크리에이터가 소셜미디어 서비스를 이용한 행위의 빈도수와 각 차원의 크리에이터 행위에 대한 타사용자들의 반응 수치로 결정됩니다. 예를 들어, 어떤 인플루언서 특정 콘텐츠에 댓글이라는 행위를 진행한 경우, 댓글 차원의 수치가 1 만큼 증가합니다. 그리고 해당 액션에 대해 타사용자들이 댓글의 댓글이나 좋아요 와 같은 기능을 이용하여 반응한 경우, 그 반응의 수치만큼 차원의 수치가 증가합니다. 이러한 반응이 n 번 발생한 경우 어떤 크리에이터의 댓글 차원의 수치는 n+1 만큼 증가하게 됩니다.

<figure><img src="https://2413182852-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fsudy7bWHzLqfW5RMvABn%2Fuploads%2FxoK4tocPaQZvMjgHxJfd%2Fimage.png?alt=media&#x26;token=40efdb6d-93fd-44ae-afec-2752531a6a03" alt=""><figcaption><p><strong>[Figure 11. Structure of influence Feature numerical vector]</strong></p></figcaption></figure>

엔픽블록 메인넷은 사용자 별 영향력 특징 수치 벡터의 모든 차원의 합을 기반으로 Gaussian distribution을 도출합니다. 그리고 분포의 상위지점, 즉 R1 이상의 사용자들 혹은 R2 이상의 사용자들 집합을 Node로 선정합니다. 그리고 각 Node들에게는 타 Node들의 Gaussian Score 정보가 공유됩니다.

&#x20;

**Gossip Protocol with Delegated Influencer**

엔픽블록 메인넷은 Node들 간의 Gossip을 기반으로 정보를 공유합니다.

즉, Node들 중 특정 Node가 블록을 발생시키고 나머지 Node들이 블록발생 정보를 검증하고 공유합니다. 이 때 블록발생 정보와 더불어 해당 블록을 발생시킨 Node의 signature와 선택된 타 Node들의 정보도 함께 전달됩니다.

<figure><img src="https://2413182852-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fsudy7bWHzLqfW5RMvABn%2Fuploads%2FO8vmrZddvLeZycL8W71O%2Fimage.png?alt=media&#x26;token=6f4fc563-022b-4a17-8dff-cad0fb48baf0" alt=""><figcaption><p><strong>[Figure 12. Influence score measurement structure utilizing Gaussian distribution]</strong></p></figcaption></figure>



해당 공유 정보를 받은 참여 Node 들은 내부의 current chain score를 블록발생 Node의 signature 정보를 기반으로 계산하게 됩니다. 이 후 함께 받은 타 Node 들의 정보를 활용하여 블록공유 정보를 재 공유하며 current chain score를 재계산하게 됩니다. 그리고 current chain score 가 2k/3 이상이 된 경우 current level을 종료합니다. 이 후 또 다른 Node 가 블록을 발생시키고 위 과정이 반복됩니다.

&#x20;엔픽블록 메인넷은 위와 같은 Gossip Protocol을 기반으로 블록생성 정보를 공유합니다. 예를 들어, k 개의 Node가 존재하는 경우, i 번째 Node 가 블록을 발생시켰다고 가정할 수 있습니다. 그러면 i 번째 Node는 k-1 개의 Node 중 무작위로 n 개의 Node를 선택하여 블록생성정보를 공유합니다. 이 정보를 받은 n개의 Node들은 current chain score를 i 번째 Node의 영향력을 기반으로 업데이트 합니다. 그리고 n 개의 Node는 서로 블록생성정보 수신을 공유하며 current chain score를 지속적으로 업데이트 합니다. 그리고 current chain score 가 2k/3 이상이 된 경우 current level을 종료합니다.

이 때 current level을 종료할 수 있는 Node들은 n 개의 Node들 중 current chain score 가 2k/3 이상인 Node들입니다. 따라서 n-j (이 때 j는 n 개의 Node 중 2k/3에 대한 score 정보가 업데이트 되지 않은 Node들의 수)의 Node 중에서 다음 블록을 생성하게 됩니다.

그리고 Gossip Protocol에 따라 무작위로 선택된 k-1 개의 Node들에게 블록생성 정보가 공유되는데 이 k-1 개의 참여 Node 중 n-j의 Node에 포함되지 않은 Node가 존재할 수 있습니다.

&#x20;즉, 최초 블록을 생성시킨 i 번째 Node가 선택한 n 개의 Node 중 이전 level의 최종 score를 알고 있는 n-j 개의 Node가 아닌 Node 중에 다음 Level의 블록생성정보를 받은 Node가 존재할 수 있습니다. 이러한 경우, 해당 Node는 이전 생성정보와 관련된 모든 정보, 즉 main chain의 블록정보와 current level 정보, 그리고 s block chain의 정보를 모두 수신 받아 최신정보로 업데이트를 진행하게 됩니다. 그 이 후 현재 level 에서의 current chain score를 업데이트 하며 합의 과정을 진행합니다.

&#x20;엔픽블록 메인넷은 Gossip Protocol을 활용하여 2k/3 Node 간의 정보가 공유되기 때문에 Parasite chain attack, Double Spending 등과 같은 다양한 네트워크 공격에 대응할 수 있습니다. 이는 2k/3의 Node 가 정보를 공유하고 있는 경우 Byzantine Fault Tolerance 보장에 따라 반응할 수 있는 공격형태로 검증되어 있습니다.
