Valuations
Cấu trúc nên một Blockchain, dễ hay khó?
#
Marketing
8 min read
13/01/2023
2
0
0
icon-menu

Thiết kế cấu trúc blockchain liên quan đến việc đưa ra một số quyết định về cách blockchain của bạn sẽ vận hành và hoạt động. Sau đây là một số cân nhắc cần thiết để thiết kế cấu trúc của Blockchain bao gồm:

  1. Số Node (Number of nodes:): Một nút (node) là một máy tính tham gia vào hoạt động của Blockchain. Số lượng node trên Blockchain có thể ảnh hưởng đến tính bảo mật, khả năng mở rộng và tính phân quyền của nó.

  2. Thuật toán đồng thuận (Consensus algorithm): Thuật toán đồng thuận là một cơ chế cho phép các node đạt được thỏa thuận về trạng thái của Blockchain. Các thuật toán đồng thuận khác nhau có sự đánh đổi khác nhau về tốc độ, bảo mật và hiệu quả sử dụng năng lượng. Một số thuật toán đồng thuận phổ biến bao gồm Proof of Work (PoW), Proof of Stake (PoS) và Proof of Stake được ủy quyền (DPoS).

  3. Cấu trúc dữ liệu (Data structure): Cấu trúc dữ liệu của blockchain xác định cách dữ liệu được lưu trữ trên blockchain và cách truy cập dữ liệu. Một số cấu trúc dữ liệu phổ biến được sử dụng trong blockchain bao gồm danh sách được liên kết, cây và biểu đồ.

  4. Kích thước khối (Block size): Kích thước khối xác định lượng dữ liệu được bao gồm tối đa có thể chứa trong một khối duy nhất trên blockchain. Kích thước block lớn hơn có thể tăng thông lượng của blockchain. Nhưng, nó cũng có thể tăng kích thước của blockchain và khiến nó tốn nhiều tài nguyên hơn để duy trì.

  5. Thời gian khối (Block time): Thời gian khối - block time là thời gian trung bình cần thiết để xác định một khối mới được thêm vào blockchain. block time ngắn hơn có thể tăng tốc độ của blockchain, nhưng nó cũng có thể làm tăng nguy cơ xung đột và làm cho blockchain kém an toàn hơn.

  6. Giao dịch mỗi giây (Transactions per second): Số lượng giao dịch có thể được xử lý mỗi giây là một cân nhắc quan trọng đối với khả năng mở rộng của blockchain. Tốc độ giao dịch trên mỗi giây cao hơn có thể làm cho một blockchain phù hợp hơn cho các ứng dụng có khối lượng lớn

Đây chỉ là một vài trong số nhiều yếu tố mà bạn sẽ cần xem xét khi thiết kế cấu trúc blockchain của mình. Điều quan trọng là phải đánh giá cẩn thận các yếu tố này và thực hiện sự đánh đổi dựa trên nhu cầu và mục tiêu cụ thể đối với tiền tiền mã hóa của bạn.

Tổng quan về cấu trúc dữ liệu tạo nên Blockchain trong ngôn ngữ Solidity

Dưới đây là tổng quan khá trừu tượng về một số cấu trúc và chức năng dữ liệu chính thường được sử dụng để xây dựng blockchain trong Solidity:

  1. Block: Khối là một đơn vị dữ liệu chứa danh sách các giao dịch và thông tin khác về trạng thái của blockchain. Một khối thường có các chức năng sau:
    - addTransaction(transaction: Transaction: Thêm một giao dịch mới vào block.
    - hash() -> bytes32: Tính hàm băm của khối.
    - validate() -> bool: Xác thực các giao dịch và dữ liệu khác trong khối.

  2. Transaction: Transaction là một đơn vị dữ liệu đại diện cho sự trao đổi giá trị trên blockchain. Một giao dịch thường có các chức năng sau:
    - execute(): Thực hiện giao dịch bằng cách cập nhật trạng thái của blockchain.
    - validate() -> bool: Xác thực giao dịch bằng cách kiểm tra xem nó đã được ký hợp lệ chưa và nó có tuân theo các quy tắc của blockchain hay không.

  3. Blockchain: blockchain là cấu trúc dữ liệu chính lưu trữ các khối và quản lý trạng thái tổng thể của blockchain. Một blockchain thường có các chức năng sau:
    - addBlock(block: Block) -> bool: Thêm một khối mới vào blockchain.
    - validate() -> bool: Xác thực toàn bộ blockchain bằng cách kiểm tra xem tất cả các khối có hợp lệ không và chúng có được liên kết đúng với nhau không.

Đây chỉ là một vài ví dụ về cấu trúc dữ liệu và chức năng thường được sử dụng để xây dựng blockchain trong Solidity. Có nhiều cấu trúc dữ liệu và chức năng khác có thể được sử dụng, tùy thuộc vào nhu cầu và yêu cầu cụ thể của blockchain.

Định nghĩa lớp Lý thuyết của Block trong Solidity:

Mỗi lớp Block trong blockchain là một cấu trúc dữ liệu đại diện cho một đơn vị dữ liệu. Nơi đây chứa danh sách các giao dịch và thông tin khác về trạng thái của blockchain. Nó thường bao gồm các yếu tố sau:

  1. Danh sách các giao dịch (list of transactions): Khối thường chứa danh sách các giao dịch đã được thêm vào khối.

  2. Tiêu đề khối (block header): Block header chứa metadata về khối, chẳng hạn như số khối (block number), timestamp và hàm băm (hash) của khối trước đó.

  3. Hàm băm của khối (block hash): Block hash là một giá trị mã hóa đại diện cho nội dung của khối. Nó thường được tạo bằng hàm băm, chẳng hạn như SHA-256.

  4. Chức năng xác thực (Validation function): Chức năng xác thực được sử dụng để kiểm tra xem các giao dịch và dữ liệu khác trong khối có hợp lệ hay không. Chức năng này có thể kiểm tra chữ ký của các giao dịch, xác minh rằng các giao dịch tuân theo các quy tắc của blockchain và kiểm tra xem tiêu đề khối có hợp lệ hay không.

Đây là một ví dụ về mỗi lớp Block trong Solidity:



Đây chỉ là một ví dụ đơn giản về mỗi lớp Block. Trong một blockchain thực, Block Lớp có thể bao gồm nhiều chức năng và cấu trúc dữ liệu khác để hỗ trợ các tính năng và chức năng khác nhau của blockchain

Định nghĩa Lý thuyết về lớp Blockchain trong Solidity

Đây là một ví dụ về mỗi lớp Blockchain trong Solidity sử dụng trong Block này:

 

Lớp Blockchain bao gồm một mảng các đối tượng Block, đại diện cho các khối trong blockchain. Nó cũng bao gồm một hàm tạo để thêm khối genesis (khối đầu tiên trong blockchain) vào blocks một cách ngay ngắn.

Chức năng addBlock này được sử dụng để thêm một khối mới vào blockchain. Trước tiên, nó kiểm tra xem khối đó có hợp lệ không và hàm băm khối trước đó trong block header matches khớp với hàm băm khối (block hash) của khối trước đó (previous block) trong blocks. Nếu những kiểm tra này vượt qua, khối sẽ được thêm vào blocks một cách trình tự. 

Chức năng validate này được sử dụng để xác thực toàn bộ blockchain bằng cách kiểm tra xem tất cả các khối có hợp lệ và được liên kết đúng cách với nhau hay không. Chức năng này có thể được sử dụng để đảm bảo rằng blockchain ở trạng thái nhất quán và chính xác.

Đọc thêm:

Đây chỉ là một ví dụ đơn giản về cách Blockchain được cấu trúc. Trong một blockchain thực, các lớp này có thể bao gồm nhiều chức năng và cấu trúc dữ liệu khác để hỗ trợ các tính năng và chức năng khác nhau của blockchain. Dưới đây là một số ý tưởng về các tính năng mới có thể được thêm vào lớp Block và Blockchain để cải thiện tính bảo mật, giảm dung lượng bộ nhớ hoặc thêm chức năng khác:

  1. Cắt xén (Pruning): Để giảm dung lượng bộ nhớ của blockchain, bạn có thể triển khai một tính năng có tên là “cắt tỉa” để loại bỏ các khối cũ không còn cần thiết. Điều này có thể được thực hiện bằng cách sử dụng một chức năng như prune(uint256 _numBlocksToKeep), loại bỏ tất cả các khối ngoại trừ các _numBlocksToKeep khối gần đây nhất.

  2. Bảo vệ Reorg (Reorg protection): Để tăng tính bảo mật của blockchain, bạn có thể triển khai một tính năng gọi là “Reorg protection” để ngăn các khối bị xóa hoặc thêm vào blockchain sau khi chúng đã được đưa vào một số khối nhất định. Điều này có thể được thực hiện bằng cách sử dụng một chức năng như prune(uint256 _numBlocksToKeep), đặt số lượng khối phải được thêm vào blockchain trước khi một khối có thể bị xóa.

  3. Xác minh khối (Block verification): Để tăng tính bảo mật của blockchain, bạn có thể triển khai một tính năng cho phép người dùng xác minh nội dung của một khối trước khi khối đó được thêm vào blockchain. Điều này có thể được thực hiện bằng cách sử dụng một chức năng như verify(bytes32 _blockHash) -> bool, cho phép người dùng kiểm tra xem khối có hàm băm đã cho có hợp lệ hay không.

  4. Lưu trữ trạng thái gốc (State root storage): Để giảm dung lượng bộ nhớ của blockchain, bạn có thể triển khai một tính năng lưu trữ trạng thái gốc của từng khối trong một vị trí lưu trữ riêng biệt thay vì trong chính khối đó. Điều này có thể được thực hiện bằng cách sử dụng một chức năng như storeStateRoot(bytes32 _stateRoot, bytes32 _blockHash) lưu trữ gốc trạng thái cho khối với hàm băm (hash) đã cho ở một vị trí lưu trữ riêng biệt.

  5. Nén khối (Block compression): Để giảm dung lượng bộ nhớ của blockchain, bạn có thể triển khai tính năng nén dữ liệu trong mỗi khối bằng thuật toán nén không mất dữ liệu. Điều này có thể được thực hiện bằng cách sử dụng một hàm như compress(bytes _data) -> bytes nén dữ liệu đã cho và trả về dữ liệu đã nén.

Có nhiều khả năng khác để cải thiện bảo mật, giảm dung lượng bộ nhớ và thêm chức năng mới vào blockchain. Xin hẹn bạn ở một bài nghiên cứu khác!

Bài viết được Nhật thuộc FXCE Crypto biên tập từ “Programming structures of a blockchain”; Với mục đích cung cấp thông tin và phi lợi nhuận. Chúng tôi không khuyến nghị đầu tư và không chịu trách nhiệm cho các quyết định đầu tư liên quan đến nội dung bài dịch.

 

#Analysis
ic-comment-blueComment
#