Now and Nawoo

NFTの制作記録、技術メモ → C#, Solidity, Blockchain, Bitcoin, Ethereum, NFT

Rarity (NFT) をやってみた

LootというテキストNFTが流行っていて、類似のNFTが大量にリリースされています。 その中でRarityというのが評判が良いのでやってみました。

Loot & Rarity. What dom achieved with loot was truly… | by Andre Cronje | Sep, 2021 | Medium

FTMの準備

EthereumネットワークではなくFantomなので、FTMトークンを用意する必要があります。私はFTX.comで購入し、multichain.xyzでFantomへSwapしました。

FTXから出金する

FTX.comではFTM(Fantom)の出金には対応していないので、FTM(Ethereum ERC20)で出金します。

multichain.xyzでSwap

multichain.xyzFTM(Ethereum ERC20)→FTM(Fantom)にSwapします。 ApproveやTransferのためのガス代(ETH)が少し必要です。

最低スワップ量が50FTMなので注意しましょう。

キャラ生成 (summon)

いくつかUIサイトがありますが、せっかくなので、最初はコントラクトを直接使ってみます。

Contract Address 0xce761d788df608bd21bdd59d6f4b54b2e27f25bb | FtmScan

Write Contractの summon関数を呼び出します。 引数はクラスの番号です。

Barbarian [1]
Bard [2]
Cleric [3]
Druid [4]
Fighter [5]
Monk [6]
Paladin [7]
Ranger [8]
Rogue [9]
Sorcerer [10]
Wizard [11]

私はSorcerer(10)にしました。

トランザクションが承認されたら、FTMScanで確認します。 Erc721 Token Txns のところで、

TokenID: xxxxxxx, Token: Rarity Manifest (RM) 

というのが表示されているはずです。

このxxxxxxxが作成したキャラクタ(サモナー)のTokenIDです。

冒険する (adventure)

adventure関数を呼び出します。引数は先ほどのTokenIDを入れます。

  • adventureは1日1度しか呼び出せません。
  • adventureすると250XPが得られます。
  • 1000XP貯まるとLevel2にlevel_upできます。リアルで4日かかるということですね。
    • Level3は3000XP, Level4は6000XPみたいです。 (xp_required関数で確認できます)

パラメータを確認する

Read Contractの方で、キャラクタのパラメータなどを確認できます。

  • adventurers_log(tokenID) : Logを確認※
  • class(tokenID) : Classを確認
  • level(tokenID) : Level確認
  • summoner(tokenID) : XP,Log,Class,Levelをまとめて取得
  • tokenURI(tokenID) : トークン情報(name,description,imageが埋まってる)
  • xp(tokenID) : XP確認
  • xp_required(level) : レベルアップに必要なXPを確認

などです。

Log

adventurers_logとは何かと思ってソースコードのadventure 関数を見てみると、

function adventure(uint _summoner) external {
  require(_isApprovedOrOwner(msg.sender, _summoner));
  require(block.timestamp > adventurers_log[_summoner]); // (1)
  adventurers_log[_summoner] = block.timestamp + DAY; // (2)
  xp[_summoner] += xp_per_day;
}

(1)で現在時刻がadventurers_logより大きくないとadventure関数が実行されないようになっており、実行されると (2)でadventureした時刻+1日 が代入されています。

つまり、adventurers_logは、次回の冒険可能時刻(UnixTime)のようです。

XP

XPはdecimals=18なので、250000000000000000000と表示されていたら 250XPです。

tokenURIのimage

tokenURIで得られたSVG画像はこんなんでした。Lootと同じようにテキストのみですね。

f:id:nawoo5:20210913110827p:plain:w200

レベルアップする

4日間冒険を続けて1000XP貯まるとLevel2にレベルアップできます。 level_up関数を呼び出せばいいはずです。

私はまだ1日目なのでレベルアップできません(泣)

さらに

Attributesという属性値(STRやINTなど)にパラメータを割り振ったりもできます。 これらの拡張機能は別のコントラクトで提供されています。 (他にもダンジョンで戦闘したり、アイテムを作ったりもできるみたいです。)

さすがにめんどくさくなってきたので、UIサイト使いました。

Attributesの説明はこちら → Rarity Attributes - Medium

Sorcererはカリスマが重要とか、いろいろ設定があるみたい。 初回は32ptもらえて、各属性に割り振ります。 その後は3レベルごとに1ptもらえるらしい。(少ない・・・)

コントラクトで直接やりたい場合はこちら → 0xb5f5af1087a8da62a23b08c00c6ec9af21f397a1 | FtmScan

初回はpoint_buy関数を呼び出して全部の数値を設定し、レベルアップで溜まった分は increase_***関数を呼べばいいはず。(試してないけど)