月別アーカイブ: 2018年2月

栃木Ethereum勉強会 実習課題 (1)

今回の目標

EthereumのDApp開発のための環境を構築し、TruffleのボイラープレートアプリケーションのひとつMetaCoinを動作させること。

エンジニアの人が集まっているようなので、まずコマンドライン(truffle console)で全て動かし、何をしているかコードレベルで確認します。今回の内容は、EthereumでDAppを作るための基本要素で、千本ノック的に体得するといいです。更の環境から7番まで、1時間かからないでいけるまで頑張りましょう(ニッコリ)

OSなどは各自の環境で違うと思いますが、ここではvagrant上のubuntu16.04でのコンソールの状態を転記しています。

実習

1. NodeJs をインストールしよう

ここに、apt-getなどパッケージマネージャーでのインストール方法が書いてあります。

https://nodejs.org/ja/download/package-manager/

ubuntuでのNode.js のインストール

確認

 2. Truffle をインストールしよう

確認

3. Ganache CLIをインストールしよう

Ganache CLIは、以前使っていたtestrpcがTruffle Suiteに取り込まれたものです。UI付きでトランザクションやアカウントの管理が出来るGanacheの、コマンドラインバージョンです。

Ganacheは見た目がとてもきれいで使いやすそうなんですが、今回は時間と環境の制約上CLIバージョンを使用します。

4. MetaCoinプロジェクトを作ろう

MetaCoinは、truffleのボイラープレート(テンプレのようなもの)として用意してありますので、unboxします。MetaCoin以外にもいろいろあります。http://truffleframework.com/boxes/

contracts/MetaCoin.sol というファイルがContract本体になります。下にコードを掲載します。もう皆さん見飽きていると思いますが、今回確実に動作させて次に参りましょう。

truffle.jsのコンフィグを書き加えます。

5. Ganeche CLIを起動しよう

6.  Contractをマイグレートしよう

7. truffle console でMetaCoinを動かそう

truffle consoleを起動します。

ganache-cliがアカウントを10個用意してくれています。そのうちの2つでMetaCoinをやり取りしてみます。

現在のETH残高を確認。

deployされたMetaCoinをインスタンス化。

ContractのgetBalanceメソッドを呼び出して、送金前のMetaCoin残高を確認。これは、Ethereumの“Call”になります。→ CallとTransactionの違い

contarctのsendCoinメソッドを呼び出してMetaCoinをアカウント1からアカウント2へ送金。これはEthereumの“Transaction”になります。→ CallとTransactionの違い

送金後のETH、MetaCoin残高を確認

truffle console を終了。

8. CallとTransactionの違い

Ethreumブロックチェーンに対してクライアントから送る指示には、CallとTransactionがあります。違いは次のようになります。

Call

  • Gasを使用しない
  • ネットワークの状態を変えない
  • すぐに処理される
  • 値を返す

Transaction

  • Gasを使用する
  • ネットワークの状態を変化させる
  • マイニングされるまで処理されない
  • Transaction IDを返す

演習

Metacoin.solのメソッド getBalanceInEth を truffle console から実行して、結果を確認してみよう。

CryptoKittiesをカワイクする方法は?

Ethereum界隈で一時期話題になった、CryptoKitties。日本人特にネコ好きの人は、カワイクないと思う人が多いんじゃないでしょうか。まあ、すぐに思いつくのがポケモンとかDQのモンスターですね。昔からあちらさんのゲーム内キャラは、カワイイことを追求してないですんで。

かわいいCryptoKitties 嫌いじゃないです。キモカワ?

暗号じゃないPig

CryptoKittiesでは、2匹を交配させることで子供が生まれます(というか生成されるというべきか)。子猫は両親の特徴を引き継いだ外見になるのですが、その際どんなアルゴリズムが使われているのでしょうか。

CryptoKittiesのContractは

https://etherscan.io/address/0x06012c8cf97BEaD5deAe237070F9587f8E7A266d#code

ここで見ることができます。

次世代のネコの外見を決定する「遺伝アルゴリズム」は、どこでしょうか?

ここで、GeneScience Contractとしてネコを交配するルールのインターフェースを定義しています。

そして、実際の実装Contractの呼び出しポイントがこちら。”geneScience”が、実装Contractですね。実装Contractのアドレスは、CEOだけが指定できるようになっています。

現状、こちらがそのアドレスのようです(昨年12月の情報によります)。

https://etherscan.io/address/0xf97e0A5b616dfFC913e72455Fde9eA8bBe946a2B

さて、ここからはバイトコードしか見られないんですよね。すると、外見を決定しているアルゴリズムを知るには、リバースエンジニアリングするしかない。辛い。無理。しかし、海外勢にはそれをやった猛者が何人もいます。

The CryptoKitties Genome Project

CryptoKitties GeneScience algorithm

CryptoKitties mixGenes Function

いやあ、凄いですね。暇・・・いや、旺盛な探究心に頭が下がります。

ここに深入りする気はないんですが、外見を現すパーツがいくつか設定してあるようですね(body, pattern type, eye color, eye type, primary color, pattern color, secondary color, fancy type, mouth)それを何がしかの計算にかけて外見を作っているようです。突然変異というのも仕掛けてあるようです。

はたしてKittiesをカワイクするContractは作れるか?

持論ですが、アルゴリズムで「カワイイ・面白い」は出来ないと考えています。AIだろうとDeep Learningだろうと。どう凝ったものを作っても、コピペのお化けのようなものに近い感覚です。

AIが絵を描いた・作曲したという話題が一時期盛り上がりました。

Google AIの描いた絵

かなりマシなのを持ってきましたが、それでもうーん・・・惜しいところまで来てるんですが・・・なんとなく、CryptoKittiesのキモさと通ずるものがあります。Kittiesが「キモカワ」なのは、最初にネコのような外見ありきだからなんじゃないかと。

印象 日の出

たとえば、印象派のような絵をAIは生成できるでしょうか?印象派の絵を食わせてそれっぽいのを出力するのではなく、印象派が出たときと同じ気持ちを人に抱かせる新ジャンルの絵が生成できるか、疑問なわけですよ。

そして不思議なのがAIによる作曲です。

アレアレ?なんかいいよね?だけどこれも種は簡単で、シャレた動画と肉声が付いているぶんいい曲に聴こえてます。絵も何か人間が付け加えればマシになるかも。

音楽理論を少しかじったことがありますが、アルゴリズムでなんとなくよさげな感じの曲ができるのは、わかるんですよ。ただ、意外性のある曲はできません。いくつかAI作曲の曲を聴きましたが、だいたいこうなるよねというものばかり。BGMや環境音楽の大量生産には、AIはとても向いていそうです。環境音楽といえば、昔からシンセが活躍していますし親和性が高いのかと。

ITは人間のカワイイ生成を補助できる

CryptoKittiesを単純にカワイクするアルゴリズムはないと思うのです。私は、ITや人工知能の役割を人間の主観や直感を(正しく)強化するものと考えています。

かなり好みのKitties

Kittiesが最初にネコの形ありきにしたことで、単なるキモでなくキモカワになる。そして、不完全ながらアルゴリズムで増殖し、あまつさえ売買までされている。これを推し進めたい。ネットに大量にいる美少女絵描きを集めて、ブロックチェーン上にKAWAII圏が林立している、そんな状況を妄想しています。まあ、ポケモンでも別にいいけど。