4.4.2. Danh sách các lớp đối tượng:
STT Tên lớp Loại Chú thích
1 Ownable Concrete class Chứa thông tin về chủ sở hữu (nhà phân phối) của trò chơi và phương thức thay đổi địa chỉ của chủ sở hữu đó.
2 Puppy Instance class Định nghĩa các thuộc tính của một con vật trong trò chơi (bao gồm mã gen, thời gian sinh, thời gian bắt đầu cooldown trước khi có thể giao phối, ID của bố mẹ, ID của con vật được giao phối cùng, chỉ số cooldown và chỉ số thế hệ).
3 Cooldown Instance class Định nghĩa các mốc thời gian cooldown trước khi có thể giao phối của Puppies.
4 PuppyBase Concrete class Chứa cơ sở dữ liệu những con vật có trong trị chơi, địa chỉ (address) của chủ sở hữu (owner) của trò chơi và một số phương thức để tạo, chuyển nhượng Puppies.
5 ERC721 Interface Định nghĩa các phương thức cần thiết để tổ chức, chuyển nhượng, thể hiện quyền sở hữu NFTs theo tiêu chuẩn ERC721.
6 PuppyOwnership Concrete class Chứa các phương thức tra cứu chủ sở hữu của Puppies, những Puppies mà một người sở hữu, chuyển nhượng cũng như các
phương thức khác liên quan.
7 GeneScience Instance class Chứa thuật toán phối giống (với mã gen của bố và mẹ) để truy xuất trong PuppyBreeding.
8 PuppyBreeding Concrete class Chứa các phương thức để khởi tạo việc mang thai và sinh sản của Puppy trong trò chơi.
9 PuppyMinting Concrete class Bao gồm các phương thức khởi tạo Puppies nhằm quảng bá trò chơi (hoặc tặng cho người chơi khi cần thiết).
10 PuppyCore Concrete class Gồm những phương thức phục vụ việc truy cập, lấy thông tin về Puppies.
Bảng 14. Bảng danh sách các đối tượng
4.4.3. Mô tả chi tiết các lớp đối tượng: 4.4.3.1. Ownable: 4.4.3.1. Ownable:
STT Tên thuộc tính (phương thức)
Loại Ràng buộc Ý nghĩa
1 owner addres s
Địa chỉ tồn tại trên
blockchain
Địa chỉ của chủ sở hữu (nhà phát hành trò chơi) ở trên blockchain.
() chơi sang địa chỉ mới, chỉ chủ sở hữu của trị chơi mới có quyền sử dụng phương thức này.
Bảng 15. Bảng mô tả chi tiết lớp Ownable
4.4.3.2. Puppy: STT Tên thuộc
tính (phương
thức)
Loại Ràng buộc Ý nghĩa
1 genes uint25 6
Dãy số thể hiện mã gen của Puppy
2 birthTime uint64 Thời gian Puppy được sinh ra (được tính theo timestamp)
3 cooldownStart uint64 Thời gian bắt đầu cooldown. Thông thường, đây là thời gian gần nhất mà Puppy được sinh ra.
4 matronId uint32 ID hợp lệ của Puppy hoặc 0 (nếu Puppy là gen 0)
ID của Puppy cha
5 sireId uint32 ID hợp lệ của Puppy hoặc 0
(nếu Puppy là gen 0)
6 siringWithId uint32 ID hợp lệ của Puppy hoặc 0
ID của Puppy đang mang thai (nếu có) với Puppy hiện tại. Nếu không trong trạng thái mang thai, siringWithId có giá trị là 0.
7 cooldownInde x
uint16 Lớn hơn hoặc bằng 0
Chỉ số thể hiện tổng thời gian cooldown (cho đến lượt mang thai tiếp theo) của Puppy.
8 generation uint16 Lớn hơn hoặc bằng 0
Chỉ số thể hiện thế hệ của Puppy với giá trị nhỏ nhất là 0.
Bảng 16. Bảng mô tả chi tiết lớp Puppy
4.4.3.3. Cooldown: STT Tên thuộc tính (phương thức) Loại Ràng buộc Ý nghĩa 1 cooldownTime uint32[ ]
Mảng các giá trị thời gian (timestamps) quy định thời gian cooldown mà Puppies có thể trải qua trước khi có khả năng tiếp tục giao phối và sinh sản.
2 getCooldownTime ()
uint32 Lấy thông tin cooldown theo một chỉ số (index) xác định.
4.4.3.4. PuppyBase: STT Tên thuộc
tính (phương thức)
Loại Ràng buộc Ý nghĩa
1 ownerAddress address Địa chỉ tồn tại trên blockchain
Địa chỉ của chủ sở hữu (owner) hay nhà phát hành của trò chơi.
2 puppies Puppy[ ]
Mảng các Puppies. Nói cách khác, đây là cơ sở dữ liệu chứa tất cả Puppies hiện có trong trị chơi với chỉ số (index) là ID của Puppy.
3 transfer() void Chuyển nhượng Puppy cho một địa chỉ xác định nào đó trên blockchain.
4 createPuppy() uint256 Tạo một Puppy mới với những thuộc tính xác định (trong tham số của hàm này).
Bảng 18. Bảng mô tả chi tiết lớp PuppyBase
4.4.3.5. ERC721: STT Tên thuộc tính
(phương thức)
Loại Ràng buộc Ý nghĩa
1 balanceOf() uint256 Đếm số lượng tất cả các NFTs mà một địa chỉ sở hữu.
2 ownerOf() address Tìm chủ sở hữu của một NFT bất kỳ.
3 safeTransferFrom( )
void Chuyển nhượng NFT từ một địa chỉ đến một địa chỉ khác với những ràng buộc để đảm bảo giao dịch được diễn ra an toàn và hợp lệ.
4 transferFrom() void Chuyển nhượng NFT từ một địa chỉ đến một địa chỉ khác.
5 approve() void Thay đổi hoặc tái xác nhận địa chỉ (approved address) của một NFT.
6 setApprovalForAll ()
void Bật hoặc tắt xác nhận đối với NFT từ bên thứ ba.
7 getApproved() address Lấy địa chỉ (đã được xác nhận) của một NFT.
8 isApprovedForAll( )
bool Kiểm tra xem liệu một địa chỉ có được uỷ quyền bởi một địa chỉ khác hay không.
Bảng 19. Bảng mô tả chi tiết lớp ERC721
4.4.3.6. PuppyOwnership: STT Tên thuộc tính (phương thức) Loại Ràng buộc Ý nghĩa
1 owns() bool Kiểm tra liệu một NFT có thuộc quyền sở hữu của một địa chỉ hay không.
2 ownerOf() uint256 Tái định nghĩa các hàm trong interface ERC721 ở trên. 3 safeTransferFrom() address 4 transferFrom() void 5 approve() void 6 setApprovalForAll() void 7 getApproved() void 8 isApprovedForAll() address
9 totalSupply() uint Trả về giá trị là số Puppies mà một địa chỉ đang sở hữu.
10 ownerOf() address Trả về địa chỉ của chủ sở hữu một NFT (được đưa vào trong tham số).
11 tokensOfOwner() uint256[] Lấy tất cả Puppies mà một địa chỉ đang sở hữu.
Bảng 20. Bảng mô tả chi tiết lớp PuppyOwnership
4.4.3.7. GeneScience: STT Tên thuộc tính
(phương thức)
1 mixGenes() uint256 Giao phối giống. Trả về mã gen của Puppy con khi đưa vào mã gen của bố mẹ.
Bảng 21. Bảng mô tả chi tiết lớp GeneScience
4.4.3.8. PuppyBreeding: STT Tên thuộc tính
(phương thức)
Loại Ràng buộc Ý nghĩa
1 pregnantCount uint256 Số lượng Puppy đang mang thai trên toàn hệ thống
2 geneScience GeneScienc e
Contract GeneScience hiện đang được sử dụng để phối giống.
3 breedWith() void Thực hiện việc giao phối với một Puppy khác.
4 giveBirth() uint256 Sinh ra Puppy khác. Hàm này gọi event Birth để thêm Puppy vào cơ sở dữ liệu được định nghĩa ở trên.
4.4.3.9. PuppyMinting: STT Tên thuộc tính
(phương thức)
Loại Ràng buộc Ý nghĩa
1 promoCreatedCount uint256 Số lượng Puppies được phát hành miễn phí (dưới dạng quà tặng) cho người chơi trên toàn hệ thống.
2 createPromoPuppy() void Tạo một Puppy mới để tặng cho một địa chỉ cụ thể.
Bảng 23. Bảng mô tả chi tiết lớp PuppyMinting
4.4.3.10. PuppyCore: STT Tên thuộc
tính (phương
thức)
Loại Ràng buộc Ý nghĩa
1 PuppyCore() Constructo r
Khởi tạo một contract PuppyCore mới (để cập nhật lên phiên bản mới trong trường hợp phiên bản cũ gặp vấn đề).
2 getPuppy() Puppy Lấy tồn bộ thơng tin của một Puppy với ID xác định.
CHƯƠNG 5. THIẾT KẾ GIAO DIỆN
5.1. UI Flow: