Xây dựng một block chain cơ bản trong .net core

Giới thiệu

Blockchain là công nghệ được sử dụng để tạo ra Bitcoin, một loại tiền số phổ biến nhất trên thế giới. Ngoài việc được sử dụng để tạo ra các loại tiền số thì ngày nay Blockchain đã được ứng dụng vào rất nhiều lĩnh vực khác nhau. Trong bài viết này chúng ta sẽ cùng tìm hiểu làm sao để xây dựng một blockchain từ đầu

Blockchain là cái gì ?

Blockchain là một database, dữ liệu được tổ chức một cách có cấu trúc. Nói một cách đơn giản thì blockchain chỉ là một cấu trúc dữ liệu dùng để lưu trữ dữ liệu. Giống như chính cái tên của nó thì đây chính là một chuỗi các khối (chain of blocks)

Chain of blocks

Hình ảnh dưới đây mô tả cụ thể cấu trúc của BlockChain

block chain trong .net

Block chain trong .net

Đây là một blockchain đơn giản, nó là một danh sách móc nối được tạo nên bởi các khối. Mỗi một khối sẽ có các thuộc tính sau đây

  • Index
  • Timestamp
  • PreviousHash
  • Hash
  • Data

Riêng khối đầu tiên là một khối đặc biệt, được gọi là Genesis Block. Genesis Block là khối duy nhất không có khối đứng đằng trước nó và không chứa dữ liệu

Viết code tạo BlockChain

Chúng ta sẽ thêm 2 class cho cấu trúc này (Block và BlockChain)

Block

Blockchain

Hãy thêm một vài đoạn code sau và chạy thử để xem kết quả nhé

Validation

Một trong những ưu điểm của BlockChain chính là Data security. Data security có nghĩa là việc thay đổi dữ liệu cũ bằng một dữ liệu mới bị ngăn chặn bởi các phương pháp mã hóa & việc lưu trữ dữ liệu không tập trung (các khối được lưu trữ phân tán tại nhiều nơi khác nhau). Tuy nhiên blockchain chỉ là một cấu trúc dữ liệu nên nó rất dễ “bị” cập nhật bởi câu lệnh sau

Vì thế chúng ta cần phải validate dữ liệu. Bây giờ tiến hành thêm hàm IsValid như sau (vào trong class Blockchain)

Hàm IsValid làm 2 việc

  • Tính toán lại Hash của Block hiện tại xem giá trị có bị thay đổi hay không
  • Kiểm tra lại Hash của Block trước đó xem có bị “trỏ nhầm” sang một Block khác hay không

Hãy thử chạy đoạn lệnh sau đây và xem kết quả

Vậy trong trường hợp hacker tính toán lại giá trị Hash rồi cập nhật lại thì sao ?

Sau khi tính toán lại Hash của tất cả các khối thì việc validation sẽ pass. Tuy nhiên nó chỉ pass cho 1 node, vì trong thực tế BlockChain là một hệ thống phân cấp, dữ liệu của các node được lưu trữ nhiều nơi vì vậy mà việc tính toán lại là không khả thi.

Kết

Một Blockchain là một chuỗi các khối, nó sử dụng các thuật toán mã hóa để đảm bảo tính toàn vẹn dữ liệu.

Bài viết được tham khảo và dịch lại từ https://www.c-sharpcorner.com/article/blockchain-basics-building-a-blockchain-in-net-core/