Ethereum DPoS 사례 및 오픈 소스 DPoS 분석
BFTF技术社区联盟
2018-08-10 06:09
本文约1433字,阅读全文需要约6分钟
Meitu는 이더리움 기반의 DPoS 합의 알고리즘을 어떻게 구현합니까? 동시에 다른 오픈 소스 DPoS 구현을 비교하고 분석합니다.

쑨샤오준

이미지 설명

Meitu 클라우드 사업부의 시스템 R&D 엔지니어로 주로 Meitu 블록체인 및 클라우드 라이브 방송을 담당합니다.

편집자 주: 이 기사는 BFTF Technology Community Alliance(저자: BFTF Technology Community Alliance)에서 작성했으며 승인을 받아 게시되었습니다.

이 연설은 크게 네 부분으로 나뉘는데, 첫 번째 부분은 이더리움의 인프라를 간략하게 소개하고, 첫 번째 부분은 현재의 여러 합의 알고리즘을 요약하고, 세 번째 부분은 메이투 이더리움의 DPoS 실행, 마지막으로 EOS의 DPoS를 비교합니다.

 

이더리움의 기본 구조는 외부 HTTP 인터페이스, 합의 알고리즘 모듈, EVM, 스토리지 모듈 등을 포함하여 그림에 나와 있습니다.


그 중 트랜잭션 처리 모듈은 노드가 트랜잭션을 받은 후 트랜잭션 풀에 저장하고, 패키징 과정에서 트랜잭션 풀에서 조건을 만족하는 트랜잭션을 가져옵니다. 블록 롤백과 같은 작업이 발생하면 패키지된 트랜잭션이 트랜잭션 풀에 다시 들어갑니다.


이더리움의 계정 잔액 데이터는 Patricia Trie와 Merkle Trie로 구성된 (MPT) 트리에 저장되며, 주로 Patricia Trie의 특성을 사용하여 계정 잔액의 빠른 검색을 실현하고 Merkle Trie를 사용하여 트랜잭션이 변조되었는지 여부를 증명합니다. .


PoW는 일정한 워크로드 증명을 만족시켜 합의를 이루는 방식으로 비트코인과 이더리움에서 오랜 기간 테스트를 거친 합의 알고리즘이지만 컴퓨팅 리소스를 많이 소모해야 하고 트랜잭션의 QPS가 낮다. PoS는 보유자의 권리와 이익을 도입하여 난수 검색을 완료하며, 사용자가 소유한 자산이 많을수록 올바른 난수를 찾을 확률이 높아집니다. PoS에는 원장 포크, 장거리 공격, 통화 연령 공격 및 기타 문제가 있습니다. DPoS는 PoS의 개선된 버전으로 간주되며, DPoS는 가끔 선거를 실시하고, 이렇게 선출된 노드가 블록 생성 및 상호 감독 및 검증을 담당하므로 블록 생성 및 블록 확인 시간을 크게 줄일 수 있습니다.


알고리즘 구현에는 주로 블록 검증자 선출과 블록 검증자 스케줄링이라는 두 가지 핵심 부분이 포함됩니다.


이더리움에 합의 알고리즘을 추가하기 위해서는 합의 엔진에서 정의한 인터페이스를 구현해야 합니다.


패키징 프로세스: 채굴자는 정기적으로 CheckValidator를 통해 현재 검증자가 현재 노드인지 확인하고, 그렇다면 CreateNewWork를 통해 새로운 블록 작업을 생성합니다.


노드가 검증자가 되려면 먼저 후보가 되어야 하고 다른 사람들이 이 후보에 투표할 수 있습니다. 투표를 하든 후보가 되든 사실상 노드를 위한 거래인데, 이전 거래는 주로 이체나 컨트랙트 호출이었기 때문에 이제 몇 가지 거래 유형이 더 추가된다.


또한 각 선거마다 제네시스 블록의 과거 데이터를 재생하지 않기 위해 DPoS는 여러 글로벌 상태 트리를 추가하여 선거 및 투표 상태를 기록하고 트리에 해당하는 루트를 블록 헤더에 저장합니다.


선거: 블록의 주기를 판단하여 이전 주기의 블록 상황에 따라 선정되었으나 블록 수가 요구 사항을 충족하지 못한 후보를 일부 추방하고 마지막 블록 기준으로 상위 N개의 후보를 선택 가장 많은 득표를 한 검증인으로서 검증인의 순서를 섞습니다.


새로운 블록이 수신되면 마지막 비가역 블록의 정보를 업데이트해야 하며, 마지막 비가역 블록은 노드의 2/3가 확인한 블록입니다.


빠른 동기화 모드에서 브로드캐스트된 블록은 직접 폐기되며 전체 동기화에 들어간 후에만 수신됩니다. 기본 동기화 방식(빠른 동기화)으로 여러 노드를 동시에 시작하면 노드 간 블록 생성 빈도가 동일하여 모든 노드가 전체 동기화 모드로 들어갈 수 없으며 노드 간 동기화된 블록은 폐기됩니다. 해결책은 전체 동기화 모드에서 창립 노드를 시작하는 것입니다. 검증자의 정보는 블록 바디에 저장되기 때문에 블록 헤더를 통해서만 블록을 검증할 수는 없습니다.

EOS의 DPoS에는 21개의 검증 노드가 있으며 블록을 구성하는 시간 간격은 500ms이며 각 노드는 12개의 블록을 연속으로 만듭니다. 나머지 20개 노드에 전파됩니다. EOS의 최신 백서에는 일종의 BFT-DPoS가 언급되어 있습니다.노드가 블록을 인쇄한 후 BFT 알고리즘을 통해 다른 노드에 검증할 수 있으므로 최종 비가역 블록의 확인 속도를 높이고 트랜잭션 확인 속도를 높일 수 있습니다. , 체인의 포크를 줄입니다.

https://v.qq.com/x/page/o0736irezov.html 


BFTF技术社区联盟
作者文库