Tổng quan kiến trúc Cardano

Phần này mô tả kiến trúc cấp cao của Cardano. Nó cung cấp thông tin chi tiết về các thành phần cốt lõi và tương tác của chúng, đồng thời thảo luận ngắn gọn về các kỷ nguyên và triển khai của Cardano.

Kiến trúc cấp cao của Cardano

Sơ đồ sau đây phác thảo sự tương tác giữa các thành phần hệ thống của Cardano:

diagram db sync

Thành phần hệ thống

Việc triển khai Cardano hiện tại mang tính mô-đun cao. Nó bao gồm các thành phần sau (các trường hợp sử dụng triển khai khác nhau sẽ sử dụng các kết hợp khác nhau của các thành phần):
• Node
• Command line interface – Giao diện dòng lệnh (CLI)
• Ví Daedalus
• Cardano db-sync
• Máy chủ API GraphQL (Apollo)
• Các thành phần API REST
• Máy chủ SMASH (SMASH server)

Nodes và remote nodes

Hệ thống blockchain bao gồm một tập hợp các node được phân phối trên mạng giao tiếp với nhau để đạt được sự đồng thuận về trạng thái của hệ thống.
Các node chịu trách nhiệm về:
• Thực thi giao thức Ouroboros
• Xác thực và huyển tiếp khối
• Sản xuất khối (trên một số node)
• Cung cấp thông tin về trạng thái của blockchain cho các local client
Bạn chỉ có thể tin cậy các node do bạn hoặc tổ chức của bạn điều hành. Đây là lý do tại sao Daedalus chạy một node ở phần nền.

Quy trình node – Node process

Cardano-node là cấp cao nhất của node và bao gồm các hệ thống con khác, trong đó quan trọng nhất là sự đồng thuận, sổ cái và mạng với cấu hình phụ trợ, CLI, ghi nhật ký và giám sát.

Giao thức Node-to-Node IPC

Mục đích của giao thức node-to-node Inter-Process Communication (IPC) – truyền thông liên quá trình (IPC) từ node đến node – là cho phép trao đổi các khối và giao dịch giữa các node như một phần của thuật toán đồng thuận Ouroboros.
Giao thức node-to-node là một giao thức tổng hợp, bao gồm ba ‘giao thức nhỏ’:
• chain-sync: Được sử dụng để theo dõi chuỗi và nhận tiêu đề khối.
• block-fetch: Được sử dụng để lấy các nội dung khối.
• tx-submit: Được sử dụng để chuyển tiếp các giao dịch.
Các giao thức nhỏ này được ghép kênh trên một kết nối sử dụng giao thức TCP (Transmission Control Protocol) hoạt động giữa các node. Chúng có thể được chạy theo cả hai hướng trên cùng một kết nối TCP để cho phép cài đặt ngang hàng (P2P).
Giao thức tổng thể – và mỗi giao thức nhỏ – được thiết kế trên một thiết lập tin cậy nơi cả hai bên cần đề phòng các cuộc tấn công Từ chối Dịch vụ (DoS). Ví dụ: mỗi giao thức mini sử dụng luồng điều khiển do người tiêu dùng điều khiển, vì vậy một node chỉ yêu cầu nhiều công việc hơn khi nó đã sẵn sàng, thay vì phải thúc đẩy công việc.
Thiết kế giao thức là dạng module và có thể phát triển: sự sắp xếp các phiên bản được sử dụng để đồng ý tập hợp các giao thức nhỏ để sử dụng, cho phép thêm các giao thức mini bổ sung hoặc cập nhật theo thời gian mà không gây ra các vấn đề tương thích.

Node-to-Client IPC

Mục đích của giao thức node-to-client IPC là cho phép các ứng dụng cục bộ tương tác với blockchain thông qua node. Bao gồm các ứng dụng như phụ trợ ví (wallet backend) hoặc trình khám phá blockchain (blockchain explorer). Giao thức node-to-client cho phép các ứng dụng này truy cập vào dữ liệu chuỗi dạng thô và truy vấn trạng thái sổ cái hiện tại. Nó cũng cung cấp khả năng gửi các giao dịch mới vào hệ thống.
Giao thức node-to-client sử dụng thiết kế tương tự như giao thức node-to-node, nhưng với một tập hợp các giao thức nhỏ khác và sử dụng đường ống kết nối pipes cục bộ thay vì kết nối TCP. Do đó, nó là một kết nối ở mức thấp (low-level) dành cho node , chỉ hiển thị những gì node có thể cung cấp một cách nguyên sơ. Ví dụ: node cung cấp quyền truy cập vào tất cả dữ liệu chuỗi thô nhưng không cung cấp cách truy vấn dữ liệu trên chuỗi. Công việc cung cấp dịch vụ dữ liệu và các API cấp cao hơn thuận tiện hơn được giao cho các client chuyên dụng, chẳng hạn như cardano-db-sync và phần phụ trợ ví.
Giao thức node-to-client bao gồm ba giao thức nhỏ:
• chain-sync: Được sử dụng để theo dõi chuỗi và nhận các khối
• local-tx-submit: Được sử dụng để gửi các giao dịch
• local-state-query: Được sử dụng để truy vấn trạng thái sổ cái
Phiên bản node-to-client đồng bộ hóa chuỗi đầy đủ các block, thay vì chỉ các tiêu đề khối. Đây là lý do tại sao không cần giao thức block-fetch. Giao thức local-tx-submit giống như giao thức node-to-node tx-submission nhưng đơn giản hơn và nó trả về chi tiết của các lỗi xác thực giao dịch. Giao thức truy vấn trạng thái cục bộ cung cấp quyền truy vấn đến trạng thái sổ cái hiện tại, chứa nhiều dữ liệu cần thiết không được phản ánh trực tiếp trên chính chuỗi khối.
Đọc thêm về thiết kế giao thức mạng và giao thức giao tiếp node Cardano.

Giao diện dòng lệnh (CLI)

Công cụ CLI của node là “swiss army knife – dao xếp đa năng của quân đội thụy sĩ” của hệ thống. Nó có thể làm được hầu hết mọi thứ, nhưng ở mức độ low-level (ở tầng tấp) và không thuận tiện lắm vì nó dựa trên dòng lệnh và thiếu giao diện người dùng đồ họa (GUI).
Công cụ CLI có thể:
• Truy vấn node để biết thông tin
• Gửi giao dịch
• Xây dựng và ký kết các giao dịch
• Quản lý khóa mật mã

Ví Daedalus

Daedalus là một ví full-node giúp người dùng quản lý ada của họ và có thể gửi và nhận thanh toán trên chuỗi khối Cardano. Daedalus bao gồm một giao diện người dùng của ví và một phần phụ trợ (frontend và backend). Giao diện người dùng là ứng dụng đồ họa mà người dùng nhìn thấy và tương tác. Backend là một quy trình dịch vụ giám sát trạng thái ví của người dùng và thực hiện tất cả các công việc ‘nặng nhọc’, chẳng hạn như lựa chọn coin, xây dựng giao dịch và gửi. Phần phụ trợ tương tác với một node cục bộ thông qua giao thức IPC node-to-client và tương tác với giao diện người dùng thông qua API HTTP. Phần backend cũng cung cấp CLI cho phép tương tác với ví. Phần phụ trợ của ví cũng có thể được sử dụng trên chính nó – không cần Daedalus- thông qua API của nó. Đây là một cách thuận tiện để các nhà phát triển phần mềm tích hợp Cardano với các ứng dụng và hệ thống khác.
Chúng tôi khuyên rằng hầu hết người dùng nâng cao có ý định sử dụng Cardano nên bắt đầu với Daedalus.

cardano-db-sync

Node cardano chỉ lưu trữ blockchain và thông tin liên quan cần thiết để xác thực blockchain. Nguyên tắc thiết kế này là giảm thiểu độ phức tạp của mã và giảm chi phí tính toán và sử dụng tài nguyên, để giữ cho các giao diện cục bộ của node ở mức tối thiểu nhất có thể và sử dụng các máy khách bên ngoài để cung cấp nhiều truyền thông thuận tiện và chức năng bổ sung. Đặc biệt, node không cung cấp giao diện truy vấn thuận tiện cho thông tin lịch sử trên blockchain. Dịch vụ dữ liệu này được cung cấp bởi một thành phần riêng biệt bằng cách sử dụng cơ sở dữ liệu Ngôn ngữ truy vấn có cấu trúc (SQL).
Đọc thêm về:
• Cardano DB Sync và các thành phần của nó
• Các phương pháp thực hành hay nhất về Cardano DB Sync
• Làm việc với DB Sync
• Sổ tay SMASH

Giới thiệu về các kỷ nguyên và cách triển khai của Cardano

Cardano là một sổ cái phân tán thế hệ thứ ba. Nó dựa trên Ouroboros, một thuật toán đồng thuận blockchain bằng chứng cổ phần (PoS) được đánh giá ngang hàng, lần đầu tiên xuất hiện trong hội nghị nghiên cứu hàng đầu về mật mã trên toàn thế giới (Hiệp hội Nghiên cứu Mật mã Quốc tế lần thứ 37, CXonference – Crypto 2017).
Tên Cardano là tên chung được đặt cho nền tảng, đã trải qua nhiều kỷ nguyên và triển khai. Những khái niệm này cần được giải thích thêm.

Eras – Các kỷ nguyên

Có một số kỷ nguyên trong quá trình phát triển của Cardano. Mỗi kỷ nguyên (Byron, Shelley, Goguen, Basho và Voltaire) đề cập đến các quy tắc của sổ cái. Ví dụ: loại giao dịch nào và dữ liệu nào được lưu trữ trong sổ cái hoặc tính hợp lệ và ý nghĩa của các giao dịch.
Sự phát triển của mạng chính Cardano bắt đầu với các quy tắc sổ cái Byron (kỷ nguyên Byron). Mạng chính đã trải qua một đợt hard fork vào cuối tháng 7 năm 2020 để chuyển từ quy tắc Byron sang quy tắc sổ cái Shelley. Do đó, đợt hard fork này đánh dấu sự khởi đầu của kỷ nguyên Shelley.

Implementations – Triển khai

Việc triển khai đầu tiên của Cardano được giới thiệu vào đầu mạng chính Cardano, trở lại vào tháng 9 năm 2017. Việc triển khai này chỉ hỗ trợ các quy tắc sổ cái Byron.
Sau đó, chúng tôi đã tiến hành tái thực hiện đầy đủ Cardano, điều này cho phép hai thay đổi cơ bản: hỗ trợ nhiều bộ quy tắc sổ cái và quản lý quá trình hard fork để chuyển từ bộ quy tắc này sang bộ quy tắc tiếp theo. Nói cách khác, việc triển khai mới có thể hỗ trợ cả quy tắc Byron và quy tắc Shelley, có nghĩa là khi nó được triển khai cho mạng chính vào đầu năm 2020, việc triển khai cũng hoàn toàn tương thích với các quy tắc Byron. Điều này cho phép chuyển đổi suôn sẻ từ triển khai cũ sang triển khai mới. Khi tất cả người dùng Cardano đã nâng cấp các node của họ lên triển khai mới, có thể gọi hard fork và chuyển sang các quy tắc Shelley.
Việc triển khai Cardano thứ ba đã được sử dụng trên Shelley Incentivized Testnet (ITN). Hệ thống này hỗ trợ một tập hợp con đáng kể các quy tắc Shelley và chúng tôi đã sử dụng nó để kiểm tra các động lực kinh tế và xã hội của hệ thống ủy quyền Shelley.
Tổng quan về kiến trúc Cardano này phản ánh việc triển khai Cardano hiện tại được triển khai trên mạng chính, không phải các triển khai gốc hoặc ITN.