Deb 합의 알고리즘 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
19번째 줄: 19번째 줄:
 
deb 합의 알고리즘의 전체 프로세스는 유료 채굴리그 구성, 블록 생성(채굴), 최종블록 합의 등 크게 3단계로 구성된다. 첫 번째, 유료 채굴리그 구성으로 채굴을 원하는 노드는 공정한 노드에게 자신의 접속 정보를 제공하고, 공정한 노드는 채굴리그 구성을 위해 모든 노드들에게 ''OTPRN''을 배포한다. 채굴리그에 참여를 희망하는 노드는 공정한 노드가 배포한 ''OTPRN''을 참조하여, 본인이 채굴리그 참여 대상자인지를 판단한다. 채굴리그 참여자로 선정된 채굴 노드는 채굴리그 구성을 위해 ''OTPRN''을 포함한 ''JoinTx''를 생성한다. 그리고, 모든 노드들에게 ''JoinTx''를 브로드 캐스팅하고, 채굴리그 참여자로 선정된 채굴 노드들만 ''JoinTx''를 참조한다.
 
deb 합의 알고리즘의 전체 프로세스는 유료 채굴리그 구성, 블록 생성(채굴), 최종블록 합의 등 크게 3단계로 구성된다. 첫 번째, 유료 채굴리그 구성으로 채굴을 원하는 노드는 공정한 노드에게 자신의 접속 정보를 제공하고, 공정한 노드는 채굴리그 구성을 위해 모든 노드들에게 ''OTPRN''을 배포한다. 채굴리그에 참여를 희망하는 노드는 공정한 노드가 배포한 ''OTPRN''을 참조하여, 본인이 채굴리그 참여 대상자인지를 판단한다. 채굴리그 참여자로 선정된 채굴 노드는 채굴리그 구성을 위해 ''OTPRN''을 포함한 ''JoinTx''를 생성한다. 그리고, 모든 노드들에게 ''JoinTx''를 브로드 캐스팅하고, 채굴리그 참여자로 선정된 채굴 노드들만 ''JoinTx''를 참조한다.
  
두 번째, 블록생성(채굴)이다. 채굴리그에 참여한 채굴 노드는 최종 블록 선정의 기준이 되는 [[채굴 난이도]](difficulty)를 생성한다.
+
두 번째, 블록생성(채굴)이다. 채굴리그에 참여한 채굴 노드는 최종 블록 선정의 기준이 되는 난이도(''difficulty'')를 생성한다.
  
 
  <math>difficulty = {0 \le n \le JoinNonce | MAX(CSPRNG(n, OTPRN.rand, coinbase, P_BlockHash))}</math>
 
  <math>difficulty = {0 \le n \le JoinNonce | MAX(CSPRNG(n, OTPRN.rand, coinbase, P_BlockHash))}</math>
  
채굴 확률을 균등하게 하기 위해 채굴리그에 신청하였으나, 채굴자로 선정되지 못한 경우 선정되지 못한 경우만큼 복수의 채굴 난이도를 생성한다. 채굴 노드는 블록 헤더에 채굴 난이도를 포함하여 블록을 생성하고, 모든 노드에게 생성된 [[블록]]을 [[브로드캐스팅]]한다.
+
채굴 확률을 균등하게 하기 위해 채굴리그에 신청하였으나, 채굴자로 선정되지 못한 경우 선정되지 못한 경우만큼 복수의 난이도를 생성한다. 채굴 노드는 블록 헤더에 난이도를 포함하여 블록을 생성하고, 모든 노드에게 생성된 블록을 브로드캐스팅한다.
  
세 번째, 합의 알고리즘이다. 블록 합의의 기본 원칙은 가장 큰 수,  가장 큰 랜덤 넘버(MRNR) 규칙과 노드와 공정한 노드가 협력하여 다수결에 의한 최종블록 합의 절차이다. 우선 노드는 자신이 수신한 블록 중 채굴 난이도가 가장 높은 블록을 선택한 뒤 서명하여 공정한 노드에 전송하고, 공정한 노드는 다수결 원칙에 따라 전송받은 블록 중 가장 많은 선택된 블록을 최종 블록으로 결정하여 서명한 후 노드들에게 전송한다. 채굴 노드는 공정한 노드로부터 수신한 블록이 다수에 의해 선택된 블록인지 검증한 뒤 전체 노드들에게 브로드캐스팅하며, 각 노드들은 공정한 노드와 다수가 서명한 블록을 최종 블록으로 인지하고 블록체인에 추가한다.<ref name="백서"></ref>
+
세 번째, 합의 알고리즘이다. 블록 합의의 기본 원칙은 가장 큰 수,  가장 큰 랜덤 넘버(MRNR) 규칙과 노드와 공정한 노드가 협력하여 다수결에 의한 최종블록 합의 절차이다. 우선 노드는 자신이 수신한 블록 중 난이도가 가장 블록을 선택한 뒤 서명하여 공정한 노드에 전송하고, 공정한 노드는 다수결 원칙에 따라 전송받은 블록 중 가장 많은 선택된 블록을 최종 블록으로 결정하여 서명한 후 노드들에게 전송한다. 채굴 노드는 공정한 노드로부터 수신한 블록이 다수에 의해 선택된 블록인지 검증한 뒤 전체 노드들에게 브로드캐스팅하며, 각 노드들은 공정한 노드와 다수가 서명한 블록을 최종 블록으로 인지하고 블록체인에 추가한다.<ref name="백서"></ref>
  
 
===유료 채굴리그 구성===
 
===유료 채굴리그 구성===
116번째 줄: 116번째 줄:
  
 
===채굴 프로세스===
 
===채굴 프로세스===
공정하고 효율적인 채굴을 위해 공정한 노드와 의사 난수 난이도를 활용한다. 채굴 난이도를 생성하는 방법으로, 채굴 노드는 참여자 선정 과정에서 공정한 노드로부터 받은 ''OPTRN'' 구조체를 참조하여 채굴 난이도를 생성한다.
+
공정하고 효율적인 채굴을 위해 공정한 노드와 의사 난수 난이도를 활용한다. 난이도를 생성하는 방법으로, 채굴 노드는 참여자 선정 과정에서 공정한 노드로부터 받은 ''OPTRN'' 구조체를 참조하여 난이도를 생성한다.
  
 
  <math>difficulty = {0 \le n \le JoinNonce | MAX(CSPRNG(n, OTPRN.rand, coinbase, P_BlockHash))}</math>
 
  <math>difficulty = {0 \le n \le JoinNonce | MAX(CSPRNG(n, OTPRN.rand, coinbase, P_BlockHash))}</math>
  
''JoinNonce''는 다른 목적으로, 채굴 노드가 채굴리그에 참여한 만큼 채굴 확률을 높여주는 기능을 수행한다. 이와 같은 목적을 달성하기 위해 ''JoinNonce'' 수만큼 다른 [[채굴 난이도]]를 생성할 수 있고, 그중 가장 큰 값을 블록 생성에 사용할 수 있다. ''OPTRN.rand''는 공정한 노드가 배포한 일회성 의사 난수로 채굴 노드가 난이도를 생성함에 있어 채굴에 유리한 값을 임의로 생성할 수 없도록 하고, ''coinbase''는채굴노드가 채굴할 때 사용하는 주소로 채굴 노드별로 난이도를 다르게 생성하게 하기 위함이다. 또한, ''P_BlockHash''는 이전 블록의 해시값으로 공정한 노드가 특정 채굴 노드에게 유리한 ''OPTRN.rand''를 배포할 때를 대비하고, 체굴노드가 특정 블록에 종속된 하나의 난이도를 생성하도록 하기 위함이다. 채굴 노드는 자신이 생성한 난이도 중 가장 큰 난이도를 선택하여 트랜잭션을 생성한다.
+
''JoinNonce''는 다른 목적으로, 채굴 노드가 채굴리그에 참여한 만큼 채굴 확률을 높여주는 기능을 수행한다. 이와 같은 목적을 달성하기 위해 ''JoinNonce'' 수만큼 다른 난이도를 생성할 수 있고, 그중 가장 큰 값을 블록 생성에 사용할 수 있다. ''OPTRN.rand''는 공정한 노드가 배포한 일회성 의사 난수로 채굴 노드가 난이도를 생성함에 있어 채굴에 유리한 값을 임의로 생성할 수 없도록 하고, ''coinbase''는채굴노드가 채굴할 때 사용하는 주소로 채굴 노드별로 난이도를 다르게 생성하게 하기 위함이다. 또한, ''P_BlockHash''는 이전 블록의 해시값으로 공정한 노드가 특정 채굴 노드에게 유리한 ''OPTRN.rand''를 배포할 때를 대비하고, 체굴노드가 특정 블록에 종속된 하나의 난이도를 생성하도록 하기 위함이다. 채굴 노드는 자신이 생성한 난이도 중 가장 큰 난이도를 선택하여 트랜잭션을 생성한다.
  
 
  <math>difficulty = NAX({difficulty_n} 0 \le n \le JoinNonce)</math>
 
  <math>difficulty = NAX({difficulty_n} 0 \le n \le JoinNonce)</math>
197번째 줄: 197번째 줄:
 
# 채굴한 노드가 채굴 리그 참가 가능 대상자인지 확인한다.
 
# 채굴한 노드가 채굴 리그 참가 가능 대상자인지 확인한다.
 
# 채굴 노드가 채굴 리그 참가비를 지불할 수 있는지 확인한다.
 
# 채굴 노드가 채굴 리그 참가비를 지불할 수 있는지 확인한다.
# 채굴 난이도가 올바르게 생성되었는지 확인한다.
+
# 난이도가 올바르게 생성되었는지 확인한다.
  
 
* '''블록 합의'''
 
* '''블록 합의'''
# 채굴 노드는 수신한 블록 중 [[채굴 난이도]]가 가장 높은 블록을 선택하여 [[서명]]한 뒤 공정한 노드에 전송한다.
+
# 채굴 노드는 수신한 블록 중 난이도가 가장 블록을 선택하여 서명한 뒤 공정한 노드에 전송한다.
 
# 공정한 노드는 전송받은 블록 중 다수결 원칙에 따라 다수에 의해 선택된 블록을 최종 블록으로 결정하여 서명한 후 노드들에게 전송한다. 향후 검증을 위해 공정한 노드는 해당 블록에 투표한 채굴 노드들의 주소와 서명을 블록에 포함시킨 뒤 서명한다.
 
# 공정한 노드는 전송받은 블록 중 다수결 원칙에 따라 다수에 의해 선택된 블록을 최종 블록으로 결정하여 서명한 후 노드들에게 전송한다. 향후 검증을 위해 공정한 노드는 해당 블록에 투표한 채굴 노드들의 주소와 서명을 블록에 포함시킨 뒤 서명한다.
 
# 공정한 노드는 해당 블록을 채굴 노드들에게 브로드캐스팅한다. 채굴 노드들은 수신한 블록이 다수결 원칙에 부합하는지, 공정한 노드의 서명이 포함되었는지를 검증한 뒤 자신의 원장에 추가하고 해당 블록을 브로드캐스팅한다.  
 
# 공정한 노드는 해당 블록을 채굴 노드들에게 브로드캐스팅한다. 채굴 노드들은 수신한 블록이 다수결 원칙에 부합하는지, 공정한 노드의 서명이 포함되었는지를 검증한 뒤 자신의 원장에 추가하고 해당 블록을 브로드캐스팅한다.  

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)