HỆ THỐNG PHÁT TRIỂN ỨNG DỤNG PHI TẬP TRUNG

Một phần của tài liệu 102170194_HaVanThanh_DA_ATTT_2 (Trang 29)

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

Một phần của tài liệu 102170194_HaVanThanh_DA_ATTT_2 (Trang 29)

Tải bản đầy đủ (PDF)

(43 trang)