Lean Engineer

リーンエンジニア〜効率的に実験しながら、技術を学ぶブログ

CryptoKittiesのスマートコントラクトを動かしながら、見てみる

f:id:kasajei:20180104235249j:plain

 CryptoKittiesの遊び方を書いたが、実際にどのようなスマートコントラクトがイーサリアムのブロックチェーン上で動いているのか見ていきたい。ここが面白いところだ。

 まず、実際に動いているスマートコントラクトが、こちら。また、その解説がこちら。CryptoKittiesはゲームなのだが、スマートコントラクトとして、ソースコードが公開されているのが、面白い。Javascriptなので、頑張れば読めなくはない。

自分のウォレットをetherscanで見てみる

 まず、イーサリアムのブロックチェーンを見るために、Etherscanを見てみよう。自分のウォレットアドレス(0x97e7320814444f5f5274d78b1ba1e2df5ec8680f)をMetamaskで確認して、https://etherscan.io/address/<ウォレットアドレス>(例えば、僕のアカントだと https://etherscan.io/address/0x97e7320814444f5f5274d78b1ba1e2df5ec8680f)にアクセスしてみよう。自分の手持ちのETHや、送金履歴などを見ることができる。

CryptoKittiesのActivity

 CryptoKittiesでのブロックチェーン履歴を見てみよう。右上のメニューの電気っぽいアイコンをクリックすると見ることができる。

 各々がトランザクションになっていて、クリックするとetherscanに飛ぶはずだ。

購入のトランザクションを見てみる

 猫の購入のトランザクションを見てみよう(こちら)。コントラクトのアドレスに対して、支払いを行なっている。ここでは、CryptoKittiesSalesAuctionというスマートコントラクトが利用されて、その中のbidという関数が呼ばれている。

 約0.028ETHで猫を購入しており、0.003 $分のGAS料金をイーサリアムネットワークに支払っていることがわかる。

Breedのトランザクションを見てみる

 つぎは、飼い猫をBreedしたときのトランザクションを見てみよう(こちら)。出店手数料は無料なので0ETHの支払いをしているが、スマートコントラクトの実行のためGASを0.006ETH支払っている(けっこう高い!)。

 まずスマートコントラクトはCryptoKittiesCoreというコントラクトのようだ。Input Dataを見れば、そのスマートコントラクトのどのような関数が呼ばれているのかがわかる。

Function: createSiringAuction(uint256 _kittyId, uint256 _startingPrice, uint256 _endingPrice, uint256 _duration)

遊び方にも書いたように、初値と終値と期間が設定されているのがわかる。

Siringのトランザクションを見てみる

 つぎは、Siringして子供を産んだときのトランザクションを見てみよう(こちら)。出店されている種親の持ち主に対して、約0.0198ETH支払っている。GASは約0.0058ETHだ。

 CryptoKittiesCoreというスマートコントラクトで、bidOnSiringAuctionが使われている。

Function: bidOnSiringAuction(uint256 _sireId, uint256 _matronId)

スマートコントラクトゲームおもしろい

 スマートコントラクトで動くゲームは、このようにトランザクションで動きを追うことができることが面白い。なんとなく、スマートコントラクトってこんな感じか!というのがわかっただろうか。スマートコントラクトで何ができるのかわからないなぁという人は、こういうゲームで遊んでみると理解が深まるんじゃないだろうか。