
Claire: Vào ngày 8 tháng 8, chúng tôi đã thực hiện một chủ đề chia sẻ mang tên "Quá khứ và hiện tại của DAG (1)", đã nhận được sự quan tâm và thảo luận nhiệt tình của nhiều bạn bè và nhiều người cũng tham gia [Cộng đồng Magic Piper]. Hôm nay, diễn giả khách mời, ông Wu Min sẽ tiếp tục chia sẻ chủ đề "Quá khứ và hiện tại của DAG (2)", giải thích thêm các chi tiết kỹ thuật, khó khăn, giải pháp và công cụ của BlockDAG, để mọi người hiểu sâu hơn về BlockDAG , chào mừng Bạn có thể đặt câu hỏi sau trong phần Hỏi & Đáp để tìm hiểu sâu hơn. Bây giờ anh Wu Min... 👏👏👏
Bài chia sẻ hôm nay chủ yếu hướng đến các lập trình viên, còn rất nhiều lập trình viên chỉ biết tiếng lóng (slang). Tôi cố gắng chia sẻ một cách dễ hiểu, để mọi người cùng được hưởng lợi.
1: Soteria là công nghệ cơ sở hạ tầng của "Nền kinh tế phi tập trung tự bền vững" (SSDE - Nền kinh tế phi tập trung bền vững).
2: Soteria đang phát triển một giải pháp tổng thể để giải quyết một số vấn đề cấp bách của thế hệ chuỗi khối hiện tại, đồng thời cung cấp một bộ tính năng phù hợp cho nền kinh tế phi tập trung mà nó hình dung - chẳng hạn như thông lượng có thể mở rộng dựa trên blockDAG.
3: DAG được gọi là đồ thị tuần hoàn có hướng.
4: BlockDAG được gọi là biểu đồ khối. Có sự khác biệt rất lớn giữa BlockDAG và TransactionDAG, chi tiết xem phần về DAG giao dịch ở bài chia sẻ trước.
5: Soteria DAG thực sự là một phần mở rộng của thuật toán đồng thuận Bitcoin Nakamoto, làm cho nó trở nên toàn diện và cung cấp các tính năng linh hoạt và có thể mở rộng trên cơ sở đảm bảo tính bảo mật.
Sơ đồ khối trông như thế này:
Trong ví dụ này. Ở dưới cùng là khối GENESIS và các mũi tên chỉ từ một khối đến khối mẹ của nó. Nếu một khối không phải là khối cha của bất kỳ khối nào khác, thì (chúng) được gọi là mẹo của biểu đồ khối hiện tại. Ví dụ, các mẹo trong hình trên là M, J và L. Genesis, parent, và tips đều là những khái niệm rất quan trọng mà chúng tôi sẽ nhắc đến nhiều lần trong phần tiếp theo.
Trên tiền đề của tính toàn diện, làm thế nào để đảm bảo an toàn? Ví dụ, khai thác độc hại thì sao? Ở đây chúng ta sẽ nói về Phantom và Greedy Phantom.
Phantoms là gì?
Phantom là một giao thức nhuộm/phân loại được phát minh bởi Yonatan Sompolinsky và Aviv Zohar. Việc thực hiện nó là ba bước chính sau đây:
1: Một tập hợp các khối được kết nối tốt được xác định. Đây được gọi là bộ màu xanh. Các khối khác, chẳng hạn như chỉ tham chiếu các khối cũ hơn hoặc các khối đã bị ẩn trong một khoảng thời gian, sẽ bị loại khỏi tập hợp màu xanh lam với xác suất cao.
2: Thực hiện sắp xếp tô pô trên sơ đồ khối, ưu tiên các khối trong tập hợp màu xanh lam và xếp sau các khối không thuộc tập hợp màu xanh lam.
3: Khi phân loại và kiểm tra các giao dịch, việc phân loại sơ đồ khối sẽ được sử dụng, các giao dịch hợp pháp sẽ được thông qua và các giao dịch độc hại sẽ bị loại bỏ.
Hãy xem màu sắc của đồ họa này có thể trông như thế nào với Bóng ma hoặc Bóng ma tham lam.
Hình trên là kết quả sau khi tô màu bằng Phantom (Greedy Phantom cũng tương tự), chúng ta cùng xem cách tô màu dưới góc nhìn của khối M nhé. Ở phần giữa của sơ đồ khối, có một tập hợp các khối được kết nối tốt, đồng thời, một số khối (màu đỏ) ở đường viền của sơ đồ khối không được kết nối tốt.
Chúng tôi sử dụng hằng số bên trong hệ thống (k) để đưa ra quyết định này, cách chọn k sẽ được giải thích trong phần chia sẻ kỹ thuật sau này. Điều này có nghĩa là các khối có cùng cấp độ của tập hợp màu đỏ sẽ được sắp xếp phía sau tập hợp các khối màu xanh. Lưu ý rằng không phải tất cả các khối màu đỏ đều được sắp xếp phía sau tất cả các khối màu xanh. Các khối không có màu (J và L) không thuộc "tập quá khứ" của M, chúng sẽ được xếp sau M.
Kết quả sắp xếp (theo quan điểm của M) là:
GENESIS, C, D, E, H, B, I, K, F, M, J, L
Trong quá trình nhuộm và phân loại, Phantom cần:
1: Xác định xem nó có được kết nối tốt hay không bằng cách phân tích quá khứ và tương lai của một khối.
2: Đi qua biểu đồ khối và tô màu từng khối.
3: Sắp xếp.
Chúng ta hãy xem Greedy Phantom là gì, của tác giả Aviv Yaish:
1: Về cơ bản, khái niệm giống như Phantom, mục tiêu của Greedy Phantom là đơn giản và hiệu quả hơn.
2: Phần tô màu được kế thừa từ phần tử xanh nhất.
3: Tô màu và sắp xếp là các chế độ gia tăng.
Phần tô màu được kế thừa từ phần tử xanh nhất, còn được gọi là phần tử tô màu. Tập hợp các cha mẹ có màu sẽ tiếp tục từ khối hiện tại đến khối gốc (genesis), khối này còn được gọi là chuỗi tô màu của khối hiện tại.
Sự khác biệt so với Phantom là màu sắc của Greedy Phantom được kế thừa và thứ tự sắp xếp của các khối trước khối cha màu xanh nhất không thay đổi, ngược lại, trong thuật toán Phantom, vì mỗi khối cần xem xét quá khứ ( quá khứ) và tương lai ( tương lai), vì vậy màu sắc của mỗi khối có thể thay đổi trong tương lai, hoàn toàn phụ thuộc vào cách khối được kết nối trong tương lai.
Chúng ta hãy xem quá trình tô màu của Greedy Phantom khi các khối được thêm vào bản đồ khối.
GIF
Trong hình ảnh động này, ngoài các khối màu xanh lam, đỏ và trong suốt, còn có các khối viền màu xanh lục và nét đứt.
Màu xanh lá cây: đại diện cho đầu nhuộm
Dotted: chuỗi nhuộm của khối hiện tại. (bộ cha mẹ xanh nhất)
Màu xanh lam: Tập hợp các khối màu xanh lam, đề cập đến phối cảnh của khối mới nhất (được kết nối tốt, được kết nối tốt)
Màu đỏ: Các khối bên ngoài tập hợp các khối màu xanh lam, theo quan điểm của khối mới nhất (không được kết nối tốt lắm)
Có thể quan sát thấy rằng một số khối thay đổi màu sắc (giữa màu đỏ và màu xanh) từ phối cảnh của khối mới nhất. Cũng có thể nhận thấy rằng khi các góc khác nhau, các sợi nhuộm cũng khác nhau.
Vào đầu DAG, khi B, C, D và E được thêm vào, chuỗi màu không trở thành các khối mới này. Điều này là do quy tắc ràng buộc nội bộ trong đó khi hai hoặc nhiều khối có màu xanh lam bằng nhau, khối có hàm băm thấp hơn sẽ thắng. Trong ví dụ này, B là chữ cái đầu tiên (thấp nhất) trong số các chữ cái, vì vậy B thắng.
Để tóm tắt sự khác biệt về tính toán giữa Phantom và Greedy Phantom (ảnh hưởng đến thực hành kỹ thuật):
Khi Phantom dye, nó sẽ sử dụng quá khứ và tương lai của một khối. Khi biểu đồ khối phát triển, tương lai của một khối sẽ phát triển vô tận.
Greedy Phantom sẽ chỉ xem xét quá khứ của một khối khi nhuộm, bởi vì biểu đồ khối tiếp tục phát triển, khiến Greedy Phantom trở thành lựa chọn tốt hơn cho kỹ thuật nhuộm/phân loại.
Nếu bạn phải sử dụng Phantom, bạn có thể đạt được hiệu ứng tương tự bằng cách đặt giới hạn dưới và trên của quá trình truyền tải trong quá khứ và tương lai của nút
Tuy nhiên, việc hạn chế quá khứ và tương lai của các nút có thể ảnh hưởng đến hiệu ứng tô màu, vì vậy nó không lý tưởng.
Cơ sở mã của chúng tôi chứa việc triển khai cả hai, mục đích là để so sánh sự khác biệt của chúng trong tương lai và cũng cung cấp thêm tài liệu tham khảo cho các nhà phát triển khác.
Tiếp theo, tôi sẽ giải thích chi tiết cách chúng tôi sửa đổi mã để đạt được mục đích mở rộng chuỗi khối thành sơ đồ khối.
Sơ đồ khối triển khai dự án (BlockDAG) bao gồm các nội dung sau:
Cắt bớt mã hiện có, loại bỏ mã chỉ có thể phục vụ kịch bản chuỗi khối và bao gồm nhiều mã sẽ làm phức tạp quá trình phát triển BlockDAG và không giúp được gì nhiều.
Triển khai mô-đun lõi, đại diện cho sơ đồ khối (mã cũ đại diện cho chuỗi khối) và cung cấp các chức năng dịch vụ giống hoặc tương tự như mô-đun chuỗi khối, chẳng hạn như:
Tìm chức năng của lời khuyên;
Tìm khối mẹ theo khối đã có;
Truy xuất bản đồ khối cho phạm vi đã chỉ định.
Đã cập nhật cấu trúc dữ liệu khối (đây là cấu trúc dữ liệu quan trọng nhất trong tất cả các dự án blockchain😯).
Thêm một khu vực có thể lưu trữ nhiều thông tin cha hơn, bởi vì trong sơ đồ khối, mỗi khối có thể có nhiều cha mẹ (Bitcoin chỉ có thể có một).
Đã cập nhật các phương pháp mã hóa và phân tích cú pháp của lớp giao thức (mã hóa/giải mã)
Cập nhật và bổ sung các bài kiểm tra (thử nghiệm)
Quy trình khai thác được cập nhật, có những nơi khác có thể duyệt qua blockchain/blockgraph:
Đã thêm các cuộc gọi P2P và RPC mới
getdagtips rpc call
renderdag rpc call
addrcache p2p call
Đã cập nhật mã cho phần đồng bộ hóa mạng
Đã thêm các bài kiểm tra tích hợp hệ thống,
Tạo biểu đồ khối (ban đầu là chuỗi khối), xác nhận rằng mỗi khối có thể có nhiều khối gốc.
Xác nhận rằng biểu đồ khối có thể được đồng bộ hóa trên các nút đầy đủ khác nhau.
Xác nhận rằng SOTO đã khai thác có thể được sử dụng cho các giao dịch.
(Thực ra có rất nhiều từ dài dòng. Đối với những người không viết chương trình, chỉ cần nhớ rằng việc thay đổi mã chuỗi công khai không phải là một nhiệm vụ dễ dàng. Nó tốt hơn cho các lập trình viên. :P… Các bạn lập trình viên, hãy xem github của chúng tôi để biết chi tiết)
Những thay đổi trên được thực hiện qua nhiều giai đoạn khác nhau, chủ yếu là do số lượng thay đổi tại một thời điểm quá lớn và rủi ro quá cao. Chúng tôi cũng đã phát triển rất nhiều công cụ giúp hiểu + phân tích sơ đồ khối và khắc phục sự cố. Các công cụ sẽ được chia sẻ sau.
Tôi biết rằng mọi người đã xem chương trình phát sóng trực tiếp văn bản trong một thời gian dài và điều đó đã rất khó khăn. Một trong những câu hỏi lớn trong đầu bạn là,"A picture is worth a thousand words". Bạn ơi, hình của bạn đâu? ? ?
Hình ảnh đến sớm.
được rồi, hãy tiếp tục ...
Những thách thức gặp phải:
Trong quá trình phát triển dự án, nhiều mã blockchain cần được cập nhật để hỗ trợ biểu đồ khối, nhìn chung có ba loại thách thức khác nhau:
Các giả định về chuỗi khối.
Trong mã hiện tại, do thiết kế hệ thống khác nhau, nhiều nơi mặc định sử dụng chuỗi khối.
Đồng bộ hóa ngang hàng (p2p).
Mã hóa và phân tích cú pháp ở lớp giao thức.
Các giả định về chuỗi khối:
Một phần của mã cần được cấu trúc lại, ví dụ: trong chuỗi khối, chiều cao của một khối là số khối giữa khối hiện tại và khối gốc. Trong biểu đồ khối, một khối có thể có nhiều khối chính, một số khối có thể được kết nối trực tiếp với Genesis hơn các khối khác. Vì vậy, trong biểu đồ khối, chiều cao của khối bây giờ là chiều cao tối đa trong khối mẹ + 1.
Trong hình trên, chiều cao của khối K là 2 nếu nó đi qua đường đi của B; là 3 nếu nó đi qua C, D và E. Vì vậy, chúng tôi coi chiều cao của nó là 3.
Xử lý khối mồ côi:
Z-shaped dag
Một khối mồ côi là như thế này, khi một nút đầy đủ nhận được một khối hợp lý, nhưng không thể tìm thấy quá khứ (quá khứ) của khối nên không thể kết nối với biểu đồ khối hiện có, khối đó được gọi là khối mồ côi.
Trong một chuỗi khối, các khối mồ côi được xử lý từ trên xuống, bắt đầu với khối mồ côi và sau đó là khối cha của nó. Trong biểu đồ khối, phương pháp duyệt này có vấn đề, đặc biệt nếu có một đường chéo hình chữ Z trong biểu đồ khối, một số khối sẽ bị bỏ qua. Chúng tôi đã thực hiện các điều chỉnh cho thuật toán này, sử dụng sắp xếp theo chiều sâu kết quả tìm kiếm để bao gồm tất cả các khối.
(Tôi biết đoạn này có vẻ rất nhức não, và bạn cứ nghĩ, trẻ mồ côi thật đáng thương, tất nhiên chúng phải được đối xử khác đi)
Các vấn đề trùng lặp trong xử lý khối mồ côi (nút thắt)
Đối với các phần của biểu đồ khối có tính kết nối cao giữa các khối, quá trình xử lý khối mồ côi sẽ mất nhiều thời gian hơn do mỗi đường dẫn
Các kết nối sẽ được rút lại. Chúng tôi đã tạo một bộ đệm cho việc này, ghi lại các khối mồ côi đã được xử lý và quá khứ của chúng.
(Nói cách khác, đối xử đặc biệt quá nhiều với trẻ mồ côi cũng sẽ ảnh hưởng đến hệ thống)
dụng cụ:
Dưới đây chúng tôi giới thiệu một số công cụ phát triển, chúng tôi đã thêm chức năng tô màu vào code của soterd nhằm mục đích:
1: Nó giúp kiểm tra việc thực hiện sơ đồ khối hoặc các vấn đề đồng bộ hóa. Việc xem sơ đồ khối một cách trực quan sẽ hữu ích hơn nhiều so với việc chỉ xem một tập hợp các giá trị băm trong tệp nhật ký.
2: Cung cấp giao diện cho các ứng dụng lớp trên (chẳng hạn như trình duyệt).
dagviz:
Dagviz : https://github.com/soteria-dag/soterd/tree/master/cmd/dagvizDagviz là một công cụ dòng lệnh
Nó sẽ bắt đầu một số nút đầy đủ soterd (vâng, nút đầy đủ), cho phép chúng khai thác và trao đổi các khối, đồng thời ghi lại kết quả từng bước mà bạn có thể phát lại (thông qua trình duyệt). Mỗi khối được tô màu theo người khai thác của họ, do đó rất trực quan để thấy rằng mỗi người khai thác đóng góp cho mạng. Dagviz có thể được sử dụng để hiển thị soterd và sơ đồ khối, đồng thời có thể được sử dụng để đo lường tác động của các thay đổi thuật toán đối với tính công bằng trong khai thác.
min :
(Hãy nhớ rằng, dagviz sẽ cho phép một số nút đầy đủ chạy trên máy tính của bạn, vì vậy yêu cầu CPU không thấp)
dagparam Liên kết có liên quan dagparam https://github.com/soteria-dag/soterd/tree/master/cmd/dagparam Dagparam là một công cụ để khám phá các tham số mạng ngang hàng khác nhau. Chẳng hạn như targetTimespan và targetTimePerBlock cũng như cách các tham số này ảnh hưởng đến thành phần và sự lan truyền của biểu đồ khối.
Dagparam là một công cụ để khám phá các tham số mạng ngang hàng khác nhau. Chẳng hạn như targetTimespan và targetTimePerBlock cũng như cách các tham số này ảnh hưởng đến thành phần và sự lan truyền của biểu đồ khối.
Ví dụ: khi tốc độ tạo khối vượt quá 62,5 khối/giây, nghĩa là cứ sau 16 mili giây thì có một khối, mã đồng bộ sẽ có hiệu suất không ổn định.
Soterdash là một giao diện người dùng web để duyệt các biểu đồ khối và các nút đầy đủ trong mạng soterd. Nó có thể hiển thị tất cả hoặc một phần của sơ đồ khối và nhấp vào từng khối sẽ cung cấp thông tin chi tiết hơn, chẳng hạn như Tiêu đề, MerkleRoot, v.v. Trong quá trình phát triển của chúng tôi, Soterdash đã giúp đỡ rất nhiều, đặc biệt là khi khắc phục sự cố.
Công cụ cuối cùng, cuối cùng phải là tốt nhất.
go repo sync
Phần lớn cơ sở mã của chúng tôi được viết bằng Go. Go không cho phép các đường dẫn nhập tương đối, điều này làm cho việc chia sẻ mã giữa các cơ sở mã được sao chép/phân nhánh khác nhau trở thành một quy trình rất phức tạp. Quá trình phát triển của chúng tôi liên quan đến nhiều phiên bản và chia sẻ mã theo các hướng khác nhau, vì vậy chúng tôi đã tự phát triển công cụ này để giúp đồng bộ hóa giữa các cơ sở mã khác nhau. Nó tự động chuyển phần đã thay đổi sang thư viện mã mục tiêu, đồng thời thực hiện các thay đổi cần thiết, ví dụ: nơi ban đầu tham chiếu thư viện mã cũ sẽ được thay thế bằng thư viện mã mới, các bước cụ thể như sau:
- Xử lý dự án hiện tại và các dự án tiền nhiệm mà nó phụ thuộc vào.
-Sao chép dự án hiện tại và dự án mục tiêu vào khu vực tổ chức.
- Đồng bộ hóa các dự án hiện tại và mục tiêu với kho lưu trữ git.
- Loại bỏ các file không cần thiết trong project đích bằng git rm.
-Thay thế các tệp và liên kết được tham chiếu.
- Cập nhật tên mô-đun cho go.
- Thêm các tệp mới cần thiết vào dự án mục tiêu.
-Nộp về địa phương
- Cam kết nhắm mục tiêu cây git.
- Công cụ này hiện đang nằm trong kho lưu trữ riêng (private repo), tuy nhiên chúng tôi có thể cung cấp mã nguồn mở theo yêu cầu. Dự án này có thể hữu ích cho phần lớn các lập trình viên cờ vây.
(Nhắc lại, không chỉ các lập trình viên blockchain, tất cả các lập trình viên go đều hữu ích, tất nhiên, có nhiều lập trình viên blockchain không sử dụng go)
Cảm ơn bạn đã tham gia chia sẻ của chúng tôi ngày hôm nay, công nghệ phát triển trong quá trình thảo luận liên tục. Đó là tất cả cho bài chia sẻ hôm nay, sau đây là phần Q&A, mời các bạn đặt câu hỏi.
Sau đây là một đoạn trích từ phần hỏi đáp nổi bật:
seabook: @min@soteria hôm nay đã chia sẻ rất nhiều điều sâu sắc, mô hình kinh tế của bạn là gì?
min : Ồ, đó là chủ đề chia sẻ tiếp theo của chúng ta:
SSDE (SELF SUSTAINABLE DECENTRALIZED ECONOMY)...You read my mind.
seabook: Xin nhắc sơ qua.
min : https://www.ssde.io/ Nó bây giờ bằng tiếng Anh và nội dung được chia sẻ sẽ bằng tiếng Trung Quốc. Chúng tôi cũng đã đặc biệt ghi lại hai podcast nói về UBI.
@min@soteria i enjoy reading your article.
Zhu Jiang²⁰¹⁹: seabook, mô hình kinh tế mà bạn đề cập là mô hình vĩ mô hoặc mô hình vi mô. Ở cấp độ vĩ mô, như @min@soteria đã đề cập, đề xuất SSDE của chúng tôi là về hệ sinh thái của chính soteria dag, chẳng hạn như cơ chế khen thưởng thiết kế khuyến khích, v.v. Chúng tôi sẽ đề cập đến vấn đề này trong phần chia sẻ công nghệ sau.
seabook: incentive design
Zhu Jiang²⁰¹⁹: seabook, SSDE và soteria không phải UBI cũng không phải chủ nghĩa cộng sản, họ vẫn ủng hộ tinh thần đấu tranh và phân phối theo công việc. Nó chỉ là một số cải tiến phi tập trung cho hệ thống kinh tế tập trung hiện có: công bằng, khoan dung, bảo mật, quyền riêng tư và khả năng mở rộng. Thiết kế khuyến khích, bạn cũng là một fan hâm mộ của lý thuyết trò chơi, phải không? Hãy chú ý đến những chia sẻ sau của chúng tôi.
seabook: Tôi sẽ chú ý.
Claire: Rất cảm ơn sự quan tâm của bạn và cảm ơn tất cả các nền tảng phát sóng. Bạn có thể tiếp tục thảo luận sâu hơn về công nghệ của Blockdag sau này. Chủ đề chia sẻ này đến đây là kết thúc. Sau khi chia sẻ hai chủ đề rất hóc búa, chúng tôi sẽ tiếp tục chia sẻ với bạn các chủ đề khác liên quan mật thiết đến cuộc sống của chúng ta, bao gồm kinh tế, tài chính, bảo vệ quyền riêng tư, phân tích dữ liệu lớn, mô hình kinh doanh của các dự án blockchain, v.v. Mọi người rất vui Nếu bạn quan tâm đến nội dung, hãy tiếp tục chú ý đến chủ đề chia sẻ tiếp theo. . . Một lần nữa xin cảm ơn diễn giả khách mời Wu Min đã chuẩn bị chu đáo và chia sẻ chi tiết!

