Thông qua bài viết này mình sẽ hướng dẫn các bạn làm quen và hiểu thêm về công nghệ Blockchain
.
Mục đích
– Tạo hệ thống Blockchain đơn giản nhất.
– Tạo hệ thống mining (poor of work) đơn giản.
– Khám phá thêm về Blockchain.
Kiến thức cần chuẩn bị: OOP, biết 1 ngôn ngữ hướng đội tượng.
Ok giờ xắn tay vào việc nào
Making the Blockchain.
Một blockchain
là danh sách, chuỗi các khối (A blockchain is just a chain/list of blocks). Mỗi block
trong blockchain
sẽ chứa chữ ký số của nó, chữ ký số của khối trước nó và dữ liệu của khối (dữ liệu giao dịch là một ví dụ).
Hash = Digital Signature.
Mỗi khối không chỉ chứa mã hash của khối trước nó mà nó còn chứa mã hash của chính nó, được tính toán dựa trên mã hash của khối trước nó. Nếu dữ liệu khối trước đó bị thay đổi (khối A), việc này dẫn tới thay đổi mã hash của khối A, do mã hash được tính toán dựa trên data này. Việc này dẫn tới sự thay đổi mã hash của tất cả các khối trong chuỗi. Việc tính toán và so sánh giúp chúng ta phát hiện ra bất kì sự thay đổi nào trong blockchain.
Điều này có nghĩa là gì? – Nghĩa là khi thay đổi dữ liệu của 1 block
thì sẽ dẫn tới thay đổi dữ liệu của rất rất nhiều block
, và dãn tới thay đổi chain
(break the chain).
Giờ chúng ta sẽ thừ bắt đầu xây dựng một hệ thống Blockchain
đơn giản.
Tạo project
đặt tên là NoobChain
Thêm class Block để xây dựng blockchain
class Block { public String hash; public String previousHash; private String data; // Trong ví dụ này chúng ta chỉ lưu data là một thông báo. private long timeStamp; //Block Constructor. public Block(String data, String previousHash) { this.data = data; this.previousHash = previousHash; this.timeStamp = DatetimeHandle.GetTime(); } }
Như bạn thấy Block
cơ bản của chúng ta chứa một chuỗi hash
sẽ dùng để lưu chữ kí số. Một biến previousHash
để lưu hash
của khối trước nó, và dữ liệu của khối.
Bước tiếp theo chúng ta sẽ tiến hành tạo chữ ký số.
Tạo lớp HashSha256
, áp dụng thuật toán sha256 để sinh chuỗi, với nội dung như sau:
class HashSha256 { public override string Hash(string strInput) { try { var crypt = new System.Security.Cryptography.SHA256Managed(); var hash = new System.Text.StringBuilder(); byte[] crypto = crypt.ComputeHash(Encoding.UTF8.GetBytes(strInput)); foreach (byte theByte in crypto) { hash.Append(theByte.ToString("x2")); } return hash.ToString(); } catch (Exception e) { throw e; } } } Xem thêm