Chương 3: Xây dựng và triển khai smart contract lên hệ thống blockchain Trong chương này, tác giả sẽ trình bày một số kiến thức cơ bản để tạo nên một smart contract và triển khai smar
Trang 1- -
BÁO CÁO NGHIÊN CỨU KHOA HỌC
ĐỀ TÀI:
ỨNG DỤNG CÔNG NGHỆ BLOCKCHAIN VÀO QUẢN LÝ BẰNG CỦA TRƯỜNG ĐẠI
HỌC LẠC HỒNG
TRẦN DIỆP KHÁNH TRÌNH
BIÊN HÒA, THÁNG 11/2018
Trang 2- -
BÁO CÁO NGHIÊN CỨU KHOA HỌC
ĐỀ TÀI:
ỨNG DỤNG CÔNG NGHỆ BLOCKCHAIN VÀO QUẢN LÝ BẰNG CỦA TRƯỜNG ĐẠI
HỌC LẠC HỒNG
Sinh viên thực hiện: Trần Diệp Khánh Trình Giáo viên hướng dẫn: ThS Phan Thị Hường
BIÊN HÒA, THÁNG 11/2017
Trang 3LỜI CẢM ƠN
Không có sự thành công nào mà không gắn liền với những sự giúp đỡ và hỗ trợ dù
ít hay nhiều, dù trực tiếp hay gián tiếp của người khác Trong suốt thời gian từ khi bắt đầu học tập ở trường cho đến nay, em đã nhận được rất nhiều sự quan tâm, giúp đỡ của quý thầy cô, gia đình và bạn bè
Lời đầu tiên em xin chân thành cảm ơn đến cô ThS Phan Thị Hường là giáo viên trực tiếp hướng dẫn đã nhiệt tình giúp đỡ, hướng dẫn và đóng góp ý kiến để bài báo cáo của em được hoàn thành một cách tốt nhất
Em cũng xin gửi lời cảm ơn đến quý thầy cô ở Khoa Công Nghệ Thông Tin – Trường Đại Học Lạc Hồng đã cùng với tri thức và tâm huyết của mình để truyền đạt vốn kiến thức quý báu cho em trong suốt thời gian học tập tại trường
Và đặc biệt, xin gửi lời cảm ơn sâu sắc nhất đến ba mẹ, người đã sinh thành và nuôi dưỡng con nên người, luôn tạo điều kiện, ủng hộ, động viên con mỗi khi thất bại, chán nản
Vì đây là lần đầu tiên tìm hiểu một lĩnh vực còn khá mới mẻ, nên mặc dù em đã bỏ rất nhiều thời gian, công sức, tâm huyết vào đó nhưng chắc chắn không tránh khỏi những hạn chế và sai sót Hy vọng những vấn đề còn hạn chế trong đề tài sẽ nhận được những ý kiến đóng góp và hướng dẫn của quý thầy cô để đề tài của em được hoàn thiện hơn
Sau cùng, em xin kính chúc quý thầy cô trong Khoa Công nghệ thông tin thật dồi dào sức khỏe để tiếp tục sứ mệnh cao đẹp là truyền đạt những tri thức quý báu cho thế hệ mai sau
Em xin chân thành cảm ơn
Biên Hòa, tháng 11 năm 2018 Sinh viên thực hiện
Trần Diệp Khánh Trình
Trang 4MỤC LỤC
LỜI CẢM ƠN I MỤC LỤC II DANH MỤC BẢNG V DANH MỤC HÌNH VI DANH MỤC CÁC TỪ VIẾT TẮT VII
PHẦN MỞ ĐẦU 1
1.1 Lý do chọn đề tài 1
1.2 Tình hình nghiên cứu 1
Ngoài nước 1
Trong nước 2
1.3 Mục tiêu nghiên cứu 2
1.4 Đối tượng và phạm vi nghiên cứu 2
Đối tượng nghiên cứu 2
Phạm vi nghiên cứu 2
1.5 Phương pháp nghiên cứu 2
1.6 Những đóng góp mới và những vấn đề chưa thực hiện được của đề tài 3
1.6.1 Những đóng góp mới 3
1.6.2 Những vấn đề chưa thực hiện được 3
1.7 Kết cấu của luận văn 3
Chương 1: Tổng quan lý thuyết 4
1.1 Tổng quan về công nghệ blockchain 4
1.1.1 Giới thiệu về blockchain 4
1.1.2 Đặc điểm 4
1.1.3 Nguyên lý hoạt động 4
1.1.4 Phân loại 5
1.2 Tổng quan về Ethereum 5
1.2.1 Giới thiệu về Ethereum 5
1.2.2 Kiến trúc 5
1.2.3 Ứng dụng 6
1.3 Tổng quan về smart contract 6
1.3.1 Giới thiệu về smart contract 6
1.3.2 Nguyên lý hoạt động 6
1.3.3 Các thành phần của smart contract 7
1.3.4 Lợi ích của smart contract 7
1.4 Các ứng dụng phi tập trung 7
Trang 51.4.1 Giới thiệu ứng dụng phi tập trung 7
1.4.2 Làm sao để xây dựng một DApp? 8
1.5 Một số phần mềm, thư viện và framework được sử dụng trong đề tài 8
1.5.1 Geth 8
1.5.2 Remix 8
1.5.3 Nodejs 8
1.5.4 Truffle 9
1.5.5 Lite-server 9
1.5.6 Web3.js 9
1.5.7 Bootstrap 9
1.5.8 Metamask 9
1.6 Tiểu kết 9
Chương 2: Hệ thống blockchain 10
2.1 Cài đặt phần mềm geth 10
2.1.1 Cài đặt phiên bản dành cho tất cả bản phân phối của linux 10
2.1.2 Cài đặt bằng package management (apt) của Ubuntu 11
2.1.3 Chạy thử geth 11
2.2 Thiết lập genesis block 12
2.3 Cài đặt và thiết lập cho miner 13
2.3.1 Khởi tạo miner từ genesis block 13
2.3.2 Tạo tài khoản người dùng 14
2.3.3 Tạo file thực thi miner 15
2.3.4 Thử thực hiện giao dịch 17
2.4 Kết nối và đồng bộ các miner với nhau 18
2.5 Tiểu kết 20
Chương 3: Xây dựng và triển khai smart contract lên hệ thống blockchain 21
3.1 Cài đặt framework truffle 21
3.2 Tạo smart contract 21
3.2.1 Sơ đồ hoạt động của smart contract 21
3.2.2 Khai báo và lập trình các chức năng cho đối tượng người dùng 24
3.2.3 Khai báo và lập trình các chức năng cho đối tượng sinh viên 26
3.2.4 Khai báo và lập trình các chức năng cho đối tượng bằng cấp 29
3.3 Triển khai smart contract 32
3.3.1 Thiết lập truffle 32
3.3.2 Triển khai smart contract 33
3.3.3 Chạy thử smart contract 34
3.4 Tiểu kết 35
Trang 6Chương 4: Xây dựng DApp quản lý bằng đại học 36
4.1 Khảo sát quy trình cấp phát bằng 36
4.2 Tạo giao diện website 36
4.3 Kết nối website với hệ thống blockchain 38
4.4 Sử dụng metamask trình duyệt hỗ trợ chạy DApp 42
4.5 Tiểu kết 45
Chương 5: KẾT LUẬN 46
TÀI LIỆU THAM KHẢO 48
Trang 7DANH MỤC BẢNG
Bảng 5.1 – So sánh phương pháp lưu trữ trên blockchain và server 46
Trang 8DANH MỤC HÌNH
Hình 1.1 – Nguyên lý hoạt động của smart contract 7
Hình 2.1 – Sơ đồ hệ thống private blockchain 10
Hình 2.2 – Trang web download các phiên bản geth 11
Hình 2.3 – Kiểm tra phiên bản của phần mềm geth 12
Hình 2.4 – Terminal hiển thị khi chạy geth 12
Hình 2.5 – Kết quả khi khởi tạo miner 14
Hình 2.6 – Kết quả khi tạo tài khoản cho miner 15
Hình 2.7 – Danh sách tài khoản của miner 15
Hình 2.8 – Terminal hiển thị khi chạy một miner 16
Hình 2.9 – Console để điều khiển miner 17
Hình 2.10 – Thông tin trả về của một giao dịch trên miner 18
Hình 2.11 – Danh sách các giao dịch đang chờ được thực hiện 18
Hình 2.12 – Thông tin enode của một miner 19
Hình 2.13 – Danh sách các miner đã kết nối được với nhau 20
Hình 3.1 – Mô hình hệ thống xác thực văn bằng trên nền tảng blockchain 21
Hình 3.2 – Sơ đồ hoạt động của smart contract quản lý bằng 22
Hình 3.3 – Sơ đồ hoạt động của smart contract quản lý bằng 23
Hình 3.4 – Thông báo triển khai smart contract thành công 34
Hình 3.5 – Thực hiện một giao dịch của smart contract 35
Hình 3.6 – Lấy kết quả đã được lưu trên blockchain 35
Hình 4.1 – Website tra cứu bằng dựa vào mã sinh viên 36
Hình 4.2 – Website tra cứu bằng dựa vào số hiệu của bằng 37
Hình 4.3 – Website quản lý người dùng 37
Hình 4.4 – Website lưu trữ thông tin 38
Hình 4.5 – Website được chạy trên máy chủ 42
Hình 4.6 – Giao diện metamask 42
Hình 4.7 – Lựa chọn port cho metamask 43
Hình 4.8 – Thêm tài khoản cho metamask 43
Hình 4.9 – Lấy tài khoản từ file json trong keystore của miner 44
Hình 4.10 – Ứng dụng web hoàn chỉnh sau khi cài đặt metamask 44
Trang 9DANH MỤC CÁC TỪ VIẾT TẮT
Từ viết tắt Tiếng Anh Tiếng Việt
Trang 10PHẦN MỞ ĐẦU
1.1 Lý do chọn đề tài
Cuộc cách mạng công nghiệp 4.0 đang là xu hướng trên toàn thế giới trong việc tự động hóa và trao đổi dữ liệu trong công nghệ sản xuất, là sự hội tụ kỹ thuật số với các yếu tố cốt lõi là: trí tuệ nhân tạo, IoT và big data Và sẽ là một thiếu sót không nhỏ đối với cuộc cách mạng này nếu bỏ qua công nghệ Blockchain
Như đã đề cập ở trên, cuộc cách mạng công nghiệp 4.0 tập trung vào khai thác nguồn tài nguyên dữ liệu, điều này chính là sự khác biệt lớn nhất so với các cuộc cách mạng dựa trên nguồn tài nguyên thiên nhiên trước đó, nghĩa là dữ liệu có vai trò cực kỳ quan trọng đối với cuộc cách mạng này Tuy nhiên, dữ liệu luôn tiềm ẩn những nguy cơ
về an ninh bảo mật và lòng tin của con người, do đó việc xây dựng nên một nguồn dữ liệu có ích, đáng tin cậy mà lại không sợ bị đánh cắp chính là một bài toán khó hiện nay Blockchain (chuỗi khối) là một cơ sở dữ liệu phân tán, lưu trữ thông tin trong các khối thông tin được liên kết với nhau dựa vào sự mã hóa và có thể mở rộng theo thời gian Mỗi khối thông tin đều chứa thông tin về thời gian khởi tạo và được liên kết tới khối trước đó, kèm một mã thời gian và dữ liệu giao dịch
Vì vậy Blockchain phù hợp để ghi lại những sự kiện, hồ sơ y tế, xử lý giao dịch, công chứng, danh tính và chứng minh nguồn gốc Việc này có tiềm năng giúp xóa bỏ các hậu quả lớn khi dữ liệu bị thay đổi trong bối cảnh thương mại toàn cầu
Blockchain hiện đã và đang được các tổ chức, cơ quan đầu tư nghiên cứu, phát triển và ứng dụng vào nhiều lĩnh vực trong cuộc sống Thấy được những tiềm năng to lớn của blockchain trong việc an toàn và minh bạch thông tin, tác giả mong muốn tìm hiểu công nghệ blockchain và ứng dụng công nghệ này vào quản lý bằng tốt nghiệp của Trường Đại học Lạc Hồng
1.2 Tình hình nghiên cứu
Ngoài nước
Như đã nói trên, công nghệ blockchain đang dần được áp dụng vào nhiều lĩnh vực trong cuộc sống Ngày càng nhiều cá nhân, cơ quan và tổ chức quan tâm, nghiên cứu và cho ra nhiều ứng dụng của blockchain được áp dụng vào cuộc sống Một số ví dụ như:
Zug ở Thụy Sĩ, nơi được gọi là “Thung lũng Crypto” đã hợp tác với Uport triển khai một dự án Blockchain để cư dân có thể đăng ký ID, cho phép
họ tham gia bỏ phiếu trực tuyến và chứng minh nơi cư trú
Các dự án chăm sóc sức khỏe như MedRec đang sử dụng Blockchain như một phương tiện tạo điều kiện chia sẻ dữ liệu trong khi cung cấp xác thực
Trang 11 Trong nước
Đối với Việt Nam, công nghệ này vẫn còn khá mới, chưa phổ biến và được
áp dụng rộng rãi Nhưng đã có một có cá nhân và tổ chức tìm hiểu, nghiên cứu và
áp dụng vào thực tế như: truy xuất nguồn gốc xoài Cát Chu của hợp tác xã Mỹ Xương dựa trên nền tảng blockchain của Infinity Blockchain Labs (IBL) - công ty chuyên phát triển các giải pháp công nghệ trên nền tảng blockchain[2]
1.3 Mục tiêu nghiên cứu
Đề tài thực hiện với các mục tiêu:
Tìm hiểu về blockchain
Xây dựng một hệ thống blockchain
Tìm hiểu smart contract
Lập trình một smart contract để thực hiện quản lý bằng cấp
Xây dựng một website hỗ trợ tra cứu và xác thực bằng cấp của Trường Đại học Lạc Hồng dựa trên nền tảng blockchain đã xây dựng
1.4 Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu
Nền tảng Ethereum
Ngôn ngữ lập trình Solidity để lập trình smart contract
Framework Truffle của nodejs để hỗ trợ triển khai smart contract lên hệ thống blockchain
Thư viện web3js
Phạm vi nghiên cứu
Xây dựng một hệ thống blockchain nội bộ
Lập trình một hợp đồng thông minh trong việc quản lý bằng
Xây dựng một website dựa trên nền tảng blockchain
1.5 Phương pháp nghiên cứu
Nghiên cứu báo cáo, bài báo và tài liệu hướng dẫn về blockchain: [3], [4], [5]
Phân tích và thiết kế cấu trúc cho hệ thống blockchain
Tìm hiểu các thành phần dữ liệu của một tấm bằng đại học
Nghiên cứu báo cáo, bài báo và tài liệu hướng dẫn về DApp: [6], [7], [8]
Phân tích dữ liệu để lập trình ra một smart contract trong quản lý bằng
Nghiên cứu cách để kết nối website với blockchain
Trang 121.6 Những đóng góp mới và những vấn đề chưa thực hiện được của đề tài
1.6.1 Những đóng góp mới
Ứng dụng công nghệ blockchain vào thực tiễn, giúp hạn chế việc làm và sử
dụng bằng cấp giả
Đóng góp thêm một giải pháp để chống việc làm và sử dụng bằng cấp giả
1.6.2 Những vấn đề chưa thực hiện được
Hiện tại, việc lấy thông tin từ một danh sách tổng hợp chẳng hạn như file
excel và lưu vào hệ thống yêu cầu người dùng xác nhận nhiều lần
1.7 Kết cấu của luận văn
Luận văn được chia làm ba phần: phần mở đầu, phần nội dung và phần kết
luận
Phần mở đầu
Nêu lý do chọn đề tài, tổng quan tình hình phát triển, mục tiêu nghiên cứu đề
tài, đối tượng, phạm vi, phương pháp nghiên cứu cũng như những đóng góp mới
của đề tài Bên cạnh đó cũng chỉ ra mặt hạn chế mà đề tài chưa thực hiện được để
giúp mọi người có cái nhìn rõ hơn
Phần nội dung chính: gồm 4 chương
Chương 1: Tổng quan lý thuyết
Trong chương này, tác giả sẽ giới thiệu và trình bày những kiến thức cơ bản
về công nghệ blockchain, nền tảng ethereum, smart contract và các ứng dụng phi
tập trung Đồng thời, tác giả cũng sẽ giới thiệu một số công cụ, thư viện và
framework mà tác giả đã dùng trong đề tài
Chương 2: Hệ thống blockchain
Trong chương này, người đọc sẽ hiểu cách để tự xây dựng một hệ thống
private blockchain dựa trên nền tảng Ethereum
Chương 3: Xây dựng và triển khai smart contract lên hệ thống blockchain
Trong chương này, tác giả sẽ trình bày một số kiến thức cơ bản để tạo nên
một smart contract và triển khai smart contract lên hệ thống blockchain
Chương 4: Xây dựng và triển khai smart contract lên hệ thống blockchain
Trong chương này, tác giả sẽ nêu ra cách để kết nối website với hệ thống
blockchain để tạo ra một ứng dụng phi tập trung
Phần kết luận
Đưa ra những kết luận và kiến nghị về chương trình đã xây dựng
Trang 13Chương 1: Tổng quan lý thuyết
1.1 Tổng quan về công nghệ blockchain
1.1.1 Giới thiệu về blockchain
Blockchain là một hệ thống cơ sở dữ liệu phân tán phi tập trung, bao gồm nhiều máy tính kết nối trong mạng ngang hàng (peer-to-peer) với nhau tạo thành
Hệ thống này lưu trữ thông tin thành các khối dữ liệu liên kết với nhau, và được quản lý bởi mọi người tham gia vào trong hệ thống
Thông tin trong blockchain không thể bị thay đổi và chỉ được bổ sung thêm khi có sự đồng thuận của tất cả các nút trong hệ thống Đây là một hệ thống bảo mật an toàn cao trước khả năng bị sửa đổi dữ liệu Ngay cả khi một phần của hệ thống blockchain sụp đổ, những máy tính và các nút khác sẽ tiếp tục bảo vệ thông tin và giữ cho mạng lưới tiếp tục hoạt động
1.1.2 Đặc điểm
Các đặc điểm chính và nổi bật của công nghệ blockchain có thể kể đến như:
Hệ thống được thiết kế phân tán nên mỗi người tham gia vào hệ thống
sẽ lưu giữ một bản sao dữ liệu, điều đó giúp cho dữ liệu không thể bị làm giả và tấn công
Dữ liệu chỉ có thể sửa đổi khi đạt được sự đồng thuận của mọi người tham gia trong hệ thống, và sẽ được lưu vết trên hệ thống
Mọi sự thay đổi dữ liệu sẽ được lưu vết trên hệ thống do đó có thể nói blockchain là một hệ thống cơ sở dữ liệu có tính minh bạch
1.1.3 Nguyên lý hoạt động
Ứng dụng được biết đến và thảo luận nhiều nhất về công nghệ blockchain chính là đồng tiền điện tử Bitcoin Hiện nay đồng tiền điện tử này có thể được sử dụng để trao đổi các sản phẩm và dịch vụ, giống như đồng đô la Mỹ (USD), Euro (EUR), đồng nhân dân tệ Trung Quốc (CNY) và các loại tiền tệ của các quốc gia khác Do vậy chúng ta sẽ tạm lấy đồng tiền này làm đại diện để nói về nguyên lý hoạt động của công nghệ blockchain
Bitcoin là một đơn vị tiền tệ kỹ thuật số với mã là BTC, cũng giống như đô
la Mỹ bản thân nó không mang giá trị, nó chỉ có giá trị bởi vì có một cộng đồng đồng ý sử dụng nó làm đơn vị giao dịch hàng hóa và dịch vụ
Để theo dõi số lượng Bitcoin mà mỗi người sở hữu trong các tài khoản nhất định và theo dõi các giao dịch phát sinh từ đó thì chúng ta cần đến một cuốn sổ kế toán, trong trường hợp này nó chính là blockchain và đây thực tế là một tệp kỹ thuật số theo dõi tất cả các giao dịch Bitcoin
Tệp sổ cái này không được lưu trữ trong một máy chủ trung tâm, như trong một ngân hàng hoặc trong một trung tâm dữ liệu mà ngược lại nó được phân phối trên toàn thế giới thông qua một mạng lưới các máy tính ngang hàng với vai trò lưu trữ dữ liệu và thực thi các tính toán Mỗi máy tính này đại diện cho một “nút” của mạng lưới blockchain và mỗi nút đều có một bản sao của tệp sổ cái này
Trang 14Giả sử nếu Trình muốn gửi Bitcoin cho Thiệu, Trình sẽ phát một thông báo tới mạng lưới và cho biết số lượng Bitcoin trong tài khoản của mình sẽ giảm 5 BTC và số lượng Bitcoin trong tài khoản của Thiệu sẽ tăng lên tương ứng Mỗi nút trong mạng sau đó sẽ nhận được thông báo này và ánh xạ giao dịch được yêu cầu vào bản sao sổ cái kế toán của họ, và theo đó số dư tài khoản của cả hai bên đều được cập nhật
1.1.4 Phân loại
Public blockchain, đây là hệ thống blockchain mà bất kỳ ai cũng có thể đọc
và ghi dữ liệu trên blockchain Quá trình xác thực giao dịch trên blockchain này đòi hỏi phải có hàng nghìn hay thậm chí là hàng vạn nút tham gia Do
đó để tấn công vào hệ thống blockchain này là điều bất khả thi Ví dụ về public blockchain: Bitcoin, Ethereum…
Private blockchain, đây là hệ thống blockchain mà người dùng chỉ có quyền đọc dữ liệu, không có quyền ghi bởi vì điều này thuộc về một bên thứ ba tuyệt đối tin cậy Bên thứ ba này có thể hoặc không cho phép người dùng đọc dữ liệu trong một số trường hợp Bên thứ ba cũng toàn quyền quyết định mọi thay đổi trên blockchain Vì đây là một Private Blockchain, cho nên thời gian xác nhận giao dịch khá nhanh vì chỉ cần một lượng nhỏ thiết
bị tham gia xác thực giao dịch Ví dụ: Ripple là một dạng Private Blockchain, hệ thống này cho phép 20% các nút là gian dối và chỉ cần 80% còn lại hoạt động ổn định là được
Permissioned blockchain hay còn được gọi là consortium blockchain, là một dạng của private blockchain nhưng bổ sung thêm một số tính năng nhất định, kết hợp giữa “niềm tin” khi tham gia vào public blockchain và “niềm tin tuyệt đối” khi tham gia vào private blockchain Ví dụ: các ngân hàng hay tổ chức tài chính liên doanh sẽ sử dụng Blockchain cho riêng mình
1.2 Tổng quan về Ethereum
1.2.1 Giới thiệu về Ethereum
Ethereum là một nền tảng mã nguồn mở dựa trên công nghệ blockchain cho phép các nhà phát triển xây dựng và triển khai các ứng dụng và hợp đồng thông minh hoạt động trên nền tảng blockchain
Mạng lưới Ethereum sử dụng đồng coin “Ether” hoạt động với tư cách tiền
tệ của mạng lưới Ether được trao đổi như một cách thức chi trả cho việc vận hành các ứng dụng phi tập trung trên mạng lưới Đồng Ether cũng là tiền áo lớn thứ hai thế giới vì giá trị vốn hóa thị trường đứng sau Bitcoin
1.2.2 Kiến trúc
1.2.2.1 Ether
Ether, là một loại tiền mã hóa được giao dịch trong mạng lưới Ethereum được gọi là Ether Nó được liệt kê dưới mã ETH và giao dịch trên các sàn giao dịch tiền mã hóa Nó cũng được sử dụng để trả phí giao dịch và dịch vụ tính toán trên mạng Ethereum
Trang 151.2.2.2 Máy ảo Ethereum (Ethereum Virtual Machine)
Máy ảo Ethereum là một môi trường chạy các hợp đồng thông minh Ethereum
Nó được hoàn toàn cô lập từ mạng, hệ thống tập tin và các quá trình khác của hệ thống máy chủ Mỗi nút Ethereum trong mạng chạy một EVM
và thực hiện các hướng dẫn giống nhau Ethereum Virtual Machines đã được lập trình trong C++, Go, Haskell, Java, Python, Ruby, Rust và WebAssembly
1.2.2.3 Hợp đồng thông minh
Hợp đồng thông minh là một cơ chế trao đổi xác định, được kiểm soát bởi các phương tiện kỹ thuật số mà có thể giúp cho việc thực hiện giao dịch trực tiếp giữa các thực thể mà không cần tin cậy nhau Các hợp đồng này được định nghĩa bằng cách lập trình và được chạy chính xác như mong muốn
mà không bị kiểm duyệt, lừa đảo hay sự can thiệp từ bên thứ ba trung gian Chúng có thể được sử dụng để tạo điều kiện, xác minh và thực thi việc đàm phán hoặc thực hiện các hướng dẫn thủ tục kinh tế và có khả năng tránh được sự kiểm duyệt, thông đồng và rủi ro từ phía đối tác Trong Ethereum, các hợp đồng thông minh được coi là các kịch bản tự trị hoặc các ứng dụng phân cấp được lưu trữ trong chuỗi khối Ethereum để thực hiện sau đó bởi EVM Các hướng dẫn được nhúng trong các hợp đồng Ethereum được thanh toán bằng ether và có thể được thực hiện bằng nhiều ngôn ngữ Turing-complete khác nhau
1.2.3 Ứng dụng
Rất nhiều người nghĩ Ethereum tạo ra để cạnh tranh với đồng tiền ảo Bitcoin nhưng thực chất tiền tệ không phải là mục đích mà Ethereum nhắm đến Công nghệ blockchain của Ethereum tập trung tạo ra các ứng dụng hoạt động dựa trên smart contract nhằm giải quyết mọi giao dịch một cách dễ dàng, nhanh chóng, tiết kiệm,
an toàn và công khai
1.3 Tổng quan về smart contract
1.3.1 Giới thiệu về smart contract
Smart contract là một bộ giao thức đặc biệt với mục tiêu là đóng góp xác nhận hay tiến hành quá trình đàm phán và thực hiện hợp đồng Smart contract cho phép ta triển khai giao dịch mà không cần thông qua một bên thứ ba trung gian Những giao dịch này hoàn toàn dễ dàng truy dấu và không thể bị can thiệp hoặc đảo chiều Smart contract chứa trong mình toàn bộ những thông tin chi tiết
về các điều khoản và thực hiện chúng một cách tự động
Trang 16Sau khi có nhận lệnh triển khai thì hợp đồng sẽ được triển khai theo đúng như điều khoản định sẵn Đồng thời, smart contract cũng sẽ tự động kiểm tra quá trình thực hiện những cam kết nêu trong hợp đồng
Hình 1.1 – Nguyên lý hoạt động của smart contract
1.3.3 Các thành phần của smart contract
Chủ thể hợp đồng, chương trình phải được cấp khả năng truy cập đến sản phẩm/dịch vụ liệt kê trong hợp đồng để có thể tự động khóa hay mở khóa chúng
Chữ ký điện tử, tất cả các bên tham gia đồng ý triển khai thỏa thuận bằng các khóa cá nhân của họ
Điều khoản hợp đồng, điều khoản của smart contract có dạng một chuỗi các hoạt động Các bên tham gia hợp đồng đều phải ký chấp nhận nó
Nền tảng phân quyền, smart contract sau khi hoàn tất sẽ được tải lên Blockchain của nền tảng phân quyền tương ứng và được phân phối về cho các node của nền tảng ấy
1.3.4 Lợi ích của smart contract
Smart contract được mã hóa và phân phối về cho các node Cách thức này bảo đảm nó sẽ không bị thất lạc hay sửa đổi mà không được bạn cho phép
Hầu hết các công đoạn đều được tự động hoá, và gần như loại bỏ hoàn toàn bên trung gian
1.4 Các ứng dụng phi tập trung
1.4.1 Giới thiệu ứng dụng phi tập trung
Như tác giả đã trình bày trong phần giới thiệu về Ethereum ở trên, Ethereum cung cấp một nền tảng để các nhà phát triển tạo ra các ứng dụng chạy trên
Trang 17blockchain, các ứng dụng này được gọi là ứng dụng phi tập trung, thường được gọi là DApp (Decentralized App)
Các ứng dụng phi tập trung là ứng dụng có mã nguồn mở, không chịu sự kiểm soát của một cá nhân hoặc đối tượng nào, và chạy trên blockchain hoặc mạng lưới máy tính phi tập trung Các ứng dụng phi tập trung không có máy chủ trung tâm, người dùng liên hệ với nhau thông qua các kết nối đồng cấp Các ứng dụng thông thường đều chịu sự kiểm soát của một đối tượng, chạy trên một máy chủ trung tâm và dễ bị tấn công hoặc gặp thời gian chết do máy chủ rơi vào trạng thái ngoại tuyến
Một ứng dụng phi tập trung không có máy tính chủ hoặc đối tượng đơn lẻ nào kiểm soát, nó hoạt động trên một mạng máy tính và các thay đổi đều do người dùng quyết định Không có vấn đề nghiêm trọng rằng máy chủ có thể bị sập hoặc
bị tấn công Nếu một máy tính trên mạng lưới thoát tuyến, ứng dụng không bị ảnh hưởng vì còn hàng ngàn máy khác đang vận hành ứng dụng vào thời điểm đó Ngay cả khi một máy tính trong mạng lưới bị tấn công, cũng không thể thực hiện các thay đổi trên ứng dụng vì cần phần lớn mạng lưới phải đồng thuận với thay đổi đó
1.4.2 Làm sao để xây dựng một DApp?
Để xây dựng ra một DApp ta cần phải:
Có một hệ thống blockchain đóng vai trò như một server để lưu trữ cơ sở dữ liệu, trong luận văn này, tác giả sẽ tự tạo một hệ thống private blockchain và
sử dụng hệ thống này để xây dựng DApp
Có tài khoản ví điện tử trên mạng blockchain đó
Tạo ra smart contract quy định các điều khoản, chủ thể, giao dịch và triển khai smart contract lên hệ thống blockchain
Xây dựng ứng dụng hay website và kết nối chúng đến hệ thống blockchain
1.5 Một số phần mềm, thư viện và framework được sử dụng trong đề tài
1.5.1 Geth
Geth hay còn gọi là Go Ethereum, là một chương trình giúp người dùng tương tác với hệ thống blockchain của Ethereum như mining, thực hiện giao dịch… Đồng thời, Geth cũng là chương trình hỗ trợ người dùng tự tạo ra hệ thống blockchain của riêng mình
1.5.2 Remix
Remix là một trình soạn thảo và biên dịch ngôn ngữ lập trình Solidity, remix cũng hỗ trợ các công cụ để nhà phát triển gỡ lỗi và chạy thử smart contract Điểm đặc biệt của remix là không cần phải cài đặt mới sử dụng được, mà chỉ cần truy cập vào đường link: https://remix.ethereum.org/ là có thể sử dụng ngay
1.5.3 Nodejs
NodeJS là một mã nguồn được xây dựng dựa trên nền tảng Javascript V8 Engine Nodejs sử dụng rộng bởi hàng ngàn lập trình viên trên toàn thế giới
Trang 18NodeJS cung cấp các thư viện phong phú ở dạng Javascript Module khác nhau giúp đơn giản hóa việc lập trình và giảm thời gian ở mức thấp nhất
1.5.4 Truffle
Truffle là một môi trường phát triển và là framework để kiểm thử dành cho blockchain Ethereum, mục tiêu mà Truffle hướng đến chính là giúp cho nhà phát triển dễ làm việc với Ethereum hơn trong việc tạo ra các ứng dụng phi tập trung (DApp)
1.5.5 Lite-server
Lite-server là một package của nodejs, giúp tạo ra một localhost để chạy và kiểm thử ứng dụng web của mình Ngoài ra lite-server còn tích hợp BrowserSync, cho phép tự tải lại trang web đang chạy nếu như code của website được chỉnh sửa
và lưu lại
1.5.6 Web3.js
Web3.js là một thư viện javascript, giúp các ứng dụng javascript chạy trên trình duyệt web kết nối và tương tác với hệ thống blockchain Web3.js có thể tải tại: https://github.com/ethereum/web3.js
1.5.7 Bootstrap
Bootstrap là một framework giúp người dung dễ dàng tạo ra giao diện website,
nó chứa các mẫu thiết kế có sẵn dựa trên HTML và CSS cho các kiểu chữ, biểu mẫu, nút bấm, điều hướng và các thành phần giao diện khác
1.5.8 Metamask
Metamask cho phép người dùng chạy các ứng dụng Ethereum DApps ngay trong trình duyệt mà không cần khởi động toàn bộ node Ethereum dẫn đến trình duyệt trở nên nặng nề và chậm chạp
1.6 Tiểu kết
Qua chương này, tác giả đã nêu lên một số cơ sở lý thuyết và một số thư viện, phần mềm được sử dụng trong đề tài Trong chương tiếp theo, tác giả sẽ tiến hành xây dựng một hệ thống private blockchain
Trang 19Chương 2: Hệ thống blockchain
Để tạo nên một hệ thống blockchain, tác giả chia ra ba bước sau:
Cài đặt block đầu tiên cho hệ thống
Cài đặt và thiết lập các miner
Kết nối và đồng bộ các miner với nhau
Hệ thống mà tác giả tạo ra có sơ đồ như sau:
Hình 2.1 – Sơ đồ hệ thống private blockchain
Tuy nhiên, trước khi tiến hành thực hiện các bước này, tác giả cần cài đặt các phần mềm cần thiết để có thể tạo hệ thống
2.1 Cài đặt phần mềm geth
Geth có thể cài đặt trên nhiều hệ điều hành khác nhau như: Windows, macOS, linux với nhiều cách khác nhau Trong bài viết này đây tác giả chỉ nêu ra hai cách cài đặt cơ bản nhất trên hệ điều hành Ubuntu, đó là cài đặt từ các gói phân phối độc lập và cài đặt từ quản lý gói tin của Ubuntu
2.1.1 Cài đặt phiên bản dành cho tất cả bản phân phối của linux
Đầu tiên, truy cập vào đường dẫn sau để vào trang download của Go Ethereum: https://geth.ethereum.org/downloads/
Trong danh sách Stable releases, chọn đến thẻ Linux, các phiên bản dành cho
hệ điều hành linux sẽ được liệt kê ra như hình bên dưới, trong đề tài này, tác giả
đã sử dụng phiên bản 1.8.17
Hệ thống blockchain
Miner 1
Account 1 Account 2
Miner 2
Account 1 Account 2
Miner 3
Account 1 Account 2
Trang 20Hình 2.2 – Trang web download các phiên bản geth
Sau khi tải về, giải nén và di chuyển thư mục vào đường dẫn mà ta muốn cài đặt, trong luận văn này, tác giả sẽ cài đặt vào đường dẫn /opt/geth
Sau đó, khai báo đường dẫn vừa được cài đặt vào biến môi trường PATH để shell có thể tìm đến đúng file thực thi chương trình khi ta gọi lệnh Thêm dòng khai báo sau vào file bashrc nếu dùng bash shell, zshrc nếu dùng z shell ở thư mục home của người dùng:
export PATH=$PATH:[đường dẫn nơi cài đặt]
Do tác giả cài đặt theo đường dẫn /opt/geth nên tác giả sẽ khai báo như sau:
export PATH=$PATH:/opt/geth
2.1.2 Cài đặt bằng package management (apt) của Ubuntu
Cách cài đặt này khá đơn giản, từ terminal của Ubuntu nhập lần lượt vào các lệnh sau:
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
2.1.3 Chạy thử geth
Sau khi cài đặt, tác giả tiến hành kiểm tra xem geth đã được cài đặt và không
bị lỗi gì Từ terminal, nhập lệnh sau để kiểm tra phiên bản của geth:
geth version
Trang 21Hình 2.3 – Kiểm tra phiên bản của phần mềm geth
Để chạy thử geth, chỉ cần nhập lệnh:
geth
Hình 2.4 – Terminal hiển thị khi chạy geth
2.2 Thiết lập genesis block
Mỗi hệ thống blockchain đều bắt đầu với một block khởi đầu, block này sẽ được
sử dụng để tạo nên hệ thống và định nghĩa các điều kiện để được tham gia vào mạng blockchain
Khi tạo một hệ thống private blockchain, ta nên sử dụng một thư mục cụ thể để lưu trữ dữ liệu, việc này nhằm tránh gây ảnh hưởng đến các thư mục được sử dụng để lưu trữ dữ liệu từ mạng public blockchain của Ethereum Tạo một thư mục để chứa private blockchain:
mkdir ~/PrivateChain
Trang 22Trong thư mục vừa tạo, ta sẽ tạo ra một file genesis.json với nội dung như sau:
{
"nonce": "0x0000000000000042",
"mixhash":
"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData":
"0x436861696e536b696c6c732047656e6573697320426c6f636b", "gasLimit": "0xffffffff",
2.3 Cài đặt và thiết lập cho miner
Trong bước này, tác giả sẽ tạo ra một miner đầu tiên Miner có nhiệm vụ giúp xác thực và sinh ra các block trong hệ thống Miner cũng được sử dụng để đào ra các đồng tiền ảo Ether, để trả phí thực hiện các giao dịch trên hệ thống
2.3.1 Khởi tạo miner từ genesis block
Đầu tiên, tạo một thư mục để chứa dữ liệu và tài khoản của miner bằng lệnh sau:
Trang 23Sau khi khởi tạo thì terminal sẽ xuất ra thông báo Khi kiểm tra thư mục miner1, ta sẽ thấy 2 thư mục mới được tạo ra gồm geth và keystore Thư mục geth chứa cơ sở dữ liệu về blockchain của mình, còn thư mục keystore chứa các tài khoản mà được tạo ra trên miner này
Hình 2.5 – Kết quả khi khởi tạo miner
2.3.2 Tạo tài khoản người dùng
Ta sẽ tạo 2 tài khoản cho miner1, tài khoản mặc định và tài khoản phụ Tài khoản mặc định sẽ nhận các đồng ethers được tạo ra trong blockchain, các ethers này sẽ dùng để thực hiện các giao dịch giữa các tài khoản hay các node
Từ terminal, nhập dòng lệnh sau để tạo một tài khoản mới:
geth datadir ~/PrivateChain/miner1 account new
Sau khi nhập mật khẩu, một tài khoản mới sẽ được tạo ra, đồng thời một địa chỉ của tài khoản vừa mới tạo sẽ xuất hiện, địa chỉ này dùng để xác định đích đến khi ta giao dịch giữa 2 miner
Trang 24Hình 2.6 – Kết quả khi tạo tài khoản cho miner
Ta sẽ tạo thêm một tài khoản nữa để làm tài khoản phụ
Kiểm tra các tài khoản đang có trong miner bằng lệnh sau:
geth datadir ~/PrivateChain/miner1 account list
Terminal sẽ xuất ra danh sách các tài khoản của miner1, các tài khoản này được chứa trong thư mục keystore của miner1
Hình 2.7 – Danh sách tài khoản của miner
2.3.3 Tạo file thực thi miner
Thay vì mỗi lần chạy miner ta phải nhập vào một dòng lệnh trên terminal với rất nhiều tham số, đường dẫn và giá trị như sau:
geth identity "miner1" networkid 8 datadir
"~/PrivateChain/miner1" mine targetgaslimit
'9000000000000' rpc rpcapi "db,eth,net,web3,personal" -rpcport "8545" unlock 0 password
-~/PrivateChain/miner1/password.sec
Tác giả sẽ tạo ra một file shell script để lưu lại dòng lệnh trên, khi cần chạy miner, ta chỉ cần thực thi file script là được Trong thư mục miner1, tạo file startminer.sh với nội dung sau:
#!/bin/bash
Trang 25geth identity "miner1" networkid 8 datadir
"~/PrivateChain/miner1" mine targetgaslimit
'9000000000000' rpc rpcapi "db,eth,net,web3,personal" -rpcport "8545" unlock 0 password
Để chạy miner, thực thi câu lệnh sau:
sh ~/PrivateChain/miner1/startminer.sh
Hình 2.8 – Terminal hiển thị khi chạy một miner
Terminal mà ta chạy miner chỉ hiển thị tiến trình và thông báo của miner, để điều khiển được miner, ta cần một terminal khác và nhập vào dòng lệnh:
geth attach ipc:./PrivateChain/miner1/geth.ipc
File geth.ipc là file chỉ phát sinh trong thư mục của miner khi miner chạy
Trang 26Hình 2.9 – Console để điều khiển miner
Để gửi 10 Ether từ tài khoản thứ nhất đến tài khoản thứ hai, dùng lệnh:
eth.sendTransaction({from: eth.accounts[0], to:
eth.accounts[1], value: web3.toWei(10, "ether")})
Console sẽ xuất ra giá trị hash của cuộc giao dịch
Trang 27Hình 2.10 – Thông tin trả về của một giao dịch trên miner
Vì trước khi thực hiện giao dịch, tác giả đã tạm cho ngừng việc đào nên ta có thể xem danh sách các cuộc giao dịch đang đợi được thực hiện bằng lệnh:
eth.pendingTransactions
Ta có thể thấy các giá trị như địa chỉ người gửi, người nhận, số ethers cần gửi…
Hình 2.11 – Danh sách các giao dịch đang chờ được thực hiện
Sau khi cho miner tiếp tục đào, ta sẽ thấy giao dịch được thực hiện và không còn giao dịch nào nữa đang ở trạng thái đợi Đồng thời, trong số dư trong tài khoản thứ hai đã có 10 Ether
Như vậy là miner đầu tiên của hệ thống đã được thiết lập và cài đặt thành công, trong các bước tiếp theo, tác giả sẽ tạo thêm miner và kết nối chúng lại với nhau
2.4 Kết nối và đồng bộ các miner với nhau
Sau khi thiết lập thành công miner1, tác giả sẽ tạo thêm một miner nữa để thử giao dịch giữa miner
Trang 28Quá trình tương tự như việc tạo miner1, miner2 cũng được khởi tạo từ file genesis.json, tuy nhiên việc tạo một file script để chạy miner2 sẽ có một số thông số được thay đổi Cụ thể là các thông số sau:
Identity: tên của miner2
Datadir: đường dẫn đến thư mục chứa dữ liệu của miner2
Rpcport: một giá trị khác với port number của miner1
Port: nếu không khai báo thì mặc đinh của port sẽ là 30303, port của các miner phải khác nhau
Password: đường dẫn đến file password.sec của miner2
Như vậy, file startminer.sh của miner2 sẽ như sau:
geth identity "miner2" networkid 8 datadir
"~/PrivateChain/miner2" mine targetgaslimit
'9000000000000' rpc rpcapi "db,eth,net,web3,personal" -rpcport "8546" port 30304 unlock 0 password
Hình 2.12 – Thông tin enode của một miner
Sau khi có thông tin enode của từng miner, ta sẽ tạo một file static-nodes.json, file này sẽ lưu thông tin của hai miner để hai miner có thể kết nối với nhau Ta sẽ copy thông tin enode của từng miner, thay thế đoạn [::] của enode thành địa chỉ ip của máy tính và
bỏ đi đoạn ?discport=0, từng thông tin của miner cách nhau bằng dấu phẩy và tất cả đều được đặt trong cặp dấu ngoặc vuông File static-nodes.json: