Tất cả dữ liệu liên quan được lưu trữ trên một cơ sở dữ liệu tại máy chủ và các nhà phát triển Game có thể tùy ý thay đổi các thông số của trò trò chơi trực tuyến này.. Vì cơ sở dữ liệu
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
19521779 – Dương Hoàng Long
19521693 – Lê Nguyễn Minh Khoa
TPHCM, 06 - 2022
Trang 2Đánh giá
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 3LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn đến thầy Huỳnh Tuấn Anh, giảng viên khoa công nghệ
phần mềm đã tạo điều kiện và cơ hội giúp đỡ em trong quá trình phát triển và hoàn
thiện đồ án môn học nghiên cứu này Trong thời gian qua, nhờ sự hướng dẫn từ
thầy em đã có được những kiến thức quan trọng và nhất định để hoàn thiện báo cáo
một cách hoàn chỉnh nhất
Cũng xin cảm ơn thầy cô và bạn bè trong khoa Công nghệ phần mềm đã nhiệt tình
hỗ trợ, tạo điều kiện cho nhóm em làm bài báo cáo này Trong quá trình học tập,
cũng như là trong quá trình làm đồ án, nhóm em đã cố gắng hết sức mình, vì thời
gian và kiến thức có hạn nên nhóm em không thể tránh khỏi những thiếu sót
Nhóm em mong nhận được sự thông cảm, đóng góp và xây dựng từ cô để nhóm
em có thêm nhiều kiến thức có ích và ngày càng hoàn thiện hơn
Trang 4Mục lục
1 Tổng quan đề tài 6
1.3.1 Phạm vi môi trường:……… 7
1.3.2 Phạm vi chức năng:………… 7
2 Cơ sở lý thuyết 8
2.1.1 Tổng quan……… 8
2.1.2 Smart Contract……… 12
2.1.3 Token ERC-721 (Non-Fungible Token) 13
2.1.4 Token ERC-20……… 14
2.1.5 Hardhat……… 15
2.1.6 MetaMask……… 15
2.1.1 Giới thiệu về Reactjs………… 16
2.1.2 Giới thiệu về JSX……… 17
2.1.3 Giới thiệu về Components…… 17
2.2.1 Giới thiệu về Nodejs………… 17
2.2.2 Giới thiệu về Express……… 18
3 Thiết kế cơ sở dữ liệu 20
3.2.1 Bảng player: Thông tin người chơi 20
3.3.1 Bảng NFT: Thông tin NFT 21
4 Thiết kế giao diện 22
Trang 54.2.1 Màn hình đăng nhập……… 22
4.2.2 Màn hình Menu……… 23
4.2.3 Màn hình chơi game……… 24
4.2.4 Màn hình chức năng đang phát triển 27
4.2.5 Một số dialog hiển thị thông tin: 28
4.2.6 Màn hình hiển thị bộ thẻ bài… 29
5 Cài đặt và kiểm thử 30
6 Kết luận 31
Trang 61 Tổng quan đề tài
Đề tài:
Hiện nay, phần lớn các trò chơi trực tuyến (game online) đều hoạt động theo mô hình tập trung (một máy chủ và nhiều máy con) Tất cả dữ liệu liên quan được lưu trữ trên một cơ sở dữ liệu tại máy chủ và các nhà phát triển Game có thể tùy ý thay đổi các thông số của trò trò chơi trực tuyến này
Dữ liệu của Game thủ bao gồm thông tin tài khoản, lịch sử hoạt động và tài sản trong trò chơi được thu thập bởi người chơi (vật phẩm và tiền vàng)
Vì cơ sở dữ liệu được lưu trữ trên một máy chủ tập trung nên có nhiều hạn chế và
lỗ hổng:
• Sự cố máy chủ do bị quá tải đường truyền
• Hệ thống bị xâm nhập bởi tin tặc
• Trò chơi ngừng hoạt động khi bảo trì và nâng cấp
• Thiếu minh bạch
Các game được hoạt động với mô hình kinh doanh là chính
Nói cách khác, quyền lực điều hành luôn nằm trong tay các công ty game Nhưng công nghệ Blockchain có thể loại bỏ hoặc giảm thiểu được vấn đề này
Blockchain xuất hiện 10 năm nay và nở rộ trong vài năm gần đây khi được ứng dụng vào tiền mã hóa, tài sản kỹ thuật số không thể thay thế (NFT), GameFi (kết hợp giữa game và tài chính phi tập trung) Các “ông lớn” công nghệ của thế giới như Microsoft, Meta, Google, Tencent, Amazon, IBM… đang đầu tư mạnh cho lĩnh vực này
Tại Việt Nam, blockchain được biết đến nhờ trở thành “cái nôi” của game
blockchain, tài chính phi tập trung, với hàng loạt dự án như Axie Infinity, Kyber Network, Tomochain, Coin98…
Nắm bắt được xu thế hiện nay và trên cơ sở các kiến thức được học trong nhà trường, nhóm em đã quyết định chọn đề tài “Tìm hiểu Blockchain và xây dựng web game NFT cơ bản” để xây dựng thử một web game xử dụng công nghệ block chain Người dùng có thể dễ dàng truy cập trang web, chơi game và hoàn thành nhiệm vụ để nhận các token
Game được truyền cảm hứng từ trò chơi oẳn tù tì (kéo búa bao),thay vì cách chơi như truyền thống thì game cung cấp thêm các level cho các item kéo, búa, bao, từ
đó mở rộng lối chơi, và cách chơi của trò chơi
Luật chơi của game như sau:
• Vẫn sử dụng nguyên tắc kéo-búa-bao
• Nếu người chơi ra cùng 1 item (vd:búa) thì sẽ quyết định thắng thua bằng level của thẻ (level từ 1-5)
Trang 7• Một bộ bài (deck) cơ bản gồm 15 thẻ bài với 3 item, mỗi loại item sẽ có 5 level (1-5)
• Mỗi trận game sẽ tuân theo nguyên tắc (BO5- ai thắng 3 round trước sẽ là người thắng cả trận).Trong mỗi round người chơi sẽ luôn nhận được 3 loại item (kéo - búa - bao) nhưng sẽ có ngẫu nhiên level.Sau khi hết round 3 thẻ
đó sẽ bị bỏ và sẽ không bao giờ xuất hiện lại trong cả game.Vậy nên khi trường hợp xấu nhất là 5 trận hòa liên tục (tức bỏ 3x5=15 thẻ) thì kết quả chung cuộc của game đấu đó là hòa
- Có thể liên kết với ví MetaMask để tương tác tác blockchain
- Cho người dùng mint NFT trước khi vào chơi game, giúp người chơi thu thập được các NFT của game
- Cho người dùng thu thập các Tokens từ việc chơi game
- Có thể cho người dùng thấy được số dư Tokens từ ví của mình
Trang 8Sự đổi mới của blockchain là nó đảm bảo tính trung thực và bảo mật của dữ liệu và tạo
ra sự đáng tin cậy mà không cần bên thứ ba
Một điểm khác biệt giữa cơ sở dữ liệu truyền thống và blockchain là cách dữ liệu được cấu trúc Một blockchain thu thập thông tin với nhau theo nhóm, được gọi là blocks (các khối), nó sẽ chứa thông tin ở đó Blocks (các khối) có khả năng lưu trữ nhất định và khi được lấp đầy dữ liệu sẽ được đóng lại và liên kết với khối đã được lấp đầy trước đó, tạo thành một chuỗi dữ liệu được gọi là blockchain (chuỗi khối) Tất cả thông tin mới theo sau khối mới thêm đó được biên dịch thành một khối mới, sau đó cũng sẽ được thêm vào chuỗi sau khi được lấp đầy
Một cơ sở dữ liệu thường cấu trúc dữ liệu của nó thành các bảng, trong khi đó blockchain, giống như tên gọi của nó, blockchain cấu trúc dữ liệu của nó thành các khối (blocks) và được xâu chuỗi lại với nhau Cấu trúc dữ liệu theo cách này tạo ra một dòng thời gian không thể thay đổi của dữ liệu khi được thực hiện theo bản chất phi tập trung Khi một khối được lấp đầy, nó sẽ được đặt vào trong chuỗi và trở thành một phần của dòng thời gian này Mỗi khối trong chuỗi được cấp một dấu thời gian chính xác khi nó được thêm vào chuỗi
Trang 9Công nghệ Blockchain là sự kết hợp giữa 3 loại công nghệ:
- Mật mã học: để đảm bảo tính minh bạch, toàn vẹn và riêng tư thì công nghệ
Blockchain đã sử dụng public key và hàm hash function
- Mạng ngang hàng: Mỗi một nút trong mạng được xem như một client và cũng là
server để lưu trữ bản sao ứng dụng
- Lý thuyết trò chơi: Tất cả các nút tham gia vào hệ thống đều phải tuân thủ luật chơi
đồng thuận (giao thức PoW, PoS,…) và được thúc đẩy bởi động lực kinh tế
Hệ thống Blockchain chia thành 3 loại chính:
- Public: Bất kỳ ai cũng có quyền đọ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ó rất nhiều nút tham gia Vì vậy, muốn tấn công được vào hệ thống Blockchain này cần chi phí rất lớn và thực sự không khả thi Ví dụ: Bitcoin, Ethereum,…
- Private: Người dùng chỉ được quyền đọc dữ liệu, không có quyền ghi vì điều này
thuộc về bên tổ chức thứ ba tuyệt đối tin cậy 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 (hay còn gọi là Consortium): một dạng của Private nhưng bổ sung thêm
1 số tính năng khác, đây là sự kết hợp giữa Public và Private 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
Các phiên bản của công nghệ Blockchain
- Công nghệ Blockchain 1.0 – Tiền tệ và Thanh toán: Ứng dụng chính của phiên bản
này là tiền mã hoá: bao gồm việc chuyển đổi tiền tệ, kiều hối và tạo lập hệ thống thanh toán kỹ thuật số Đây cũng là lĩnh vực quen thuộc với chúng ta nhất mà đôi khi khá nhiều người lầm tưởng Bitcoin và Blockchain là một
- Công nghệ Blockchain 2.0 – Tài chính và Thị trường: Ứng dụng xử lý tài chính và
ngân hàng: mở rộng quy mô của Blockchain, đưa vào các ứng dụng tài chính và thị trường Các tài sản bao gồm cổ phiếu, chi phiếu, nợ, quyền sở hữu và bất kỳ điều gì có liên quan đến thỏa thuận hay hợp đồng
- Công nghệ Blockchain 3.0 – Thiết kế và Giám sát hoạt động: Đưa Blockchain vượt
khỏi biên giới tài chính, và đi vào các lĩnh vực như giáo dục, chính phủ, y tế và nghệ thuật
Các đặc điểm nổi bật của Blockchain
- Không thể làm giả, không thể phá hủy các chuỗi Blockchain: theo như lý thuyết thì
chỉ có máy tính lượng tử mới có thể giải mã Blockchain và công nghệ Blockchain biến mất khi không còn Internet trên toàn cầu
- Bất biến: dữ liệu trong Blockchain không thể sửa (có thể sửa nhưng sẽ để lại dấu vết)
và sẽ lưu trữ mãi mãi
- Bảo mật: Các thông tin, dữ liệu trong Blockchain được phân tán và an toàn tuyệt đối
- Minh bạch: Ai cũng có thể theo dõi dữ liệu Blockchain đi từ địa chỉ này tới địa chỉ khác và có thể thống kê toàn bộ lịch sử trên địa chỉ đó
- Hợp đồng thông minh: là hợp đồng kỹ thuật số được nhúng vào đoạn code
if-this-then-that (IFTTT), cho phép chúng tự thực thi mà không cần bên thứ ba
Trang 10Cách Blockchain hoạt động
Mục tiêu của blockchain là cho phép thông tin kỹ thuật số được ghi lại và phân phối, nhưng không được chỉnh sửa Bằng cách này, blockchain là nền tảng cho các sổ cái bất biến hoặc các bản ghi của các giao dịch không thể thay đổi, xóa hoặc phá hủy Đây là lý
do blockchain còn được gọi là công nghệ số phân tán (distributed ledger technology – DLT)
Lần đầu được đề xuất như một dự án nghiên cứu vào năm 1991, khái niệm blockchain
có trước ứng dụng rộng rãi đầu tiên của nó: Bitcoin, vào năm 2009 Trong những năm sau đó, việc sử dụng blockchain đã bùng nổ thông qua việc tạo nhiều loại tiền điện tử khác nhau, ứng dụng tài chính phi tập trung (decentralized finance DeFi), non-fungible tokens (NFTs) và hợp đồng thông minh (smart contracts)
v Quá trình giao dịch
1 Một giao dịch mới được thêm vào
2 Giao dịch sau đó được truyền tới một mạng lưới các máy tính ngang hàng nằm rải rác trên thế giới
3 Mạng máy tính này sau đó giải các bài toán để xác nhận tính hợp lệ của giao dịch
4 Ngay khi được xác nhận là giao dịch hợp lệ, chúng được nhóm lại với nhau thành các khối
5 Các khối này sau đó được xâu chuỗi lại với nhau tạo thành một lịch sử lâu dài cho tất cả các giao dịch và nó tồn tại vĩnh viễn
v Các thuộc tính của tiền điện tử
Trong khi blockchains chủ yếu được sử dụng để lưu trữ lịch sử giao dịch tiền điện tử, thì blockchains vẫn có thể lưu trữ những thứ khác như hợp đồng pháp lý hay sản phẩm tồn kho
1 Tiền điện tử có giá trị bên trong vì đây cách đáng tin cậy, an toàn và nhanh chóng để thực hiện các giao dịch với chi phí thấp hoặc miễn phí
2 Không có dạng vật chất vì nó chỉ tồn tại trên blockchain
3 Các thuộc tính của tiền điện tử, như là tổng cung của nó, được quyết định bởi phần lớn các thành viên trong mạng lưới phi tập trung của nó thay vì một ngân hàng
v Phân quyền
Tưởng tượng rằng một công ty sở hữu một nơi với 10.000 máy tính được sử dụng để duy trì cơ sở dữ liệu chứa tất cả thông tin tài khoản của khách hàng Công ty này sở hữu một tòa nhà kho chứa tất cả các máy tính ở cùng một nơi và có toàn quyền kiểm soát từng máy tính này và tất cả thông tin chứa trong chúng Tuy nhiên, điều này sẽ gây ra nguy cơ lỗi rất cao Điều gì xảy ra nếu điện tại địa điểm đó bị mất? Điều gì sẽ xảy ra nếu kết nối Internet của nó bị ngắt? Điều gì sẽ xảy ra nếu một người nào đó xóa mọi thứ chỉ với một lần nhấn phím? Trong mọi trường hợp, dữ liệu bị mất hoặc bị hỏng
Những gì một blockchain làm là cho phép dữ liệu được lưu giữ trong cơ sở dữ liệu đó được trải ra giữa một số nút mạng tại các vị trí khác nhau Điều này duy trì tính trung thực của dữ liệu được lưu trữ trong đó — nếu ai đó cố gắng thay đổi bản ghi tại một
Trang 11phiên bản của cơ sở dữ liệu, các nút khác sẽ không bị thay đổi và do đó sẽ ngăn chặn được việc thay đổi đó Nếu một người dùng giả mạo bản ghi giao dịch của Bitcoin, tất
cả các nút khác sẽ tham chiếu chéo lẫn nhau và dễ dàng xác định nút có thông tin không chính xác Hệ thống này giúp thiết lập một thứ tự chính xác và minh bạch của các sự kiện Bằng cách này, không một nút nào trong mạng có thể thay đổi thông tin được lưu giữ bên trong nó
Do đó, thông tin và lịch sử (chẳng hạn như các giao dịch của tiền điện tử) là không thể thay đổi được Bản ghi như vậy có thể là danh sách các giao dịch (chẳng hạn như với tiền điện tử), nhưng blockchain cũng có thể lưu giữ nhiều loại thông tin khác như hợp đồng pháp lý, danh tính tiểu bang hoặc kho sản phẩm của công ty
v Minh bạch
Do tính chất phi tập trung của blockchain, tất cả các giao dịch có thể được xem một cách minh bạch bằng cách có một nút cá nhân hoặc sử dụng các trình khám phá chuỗi khối cho phép bất kỳ ai cũng có thể xem các giao dịch đang diễn ra trực tiếp Mỗi nút có bản sao của chuỗi riêng của nó được cập nhật khi các khối mới được xác nhận và thêm vào Điều này có nghĩa là nếu bạn muốn, bạn có thể theo dõi thông tin của blockchain ở bất
Trang 122.1.2 Smart Contract
Một Smart Contract (hợp đồng thông minh) đơn giản là một chương trình chạy trên blockchain Nó là tập hợp mã (các chức năng của nó) và dữ liệu (trạng thái của nó) nằm tại một địa chỉ cụ thể trên blockchain
Smart Contract là một loại account trên blockchain Có nghĩa là nó có số dư và có thể gửi các giao dịch qua mạng Tuy nhiên, chúng không được kiểm soát bởi người dùng, thay vào đó chúng được triển khai vào mạng và chạy như được lập trình Các account của người dùng có thể tương tác với smart contract bằng cách gửi các giao dịch mà nó thực hiện một chức năng được xác định trên smart contract Smart contracts có thể định nghĩa các quy tắc giống như một hợp đồng bình thường và tự động thực thi chúng thông qua mã Theo mặc định smart contracts không thể bị xóa và các tương tác với chúng là không thể thay đổi
Trang 132.1.3 Token ERC-721 (Non-Fungible Token)
Non-Fungible Token là gì ?
Một Non-Fungible Token (NFT) được sử dụng để xác định một thứ gì đó hoặc một vật nào đó theo một cách riêng biệt Loại Token này hoàn hảo để sử dụng trên các nền tảng cung cấp các vật phẩm sưu tầm, chìa khoá truy cập, vé số, chỗ ngồi được đánh số cho các buổi hoà nhạc và trận đấu thể thao, Loại Token đặc biệt này có khả năng giải quyết các vấn đề đó
ERC-721 là gì ?
ERC-721 giới thiệu một tiêu chuẩn cho NFT trên Ethereum Blockchain, nói cách khác, loại Token này là duy nhất và có thể có giá trị khác với một Token khác từ cùng một Smart Contract (hợp đồng thông minh), nó có thể dựa vào tuổi tác, độ hiếm hoặc một thứ gì đó như là hình ảnh Tất cả NFTs đề có một biến uint256 được gọi là tokenId, vì vậy đối với bất kỳ ERC-721 Contract nào thì contract address và uint256 tokenId đều phải là duy nhất Theo đó, một dApp có thể có một “bộ chuyển đổi” sử dụng tokenId làm đầu vào và đầu ra là một hình ảnh gì đó thú vị như zombies, vũ khí,…
ERC-721, được đề xuất bởi William Entriken, Dieter Shirley, Jacob Evans, Nastassia Sachs vào tháng 1 2018, là một tiêu chuẩn của Non-Fungible Token, triển khai một API cho các tokens trong Smart Contracts Nó cung cấp các chức năng như chuyển tokens
từ account này sang account khác, lấy số dư token của một account, lấy được địa chỉ của chủ sở hữu của token cụ thể và cả tổng nguồn cung cấp tokens có sẵn trên mạng Bên cạnh những chức năng này, nó cũng có một số chức năng khác như chấp thuận một lượng token từ một account được chuyển bởi một account bên thứ ba Nếu một Smart Contract triển khai các phương pháp và sự kiện như trên, nó có thể được gọi là một ERC-721 Non-Fungible Token Contract và sau khi được triển khai, nó có trách nhiệm theo dõi các token đã tạo trên Ethereum blockchain
Trang 142.1.4 Token ERC-20
ERC-20 giới thiệu một tiêu chuẩn cho Fungible Tokens, nói cách khác, nó có một thuộc tính làm cho mỗi Token giống hệt nhau (về loại và giá trị) với token khác VD: Token ERC-20 hoạt động giống như ETH, có nghĩa là 1 Token đang và sẽ luôn bằng với tất cả các Token khác
ERC-20, được đề xuất bởi Fabian Vogelsteller vào tháng 11 2015, là một Token tiêu chuẩn triển khai API cho các token trong Smart Contracts
Các chức năng mẫu mà ERC-20 cung cấp:
v Chuyển các token từ account này qua account khác
v Lấy số dư token hiện tại của một account
v Lấy tổng nguồn cung của token có sẵn trên mạng
v Xét duyệt account bên thứ ba có thể sử dụng token từ một tài khoản hay
không
Nếu một Smart Contract triển khai các phương pháp và sự kiện như trên, nó có thể được gọi là một ERC-20 Non-Fungible Token Contract và sau khi được triển khai, nó có trách nhiệm theo dõi các token đã tạo trên Ethereum blockchain
Trang 152.1.5 Hardhat
Hardhat là một môi trường phát triển để compile, deploy, test, và debug Ethereum software Nó giúp developers quản lý và tự động hóa các tác vụ lặp lại vốn có trong quá trình xây dựng smart contract và dApps, cũng như giới thiệu thêm chức năng xung quanh quy trình làm việc này Điều này có nghĩa là nó giúp developers compiling, running và testing smart contracts ở cốt lỗi
Hardhat được tích hợp sẵn với mạng Hardhat, một mạng Ethereum cục bộ được thiết kế
để phát triển Chức năng của Hardhat tập trung vào gỡ lỗi Solidty, console.log() và thông báo lỗi khi giao dịch không thành công
2.1.6 MetaMask
MetaMask là gì ?
MetaMask là một ví tiền điện tử chp phép người dùng tương tác với blockchain một cách đơn giản Trong thực tế, chúng ta cần một chiếc ví để giữ ví tiền của mình, số tiền
Trang 16Tương tự, trên blockchain, chúng ta cần một chiếc ví như MetaMask để lưu trữ tiền điện
tử của mình, nó có thể được sử dụng trong nhiều ứng dụng phi tập trung như DeFi, NFT, GameFi,…
Ưu điểm của MetaMask
v Nổi tiếng: MetaMask là một trong những ví tiền điện tử nổi tiếng nhất tại
thời điểm hiện tại
v Dễ sử dụng: Người dùng có thể dễ dàng tương tác với blockchain bằng cách
sử dụng MetaMask vì nó có giao diện thân thiện với người dùng
v Tích hợp: MetaMask đã được tích hợp với hơn 4000 dApps Chúng ta có thể
dễ dàng sử dụng bất kỳ ứng dụng Crypto nào với MetaMask
Nhược điểm
v Bảo mật: MetaMask là một ví nóng, nghĩa là nó được kết nối với Internet
Do đó, nó dễ bị tấn công và bảo mật kém hơn so với ví lạnh
v Khả năng tương thích: Trên máy tính, MetaMask hoạt động như một tiên ích
mở rộng của trình duyệt thay vì một ứng dụng độc lập Điều này làm cho MetaMask trở nên lag và đôi khi ngừng hoạt động.ReactJS
ReactJS
2.1.1 Giới thiệu về Reactjs
React.js là một thư viện Javascript đang nổi lên trong những năm gần đây với xu hướng Single Page Application Trong khi những framework khác cố gắng hướng đến một mô hình MVC hoàn thiện thì React nổi bật với sự đơn giản và dễ dàng phối hợp với những thư viện Javascript khác Nếu như AngularJS là một
Framework cho phép nhúng code javasscript trong code html thông qua các
attribute như ng-model, ng-repeat thì với react là một library cho phép nhúng code html trong code javascript nhờ vào JSX, bạn có thể dễ dàng lồng các đoạn HTML vào trong JS.Tích hợp giữa javascript và HTML vào trong JSX làm cho các component dễ hiểu hơn