Nâng cấp Internet Computer

Internet Computer Protocol kết hợp khả năng tính toán của các node đặc biệt chạy trong các trung tâm dữ liệu trên khắp thế giới để tạo ra một môi trường liền mạch và có thể mở rộng cho phần mềm và dữ liệu hợp đồng thông minh. Vì nền tảng này có thể cung cấp nội dung web tương tác cho người dùng, nó có thể được sử dụng để xây dựng các trang web, hệ thống doanh nghiệp, dịch vụ internet thị trường đại chúng, nền tảng toàn ngành, DeFi, v.v. bằng cách sử dụng hợp đồng thông minh.

Thoạt nhìn, nâng cấp có vẻ như là một vấn đề đơn giản. Tuy nhiên, các nâng cấp trong các blockchain truyền thống đã cho thấy rằng có thể mất từ ​​vài tháng đến hàng năm để thực hiện nâng cấp giao thức. Đầu tiên, phải có sự đồng ý của cộng đồng rằng một phiên bản mới của giao thức nên được thông qua. Tiếp theo, thời điểm áp dụng nâng cấp phải được thống nhất và cuối cùng, tất cả phần mềm máy khách cần được nâng cấp để hỗ trợ phiên bản giao thức mới.

Bởi vì đây là một công việc khó khăn, các nâng cấp giao thức theo truyền thống thường được thực hiện như một nhánh của chuỗi. Internet Computer nhằm mục đích giảm thiểu điều này bằng cách:

  • Cung cấp hệ thống quản trị tích hợp trong Hệ thống thần kinh mạng (“NNS”) , có thể được cộng đồng sử dụng để bỏ phiếu về việc có nên thực hiện nâng cấp giao thức hay không.

Sau khi hệ thống quản trị kích hoạt nâng cấp:

  • Internet Computer Protocol có hỗ trợ tích hợp để lên lịch nâng cấp , có nghĩa là mỗi lớp đồng thuận của subnet sẽ tự quyết định khi nào nên thực hiện nâng cấp dựa trên thỏa thuận giữa những người tham gia subnet.
  • Các node của Internet Computer được tích hợp hỗ trợ tải xuống và áp dụng các bản nâng cấp mà không cần sự can thiệp của con người, nếu được hệ thống quản trị hướng dẫn làm như vậy. Gói nâng cấp chứa toàn bộ “stack” phần mềm cần thiết để chạy một node. Sau khi xác minh nội dung gói tương ứng với phiên bản mà cộng đồng đã bỏ phiếu để chạy, các node sau đó sẽ tự động khởi động lại vào phiên bản mới của giao thức.

Trên thực tế, một số nâng cấp lớn đã được áp dụng cho nternet Computer kể từ khi ra mắt với rất ít thời gian trễ do người dùng nhận thấy trên mỗi subnet. Danh sách đầy đủ tất cả các nâng cấp subnet cho đến nay có thể được hiển thị trên ic.rocks bằng cách sử dụng bộ lọc “Chức năng NNS” được đặt thành “Update Subnet Replica Version.”

Có một số thách thức khi thiết kế và triển khai giải pháp nâng cấp giao thức. Thực tế là blockchain Internet Computer chạy một giao thức phân tán và phi tập trung, gây khó khăn cho việc xác định trạng thái hiện tại của hệ thống. Hơn nữa, không có thời gian toàn cầu, vì các node có thể bị trôi theo đồng hồ và có thể bị bỏ xa tùy ý so với các node khác.

Bài viết này mô tả giải pháp của chúng tôi cho những vấn đề này và cách chúng tôi có thể đạt được các mục tiêu sau:

  • Cho phép các thay đổi tùy ý đối với Internet Computer Protocol.
  • Bảo tồn tất cả các trạng thái.
  • Giảm thiểu thời trễ.
  • Tự động tung ra các bản nâng cấp.

Trước khi đi sâu vào chi tiết kỹ thuật, hãy thảo luận về cách kích hoạt các nâng cấp.

Kích hoạt nâng cấp

Trong Internet Computer, có một thành phần được gọi là sổ đăng ký, được thực hiện như một canister smart contract trong Hệ thống thần kinh  (“NNS”). Về cơ bản, nó lưu trữ tất cả thông tin cấu hình cho Internet Computer. Nó được triển khai dưới dạng một kho lưu trữ giá trị khóa đã được phiên bản hóa, nơi mỗi đột biến hiển thị dưới dạng một phiên bản mới trong sổ đăng ký.

Mạng được nâng cấp trên cơ sở mỗi subnet và mỗi subnet có một bản ghi trong sổ đăng ký cho biết các node nào cấu thành subnet và phiên bản giao thức nào mà chúng nên chạy. Để kích hoạt nâng cấp, mạng chỉ cần thay đổi thông tin phiên bản cho subnet mà mạng đó muốn nâng cấp. Việc một subnet có nên được nâng cấp lên một phiên bản nhất định hay không được quyết định bởi các phiếu bầu trong hệ thống quản trị chứ không phải bởi các cá nhân.

Lưu ý rằng sổ đăng ký chứa cấu hình mong muốn và subnet NNS thực sự không biết phiên bản nào đang chạy trong subnet.

Đang thực hiện nâng cấp

Internet Computer Protocol được cấu trúc thành bốn lớp:

Nâng cấp Internet Computer Protocol có trách nhiệm nâng cấp bốn lớp này. Nâng cấp canister có một cơ chế nâng cấp khác, được mô tả trong hướng dẫn dành cho nhà phát triển của chúng tôi.

Internet Computer thực hiện sao chép máy trạng thái trong mỗi subnet. Ý tưởng về sao chép máy trạng thái là trạng thái được đảm bảo là giống hệt nhau trên mỗi node trung thực nếu mỗi chuyển đổi trạng thái được kích hoạt bởi một chuỗi các đầu vào có thứ tự và hàm chuyển đổi là xác định.

Internet Computer, đầu vào cho máy trạng thái là các cuộc gọi cập nhật do người dùng gửi cũng như các thông báo giữa các canister từ các subnet khác và trạng thái trong số những thứ khác bao gồm trạng thái của Máy tính trạng thái được lưu trữ trên Internet Computer. Thứ tự của các đầu vào được đảm bảo bởi sự đồng thuận và máy trạng thái đang được thực thi là lớp định tuyến thông báo, lớp thực thi và mã Canister.

Để xây dựng trạng thái ở độ cao h, chúng ta phải lấy trạng thái ở độ cao trước đó (h – 1) và áp dụng các thông báo đầu vào từ khối h đến trạng thái đó. Như đã thấy trước đây, đầu vào trong các block này đã được thống nhất bởi sự đồng thuận. Đối với sao chép máy trạng thái, mã chúng ta đang thực thi cần phải được xác định khi xử lý block ở độ cao h.

Nâng cấp có thể thay đổi trạng thái máy, bao gồm các lớp thực thi và định tuyến thông báo. Do đó, mạng cần đảm bảo rằng các nâng cấp đang chạy đồng thời ở mọi nơi, liên quan đến số thứ tự của khối.

Nâng cấp cũng có thể thay đổi các chi tiết trong lớp đồng thuận, ví dụ như cách công chứng xảy ra. Do đó, các nâng cấp phải được thực hiện ở trên một block, vì nếu không, các sơ đồ công chứng khác nhau và có khả năng xung đột có thể được sử dụng để công chứng các block có cùng số thứ tự.

Cuối cùng, nâng cấp cũng có thể dẫn đến những thay đổi phá vỡ giao thức đối với chi tiết mạng trong quá trình nâng cấp đó, điều này có thể khiến các node của các phiên bản khác nhau không thể giao tiếp. Để đạt được sự đồng thuận, tất cả các node trung thực cần có khả năng giao tiếp với nhau, điều này một lần nữa ngụ ý rằng các nâng cấp cần được thực hiện ở cùng một block khối trên tất cả các máy nút.

Lưu ý rằng các node sẽ không đến độ cao block h tại cùng một thời điểm vật lý, bởi vì Internet Computer là một hệ thống phân tán không có thời gian toàn cầu.

Về lý thuyết, một số node thậm chí có thể thực sự kém xa, ví dụ như vài tuần, có nghĩa là trong một khoảng thời gian, các node trong subnet sẽ chạy các phiên bản Internet Computer khác nhau và mạng cần có khả năng đối phó với điều đó.

Quá trình tổng thể cho đến nay trông như sau: Có subnet A, đang chạy Internet Computer phiên bản 1 (“v1”). Sau đó, nâng cấp được kích hoạt lên v2 tại phiên bản đăng ký r. Các node trong subnet A cuối cùng sẽ đồng ý sử dụng phiên bản Internet Computer mới đó ở phiên bản đăng ký r ở khối nhất định h .

Các nút chạy v1 sẽ tạo các khối và tính toán trạng thái lên đến và bao gồm độ cao h đó và các nút chạy v2 tiếp quản ở độ cao h + 1 .

Giữa trạng thái h và h + 1 , trạng thái cần được bàn giao giữa hai phiên bản, tức là cần phải có ảnh chụp nhanh của trạng thái ở độ cao h.

Lưu ý rằng vì hai phiên bản này được tách biệt rõ ràng, chúng ta có thể tưởng tượng rằng mạng chạy ngay cả một thuật toán đồng thuận hoàn toàn khác bắt đầu từ phiên bản h + 1 , vì không bao giờ có giao tiếp trực tiếp giữa giao thức v2 và giao thức v1.

Trong Internet Computer, đã có một khái niệm mà chúng ta có thể sử dụng để thực hiện chính xác điều đó: gói tóm tắt (“CUP”). Chúng chứa tất cả thông tin liên quan cần thiết để có sự đồng thuận để tiếp tục từ đó. Hơn nữa, CUP cho chiều cao h đề cập đến một phiên bản đăng ký đến lượt nó cho biết phiên bản Internet Computer nào sẽ được chạy chiều cao lớn hơn h.

Chúng được ký bởi một subnet, vì vậy tính toàn vẹn của chúng có thể được xác minh bằng chữ ký ngưỡng của subnet . Một yêu cầu đối với các CUP trong bối cảnh nâng cấp là chúng phải có thể đọc được từ cả phiên bản cũ (v1) và phiên bản mới (v2), vì vậy các CUP cần phải tương thích ngược và chuyển tiếp.

Một thách thức là mạng cần đảm bảo rằng mỗi node trong subnet chạy đúng phiên bản Internet Computer. Tất cả các node trung thực phải tham gia vào phiên bản v1 cho đến khi CUP chuyển giao được tạo, sau đó tham gia như một nút v2 và bắt đầu tạo ra các khối dưới dạng v2. Nếu một số ghi chú trung thực chạy phiên bản Internet Computer không chính xác, toàn bộ subnet có thể bị kẹt.

Để một node quyết định phiên bản mà nó sẽ chạy, trước tiên nó sẽ truy vấn sổ đăng ký để tìm ra subnet mà nó nên tham gia. Với thông tin đó, nó cũng tìm ra những node ngang hàng trong subnet đó là ai. Như chúng ta sẽ thấy ở phần sau, thông tin này không nhất thiết phải được cập nhật một cách hoàn hảo. Sau đó, giao thức hỏi tất cả các đồng nghiệp CUP mới nhất của họ là gì. Cuối cùng, giá trị cao nhất của tất cả các CUP đã nhận được có thể được sử dụng để xác định phiên bản Internet Computer đang chạy trong subnet đó tại thời điểm hiện tại.

Vì IC là một hệ thống phi tập trung và việc xây dựng CUP là nỗ lực chung của nhiều node trong subnet, nên không biết node nào đã tham gia vào việc tạo CUP cập nhật nhất. Để dung nạp f nút Byzantine, các nút 2f + 1 phải ký CUP để nó hợp lệ. Do đó, nếu ít hơn f + 1 trong số các node được truy vấn cho CUP, thì không có gì đảm bảo rằng một trong số chúng có phiên bản CUP mới nhất.

Trong trường hợp xấu nhất, các quy trình CUP của một node đã lỗi thời và việc nâng cấp không được phát hiện ngay lập tức. Các CUP được hỗ trợ bởi ít hơn 2f + 1 nút luôn bị bỏ qua vì trong trường hợp này, chữ ký của CUP không thể được xác minh thành công. Như đã thảo luận trước đó, các node trong subnet có thể đang chạy các phiên bản Internet Computer khác nhau. Để tránh sự không tương thích giữa các phiên bản, các CUP được tìm nạp từ các đồng nghiệp qua một kênh giao tiếp riêng biệt bằng cách sử dụng một điểm cuối dành riêng cho việc trao đổi các CUP. Lớp ngang hàng không được sử dụng cho mục đích này. Điều đó cho phép logic để trao đổi CUP được giữ tương đối đơn giản và giúp nó tương thích ngược và chuyển tiếp dễ dàng hơn.

Chi tiết về sự đồng thuận

Bây giờ chúng ta đã thấy cách CUP được sử dụng để quyết định phiên bản nào của Internet computer sẽ chạy, chúng ta hãy xem cách CUP đó thực sự được tạo ra như thế nào.

Có một loạt các block từ 27 đến 30 và một loạt các trạng thái (trong trường hợp này là 27 và 28). Trong block 30, sự đồng thuận chọn sử dụng phiên bản đăng ký mới r , phiên bản này sẽ kích hoạt nâng cấp. Giờ đây, sự đồng thuận biết rằng nó phải xây dựng một CUP ở độ cao đó đề cập đến phiên bản đăng ký mới r , nhưng nó hiện không thể làm điều đó vì nó chưa tính toán trạng thái ở độ cao 30.

Trước khi có thể tính toán trạng thái ở độ cao 30, block 30 cần được hoàn thiện. Để đạt được sự hoàn thiện trên block đó, giao thức tạo ra các block mà không có thông báo nhập vào cho đến khi có sự hoàn thiện cho một block lớn hơn hoặc bằng 30. Các block đó không chứa thông báo nhập để tránh thay đổi thêm trạng thái vượt quá chiều cao 30.

Sau khi hoàn thành block> = 30, trạng thái 30 có thể được tính toán và cuối cùng được chứng nhận. Cùng với đó, hệ thống có tất cả các thông tin cần thiết để xây dựng CUP cho độ cao đó.

Các node trung thực giữ nguyên trạng thái của chúng trong quá trình nâng cấp. Phiên bản IC mới có thể chọn chuyển đổi trạng thái đó như một bước sau nâng cấp, nếu họ muốn, nếu không, trạng thái từ phiên bản trước đó có thể được các node trực tiếp sử dụng sau khi nâng cấp xong.

Trong thời gian từ khi tạo block 30 cho đến khi thực hiện nâng cấp, trải nghiệm người dùng bị ảnh hưởng. Trong khi CUP cho chiều cao 30 được tạo, các lệnh gọi truy vấn vẫn tiếp tục khả dụng, nhưng không thể chấp nhận các lệnh gọi cập nhật thêm vì các nút của v1 không được phép tạo các block không trống sau chiều cao 30 nữa.

Sau khi bản nâng cấp CUP đã được ký kết, subnet cũng sẽ không khả dụng cho các cuộc gọi truy vấn trong một thời gian ngắn, vì bản nâng cấp cần được cài đặt và các máy ảo khởi động lại để áp dụng bản nâng cấp đó.

Nhìn chung, thời gian ngừng hoạt động trong quá trình nâng cấp các mạng con là vài phút (hiện tại là khoảng hai phút).

CUP này sau đó có thể được sử dụng như một điểm chuyển giao giữa hai phiên bản.

Chúng tôi cũng cần đảm bảo rằng các phần tử tạo tác từ v1 sẽ không tràn sang v2, vì nếu không, chúng tôi có thể tạo ra nhiều block rỗng cho cùng chiều cao block, điều này sẽ không chính xác và có thể dẫn đến sự phân tách trong chuỗi. Chúng tôi giải quyết vấn đề này bằng cách chú thích từng tạo tác đồng thuận với số phiên bản giao thức mà nó được tạo ra.

Lưu ý rằng có nhiều block có cùng chiều cao ở đây, bởi vì hệ thống cần tạo ra các block khác trong phiên bản mà nó muốn để hoàn thiện. Tuy nhiên, các block trong v1 trống, vì vậy chúng không sửa đổi thêm trạng thái.

Phần kết luận

Chúng tôi đã trình bày một giải pháp cho việc nâng cấp Intenet Computer Protocol, sử dụng lại các cơ chế đã tồn tại trong Internet Computer. Nó cho phép mạng triển khai các bản vá liên tục nhanh chóng, thậm chí bao gồm cả các thay đổi về giao thức – tất cả đều có thể được thực hiện với rất ít thời gian chết.

Hoàng Long