Bài viết được dịch từ tựa Programming blockchain in Javascript của tác giả Mohammad Azam. Bài viết có được hiệu chỉnh do cắt nghĩa rõ hơn một số thuật ngữ trong công nghệ blockchain.

Blockchain — Decentralized Network

Trong một bài viết gần đây tôi có nói về việc triển khai ứng dụng Blockchain với ngôn ngữ Swift trên nền tảng iOS. Rất nhiều người đã email cho tôi và hỏi về việc triển khai ứng dụng đó bằng Javascript. Và bài viết này chính là để thoả mãn việc sử dụng NodeJS để xây dựng ứng dụng lõi của Blockchain.

Khởi tạo các Model

Bước đầu tiên ta cần định nghĩa các model liên quan đến nhau thông qua đối tượng, đại diện cho những thành phần của Blockchain. Các model đó bao gồm nhưng thành phần sau:
Transaction: Một giao dịch đại diện cho việc luân chuyển giá trị. Nó có thể là tiền bạc, hàng hoá, các ghi chép y khoa…

Transaction

Block: Một block sẽ được khai thác bởi thợ đào mà sau đó nó sẽ được thêm vào blockchain mà trong đó chưa thông tin giao dịch được phát tán lên hệ thống mạng phân tán.
Block

Blockchain: Một blockchain hình thành từ một danh sách các block. Một blockchain sẽ luôn giữ nguyên giá trị của nó và không thể thay đổi, đồng nghĩa với việc mỗi block phát sinh được thêm vào blockchain sẽ không thể chỉnh sửa bất kì thông số gì.

Blockchain

Cuối cùng chúng ta cũng đã tạo lập xong toàn bộ model cơ bản trong Blockchain và giờ là lúc để viết mã cho các tính năng cốt lõi của nó.

Triển khai các tính năng lõi của blockchain

Chúng ta sẽ bắt đầu thông qua việc cho phép các block thêm vào thông tin của các giao dịch phát sinh. Và việc đó sẽ được kết thúc bởi hàm `addTransaction` xây dựng trong class Block:
Hàm addTransaction trong class Block


Một block được khai thác dựa trên khoá của nó bao gồm các thuộc tính sau:
index: chỉ mục hiện tại của block trong blockchain.
previousHash: chuỗi khoá của block trước đó trong blockchain.
hash: chuỗi khoá của block hiện tại.
nonce: trường dữ liệu 32bit (4 byte) giá trị được đặt sao cho giá trị chuỗi khoá (hash) của block sẽ chứa một dãy các số 0 liên tiếp ở đầu. Các trường hợp còn lại không được phép thay đổi, bởi chúng có một ý nghĩa đã được xác định rõ.
transactions: một danh sách các giao dịch được thêm vào block.
Khoá thuộc tính sử dụng phương thức `get` trong class Block như sau:


Tiếp theo chúng ta sẽ chuyển tới class Blockchain. Ở bên dưới đây chúng ta sẽ hoàn thiện class Blockchain.
Blockchain Completed

Để sinh ra mã hash SHA256 chúng ta sẽ sử dụng một node package: “js-sha256”. Bạn có thể cài đặt package này thông qua câu lệnh:

$ npm install js-sha256

Cùng quay lại và thử nghiệm ứng dụng Blockchain của chúng ta thông qua việc thêm vào nó một vài giao dịch:

Test Blockchain app
Chúng ta cần khởi tạo block đầu tiên trong Blockchain hay còn được biết tới cái tên genesisBlock. Trong thế giới Bitcoin genesis block bao gồm các phần thưởng cho các thợ đào. Tiếp theo, chúng ta sẽ khai thác một vài block sử dụng phương thức getNextBlock() trong Blockchain. Một lần nữa, các block đã được khai thác chúng sẽ thêm vào các giao dịch và được nối vào blockchain.
Sau đây là video về việc khởi chạy blockchain:



Mã nguồn
Bạn có thể tải mã nguồn của ứng dụng mẫu này tại đây: Source_Code
.    .    .
Hãy tiếp tục ủng hộ và giữ kết nối với Vnknowledge các bạn nhé:
Xin cảm ơn các bạn!!!!