---
# System prepended metadata

title: 'LFW: Blockchain <> Game'

---

# 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