Tóm tắt về Vite (kèm code)

Bonita Viet
Apr 18 · 7 min read

Như đã đề cập trong Whitepaper, Vite sử dụng công nghệ DAG (directed acyclic graph) cho cấu trúc cốt lõi của mình, với công dụng lưu trữ thông tin giao dịch cho mọi tài khoản.

Để cải thiện bảo mật dữ liệu của toàn bộ sổ kế toán DAG và bổ sung tính năng chống giả mạo, Vite đang sử dụng Chuỗi Snapshot- SnapshotChain.

Vì Whitepaper của Vite khá trừu tượng, nên bài viết này hy vọng sẽ mô tả chi tiết và dễ đọc hơn về cấu trúc cốt lõi của DAG và Snapshotchain với sự trợ giúp của 500 dòng code.

Khái niệm cốt lõi

  1. Cấu trúc sổ cái DAG của Vite
  2. Snapshotchain của Vite

Cấu trúc DAG Ledger

Thiết kế của Vite là tạo ra sự cân bằng giữa hai khía cạnh: ít xung đột và bảo mật hơn, giảm tỉ lệ giả mạo (false(pseudo) fork ratio).

Hình trên cho thấy các màn trình diễn của false fork và khả năng chống giả mạo trong một số cấu trúc sổ cái blockchain, cũng đã được giới thiệu trong WP.

Vite sử dụng block-lattice của DAG. Các đoạn code sau đây mô tả chi tiết hơn về Block-lattice của mô hình DAG.

Theo hình trên, S là viết tắt của trạng thái ban đầu (state of the world) và có 3 tài khoản ban đầu là A, B, C. Trạng thái của các tài khoản này lần lượt là A0, B0, C0. Mũi tên chỉ trạng thái hiện tại của tài khoản đã cho đến trạng thái trước đó của tài khoản đã nói và mũi tên chấm chấm thì lại biểu thị mọi tác động gián tiếp (ví dụ: tác động do chuyển khoản) giữa các trạng thái của các tài khoản khác nhau. Giả sử rằng trong trạng thái ban đầu, số dư tài khoản là $ 100,

  1. Trạng thái ban đầu: S1 = {A0 = 100, B0 = 100, C0 = 100}
  2. Sau khi tài khoản B chuyển $ 20 vào tài khoản A, trạng thái lúc đó là: S2 = {A1 = 120, B1 = 80, C0 = 100}
  3. Sau khi tài khoản A chuyển $ 30 sang tài khoản C, trạng thái lúc đó lại là: S3 = {A2 = 90, B1 = 80, C1 = 130}

Trong Vite, mọi trạng thái tài khoản là mỗi một block (chẳng hạn như A0, A1, vân vân trong hình); mối quan hệ tham chiếu giữa các khối (theo mũi tên trong hình) là quá trình chuyển giao giao dịch giữa các tài khoản.

Toàn bộ lịch sử giao dịch giữa các tài khoản được biểu thị bằng đồ thị theo mô hình DAG.

Cấu trúc Snapshot Chain của Vite

Chuỗi DAG thì bao gồm các account blockcs, mà các tài khoản này có thể mô tả rõ ràng sự thay đổi trạng thái của toàn bộ hệ thống. Tuy nhiên, tần suất giao dịch nhất định cho một tài khoản đã cho thì sẽ ảnh hưởng đến độ dài của các block liên quan và account chain không thường xuyên có giao dịch thì sẽ rất dễ bị giả mạo.

Để giải quyết vấn đề này, Vite áp dụng SnapshotChain- liên tục phát triển, do đó làm tăng mức độ chống giả mạo của cấu trúc Block-lattice.

Hình ở trên mô tả trạng thái của 3 tài khoản: S1, S2, S3. Hướng mũi tên cho biết trạng thái trước đó của trạng thái hiện tại. Cấu trúc ở trên về cơ bản là Snapshotchain, trong đó mỗi khối đại diện cho trạng thái của toàn bộ hệ thống (Một tập hợp tất cả các trạng thái tài khoản- account statuses) và mỗi block lại tham chiếu đến trạng thái trước đó. Tất nhiên, để giảm dung lượng lưu trữ, mỗi khối chỉ chứa sự thay đổi giữa các trạng thái kế tiếp của hệ thống, hình dưới đây. Ngoài ra, các khối được tạo ra trên một lịch trình cố định; vì vậy không phải giao dịch nào cũng sẽ tạo ra một khối snapshot.

Triển khai thực hiện lập trình

Ngữ cảnh trên đã đưa ra một giới thiệu ngắn gọn về sổ cái mô hình DAG và cấu trúc Snaphotchain của Vite. Các phần sau đây thực hiện hai cấu trúc dữ liệu trên cũng như quá trình chuyển tiền và tạo snapshot qua lập trình.

Cấu trúc dữ liệu

Chuyển giao giữa các sổ cái được thực hiện thông qua các giao dịch, đoạn code dưới đây xác định cấu trúc dữ liệu của một giao dịch:

Có hai loại trong TxType, đại diện cho các giao dịch gửi và nhận riêng biệt. Điều này tương ứng với thực tế trong Vite- mỗi một lần chuyển khoản (transfer) thì sẽ tạo ra hai giao dịch.

Dưới đây là cấu trúc dữ liệu của trạng thái tài khoản, chúng ta có thể thấy rằng trạng thái tài khoản sẽ tham chiếu đến dữ liệu giao dịch Tx. Điều này có nghĩa là mọi thay đổi trong trạng thái tài khoản đều là do giao dịch gây ra.

Tài khoản gửi tham chiếu TxType để gửi giao dịch -và tài khoản nhận tham chiếu TxType để giao dịch nhận tiền.

Trạng thái tài khoản sẽ được chụp nhanh theo Snapshot Chain theo định kỳ, định nghĩa của khối snapshot như sau, Chiều cao param nghĩa là chiều cao của nút napshot và tăng dần theo từng lần. AccountsHash đại diện cho tất cả các mã hash của trạng thái tài khoản được lưu trong bộ nhớ cache.

Bức hình dưới đây mô tả cấu trúc dữ liệu cơ bản cấu thành Vite. Các phần giao dịch chuyển khoản và tạo khối snapshot đều dựa trên các cấu trúc dữ liệu này.

Hai cấu trúc dữ liệu này đại diện cho chuỗi tài khoản Vite (Vite accout chain) và chuỗi snapshot tương ứng.

AccountStateBlockChain là một cấu trúc dữ liệu bản đồ, key là địa chỉ của mỗi tài khoản, giá trị là một danh sách liên kết của AccountStateBlock và chỉ đến khối trước đó thông qua PreHash.

Quy trình giao dịch

Giao dịch gửi

Code lõi của giao dịch gửi có thể hểu như sau:

  1. Xây dựng giao dịch và ký giao dịch
  2. Gói khối trạng thái tài khoản và ký khối trạng thái tài khoản đóng gói
  3. Chèn khối trạng thái tài khoản (account status block) vào chuỗi tài khoản (account chain) và phát các kết quả khối (block result)

Giao dịch nhận

Sẽ có một coroutine đợi sự kiện phát sóng được tạo ra và xác minh tính hợp lệ của khối. Trong khi đó, nếu cần tạo ra giao dịch nhận tương ứng, nó sẽ chuyển tiếp nút tương ứng đến Tx.

Sau khi nút tương ứng nhận giao dịch gửi và đã xác nhận được thì:

  1. Tạo giao dịch đã nhận và ký
  2. Đóng khối account status và ký vào khối đã đóng trên.
  3. Chèn khối trạng thái tài khoản (status block) vào chuỗi tài khoản (account chain) và phá t cấu trúc khối

Quá trình Snapshotting của Snapshot Chain

Tài khoản đào (mining account) sẽ định kỳ tạo snapshot block và chèn nó vào chuỗi Snapshot

Tóm tắt

Điểm mấu chốt của bài viết này là giới thiệu ngắn gọn quy trình chính của naive-vite, và đồng thời cho mọi người biết các nguyên tắc cơ bản của Vite thông qua bản demo đơn giản này.

Để biết thêm chi tiết, vui lòng truy cập trang web chính thức của Vite và xem phiên bản đầu tiên trên Github.

Từ những điểm sáng trên Snapshotchain+ DAG+ Asynchronous architecture có thể giải quyết được các vấn đề về thời gian xác nhận giao dịch, độ through put cao và cả độ bảo mật hoàn toàn. Trên đây là những lí do mà tôi có thể khẳng định Vite là một dự án tiềm năng, đáng đầu tư!

Tài liệu tham khảo

  1. Whitepaper củaVite
  2. Code nguồn của naive-vite
  3. Block-hướng dẫn

~~~~~~~~~~~~~~~~~~~~

Trang web chính thức: https://www.vite.org/

Telegram :

Twitter :https://twitter.com/vitelabs

Discord :https://discordapp.com/invite/CsVY76q

Vite Labs Vietnamese

Vite Vietnamese Telegram: https://t.me/vite_vietnamese

Bonita Viet

Written by

“You can always edit a bad page. You can’t edit a blank page.” ― Jodi Picoult @vite-labs-vietnam

Vite Labs Vietnamese

Vite Vietnamese Telegram: https://t.me/vite_vietnamese