STEPN の靴 NFT をブロックチェーンから探索したいメモ(B 靴編)

## 背景

in app のマーケットプレイスでブラウズしてパラメータとか調べるのめんどい...
靴とかの価格分布とか調べたい..
(=> B 靴については in app マーケットプレイスだけで, OpenSea みたいな公開マーケットプレイスが無いので価格調べるのは無理だった)

Solana は EVM でなくて, なんかいろいろややこしいんでとりあえずスキップ...

靴とかは NFT なので, 少なくともブロックチェーンのどこかには情報があるはず...


## 靴 NFT とかの情報

white paper にコントラクトのアドレス無いんで探すのめんどいですね...

とりあえず audit のレポートあったのでここからたどってみます.

https://hackmd.io/@verilog/stepn-audit#STEPNNFT-nft-contract

見る限りフツーの NFT(ERC721)のようです.

また, Binance のマーケットプレイスから靴たどってみます.
(ここではでも ASICS コラボの NFT しかリスティングされていません)

https://www.binance.com/ja/nft/goods/detail?productId=63687756&isProduct=1

https://bscscan.com/token/0x69d60ad11feb699fe5feeeb16ac691df090bfd50?a=90539281483#readContract

で tokenURI に tokenId 176567535819 いれてみます.
(靴番号と tokenId が違うのは, gem とかそのあたりでオフセット入れているからかしらん?)

![stepn-token-uri.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/4729da21-7815-ca22-8bc2-5d1f75eabe01.png)


Voila! URL 取得できました.
 
https://api.stepn.com/run/nftjson/104/176567535819

```json
{
    "name": "Sneaker #130756197",
    "description": "NFT Sneaker, use it in STEPN to move2earn",
    "image": "https://arweave.net/rZjSVHf2YTOc1kevx6WcVEbU7QYbln4Vf2MyM0rCSC4",
    "external_url": "https://stepn.com",
    "attributes": [
      {
        "trait_type": "Sneaker type",
        "value": "Runner"
      },
      {
        "trait_type": "Sneaker quality",
        "value": "Common"
      },
      {
        "trait_type": "Level",
        "value": "0"
      },
      {
        "trait_type": "Optimal Speed",
        "value": "8.0-20.0km/h"
      },
      {
        "trait_type": "Shoe-minting Count",
        "value": "0/7"
      },
      {
        "trait_type": "Efficiency",
        "value": "2.8"
      },
      {
        "trait_type": "Luck",
        "value": "2.8"
      },
      {
        "trait_type": "Comfortability",
        "value": "7.8"
      },
      {
        "trait_type": "Resilience",
        "value": "8.7"
      },
      {
        "trait_type": "Durability",
        "value": "100/100"
      },
      {
        "trait_type": "Socket 1",
        "value": "Luck/unknown/empty"
      },
      {
        "trait_type": "Socket 2",
        "value": "Luck/unknown/empty"
      },
      {
        "trait_type": "Socket 3",
        "value": "Luck/unknown/empty"
      },
      {
        "trait_type": "Socket 4",
        "value": "Durability/unknown/empty"
      },
      {
        "trait_type": "Badge",
        "value": "None"
      }]
  }

```

Voala!

![stepn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/6753667a-cd92-6170-3253-09ce3207e725.png)

画像は arweave に保存されており, alpha なしの RGB でした.

これ stepn.com 落ちたらどうなっちゃんじゃろかね... :cold_sweat: 

bscscan をたどって, ほかのも見てみます.

https://api.stepn.com/run/nftjson/104/32081420989

こちらは画像も stepn.com にホストされていました.

Efficiency などのパラメータ値は総計でした. Base 値などの情報は stepn 内部のデータベースにあり, levelup などでステート変わったら JSON 更新しているようですね
(したがって外から追跡する場合は定期的に JSON ファイルを取得して差分を見るしかなさそう)

Sneaker ID は一度 tokenId から JSON 探索しないとだめそうですので,
mint の履歴あたり取得してスクリプトで回して一括取得でしょうか.

## おまけ

OpenSea では S 靴になりますがいろいろブラウズできます.
https://opensea.io/collection/stepn

ただ, in app マーケットプレイスでリスティングされている靴すべては反映されていないようです(もしくは同期に時間がかかっている?)

## TODO

* [ ] 自前で BSC node 建てるか, Molaris API あたりで一括処理する 
* [ ] Solana チェーンでの処理をやる(これも Molaris API でいける...はず?)