NEAR 백서

Tác giả Alex Skidanov and Illia Polosukhin · 2019

Khái niệm cơ bản về Sharding

Hãy bắt đầu với cách tiếp cận đơn giản nhất để phân chia. Trong cách tiếp cận này thay vì đang chạy một blockchain, chúng tôi sẽ chạy nhiều cái và gọi mỗi cái đó là blockchain a “mảnh vỡ”. Mỗi phân đoạn sẽ có tập hợp validators riêng. Ở đây và dưới đây chúng tôi sử dụng thuật ngữ chung “validator” để chỉ những người tham gia xác minh giao dịch và tạo ra các khối bằng cách khai thác, chẳng hạn như trong Bằng chứng công việc hoặc thông qua cơ chế bỏ phiếu dựa trên 1Phần này đã được xuất bản trước đây tại https://near.ai/shard1. Nếu bạn đã đọc nó trước đây, chuyển sang phần tiếp theo.

cơ chế. Bây giờ hãy giả sử rằng các phân đoạn không bao giờ giao tiếp với nhau khác. Thiết kế này, mặc dù đơn giản, nhưng cũng đủ để phác thảo một số thách thức lớn ban đầu trong việc bảo vệ. 1.1 Phân vùng trình xác thực và chuỗi Beacon Giả sử hệ thống bao gồm 10 phân đoạn. Thử thách đầu tiên là với mỗi phân đoạn có validator riêng, mỗi phân đoạn hiện kém an toàn hơn 10 lần so với phân đoạn toàn bộ chuỗi. Vì vậy, nếu một chuỗi không được phân đoạn có X validators quyết định phân tách cứng thành một chuỗi phân đoạn và chia X validators thành 10 phân đoạn, bây giờ mỗi phân đoạn chỉ có X/10 validators và việc làm hỏng một phân đoạn chỉ cần làm hỏng 5,1% (51% / 10) trong tổng số validators (xem hình 1), Hình 1: Chia validator thành các phân đoạn điều này đưa chúng ta đến điểm thứ hai: ai chọn validators cho mỗi phân đoạn? Việc kiểm soát 5,1% trong số validator chỉ gây tổn hại nếu tất cả 5,1% trong số validator đó nằm trong cùng một phân đoạn. Nếu validator không thể chọn phân đoạn nào họ sẽ xác thực trong đó, người tham gia kiểm soát 5,1% trong số validator rất khó có thể nhận được tất cả validator của họ trong cùng một phân đoạn, làm giảm đáng kể khả năng thỏa hiệp của họ hệ thống. Hầu như tất cả các thiết kế sharding ngày nay đều dựa vào một số nguồn ngẫu nhiên để gán validators cho phân đoạn. Bản thân tính ngẫu nhiên của blockchain đã là một chủ đề rất khó khăn và nằm ngoài phạm vi của tài liệu này. Bây giờ hãy giả sử có một số nguồn ngẫu nhiên mà chúng ta có thể sử dụng. Chúng tôi sẽ thực hiện nhiệm vụ của validator trong chi tiết hơn ở phần 2.1. Cả tính ngẫu nhiên và phép gán validator đều yêu cầu tính toán không phù hợp cụ thể cho bất kỳ phân đoạn cụ thể nào. Đối với tính toán đó, thực tế tất cả hiện có các thiết kế có blockchain riêng biệt được giao nhiệm vụ thực hiện các hoạt động cần thiết cho việc duy trì toàn bộ mạng. Bên cạnh việc tạo ngẫu nhiêncác số và gán validators cho các phân đoạn, các thao tác này cũng thường bao gồm nhận thông tin cập nhật từ các phân đoạn và chụp ảnh nhanh chúng, xử lý đặt cược và cắt giảm trong hệ thống Proof-of-Stake, đồng thời tái cân bằng các phân đoạn khi điều đó tính năng được hỗ trợ. Chuỗi như vậy được gọi là chuỗi Beacon trong Ethereum, Rơle chuỗi trong PolkaDot và Cosmos Hub trong Cosmos. Trong suốt tài liệu này, chúng tôi sẽ gọi chuỗi đó là chuỗi Beacon. Sự tồn tại của chuỗi Beacon đưa chúng ta đến chủ đề thú vị tiếp theo, phân mảnh bậc hai. 1.2 Phân mảnh bậc hai Sharding thường được quảng cáo như một giải pháp có quy mô vô hạn theo số lượng của các nút tham gia vào hoạt động của mạng. Mặc dù về mặt lý thuyết có thể thiết kế một giải pháp sharding như vậy, bất kỳ giải pháp nào có khái niệm Beacon chuỗi không có khả năng mở rộng vô hạn. Để hiểu lý do tại sao, hãy lưu ý rằng Beacon chuỗi phải thực hiện một số tính toán kế toán, chẳng hạn như gán validators cho phân đoạn hoặc chụp nhanh các khối chuỗi phân đoạn, tỷ lệ thuận với số lượng của các phân đoạn trong hệ thống. Vì bản thân chuỗi Beacon là một blockchain duy nhất, với tính toán bị giới hạn bởi khả năng tính toán của các nút vận hành nó, số lượng mảnh vỡ đương nhiên là có hạn. Tuy nhiên, cấu trúc của một mạng phân mảnh mang lại khả năng nhân lên ảnh hưởng đến bất kỳ cải tiến nào đối với các nút của nó. Hãy xem xét trường hợp trong đó một cách tùy ý sự cải thiện được thực hiện đối với hiệu quả của các nút trong mạng sẽ cho phép họ có thời gian xử lý giao dịch nhanh hơn. Nếu các nút vận hành mạng, bao gồm các nút trong chuỗi Beacon, nhanh hơn bốn lần thì mỗi phân đoạn sẽ có thể xử lý gấp bốn lần giao dịch và chuỗi Beacon sẽ có thể duy trì số phân đoạn nhiều hơn 4 lần. Thông lượng trên toàn hệ thống sẽ tăng theo hệ số 4 × 4 = 16 - do đó có tên là sharding bậc hai. Thật khó để đưa ra một phép đo chính xác về số lượng mảnh vỡ khả thi ngày hôm nay, nhưng không chắc rằng trong tương lai gần, thông lượng nhu cầu của blockchain người dùng sẽ vượt qua giới hạn của phân đoạn bậc hai. Số lượng nút cần thiết để vận hành khối lượng phân đoạn như vậy một cách an toàn có khả năng cao hơn số lượng nút vận hành tất cả blockchain tổng hợp ngày hôm nay. 1.3 Phân chia trạng thái Cho đến nay chúng ta vẫn chưa định nghĩa rõ ràng chính xác cái gì là và cái gì không tách rời. khi một mạng được chia thành các phân đoạn. Cụ thể, các nút trong blockchain thực hiện ba nhiệm vụ quan trọng: không chỉ 1) xử lý các giao dịch mà còn đồng thời 2) chuyển tiếp các giao dịch đã được xác thực và các khối đã hoàn thành tới các nút khác và 3) lưu trữ trạng thái và lịch sử của toàn bộ sổ cái mạng. Mỗi cái trong số ba cái này nhiệm vụ đặt ra yêu cầu ngày càng tăng đối với các nút vận hành mạng:1. Sự cần thiết phải xử lý các giao dịch đòi hỏi nhiều sức mạnh tính toán hơn với số lượng giao dịch được xử lý tăng lên; 2. Sự cần thiết phải chuyển tiếp các giao dịch và khối đòi hỏi nhiều băng thông mạng hơn với số lượng giao dịch được chuyển tiếp tăng lên; 3. Nhu cầu lưu trữ dữ liệu đòi hỏi nhiều bộ nhớ hơn khi trạng thái phát triển. Điều quan trọng là, không giống như sức mạnh xử lý và mạng lưới, yêu cầu lưu trữ tăng lên ngay cả khi tốc độ giao dịch (số lượng giao dịch được xử lý) mỗi giây) không đổi. Từ danh sách trên, có vẻ như yêu cầu về dung lượng lưu trữ sẽ là cấp bách nhất, vì nó là thứ duy nhất đang được tăng lên theo thời gian ngay cả khi số lượng giao dịch mỗi giây không thay đổi, nhưng trên thực tế yêu cầu cấp bách nhất hiện nay là sức mạnh tính toán. Toàn bộ trạng thái của Ethereum tính đến thời điểm viết bài này là 100GB, hầu hết các nút đều có thể dễ dàng quản lý. Nhưng số lượng giao dịch Ethereum có thể xử lý là khoảng 20, đơn hàng cường độ nhỏ hơn mức cần thiết cho nhiều trường hợp sử dụng thực tế. Zilliqa là dự án nổi tiếng nhất xử lý phân đoạn nhưng không lưu trữ. Phân chia quá trình xử lý là một vấn đề dễ dàng hơn vì mỗi nút có toàn bộ trạng thái, nghĩa là các hợp đồng có thể tự do gọi các hợp đồng khác và đọc bất kỳ dữ liệu nào từ blockchain. Cần có một số kỹ thuật cẩn thận để đảm bảo cập nhật từ nhiều phân đoạn cập nhật các phần giống nhau của trạng thái không xung đột. trong những điều đó liên quan đến Zilliqa đang thực hiện một cách tiếp cận tương đối đơn giản2. Mặc dù việc phân chia lưu trữ mà không phân chia quá trình xử lý đã được đề xuất, nhưng cực kỳ không phổ biến. Do đó, trong thực tế phân mảnh lưu trữ, hay còn gọi là State Sharding, hầu như luôn bao hàm việc phân chia quá trình xử lý và phân chia mạng. Trên thực tế, theo State Sharding, các nút trong mỗi phân đoạn đang xây dựng sở hữu blockchain chứa các giao dịch chỉ ảnh hưởng đến phần cục bộ của trạng thái toàn cầu được gán cho phân đoạn đó. Do đó, validator trong phân đoạn chỉ cần lưu trữ phần cục bộ của trạng thái toàn cục và chỉ thực thi, và như vậy chỉ chuyển tiếp các giao dịch ảnh hưởng đến phần trạng thái của chúng. Cái này phân vùng giảm tuyến tính yêu cầu về tất cả sức mạnh tính toán, lưu trữ và băng thông mạng nhưng lại gây ra các vấn đề mới, chẳng hạn như tính sẵn có của dữ liệu và giao dịch chéo, cả hai giao dịch này chúng tôi sẽ đề cập bên dưới. 1.4 Giao dịch chéo Mô hình sharding mà chúng tôi mô tả cho đến nay không hữu ích lắm, bởi vì nếu cá nhân các mảnh không thể giao tiếp với nhau, chúng không tốt hơn nhiều độc lập blockchains. Thậm chí ngày nay, khi không có sharding, vẫn có một nhu cầu rất lớn về khả năng tương tác giữa các blockchain khác nhau. Bây giờ chúng ta chỉ xem xét các giao dịch thanh toán đơn giản, trong đó mỗi người tham gia có tài khoản trên chính xác một phân đoạn. Nếu người ta muốn chuyển tiền từ 2Bạn có thể tìm thấy phân tích của chúng tôi về cách tiếp cận của họ tại đây: https://medium.com/nearprotocol/ 8f9efae0ce3btài khoản này sang tài khoản khác trong cùng một phân đoạn, giao dịch có thể được xử lý hoàn toàn bởi validator trong phân đoạn đó. Tuy nhiên, nếu Alice cư trú trên mảnh vỡ

1 muốn gửi tiền cho Bob, người cư trú trên phân đoạn #2, không phải validators

trên phân đoạn số 1(họ sẽ không thể ghi có vào tài khoản của Bob) cũng như validator trên phân đoạn số 2 (họ sẽ không thể ghi nợ tài khoản của Alice) có thể xử lý toàn bộ giao dịch. Có hai nhóm phương pháp tiếp cận giao dịch chéo: • Đồng bộ: bất cứ khi nào một giao dịch chéo phân đoạn cần được thực hiện, các khối trong nhiều phân đoạn chứa sự chuyển đổi trạng thái liên quan đến tất cả giao dịch được thực hiện cùng một lúc và validator của nhiều phân đoạn cộng tác để thực hiện các giao dịch đó.3 • Không đồng bộ: giao dịch chéo ảnh hưởng đến nhiều phân đoạn được thực thi không đồng bộ trong các phân đoạn đó, phân đoạn “Tín dụng” thực thi một nửa của nó khi nó có đủ bằng chứng cho thấy phân đoạn “Ghi nợ” đã thực hiện phần của nó. Cách tiếp cận này có xu hướng phổ biến hơn do nó sự đơn giản và dễ phối hợp. Hệ thống này ngày nay được đề xuất ở Cosmos, Ethereum Serenity, Near, Kadena và các hệ thống khác. Một vấn đề với điều này Cách tiếp cận nằm ở chỗ nếu các khối được tạo độc lập thì có khả năng khác không là một trong nhiều khối sẽ mồ côi, do đó tạo ra giao dịch chỉ được áp dụng một phần. Hãy xem xét hình 2 mô tả hai cả hai phân đoạn đều gặp phải phân nhánh và giao dịch phân đoạn chéo được ghi vào khối A và X’ tương ứng. Nếu chuỗi A-B và V'-X'-Y'-Z' cuối cùng trở thành chuẩn trong các phân đoạn tương ứng, giao dịch được hoàn tất đầy đủ. Nếu A’-B’-C’-D’ và V-X trở thành chuẩn, thì giao dịch bị hủy bỏ hoàn toàn, điều này có thể chấp nhận được. Nhưng nếu, vì ví dụ: A-B và V-X trở thành hợp quy, khi đó một phần của giao dịch được hoàn tất và một phần bị hủy, tạo ra lỗi về tính nguyên tử. Chúng tôi sẽ đề cập đến cách giải quyết vấn đề này trong các giao thức được đề xuất ở phần thứ hai, khi đề cập đến những thay đổi đối với quy tắc lựa chọn ngã ba và sự đồng thuận các thuật toán được đề xuất cho các giao thức sharded. Lưu ý rằng giao tiếp giữa các chuỗi rất hữu ích bên ngoài blockchain được phân chia quá. Khả năng tương tác giữa các chuỗi là một vấn đề phức tạp mà nhiều dự án đang cố gắng giải quyết. Trong blockchain được phân chia, vấn đề có phần dễ dàng hơn vì cấu trúc khối và sự đồng thuận là giống nhau giữa các phân đoạn và có một chuỗi đèn hiệu có thể được sử dụng để phối hợp. Tuy nhiên, trong một blockchain phân mảnh, tất cả các chuỗi phân đoạn đều giống nhau, trong khi đó trong hệ sinh thái blockchain toàn cầu thì có có rất nhiều blockchain khác nhau, với các trường hợp sử dụng mục tiêu khác nhau, phân cấp và đảm bảo quyền riêng tư. Xây dựng một hệ thống trong đó một tập hợp các chuỗi có các đặc tính khác nhau nhưng sử dụng sự đồng thuận và cấu trúc khối tương tự nhau và có một chuỗi báo hiệu chung có thể tạo ra một hệ sinh thái gồm các blockchain không đồng nhất có 3Cái nhất chi tiết đề nghị được biết đến để cái tác giả của cái này tài liệu là Hợp nhất khối, được mô tả đây: https://ethresear.ch/t/ hợp nhất-khối-và-đồng bộ-thực thi chéo-shard-state/1240Hình 2: Giao dịch chéo không đồng bộ hệ thống con có khả năng tương tác làm việc. Hệ thống như vậy khó có thể có tính năng xoay validator, vì vậy cần thực hiện một số biện pháp bổ sung để đảm bảo an ninh. Cả hai Cosmos và PolkaDot thực sự là những hệ thống như vậy4 1,5 Hành vi độc hại Trong phần này, chúng tôi sẽ xem xét hành vi đối nghịch nào có thể gây hại cho validators tập thể dục nếu họ cố gắng làm hỏng một phân đoạn. Chúng tôi sẽ xem xét các phương pháp cổ điển để tránh làm hỏng các phân đoạn trong phần 2.1. 1.5.1 Những nhánh độc hại Một tập hợp validator độc hại có thể cố gắng tạo một nhánh. Lưu ý rằng nó không quan trọng là sự đồng thuận cơ bản có phải là BFT hay không, làm hỏng đủ số trong số validator sẽ luôn có thể tạo một nhánh. Có nhiều khả năng hơn 50% của một phân đoạn bị hỏng hơn là hơn 50% toàn bộ mạng bị hỏng (chúng tôi sẽ đi sâu hơn vào các xác suất này trong phần 2.1). Như đã thảo luận ở phần 1.4, giao dịch chéo liên quan đến những thay đổi trạng thái nhất định trong nhiều phân đoạn và các khối tương ứng trong các phân đoạn áp dụng những thay đổi trạng thái đó phải đều đã được hoàn thiện (tức là xuất hiện trong các chuỗi đã chọn trên tương ứng của chúng các phân đoạn) hoặc tất cả đều mồ côi (tức là không xuất hiện trong các chuỗi đã chọn trên các phân đoạn tương ứng của chúng). Vì nhìn chung xác suất các mảnh bị hỏng 4Tham khảo bài viết này của Zaki Manian từ Cosmos: https://forum.cosmos.network/ t/polkadot-vs-cosmos/1397/2 và cơn bão tweet này của tác giả đầu tiên của tài liệu này: https://twitter.com/AlexSkidanov/status/1129511266660126720 để so sánh chi tiết của hai

không phải là không đáng kể, chúng tôi không thể cho rằng việc phân nhánh sẽ không xảy ra ngay cả khi đã đạt được sự đồng thuận lớn giữa các phân đoạn validator hoặc nhiều khối đã được được sản xuất trên đầu khối với sự thay đổi trạng thái. Vấn đề này có nhiều giải pháp, giải pháp phổ biến nhất là thỉnh thoảng liên kết chéo của khối chuỗi phân đoạn mới nhất với chuỗi báo hiệu. Cái nĩa quy tắc lựa chọn trong chuỗi phân đoạn sau đó được thay đổi để luôn ưu tiên chuỗi đó được liên kết chéo và chỉ áp dụng quy tắc lựa chọn phân nhánh cụ thể cho các khối đã được được xuất bản kể từ liên kết chéo cuối cùng. 1.5.2 Phê duyệt các khối không hợp lệ Một tập hợp validator có thể cố gắng tạo một khối áp dụng chức năng chuyển trạng thái không chính xác. Ví dụ: bắt đầu với trạng thái mà Alice có 10 token và Bob có 0 token, khối có thể chứa giao dịch gửi 10 token từ Alice tới Bob nhưng cuối cùng lại rơi vào trạng thái mà Alice có 0 tokens và Bob có 1000 tokens, như thể hiện trên hình 3. Hình 3: Ví dụ về khối không hợp lệ Trong blockchain cổ điển không phân đoạn, một cuộc tấn công như vậy là không thể, vì tất cả người tham gia mạng xác nhận tất cả các khối và khối có như vậy quá trình chuyển đổi trạng thái không hợp lệ sẽ bị cả hai nhà sản xuất khối khác từ chối và những người tham gia mạng không tạo khối. Cho dù có ác ý validator tiếp tục tạo các khối trên khối không hợp lệ đó nhanh hơn validator trung thực xây dựng chuỗi chính xác, do đó có chuỗi không hợp lệ khối có thể dài hơn, điều đó không thành vấn đề vì mọi người tham gia đang sử dụng blockchain vì bất kỳ mục đích nào sẽ xác thực tất cả các khối và loại bỏ tất cả các khối được xây dựng trên khối không hợp lệ. Trên hình 4 có năm validator, ba trong số đó là độc hại. Họ đã tạo khối A' không hợp lệ và sau đó tiếp tục xây dựng các khối mới ở trên cùng của nó. Hai validator trung thực đã loại bỏ A’ vì không hợp lệ và đang xây dựng trên cùngHình 4: Cố gắng tạo khối không hợp lệ trong blockchain không được phân đoạn của khối hợp lệ cuối cùng mà họ biết, tạo ra một nhánh. Vì có ít hơn validator ở ngã ba trung thực, chuỗi của họ ngắn hơn. Tuy nhiên, trong blockchain cổ điển không được phân chia, mọi người tham gia sử dụng blockchain cho bất kỳ mục đích nào đều được chịu trách nhiệm xác nhận tất cả các khối họ nhận được và tính toán lại trạng thái. Vì vậy, bất kỳ ai có bất kỳ sự quan tâm nào đến blockchain đều sẽ nhận thấy rằng A’ không hợp lệ và do đó cũng loại bỏ ngay B’, C’ và D’, như vậy lấy chuỗi A-B là chuỗi hợp lệ dài nhất hiện tại. Tuy nhiên, trong phân đoạn blockchain, không người tham gia nào có thể xác thực tất cả giao dịch trên tất cả các phân đoạn, vì vậy họ cần có cách nào đó để xác nhận điều đó mà không điểm trong lịch sử của bất kỳ phân đoạn nào của blockchain không có khối không hợp lệ nào được đưa vào. Lưu ý rằng không giống như fork, liên kết chéo với chuỗi Beacon không phải là giải pháp hiệu quả vì chuỗi Beacon không có khả năng xác thực khối. Nó chỉ có thể xác nhận rằng có đủ số validator trong phân đoạn đó đã ký vào khối (và như vậy đã chứng thực tính đúng đắn của nó). Chúng ta sẽ thảo luận các giải pháp cho vấn đề này trong phần 2.2 dưới đây.

샤딩 기본 사항

샤딩에 대한 가장 간단한 접근 방식부터 시작해 보겠습니다. 이 접근 방식에서는 대신 하나의 blockchain을 실행하면 여러 개를 실행하고 각각의 blockchain을 호출합니다. "샤드". 각 샤드에는 자체 validator 세트가 있습니다. 여기와 아래에서 우리는 거래를 확인하는 참가자를 지칭하는 일반적인 용어 "validator" 작업 증명과 같은 채굴이나 투표 기반을 통해 블록을 생성합니다. 1이 섹션은 이전에 https://near.ai/shard1.에 게시되었습니다. 이전에 읽으셨다면, 다음 섹션으로 건너뛰세요.

기구. 지금은 샤드가 서로 통신하지 않는다고 가정해 보겠습니다. 기타. 이 디자인은 간단하지만 샤딩의 몇 가지 초기 주요 과제를 설명하는 데 충분합니다. 1.1 검증인 파티셔닝 및 비콘 체인 시스템이 10개의 샤드로 구성되어 있다고 가정해 보겠습니다. 첫 번째 과제는 각각의 샤드에 자체 validator이 있으므로 각 샤드는 이제 샤드보다 10배 덜 안전합니다. 전체 체인. 따라서 X validators가 포함된 비샤딩 체인이 하드포크를 결정하면 샤딩된 체인으로 X validators를 10개의 샤드로 분할합니다. 이제 각 샤드는 X/10 validators만 있고, 샤드 하나를 손상시키려면 손상만 필요합니다. 총 validator 수의 5.1%(51% / 10)(그림 1 참조), 그림 1: validator을 여러 샤드로 분할 두 번째 요점은 누가 각 샤드에 대해 validator을 선택합니까? validator의 5.1%를 통제하는 것은 validator의 5.1%가 모두 손상되는 경우에만 해를 끼칩니다. 같은 샤드에 있습니다. validators가 검증할 샤드를 선택할 수 없는 경우 에서 validator의 5.1%를 제어하는 참가자는 모든 것을 얻을 가능성이 거의 없습니다. validator이(가) 동일한 샤드에 저장되어 손상 가능성이 크게 감소합니다. 시스템. 오늘날 거의 모든 샤딩 디자인은 무작위성의 소스에 의존합니다. validators를 샤드에 할당합니다. blockchain의 무작위성 자체는 매우 어려운 주제이며 이 문서의 범위를 벗어납니다. 지금은 우리가 사용할 수 있는 임의성의 소스입니다. 우리는 validator의 과제를 다음에서 다룰 것입니다. 자세한 내용은 섹션 2.1에서 확인하세요. 무작위성과 validator 할당 모두 계산이 필요하지 않습니다. 특정 샤드에만 적용됩니다. 해당 계산을 위해 기존의 거의 모든 디자인에는 작업 수행을 담당하는 별도의 blockchain이 있습니다. 전체 네트워크의 유지 관리에 필요합니다. 무작위로 생성하는 것 외에도번호를 지정하고 샤드에 validator을 할당하는 경우 이러한 작업은 종종 샤드에서 업데이트를 수신하고 스냅샷을 찍고 처리하는 것을 포함합니다. 지분 증명 시스템의 지분 및 삭감, 그리고 그 경우 샤드의 균형을 재조정합니다. 기능이 지원됩니다. 이러한 체인을 Ethereum에서는 릴레이 체인(Beacon Chain)이라고 합니다. PolkaDot의 체인, Cosmos의 Cosmos 허브. 이 문서 전체에서 우리는 이러한 체인을 비콘 체인(Beacon chain)이라고 부를 것입니다. 비콘 체인의 존재는 우리에게 다음 흥미로운 주제인 2차 샤딩. 1.2 2차 샤딩 샤딩은 종종 숫자에 따라 무한정 확장되는 솔루션으로 광고됩니다. 네트워크 운영에 참여하는 노드의 수입니다. 이론적으로는 가능하지만 이러한 샤딩 솔루션, 비콘 개념이 있는 모든 솔루션을 설계합니다. 체인에는 무한한 확장성이 없습니다. 이유를 이해하려면 Beacon을 참고하세요. 체인은 validators 할당과 같은 일부 장부 계산을 수행해야 합니다. 개수에 비례하는 샤드 또는 샤드 체인 블록의 스냅샷 생성 시스템의 샤드 수. 비콘 체인 자체는 단일 blockchain이므로 그것을 운영하는 노드의 계산 능력에 의해 제한된 계산, 샤드의 수는 당연히 제한되어 있습니다. 그러나 샤딩된 네트워크의 구조는 곱셈을 제공합니다. 노드 개선에 영향을 미칩니다. 임의의 경우를 고려하십시오. 네트워크의 노드 효율성이 향상되어 다음을 허용합니다. 거래 처리 시간이 더 빨라집니다. 비콘체인의 노드를 포함하여 네트워크를 운영하는 노드의 경우, 4배 더 빨라지면 각 샤드는 4배 더 많은 작업을 처리할 수 있습니다. 비콘 체인은 4배 더 많은 샤드를 유지할 수 있게 됩니다. 시스템 전체의 처리량은 4 × 4 = 16배로 증가합니다. 따라서 2차 샤딩이라는 이름이 붙었습니다. 샤드 개수를 정확하게 측정하기는 어렵습니다. 현재는 실행 가능하지만 가까운 미래에는 처리량이 증가할 가능성이 낮습니다. blockchain 사용자의 요구 사항은 2차 샤딩의 한계를 넘어설 것입니다. 이러한 대량의 샤드를 안전하게 운영하는 데 필요한 엄청난 수의 노드 모든 노드를 운영하는 노드 수보다 훨씬 더 많을 가능성이 높습니다. blockchain이 오늘 결합되었습니다. 1.3 상태 샤딩 지금까지 우리는 정확히 무엇이 분리되어 있지 않은지 잘 정의하지 못했습니다. 네트워크가 샤드로 분할될 때. 특히 blockchain의 노드 세 가지 중요한 작업을 수행합니다. 1) 트랜잭션을 처리할 뿐만 아니라 또한 2) 검증된 트랜잭션과 완료된 블록을 다른 노드에 전달하고 3) 전체 네트워크 원장의 상태와 기록을 저장합니다. 이 세 가지 각각 작업은 네트워크를 운영하는 노드에 점점 더 많은 요구 사항을 부과합니다.1. 거래를 처리하려면 더 많은 컴퓨팅 성능이 필요합니다. 처리되는 거래 수가 증가합니다. 2. 트랜잭션 및 블록을 중계해야 할 필요성으로 인해 중계되는 트랜잭션 수가 증가함에 따라 더 많은 네트워크 대역폭이 필요합니다. 3. 데이터를 저장해야 하는 필요성은 상태가 성장함에 따라 더 많은 저장 공간을 필요로 합니다. 중요한 것은 처리 능력 및 네트워크와 달리 트랜잭션 속도(처리된 트랜잭션 수)가 증가하더라도 스토리지 요구 사항이 증가한다는 것입니다. 초당)은 일정하게 유지됩니다. 위 목록에서 스토리지 요구 사항은 다음과 같을 수 있습니다. 시간이 지남에 따라 증가하는 유일한 것이기 때문에 가장 시급한 것입니다. 초당 트랜잭션 수가 변하지 않더라도 실제로는 오늘날 가장 시급한 요구 사항은 컴퓨팅 성능입니다. 전체 상태 Ethereum 이 글을 쓰는 시점에서 100GB는 대부분의 노드에서 쉽게 관리할 수 있습니다. 하지만 Ethereum이(가) 처리할 수 있는 거래 수는 약 20건입니다. 많은 실제 사용 사례에 필요한 것보다 크기가 작습니다. Zilliqa는 처리는 샤딩하지만 저장은 하지 않는 가장 잘 알려진 프로젝트입니다. 처리의 샤딩은 각 노드가 전체 정보를 갖기 때문에 문제가 더 쉽습니다. 상태, 즉 계약은 다른 계약을 자유롭게 호출하고 모든 데이터를 읽을 수 있음을 의미합니다. blockchain에서. 업데이트를 확인하려면 신중한 엔지니어링이 필요합니다. 상태의 동일한 부분을 업데이트하는 여러 샤드에서 충돌이 발생하지 않습니다. 에서 그런 점에서 질리카는 상대적으로 단순한 접근 방식을 취하고 있습니다2. 처리를 샤딩하지 않고 스토리지를 샤딩하는 것이 제안되었지만 매우 드물다. 따라서 실제로 스토리지 샤딩, 즉 상태 샤딩은 거의 항상 처리의 샤딩과 네트워크의 샤딩을 의미합니다. 실제로 상태 샤딩에서 각 샤드의 노드는 자신의 노드를 구축합니다. 로컬 부분에만 영향을 미치는 트랜잭션이 포함된 blockchain을 소유합니다. 해당 샤드에 할당된 전역 상태입니다. 따라서 validators는 샤드는 전역 상태의 로컬 부분만 저장하고 실행만 하면 됩니다. 그리고 그 자체로는 국가의 일부에 영향을 미치는 거래만을 중계합니다. 이 파티션은 모든 컴퓨팅 성능, 스토리지 및 네트워크 대역폭이 줄어들지만 데이터 가용성 및 교차 샤드 트랜잭션에 대해서는 아래에서 모두 다루겠습니다. 1.4 교차 샤드 트랜잭션 지금까지 설명한 샤딩 모델은 그다지 유용하지 않습니다. 샤드는 서로 통신할 수 없으며 여러 개보다 나을 것이 없습니다. 독립적인 blockchains. 오늘날에도 샤딩을 사용할 수 없는 경우에는 다양한 blockchain 사이의 상호 운용성에 대한 엄청난 수요. 지금은 각 참가자가 정확히 하나의 샤드에 계정을 갖는 간단한 결제 거래만 고려해 보겠습니다. 다른 곳에서 돈을 이체하고 싶다면 2그들의 접근 방식에 대한 분석은 여기에서 확인할 수 있습니다: https://medium.com/nearprotocol/ 8f9efae0ce3b동일한 샤드 내에서 한 계정에서 다른 계정으로 거래가 처리될 수 있습니다. 전적으로 해당 샤드의 validator에 의해 이루어집니다. 그러나 샤드에 상주하는 앨리스가

1은 샤드 #2에 거주하는 Bob에게 돈을 보내고 싶어하지만 validators도 마찬가지입니다.

샤드 #1(Bob의 계정에 크레딧을 제공할 수 없음)이나 validator의 샤드 샤드 #2(Alice의 계좌에서 인출할 수 없음)는 전체를 처리할 수 있습니다. 거래. 교차 샤드 트랜잭션에는 두 가지 접근 방식이 있습니다. • 동기식: 교차 샤드 트랜잭션을 실행해야 할 때마다 관련된 상태 전환을 포함하는 여러 샤드의 블록 트랜잭션은 모두 동시에 생성되며 여러 샤드의 validators가 이러한 트랜잭션을 실행하기 위해 협력합니다.3 • 비동기식: 여러 샤드에 영향을 미치는 크로스 샤드 트랜잭션 해당 샤드에서 비동기식으로 실행되며 "크레딧" 샤드가 실행됩니다. "Debit" 샤드가 해당 부분을 실행했다는 충분한 증거가 있으면 절반입니다. 이 접근 방식은 다음과 같은 이유로 더 널리 사용되는 경향이 있습니다. 단순성과 조정 용이성. 이 시스템은 현재 Cosmos, Ethereum Serenity, Near, Kadena 등에서 제안되었습니다. 이것에 문제가 있다 접근 방식은 블록이 독립적으로 생성되면 여러 블록 중 하나가 고아가 될 가능성이 0이 아니라는 것입니다. 거래가 부분적으로만 적용되었습니다. 두 가지를 묘사하는 그림 2를 고려하십시오. 포크와 교차 샤드 트랜잭션이 발생한 샤드 이에 따라 블록 A와 X'에 기록되었습니다. 체인이 A-B인 경우 V'-X'-Y'-Z'는 결국 해당 샤드에서 정식이 됩니다. 거래가 완전히 마무리되었습니다. A'-B'-C'-D' 및 V-X가 표준이 되면, 그러면 거래가 완전히 포기되며 이는 허용됩니다. 하지만 만약에, 예를 들어 A-B와 V-X가 정규화되면 트랜잭션의 한 부분이 마무리되고 다른 부분은 폐기되어 원자성 오류가 발생합니다. 우리 두 번째 부분에서는 포크 선택 규칙 및 합의에 대한 변경 사항을 다룰 때 제안된 프로토콜에서 이 문제가 어떻게 해결되는지 다룰 것입니다. 샤딩된 프로토콜을 위해 제안된 알고리즘. 체인 간 통신은 샤딩된 blockchain 외부에서 유용합니다. 너무. 체인 간의 상호 운용성은 많은 프로젝트에서 해결해야 할 복잡한 문제입니다. 해결하려고 노력하고 있습니다. 샤딩된 blockchains에서는 문제가 다소 더 쉽습니다. 블록 구조와 합의는 샤드 전반에 걸쳐 동일하며 조정에 사용할 수 있는 비콘 체인이 있습니다. 그러나 샤딩된 blockchain에서는 모든 샤드 체인은 동일하지만 글로벌 blockchain 생태계에는 다양한 대상 사용 사례, 분산화를 갖춘 다양한 blockchain이 많이 있습니다. 그리고 개인정보 보호를 보장합니다. 일련의 체인이 서로 다른 속성을 가지지만 시스템을 구축하는 것 충분히 유사한 합의 및 블록 구조를 사용하고 공통 비콘 체인을 보유하면 3The 가장 상세한 제안 알려진 에 는 작가 의 이 문서 이다 병합 블록, 설명 여기: https://ethresear.ch/t/ 병합 블록 및 동기 교차 샤드 상태 실행/1240그림 2: 비동기식 크로스 샤드 트랜잭션 작동하는 상호 운용성 하위 시스템. 이러한 시스템에는 validator 회전 기능이 없을 가능성이 높으므로 보안을 보장하기 위해 몇 가지 추가 조치를 취해야 합니다. 둘 다 Cosmos 및 PolkaDot은 사실상 그러한 시스템입니다4 1.5 악의적인 행위 이 섹션에서는 악의적인 validators를 유발할 수 있는 적대적인 행동을 검토합니다. 샤드가 손상되면 실행하세요. 우리는 고전적인 접근 방식을 검토할 것입니다 섹션 2.1에서 샤드 손상을 방지합니다. 1.5.1 악성 포크 일련의 악의적인 validator이 포크 생성을 시도할 수 있습니다. 그렇지 않다는 점 참고하세요 기본 합의가 BFT인지 아닌지가 중요합니다. 충분한 수를 손상시킵니다. validators를 사용하면 항상 포크를 생성할 수 있습니다. 전체 네트워크의 50% 이상이 손상될 가능성보다 단일 샤드의 50% 이상이 손상될 가능성이 훨씬 더 높습니다(우리는 섹션 2.1에서 이러한 확률에 대해 더 자세히 알아보세요. 섹션 1.4에서 논의한 바와 같이, 교차 샤드 트랜잭션에는 여러 샤드의 특정 상태 변경이 포함됩니다. 그러한 상태 변경을 적용하는 샤드의 해당 블록은 다음과 같아야 합니다. 모두 마무리되거나(즉, 해당하는 선택된 체인에 나타남) 샤드) 또는 모두 고아가 됩니다(즉, 해당 샤드의 선택한 체인에 표시되지 않음). 일반적으로 샤드가 손상될 가능성이 높기 때문에 4Cosmos: https://forum.cosmos.network/에서 Zaki Manian이 쓴 이 글을 참조하세요. t/polkadot-vs-cosmos/1397/2 및 이 문서의 첫 번째 작성자가 작성한 트윗 폭풍: 자세한 비교는 https://twitter.com/AlexSkidanov/status/1129511266660126720 둘 중

무시할 수 없는 수준이 아니므로 샤드 validator 사이에서 비잔틴 합의가 이루어지거나 많은 블록이 비잔틴 합의에 도달하더라도 포크가 발생하지 않을 것이라고 가정할 수 없습니다. 상태 변경으로 블록 상단에 생성됩니다. 이 문제에는 여러 가지 해결 방법이 있으며 가장 일반적인 해결 방법은 가끔 발생합니다. 최신 샤드 체인 블록을 비콘 체인에 교차 연결합니다. 포크 그런 다음 샤드 체인의 선택 규칙은 항상 체인을 선호하도록 변경됩니다. 교차 연결되었으며, 해당 블록에 대해서만 샤드별 포크 선택 규칙을 적용합니다. 마지막 교차 링크 이후 게시되었습니다. 1.5.2 잘못된 블록 승인 validator 세트가 상태 전환 기능을 잘못 적용하는 블록을 생성하려고 시도할 수 있습니다. 예를 들어 Alice가 있는 상태에서 시작하면 10개의 token이 있고 Bob은 0개의 token이 있는 경우 블록에는 다음과 같은 트랜잭션이 포함될 수 있습니다. Alice가 Bob에게 10개의 token을 보내지만 결국 Alice가 다음과 같은 상태가 됩니다. 그림 3에 표시된 대로 0 tokens이고 Bob은 1000 tokens를 갖습니다. 그림 3: 유효하지 않은 블록의 예 샤딩되지 않은 전통적인 blockchain에서는 이러한 공격이 불가능합니다. 네트워크 참가자는 모든 블록을 검증하고, 이를 가진 블록은 유효하지 않은 상태 전환은 다른 블록 생산자 모두에 의해 거부됩니다. 블록을 생성하지 않는 네트워크 참여자. 악의적이더라도 validators는 이러한 유효하지 않은 블록 위에 블록을 계속해서 생성합니다. 정직한 validators는 올바른 체인을 구축하여 잘못된 체인을 갖게 됩니다. 블록이 길어도 문제가 되지 않습니다. blockchain는 어떤 목적으로든 모든 블록을 검증하고 모든 블록을 삭제합니다. 유효하지 않은 블록 위에 구축됩니다. 그림 4에는 5개의 validator이 있으며 그 중 3개는 악성입니다. 그들은 유효하지 않은 블록 A'를 생성한 다음 그 위에 계속해서 새 블록을 구축했습니다. 그것의. 두 명의 정직한 validator가 A'를 유효하지 않은 것으로 폐기하고 그 위에 구축하고 있었습니다.그림 4: 샤딩되지 않은 blockchain에서 잘못된 블록을 생성하려고 시도했습니다. 그들에게 알려진 마지막 유효한 블록을 삭제하여 포크를 생성합니다. 수가 적기 때문에 validators 정직한 포크에서는 체인이 더 짧습니다. 그러나 클래식 비샤딩 blockchain에서는 어떤 목적으로든 blockchain을 사용하는 모든 참가자가 수신한 모든 블록의 유효성을 검사하고 상태를 다시 계산하는 일을 담당합니다. 따라서 blockchain에 관심이 있는 사람은 누구나 A'를 관찰할 것입니다. 유효하지 않으므로 B', C' 및 D'도 즉시 폐기합니다. 체인 A-B는 현재 가장 긴 유효한 체인입니다. 그러나 샤딩된 blockchain에서는 참가자가 모든 샤드의 모든 트랜잭션을 확인할 수 없으므로 이를 확인할 수 있는 방법이 필요합니다. blockchain의 샤드 기록 중 유효하지 않은 블록이 포함되지 않았습니다. 포크와 달리 비콘 체인에 대한 교차 연결은 충분한 솔루션이 아닙니다. 비콘 체인에는 검증할 수 있는 능력이 없기 때문입니다. 블록. 해당 샤드에 충분한 수의 validator이 있는지만 확인할 수 있습니다. 블록에 서명했습니다(그리고 그 정확성이 입증되었습니다). 아래 섹션 2.2에서 이 문제에 대한 해결책을 논의하겠습니다.

Hiệu lực của trạng thái và tính sẵn có của dữ liệu

Ý tưởng cốt lõi trong sharded blockchains là hầu hết người tham gia đều vận hành hoặc việc sử dụng mạng không thể xác thực các khối trong tất cả các phân đoạn. Như vậy, bất cứ khi nào bất kỳ người tham gia nào cũng cần tương tác với một phân đoạn cụ thể mà họ thường không thể tải xuống và xác thực toàn bộ lịch sử của phân đoạn. Tuy nhiên, khía cạnh phân vùng của sharding làm tăng tiềm năng đáng kể vấn đề: không tải xuống và xác thực toàn bộ lịch sử của một ứng dụng cụ thể phân đoạn, người tham gia không nhất thiết phải chắc chắn rằng trạng thái của nó 5Phần này, ngoại trừ tiểu mục 2.5.3, đã được xuất bản trước đây tại https://near.ai/ mảnh vỡ2. Nếu bạn đã đọc nó trước đó, hãy chuyển sang phần tiếp theo.

chúng tương tác với nhau là kết quả của một chuỗi khối hợp lệ nào đó và chuỗi đó của các khối thực sự là chuỗi chuẩn trong phân đoạn. Một vấn đề không tồn tại trong blockchain không được phân chia. Đầu tiên chúng tôi sẽ trình bày một giải pháp đơn giản cho vấn đề này đã được đề xuất bằng nhiều giao thức và sau đó phân tích xem giải pháp này có thể bị hỏng như thế nào và điều gì đã có những nỗ lực để giải quyết nó. 2.1 Xoay vòng xác thực Giải pháp đơn giản cho tính hợp lệ của trạng thái được thể hiện trên hình 5: giả sử chúng ta giả sử mà toàn bộ hệ thống có khoảng hàng nghìn validator, trong đó không quá 20% là độc hại hoặc sẽ thất bại (chẳng hạn như không thể trực tuyến để tạo ra một khối). Sau đó, nếu chúng ta lấy mẫu 200 validators thì xác suất nhiều hơn 1 3 không đạt trong mục đích thực tế có thể được coi là bằng không. Hình 5: Đang lấy mẫu validators 1 3 là một ngưỡng quan trọng. Có một nhóm các giao thức đồng thuận, được gọi là BFT giao thức đồng thuận, đảm bảo rằng chỉ cần ít hơn 1 3 trong số người tham gia thất bại, do vi phạm hoặc do hành động theo cách nào đó vi phạm giao thức thì sẽ đạt được sự đồng thuận. Với giả định về tỷ lệ phần trăm validator trung thực này, nếu tập hợp hiện tại validator trong một phân đoạn cung cấp cho chúng ta một số khối, giải pháp ngây thơ giả định rằng khối đó hợp lệ và nó được xây dựng dựa trên những gì validator được cho là chuỗi chuẩn cho phân đoạn đó khi họ bắt đầu xác thực. validators đã học chuỗi chuẩn từ tập hợp validator trước đó, cũng bằng cách đó giả định được xây dựng trên khối đứng đầu chuỗi kinh điển trước đó. Bằng quy nạp, toàn bộ chuỗi là hợp lệ và vì không có tập hợp validator nào tại bất kỳ thời điểm nào sản xuất nĩa, giải pháp ngây thơ cũng chắc chắn rằng hiện tại chuỗi là chuỗi duy nhất trong phân đoạn. Xem hình 6 để hình dung.

Hình 6: blockchain với mỗi khối được hoàn tất thông qua sự đồng thuận BFT Giải pháp đơn giản này sẽ không hiệu quả nếu chúng ta giả sử rằng validator có thể bị hỏng một cách thích ứng, đây không phải là một giả định vô lý6. Thích ứng làm hỏng một phân đoạn trong hệ thống có 1000 phân đoạn sẽ rẻ hơn đáng kể hơn là làm hỏng toàn bộ hệ thống. Do đó, tính bảo mật của giao thức giảm tuyến tính theo số lượng phân đoạn. Để có sự chắc chắn về tính hợp lệ của một khối, chúng ta phải biết rằng tại bất kỳ thời điểm nào trong lịch sử không có phân đoạn nào trong hệ thống có phần lớn validator thông đồng; với những đối thủ có khả năng thích ứng, chúng ta không còn có sự chắc chắn như vậy. Như chúng ta đã thảo luận trong phần 1.5, việc thông đồng với validator có thể gây ảnh hưởng hai hành vi độc hại cơ bản: tạo nhánh và tạo các khối không hợp lệ. Các nhánh độc hại có thể được xử lý bằng các khối được liên kết chéo với chuỗi Beacon thường được thiết kế để có độ bảo mật cao hơn đáng kể so với các chuỗi khác. những chuỗi mảnh vỡ. Tuy nhiên, việc tạo ra các khối không hợp lệ là một vấn đề đáng kể hơn. vấn đề đầy thách thức cần giải quyết. 2.2 Hiệu lực của tiểu bang Hãy xem hình 7 trong đó Shard #1 bị hỏng và một tác nhân độc hại tạo ra khối B không hợp lệ. Giả sử trong khối B này 1000 token được đúc từ mỏng phát sóng trên tài khoản của Alice. Sau đó, tác nhân độc hại tạo ra khối C hợp lệ (trong một cảm thấy rằng các giao dịch trong C được áp dụng chính xác) trên B, làm xáo trộn khối B không hợp lệ và bắt đầu giao dịch chéo tới Phân đoạn số 2 chuyển 1000 tokens đó vào tài khoản của Bob. Từ lúc này trở đi không đúng cách đã tạo token nằm trên blockchain hoàn toàn hợp lệ trong Phân đoạn #2. Một số cách tiếp cận đơn giản để giải quyết vấn đề này là: 6Đọc cái này bài viết cho chi tiết trên làm thế nào thích nghi tham nhũng có thể được mang theo ra: https://medium.com/nearprotocol/d859adb464c8. cho hơn thế nữa chi tiết trên thích nghi tham nhũng, đọc https://github.com/ethereum/wiki/wiki/Sharding-FAQ# mô hình bảo mật mà chúng tôi đang vận hành là gìHình 7: Giao dịch chéo từ chuỗi có khối không hợp lệ 1. Dành cho validator của Phân đoạn số 2 để xác thực khối nơi giao dịch được thực hiện được khởi xướng. Điều này sẽ không hoạt động ngay cả trong ví dụ trên, vì khối C dường như hoàn toàn hợp lệ. 2. Dành cho validator trong Phân đoạn số 2 để xác thực một số lượng lớn khối trước khối mà giao dịch được bắt đầu. Đương nhiên, đối với bất kỳ số lượng khối N nào được xác nhận bởi phân đoạn nhận độc hại validators có thể tạo N+1 khối hợp lệ lên trên khối không hợp lệ mà họ được sản xuất. Một ý tưởng đầy hứa hẹn để giải quyết vấn đề này là sắp xếp các mảnh thành một đồ thị vô hướng trong đó mỗi phân đoạn được kết nối với một số phân đoạn khác và chỉ cho phép giao dịch chéo giữa các phân đoạn lân cận (ví dụ: đây là cách Về cơ bản, sharding của Vlad Zamfir hoạt động7 và ý tưởng tương tự được sử dụng trong Kadena Chuỗi mạng [1]). Nếu cần một giao dịch chéo giữa các phân đoạn không phải hàng xóm, giao dịch đó được định tuyến qua nhiều phân đoạn. Trong thiết kế này validator trong mỗi phân đoạn phải xác thực cả hai khối trong phân đoạn của chúng cũng như tất cả các khối trong tất cả các mảnh lân cận. Hãy xem xét một hình dưới đây với 10 phân đoạn, mỗi phân đoạn có bốn phân đoạn lân cận và không có phân đoạn nào yêu cầu nhiều hơn hơn hai bước nhảy cho giao tiếp chéo được hiển thị trên hình 8. Phân đoạn số 2 không chỉ xác thực blockchain của chính nó mà còn blockchain của tất cả những người hàng xóm, bao gồm cả Shard #1. Vì vậy, nếu một tác nhân độc hại trên Shard #1 đang cố gắng tạo khối B không hợp lệ, sau đó xây dựng khối C lên trên khối đó và bắt đầu một giao dịch chéo, giao dịch chéo đó sẽ không diễn ra kể từ khi Phân đoạn số 2 sẽ xác thực toàn bộ lịch sử của Phân đoạn số 1 sẽ khiến nó xác định khối B không hợp lệ. 7Đọc thêm về thiết kế tại đây: https://medium.com/nearprotocol/37e538177ed9

Hình 8: Một giao dịch chéo không hợp lệ trong hệ thống giống như chainweb sẽ bị phát hiện Mặc dù việc làm hỏng một phân đoạn không còn là một cuộc tấn công khả thi nữa, việc làm hỏng một vài mảnh vẫn còn là một vấn đề. Trên hình 9, một đối thủ đang làm hỏng cả Shard

1 và Shard #2 thực hiện thành công giao dịch chéo tới Shard #3

với số tiền từ khối B không hợp lệ: Hình 9: Một giao dịch chéo không hợp lệ trong hệ thống giống như chainweb sẽ không bị phát hiện Phân đoạn số 3 xác thực tất cả các khối trong Phân đoạn số 2, nhưng không có trong Phân đoạn số 1 và không có cách nào để phát hiện khối độc hại. Có hai hướng chính để giải quyết đúng đắn tính hợp lệ của trạng thái:

và bằng chứng mật mã của tính toán. 2.3 ngư dân Ý tưởng đằng sau cách tiếp cận đầu tiên là như sau: bất cứ khi nào một tiêu đề khối được truyền đạt giữa các chuỗi vì bất kỳ mục đích nào (chẳng hạn như liên kết chéo với chuỗi đèn hiệu hoặc giao dịch chéo), có một khoảng thời gian trong mà bất kỳ validator trung thực nào cũng có thể cung cấp bằng chứng cho thấy khối không hợp lệ. Ở đó là những công trình khác nhau cho phép chứng minh rất ngắn gọn rằng các khối không hợp lệ, do đó chi phí liên lạc cho các nút nhận sẽ nhỏ hơn nhiều hơn là nhận được một khối đầy đủ. Với cách tiếp cận này miễn là có ít nhất một validator trung thực trong mảnh vỡ, hệ thống được an toàn. Hình 10: ngư dân Đây là cách tiếp cận chủ đạo (ngoài việc giả vờ như vấn đề không tồn tại) trong số các giao thức được đề xuất hiện nay. Tuy nhiên, cách tiếp cận này có hai nhược điểm lớn: 1. Thời gian thử thách cần phải đủ dài đối với người trung thực validator để nhận biết một khối đã được tạo, tải xuống, xác minh đầy đủ và chuẩn bị thử thách nếu khối không hợp lệ. Giới thiệu một thời kỳ như vậy sẽ làm chậm đáng kể các giao dịch chéo. 2. Sự tồn tại của giao thức thử thách tạo ra một hướng tấn công mới khi các nút độc hại spam với các thách thức không hợp lệ. Một giải pháp rõ ràng của vấn đề này là bắt những người thách đấu gửi một số tiền tokens được trả lại nếu thử thách hợp lệ. Đây chỉ là giải pháp một phần vì nó vẫn có thể có lợi cho kẻ thù gửi thư rác vào hệ thống (và đốt cháy tiền gửi) với những thách thức không hợp lệ, ví dụ để ngăn chặn hợp lệthách thức từ validator trung thực khi vượt qua. Những cuộc tấn công này là được gọi là Cuộc tấn công đau buồn. Xem phần 3.7.2 để biết cách giải quyết điểm sau. 2.4 Lập luận ngắn gọn về kiến thức không tương tác Giải pháp thứ hai cho vấn đề hỏng nhiều phân đoạn là sử dụng một số loại cấu trúc mật mã cho phép người ta chứng minh rằng một tính toán nhất định (chẳng hạn như như việc tính toán một khối từ một tập hợp các giao dịch) đã được thực hiện chính xác. Những công trình như vậy tồn tại, ví dụ: zk-SNARK, zk-STARK và một số loại khác, và một số được sử dụng tích cực trong các giao thức blockchain ngày nay để thanh toán riêng tư, đáng chú ý nhất là ZCash. Vấn đề chính với những thứ nguyên thủy như vậy là chúng nổi tiếng là tính toán chậm. Ví dụ. Giao thức Coda, sử dụng zk-SNARK cụ thể là để chứng minh rằng tất cả các khối trong blockchain đều hợp lệ, được nói trong một trong số các cuộc phỏng vấn rằng có thể mất 30 giây cho mỗi giao dịch để tạo bằng chứng (con số này có lẽ bây giờ đã nhỏ hơn). Điều thú vị là, bằng chứng không cần phải được tính toán bởi một bên đáng tin cậy, vì bằng chứng không chỉ chứng thực tính hợp lệ của tính toán mà nó được xây dựng mà còn giá trị pháp lý của chính bằng chứng. Vì vậy, việc tính toán các chứng minh đó có thể được chia giữa một nhóm người tham gia với mức độ dư thừa ít hơn đáng kể so với cần thiết để thực hiện một số tính toán không tin cậy. Nó cũng cho phép người tham gia những người tính toán zk-SNARK để chạy trên phần cứng đặc biệt mà không làm giảm phi tập trung hóa hệ thống. Những thách thức của zk-SNARK, ngoài hiệu suất, là: 1. Sự phụ thuộc vào các mật mã nguyên thủy ít được nghiên cứu và thử nghiệm ít thời gian hơn; 2. ”Chất thải độc hại” — zk-SNARK phụ thuộc vào thiết lập đáng tin cậy trong đó một nhóm mọi người thực hiện một số tính toán và sau đó loại bỏ kết quả trung gian các giá trị của phép tính đó. Nếu tất cả những người tham gia thủ tục thông đồng và giữ nguyên các giá trị trung gian, có thể tạo ra bằng chứng giả; 3. Độ phức tạp cao hơn được đưa vào thiết kế hệ thống; 4. zk-SNARK chỉ hoạt động đối với một tập hợp con các phép tính có thể, do đó, một giao thức với ngôn ngữ Turing-complete smart contract sẽ không thể sử dụng SNARK để chứng minh tính hợp lệ của chuỗi. 2,5 Tính sẵn có của dữ liệu Vấn đề thứ hai chúng ta sẽ đề cập đến là tính sẵn có của dữ liệu. Nói chung các nút việc vận hành một blockchain cụ thể được tách thành hai nhóm: Nút đầy đủ, những thứ tải xuống mọi khối đầy đủ và xác thực mọi giao dịch và Light Các nút chỉ tải xuống tiêu đề khối và sử dụng bằng chứng Merkle cho các bộ phận của nhà nước và các giao dịch mà họ quan tâm, như thể hiện trên hình 11.

Hình 11: Cây Merkle Bây giờ nếu phần lớn các nút đầy đủ thông đồng với nhau, chúng có thể tạo ra một khối, hợp lệ hoặc không hợp lệ và gửi hash của nó tới các nút ánh sáng nhưng không bao giờ tiết lộ toàn bộ nội dung của khối. Có nhiều cách khác nhau để họ có thể hưởng lợi từ nó. Ví dụ, xét hình 12: Hình 12: Vấn đề về tính sẵn có của dữ liệu Có ba khối: khối trước, A, được tạo bởi validators trung thực; hiện tại, B, có validator thông đồng; và loại tiếp theo, C, cũng sẽ được sản xuất bởi validators trung thực (blockchain được mô tả ở góc dưới cùng bên phải). Bạn là một thương gia. validators của khối hiện tại (B) đã nhận được khối A từ validator trước đó, đã tính toán một khối trong đó bạn nhận được tiền,và gửi cho bạn tiêu đề của khối đó cùng với bằng chứng Merkle về trạng thái bạn có tiền (hoặc bằng chứng Merkle về giao dịch hợp lệ gửi tiền cho bạn). Tin chắc rằng giao dịch đã hoàn tất, bạn cung cấp dịch vụ. Tuy nhiên, validator không bao giờ phân phối toàn bộ nội dung của khối B cho bất cứ ai. Do đó, validator trung thực của khối C không thể truy xuất khối và hoặc bị buộc phải đình trệ hệ thống hoặc xây dựng trên đỉnh A, tước bỏ tư cách của bạn người buôn tiền. Khi chúng tôi áp dụng kịch bản tương tự cho sharding, các định nghĩa về đầy đủ và nút nhẹ thường áp dụng cho mỗi phân đoạn: validators trong mỗi lần tải xuống phân đoạn chặn trong phân đoạn đó và xác thực mọi giao dịch trong phân đoạn đó, nhưng các giao dịch khác các nút trong hệ thống, bao gồm cả các nút có trạng thái chuỗi phân đoạn nhanh vào chuỗi đèn hiệu, chỉ tải xuống các tiêu đề. Do đó, validator trong phân đoạn là các nút đầy đủ hiệu quả cho phân đoạn đó, trong khi những người tham gia khác trong hệ thống, bao gồm chuỗi đèn hiệu, hoạt động như các nút ánh sáng. Để cách tiếp cận của ngư dân mà chúng ta đã thảo luận ở trên có hiệu quả, validators trung thực cần có khả năng tải xuống các khối được liên kết chéo với chuỗi đèn hiệu. Nếu validator độc hại liên kết chéo tiêu đề của một khối không hợp lệ (hoặc sử dụng nó để bắt đầu một giao dịch chéo), nhưng không bao giờ phân phối khối, thì giao dịch trung thực validator không có cách nào để tạo ra thử thách. Chúng tôi sẽ đề cập đến ba cách tiếp cận để giải quyết vấn đề này, bổ sung cho lẫn nhau. 2.5.1 Bằng chứng về quyền nuôi con Vấn đề trước mắt nhất cần giải quyết là liệu một khối có sẵn một lần hay không nó được xuất bản. Một ý tưởng được đề xuất là có cái gọi là Công chứng viên luân phiên giữa các phân đoạn thường xuyên hơn validator có công việc duy nhất là tải xuống chặn và chứng thực rằng họ có thể tải xuống nó. Họ có thể được luân chuyển thường xuyên hơn vì họ không cần tải xuống toàn bộ trạng thái của phân đoạn, không giống như validator không thể xoay thường xuyên vì chúng phải tải xuống trạng thái của phân đoạn mỗi lần chúng xoay, như thể hiện trên hình 13. Vấn đề với cách tiếp cận ngây thơ này là không thể chứng minh sau này cho dù Công chứng viên có thể tải xuống khối hay không, vì vậy Công chứng viên có thể chọn luôn chứng thực rằng họ có thể tải xuống khối mà không cần thậm chí còn cố gắng lấy lại nó. Một giải pháp cho vấn đề này là Công chứng viên cung cấp một số bằng chứng hoặc đặt cược số lượng token chứng thực rằng khối đã được đã tải xuống. Một giải pháp như vậy được thảo luận ở đây: https://ethresear.ch/t/ Trái phiếu lưu ký thân thiện với tập hợp 1 bit/2236. 2.5.2 Mã xóa Khi một nút nhẹ cụ thể nhận được hash của một khối, để tăng sức mạnh của nút đó tin rằng khối đó có sẵn, nó có thể thử tải xuống một vài thông tin ngẫu nhiên các mảnh của khối. Đây không phải là một giải pháp hoàn chỉnh, vì trừ khi các nút ánh sáng tải xuống chung toàn bộ khối mà nhà sản xuất khối độc hại có thể chọn

Hình 13: Trình xác thực cần phải tải xuống trạng thái và do đó không thể xoay được thường xuyên để giữ lại các phần của khối không được tải xuống bởi bất kỳ nút ánh sáng nào, do đó vẫn làm cho khối không có sẵn. Một giải pháp là sử dụng một cấu trúc có tên là Erasure Codes để thực hiện điều đó. để khôi phục toàn bộ khối ngay cả khi chỉ có một phần của khối, như được hiển thị trên hình 14. Hình 14: Merkle tree được xây dựng dựa trên dữ liệu đã mã hóa bị xóa Cả Polkadot và Ethereum Serenity đều có thiết kế xoay quanh ý tưởng này cung cấp một cách để các nút nhẹ có thể tin cậy một cách hợp lý rằng các khối có sẵn. Phương pháp Ethereum Serenity có mô tả chi tiết trong [2].2.5.3 Cách tiếp cận của Polkadot đối với tính khả dụng của dữ liệu Trong Polkadot, giống như trong hầu hết các giải pháp phân đoạn, mỗi phân đoạn (được gọi là parachain) chụp nhanh các khối của nó vào chuỗi báo hiệu (được gọi là chuỗi chuyển tiếp). Giả sử có 2f + 1 validator trên chuỗi chuyển tiếp. Các nhà sản xuất khối của khối parachain, được gọi là đối chiếu, sau khi khối parachain được tạo ra, hãy tính toán một phiên bản mã hóa xóa của khối bao gồm 2f +1 phần sao cho bất kỳ phần f nào cũng đủ để xây dựng lại khối. Sau đó, họ phân phối một phần cho mỗi validator trên chuỗi rơle. Chuỗi chuyển tiếp cụ thể validator sẽ chỉ đăng nhập vào chuỗi chuyển tiếp khối nếu họ có phần của mình cho mỗi khối parachain được chụp nhanh vào khối chuỗi chuyển tiếp như vậy. Do đó, nếu khối chuỗi chuyển tiếp có chữ ký từ 2f + 1 validators và miễn là không quá f trong số chúng vi phạm giao thức, mỗi khối parachain có thể được xây dựng lại bằng cách tìm nạp các phần từ validators tuân theo giao thức. Xem hình 15. Hình 15: Tính khả dụng của dữ liệu Polkadot 2.5.4 Tính sẵn có của dữ liệu dài hạn Lưu ý rằng tất cả các phương pháp được thảo luận ở trên chỉ chứng thực thực tế là một khối đã được xuất bản và hiện có sẵn. Các khối sau này có thể không còn khả dụng vì nhiều lý do: các nút ngoại tuyến, các nút cố tình xóa lịch sử dữ liệu và những thứ khác. Sách trắng đáng được đề cập giải quyết vấn đề này là Polyshard [3], sử dụng mã xóa để cung cấp các khối trên các phân đoạn ngay cả khi một số mảnh vỡ hoàn toàn mất dữ liệu của họ. Thật không may, cách tiếp cận cụ thể của họ đòi hỏi tất cả các phân đoạn để tải xuống các khối từ tất cả các phân đoạn khác, điều này bị cấm đắt tiền. Tính khả dụng lâu dài không phải là vấn đề cấp bách: vì không có người tham gia trong hệ thống dự kiến ​​sẽ có khả năng xác nhận tất cả các chuỗi trong tất cả

phân đoạn, tính bảo mật của giao thức phân đoạn cần phải được thiết kế theo cách cách mà hệ thống được an toàn ngay cả khi một số khối cũ trong một số phân đoạn trở thành hoàn toàn không có sẵn.

상태 유효성 및 데이터 가용성

샤딩된 blockchains의 핵심 아이디어는 대부분의 참가자가 네트워크를 사용하면 모든 샤드의 블록을 확인할 수 없습니다. 이처럼, 언제든지 모든 참가자는 일반적으로 사용할 수 없는 특정 샤드와 상호 작용해야 합니다. 샤드의 전체 기록을 다운로드하고 검증합니다. 그러나 샤딩의 파티셔닝 측면은 상당한 잠재력을 불러일으킵니다. 문제: 특정 기록의 전체 기록을 다운로드하고 검증하지 않고 샤드 참가자는 반드시 상태가 무엇인지 확신할 수 없습니다. 5하위 섹션 2.5.3을 제외하고 이 섹션은 이전에 https://near.ai/에 게시되었습니다. 샤드2. 이전에 읽으셨다면 다음 섹션으로 건너뛰세요.

그들이 상호 작용하는 것은 유효한 블록 시퀀스의 결과이며 그러한 시퀀스는 of block은 실제로 샤드의 정식 체인입니다. 그렇지 않은 문제 샤딩되지 않은 blockchain에 존재합니다. 먼저 제안된 이 문제에 대한 간단한 해결책을 제시하겠습니다. 여러 프로토콜을 사용하여 이 솔루션이 어떻게 중단될 수 있는지 분석하고 이를 해결하기 위한 시도가 이루어졌습니다. 2.1 검증인 교체 상태 타당성에 대한 순진한 해결책은 그림 5에 나와 있습니다. 전체 시스템에는 수천 개의 validator이 있으며 그 중 20% 이하가 악의적이거나 다른 방식으로 실패합니다(예: 온라인으로 블록을 생성합니다). 그런 다음 200개의 validator을 샘플링하면 확률은 1개 이상의 실용적인 목적으로 3개의 실패는 0으로 가정될 수 있습니다. 그림 5: 샘플링 validators 1 3은 중요한 기준점이다. 합의 프로토콜 계열이 있습니다. BFT 합의 프로토콜은 1보다 적은 기간 동안 이를 보장합니다. 3개 참가자가 충돌하거나 규정을 위반하는 방식으로 행동하여 실패합니다. 프로토콜을 통해 합의에 도달할 것입니다. 정직한 validator 백분율을 가정하여 현재 세트가 샤드의 validators는 우리에게 일부 블록을 제공하며 순진한 솔루션은 가정합니다. 블록이 유효하고 validators가 믿었던 것을 기반으로 구축되었습니다. 검증을 시작할 때 해당 샤드에 대한 정식 체인입니다. validators 이전 validator 세트에서 표준 체인을 배웠습니다. 캐노니컬 체인의 선두인 블록 위에 구축된 가정 그 전에. 유도에 의해 전체 체인이 유효하며 validators 세트가 없기 때문에 어느 시점에서든 포크가 생성되면 순진한 솔루션은 현재의 체인은 샤드의 유일한 체인입니다. 시각화는 그림 6을 참조하세요.

그림 6: BFT 합의를 통해 확정된 각 블록의 blockchain validators가 다음과 같을 수 있다고 가정하면 이 간단한 솔루션은 작동하지 않습니다. 이는 적응적으로 손상되었으며 이는 불합리한 가정이 아닙니다6. 적응적으로 1000개의 샤드가 있는 시스템에서 단일 샤드를 손상시키는 것이 훨씬 저렴합니다. 전체 시스템을 손상시키는 것보다. 따라서 프로토콜의 보안은 샤드 수에 따라 선형적으로 감소합니다. 타당성에 대한 확신을 갖기 위해 블록을 생성하려면 역사상 어느 시점에서든 시스템의 샤드가 없음을 알아야 합니다. validator의 대다수가 공모하고 있습니다. 적응형 적과 함께라면 우리는 더 이상 그런 확신. 섹션 1.5에서 논의한 것처럼 validators의 공모는 행사할 수 있습니다. 두 가지 기본적인 악의적 행동: 포크 생성 및 유효하지 않은 블록 생성. 악의적인 포크는 일반적으로 기존보다 훨씬 더 높은 보안을 갖도록 설계된 비콘 체인에 블록을 교차 연결하여 처리할 수 있습니다. 샤드 체인. 그러나 유효하지 않은 블록을 생성하는 것은 훨씬 더 많은 것입니다. 해결해야 할 어려운 문제. 2.2 상태 유효성 샤드 #1이 손상되고 악의적인 행위자가 생성하는 그림 7을 생각해 보세요. 유효하지 않은 블록 B. 이 블록 B에서 1000 tokens가 씬에서 생성되었다고 가정합니다. 앨리스 계정으로 방송됩니다. 그런 다음 악의적인 행위자는 유효한 블록 C를 생성합니다( C의 트랜잭션이 올바르게 적용되었음을 감지) B 위에서 난독화 유효하지 않은 블록 B를 삭제하고 샤드 #2에 대한 교차 샤드 트랜잭션을 시작합니다. 1000 token을 Bob의 계좌로 이체합니다. 지금부터 부적절하게 생성된 token은 샤드 #2의 완전히 유효한 blockchain에 상주합니다. 이 문제를 해결하기 위한 몇 가지 간단한 접근 방식은 다음과 같습니다. 6읽기 이 기사 에 대한 세부사항 에 어떻게 적응형 부패 할 수 있다 있다 운반 밖으로: https://medium.com/nearprotocol/d859adb464c8. 에 대한 더 세부사항 에 적응형 부패, 읽다 https://github.com/ethereum/wiki/wiki/Sharding-FAQ# 우리가 운영하고 있는 보안 모델은 무엇입니까?그림 7: 유효하지 않은 블록이 있는 체인의 교차 샤드 트랜잭션 1. 샤드 #2의 validators에 대해 트랜잭션이 발생한 블록을 검증합니다. 시작됩니다. 위의 예에서도 블록 C 때문에 작동하지 않습니다. 완전히 유효한 것 같습니다. 2. 샤드 #2의 validators에서 트랜잭션이 시작되는 블록 이전에 있는 다수의 블록을 검증합니다. 당연히, 수신 샤드에 의해 검증된 블록 수 N validators는 잘못된 블록 위에 N+1개의 유효한 블록을 생성할 수 있습니다. 생산. 이 문제를 해결하기 위한 유망한 아이디어는 샤드를 배열하는 것입니다. 각 샤드가 여러 다른 샤드에 연결된 무방향 그래프 인접한 샤드 간의 교차 샤드 트랜잭션만 허용합니다. Vlad Zamfir의 샤딩은 기본적으로 작동하며7, Kadena의 샤딩에서도 비슷한 아이디어가 사용됩니다. 체인웹 [1]). 샤드 간 교차 샤드 트랜잭션이 필요한 경우 이웃이 아닌 경우 이러한 트랜잭션은 여러 샤드를 통해 라우팅됩니다. 이 디자인에서는 각 샤드의 validator는 샤드의 모든 블록을 모두 검증해야 합니다. 모든 인접 샤드의 모든 블록도 마찬가지입니다. 아래 그림을 고려하십시오 샤드 10개, 각 샤드에는 4개의 이웃이 있고 더 많은 샤드가 필요한 샤드는 2개 없습니다. 그림 8에 표시된 교차 샤드 통신의 경우 홉이 2개 이상입니다. 샤드 #2는 자체 blockchain뿐만 아니라 blockchain도 검증합니다. 샤드 #1을 포함한 모든 이웃. 따라서 샤드 #1의 악의적인 행위자가 유효하지 않은 블록 B를 생성하려고 시도한 다음 그 위에 블록 C를 구축하려고 합니다. 교차 샤드 트랜잭션을 시작하면 이러한 교차 샤드 트랜잭션은 진행되지 않습니다. 샤드 #2가 샤드 #1의 전체 기록을 검증했기 때문에 유효하지 않은 블록 B를 식별하게 됩니다. 7여기에서 디자인에 대해 자세히 알아보세요: https://medium.com/nearprotocol/37e538177ed9

그림 8: 체인웹과 같은 시스템에서 잘못된 교차 샤드 트랜잭션이 발생합니다. 감지되다 단일 샤드를 손상시키는 것은 더 이상 실행 가능한 공격이 아니지만 소수의 샤드가 문제로 남아 있습니다. 그림 9에서는 두 샤드 모두를 손상시키는 적

1과 샤드 #2는 샤드 #3에 대한 교차 샤드 트랜잭션을 성공적으로 실행합니다.

유효하지 않은 블록 B의 자금으로: 그림 9: 체인웹과 같은 시스템에서 잘못된 교차 샤드 트랜잭션이 발생합니다. 감지되지 않음 샤드 #3은 샤드 #2의 모든 블록을 검증하지만 샤드 #1에서는 그렇지 않습니다. 악성 블록을 탐지할 방법이 없습니다. 상태 타당성을 적절하게 해결하는 데에는 두 가지 주요 방향이 있습니다.

및 계산의 암호화 증명. 2.3 어부 첫 번째 접근 방식의 기본 아이디어는 다음과 같습니다. 어떤 목적으로든 체인 간에 통신됩니다(예: 비콘 체인 또는 교차 샤드 트랜잭션)에는 일정 기간이 있습니다. 정직한 validator은 블록이 유효하지 않다는 증거를 제공할 수 있습니다. 거기 블록이 다음과 같다는 매우 간결한 증거를 가능하게 하는 다양한 구성입니다. 유효하지 않으므로 수신 노드의 통신 오버헤드가 훨씬 작습니다. 전체 블록을 받는 것보다 적어도 하나의 정직한 validator이 있는 한 이 접근 방식을 사용합니다. 샤드, 시스템은 안전합니다. 그림 10: 어부 이는 오늘날 제안된 프로토콜 중에서 (문제가 존재하지 않는 척하는 것 외에도) 지배적인 접근 방식입니다. 그러나 이 접근 방식에는 두 가지가 있습니다. 주요 단점: 1. 정직한 validator을 위해서는 도전 기간이 충분히 길어야 합니다. 블록이 생성되었음을 인식하고, 다운로드하고, 완전히 검증하고, 준비하는 것 블록이 유효하지 않은 경우 챌린지입니다. 그러한 기간을 도입하면 샤드 간 트랜잭션 속도가 현저히 느려집니다. 2. 챌린지 프로토콜의 존재로 인해 새로운 공격 벡터가 생성됩니다. 악성 노드가 유효하지 않은 챌린지로 스팸을 보낼 때. 확실한 해결책 이 문제는 도전자가 일정량의 token을 입금하도록 하는 것입니다. 챌린지가 유효한 경우 반환됩니다. 이는 부분적인 해결책일 뿐이므로 공격자가 시스템에 스팸을 보내는 것은 여전히 ​​유익할 수 있습니다. 예금) 유효하지 않은 도전과 함께, 예를 들어 유효한 것을 방지하기 위해정직한 validator의 도전을 통과하세요. 이러한 공격은 애도 공격이라고합니다. 후자의 지점을 우회하는 방법은 섹션 3.7.2를 참조하세요. 2.4 간결한 비대화형 지식 논증 다중 샤드 손상에 대한 두 번째 해결책은 특정 계산(예: 일련의 거래에서 블록을 계산하는 것처럼)이 올바르게 수행되었습니다. 이러한 구조가 존재합니다. zk-SNARK, zk-STARK 및 기타 몇 가지 일부는 오늘날 개인 결제를 위해 blockchain 프로토콜에서 적극적으로 사용됩니다. 가장 주목할만한 것은 ZCash입니다. 이러한 기본 요소의 주요 문제점은 다음과 같습니다. 계산 속도가 매우 느립니다. 예: zk-SNARK를 사용하는 Coda 프로토콜 특히 blockchain의 모든 블록이 유효하다는 것을 증명하기 위해 증거를 만드는 데 거래당 30초가 걸릴 수 있다는 인터뷰 (이 숫자는 아마도 지금쯤에는 더 작을 것입니다). 흥미롭게도, 신뢰할 수 있는 당사자가 증명을 계산할 필요가 없습니다. 증명은 그것이 만들어진 계산의 타당성을 증명할 뿐만 아니라 증명 자체의 타당성. 따라서 그러한 증명의 계산은 분할될 수 있습니다. 것보다 중복성이 훨씬 적은 참가자 집합 중에서 신뢰할 수 없는 계산을 수행하는 데 필요합니다. 참가자에게도 허용됩니다. zk-SNARK를 계산하여 비용을 줄이지 않고 특수 하드웨어에서 실행하는 사람 시스템의 분산화. 성능 외에도 zk-SNARK의 과제는 다음과 같습니다. 1. 덜 연구되고 덜 테스트된 암호화 기본 요소에 대한 의존성 2. "독성 폐기물" — zk-SNARK는 그룹이 신뢰하는 설정에 의존합니다. 의 사람들이 일부 계산을 수행한 다음 중간 결과를 버립니다. 해당 계산의 값. 절차의 모든 참가자가 공모하는 경우 중간 값을 유지하면 가짜 증거가 생성될 수 있습니다. 3. 시스템 설계에 추가 복잡성이 도입되었습니다. 4. zk-SNARK는 가능한 계산의 하위 집합에 대해서만 작동하므로 프로토콜은 Turing-complete smart contract 언어로는 사용할 수 없습니다 SNARK는 체인의 유효성을 증명합니다. 2.5 데이터 가용성 우리가 다룰 두 번째 문제는 데이터 가용성입니다. 일반적으로 노드 특정 blockchain을 운영하는 것은 두 그룹으로 구분됩니다: 전체 노드, 모든 전체 블록을 다운로드하고 모든 거래를 검증하는 것, 그리고 Light 블록 헤더만 다운로드하고 부분에 Merkle 증명을 사용하는 노드 그림 11에서 볼 수 있듯이 그들이 관심을 갖고 있는 상태와 트랜잭션에 대해 설명합니다.

그림 11: 머클 트리 이제 대다수의 전체 노드가 공모하면 유효하거나 유효한 블록을 생성할 수 있습니다. 유효하지 않으며 hash을 라이트 노드로 보내지만 전체 내용을 공개하지 마십시오. 블록의. 그들이 그것으로부터 이익을 얻을 수 있는 방법은 다양합니다. 예를 들어, 그림 12를 살펴보세요. 그림 12: 데이터 가용성 문제 세 가지 블록이 있습니다. 이전 블록 A는 정직한 validators에 의해 생성되었습니다. 현재 B에는 validators가 공모하고 있습니다. 그리고 다음 C도 생산될 것이다. 정직한 validators(blockchain는 오른쪽 하단에 표시되어 있습니다). 당신은 상인입니다. 현재 블록(B)의 validators가 수신된 블록입니다. 이전 validators의 A는 귀하가 돈을 받는 블록을 계산했습니다.상태에 대한 Merkle 증명과 함께 해당 블록의 헤더를 보냈습니다. 당신은 돈이 있습니다 (또는 돈을 보내는 유효한 거래에 대한 머클 증명 당신에게). 거래가 완료되었음을 확신하고 서비스를 제공합니다. 그러나 validators는 블록 B의 전체 내용을 절대 배포하지 않습니다. 누구나. 따라서 블록 C의 정직한 validators는 블록을 검색할 수 없으며, 강제로 시스템을 정지시키거나 A 위에 구축해야 하므로 돈 상인. 동일한 시나리오를 샤딩에 적용할 때 전체 및 샤딩의 정의는 다음과 같습니다. 라이트 노드는 일반적으로 샤드별로 적용됩니다. 각 샤드의 validators는 매 다운로드마다 해당 샤드를 차단하고 해당 샤드의 모든 트랜잭션을 검증하지만 다른 스냅샷 샤드 체인 상태를 포함하는 시스템의 노드 비콘 체인의 경우 헤더만 다운로드하세요. 따라서 샤드의 validator은 다음과 같습니다. 해당 샤드의 노드를 사실상 가득 채우는 반면, 시스템의 다른 참가자는 비콘 체인을 포함하여 라이트 노드로 작동합니다. 위에서 논의한 어부 접근 방식의 경우 정직한 validators 비콘 체인에 교차 연결된 블록을 다운로드할 수 있어야 합니다. 악의적인 validators가 유효하지 않은 블록의 헤더를 교차 연결하거나 이를 사용하여 교차 샤드 트랜잭션을 시작하지만 블록을 배포하지는 않습니다. validators는 도전 과제를 만들 방법이 없습니다. 우리는 이 문제를 보완하는 세 가지 접근 방식을 다룰 것입니다. 서로. 2.5.1 양육권 증명 해결해야 할 가장 시급한 문제는 블록이 한 번만 사용 가능한지 여부입니다. 출판되었습니다. 제안된 아이디어 중 하나는 회전하는 소위 공증인을 갖는 것입니다. 유일한 작업이 다운로드인 validator보다 더 자주 샤드 사이에 다운로드할 수 있었다는 사실을 차단하고 증명합니다. 그들은 수 있습니다 전체 상태를 다운로드할 필요가 없기 때문에 더 자주 회전됩니다. 자주 회전할 수 없는 validator과 달리 샤드의 그림과 같이 샤드가 회전할 때마다 샤드의 상태를 다운로드해야 합니다. 13. 이 순진한 접근 방식의 문제점은 나중에 증명하는 것이 불가능하다는 것입니다. 공증인이 블록을 다운로드했는지 여부에 따라 공증인은 없이 블록을 다운로드할 수 있었다는 것을 항상 증명하도록 선택할 수 있습니다. 그것을 되찾으려고도 합니다. 이에 대한 한 가지 해결책은 공증인이 다음을 제공하는 것입니다. 어떤 증거를 확보하거나 블록이 다운로드되었습니다. 그러한 솔루션 중 하나가 여기에서 논의됩니다: https://ethresear.ch/t/ 1비트 집합 친화적 보관 채권/2236. 2.5.2 삭제 코드 특정 라이트 노드가 블록의 hash을 수신하면 노드의 라이트 노드를 늘리기 위해 블록이 사용 가능하다는 확신이 있으면 몇 가지 무작위 다운로드를 시도할 수 있습니다. 블록 조각. 이것은 완전한 해결책이 아닙니다. 왜냐하면 라이트 노드가 그렇지 않으면 악의적인 블록 생산자가 선택할 수 있는 전체 블록을 집합적으로 다운로드합니다.

그림 13: 유효성 검사기는 상태를 다운로드해야 하므로 회전할 수 없습니다. 자주 라이트 노드에 의해 다운로드되지 않은 블록 부분을 보류하기 위해, 따라서 여전히 블록을 사용할 수 없게 됩니다. 한 가지 해결책은 삭제 코드라는 구성을 사용하여 이를 가능하게 하는 것입니다. 그림과 같이 블록의 일부만 사용할 수 있는 경우에도 전체 블록을 복구하려면 그림 14에서. 그림 14: Merkle tree 삭제 코딩된 데이터 위에 구축됨 Polkadot 및 Ethereum Serenity는 모두 이 아이디어를 바탕으로 디자인했습니다. 라이트 노드가 블록을 사용할 수 있다고 합리적으로 확신할 수 있는 방법을 제공합니다. Ethereum Serenity 접근 방식은 [2]에 자세한 설명이 있습니다.2.5.3 데이터 가용성에 대한 Polkadot의 접근 방식 Polkadot에서는 대부분의 샤드 솔루션과 마찬가지로 각 샤드(파라체인이라고 함)가 비콘 체인(릴레이 체인이라고 함)에 해당 블록의 스냅샷을 찍습니다. 2f + 1이 있다고 가정해 보세요. 릴레이 체인의 validators. 파라체인 블록의 블록 생산자는 콜레이터, 일단 파라체인 블록이 생성되면 모든 f 부분이 충분하도록 2f +1 부분으로 구성된 블록의 삭제 코딩 버전을 계산합니다. 블록을 재구성합니다. 그런 다음 각 validator에 하나의 부품을 배포합니다. 릴레이 체인. 특정 릴레이 체인 validator은 릴레이 체인에만 서명합니다. 스냅샷된 각 파라체인 블록에 해당 부분이 있는 경우 블록을 차단합니다. 그러한 릴레이 체인 블록. 따라서 릴레이 체인 블록에 2f + 1의 서명이 있는 경우 validators, 그리고 그 중 f개 이상이 프로토콜을 위반하지 않는 한, 각각은 파라체인 블록은 validators에서 부품을 가져와서 재구성할 수 있습니다. 프로토콜을 따르는 것입니다. 그림 15를 참조하십시오. 그림 15: Polkadot의 데이터 가용성 2.5.4 장기적인 데이터 가용성 위에서 논의한 모든 접근 방식은 블록이 다음과 같다는 사실만 입증합니다. 전혀 게시되지 않았으며 현재 사용할 수 있습니다. 블록은 나중에 사용할 수 없게 될 수 있습니다. 다양한 이유: 노드가 오프라인 상태가 됨, 노드가 의도적으로 기록을 삭제함 데이터 및 기타. 이 문제를 해결하기 위해 언급할 가치가 있는 백서는 Polyshard [3]입니다. 여러 개의 블록이 있더라도 샤드 전체에서 블록을 사용할 수 있도록 삭제 코드를 사용합니다. 샤드는 데이터를 완전히 잃습니다. 불행하게도 그들의 특정 접근 방식에는 다음이 필요합니다. 모든 샤드는 다른 모든 샤드에서 블록을 다운로드해야 합니다. 비싸다. 장기적인 가용성은 문제만큼 시급하지 않습니다. 참가자가 없기 때문입니다. 시스템의 모든 체인을 검증할 수 있을 것으로 예상됩니다.

샤딩된 프로토콜의 보안은 다음과 같이 설계되어야 합니다. 일부 샤드의 일부 오래된 블록이 손상되더라도 시스템은 안전합니다. 전혀 사용할 수 없습니다.

Nightshade

3.1 Từ chuỗi mảnh đến mảnh vỡ Mô hình sharding với chuỗi phân đoạn và chuỗi đèn hiệu rất mạnh mẽ nhưng có những phức tạp nhất định. Đặc biệt, quy tắc lựa chọn ngã ba cần được thực thi trong mỗi chuỗi riêng biệt, quy tắc lựa chọn ngã ba trong chuỗi phân đoạn và đèn hiệu chuỗi phải được xây dựng khác nhau và được thử nghiệm riêng biệt. Trong Nightshade, chúng tôi lập mô hình hệ thống dưới dạng một blockchain duy nhất, trong đó mỗi khối chứa tất cả các giao dịch cho tất cả các phân đoạn một cách hợp lý và thay đổi toàn bộ trạng thái của tất cả các mảnh vỡ. Tuy nhiên, về mặt vật lý, không có người tham gia nào tải xuống trạng thái đầy đủ hoặc khối logic đầy đủ. Thay vào đó, mỗi người tham gia mạng chỉ duy trì trạng thái tương ứng với các phân đoạn mà họ xác thực giao dịch và danh sách tất cả các giao dịch trong khối được chia thành các phần vật lý khối, một khối cho mỗi mảnh. Trong điều kiện lý tưởng, mỗi khối chứa chính xác một đoạn trên mỗi phân đoạn. khối, gần tương ứng với mô hình với các chuỗi phân đoạn trong đó chuỗi phân đoạn tạo ra các khối có cùng tốc độ với chuỗi đèn hiệu. Tuy nhiên, do sự chậm trễ của mạng, một số khối có thể bị thiếu, vì vậy trong thực tế mỗi khối chứa một hoặc không khối trên mỗi phân đoạn. Xem phần 3.3 để biết chi tiết về cách khối được sản xuất. Hình 16: Một mô hình có các chuỗi mảnh ở bên trái và có một chuỗi có các khối được chia thành các khối bên phải

3.2 Sự đồng thuận Hai cách tiếp cận chủ yếu để đạt được sự đồng thuận trong blockchain ngày nay là chuỗi dài nhất (hoặc nặng nhất), trong đó chuỗi có nhiều công việc hoặc cổ phần nhất được sử dụng để xây dựng nó được coi là chuẩn và BFT, trong đó đối với mỗi khối một số tập hợp validator đạt được sự đồng thuận BFT. Trong các giao thức được đề xuất gần đây thì cách thứ hai là cách tiếp cận ưu việt hơn, vì nó cung cấp tính hữu hạn ngay lập tức, trong khi ở chuỗi dài nhất cần nhiều khối hơn được xây dựng trên đỉnh của khối để đảm bảo tính cuối cùng. Thường vì một ý nghĩa bảo mật mất thời gian để xây dựng đủ số khối thứ tự giờ. Việc sử dụng sự đồng thuận BFT trên mỗi khối cũng có những nhược điểm, chẳng hạn như: 1. BFT sự đồng thuận đòi hỏi lượng trao đổi đáng kể. Trong khi những tiến bộ gần đây cho phép đạt được sự đồng thuận trong thời gian tuyến tính về số lượng của người tham gia (xem ví dụ: [4]), chi phí này vẫn đáng chú ý trên mỗi khối; 2. Tất cả những người tham gia mạng lưới đều không thể tham gia BFT sự đồng thuận trên mỗi khối, do đó thường chỉ có một tập hợp con người tham gia được lấy mẫu ngẫu nhiên đạt được sự đồng thuận. Về nguyên tắc, một tập hợp được lấy mẫu ngẫu nhiên có thể là về mặt lý thuyết có thể bị hỏng một cách thích ứng và một nhánh phân nhánh có thể được tạo ra. hệ thống hoặc cần phải được lập mô hình để sẵn sàng cho một sự kiện như vậy, và do đó vẫn có quy tắc lựa chọn nhánh bên cạnh sự đồng thuận BFT hoặc được thiết kế để đóng xuống trong một sự kiện như vậy. Điều đáng nói là một số thiết kế như Algorand [5], giảm đáng kể khả năng tham nhũng thích ứng. 3. Quan trọng nhất là hệ thống sẽ ngừng hoạt động nếu 1 3 hoặc nhiều hơn trong số tất cả những người tham gia là ngoại tuyến. Do đó, bất kỳ trục trặc mạng tạm thời hoặc sự chia tách mạng nào cũng có thể khiến hệ thống bị đình trệ hoàn toàn. Lý tưởng nhất là hệ thống phải có khả năng tiếp tục hoạt động miễn là có ít nhất một nửa số người tham gia trực tuyến (nặng nhất các giao thức dựa trên chuỗi tiếp tục hoạt động ngay cả khi có ít hơn một nửa số người tham gia trực tuyến, nhưng mức độ mong muốn của đặc tính này còn gây tranh cãi hơn trong cộng đồng). Một mô hình kết hợp trong đó sự đồng thuận được sử dụng là một trong những mô hình nặng nề nhất chuỗi, nhưng một số khối được hoàn thiện định kỳ bằng cách sử dụng tiện ích cuối cùng BFT duy trì những ưu điểm của cả hai mô hình. BFT tiện ích cuối cùng như vậy là Casper FFG [6] được sử dụng trong Ethereum 2.0 8, Casper CBC (xem https://vitalik. ca/general/2018/12/05/cbc_casper.html) và GRANDPA (xem https:// Medium.com/polkadot-network/d08a24a021b5) được sử dụng trong Polkadot. Nightshade sử dụng sự đồng thuận chuỗi cao nhất. Cụ thể khi một khối nhà sản xuất tạo ra một khối (xem phần 3.3), họ có thể thu thập chữ ký từ các nhà sản xuất khối khác và validator chứng thực khối trước đó. Xem phần 3.8 để biết chi tiết về cách tổng hợp số lượng chữ ký lớn như vậy. trọng lượng 8Ngoài ra, hãy xem phiên bảng trắng với Justin Drake để có cái nhìn tổng quan sâu sắc hơn về Casper FFG và cách nó được tích hợp với sự đồng thuận chuỗi nặng nhất GHOST tại đây: https://www. youtube.com/watch?v=S262StTwkmocủa một khối khi đó là cổ phần tích lũy của tất cả những người ký có chữ ký được đưa vào khối. Trọng lượng của chuỗi là tổng trọng lượng của khối. Để đạt được sự đồng thuận cao nhất trong chuỗi, chúng tôi sử dụng tiện ích cuối cùng sử dụng các chứng thực để hoàn thiện các khối. Để giảm độ phức tạp của hệ thống, chúng tôi sử dụng một tiện ích cuối cùng không ảnh hưởng đến quy tắc lựa chọn ngã ba dưới bất kỳ hình thức nào, và thay vào đó chỉ đưa ra các điều kiện cắt bổ sung, sao cho khi một khối được được hoàn thiện bởi tiện ích cuối cùng, việc phân nhánh là không thể trừ khi có một tỷ lệ phần trăm rất lớn tổng số cổ phần bị cắt giảm. Casper CBC là một tiện ích cuối cùng và chúng tôi hiện đang lưu ý đến mô hình Casper CBC. Chúng tôi cũng làm việc trên một giao thức BFT riêng biệt có tên là TxFlow. Vào thời điểm viết tài liệu này, không rõ liệu TxFlow có được sử dụng thay vì Casper hay không CBC. Tuy nhiên, chúng tôi lưu ý rằng việc lựa chọn tiện ích cuối cùng phần lớn là trực giao với phần còn lại của thiết kế. 3.3 Sản xuất khối Trong Nightshade có hai vai trò: nhà sản xuất khối và validators. Tại bất kỳ điểm hệ thống chứa w nhà sản xuất khối, w = 100 trong mô hình của chúng tôi và wv validators, trong mô hình của chúng tôi v = 100, wv = 10.000. Hệ thống là Bằng chứng cổ phần, có nghĩa là cả nhà sản xuất khối và validator đều có một số quyền nội bộ loại tiền tệ (được gọi là ”tokens”) bị khóa trong một khoảng thời gian vượt xa thời gian họ dành để thực hiện nhiệm vụ xây dựng và xác nhận chuỗi. Giống như tất cả các hệ thống Proof of Stake, không phải tất cả các nhà sản xuất khối w và không tất cả wv validator đều là các thực thể khác nhau vì điều đó không thể thực thi được. Mỗi Tuy nhiên, trong số các nhà sản xuất khối w và wv validators có một sự tách biệt cổ phần. Hệ thống chứa n phân đoạn, n = 1000 trong mô hình của chúng tôi. Như đã đề cập ở phần 3.1, trong Nightshade không có chuỗi phân đoạn, thay vào đó tất cả các nhà sản xuất khối và validator đang xây dựng một blockchain duy nhất mà chúng tôi gọi là chuỗi chính. Trạng thái của chuỗi chính được chia thành n phân đoạn và mỗi khối nhà sản xuất và validator bất kỳ lúc nào cũng chỉ tải xuống cục bộ một tập hợp con của trạng thái tương ứng với một số tập hợp con của phân đoạn và chỉ xử lý và xác thực các giao dịch ảnh hưởng đến các phần đó của trạng thái. Để trở thành nhà sản xuất khối, một người tham gia mạng sẽ khóa một số lượng lớn số lượng tokens (tiền đặt cọc). Việc bảo trì mạng được thực hiện theo thời gian, trong đó một kỷ nguyên là một khoảng thời gian theo thứ tự ngày. Những người tham gia với w cổ phần lớn nhất vào đầu một kỷ nguyên cụ thể là khối nhà sản xuất của thời đại đó. Mỗi nhà sản xuất khối được gán cho các phân đoạn sw, (giả sử sw = 40, điều này sẽ tạo ra sww/n = 4 nhà sản xuất khối trên mỗi phân đoạn). khối nhà sản xuất tải xuống trạng thái của phân đoạn mà họ được chỉ định trước kỷ nguyên bắt đầu và trong suốt thời kỳ đó sẽ thu thập các giao dịch ảnh hưởng đến phân đoạn đó, và áp dụng chúng cho nhà nước. Đối với mỗi khối b trên chuỗi chính và với mỗi phân đoạn, có một trong giao các nhà sản xuất khối cho s, người chịu trách nhiệm sản xuất phần liên quan của b đến mảnh vỡ. Phần của b liên quan đến phân đoạn s được gọi là đoạn và chứa danh sách các giao dịch cho phân đoạn được bao gồm trong b, cũng như merklegốc của trạng thái kết quả. b cuối cùng sẽ chỉ chứa một tiêu đề rất nhỏ của đoạn, cụ thể là gốc merkle của tất cả các giao dịch được áp dụng (xem phần 3.7.1 để biết chi tiết chính xác) và nghiệm merkle của trạng thái cuối cùng. Trong suốt phần còn lại của tài liệu, chúng tôi thường đề cập đến nhà sản xuất khối có trách nhiệm tạo ra một đoạn tại một thời điểm cụ thể cho một phân đoạn cụ thể với tư cách là một nhà sản xuất chunk. Nhà sản xuất chunk luôn là một trong những nhà sản xuất khối. Các nhà sản xuất khối và các nhà sản xuất khối xoay vòng từng khối theo theo một lịch trình cố định. Các nhà sản xuất khối có đơn đặt hàng và liên tục sản xuất khối theo thứ tự đó. Ví dụ. nếu có 100 nhà sản xuất khối thì khối đầu tiên nhà sản xuất chịu trách nhiệm sản xuất khối 1, 101, 201, v.v., khối thứ hai là chịu trách nhiệm sản xuất 2, 102, 202, v.v.). Vì sản xuất theo khối, không giống như sản xuất theo khối, đòi hỏi phải duy trì trạng thái và đối với mỗi phân đoạn, chỉ có nhà sản xuất khối sww/n mới duy trì trạng thái trên mỗi phân đoạn, tương ứng chỉ những nhà sản xuất khối sww/n mới xoay vòng để tạo khối. Ví dụ. với các hằng số ở trên với bốn nhà sản xuất khối được gán cho mỗi phân đoạn, mỗi nhà sản xuất khối sẽ tạo ra các khối cứ bốn khối một lần. 3,4 Đảm bảo tính sẵn có của dữ liệu Để đảm bảo tính khả dụng của dữ liệu, chúng tôi sử dụng phương pháp tương tự như phương pháp của Polkadot được mô tả ở phần 2.5.3. Khi nhà sản xuất khối tạo ra một đoạn, họ sẽ tạo một phiên bản được mã hóa xóa của nó với mã khối tối ưu (w, ⌊w/6 + 1⌋) của khúc. Sau đó, họ gửi một phần của đoạn mã bị xóa (chúng tôi gọi những phần đó là từng phần hoặc chỉ các phần) cho mỗi nhà sản xuất khối. Chúng tôi tính toán một cây merkle chứa tất cả các phần là lá và tiêu đề của mỗi đoạn chứa gốc merkle của cây đó. Các bộ phận được gửi tới validator thông qua tin nhắn một phần. Mỗi tin nhắn như vậy chứa tiêu đề chunk, thứ tự của phần và nội dung phần. các tin nhắn cũng chứa chữ ký của nhà sản xuất khối đã tạo ra chunk và đường dẫn merkle để chứng minh rằng phần đó tương ứng với tiêu đề và được sản xuất bởi nhà sản xuất khối thích hợp. Khi nhà sản xuất khối nhận được khối chuỗi chính, trước tiên họ sẽ kiểm tra xem chúng có có các thông điệp một phần cho mỗi đoạn được bao gồm trong khối. Nếu không, khối không được xử lý cho đến khi các tin nhắn onepart bị thiếu được lấy ra. Sau khi nhận được tất cả các tin nhắn một phần, nhà sản xuất khối sẽ tìm nạp các phần còn lại từ các đồng nghiệp và xây dựng lại các khối mà chúng nắm giữ nhà nước. Nhà sản xuất khối không xử lý khối chuỗi chính nếu có ít nhất một khối đoạn được bao gồm trong khối thì chúng không có thông báo một phần tương ứng hoặc nếu đối với ít nhất một phân đoạn mà chúng duy trì trạng thái thì chúng không thể xây dựng lại toàn bộ đoạn. Để có sẵn một đoạn cụ thể, chỉ cần ⌊w/6⌋+1 của khối là đủ nhà sản xuất có bộ phận của họ và phục vụ họ. Vì vậy, miễn là số lượng tác nhân độc hại không vượt quá ⌊w/3⌋không có chuỗi nào có hơn nửa khối các nhà sản xuất xây dựng nó có thể có những phần không có sẵn.Hình 17: Mỗi khối chứa một hoặc không có khối trên mỗi phân đoạn và mỗi khối được mã hóa xóa. Mỗi phần của đoạn mã xóa được gửi đến một địa chỉ được chỉ định nhà sản xuất khối thông qua tin nhắn onepart đặc biệt 3.4.1 Đối phó với các nhà sản xuất khối lười biếng Nếu nhà sản xuất khối có một khối bị thiếu thông báo một phần, họ sẽ có thể chọn vẫn đăng nhập vào nó, bởi vì nếu khối đó cuối cùng vẫn nằm trong chuỗi sẽ tối đa hóa phần thưởng cho nhà sản xuất khối. Không có rủi ro cho việc chặn nhà sản xuất vì sau này không thể chứng minh rằng nhà sản xuất khối không có tin nhắn một phần. Để giải quyết vấn đề này, chúng tôi tạo ra mỗi nhà sản xuất đoạn khi tạo đoạn để chọn một màu (đỏ hoặc xanh) cho từng phần của đoạn được mã hóa trong tương lai và lưu trữ bitmask của màu được gán trong đoạn trước khi nó được mã hóa. Mỗi phần một sau đó thông báo chứa màu được gán cho phần đó và màu này được sử dụng khi tính toán gốc merkle của các phần được mã hóa. Nếu nhà sản xuất chunk đi chệch hướng từ giao thức, điều đó có thể được chứng minh dễ dàng vì gốc merkle sẽ không tương ứng với tin nhắn một phần hoặc màu sắc trong tin nhắn một phần tương ứng với gốc merkle sẽ không khớp với mặt nạ trong đoạn. Khi nhà sản xuất khối ký vào một khối, họ sẽ bao gồm một bitmask của tất cả phần màu đỏ mà họ nhận được cho các khối có trong khối. Xuất bản một bitmask không chính xác là một hành vi có thể gạch chéo. Nếu nhà sản xuất khối chưa nhận được một tin nhắn, họ không có cách nào biết được màu sắc của tin nhắn, và do đó có 50% khả năng bị chém nếu họ cố gắng mù quáng ký vào bản hợp đồng. khối. 3,5 Ứng dụng chuyển trạng thái Nhà sản xuất khối chỉ chọn những giao dịch nào sẽ được đưa vào khối nhưng không áp dụng chuyển đổi trạng thái khi chúng tạo ra một đoạn. Tương ứng,

tiêu đề chunk chứa gốc merkle của trạng thái merkelized như trước các giao dịch trong chunk được áp dụng. Các giao dịch chỉ được áp dụng khi một khối đầy đủ bao gồm đoạn được xử lý. Một người tham gia chỉ xử lý một khối nếu 1. Khối trước đó đã được nhận và xử lý; 2. Đối với mỗi đoạn, người tham gia không duy trì trạng thái vì họ có đã xem tin nhắn onepart; 3. Đối với mỗi đoạn, người tham gia duy trì trạng thái vì họ có đoạn đầy đủ. Sau khi khối được xử lý, đối với mỗi phân đoạn mà người tham gia duy trì trạng thái, áp dụng các giao dịch và tính toán trạng thái mới kể từ sau khi các giao dịch được áp dụng, sau đó họ đã sẵn sàng sản xuất các khối cho khối tiếp theo, nếu chúng được gán cho bất kỳ phân đoạn nào, vì chúng có gốc merkle của trạng thái merkelized mới. 3.6 Giao dịch và biên lai chéo Nếu một giao dịch cần ảnh hưởng đến nhiều phân đoạn, thì nó cần phải được thực hiện liên tục được thực hiện trong từng phân đoạn riêng biệt. Giao dịch đầy đủ được gửi đến phân đoạn đầu tiên bị ảnh hưởng và khi giao dịch được bao gồm trong khối cho phân đoạn đó và được áp dụng sau khi đoạn được đưa vào một khối, nó tạo ra cái gọi là biên nhận giao dịch, được chuyển đến phân đoạn tiếp theo mà giao dịch cần thực hiện được thực thi. Nếu cần nhiều bước hơn, việc thực hiện giao dịch nhận tạo ra một giao dịch biên nhận mới, v.v. 3.6.1 Thời gian nhận giao dịch Điều mong muốn là giao dịch nhận được áp dụng trong khối ngay sau khối mà nó được tạo. Giao dịch nhận tiền chỉ được tạo sau khi khối trước đó được các nhà sản xuất khối nhận và áp dụng duy trì phân đoạn ban đầu và cần được biết vào thời điểm chunk cho khối tiếp theo được tạo ra bởi nhà sản xuất khối của đích mảnh vỡ. Do đó, biên nhận phải được truyền từ phân đoạn nguồn đến phân đoạn đích trong khung thời gian ngắn giữa hai sự kiện đó. Đặt A là khối được tạo cuối cùng chứa giao dịch t tạo ra biên nhận r. Đặt B là khối được tạo tiếp theo (tức là khối có A là khối trước đó của nó) mà chúng ta muốn chứa r. Đặt t ở trong mảnh a và r là trong mảnh vỡ b. Thời hạn sử dụng của biên nhận, cũng được mô tả trên hình 18, như sau: Lập và lưu trữ hóa đơn. Cpa của nhà sản xuất chunk cho phân đoạn a nhận khối A, áp dụng giao dịch t và tạo biên nhận r. cpa sau đó lưu trữ tất cả các biên lai được tạo ra như vậy trong bộ lưu trữ liên tục nội bộ được lập chỉ mục theo id phân đoạn nguồn.Phân phối các khoản thu. Khi cpa đã sẵn sàng để tạo đoạn cho phân đoạn a cho khối B, họ tìm nạp tất cả các biên lai được tạo bằng cách áp dụng các giao dịch từ khối A cho phân đoạn a và đưa chúng vào đoạn cho phân đoạn a trong khối B. Một khi đoạn như vậy được tạo ra, cpa sẽ tạo ra mã xóa của nó phiên bản và tất cả các thông báo onepart tương ứng. cpa biết nhà sản xuất khối nào duy trì trạng thái đầy đủ cho phân đoạn nào. Đối với một nhà sản xuất khối cụ thể bp cpa bao gồm các khoản thu được từ việc áp dụng các giao dịch trong khối A đối với phân đoạn a có bất kỳ phân đoạn nào mà bp quan tâm làm đích đến của họ trong tin nhắn onepart khi họ phân phối đoạn cho phân đoạn a trong khối B (xem hình 17, hiển thị các biên nhận có trong thông báo một phần). Nhận biên lai. Hãy nhớ rằng những người tham gia (cả nhà sản xuất khối và validator) không xử lý các khối cho đến khi họ có thông báo một phần cho mỗi đoạn có trong khối. Do đó, vào thời điểm bất kỳ người tham gia cụ thể nào áp dụng khối B, họ có tất cả các thông báo một phần tương ứng với các khối trong B và do đó họ có tất cả các biên nhận đến có các phân đoạn người tham gia duy trì trạng thái làm điểm đến của họ. Khi áp dụng các chuyển trạng thái cho một phân đoạn cụ thể, người tham gia sẽ áp dụng cả biên lai mà họ đã thu thập cho phân đoạn trong tin nhắn một phần, cũng như tất cả các giao dịch được bao gồm trong chính đoạn đó. Hình 18: Thời gian tồn tại của một giao dịch biên nhận 3.6.2 Xử lý quá nhiều biên lai Có thể số lượng biên lai nhắm mục tiêu vào một phân đoạn cụ thể trong một khối cụ thể quá lớn để được xử lý. Ví dụ, hãy xem xét hình 19, trong mỗi giao dịch trong mỗi phân đoạn sẽ tạo ra một biên nhận nhắm mục tiêu phân đoạn 1. Ở khối tiếp theo, số biên nhận mà phân đoạn 1 cần xử lý là có thể so sánh với tải mà tất cả các phân đoạn kết hợp được xử lý trong khi xử lý khối trước đó.

Hình 19: Nếu tất cả các khoản thu đều nhắm mục tiêu vào cùng một phân đoạn thì phân đoạn đó có thể không có khả năng xử lý chúng Để giải quyết vấn đề này, chúng tôi sử dụng một kỹ thuật tương tự như kỹ thuật được sử dụng trong QuarkChain 9. Cụ thể, đối với mỗi phân đoạn, khối B cuối cùng và phân đoạn cuối cùng trong đó khối mà biên lai được áp dụng được ghi lại. Khi có phân đoạn mới được tạo, biên nhận được áp dụng theo thứ tự đầu tiên từ các phân đoạn còn lại trong B, và sau đó theo các khối theo B, cho đến khi khối mới đầy. Dưới mức bình thường trường hợp có tải trọng cân bằng nhìn chung sẽ dẫn đến tất cả các khoản thu đang được áp dụng (và do đó phân đoạn cuối cùng của khối cuối cùng sẽ được ghi lại cho từng đoạn), nhưng trong những thời điểm tải không cân bằng và một phần cụ thể phân đoạn nhận được nhiều biên lai không tương xứng, kỹ thuật này cho phép họ được xử lý đồng thời tôn trọng các giới hạn về số lượng giao dịch được đưa vào. Lưu ý rằng nếu tải không cân bằng như vậy tồn tại trong một thời gian dài thì độ trễ từ việc tạo biên lai cho đến khi ứng dụng có thể tiếp tục phát triển vô thời hạn. một cách để giải quyết vấn đề này là loại bỏ bất kỳ giao dịch nào tạo ra biên nhận nhắm mục tiêu phân đoạn có độ trễ xử lý vượt quá một số hằng số (ví dụ: một kỷ nguyên). Hãy xem xét hình 20. Theo khối B, phân đoạn 4 không thể xử lý tất cả các biên nhận, vì vậy nó chỉ xử lý nguồn gốc biên lai từ tối đa phân đoạn 3 trong khối A và ghi lại nó. Trong khối C, bao gồm các khoản thu lên tới phân đoạn 5 trong khối B và sau đó đến khối D, phân đoạn sẽ bắt kịp, xử lý tất cả các khoản thu còn lại trong khối B và tất cả các khoản thu từ khối C. 3,7 Xác thực khối Một đoạn được tạo cho một phân đoạn cụ thể (hoặc một khối phân đoạn được tạo cho một chuỗi phân đoạn cụ thể trong mô hình có chuỗi phân đoạn) chỉ có thể được xác thực bởi 9Xem tập bảng trắng với QuarkChain tại đây: https://www.youtube.com/watch? v=opEtG6NM4x4, trong đó cách tiếp cận các giao dịch chéo được thảo luận, cùng với các vấn đề khác nhiều thứHình 20: Xử lý biên lai bị trì hoãn những người tham gia duy trì trạng thái. Họ có thể là nhà sản xuất khối, validators, hoặc chỉ những nhân chứng bên ngoài đã tải xuống trạng thái và xác thực phân đoạn trong mà họ lưu trữ tài sản. Trong tài liệu này chúng tôi giả định rằng phần lớn những người tham gia không thể lưu trữ trạng thái cho một phần lớn các phân đoạn. Tuy nhiên, điều đáng nói là rằng có blockchain được phân chia được thiết kế với giả định rằng hầu hết người tham gia đều có khả năng lưu trữ trạng thái và xác thực hầu hết các phân đoạn, chẳng hạn như QuarkChain. Vì chỉ một phần nhỏ người tham gia có trạng thái xác thực phân đoạn các khối, có thể thích ứng với tham nhũng chỉ những người tham gia có trạng thái và áp dụng chuyển đổi trạng thái không hợp lệ. Nhiều thiết kế phân đoạn đã được đề xuất lấy mẫu validator cứ sau vài lần ngày và trong vòng một ngày, bất kỳ khối nào trong chuỗi phân đoạn có hơn 2/3 chữ ký của validator được gán cho phân đoạn đó sẽ được xem xét ngay lập tức cuối cùng. Với cách tiếp cận như vậy, đối thủ thích ứng chỉ cần làm hỏng 2n/3+1 của validator trong chuỗi phân đoạn để áp dụng chuyển đổi trạng thái không hợp lệ, trong đó, mặc dù có thể khó thực hiện nhưng mức độ bảo mật không đủ cho công chúng blockchain. Như đã thảo luận trong phần 2.3, cách tiếp cận phổ biến là cho phép một khoảng thời gian nhất định sau khi khối được tạo cho bất kỳ người tham gia nào có trạng thái (cho dù đó là nhà sản xuất khối, validator hoặc người quan sát bên ngoài) để thách thức tính hợp lệ của nó. Những người tham gia như vậy được gọi là Ngư dân. Để một ngư dân có thể thách thức một khối không hợp lệ, phải đảm bảo rằng khối đó có sẵn để họ. Tính khả dụng của dữ liệu trong Nightshade được thảo luận trong phần 3.4. Trong Nightshade khi một khối được tạo ra, các khối không được xác thực bởi bất cứ ai ngoại trừ nhà sản xuất chunk thực sự. Đặc biệt, nhà sản xuất khối đó đề xuất khối tự nhiên không có trạng thái cho hầu hết các phân đoạn vàđã không thể xác nhận các khối. Khi khối tiếp theo được tạo ra, nó chứa các chứng thực (xem phần 3.2) của nhiều nhà sản xuất khối và validators, nhưng vì phần lớn các nhà sản xuất khối và validator không duy trì trạng thái đối với hầu hết các phân đoạn, một khối chỉ có một đoạn không hợp lệ sẽ thu thập được hơn một nửa số chứng thực và sẽ tiếp tục ở trạng thái nặng nhất. chuỗi. Để giải quyết vấn đề này, chúng tôi cho phép bất kỳ người tham gia nào duy trì trạng thái một phân đoạn để gửi thử thách trên chuỗi cho bất kỳ đoạn không hợp lệ nào được tạo ra trong đó mảnh vỡ. 3.7.1 Thử thách tính hợp lệ của trạng thái Khi người tham gia phát hiện thấy một đoạn cụ thể không hợp lệ, họ cần cung cấp bằng chứng cho thấy đoạn đó không hợp lệ. Vì phần lớn những người tham gia mạng không duy trì trạng thái cho phân đoạn có đoạn không hợp lệ được tạo ra, bằng chứng cần phải có đủ thông tin để xác nhận khối đó là không hợp lệ nếu không có trạng thái. Chúng tôi đặt giới hạn Ls về số lượng trạng thái (tính bằng byte) mà một giao dịch đơn lẻ có thể đọc hoặc viết tích lũy. Bất kỳ giao dịch nào chạm nhiều hơn Ls trạng thái được coi là không hợp lệ. Hãy nhớ từ phần 3.5 rằng đoạn trong khối B cụ thể chỉ chứa các giao dịch được áp dụng chứ không chứa gốc trạng thái mới. Gốc trạng thái có trong đoạn trong khối B là trạng thái root trước khi áp dụng các giao dịch đó, nhưng sau khi áp dụng các giao dịch từ đoạn cuối cùng trong cùng phân đoạn trước khối B. Một tác nhân độc hại mong muốn áp dụng chuyển đổi trạng thái không hợp lệ sẽ bao gồm gốc trạng thái không chính xác trong khối B không tương ứng với gốc trạng thái do áp dụng các giao dịch ở đoạn trước. Chúng tôi mở rộng thông tin mà nhà sản xuất chunk đưa vào chunk. Thay vì chỉ thêm trạng thái sau khi áp dụng tất cả các giao dịch, nó thay vào đó bao gồm một gốc trạng thái sau khi áp dụng từng bộ giao dịch liền kề đọc và ghi chung Ls byte trạng thái. Với thông tin này cho Fisherman tạo ra một thách thức rằng việc chuyển đổi trạng thái được áp dụng không chính xác là đủ để tìm ra gốc trạng thái không hợp lệ đầu tiên và chỉ bao gồm Ls byte của trạng thái bị ảnh hưởng bởi các giao dịch giữa trạng thái gốc cuối cùng (được hợp lệ) và trạng thái gốc hiện tại với bằng chứng merkle. Sau đó bất kỳ người tham gia nào có thể xác thực các giao dịch trong phân đoạn và xác nhận rằng đoạn đó là không hợp lệ. Tương tự, nếu nhà sản xuất chunk cố gắng đưa vào các giao dịch đọc và ghi nhiều hơn L byte trạng thái, đối với thử thách này, chỉ cần bao gồm Ls byte đầu tiên mà nó chạm tới với bằng chứng merkle, điều này sẽ đủ để áp dụng các giao dịch và xác nhận rằng sẽ có lúc cố gắng thực hiện đọc hoặc ghi nội dung vượt quá Ls byte được thực hiện.

3.7.2 Ngư dân và giao dịch xuyên mảnh nhanh chóng Như đã thảo luận trong phần 2.3, khi chúng ta giả định rằng các đoạn phân đoạn (hoặc phân đoạn các khối trong mô hình có chuỗi phân đoạn) có thể không hợp lệ và gây ra thách thức theo thời gian, nó ảnh hưởng tiêu cực đến tính cuối cùng và do đó giao tiếp giữa các phân đoạn. trong cụ thể, phân đoạn đích của bất kỳ chuyển đổi chéo nào đều không thể chắc chắn đoạn hoặc khối phân đoạn ban đầu là cuối cùng cho đến khi giai đoạn thử thách kết thúc (xem hình 21). Hình 21: Chờ đợi thời gian thử thách trước khi áp dụng biên nhận Cách giải quyết vấn đề theo cách thực hiện các giao dịch chéo tức thời là để mảnh đích không phải đợi đến giai đoạn thử thách sau khi giao dịch phân đoạn nguồn được xuất bản và áp dụng giao dịch biên nhận ngay lập tức, nhưng sau đó khôi phục phân đoạn đích cùng với phân đoạn nguồn phân đoạn nếu sau đó đoạn hoặc khối ban đầu được phát hiện là không hợp lệ (xem hình 22). Điều này áp dụng rất tự nhiên cho thiết kế Nightshade trong đó mảnh vỡ các chuỗi không độc lập mà thay vào đó, các đoạn phân đoạn đều được xuất bản cùng nhau trong cùng một khối chuỗi chính. Nếu bất kỳ đoạn nào được phát hiện là không hợp lệ, toàn bộ khối có đoạn đó được coi là không hợp lệ và tất cả các khối được xây dựng trên trên hết. Xem hình 23. Cả hai cách tiếp cận trên đều cung cấp tính nguyên tử giả định rằng thách thức thời gian đủ dài. Chúng tôi sử dụng phương pháp thứ hai vì việc cung cấp các giao dịch chéo nhanh trong các trường hợp thông thường sẽ vượt qua sự bất tiện của phân đoạn đích quay trở lại do chuyển đổi trạng thái không hợp lệ ở một trong các các mảnh nguồn, đây là một sự kiện cực kỳ hiếm. 3.7.3 Đang ẩn validators Sự tồn tại của những thách thức đã làm giảm đáng kể khả năng xảy ra tham nhũng thích ứng, vì để hoàn thiện một đoạn có bài chuyển đổi trạng thái không hợp lệHình 22: Áp dụng biên lai ngay lập tức và quay trở lại điểm đến chuỗi nếu chuỗi nguồn có khối không hợp lệ Hình 23: Thử thách làm ngư dân trong Nightshade giai đoạn thử thách mà đối thủ thích ứng cần để làm hỏng tất cả những người tham gia duy trì trạng thái của phân đoạn, bao gồm tất cả validator. Việc ước tính khả năng xảy ra một sự kiện như vậy là vô cùng phức tạp, vì không có sharded blockchain đã tồn tại đủ lâu để thực hiện bất kỳ cuộc tấn công nào như vậy. Chúng tôi lập luận rằng xác suất, mặc dù cực kỳ thấp, nhưng vẫn đủ lớn đối với một hệ thống dự kiến sẽ thực hiện hàng triệu giao dịch và điều hành các hoạt động tài chính trên toàn thế giới. Có hai lý do chính cho niềm tin này: 1. Hầu hết validator của chuỗi Bằng chứng cổ phần và công cụ khai thác của

Chuỗi Proof-of-Work chủ yếu được khuyến khích bởi lợi ích tài chính. Nếu một đối thủ có khả năng thích ứng mang lại cho họ nhiều tiền hơn lợi nhuận kỳ vọng từ việc vận hành một cách trung thực, thật hợp lý khi mong đợi rằng nhiều validators sẽ chấp nhận lời đề nghị. 2. Nhiều tổ chức thực hiện xác thực chuỗi Proof-of-Stake một cách chuyên nghiệp và người ta dự kiến rằng một tỷ lệ lớn cổ phần trong bất kỳ chuỗi nào sẽ được từ các thực thể đó. Số lượng các thực thể như vậy đủ nhỏ để đối thủ thích nghi để tìm hiểu cá nhân hầu hết họ và có một hiểu rõ khuynh hướng của họ là bị tha hóa. Chúng tôi tiến thêm một bước nữa trong việc giảm khả năng xảy ra lỗi thích ứng bằng cách ẩn validator được gán cho phân đoạn nào. Ý tưởng là tương tự như cách Algorand [5] che giấu validators. Điều quan trọng cần lưu ý là ngay cả khi validator bị ẩn, như trong Algorand hoặc như được mô tả dưới đây, về mặt lý thuyết, tham nhũng thích ứng vẫn có thể xảy ra. Trong khi đối thủ thích ứng không biết những người tham gia sẽ tạo hoặc xác thực một khối hay một đoạn, bản thân những người tham gia đều biết rằng họ sẽ thực hiện một nhiệm vụ như vậy và có bằng chứng mật mã về nó. Vì vậy, đối thủ có thể truyền bá ý định tham nhũng của họ và trả tiền cho bất kỳ người tham gia nào sẽ cung cấp một bằng chứng mật mã như vậy. Tuy nhiên, chúng tôi lưu ý rằng vì đối thủ không biết validator được gán cho phân đoạn mà chúng muốn làm hỏng, chúng không có lựa chọn nào khác ngoài việc truyền bá ý định làm hỏng một phân đoạn cụ thể tới toàn bộ cộng đồng. Vào thời điểm đó, nó mang lại lợi ích kinh tế cho bất kỳ người trung thực nào. người tham gia tạo ra một nút đầy đủ để xác thực phân đoạn đó vì có mức cao khả năng một khối không hợp lệ xuất hiện trong phân đoạn đó, đây là cơ hội để tạo ra một thử thách và thu thập phần thưởng liên quan. Để không tiết lộ validator được gán cho một phân đoạn cụ thể, chúng tôi thực hiện sau đây (xem hình 24): Sử dụng VRF để nhận nhiệm vụ. Vào đầu mỗi thời đại, mỗi validator sử dụng VRF để lấy mặt nạ bit của các phân đoạn mà validator được gán cho. Mặt nạ bit của mỗi validator sẽ có các bit Sw (xem phần 3.3 để biết định nghĩa của Sw). validator sau đó tìm nạp trạng thái của các phân đoạn tương ứng và trong kỷ nguyên cho mỗi khối nhận được sẽ xác thực các khối tương ứng vào các phân đoạn mà validator được gán cho. Đăng nhập vào khối thay vì khối. Vì việc gán phân đoạn bị ẩn nên validator không thể đăng nhập vào các phân đoạn. Thay vào đó nó luôn ký trên toàn bộ chặn, do đó không tiết lộ những phân đoạn mà nó xác nhận. Cụ thể, khi validator nhận được một khối và xác thực tất cả các khối, nó sẽ tạo ra một thông báo chứng thực rằng tất cả các đoạn trong tất cả các phân đoạn mà validator được chỉ định là hợp lệ (không cho biết những phân đoạn đó là gì) hoặc một thông báo rằng chứa bằng chứng về việc chuyển đổi trạng thái không hợp lệ nếu bất kỳ đoạn nào không hợp lệ. Xem phần 3.8 để biết chi tiết về cách tổng hợp các thông báo đó, phần 3.7.4 để biết chi tiết về cách ngăn chặn validator lợi dụng tin nhắn từ validators khác và phần 3.7.5 để biết chi tiết về cách khen thưởng và trừng phạt validators nếu thử thách chuyển đổi trạng thái không hợp lệ thành công thực sự xảy ra.Hình 24: Che giấu validator trong Nightshade 3.7.4 Cam kết-Tiết lộ Một trong những vấn đề phổ biến với validator là validator có thể bỏ qua việc tải xuống trạng thái và thực sự xác thực các khối và khối, thay vào đó quan sát mạng, xem những gì validator khác gửi và lặp lại tin nhắn. validator tuân theo chiến lược như vậy sẽ không cung cấp thêm bất kỳ bảo mật cho mạng nhưng thu thập phần thưởng. Một giải pháp phổ biến cho vấn đề này là mỗi validator cung cấp bằng chứng rằng họ thực sự đã xác thực khối đó, chẳng hạn như bằng cách cung cấp dấu vết duy nhất áp dụng chuyển đổi trạng thái, nhưng những bằng chứng như vậy làm tăng đáng kể chi phí xác nhận. Hình 25: Cam kết tiết lộ

Thay vào đó, chúng tôi thực hiện cam kết đầu tiên của validator với kết quả xác thực (hoặc thông báo chứng thực tính hợp lệ của các khối hoặc bằng chứng về tính hợp lệ của chuyển trạng thái), đợi một khoảng thời gian nhất định và chỉ sau đó mới tiết lộ kết quả xác thực thực tế, như được hiển thị trên hình 25. Khoảng thời gian cam kết không giao nhau với khoảng thời gian tiết lộ và do đó một validator lười biếng không thể bắt chước những validator trung thực. Hơn nữa, nếu một validator không trung thực cam kết thực hiện một thông báo chứng thực tính hợp lệ của các đoạn được gán và ít nhất một đoạn không hợp lệ một khi nó được đã chỉ ra rằng đoạn đó không hợp lệ nên validator không thể tránh được việc gạch chéo, vì, như chúng tôi trình bày trong phần 3.7.5, cách duy nhất để không bị chém trong tình huống như vậy là đưa ra một thông báo chứa bằng chứng về việc chuyển đổi trạng thái không hợp lệ phù hợp với cam kết. 3.7.5 Xử lý thử thách Như đã thảo luận ở trên, khi validator nhận được một khối có đoạn không hợp lệ, đầu tiên họ chuẩn bị bằng chứng về sự chuyển đổi trạng thái không hợp lệ (xem phần 3.7.1), sau đó cam kết với một bằng chứng như vậy (xem 3.7.4), và sau một thời gian hãy tiết lộ thách thức. Khi thử thách được tiết lộ được đưa vào một khối, điều sau đây sẽ xảy ra: 1. Tất cả các chuyển đổi trạng thái xảy ra từ khối chứa đoạn không hợp lệ cho đến khi khối chứa thử thách được tiết lộ bị vô hiệu hóa. Trạng thái trước khối bao gồm thử thách được tiết lộ được coi là giống với trạng thái trước khối chứa đoạn không hợp lệ. 2. Trong một khoảng thời gian nhất định, mỗi validator phải tiết lộ mặt nạ bit của mình của các phân đoạn mà họ xác nhận. Vì mặt nạ bit được tạo thông qua VRF, nếu họ được gán cho phân đoạn có quá trình chuyển đổi trạng thái không hợp lệ, họ không thể tránh khỏi việc tiết lộ nó. Bất kỳ validator nào không tiết lộ được mặt nạ bit được cho là được gán cho phân đoạn. 3. Mỗi validator sau khoảng thời gian đó được phát hiện sẽ được gán cho phân đoạn, đã cam kết với một số kết quả xác thực cho khối chứa đoạn không hợp lệ và điều đó không tiết lộ bằng chứng về việc chuyển đổi trạng thái không hợp lệ tương ứng với cam kết của họ bị cắt giảm. 4. Mỗi validator nhận được một phân đoạn mới và một kỷ nguyên mới được lên lịch bắt đầu sau một khoảng thời gian đủ để tất cả validator tải xuống trạng thái, như thể hiện trên hình 26. Lưu ý rằng kể từ thời điểm validator tiết lộ các phân đoạn mà chúng được chỉ định cho đến khi kỷ nguyên mới bắt đầu, tính bảo mật của hệ thống sẽ bị giảm do phân công mảnh vỡ được tiết lộ. Những người tham gia mạng cần phải giữ nó lưu ý khi sử dụng mạng trong thời gian đó. 3,8 Tổng hợp chữ ký Để một hệ thống có hàng trăm phân đoạn hoạt động an toàn, chúng tôi muốn có trên đơn hàng từ 10.000 trở lên validators. Như đã thảo luận trong phần 3.7, chúng tôi muốn mỗiHình 26: Xử lý thử thách validator để xuất bản một cam kết cho một tin nhắn nhất định và một chữ ký ở mức trung bình một lần cho mỗi khối. Ngay cả khi các thông điệp cam kết giống nhau, việc tổng hợp như vậy Chữ ký BLS và việc xác nhận nó sẽ rất tốn kém. Nhưng đương nhiên các thông báo cam kết và tiết lộ không giống nhau trên validators, và do đó chúng ta cần một số cách để tổng hợp các thông điệp và chữ ký đó trong một cách cho phép xác nhận nhanh chóng sau này. Cách tiếp cận cụ thể mà chúng tôi sử dụng như sau: Người xác nhận tham gia các nhà sản xuất khối. Các nhà sản xuất khối được biết đến một thời gian trước khi kỷ nguyên bắt đầu, vì họ cần một chút thời gian để tải xuống trạng thái trước khi kỷ nguyên bắt đầu và không giống như validator, các nhà sản xuất khối không che giấu. Mỗi nhà sản xuất khối có v validator vị trí. Trình xác nhận gửi đề xuất ngoài chuỗi cho các nhà sản xuất khối để được đưa vào như một trong những v validators. Nếu nhà sản xuất khối muốn bao gồm validator, họ sẽ gửi giao dịch chứa yêu cầu ngoài chuỗi ban đầu từ validator và chữ ký của nhà sản xuất khối khiến validator tham gia nhà sản xuất khối. Lưu ý rằng validator được gán cho nhà sản xuất khối không nhất thiết xác thực các phân đoạn tương tự mà nhà sản xuất khối tạo ra các khối. Nếu một validator áp dụng để tham gia nhiều nhà sản xuất khối, chỉ giao dịch từ nhà sản xuất khối đầu tiên sẽ thành công. Các nhà sản xuất khối thu thập các cam kết. Nhà sản xuất khối liên tục thu thập các thông báo cam kết và tiết lộ từ validator. Khi một số lượng tin nhắn như vậy nhất định được tích lũy, nhà sản xuất khối sẽ tính toán một merkle cây của những tin nhắn này và gửi tới mỗi validator gốc merkle và đường dẫn merkle đến tin nhắn của họ. validator xác thực đường dẫn và đăng nhập rễ merkle. Sau đó, nhà sản xuất khối sẽ tích lũy chữ ký BLS trên gốc merkle từ validators và chỉ xuất bản gốc merkle và chữ ký tích lũy Nhà sản xuất khối cũng ký vào tính hợp lệ của đa chữ ký bằng cách sử dụng chữ ký ECDSA giá rẻ. Nếu đa chữ ký không khớp với gốc merkle được gửi hoặc bitmask của validator tham gia, đó là hành vi có thể cắt được. Khi đồng bộ hóa chuỗi, người tham gia có thể chọn xác thực tất cả chữ ký BLS từ các validator (việc này cực kỳ tốn kém vì nó liên quan đến việc tổng hợp các khóa công khai của validator) hoặc chỉchữ ký ECDMA từ các nhà sản xuất khối và dựa vào thực tế là nhà sản xuất khối không bị thách thức và bị chém. Sử dụng các giao dịch trên chuỗi và bằng chứng merkle để giải quyết các thách thức. Nó có thể lưu ý rằng việc tiết lộ tin nhắn từ validator sẽ không có giá trị gì nếu không chuyển đổi trạng thái không hợp lệ đã được phát hiện. Chỉ những tin nhắn có chứa thông tin thực tế bằng chứng về việc chuyển đổi trạng thái không hợp lệ cần phải được tiết lộ và chỉ dành cho những tin nhắn như vậy nó cần phải được chứng minh rằng chúng phù hợp với cam kết trước đó. Thông điệp cần phải được tiết lộ nhằm hai mục đích: 1. Để thực sự bắt đầu quá trình khôi phục chuỗi về thời điểm trước khi thực hiện chuyển trạng thái không hợp lệ (xem phần 3.7.5). 2. Để chứng minh rằng validator không cố gắng chứng thực tính hợp lệ của đoạn không hợp lệ. Trong cả hai trường hợp, chúng ta cần giải quyết hai vấn đề: 1. Cam kết thực tế không được đưa vào chuỗi, chỉ có gốc merkle của cam kết tổng hợp với các tin nhắn khác. validator cần sử dụng đường dẫn merkle do nhà sản xuất khối cung cấp và cam kết ban đầu của họ đối với chứng minh rằng họ đã cam kết với thử thách. 2. Có thể tất cả validator được gán cho phân đoạn có giá trị không hợp lệ quá trình chuyển đổi trạng thái xảy ra được gán cho các nhà sản xuất khối bị hỏng đang kiểm duyệt chúng. Để giải quyết vấn đề này, chúng tôi cho phép họ gửi tiết lộ của mình như một giao dịch thông thường trên chuỗi và bỏ qua việc tổng hợp. Cái sau chỉ được phép đối với các bằng chứng về sự chuyển đổi trạng thái không hợp lệ, đó là cực kỳ hiếm và do đó sẽ không dẫn đến việc gửi thư rác vào các khối. Vấn đề cuối cùng cần được giải quyết là các nhà sản xuất khối có thể chọn không tham gia vào việc tổng hợp tin nhắn hoặc cố tình kiểm duyệt validators cụ thể. Chúng tôi làm cho nó trở nên bất lợi về mặt kinh tế bằng cách tạo ra khối phần thưởng của nhà sản xuất tỷ lệ thuận với số validator được chỉ định cho họ. Chúng tôi cũng lưu ý rằng vì các nhà sản xuất khối giữa các kỷ nguyên phần lớn giao nhau (vì luôn là những người tham gia có số tiền đặt cược cao nhất), validator có thể phần lớn tập trung vào làm việc với cùng một nhà sản xuất khối và do đó giảm thiểu rủi ro về việc được giao cho một nhà sản xuất khối đã kiểm duyệt chúng trong quá khứ. 3,9 Chuỗi ảnh chụp nhanh Vì các khối trên chuỗi chính được sản xuất rất thường xuyên nên việc tải xuống toàn bộ lịch sử có thể trở nên đắt đỏ rất nhanh. Hơn nữa, vì mỗi khối chứa chữ ký BLS của một số lượng lớn người tham gia, chỉ cần tổng hợp các khóa công khai để kiểm tra chữ ký có thể trở nên quá khó khăn. đắt tiền là tốt. Cuối cùng, vì trong bất kỳ tương lai gần nào Ethereum 1.0 có thể sẽ vẫn là một trong số blockchain được sử dụng nhiều nhất, có một cách hiệu quả để chuyển nội dung từ

Gần Ethereum là một yêu cầu và hôm nay việc xác minh chữ ký BLS để đảm bảo Không thể có hiệu lực ở các khối gần về phía Ethereum. Mỗi khối trong chuỗi chính Nightshade có thể tùy ý chứa Schnorr đa chữ ký trên tiêu đề của khối cuối cùng bao gồm Schnorr đa chữ ký. Chúng tôi gọi những khối như vậy là khối chụp nhanh. Khối đầu tiên của mỗi kỷ nguyên phải là một khối ảnh chụp nhanh. Trong khi làm việc trên một hệ thống đa chữ ký như vậy, nhà sản xuất khối cũng phải tích lũy chữ ký BLS của validators trên khối ảnh chụp nhanh cuối cùng và tổng hợp chúng theo cách tương tự như được mô tả trong phần 3.8. Vì bộ sản xuất khối không đổi trong suốt kỷ nguyên, nên việc xác thực chỉ các khối ảnh chụp nhanh đầu tiên trong mỗi kỷ nguyên là đủ với giả định rằng không có chỉ ra một tỷ lệ lớn các nhà sản xuất khối và validator đã thông đồng và tạo ra một cái nĩa. Khối đầu tiên của kỷ nguyên phải chứa thông tin đủ để tính toán nhà sản xuất khối và validator cho kỷ nguyên. Chúng tôi gọi chuỗi con của chuỗi chính chỉ chứa ảnh chụp nhanh chặn một chuỗi ảnh chụp nhanh. Tạo đa chữ ký Schnorr là một quá trình tương tác, nhưng vì chúng ta chỉ cần thực hiện nó không thường xuyên, bất kỳ quy trình nào, dù kém hiệu quả đến đâu sẽ đủ. Có thể dễ dàng xác thực đa chữ ký Schnorr trên Ethereum, do đó cung cấp các nguyên hàm quan trọng để thực hiện một cách an toàn chéo-blockchain giao tiếp. Để đồng bộ với chuỗi Gần, người ta chỉ cần tải xuống tất cả ảnh chụp nhanh chặn và xác nhận rằng chữ ký Schnorr là chính xác (tùy chọn cũng xác minh chữ ký BLS riêng lẻ của validators), sau đó chỉ đồng bộ hóa khối chuỗi chính từ khối ảnh chụp nhanh cuối cùng.

Nightshade

3.1 샤드 체인에서 샤드 청크로 샤드체인과 비콘체인을 이용한 샤딩 모델은 매우 강력하지만 특정 복잡성이 있습니다. 특히 포크 선택 규칙을 실행해야 합니다. 각 체인에서 별도로 샤드 체인과 비콘의 포크 선택 규칙 체인은 다르게 구축하고 별도로 테스트해야 합니다. Nightshade에서 우리는 시스템을 단일 blockchain로 모델링합니다. 블록은 논리적으로 모든 샤드에 대한 모든 트랜잭션을 포함하고 모든 샤드의 전체 상태. 그러나 물리적으로 참가자 중 누구도 다운로드하지 않습니다. 전체 상태 또는 전체 논리 블록. 대신, 네트워크의 각 참가자는 트랜잭션을 검증하는 샤드에 해당하는 상태를 유지하며, 블록의 모든 트랜잭션 목록은 물리적으로 분할됩니다. 청크, 샤드당 하나의 청크. 이상적인 조건에서 각 블록은 샤드당 정확히 하나의 청크를 포함합니다. 이는 샤드 체인이 있는 모델과 대략적으로 일치합니다. 샤드 체인은 비콘 체인과 동일한 속도로 블록을 생성합니다. 그러나, 네트워크 지연으로 인해 일부 청크가 누락될 수 있으므로 실제로는 각 블록이 샤드당 1개 또는 0개의 청크를 포함합니다. 방법에 대한 자세한 내용은 섹션 3.3을 참조하세요. 블록이 생산됩니다. 그림 16: 왼쪽에 샤드 체인이 있고 하나의 체인에 샤드 체인이 있는 모델 블록은 오른쪽의 덩어리로 분할됩니다.

3.2 합의 오늘날 blockchains의 합의에 대한 두 가지 지배적인 접근 방식은 가장 긴(또는 가장 무거운) 체인, 가장 많은 작업이나 스테이크가 있는 체인 이를 구축하는 데 사용된 것은 정식으로 간주되며 BFT, 각 블록에 대해 validator 세트는 BFT 합의에 도달합니다. 최근 제안된 프로토콜에서는 후자가 더 지배적인 접근 방식입니다. 즉각적인 최종성을 제공하는 반면 가장 긴 체인에서는 더 많은 블록이 필요하기 때문입니다. 최종성을 보장하기 위해 블록 위에 구축됩니다. 종종 의미 있는 일을 위해 보안상 충분한 수의 블록을 구축하는 데 걸리는 시간은 시간 순서. 각 블록에서 BFT 합의를 사용하면 다음과 같은 단점도 있습니다. 1. BFT 합의에는 상당한 양의 의사소통이 필요합니다. 동안 최근의 발전으로 선형적인 시간 내에 합의에 도달할 수 있게 되었습니다. 참가자 수(예: [4] 참조)에서는 여전히 블록당 오버헤드가 눈에 띕니다. 2. 모든 네트워크 참여자가 BFT에 참여하는 것은 불가능합니다. 블록당 합의에 도달하므로 일반적으로 무작위로 샘플링된 참가자 하위 집합만 합의에 도달합니다. 무작위로 추출된 세트는 원칙적으로 다음과 같습니다. 적응적으로 손상되고 이론적으로는 포크가 생성될 수 있습니다. 시스템 그러한 이벤트에 대비하려면 모델링이 필요하므로 여전히 BFT 합의 외에 포크 선택 규칙이 있거나 폐쇄되도록 설계되었습니다. 이런 경우에는 다운됩니다. 다음과 같은 일부 디자인을 언급할 가치가 있습니다. Algorand [5], 적응형 손상 가능성을 크게 줄입니다. 3. 가장 중요한 것은 다음과 같은 경우 시스템이 정지된다는 것입니다. 전체 참가자 중 3명 이상이 오프라인. 따라서 일시적인 네트워크 결함이나 네트워크 분할로 인해 시스템이 완전히 정지될 수 있습니다. 이상적으로 시스템은 계속해서 작동할 수 있어야 합니다. 참가자 중 최소 절반이 온라인 상태인 한(가장 무거운 체인 기반 프로토콜은 참가자의 절반 미만이 온라인 상태인 경우에도 계속 작동하지만 이 속성의 바람직성은 더 논쟁의 여지가 있습니다. 커뮤니티 내에서). 사용된 합의가 일종의 가장 무거운 하이브리드 모델 체인이지만 일부 블록은 BFT 최종성 가젯을 사용하여 주기적으로 마무리되며 두 모델의 장점을 모두 유지합니다. 이러한 BFT 최종 가젯은 Casper FFG [6]는 Ethereum 2.0 8, Casper CBC에서 사용됩니다(https://vitalik. 참조). ca/general/2018/12/05/cbc_casper.html) 및 GRANDPA(https:// Medium.com/polkadot-network/d08a24a021b5) Polkadot에서 사용됩니다. Nightshade는 가장 무거운 체인 합의를 사용합니다. 특히 블록일 때 생산자는 블록을 생성하고(섹션 3.3 참조) 다음에서 서명을 수집할 수 있습니다. 다른 블록 생산자와 이전 블록을 증명하는 validators. 섹션을 참조하세요 이렇게 많은 수의 서명이 어떻게 집계되는지 자세히 알아보려면 3.8을 참조하세요. 무게 8Casper에 대한 심층적인 개요는 Justin Drake와의 화이트보드 세션도 참조하세요. FFG 및 이것이 GHOST의 가장 무거운 체인 합의와 통합되는 방법은 다음과 같습니다: https://www. youtube.com/watch?v=S262StTwkmo블록의 서명은 다음과 같은 서명을 가진 모든 서명자의 누적 지분입니다. 블록에 포함됩니다. 체인의 무게는 블록 무게의 합입니다. 가장 무거운 체인 합의 위에 우리는 다음을 사용하는 최종 장치를 사용합니다. 블록을 마무리하기 위한 증명입니다. 시스템의 복잡성을 줄이기 위해, 우리는 포크 선택 규칙에 어떤 식으로든 영향을 주지 않는 최종 장치를 사용합니다. 대신 추가 슬래싱 조건만 도입합니다. 최종 가젯으로 마무리된 경우 매우 큰 비율이 아니면 포크는 불가능합니다. 전체 지분 중 삭감됩니다. Casper CBC는 그러한 최종 장치이며 우리는 현재 Casper CBC를 염두에 두고 모델을 만들고 있습니다. 우리는 또한 TxFlow라는 별도의 BFT 프로토콜을 개발하고 있습니다. 당시 이 문서를 작성하면 Casper 대신 TxFlow가 사용될지 확실하지 않습니다. CBC. 그러나 우리는 최종 가젯의 선택이 나머지 설계와 대체로 직교한다는 점에 주목합니다. 3.3 블록 생산 Nightshade에는 블록 생산자와 validator라는 두 가지 역할이 있습니다. 언제든지 시스템에 w개의 블록 생산자가 포함되어 있고, 우리 모델에서는 w = 100이며, wv validators, 우리 모델에서는 v = 100, wv = 10, 000입니다. 시스템은 지분 증명입니다. 이는 블록 생산자와 validator 모두 내부에 일정 수의 내부 정보가 있음을 의미합니다. 통화("tokens"라고 함)는 해당 통화를 훨씬 초과하는 기간 동안 잠겨 있습니다. 체인을 구축하고 검증하는 임무를 수행하는 데 소요되는 시간입니다. 모든 지분 증명 시스템과 마찬가지로, 모든 w 블록 생산자가 아니라 모든 wv validator은 시행할 수 없기 때문에 다른 엔터티입니다. 각각 그러나 w 블록 생산자와 wv validators는 별도의 스테이크. 시스템에는 n개의 샤드가 포함되어 있으며 모델에서는 n = 1000입니다. 에서 언급했듯이 섹션 3.1, Nightshade에는 샤드 체인이 없습니다. 대신 모든 블록 생산자와 validator가 단일 blockchain를 구축하고 있습니다. 메인 체인. 메인체인의 상태는 n개의 샤드로 분할되며, 각 블록은 producer 및 validator은 언제든지 로컬에 하위 집합만 다운로드했습니다. 샤드의 일부 하위 집합에 해당하는 상태이며, 처리 및 주의 해당 부분에 영향을 미치는 거래를 검증합니다. 블록 생산자가 되기 위해 네트워크 참가자는 일부 대규모 잠금을 설정합니다. tokens(스테이크)의 양. 네트워크의 유지 관리는 시대별로 이루어집니다. 여기서 에포크는 일 단위의 기간입니다. 참가자 특정 시대가 시작될 때 가장 큰 지분을 가진 블록은 다음과 같습니다. 그 시대의 생산자. 각 블록 생산자는 sw 샤드에 할당됩니다(예: sw = 40, 즉 샤드당 sww/n = 4명의 블록 생산자가 됩니다. 블록 생산자는 에포크 이전에 할당된 샤드의 상태를 다운로드합니다. 시작되고 에포크 전반에 걸쳐 해당 샤드에 영향을 미치는 트랜잭션을 수집합니다. 그리고 이를 국가에 적용합니다. 메인 체인의 각 블록 b와 모든 샤드 s에 대해 다음 중 하나가 있습니다. b 관련 부분을 생산할 책임이 있는 블록 생산자를 s에게 할당했습니다. 샤드에. 샤드 s와 관련된 b 부분을 청크라고 하며 다음을 포함합니다. b에 포함될 샤드에 대한 트랜잭션 목록과 머클결과 상태의 루트. b는 궁극적으로 매우 작은 헤더만 포함하게 됩니다. 청크, 즉 적용된 모든 트랜잭션의 머클 루트(섹션 참조) 정확한 세부 사항은 3.7.1 참조) 및 최종 상태의 머클 루트입니다. 문서의 나머지 부분에서 우리는 종종 블록 생산자를 언급합니다. 특정 샤드에 대해 특정 시간에 청크를 생성하는 역할을 담당합니다. 청크 프로듀서로서. 청크 생산자는 항상 블록 생산자 중 하나입니다. 블록 생산자와 청크 생산자는 각 블록을 다음과 같이 회전합니다. 정해진 일정으로. 블록 생산자는 주문을 받고 반복적으로 생산을 합니다. 그 순서대로 블록을 쌓으세요. 예: 블록 생산자가 100명이면 첫 번째 블록은 생산자는 블록 1, 101, 201 등을 생산할 책임이 있으며, 두 번째는 2, 102, 202 등 생산 담당). 청크 생산은 블록 생산과 달리 유지 관리가 필요하므로 상태를 유지하며, 각 샤드에 대해 sww/n 블록 생산자만이 상태를 유지합니다. 샤드별로 해당 sww/n 블록 생산자만 순환하여 생성합니다. 덩어리. 예: 위의 상수와 4명의 블록 생산자가 할당되어 있습니다. 각 샤드, 각 블록 생산자는 4개의 블록마다 한 번씩 청크를 생성합니다. 3.4 데이터 가용성 보장 데이터 가용성을 보장하기 위해 우리는 Polkadot과 유사한 접근 방식을 사용합니다. 섹션 2.5.3에 설명되어 있습니다. 블록 생산자가 청크를 생성하면 다음을 생성합니다. 최적의 (w, ⌊w/6 + 1⌋) 블록 코드를 사용하여 삭제 코딩된 버전 덩어리. 그런 다음 삭제 코딩된 청크의 한 조각을 보냅니다(우리는 이러한 조각을 호출합니다). 청크 부분 또는 부분)을 각 블록 생산자에게 전달합니다. 우리는 나뭇잎과 같은 모든 부분을 포함하는 머클 트리를 계산합니다. 각 청크의 헤더에는 해당 트리의 머클 루트가 포함됩니다. 부품은 onepart 메시지를 통해 validators로 전송됩니다. 그런 메시지 하나하나 청크 헤더, 부분의 서수 및 부분 내용을 포함합니다. 는 메시지에는 해당 블록을 생성한 블록 생산자의 서명도 포함되어 있습니다. 해당 부분이 헤더에 해당함을 증명하기 위한 청크와 머클 경로 그리고 적절한 블록 생산자에 의해 생산됩니다. 블록 생산자가 메인 체인 블록을 받으면 먼저 블록 생성 여부를 확인합니다. 블록에 포함된 각 청크에 대해 하나의 메시지를 가집니다. 그렇지 않으면 블록 누락된 onepart 메시지가 검색될 때까지 처리되지 않습니다. 모든 onepart 메시지가 수신되면 블록 생산자는 피어로부터 남은 부분을 가져와 그들이 보유하고 있는 청크를 재구성합니다. 상태. 블록 생산자는 메인 체인 블록을 처리하지 않습니다. 블록에 포함된 청크에는 해당 onepart 메시지가 없거나 상태를 유지하는 하나 이상의 샤드에 대해 사용할 수 없는 경우 전체 청크를 재구성합니다. 특정 청크를 사용하려면 블록의 ⌊w/6⌋+1이면 충분합니다. 생산자는 자신의 역할을 갖고 이를 제공합니다. 따라서, 그 수만큼은 악의적인 행위자는 블록이 절반 이상인 체인이 없는 ⌊w/3⌋을 초과하지 않습니다. 그것을 만드는 생산자는 사용할 수 없는 청크를 가질 수 있습니다.그림 17: 각 블록에는 샤드당 1개 또는 0개의 청크가 포함되어 있으며, 각 청크는 삭제 코딩되어 있습니다. 삭제 코딩된 청크의 각 부분은 지정된 위치로 전송됩니다. 특별한 onepart 메시지를 통한 블록 생산자 3.4.1 게으른 블록 생산자 다루기 블록 생산자가 한 부분 메시지가 누락된 블록을 가지고 있는 경우, 블록이 체인에 연결되면 계속 서명하기로 선택할 수 있습니다. 블록 생산자에 대한 보상을 극대화할 것입니다. 블록에 대한 위험이 없습니다 왜냐하면 블록 프로듀서가 블록 프로듀서를 갖고 있지 않았다는 것을 나중에 증명하는 것이 불가능하기 때문입니다. 한 부분 메시지. 이 문제를 해결하기 위해 청크를 생성할 때 각 청크 생산자를 만듭니다. 향후 인코딩된 청크의 각 부분에 대해 색상(빨간색 또는 파란색)을 선택하고 저장합니다. 인코딩되기 전 청크에 할당된 색상의 비트마스크입니다. 각 부분 메시지에는 부품에 할당된 색상이 포함되며, 색상은 다음과 같은 경우에 사용됩니다. 인코딩된 부분의 머클 루트를 계산합니다. 청크 생산자가 이탈하는 경우 머클 루트는 그렇지 않기 때문에 프로토콜에서 쉽게 증명할 수 있습니다. onepart 메시지에 해당하거나, onepart 메시지의 색상에 해당합니다. 머클 루트에 해당하는 것은 청크의 마스크와 일치하지 않습니다. 블록 생산자가 블록에 서명하면 모든 블록의 비트마스크가 포함됩니다. 블록에 포함된 청크에 대해 받은 빨간색 부분입니다. 게시 잘못된 비트마스크는 슬래시 가능한 동작입니다. 블록 생산자가 메시지를 받지 못한 경우 메시지를 한 부분으로만 읽어도 메시지의 색상을 알 수 없습니다. 따라서 맹목적으로 서명을 시도하면 베임을 당할 확률이 50%입니다. 블록. 3.5 상태 전이 신청 청크 생산자는 청크에 포함할 트랜잭션만 선택하지만 청크를 생성할 때 상태 전환을 적용하지 마십시오. 이에 따라,

청크 헤더에는 이전의 머켈화된 상태의 머클 루트가 포함되어 있습니다. 청크의 트랜잭션이 적용됩니다. 트랜잭션은 청크를 포함하는 전체 블록에만 적용됩니다. 처리됩니다. 참가자는 다음의 경우에만 블록을 처리합니다. 1. 이전 블록이 수신되어 처리되었습니다. 2. 각 청크에 대해 참가자는 자신이 가지고 있는 상태를 유지하지 않습니다. onepart 메시지를 보았습니다. 3. 각 청크에 대해 참가자는 상태를 유지합니다. 전체 덩어리. 블록이 처리되면 참가자가 사용하는 각 샤드에 대해 상태를 유지하고 트랜잭션을 적용하고 새로운 상태를 계산합니다. 거래가 적용된 후부터 생산 준비가 완료됩니다. 다음 블록의 청크(샤드에 할당된 경우) 새로운 머켈화된 상태의 머클 루트. 3.6 교차 샤드 거래 및 영수증 트랜잭션이 둘 이상의 샤드에 영향을 미쳐야 하는 경우 연속적으로 수행되어야 합니다. 각 샤드에서 개별적으로 실행됩니다. 전체 트랜잭션이 첫 번째 샤드로 전송됩니다. 영향을 받고 트랜잭션이 해당 샤드의 청크에 포함되면 청크가 블록에 포함된 후 적용되면 소위 영수증이 생성됩니다. 트랜잭션이 필요한 다음 샤드로 라우팅됩니다. 처형되다. 추가 단계가 필요한 경우 영수증 거래 실행 새로운 영수증 거래 등을 생성합니다. 3.6.1 영수증 거래 수명 영수증 거래는 해당 거래가 발생한 블록 바로 다음 블록에 적용하는 것이 바람직하다. 영수증 거래는 블록 생산자가 이전 블록을 수신하고 적용한 후에 생성됨 원래 샤드를 유지하고 샤드가 생성될 때까지 알려져야 합니다. 다음 블록의 청크는 대상의 블록 생산자가 생성합니다. 파편. 따라서 영수증은 소스 샤드에서 샤드에 전달되어야 합니다. 두 이벤트 사이의 짧은 시간 내에 대상 샤드를 생성합니다. A를 영수증 r을 생성하는 트랜잭션 t를 포함하는 마지막으로 생성된 블록이라고 가정합니다. B를 다음으로 생성된 블록(즉, A를 갖는 블록)이라고 가정합니다. 이전 블록)에 r을 포함하려고 합니다. t가 샤드 a와 r에 있도록 하세요. 샤드에서 b. 그림 18에도 표시된 영수증의 수명은 다음과 같습니다. 영수증을 생성하고 보관합니다. 샤드의 청크 생산자 CPA a는 블록 A를 수신하고, 트랜잭션 t를 적용하고 영수증 r을 생성합니다. CPA 그런 다음 생성된 모든 영수증을 색인이 생성된 내부 영구 저장소에 저장합니다. 소스 샤드 ID로영수증을 배포합니다. CPA가 청크를 생성할 준비가 되면 블록 B에 대한 샤드 a, 샤드 a에 대한 블록 A의 트랜잭션을 적용하여 생성된 모든 영수증을 가져와 shrad에 대한 청크에 포함했습니다. 블록 B의 a. 해당 청크가 생성되면 cpa는 삭제 코딩된 삭제 코드를 생성합니다. 버전 및 해당하는 모든 onepart 메시지. cpa는 어떤 블록 생산자가 샤드의 전체 상태를 유지하는지 알고 있습니다. 특정 블록 생산자의 경우 bp cpa에는 블록 A의 거래를 적용하여 발생한 영수증이 포함됩니다. bp가 대상으로 관심을 갖는 샤드 중 하나를 포함하는 샤드 a의 경우 블록 B의 샤드 A에 대한 청크를 배포할 때 onepart 메시지에서 (onepart 메시지에 포함된 영수증을 보여주는 그림 17 참조) 영수증을 받고 있습니다. 참가자(블록 생산자와 validator 모두)는 단일 메시지를 받을 때까지 블록을 처리하지 않는다는 점을 기억하십시오. 블록에 포함된 각 청크에 대해. 따라서 특정 참가자가 블록 B를 적용할 때쯤에는 블록 B에 해당하는 모든 단일 부분 메시지를 갖게 됩니다. B에 청크가 있으므로 샤드가 있는 모든 수신 영수증을 갖게 됩니다. 참가자는 목적지로 상태를 유지합니다. 신청할 때 특정 샤드에 대한 상태 전환, 참가자는 두 가지 영수증을 모두 적용합니다. 그들은 onepart 메시지의 샤드를 위해 수집한 것뿐만 아니라 모든 청크 자체에 포함된 트랜잭션입니다. 그림 18: 영수증 거래의 수명 3.6.2 너무 많은 영수증 처리 특정 샤드를 대상으로 하는 영수증의 수가 특정 블록이 너무 커서 처리할 수 없습니다. 예를 들어 그림 19를 살펴보겠습니다. 각 샤드의 각 거래는 샤드 1을 대상으로 하는 영수증을 생성합니다. 다음 블록까지 샤드 1이 처리해야 하는 영수증 수는 다음과 같습니다. 처리하는 동안 모든 샤드가 결합되어 처리하는 부하와 비슷합니다. 이전 블록.

그림 19: 모든 영수증이 동일한 샤드를 대상으로 하는 경우 샤드는 그것을 처리할 수 있는 능력 이를 해결하기 위해 우리는 QuarkChain 9에서 사용된 것과 유사한 기술을 사용합니다. 구체적으로, 각 샤드에 대해 마지막 블록 B와 해당 샤드 내의 마지막 샤드 영수증이 적용된 블록이 기록됩니다. 새로운 샤드가 생성되면 생성되면 B에 남아있는 샤드부터 순서대로 영수증이 적용되며, 그런 다음 새 청크가 가득 찰 때까지 B를 따르는 블록에서. 정상 이하 부하가 균형 잡힌 상황에서는 일반적으로 모든 영수증이 발생합니다. 적용됩니다(따라서 마지막 블록의 마지막 샤드가 기록됩니다). 각 청크), 하지만 로드가 균형을 이루지 못하는 경우, 그리고 특정 샤드는 불균형적으로 많은 영수증을 받습니다. 이 기술을 사용하면 샤드는 다음과 같은 일을 할 수 있습니다. 포함된 거래 수 제한을 준수하면서 처리됩니다. 이러한 불균형 부하가 오랫동안 지속되면 지연이 발생합니다. 영수증 생성 전까지 신청은 무한정 늘어날 수 있습니다. 하나 이 문제를 해결하는 방법은 다음을 대상으로 하는 영수증을 생성하는 모든 거래를 삭제하는 것입니다. 일부 상수(예: 1 에포크)를 초과하는 처리 지연이 있는 샤드. 그림 20을 살펴보세요. 블록 B에서는 샤드 4가 모든 영수증을 처리할 수 없습니다. 따라서 블록 A의 최대 샤드 3에서 발생한 영수증만 처리합니다. 그것을 기록합니다. 블록 C에는 블록 B의 샤드 5까지의 영수증이 포함됩니다. 그런 다음 블록 D에서 샤드가 따라잡아 나머지 영수증을 모두 처리합니다. 블록 B와 블록 C의 모든 영수증. 3.7 청크 검증 특정 샤드에 대해 생성된 청크(또는 샤드 체인이 있는 모델에서 특정 샤드 체인에 대해 생성된 샤드 블록)는 오직 9여기에서 QuarkChain의 화이트보드 에피소드를 확인하세요: https://www.youtube.com/watch? v=opEtG6NM4x4, 여기에서는 교차 샤드 트랜잭션에 대한 접근 방식이 논의됩니다. 것들그림 20: 지연된 영수증 처리 상태를 유지하는 참가자. 그들은 블록 생산자가 될 수 있습니다, validators, 또는 상태를 다운로드하고 샤드를 검증한 외부 증인일 수도 있습니다. 자산을 저장하는 곳입니다. 이 문서에서는 대부분의 참가자가 저장할 수 없다고 가정합니다. 샤드의 상당 부분에 대한 상태입니다. 언급할 가치는 있지만, 다음과 같은 가정으로 설계된 샤딩된 blockchain이 있습니다. 대부분의 참가자는 대부분의 상태를 저장하고 검증할 수 있는 능력을 가지고 있습니다. QuarkChain과 같은 샤드. 참가자 중 극히 일부만이 샤드를 검증할 수 있는 상태를 갖고 있기 때문에 청크를 갖고 있는 참가자만 적응적으로 손상시킬 수 있습니다. 상태를 확인하고 잘못된 상태 전환을 적용합니다. 몇 번씩 validator을 샘플링하는 다중 샤딩 설계가 제안되었습니다. 일, 그리고 하루 이내에 2/3 이상인 샤드 체인의 모든 블록 해당 샤드에 할당된 validator의 서명이 즉시 고려됩니다. 최종. 이러한 접근 방식을 사용하면 적응력이 뛰어난 공격자는 2n/3+1만 부패시키면 됩니다. 샤드 체인의 validator 중 잘못된 상태 전환을 적용합니다. 해내기 어려울 가능성이 높지만 대중에게 충분한 보안 수준은 아닙니다. blockchain. 섹션 2.3에서 설명한 것처럼 일반적인 접근 방식은 상태가 있는 모든 참가자에 대해 블록이 생성된 후 특정 시간을 허용하는 것입니다. 그 타당성에 도전하는 것은 블록 생산자, validator 또는 외부 관찰자입니다. 이러한 참가자를 어부(Fishermen)라고 합니다. 낚시꾼이 할 수 있는 일 유효하지 않은 블록에 대해 이의를 제기하려면 해당 블록을 사용할 수 있는지 확인해야 합니다. 그들. Nightshade의 데이터 가용성은 섹션 3.4에서 논의됩니다. Nightshade에서는 블록이 생성되면 해당 청크가 검증되지 않습니다. 실제 청크 생산자가 아닌 사람. 특히, 블록 프로듀서는 블록이 당연히 대부분의 샤드에 대한 상태를 갖고 있지 않다고 제안했습니다.청크의 유효성을 검사할 수 없습니다. 다음 블록이 생성되면 여러 블록 생산자와 validator의 증명(섹션 3.2 참조)이 포함됩니다. 하지만 대부분의 블록 생산자와 validator은 상태를 유지하지 않기 때문에 대부분의 샤드에서도 유효하지 않은 청크가 하나만 있는 블록은 증명의 절반 이상을 수집하고 계속해서 가장 무거운 상태를 유지하게 됩니다. 체인. 이 문제를 해결하기 위해 우리는 다음 상태를 유지하는 모든 참가자를 허용합니다. 생성된 유효하지 않은 청크에 대해 온체인으로 챌린지를 제출하는 샤드 파편. 3.7.1 상태 타당성 문제 참가자가 특정 청크가 유효하지 않음을 감지하면 해당 청크가 유효하지 않다는 증거를 제공해야 합니다. 대부분의 네트워크 참여자는 유효하지 않은 청크가 존재하는 샤드에 대한 상태를 유지하지 않기 때문에 생성되면 증거에는 블록이 다음과 같은지 확인하는 데 충분한 정보가 있어야 합니다. 상태가 없으면 유효하지 않습니다. 우리는 단일 트랜잭션이 처리하는 상태량(바이트)의 한계 Ls를 설정합니다. 누적적으로 읽거나 쓸 수 있습니다. Ls 이상에 영향을 미치는 모든 거래 상태는 유효하지 않은 것으로 간주됩니다. 섹션 3.5에서 청크가 특정 블록 B에는 적용할 트랜잭션만 포함되어 있지만 새로운 상태 루트. 블록 B의 청크에 포함된 상태 루트가 상태입니다. 그러한 트랜잭션을 적용하기 전에는 루트이지만 다음에서 트랜잭션을 적용한 후에는 블록 이전의 동일한 샤드의 마지막 청크 B. 악의적인 행위자 잘못된 상태 전환을 적용하려고 하면 잘못된 상태 루트가 포함됩니다. 적용 결과로 발생한 상태 루트에 해당하지 않는 블록 B에서 이전 청크의 트랜잭션. 청크 생산자가 청크에 포함하는 정보를 확장합니다. 모든 트랜잭션을 적용한 후 상태를 포함하는 대신 각 연속 트랜잭션 집합을 적용한 후 상태 루트를 포함합니다. 상태의 Ls 바이트를 집합적으로 읽고 씁니다. 이 정보를 통해 상태 전환이 잘못 적용되는 문제를 만드는 어부 첫 번째 유효하지 않은 상태 루트를 찾고 Ls 바이트만 포함하면 충분합니다. 마지막 상태 루트(이는 유효한) 및 머클 증명이 포함된 현재 상태 루트입니다. 그러면 어떤 참가자라도 세그먼트의 트랜잭션을 검증하고 청크가 다음과 같은지 확인할 수 있습니다. 유효하지 않습니다. 마찬가지로, 청크 생산자가 다음을 읽는 트랜잭션을 포함하려고 시도한 경우 Ls 바이트 이상의 상태를 작성합니다. 이 문제의 경우 다음을 포함하는 것으로 충분합니다. 머클 증명과 접촉하는 첫 번째 L 바이트는 다음과 같이 충분합니다. 트랜잭션을 적용하고 시도가 있는 순간이 있는지 확인합니다. Ls 바이트를 초과하는 콘텐츠를 읽거나 씁니다.

3.7.2 어부와 빠른 샤드 간 거래 섹션 2.3에서 설명한 것처럼 샤드 청크(또는 샤드)가 샤드 체인이 있는 모델의 블록)은 유효하지 않으며 문제가 발생할 수 있습니다. 기간 동안 이는 최종성에 부정적인 영향을 미쳐 샤드 간 통신에 부정적인 영향을 미칩니다. 에서 특히, 샤드 간 거래의 대상 샤드는 확실할 수 없습니다. 원래 샤드 청크 또는 블록은 챌린지 기간이 끝날 때까지 최종입니다. (그림 21 참조) 그림 21: 영수증을 적용하기 전에 챌린지 기간을 기다리는 중 교차 샤드 트랜잭션을 수행하는 방식으로 이를 해결하는 방법 Instantenious는 대상 샤드가 챌린지 기간을 기다리지 않는 것입니다. 소스 샤드 트랜잭션이 게시된 후 영수증 트랜잭션을 적용합니다. 즉시, 그러나 소스와 함께 대상 샤드를 롤백합니다. 나중에 원래 청크나 블록이 유효하지 않은 것으로 밝혀지면 샤딩합니다(그림 참조). 22). 이는 샤드가 사용되는 Nightshade 디자인에 매우 자연스럽게 적용됩니다. 체인은 독립적이지 않지만 대신 샤드 청크가 모두 게시됩니다. 동일한 메인 체인 블록에 함께 있습니다. 유효하지 않은 청크가 발견되면 해당 청크가 포함된 전체 블록은 유효하지 않은 것으로 간주되며, 그 위에 구축된 모든 블록은 그것의 꼭대기. 그림 23을 참조하십시오. 위의 두 접근 방식 모두 챌린지가 다음과 같다고 가정하여 원자성을 제공합니다. 기간은 충분히 길다. 정상적인 상황에서 빠른 크로스샤드 트랜잭션을 제공하는 것이 불편함을 능가하기 때문에 우리는 후자의 접근 방식을 사용합니다. 다음 중 하나의 잘못된 상태 전환으로 인해 대상 샤드 롤백 이는 극히 드문 이벤트입니다. 3.7.3 validator 숨기기 문제가 존재하면 이미 다음과 같은 가능성이 크게 감소합니다. 잘못된 상태 전환 포스트로 청크를 마무리하기 때문에 적응형 손상그림 22: 영수증 즉시 적용 및 대상 롤백 소스 체인에 유효하지 않은 블록이 있는 경우 체인 그림 23: Nightshade의 어부 도전 적응형 적이 모든 참가자를 부패시키는 데 필요한 도전 기간 모든 validator을 포함하여 샤드의 상태를 유지합니다. 그러한 사건의 가능성을 추정하는 것은 매우 복잡합니다. 샤딩된 blockchain은 그러한 공격이 시도될 만큼 오랫동안 활성화되었습니다. 우리는 확률이 극히 낮지만 여전히 충분하다고 주장합니다. 수백만 건의 트랜잭션을 실행할 것으로 예상되는 시스템에 비해 규모가 크고 세계적인 금융 운영을 운영합니다. 이러한 믿음에는 두 가지 주요 이유가 있습니다. 1. 대부분의 지분 증명 체인과 채굴자의 validator

작업 증명 체인은 주로 재정적 측면에서 인센티브를 받습니다. 만약에 적응형 적군은 예상 수익보다 더 많은 돈을 제공합니다. 정직하게 운영하면 많은 validator이 발생할 것으로 예상하는 것이 합리적입니다. 그 제안을 받아들일 것이다. 2. 많은 기업이 지분 증명 체인을 전문적으로 검증합니다. 어떤 체인에서든 지분의 상당 부분이 그러한 단체로부터. 그러한 개체의 수는 한 기업에 비해 충분히 적습니다. 적응력이 뛰어난 적은 그들 대부분을 개인적으로 알아가고 그들의 부패 성향을 잘 이해하고 있습니다. 우리는 어떤 validator이 어떤 샤드에 할당되어 있는지 숨김으로써 적응형 손상 가능성을 줄이는 데 한 단계 더 나아갔습니다. 아이디어는 Algorand [5]이 validator을 숨기는 방식과 원격으로 유사합니다. Algorand에서와 같이 validator이 숨겨져 있더라도 주의하는 것이 중요합니다. 또는 아래 설명된 것처럼 적응형 손상은 이론상으로는 여전히 가능합니다. 동안 적응형 적수는 생성하거나 검증할 참가자를 알지 못합니다. 블록이나 덩어리, 참가자 스스로는 자신이 수행할 것임을 알고 있습니다. 그러한 작업을 수행하고 이에 대한 암호화 증거를 가지고 있습니다. 따라서 상대방은 다음과 같이 할 수 있다. 부패하려는 의도를 알리고 이를 제공할 참가자에게 비용을 지불합니다. 그러한 암호화 증명. 그러나 우리는 적이 그렇지 않기 때문에 손상시키려는 샤드에 할당된 validator을 알고 있으면 특정 샤드를 손상시키려는 의도를 다른 사람에게 알리는 것 외에는 다른 선택이 없습니다. 전체 커뮤니티. 그 시점에서는 정직한 사람이라면 누구에게나 경제적으로 이익이 됩니다. 참가자는 샤드를 검증하는 전체 노드를 가동합니다. 해당 샤드에 유효하지 않은 블록이 나타날 가능성이 있습니다. 챌린지를 만들고 관련 보상을 받으세요. 특정 샤드에 할당된 validator을 공개하지 않기 위해 우리는 다음(그림 24 참조): VRF를 사용하여 과제를 얻습니다. 각 시대가 시작될 때마다 validator은 VRF를 사용하여 validator이 할당된 샤드의 비트마스크를 가져옵니다. 각 validator의 비트마스크에는 Sw 비트가 있습니다(정의는 섹션 3.3 참조). SW의). 그런 다음 validator는 해당 샤드의 상태를 가져오고 수신된 각 블록에 대해 해당 에포크 동안 해당 청크의 유효성을 검사합니다. validator이 할당된 샤드에. 청크 대신 블록에 서명하세요. 샤드 할당이 숨겨져 있으므로 validator은 청크에 서명할 수 없습니다. 대신 항상 전체에 서명합니다. 따라서 어떤 샤드가 검증되었는지 공개하지 않습니다. 특히 validator이 블록을 수신하고 모든 청크를 검증할 때 메시지를 생성하거나 이는 validator이 할당된 모든 샤드의 모든 청크가 유효함(해당 샤드가 무엇인지 어떤 방식으로든 표시하지 않음) 또는 다음과 같은 메시지 청크가 유효하지 않은 경우 유효하지 않은 상태 전환에 대한 증거가 포함됩니다. 참조 이러한 메시지가 어떻게 집계되는지에 대한 자세한 내용은 섹션 3.8을, 섹션 3.7.4를 참조하세요. validators가 메시지에 편승하는 것을 방지하는 방법에 대한 세부정보 보상 및 처벌 방법에 대한 자세한 내용은 기타 validator 및 섹션 3.7.5를 참조하세요. validators는 잘못된 상태 전환 문제가 실제로 발생해야 성공한다는 것입니다.그림 24: Nightshade에 validator을 숨기기 3.7.4 커밋-공개 validators의 일반적인 문제 중 하나는 validator이 상태 다운로드와 실제로 청크 및 블록 유효성 검사를 건너뛸 수 있다는 것입니다. 네트워크를 관찰하고 다른 validator이 제출한 내용을 확인하고 반복하세요. 메시지. 이러한 전략을 따르는 validator은 추가 기능을 제공하지 않습니다. 네트워크 보안을 강화하지만 보상을 수집합니다. 이 문제에 대한 일반적인 해결책은 각 validator이 증거를 제공하는 것입니다. 예를 들어 고유한 추적을 제공하여 실제로 블록의 유효성을 검사했습니다. 상태 전이를 적용하는 방법이 있지만 그러한 증명은 비용을 상당히 증가시킵니다. 검증의. 그림 25: 커밋-공개

대신 우리는 검증 결과에 대해 validators의 첫 번째 커밋을 만듭니다(둘 중 하나). 청크의 유효성을 증명하는 메시지 또는 유효하지 않은 청크의 증거 상태 전환), 일정 기간 동안 기다렸다가 그림 25와 같이 실제 검증 결과를 공개합니다. 커밋 기간은 상태 전환과 교차하지 않습니다. 공개 기간이므로 게으른 validator은 정직한 validator을 흉내낼 수 없습니다. 더욱이, 부정직한 validator이 다음을 증명하는 메시지를 약속한 경우 할당된 청크의 유효성을 확인하고 적어도 하나의 청크가 유효하지 않은 경우 청크가 유효하지 않은 것으로 나타났습니다. validator은 슬래싱을 피할 수 없습니다. 섹션 3.7.5에서 볼 수 있듯이 이러한 상황에서 슬래시를 당하지 않는 유일한 방법은 잘못된 상태 전환에 대한 증거가 포함된 메시지를 제시하는 것입니다. 커밋과 일치합니다. 3.7.5 문제 처리 위에서 설명한 대로 validator이 유효하지 않은 청크가 있는 블록을 수신하면, 먼저 유효하지 않은 상태 전환에 대한 증거를 준비한 다음(섹션 3.7.1 참조) 그러한 증명을 수행하고(3.7.4 참조) 일정 기간이 지나면 도전 과제를 공개합니다. 공개된 챌린지가 블록에 포함되면 다음과 같은 일이 발생합니다. 1. 해당 블록을 포함하는 블록에서 발생한 모든 상태 전환 공개된 챌린지가 포함된 블록까지 유효하지 않은 청크를 얻습니다. 무효화되었습니다. 공개된 챌린지를 포함하는 블록 이전의 상태 포함된 블록 이전의 상태와 동일한 것으로 간주됩니다. 유효하지 않은 청크. 2. 특정 기간 내에 각 validator은 자신의 비트마스크를 공개해야 합니다. 그들이 검증한 샤드 중. 비트마스크는 VRF를 통해 생성되므로, 상태 전환이 잘못된 샤드에 할당되었습니다. 공개를 피할 수 없습니다. 비트마스크를 공개하지 못하는 모든 validator 샤드에 할당된 것으로 가정됩니다. 3. 해당 기간이 지나면 샤드에 할당된 것으로 확인된 각 validator, 해당 블록에 대한 일부 검증 결과를 커밋했습니다. 유효하지 않은 청크이며 유효하지 않은 상태 전환의 증거를 공개하지 않았습니다. 커밋에 해당하는 내용은 슬래시됩니다. 4. 각 validator은 새로운 샤드 할당을 받고 새로운 시대가 예약됩니다. 모든 validator가 다운로드하기에 충분한 시간이 지난 후에 시작하려면 상태는 그림 26과 같습니다. validators가 할당된 샤드를 공개하는 순간부터 참고하세요. 새로운 시대가 시작될 때까지 시스템의 보안은 샤드 할당이 공개되었습니다. 네트워크 참여자는 이를 유지해야 합니다. 해당 기간 동안 네트워크를 사용할 때 주의하세요. 3.8 서명 집계 수백 개의 샤드가 있는 시스템이 안전하게 작동하려면 다음을 수행해야 합니다. 10,000개 이상의 validator 주문. 섹션 3.7에서 논의한 것처럼 우리는 각각을 원합니다.그림 26: 과제 처리 validator 평균적으로 특정 메시지와 서명에 대한 커밋을 게시합니다. 블록당 한 번. 커밋 메시지가 동일하더라도 BLS 서명과 이를 검증하는 것은 엄청나게 비용이 많이 들었습니다. 하지만 당연히 커밋 및 공개 메시지는 validator에서 동일하지 않습니다. 따라서 그러한 메시지와 서명을 통합할 수 있는 방법이 필요합니다. 나중에 빠르게 검증할 수 있는 방법입니다. 우리가 사용하는 구체적인 접근 방식은 다음과 같습니다. 블록 생산자에 합류하는 검증인. 블록 생산자는 알려져 있습니다. 에포크가 시작되기 얼마 전에 다운로드할 시간이 필요하기 때문입니다. 에포크가 시작되기 전의 상태이며, validator과 달리 블록 생산자는 숨겨져 있지 않습니다. 각 블록 생산자는 v validator 슬롯을 갖습니다. 검증인이 제출 블록 생산자에게 v 중 하나로 포함되도록 오프체인 제안 validators. 블록 생산자가 validator을 포함하려는 경우 validator의 초기 오프체인 요청을 포함하는 트랜잭션, 그리고 validator을 블록 생산자에 참여시키는 블록 생산자의 서명입니다. 블록 생산자에게 할당된 validator이 반드시 필요한 것은 아닙니다. 블록 생산자가 청크를 생성하는 것과 동일한 샤드를 검증합니다. 만약 validator은 여러 블록 생산자에 합류하기 위해 적용되었으며, 첫 번째 블록 생산자가 성공할 것입니다. 블록 생산자는 커밋을 수집합니다. 블록 생산자는 validator에서 지속적으로 커밋 및 공개 메시지를 수집합니다. 이러한 메시지가 일정 개수 누적되면 블록 생산자는 머클을 계산합니다. 이러한 메시지의 트리를 만들고 각 validator에 머클 루트와 그들의 메시지에 대한 머클 경로. validator는 경로의 유효성을 검사하고 로그인합니다. 머클 루트. 그런 다음 블록 생산자는 BLS 서명을 블록에 축적합니다. validators의 머클 루트이며 머클 루트와 누적된 서명. 블록 생산자는 또한 해당 블록의 유효성에 서명합니다. 저렴한 ECDSA 서명을 사용하는 다중 서명. 다중 서명이 되지 않는 경우 제출된 머클 루트 또는 참여하는 validator의 비트마스크와 일치하면 슬래시 가능한 동작입니다. 체인을 동기화할 때 참가자는 validators의 모든 BLS 서명을 검증하도록 선택할 수 있습니다(validators 공개 키 집계가 포함되므로 매우 비쌉니다).블록 생산자의 ECDMA 서명을 사용하고 다음 사실에 의존합니다. 블록 프로듀서는 도전을 받고 삭감되지 않았습니다. 온체인 트랜잭션과 머클 증명을 사용하여 문제를 해결합니다. 그것 validators의 메시지가 없으면 공개할 가치가 없다는 점을 알 수 있습니다. 잘못된 상태 전환이 감지되었습니다. 실제 내용이 포함된 메시지만 유효하지 않은 상태 전환에 대한 증거가 공개되어야 하며, 그러한 메시지에 대해서만 이전 커밋과 일치하는지 표시해야 합니다. 메시지는 다음과 같습니다. 두 가지 목적으로 공개됩니다. 1. 실제로 체인의 롤백을 시작하기 전 순간으로 잘못된 상태 전환(섹션 3.7.5 참조). 2. validator이(가) 유효성을 증명하려고 시도하지 않았음을 증명하기 위해 잘못된 청크. 두 경우 모두 다음 두 가지 문제를 해결해야 합니다. 1. 실제 커밋은 체인에 포함되지 않았고 머클 루트만 포함되었습니다. 다른 메시지와 함께 집계된 커밋입니다. validator에서는 다음을 사용해야 합니다. 블록 생산자가 제공한 머클 경로와 원래 커밋 그들이 도전에 전념했음을 증명하십시오. 2. 잘못된 샤드에 할당된 모든 validator이(가) 가능합니다. 상태 전환은 손상된 블록 생산자에게 할당됩니다. 그들을 검열하고 있습니다. 이 문제를 해결하기 위해 우리는 그들이 공개 내용을 제출하도록 허용합니다. 온체인에서 일반 트랜잭션으로 처리하고 집계를 우회합니다. 후자는 유효하지 않은 상태 전환 증명에만 허용됩니다. 극히 드물기 때문에 블록에 스팸을 보내서는 안 됩니다. 해결해야 할 마지막 문제는 블록 생산자가 다음을 수행할 수 있다는 것입니다. 메시지 집계에 참여하지 않거나 특정 validator을 의도적으로 검열하지 않도록 선택하세요. 블록을 만들어 경제적으로 불리하게 만듭니다. 생산자 보상은 할당된 validator 수에 비례합니다. 우리 또한 시대 사이의 블록 생산자는 대체로 교차하기 때문에(이후 항상 가장 높은 지분을 가진 참가자 중 최고입니다.) validators는 대부분 동일한 블록 생산자와 협력하여 위험을 줄입니다. 과거에 그들을 검열했던 블록 생산자에게 배정되는 것입니다. 3.9 스냅샷 체인 메인체인의 블록은 매우 빈번하게 생성되기 때문에 다운로드가 전체 기록은 매우 빠르게 비용이 높아질 수 있습니다. 게다가 매 순간부터 블록에는 다수의 참가자의 BLS 서명이 포함되어 있으므로 서명을 확인하기 위한 공개 키의 집합이 엄청나게 커질 수 있습니다. 비싸기도 하고. 마지막으로, 가까운 미래에는 Ethereum 1.0이 1로 남을 가능성이 높기 때문입니다. 가장 많이 사용되는 blockchain 중 자산을 전송하는 의미 있는 방법이 있습니다.

Ethereum에 가까운 것이 요구 사항이며 오늘 BLS 서명을 확인하여 Ethereum 측의 근거리 차단 유효성은 불가능합니다. Nightshade 메인 체인의 각 블록은 선택적으로 Schnorr를 포함할 수 있습니다. 그러한 Schnorr를 포함하는 마지막 블록의 헤더에 다중 서명 다중 서명. 우리는 이러한 블록을 스냅샷 블록이라고 부릅니다. 가장 첫 번째 블록은 모든 에포크는 스냅샷 블록이어야 합니다. 이런 다중서명 작업을 하면서, 블록 생산자는 validators의 BLS 서명도 축적해야 합니다. 마지막 스냅샷 블록에서 설명된 것과 동일한 방식으로 집계합니다. 섹션 3.8. 블록 생산자 세트는 시대 전반에 걸쳐 일정하므로 유효성을 검사합니다. 각 에포크의 첫 번째 스냅샷 블록만 있으면 충분합니다. 많은 비율의 블록 생산자와 validator이 공모하고 생성되었다는 점을 지적합니다. 포크. 에포크의 첫 번째 블록에는 다음을 계산하기에 충분한 정보가 포함되어야 합니다. 해당 시대의 블록 생산자와 validator. 스냅샷만 포함된 메인체인의 서브체인을 호출합니다. 스냅샷 체인을 차단합니다. Schnorr 다중 서명을 생성하는 것은 대화형 프로세스이지만, 아무리 비효율적이라도 프로세스를 가끔씩만 수행하면 됩니다. 성공할 것이다. Schnorr 다중 서명은 Ethereum에서 쉽게 검증할 수 있습니다. 따라서 blockchain 교차 수행의 안전한 방법을 위한 중요한 기본 요소를 제공합니다. 의사소통. Near 체인과 동기화하려면 모든 스냅샷만 다운로드하면 됩니다. 차단하고 Schnorr 서명이 올바른지 확인한 다음(선택적으로 validators의 개별 BLS 서명도 확인) 동기화만 수행합니다. 마지막 스냅샷 블록의 메인 체인 블록.

Phần kết luận

Trong tài liệu này, chúng tôi đã thảo luận các phương pháp tiếp cận để xây dựng blockchain phân đoạn và đã giải quyết được hai thách thức lớn với các phương pháp tiếp cận hiện có, đó là tính hợp lệ của trạng thái và tính sẵn có của dữ liệu. Sau đó chúng tôi đã giới thiệu Nightshade, một thiết kế sharding quyền hạn NEAR Giao thức. Thiết kế đang được tiến hành, nếu bạn có ý kiến, câu hỏi hoặc phản hồi trên tài liệu này, vui lòng truy cập https://near.chat.

결론

이 문서에서 우리는 샤딩된 blockchain을 구축하는 방법과 기존 접근 방식의 두 가지 주요 문제, 즉 상태 타당성을 다루었습니다. 및 데이터 가용성. 그런 다음 샤딩 디자인인 Nightshade를 선보였습니다. NEAR 프로토콜에 힘을 실어줍니다. 디자인 작업이 진행 중입니다. 의견, 질문 또는 피드백이 있는 경우 이 문서에서 https://near.chat.로 이동하세요.