# LFW: Blockchain <> Game ## Flow Game mint 1 NFT từ nhân vật / item trong game ### Diagram ![](https://i.imgur.com/itSxPrm.png) ### Context: - Data (chỉ số nhân vật, metadata, ...) sẽ được lưu toàn bộ ở game server - Blockchain Server sẽ chỉ lưu 2 thông tin: - tokenId: Id của NFT được tạo bởi smart contract - MetadataURL: link tới API để get được metadata từ game server - Khi chỉ số (metadata) thay đổi, game server **không cần** thông báo cho blockchain server - Game server lưu thông tin tokenId tương ứng vào database, blockchain server sẽ dùng tokenId để query metadata đang được lưu ở game server ### APIs: 1. API để game mint ra 1 NFT POST: {blockchain-server-url}/nft body: ``` { "category": "string" "ingame_id": // id của item trong db bên game } ``` 2. API để blockchain server update tokenId vào ingame_id PUT: {game-server-url}/item/add-tokenId body: ``` { "ingame_id": // id ingame của item này "token_id": // token id của nft này } ``` Note: Do phần khi mint sẽ phải tương tác với blockchain, nên sẽ phải làm async (quản lý state: item đang được minting, đã mint (khi blockchain gọi api (2) qua cho game)) ## Flow Frontend retrieve data để render lên UI ### Diagram ![](https://i.imgur.com/Bd7NBjS.png) ### APIs: 1. API để blockchain server query metadata của các nft GET: {game-server-url}/items?token_id[]=1,token_id[]=2,token_id[]=3,... response: ``` [ { "token_id": 1, "metadata": {...} }, { "token_id": 2, "metadata": {...} }, { "token_id": 3, "metadata": {...} }, ] ``` ## Flow login/reset-password/signup Phần này thì server blockchain sẽ đóng vai trò proxy để forward request sang cho bên Game server sử lý, nên a cứ đưa specs tụi em sẽ implement theo đó ví dụ 1 flow login: ![](https://i.imgur.com/os3ZXS0.png) --- // TODO: // - connect wallet // - track token <> KNB // - import NFT vao game