【CryptZombies】レッスン5チャプター1:イーサリアム上トークン
トークン
イーサリアム上のトークン は、基本的にいくつかの共通ルールに従ったスマート・コントラクトのことです。
具体的に言うと、transfer(address _to, uint256 _value) や balanceOf(address _owner) といった関数のスタンダードセットを実装しているものです。
通常スマートコントラクトは、内部に各アドレスにどれだけの残高があるかを記録する mapping(address => uint256) balancesを持っています。
つまり基本的には、トークンとは、誰がトークンをどれくらいを所有しているのかを記録するコントラクトと、ユーザーが自分のトークンを他のアドレスに送ることができるようにする機能のことです。
なぜトークンが重要なのか?
ERC20トークンは同じ名前の同じ関数セットを共用しているので、同じ方法で相互に作用することが可能となっています。
つまり、とあるERC20トークンとやりとりするアプリケーションを作った場合、他のERC20トークンとやりとりすることも可能なのです。こうすることでカスタムコーディングをせずとも、将来もっと多くのトークンをアプリに追加することができます。ただ新しいトークンのコントラクト・アドレスを入力するだけで、もうアプリは別のトークンを使えるようになるのです。
この一例として挙げられるのは取引所です。取引所が新たなERC20トークンを追加するのに必要なのは、トークンとやり取りするためのスマート・コントラクトをただ追加することです。ユーザーはトークンを取引所のウォレットアドレスに送るようコントラクトに指示でき、取引所はユーザーが引き出しを要求した場合にトークンを彼らに送り返すようコントラクトに指示することができます。
取引所はこのトランスファー・ロジックを一度実装すれば、新たにERC20トークンを追加したい場合に、新しいコントラクト・アドレスをデータベースに追加するだけで良いということです。
別のトークン規格
ERC20トークンは、通貨のような働きをする非常に素晴らしいトークンです。 ただし、この企画でゾンビ・ゲーム内のゾンビを表すのは非常に不便です。
理由としてまず、ゾンビは通貨のように分けることができないことが挙げられます。例えば0.237ETHを送ることはできても、0.237のゾンビを送ることはできません。
次に、全てのゾンビが同じように出来ていないということもその理由です。
例えば、レベル2のゾンビ"Steve"は、相手のレベル732のゾンビ"H4XF13LD MORRIS 💯💯😎💯💯"とは全く別物です。
CryptoZombiesのようなクリプト収集物により適したトークン規格として、ERC721トークンがあります。
ERC721トークン は、それぞれがユニークであると仮定され、分割出来ないので 相互に交換可能できません 。一つの単位ごとの取引のみ可能で、それぞれが特有のIdを持っています。なので、ゾンビをトレード可能にするのに完璧に適したものなのです。
注: ERC721のような標準を使用するメリットとして、オークション及びプレイヤーがゾンビをトレード/販売するやり方を決定するエスクロー・ロジックをコントラクト内で実装する必要がなくなるという点があります。仕様に準拠すれば、他の誰かが収集可能なERC721クリプト資産の交換プラットフォームを作ることができ、私たちのERC721ゾンビはそのプラットフォームで使用できるようになります。そのため、独自の取引ロジックを展開する代わりにトークン規格を使用するのは明らかにメリットがあります。
テストの実行
次のチャプターでERC721の実装をやっていくが、まずはこのレッスン向けにファイル構成をセットアップしていくぞ。
ZombieOwnershipというコントラクトに全てのERC721メソッドを格納していこう。
①pragmaのバージョンをファイルの冒頭で宣言せよ。(シンタックスは前のレッスンでやったファイルをチェックすること)
pragma solidity ^0.4.19;
②このファイルにzombieattack.solをimportすること。
同じディレクトリ(./)にあるzombieattack.solをインポートします。
import "./zombieattack.sol";
③ZombieOwnershipという新たなコントラクトを宣言し、ZombieAttackを継承させよ。まだコントラクトの中身は空のままでよい。
contract ZombieOwnership is ZombieAttack { }
お疲れさまでした!
<参考>
CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network