Hỏi về Blockchain

Chào mọi người ,Hiện em đang làm một dự án nho nhỏ ở trường về blockchain. Đó là lưu dữ liệu vào các khối ,các dữ liệu này là thông tin hoa quả bình thường. Trên hệ thống này không cung cấp việc buôn bán mà chỉ đơn thuần truy xuất dữ liệu (read) nguồn gốc bình thường. Theo em được biết thì dữ liệu được lưu vào các khối phải là dạng trạng thái giao dịch. Mọi người góp ý giúp em ,em nên chuyển việc lưu trữ dữ liệu như thông tin trái cây thành như thế nào để nó được gọi là giao dịch ạ. Em xin cảm ơn.

1 Like

Hình như chỗ này bạn đang bị nhầm lẫn giữa Blockchain và Bitcoin/BTC khi xem các “khối dữ liệu” thành “giao dịch”.

Nếu bạn cần 1 blockchain “tự chế” cho dễ hiểu:

  1. Bạn có khối dữ liệu đầu tiên: K0
  2. Một người nông dân A thêm vào 10 quả táo ở khối K1: K1 -> K0
  3. Nông dân B thêm vào 20 quả dứa ở khối K2: K2 -> K1 -> K0
  4. Anh C mua 5 quả táo của A, khối K3 sẽ ghi ‘A +5, K1-5’, danh sách khối: K3 -> K2 -> K1 -> K0

Các khối ở đây sẽ được chain (kết nối) với nhau sao cho khi khối K3 xuất hiện, việc thay đổi trên K2 sẽ bị phát hiện ngay (đơn giản nhất là trong K3 lưu lại hash của K2), tương tự với K2 và K1, K1 và K0…

Việc khó khăn còn lại là, làm sao xác định được khối K2 của nông dân B là hợp lệ (a.k.a đảm bảo nông dân B có 20 quả dứa)? Việc này có thể dùng cách cho N người khác cùng xác nhận anh B có 20 quả dứa. Ở đây tương đương với việc “đào”. Việc “đào” này cần phải đảm bảo ít nhất 2 yếu tố: vừa dễ kiểm tra chéo (dễ dàng kiểm tra xác nhận của ai đó có đúng không), và rất khó làm giả (1 anh nào khác không thể giả xác nhận của N người nhanh hơn N người xác nhận). Có nhiều cách “đào” hay dùng: tính hash, tính số nguyên tố, chứng minh tồn tại… Bạn có thể đọc thêm về cái gọi là “Proof of work” trong blockchain để biết chi tiết

Túm lại là, việc hiện thực 1 cái blockchain “tự chế” từ đầu hơi bị khó, nên thay vào đó, bạn có thể nghiên cứu cái gọi là smart contract trong Etherum để áp dụng sẽ nhanh hơn.

2 Likes

Mỗi block của Blockchain có chứa:

  • Previous Hash
  • Timestamp
  • Nonce (random number)
  • Tx_Root: đây là transaction data (dịch ra tiếng việt là Giao dịch)

Transaction được xây dựng trên cấu trúc dữ liệu là Merkle tree. Như vậy, bạn có thể bỏ thông tin nguồn gốc vào trong cây này.
Do hằng ngày có một lượng lớn hoa quả được đánh nhãn, nên chúng ta không thể (và không nên) dùng mỗi block cho 1 bó rau hoặc một hộp nho được, vì chi phí và số lượng block sẽ rất lớn. Thay vào đó, bạn có thể xây dựng như sau:

  • Mỗi loại hoa quả là 1 Blockchain, ví dụ blockchain Xoài
  • Transaction sẽ chứa toàn bộ dữ liệu của 1 ngày
  • Mỗi Tx0, Tx1 con sẽ chứa thông tin về Nơi trồng, ngày trồng, và quá trình di chuyển của 1 hộp/thùng Xoài (bạn tùy chọn theo ý bạn).
  • Hash của các Tx0, Tx1 con mỗi ngày sẽ giống như cấu trúc cây Merkle ở trên.

Tất nhiên là bạn có thể lưu các thông tin truy xuất nguồn gốc ở database khác, và blockchain chỉ dùng để kiểm tra tính toàn vẹn của dữ liệu thôi.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?