우민: 블록체인을 블록 그래프로 확장
Claire: 8월 8일에 "DAG의 과거와 현재(1)"라는 주제로 공유를 했는데 많은 친구들의 뜨거운 관심과 토론을 받았고, 같은 방식으로 많은 사람들이 [Magic Piper Community]에 가입했습니다. 오늘 초청 연사 Mr. Wu Min은 "DAG의 과거와 현재(2)" 주제 공유를 계속할 예정이며 모든 사람이 BlockDAG에 대해 더 깊이 이해할 수 있도록 BlockDAG의 기술적 세부 사항, 어려움, 솔루션 및 도구에 대해 자세히 설명합니다. , 환영 나중에 Q&A 섹션에서 질문하여 더 깊이 파고들 수 있습니다. 이제 우민씨... 👏👏👏
오늘의 공유는 주로 개발자를 대상으로 하며, 많은 프로그래머가 속어(속어)만 알고 있습니다. 모두가 혜택을 볼 수 있도록 이해하기 쉽게 공유하려고 노력합니다.
1: Soteria는 "Self Sustainable Decentralized Economy"(SSDE - Self Sustainable Decentralized Economy)의 인프라 기술입니다.
2: Soteria는 현재 블록체인 세대의 긴급한 문제 중 일부를 해결하기 위한 전체론적 솔루션을 개발하고 있으며, 블록DAG 기반의 확장 가능한 처리량과 같은 분산 경제를 위한 적절한 기능 세트를 제공합니다.
3: DAG는 방향성 비순환 그래프라고 합니다.
4: BlockDAG를 블록 그래프라고 합니다. BlockDAG와 TransactionDAG는 엄청난 차이가 있는데, 자세한 내용은 이전 공유에서 트랜잭션 DAG에 대한 부분을 참고하세요.
5: Soteria DAG는 실제로 Bitcoin Nakamoto 합의 알고리즘의 확장으로 보안 보장을 기반으로 포괄적이고 유연하고 확장 가능한 기능을 제공합니다.
블록 다이어그램은 다음과 같습니다.
이 예에서. 하단에는 GENESIS 블록이 있으며 화살표는 블록에서 상위 블록을 가리킵니다. 블록이 다른 블록의 부모가 아닌 경우 현재 블록 그래프의 팁이라고 합니다. 예를 들어 위 그림의 팁은 M, J, L입니다. 창세기, 부모, 팁 모두 매우 중요한 개념으로 다음에 반복해서 언급하겠습니다.
포용을 전제로 안전은 어떻게 확보할 것인가? 예를 들어 악의적인 마이닝은 어떻습니까? 여기서는 Phantom과 Greedy Phantom에 대해 이야기하겠습니다.
팬텀이란 무엇입니까?
Phantom은 Yonatan Sompolinsky와 Aviv Zohar가 발명한 염색/분류 프로토콜입니다. 구현은 다음 세 가지 주요 단계입니다.
1: 잘 연결된 블록 집합이 식별됩니다. 이것을 블루 세트라고 합니다. 이전 블록만 참조하거나 일정 기간 동안 숨겨진 블록과 같은 다른 블록은 파란색 세트에서 높은 확률로 제외됩니다.
2: 블록 다이어그램에서 토폴로지 정렬을 수행하여 파란색 집합의 블록에 우선 순위를 부여하고 파란색 집합에 없는 블록보다 뒤처집니다.
3: 트랜잭션을 정렬하고 확인할 때 블록 다이어그램의 정렬을 사용하고 합법적인 트랜잭션을 채택하고 악의적인 트랜잭션을 폐기합니다.
Phantom 또는 Greedy Phantom에서 이 그래픽의 색상이 어떻게 보이는지 봅시다.
위 그림은 팬텀(Greedy Phantom도 비슷함)으로 색칠한 후의 결과인데, 블록 M의 시점에서 색칠하는 방법을 살펴봅니다. 블록 다이어그램의 중간 부분에는 잘 연결된 블록 세트가 있고 동시에 블록 다이어그램의 경계에 있는 일부 블록(빨간색)은 잘 연결되지 않았습니다.
이를 결정하기 위해 시스템 내부 상수(k)를 사용하며, k가 어떻게 선택되는지는 향후 기술 공유에서 설명할 것입니다. 즉, 동일한 수준의 빨간색 블록은 파란색 블록 뒤에 배치됩니다. 모든 빨간색 블록이 모든 파란색 블록 뒤에 배치되는 것은 아닙니다. 색상이 없는 블록(J 및 L)은 M의 "과거 세트"에 속하지 않으며 M 뒤에 정렬됩니다.
정렬 결과(M의 관점에서)는 다음과 같습니다.
GENESIS, C, D, E, H, B, I, K, F, M, J, L
염색 및 분류 과정에서 Phantom은 다음을 수행해야 합니다.
1: 블록의 과거와 미래를 분석하여 잘 연결되어 있는지 판단합니다.
2: 블록 그래프를 탐색하고 각 블록에 색을 지정합니다.
3: 정렬합니다.
Aviv Yaish가 저술한 Greedy Phantom이 무엇인지 살펴보겠습니다.
1: 기본적으로 Phantom과 동일한 개념인 Greedy Phantom의 목표는 더 간단하고 효율적입니다.
2: 착색 부분은 가장 푸른 부모로부터 물려받습니다.
3: 색칠 및 정렬은 증분 모드입니다.
착색 부분은 착색 부모라고도 알려진 가장 파란색 부모로부터 상속됩니다. 유색 부모의 수집은 현재 블록에서 제네시스 블록(제네시스)까지 계속되며, 이를 현재 블록의 컬러링 체인이라고도 합니다.
팬텀과의 차이점은 그리디 팬텀의 컬러링은 상속되고, 가장 파란 부모 이전 블록의 정렬은 변경되지 않는다는 점이다.반대로 팬텀 알고리즘에서는 각 블록이 과거(과거)와 미래(과거)를 고려해야 하기 때문에 미래), 따라서 미래에 블록이 어떻게 연결되어 있는지에 따라 미래에 각 블록의 색상이 변경될 수 있습니다.
블록 맵에 블록이 추가되면서 그리디 팬텀의 채색 과정을 살펴보겠습니다.
GIF
이 애니메이션에는 파란색, 빨간색 및 투명 블록 외에도 녹색 및 파선 테두리 블록이 있습니다.
녹색: 염색된 팁을 나타냅니다.
점선: 현재 블록의 염색된 사슬. (가장 푸른 부모 세트)
파란색: 최신 블록의 관점을 나타내는 파란색 블록 모음(잘 연결됨, 잘 연결됨)
빨간색: 최신 블록의 관점에서 파란색 블록 집합 외부의 블록(잘 연결되지 않음)
일부 블록은 최신 블록의 관점에서 색상(빨간색과 파란색 사이)이 변경되는 것을 관찰할 수 있습니다. 또한 각도가 다르면 염색된 가닥도 다른 것을 관찰할 수 있습니다.
DAG 초기에 B, C, D, E가 추가되었을 때 컬러 체인은 이러한 새로운 블록이 되지 않았습니다. 두 개 이상의 블록이 똑같이 파란색일 때 해시가 더 낮은 블록이 승리하는 내부 타이 브레이킹 규칙 때문입니다. 이 예에서 B는 문자의 첫 번째(최하위)이므로 B가 이깁니다.
Phantom과 Greedy Phantom 간의 계산 차이를 요약하면(엔지니어링 관행에 영향을 미침):
팬텀이 염색할 때 블록의 과거와 미래를 사용하게 되는데, 블록 그래프가 커질수록 블록의 미래는 무한히 커집니다.
Greedy Phantom은 염색할 때 블록의 과거만 고려합니다. 블록 그래프가 계속해서 증가하므로 Greedy Phantom이 염색/분류 엔지니어링에 더 나은 선택이 되기 때문입니다.
Phantom을 사용해야 하는 경우 노드의 과거 및 미래 순회의 하한 및 상한을 설정하여 유사한 효과를 얻을 수 있습니다.
그러나 노드의 과거와 미래를 제한하는 것은 착색 효과에 영향을 줄 수 있으므로 이상적이지 않습니다.
우리의 코드 베이스에는 둘의 구현이 포함되어 있으며 목적은 향후 차이점을 비교하고 다른 개발자에게 더 많은 참조를 제공하는 것입니다.
다음으로 블록체인을 블록 다이어그램으로 확장하려는 목적을 달성하기 위해 코드를 수정하는 방법에 대해 자세히 설명하겠습니다.
프로젝트 구현 블록 다이어그램(BlockDAG)에는 다음 내용이 포함됩니다.
기존 코드를 정리하고, 블록체인 시나리오에만 서비스를 제공할 수 있는 코드를 제거하고, BlockDAG 개발을 복잡하게 하고 그다지 도움이 되지 않는 많은 코드를 포함합니다.
블록 다이어그램을 나타내는 코어 모듈(구 코드는 블록체인을 나타냄)을 구현하고 다음과 같은 블록체인 모듈과 동일하거나 유사한 서비스 기능을 제공합니다.
팁의 기능 찾기;
기존 블록에 따라 상위 블록을 찾습니다.
지정된 범위에 대한 블록 맵을 검색합니다.
블록 데이터 구조를 업데이트했습니다(모든 블록체인 프로젝트에서 가장 중요한 데이터 구조입니다😯).
영역을 추가하면 더 많은 상위 정보를 저장할 수 있습니다. 블록 다이어그램에서 각 블록은 여러 상위를 가질 수 있기 때문입니다(비트코인은 하나만 가질 수 있음).
프로토콜 계층의 인코딩 및 구문 분석 방법 업데이트(인코딩/디코딩)
업데이트 및 추가된 테스트(테스트)
마이닝 절차 업데이트, 블록체인/블록그래프를 통과할 수 있는 다른 장소가 있습니다.
새로운 P2P 및 RPC 호출 추가
getdagtips rpc call
renderdag rpc call
addrcache p2p call
네트워크 동기화 섹션의 코드를 업데이트했습니다.
시스템 통합 테스트 추가,
블록 그래프(원래 블록체인)를 생성하여 각 블록이 하나 이상의 상위 블록을 가질 수 있는지 확인합니다.
블록 그래프가 서로 다른 전체 노드에서 동기화될 수 있는지 확인합니다.
채굴된 SOTO를 거래에 사용할 수 있는지 확인합니다.
(사실 장황한 말이 많습니다. 프로그램을 작성하지 않는 분들은 퍼블릭 체인 코드를 변경하는 것이 쉬운 일이 아니라는 것을 기억하십시오. 프로그래머에게는 더 좋습니다. :P… 프로그래머 친구, 우리 github를 참조하십시오. 자세한 내용은 )
위의 변경은 여러 단계를 거쳐 이루어졌는데, 그 주된 이유는 한 번에 변경되는 양이 너무 많고 위험도가 너무 높았기 때문입니다. 또한 블록 다이어그램을 이해하고 분석하고 문제를 해결하는 데 도움이 되는 많은 도구를 개발했습니다. 도구는 나중에 공유됩니다.
다들 문자라이브 방송 너무 오래 보셨고 너무 힘들었던걸로 압니다."A picture is worth a thousand words". 야, 네 사진은 어딨어? ? ?
사진이 곧 나옵니다.
좋아 계속하자...
직면한 문제:
프로젝트 개발 과정에서 블록 그래프를 지원하기 위해 많은 블록체인 코드를 업데이트해야 합니다. 일반적으로 세 가지 유형의 문제가 있습니다.
블록체인 가정.
기존 코드에서는 시스템 설계가 다르기 때문에 기본적으로 블록체인을 가정하는 곳이 많습니다.
피어 투 피어(p2p) 동기화.
프로토콜 계층에서 인코딩 및 구문 분석.
블록체인 가정:
코드의 일부를 리팩토링해야 합니다.예를 들어 블록체인에서 블록의 높이는 현재 블록과 제네시스 블록 사이의 블록 수입니다. 블록 그래프에서 블록은 여러 상위 블록을 가질 수 있으며 그 중 일부는 다른 것보다 Genesis에 더 직접적으로 연결될 수 있습니다. 따라서 블록 그래프에서 블록의 높이는 이제 상위 블록의 최대 높이 + 1입니다.
위 그림에서 블록 K의 높이는 B의 경로를 통과하면 2이고 C, D, E를 통과하면 3입니다. 그래서 우리는 그것의 높이를 3으로 간주합니다.
고아 블록 처리:
Z-shaped dag
고아 블록은 이와 같이 풀노드가 합리적인 블록을 받았으나 블록의 과거(과거)를 찾지 못하여 기존 블록 그래프와 연결할 수 없는 경우 해당 블록이 차단되는 것을 고아 블록이라고 합니다.
블록체인에서 고아 블록은 고아 블록부터 상위 블록까지 위에서 아래로 처리됩니다. 블록 그래프에서 이 순회 방법은 문제가 있습니다. 특히 블록 그래프에 Z-saped dag가 있는 경우 일부 블록이 무시됩니다. 모든 블록을 포함하도록 검색 결과의 깊이 우선 정렬을 사용하여 이 알고리즘을 조정했습니다.
(나는 이 구절이 매우 두뇌를 자극하는 것처럼 보인다는 것을 압니다. 그리고 당신은 고아들이 얼마나 불쌍한지, 물론 그들은 다르게 취급되어야 한다고 생각합니다)
고아 블록 처리의 중복 문제(매듭)
블록 간 연결성이 높은 블록 그래프 부분의 경우 각 경로가 연결되기 때문에 고아 블록 처리 시간이 더 오래 걸립니다
연결이 다시 추적됩니다. 이를 위해 처리된 고아 블록과 과거를 기록하는 캐시를 구축했습니다.
(즉, 고아에 대한 과도한 특별 대우도 시스템에 영향을 미칩니다)
도구:
아래에서는 몇 가지 개발 도구를 소개합니다.우리는 다음과 같은 목적으로 soterd의 코드에 색칠 기능을 추가했습니다.
1: 블록다이어그램의 구현이나 동기화 문제를 확인하는데 도움이 됩니다.
2: 상위 계층 애플리케이션(예: 브라우저)에 대한 인터페이스를 제공합니다.
dagviz:
Dagviz : https://github.com/soteria-dag/soterd/tree/master/cmd/dagvizDagviz는 다음을 수행하는 명령줄 도구입니다.
여러 개의 풀 노드(예, 풀 노드)를 시작하고 블록을 채굴 및 교환하고 결과를 단계별로 기록하여 브라우저를 통해 재생할 수 있습니다. 각 블록은 채굴자에 따라 색상이 지정되므로 각 채굴자가 네트워크에 기여하는 것을 매우 직관적으로 볼 수 있습니다. Dagviz는 soterd 및 블록 다이어그램을 표시하는 데 사용할 수 있으며 채굴 공정성에 대한 알고리즘 변경의 영향을 측정하는 데 사용할 수 있습니다.
min :
(dagviz는 컴퓨터에서 여러 개의 전체 노드를 실행하므로 CPU 요구 사항이 낮지 않습니다.)
dagparam 관련 링크 dagparam https://github.com/soteria-dag/soterd/tree/master/cmd/dagparam Dagparam은 다양한 P2P 네트워크 매개변수를 탐색하기 위한 도구입니다. targetTimespan 및 targetTimePerBlock과 같은 매개변수가 블록 그래프의 구성 및 전파에 미치는 영향.
Dagparam은 다양한 P2P 네트워크 매개변수를 탐색하기 위한 도구입니다. targetTimespan 및 targetTimePerBlock과 같은 매개변수가 블록 그래프의 구성 및 전파에 미치는 영향.
예를 들어, 블록 생성 속도가 62.5블록/초, 즉 16밀리초마다 하나의 블록을 초과하면 동기 코드의 성능이 불안정해집니다.
Soterdash는 soterd 네트워크에서 블록 그래프와 전체 노드를 탐색하기 위한 웹 UI입니다. 블록 다이어그램의 전체 또는 일부를 표시할 수 있으며 각 블록을 클릭하면 Header, MerkleRoot 등과 같은 더 자세한 정보가 제공됩니다. 개발 과정에서 Soterdash는 특히 문제 해결에 많은 도움을 주었습니다.
마지막 도구, 마지막이 최고여야 합니다.
go repo sync
대부분의 코드베이스는 Go로 작성되었습니다. Go는 상대 가져오기 경로를 허용하지 않으므로 서로 다른 분기/복사된 코드베이스 간에 코드를 공유하는 과정이 매우 복잡해집니다. 우리의 개발 프로세스에는 여러 버전과 서로 다른 방향의 코드 공유가 포함되므로 서로 다른 코드 기반 간의 동기화를 돕기 위해 이 도구를 직접 개발했습니다. 변경된 부분을 대상 코드 라이브러리로 자동 전송하고 동시에 필요한 변경을 수행합니다(예: 원래 이전 코드 라이브러리를 참조한 위치를 새 코드 라이브러리로 대체함).
- 현재 프로젝트와 종속된 이전 프로젝트를 처리합니다.
-현재 프로젝트와 대상 프로젝트를 스테이징 영역에 복사합니다.
- 현재 및 대상 프로젝트를 git 아카이브와 동기화합니다.
- 대상 프로젝트에서 불필요한 파일을 git rm으로 제거합니다.
-참조된 파일 및 링크를 교체합니다.
- 이동에 대한 모듈 이름을 업데이트합니다.
- 대상 프로젝트에 필요한 새 파일을 추가합니다.
- 현지에 제출
- 대상 git 트리에 커밋합니다.
- 이 도구는 현재 비공개 저장소(private repo)에 있지만 요청 시 오픈 소스를 제공할 수 있습니다. 이 프로젝트는 대부분의 Go 프로그래머에게 도움이 될 수 있습니다.
(반복합니다. 블록체인 프로그래머 뿐만 아니라 모든 Go 프로그래머가 도움이 됩니다. 물론 Go를 사용하지 않는 블록체인 프로그래머도 많습니다.)
오늘도 나눔에 참여해주셔서 감사합니다 기술은 끊임없는 토론의 과정에서 성장합니다. 오늘의 공유는 여기까지 입니다. 다음은 Q&A 세션입니다. 질문해 주세요.
다음은 Q&A 하이라이트에서 발췌한 내용입니다.
seabook: @min@soteria가 오늘 깊이 있는 이야기를 나눴는데, 당신의 경제 모델은 무엇인가요?
min : 아, 그게 우리의 다음 공유 주제입니다.
SSDE (SELF SUSTAINABLE DECENTRALIZED ECONOMY)...You read my mind.
seabook: 간단한 알림을 제공하십시오.
min : https://www.ssde.io/ 현재는 영어로 되어 있으며 공유 콘텐츠는 중국어로 제공됩니다. 우리는 또한 UBI에 대해 이야기하는 두 개의 팟캐스트를 특별히 녹화했습니다.
@min@soteria i enjoy reading your article.
Zhu Jiang²⁰¹⁹: seabook, 당신이 언급한 경제 모델은 거시적 모델 또는 미시적 모델을 말합니다. 거시적 수준에서 @min@soteria가 언급했듯이 우리 SSDE 제안은 보상 메커니즘과 같은 soteria dag 자체의 생태에 관한 것입니다. 인센티브 설계 등 추후 기술나눔에서 다루도록 하겠습니다.
seabook: incentive design
Zhu Jiang²⁰¹⁹: seabook, SSDE 및 soteria는 UBI도 공산주의도 아니며 여전히 노동에 따른 투쟁과 분배의 정신을 옹호합니다. 공정성, 관용, 보안, 개인 정보 보호 및 확장성과 같은 기존 중앙 집중식 경제 시스템에 대한 일부 분산된 개선 사항일 뿐입니다. 인센티브 디자인, 당신도 게임 이론의 팬이잖아요? 나중에 우리의 공유에주의를 기울이십시오.
seabook: 주목하겠습니다.
Claire: 많은 관심 부탁드리며, 모든 방송 플랫폼에 감사드립니다. 추후 Blockdag의 기술에 대해 심도 있는 논의를 계속할 수 있기를 바랍니다. 이것으로 주제 공유를 마칩니다. 매우 하드한 두 가지 주제를 공유한 후 경제, 금융, 개인 정보 보호, 빅 데이터 분석, 블록체인 프로젝트의 비즈니스 모델 등 우리 삶과 밀접하게 관련된 다른 주제를 계속해서 여러분과 공유할 것입니다. 콘텐츠에 관심을 갖고, 후속 주제 공유에 계속 관심을 가져주세요. . . 신중한 준비와 자세한 공유에 대해 초청 연사 Mr. Wu Min에게 다시 한 번 감사드립니다!







