CHƯƠNG 2 : PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
2.2. HỆ THỐNG PHÁT TRIỂN ỨNG DỤNG PHI TẬP TRUNG
2.2.1. Công cụ Metamask
Hình 2.5. Metamask
Metamask là một ví tiền điện tử có thể được sử dụng trên các trình duyệt Chrome, Firefox và Brave. Nó cũng là một phần mở rộng của trình duyệt. Điều này có nghĩa là nó hoạt động giống như một cầu nối giữa các trình duyệt bình thường và chuỗi khối Ethereum.
Blockchain Ethereum là một mạng mà người dùng có thể xây dựng các ứng dụng riêng của họ (được gọi là dApps) và các cryptocurrencies. Ethereum cũng cho phép người dùng viết các hợp đồng thông minh. MetaMask chỉ có thể được sử dụng để lưu trữ khóa cho Ethereum cryptocurrencies.
Hình 2.6. Metamask and Testnet
Vì vậy, ví MetaMask có thể được sử dụng để lưu trữ các khóa cho mã thông báo Ether và ERC20 trên ba trình duyệt web khác nhau. Nó cũng cho phép người
SVTH: Hà Văn Thạnh 29
dùng duyệt chuỗi khối Ethereum từ trình duyệt chuẩn. MetaMask không yêu cầu đăng nhập và không lưu trữ khóa cá nhân của bạn trong bất kỳ máy chủ nào, thay vào đó chúng được lưu trữ trên Chrome và mật khẩu được bảo vệ.
2.2.1.1. Điểm mạnh
Mã nguồn mở: Điều này có nghĩa là tất cả mã MetaMask đều trực tuyến và miễn phí truy cập. Phần mềm nguồn mở có thể được cộng đồng xem xét và cập nhật, có nghĩa là nó có thể được cải tiến liên tục.
Các cài đặt HD: Cài đặt Hierarchical deterministic giúp người dùng sao lưu tài khoản của họ. Họ làm điều này bằng cách cho người dùng một danh sách các từ được gọi là seed phrases. Seed phrases có thể được sử dụng để reset lại thông tin tài khoản bị mất.
Hình 2.7. BIP39
Tích hợp mua bán coin: MetaMask liên kết trực tiếp với hai sàn giao dịch nơi người dùng có thể mua tiền điện tử.
Hỗ trợ khách hàng: MetaMask muốn thu hút càng nhiều người tham gia mạng Ethereum càng tốt. Nó có một video giới thiệu trên trang chủ của nó, và một trang hỗ trợ chi tiết.
SVTH: Hà Văn Thạnh 30
Giao diện đơn giản: Sau khi được thiết lập, MetaMask rất dễ sử dụng. Tất cả các tính năng của nó được đặt ra rõ ràng để gửi và nhận tiền tệ là dễ dàng, ngay cả đối với người mới bắt đầu!
Lưu trữ khóa cục bộ: Một số nhà cung cấp ví lưu trữ khóa trên máy chủ của riêng họ. Điều này là phổ biến trên các trao đổi cung cấp ví, như Coinbase. Khóa metaMask được lưu trữ trên trình duyệt của người dùng, không được lưu trữ trên bất kỳ máy chủ từ xa nào. Điều này cho phép người dùng kiểm soát tốt hơn các khóa công khai và riêng tư của họ.
Cộng đồng: MetaMask là một phần quan trọng trong cộng đồng Ethereum. Nó có hơn một triệu người dùng hoạt động và có hơn 40 nghìn người theo dõi trên Twitter.
2.2.1.2. Điểm yếu
Truy cập trình duyệt: MetaMask không có quyền truy cập vào bất kỳ thông tin nào của bạn nhưng trình duyệt thì có. Trình duyệt của bạn sẽ không có quyền truy cập vào các mã riêng tư của bạn nhưng có thể thu thập thông tin về thời gian và cách bạn sử dụng ứng dụng. Mozilla và Google không phổ biến trong cộng đồng mật mã. Nhiều người dùng mật mã sẽ cảm thấy khó chịu cho phép các công ty này thu thập thông tin về họ. Điều này có thể ngăn một số người dùng thử dùng ví MetaMask.
Trực tuyến: Ví trực tuyến có lợi thế và bất lợi. Một trong những nhược điểm chính là bảo mật. Bất kỳ thông tin nào được lưu trữ trực tuyến đều có nguy cơ cao hơn từ tin tặc so với thông tin được lưu trữ ngoại tuyến. MetaMask sẽ không đáp ứng đủ bảo mật.
SVTH: Hà Văn Thạnh 31
2.2.2. NodeJS
Hình 2.8 NodeJS
Node.js là một JavaScript runtime được build dựa trên Chrome’s V8 JavaScript engine. Node.js sử dụng mô hình event-driven, non-blocking I/O khiến nó trở nên nhẹ và hiệu quả.
V8 engine là một JavaScript engine mã nguồn mở chạy trên các trình duyệt Chrome, Opera và Vivaldi. Nó được thiết kế tập trung vào hiệu năng và chịu trách nhiệm cho việc dịch mã JavaScript sang mã máy để máy tính có thể hiểu và chạy được. Nhưng bạn cũng nên tránh nhầm lẫn rằng Node chạy trên trình duyệt. Cha đẻ của Node dựa trên V8 engine, cải tiến một số tính năng chẳng hạn file system API, thư viện HTTP và một số phương thức liên quan đến hệ điều hành. Điều đó có nghĩa là Node.js là một chương trình giúp ta có thể chạy code JavaScript trên máy tính, nói cách khác nó là một JavaScript runtime.
2.2.2.1. Điểm mạnh
JSON APIs: Bởi lẽ REST/JSON APIs gọn nhẹ là điều khiến NodeJS tỏa sáng. Với cơ chế event-driven, non-blocking I/O(Input/Output) và mô hình kết hợp với Javascript là sự lựa chọn tuyệt vời cho các dịch vụ Webs làm bằng JSON.
Ứng dụng trên 1 trang: Node.js có khả năng xử lý nhiều Request/s đồng thời thời gian phản hồi nhanh. Các ứng dụng không muốn nó tải lại trang,
SVTH: Hà Văn Thạnh 32
gồm rất nhiều request từ người dùng cần sự hoạt động nhanh để thể hiện sự chuyên nghiệp thì NodeJS sẽ là sự lựa chọn tối ưu.
Shelling tools unix: NodeJS sẽ tận dụng tối đa Unix để hoạt động. Tức là NodeJS có thể xử lý hàng nghìn Process và trả ra 1 luồng khiến cho hiệu xuất hoạt động đạt mức tối đa nhất và tuyệt vời nhất.
Streamming Data (Luồng dữ liệu): Các web thông thường gửi HTTP request và nhận phản hồi lại (Luồng dữ liệu). Giả xử sẽ cần xử lý 1 luồng giữ liệu cực lớn, NodeJS sẽ xây dựng các Proxy phân vùng các luồng dữ liệu để đảm bảo tối đa hoạt động cho các luồng dữ liệu khác
Ứng dụng Web thực: Phù hợp để xây dựng 1 ứng dụng chat, feed … Facebook, Twitter là điển hình cho Web thực.
2.2.2.2. Điểm yếu
Khi cần xử lý các ứng dụng tốn tài nguyên CPU như encoding video, convert file, decoding encryption… hoặc các ứng dụng tương tự như vậy thì không nên dùng NodeJS (Lý do: NodeJS được viết bằng C++ & Javascript, nên phải thông qua thêm 1 trình biên dịch của NodeJS sẽ lâu hơn 1 chút ). Trường hợp này, hãy viết 1 Addon C++ để tích hợp với NodeJS để tăng hiệu suất tối đa.
SVTH: Hà Văn Thạnh 33 Hình 2.9. NPM
NPM viết tắt của Node Package Manager là một công cụ (chương trình) quản lý các thư viện lập trình Javascript cho Node.js, công cụ này là thật sự cần thiết cho thế giới mã nguồn mở.
Trong cộng đồng Javascript, các lập trình viên chia sẻ hàng trăm nghìn các đoạn code giúp cho các dự án mới tránh phải viết lại các thành phần cơ bản, các thư viện lập trình hay thậm chí cả các framework. Mỗi đoạn code này có thể phụ thuộc vào rất nhiều các mã nguồn mở khác, thật may mắn khi các công cụ quản lý thư viện ra đời, nếu không sẽ mất rất nhiều công sức trong việc quản lý các thư viện này.
2.2.4. Web3.js
Hình 2.10. Web3JS
Web3.js là một bộ sưu tập các thư viện cho phép bạn tương tác với nút ethereum cục bộ hoặc từ xa, sử dụng kết nối HTTP hoặc IPC.
Thư viện web3.js là tập hợp các modules chứa chức năng cụ thể cho hệ sinh thái Ethereum:
web3-eth:cho các blockchain và hợp đồng thông minh Ethereum.
web3-shh: cho giao thức whisper để giao tiếp p2p và phát song.
web3-bzz: cho giao thức swarm, lưu trữ tệp phi tập trung.
SVTH: Hà Văn Thạnh 34
Có một vài khía cạnh khác nhau để phát triển các ứng dụng blockchain với Ethereum:
Phát triển hợp đồng thông minh: viết mã được triển khai tới blockchain với ngôn ngữ lập trình Solidity.
Phát triển trang web hoặc khách hàng tương tác với mã blockchain: viết để đọc và ghi dữ liệu từ blockchain với các hợp đồng thông minh.
Web3.js cho phép bạn hoàn thành trách nhiệm thứ hai: phát triển các máy khách tương tác với Etherchain Blockchain. Nó là một bộ sưu tập các thư viện cho phép bạn thực hiện các hành động như gửi Ether từ tài khoản này sang tài khoản khác, đọc và ghi dữ liệu từ các hợp đồng thông minh, tạo các hợp đồng thông minh và nhiều hơn thế nữa!
Nếu bạn có một nền phát triển web, bạn có thể đã sử dụng jQuery để thực hiện các cuộc gọi Ajax đến một máy chủ web. Đó là một điểm khởi đầu tốt cho sự hiểu biết về chức năng của Web3.js. Thay vì sử dụng jQuery để đọc và ghi dữ liệu từ một máy chủ web, bạn có thể sử dụng Web3.js để đọc và ghi vào Ethereum Blockchain.
Hình 2.11. Web3 Interface
Web3.js giao tiếp với Ethereum Blockchain thông qua JSON RPC, viết tắt của giao thức "Remote Procedure Call". Ethereum là một mạng ngang hàng các nút lưu trữ một bản sao của tất cả dữ liệu và mã trên blockchain. Web3.js cho phép chúng ta thực hiện các yêu cầu tới một nút Ethereum riêng lẻ với JSON RPC để đọc
SVTH: Hà Văn Thạnh 35
và ghi dữ liệu vào mạng. Nó giống như sử dụng jQuery với JSON API để đọc và ghi dữ liệu với máy chủ web.
2.2.5. Kiến trúc của một ứng dụng phi tập trung
SVTH: Hà Văn Thạnh 36
CHƯƠNG 3: TRIỂN KHAI HỆ THỐNG 3.1. SƠ LƯỢC VỀ ỨNG DỤNG
Các chức năng của ứng dụng:
Thêm, sửa, xóa user
Kiểm tra tên tài khoản và số dư
Tương tác với Metamask wallet
3.2. SƠ ĐỒ TRIỂN KHAI
3.3. TIẾN HÀNH TRIỂN KHAI
Đầu tiên ta sẽ triển khai một Blockchain cá nhân thông qua công cụ Ganache trên hệ điều hành Windows. Có thể tải Ganache tại đây:
https://truffleframework.com/ganache
Sau khi tải thành công, ta chạy file Image của Ganache như một ứng dụng. Đây là màn hình chính của Ganache khi thực hiện thành công.
SVTH: Hà Văn Thạnh 37 Hình 3.2. Ganache Home Page
Tiếp theo ta sử dụng Truffle Framework để đọc mã Solidity của chương trình và biên dịch ra bytecode và ABI bằng EVM được tích hợp sẵn. Ta sử dụng câu lệnh:
$ truffle compile
Hình 3.3. Truffle compile
Sau đó để deploy Dapp trên localhost sử dụng npm server, ta dùng câu lệnh:
SVTH: Hà Văn Thạnh 38 Hình 3.4. Run app
Đây là màn hình Dapp khi vừa được triển khai.
Hình 3.5. Home page
Tại Ganache ta thấy 4 block được thêm vào mạng do Truffle tạo ra. Trong đó có 2 block khởi tạo và 2 block chứa hợp đồng thông minh.
SVTH: Hà Văn Thạnh 39 Hình 3.6. Các contract được deploy lên blockchain on Ganache
Hình 3.7. Các block tạo ra để xác thực các transaction
Hình 3.8. Chi tiết các transaction
Tại thanh Taskbar ta chạy Metamask wallet extension và di chuyển đến tài khoản cá nhân.
SVTH: Hà Văn Thạnh 40 Hình 3.9. Metamask
Ở đây ta thấy được địa chỉ của tài khoản này, số dư và mạng hiện tại đang triển khai đến.
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN KẾT QUẢ ĐẠT ĐƯỢC
Trong thời gian tìm hiểu, nghiên cứu cơ sở lý thuyết và triển khai ứng dụng công nghệ, đồ án đã đạt được những kết quả sau:
Về mặt lý thuyết, sinh viên đã nắm được những phần cơ bản của công nghệ Blockchain, nắm được những thành phần cấu tạo của nó cũng như một trong những nền tảng thế hệ sau là Ethereum.
SVTH: Hà Văn Thạnh 41 Về mặt thực tiễn ứng dụng, sinh viên đã có thể tự triển khai một mạng Blockchain trên máy tính cá nhân, viết được smart contract sử dụng ngôn ngữ Solidity và xây dựng một ứng dụng phi tập trung dựa trên nền tảng đó.
Tuy nhiên, đồ án còn tồn tại các vấn đề như sau:
Hiểu biết của sinh viên về Blockchain, Ethereum cũng như những khái niệm liên quan còn nhiều thiếu sót, một số vấn đề nâng cao hơn, đi sâu vào hệ thống vẫn chưa nắm rõ tường tận.
Ứng dụng phi tập trung còn khá đơn giản, tập trung vào sự làm quen và tìm hiểu qua đó giúp sinh viên hiểu thêm về những kiến thức mới.
HƯỚNG PHÁT TRIỂN
Một số số hướng nghiên cứu và phát triển của đề tài như sau:
Ứng dụng nền tảng Ethereum trong các lĩnh vực khác như Bảo hiểm, Y tế, Giáo dục,…
Dần thay thế cơ sở dữ liệu truyền thống để xây dựng một mạng Internet hoàn toàn mới.
Ứng dụng tiền mã hóa vào đời sống và dần thay thế tiền tệ đang được lưu hành trên thị trường.
SVTH: Hà Văn Thạnh 42
TÀI LIỆU THAM KHẢO Tiếng Anh
Satoshi Nakamoto (2008), “Bitcoin: A Peer-to-Peer Electronic Cash
System”, Methods of using a peer-to-peer network to generate what was described
as "a system for electronic transactions without relying on trust".
Vitalik Buterin (2013), “Ethereum: The Ultimate Smart Contract and
Decentralized Application Platform”.
Internet https://bitcoin.org/bitcoin.pdf https://github.com/ethereum/wiki/wiki/White-Paper https://ethereum.github.io/yellowpaper/paper.pdf https://github.com/ethereum/solidity https://github.com/ethereum/mist https://github.com/MetaMask/metamask-extension https://github.com/ethereum/browser-solidity https://github.com/trufflesuite/truffle