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.xyz で FTM(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と同じようにテキストのみですね。
レベルアップする
4日間冒険を続けて1000XP貯まるとLevel2にレベルアップできます。 level_up関数を呼び出せばいいはずです。
私はまだ1日目なのでレベルアップできません(泣)
さらに
Attributesという属性値(STRやINTなど)にパラメータを割り振ったりもできます。 これらの拡張機能は別のコントラクトで提供されています。 (他にもダンジョンで戦闘したり、アイテムを作ったりもできるみたいです。)
さすがにめんどくさくなってきたので、UIサイト使いました。
Attributesの説明はこちら → Rarity Attributes - Medium
Sorcererはカリスマが重要とか、いろいろ設定があるみたい。 初回は32ptもらえて、各属性に割り振ります。 その後は3レベルごとに1ptもらえるらしい。(少ない・・・)
コントラクトで直接やりたい場合はこちら → 0xb5f5af1087a8da62a23b08c00c6ec9af21f397a1 | FtmScan
初回はpoint_buy関数を呼び出して全部の数値を設定し、レベルアップで溜まった分は increase_***関数を呼べばいいはず。(試してないけど)