Bitcoinが混乱していく中で、Ethereumの利点がハッキリしていく

ビットコインが分裂するとかしないとかで、最初にやりだしたのは誰なのかしらという感じになってますが、ここへ来てナードの産物が必ず通る道に差し掛かってるようです。

Nerd vs. Geek

仕事を手伝っているEdgarさんが、3月にこんなことを書いてます。

Why Ethereum is great for payments

内容は、「支払いにおいてEthereumがBitcoinより優れた手段である」という主張です。理由として、以下を挙げています。

UTXOの直感的な分かりにくさ

Bitcoinの場合、ユーザーが手数料の金額を見て「あれ?」と感じる場面があるということですね。

斎藤から吉田に100bitcoin送りたいとき、Walletは斎藤が持っているbitcoin(正確には未使用のトランザクション・UTXO)をかき集めて100bitcoin以上にしてから、吉田に送ります。集めた100bitcoinを超えた金額は、自分自身に向けたトランザクションになります。

例えば、

UTXO (10+30+30+50) = 120

斎藤 → (100) 吉田

斎藤 → (20) 斎藤

このチマチマしたトランザクションを発生させる仕様のため、トランザクションの構成によっては(テッキーでない)ユーザーの直感と実際の手数料の金額が乖離する場合があるということです。送金額と手数料が、リニアの関係からかけ離れるんですね。

Ethereumのトランザクションは、誰が誰にX ETH送るという直感的な情報を持っています。

セキュリティ確保

Walletの秘密鍵の管理などセキュリティ確保の面でも、Ethereumは有利です。

Bitcoinのスクリプト言語は制限があり、複雑なことをするに向いていません。一方、Ethereumはチューリング完全なプログラム言語を備え、複雑なセキュリティ仕様を実現することが容易です。複数の秘密鍵を別々の場所に保管しても管理しやすくしたり、Walletに支払いを止めさせる権限より初期化する権限を上位にしたりといったルールを比較的容易に記述できます。

Bitcoinでやると、こう(http://fc16.ifca.ai/bitcoin/papers/MES16.pdf)なります。これを理解して実装する暇のあるやつはいないということです。

スケーラビリティ

Bitocoinが分裂の危機を迎えたり乗り越えそうになったりしていますが、その主な理由はスケーラビリティを確保するための方針がまとまらないことにあります。Ethereumは、この点でもよいポジションにあります。

Edgar先生曰く

An established governance procedure for capacity increases, not an endless political food-fight.

Ethereumには、確立したキャパシティ増加プロセスのためのガバナンスがある。終わらない政治のフードファイトの代わりに、です。

スケーラビリティ確保に役立っているEthereumのデザインについては、別の記事で書こうと思います。

結局これら3点すべて、「技術者や学者特有の考え方の癖」に原因が求められます。Edgar先生曰く、ビットコインコアの開発メンバーには、現在は数学者が多く参加しているそうです。すると、こういった人種は潔癖症なことが多く、仕様などについて延々と議論という名のバトルが展開されたりするわけです。延々とです。

Ethereumの中心人物のVitalikは、20歳前後ととても若いです。そのせいか、古参の原理主義者の限界をやすやすと超えた発想をできるのかもしれません。Vitalikを中心としたEthereumコミュニティは、THE DAOの事件でのソフトフォークとハードフォークの件、あの大事件をむしろシステムを見る視点を本質的に一つ上のレベルに導いてしまいました(少なくとも私は導かれた)。何しろ、ハードフォークして当たり前という世界が開けそうなことに、ここ20年で一番未来を感じました、私は。

日本のオジサンたちにはこれがわからんのですよ。 例の斉藤賢爾さんも、ビットコインのほうがEthereumよりマシなどといってるのですから。ソフトフォークのほうがハードフォークよりマシともいっておられる。パラダイムが古いんです。

日本のテック野郎にEdgar先生のエントリから、次の言葉を送ります。

Busting out of the nerd ghetto(オタクのスラム街から抜け出せ)

もうね、セガサターンがプレステに負けたときから私はこういってますよ。技術や製品の普及の秘訣は、オタクとパンピーの構成員における割合が適正であることです。Bitcoinは、やたらと知名度が上がった状態で大混乱しているわけで、とてもよくない状態だと思います。

 

ブロックチェーンのfork/日本人エンジニアの客観信仰

雑誌・現代思想でビットコインとブロックチェーン特集があったので、急遽購入。野口悠紀雄氏や慶応SFCの斉藤賢爾氏など有名どころが寄稿してます。

私は、栃木県に住んでいる英国人のEdmund Edgarさんの仕事をときどき手伝っているのですが、彼はブロックチェーンやビットコインに詳しいんです。ちなみに彼は日本語ペラペラです(笑) そこで色々と話を聞き出したり、その手の英語サイトの議論やブログを読んでいます。そして、少なくとも中年以上の日本人ITエンジニアや研究者は、1周遅れのパラダイムにしがみついている人がほとんどじゃないかという思いが強くなってます。

ナイーブというか潔癖症というか、とにかくカチッと固まった世界しか相手にしたくないようなのですよね。客観信仰とでもいいましょうか。

昨年夏に、EthereumのTHE DAOコントラクトのバグを突かれることで、不正にETHが数十億円分奪取される事件がありました。その対応としてソフトフォークとハードフォークという2つの対応が考えられる中で、現実にはハードフォークで対応されました。ソフトフォークは、以前のブロックチェーンの仕様と互換性を保ちつつ、盗んだ奴の口座を凍結する対応。ハードフォークは互換性なく完全な新しいブロックチェーンへの移行です。

斉藤賢爾氏のような人からすると、特にハードフォークはありえないような話らしいんですよね。彼によると、ビットコインも含めブロックチェーンの設計から間違っているそうなんですよ。そのことについて「現代思想」の女性経済学者との対談で語るところによると

「あなたたちは、自分たちのやっていることをわかっていますよね?」

という気分だそうですが。いや、彼らはどう見てもわかっていますよ?

斉藤さんやある割合の日本人エンジニアの感覚は、

「ブロックチェーンがフォークすることは歴史が分岐することとなる、よって好ましくない」

だと思います。しかし、Ethereumの開発中心人物で若干20歳のVitalik中心に展開されるフォークについての議論を追うと、フォークそれ自体がとんでもない間違いとは思っておらず、問題にもされていないように見える。THE DAO事件が起きてしまったから後付けでというわけでもないはずです。私の英語がたいしたことないとはいえ、この印象は間違っていないと思います。

Ethereumの公式ブログのVitalikのポストです。Edgarさんに教えてもらいました。

The Subjectivity / Exploitability Tradeoff

私はこの”Subjectivocracy”という単語を見て衝撃を受けました。主観主義とでも訳すべきでしょうか。客観主義がダメであるというのは昔っからの私の持論ですが、西洋哲学の本場の人たち自体客観信仰している人ばかりではないんですね。

  • Subjectivity  → 主観
  • Objectivity → 客観

ですが、このエントリを読むと、日本人エンジニアや研究者が神聖視していると思われる客観性は、同時にCURSE(呪い)でもあるとVitalikはいっています。

Objectivity has often been hailed as one of the primary features of Bitcoin, and indeed it has many benefits. However, at the same time it is also a curse.

客観性はビットコインの主な特徴として歓迎されているし、事実役に立つことも多い。しかし、同時に呪いでもあるんだ。(拙訳)

エントリはけっこう長いのですが、是非読んでみて欲しいです。システムがSubjective(主観的)であるとき、Not exploitable(攻撃しにくい)がマネージコストがかかる。Objective(客観的)であるとき、オートでシステムが維持できるが攻撃しやすい。そのトレードオフだということです。オートでAIっぽく世界が進行する・・・60年代70年代生まれのパソコン少年が喜びそうな世界ですねwwww だけど、本場のあちらの人たちはもっと大人のようです。

ハードフォークすることを歴史の分岐だから好ましくないとするのではなく、それぞれが自分の好む(主観的な)世界を選択することができるという考え方。こちらのほうが断然よいと思いませんか?

Edmund Edgarさんは、Subjectivocracyを実装したRealyty Tokenというプロジェクトを構想しています。これがまた刺激的なんですが、今一生懸命ホワイトペーパー読んでます(笑)

EthereumとBitcoin、それぞれのトランザクション

EthereumとBitcoinそれぞれについて、トランザクションがどういう構造をしているか調べてみたいと思います。

Ethereum

  • nonce
  • メッセージの受領人
  • 送信者を特定する署名
  • 送受信されるEtherの量
  • オプショナルなデータフィールド。Contractに送られるmessageを格納できる。
  • STARTGAS値
  • GASPRICE値

Ethereumのトランザクションは、「誰から誰にどれだけのEtherを送る」という情報を単純に持っているようです。nonceは、マイニングのときに求めるあれなのかどうかは、まだ不明です。

Bitcoin

  • バージョン
  • トランザクションインプット数
  • トランザクションインプット
  • トランザクションアウトプット数
  • トランザクションアウトプット
  • Locktime

一方Bitcoinは、トランザクションインプットとトランザクションアウトプットの集合体です。これは「Bitocin+トランザクションアウトプット」のキーワードで検索してくるとたくさん出てきますが、誰かにビットコインを送金したいアカウントは、

  1. 自分が使える未使用トランザクションアウトプットをかき集める(トランザクションインプット)
  2. それを送り先アカウントの使える未使用トランザクションアウトプットとして生成する(トランザクションアウトプット)

という手順で送金を行います(間違っていたら指摘してください)。Locktimeはトランザクションの処理にまつわるUNIXタイムスタンプか、またはブロック高です。

手数料

トランザクションをブロックチェーンに取り込むには、マイナーに対して支払う手数料が必要です。

Ethereumは、STARTGAS値とGASPRICE値から手数料が求められます。Bitcoinは、トランザクションアウトプットとインプットの差額が手数料になっています。それぞれどういう計算で手数料が求められるのかは、詳しく調べていません。Ethereumについては、

Estimating transaction costs

ここを見るとよいかと思います。

Contract間通信のためのトランザクション

Ethereumの場合は、送金だけではなくContractでいろいろな処理を行うことができます。Contractのメソッドを呼び出すためにはMessageを投げますが、EthereumのトランザクションはMessageをそのデータフィールドに格納できます。

日本のAI界隈は新興宗教と同じ

百人一首の話の続きで2ちゃんねるのことを書こうと思ったんですが、ちょっと別の話を書きます。

西垣通先生と西川アサキさん

3年前くらいまではビッグデータ、その次に来てる自意識過剰さん御用達ワードが人工知能なわけですが。どうも、シンギュラリティが来るとか職を奪うという方向の盛り上がりばかりに見えるのはなんでかなと、考えたわけです。シンギュラリティは来ると前提して、喜んだり受け入れるか、怖がるかどちらかしかないように見える。

西垣通さんという情報学の先生がいます。西垣さんは一貫してAIというかITの限界を説かれてまして、私の問題意識と合うのです。そこで、去年西垣さんのセミナーに参加したことがあるのですが。そのセミナーには、西垣さんのほかに西川アサキという若手哲学者も登壇してましてね。AIは大したことない派の西垣さんVS.AIが人間の知能を持てない理由がわからないよ派の西川さんという図式でした。

海外のAI事情はそれほどしっかり調べてないですけど、例えばこんな記事もありますね。

The End Is A.I.: The Singularity Is Sci-Fi’s Faith-Based Initiative

シンギュラリティの本場アメリカより、日本のほうがいわばAI信者が多いのではないかな。

AI信者という新興宗教信者

AIにすべて滅ぼしてしまって欲しいAI信者が、日本にはたくさんいる。教祖はレイ・カーツワイル。なぜか?

人間より優れたAIがすべてを変えてくれる(壊してくれる)と考えれば、いけてない人間(生物)である私も自意識を保てる

と考える人が多くいるからですよ。人間としていけておらず、生物としてもいけていない。だからAIでみんな滅びちゃえ。そういう表現を、「俺は頭がいいし哲学までしちゃってる」という高い自意識も込めてできてしまうことが、人工知能凄い系の流行現象の本質ですね。一昔前の「希望は戦争」のようなものです。

名古屋でとてもユニークな人工知能の講義を聞かせてくれた女性研究者もね、やたら忙しいせいかAIに人間を越えてほしいと思ってるみたいだったし・・・。社会システムもますます行き詰ったとき、ええじゃないかを踊りだすのではなくAIに何とかしてほしいと願う。

西垣さんは、もう70近い方で家族もおり好々爺のような方です。いっぽう西川アサキさん。アラフォー独身です。セミナーでのファッションがSFみたいなコスプレのようなファッションで、これまたこじらせ感が。黒のレザーが多く使われていたような記憶です。サイバーパンクではないんですが・・・。

こういう対照的なおふたりの、AIに対する賛否とパーソナリティと人生。いろいろ示唆的だと思いませんか。私も40オーバー独身です。そんな私が思うに、人工知能は奥深いですが、アルゴリズムは全部人工知能にされてしまう勢いの最近の風潮は、少子化や草食化や独身の交際相手なし70%と根が同じと思いますよ。

私は生物として強力でい続けたいと思います!フォースのともにあらんことを!

ちはやぶる 神代も聞かず 人工知能 シンギュラリティ 人智超えるとは(3)

(2)から3か月も経ってしまった。この問題こそ私のモチベーションなので、何年かけても続けますけどね。

  1. 1,000,000種類の記号の中からランダムに31の記号を選択する(重複を許す)
  2. 選んだ31の記号を、これまたランダムに並べる
  3. 1と2を1,000,000回繰り返す

この100万人1首を超高速処理するAIカルタというのを仮定して、いまのエンターテイメントが100万人1首になっていっているという私の憤りを書きました。

感じませんかね・・・。インターネットにしても、「面白い記事」という「型」があってそこへ当てはめたものばかりになってません?Facebookに流れてくる「面白いネタ」ってみんなこれだし、そういうのを馬鹿にする人種(例えばはてなー)だって、別の「型」に則ってるだけなんですよ。そして、だんだん型ですらなくなって高速記号処理に近づいて行ってるわけです。

Perfumeが主題歌を担当した映画「ちはやふる」を見て競技カルタを始めて、「心が豊かになった」という人がいる。最初の数文字で決まり手を判別して高速で札を取りに行く。この点で、競技カルタは高速記号処理に見えるわけです。AI100万人1首では心は豊かになりそうもない。じゃあ、百人一首はどうして心を豊かにできるのか?私の考えでは、時間の積み重ねである「歴史」と「身体」が存在するからだと思います。それは「意味」と言い換えてもいいと考えてます。飛躍があるように見えるでしょうけど、まあそれはおいおい説明するとして。

どうも人工知能の分野では、意味についてあまり扱いたくないのでしょうかね。深層学習流行りの最近では、ますます意味は知能の対象外になっているように見えますね。時間と身体を無視して、一次元的な記号列による表象ですべての知能活動を賄えるとしてしまう・・・。彼らは感情は知能の部分要素と思っているか、理性より劣ったものとして切り捨てているようです。

「人工知能」脳に近づくと、左が右と大差なく見えるようになっていきます。ゲシュタルト崩壊ともいいます。ところで、ゲシュタルト崩壊という現象も知能について考えるにあたって興味深いですね。

理系の研究所にいて人工知能を研究しているような人は、「面白くない自分」を気にして劣等感を抱いていたりします(笑) そこで、

「感情は知能に劣る。感情があるせいで冷静な判断を人間は下せないので、人間を超えた人工知能に様々な課題を解決してもらおう」

このようなことを考えているわけです。このことが正しいかどうかは置いておきます。最近のように社会全体が人工知能人工知能ということで、全分野で働く人の脳みそがAIっぽくなっていっている、とりわけエンタメ分野が面白くなさすぎるがウンコすぎると私は怒っているわけです。

次回 2ちゃんねるのコピペ文化へ続く

検索エンジン自作入門/ wiserのPython移植(7)

検索エンジン自作入門/ wiserのPython移植(5)で作ったmerge_postings を呼び出す側の、二つの関数 merge_inverted_index と update_postingsを実装します。

最初に update_postings から。これはストレージ上のポスティングリストとメモリ上のポスティングリストをマージして、その結果をストレージに保存します。引数はメモリ上の転置インデックスのエントリです。書籍は77ページ。

fetch_postings は、トークンIDでトークンに紐づくポスティングリストをストレージから検索します(2行目)。ストレージに該当するトークンがなければエラーを返します(13、16行目)。あれば、メモリ上のポスティングリストとマージした結果でdb_update_postings でストレージを更新します(8行目)。

次にmerge_inverted_indexです。ふたつのメモリ上の転置インデックスをマージします。引数はマージするふたつの転置インデックスです。書籍は79ページ。

書籍ではマクロ HASH_FIND_INT  で行っているマージ先からのトークンの検索は、関数 find_token_from_index で行っています(3行目)。merge_postings でポスティングリストをマージしているのは、update_postings と同じです(7行目)。

これで、転置インデックスの構築する部分で残るは、検索対象の文書(書籍と同じようにWikipediaにしようと思ってます)をインポートする処理だけとなりました。だいぶかかってしまった・・・。次回はWikipediaで提供するXMLをlxmlを利用してインポートする処理を作ります。

正直、設計にしろPythonの使い方にしろこれでいいのかなと思いながら作ってますが、Wikipediaから転置インデックスが作れればまずはOKということにします。

ちはやぶる 神代も聞かず 人工知能 シンギュラリティ 人智超えるとは(2)

前回の(1)で、百万人一首というものを仮定してみました。

  1. 1,000,000種類の記号の中からランダムに31の記号を選択する(重複を許す)
  2. 選んだ31の記号を、これまたランダムに並べる
  3. 1と2を1,000,000回繰り返す

これをやって出来上がった100万枚のカルタで、AI選手がカルタ取り競技をするというものでした。

AIは読み上げ(というかコンピュータ同士の競技なので何かしらのINPUT)を聞いて、100万種類の記号の中の決まり字「☆」とか「!」で、AIならではの敏速な判断を下して、カルタをGETし合います。人間様が観客でいるなら、わかりやすくカルタをAI選手の一人が取るごとに、LEDでもなんでも点灯させてやることとします。

100万枚のカルタだろうが100万種類の記号の羅列だろうが、プログラムなのでわけもなく取っていきます。各AI選手は、いまの将棋プログラムのように人がプログラムしたものでも、自律して自己を書き換えてしまう未来のAIプログラムでもいいです。

観客には、激しいLEDのフラッシュが見られてエキサイティングかもしれませんね。LEDではつまらないか。今思い出しましたが、80年代の映画「WAR GAME」でコンピュータが3目並べをするシーンがありました。こんな感じで人間向けにショーアップしたら、少し楽しそうですね。ちなみに、映画のAIは三目並べの次に核戦争のシミュレーションを始めます(核戦争の映画です)。

では、凄まじい勢いでカルタを取り合っているAI選手にとっての、カルタとは何でしょう?このエントリーを書くきっかけになった中華料理屋で見ていた百人一首の番組で、「ちはやふる」を見て競技カルタを始める人が増えていると話してました。そういう人の中には、「心が豊かになった」とかいう人がいるわけですよ、お約束ですが。

百人一首は決まり字があり、それが上の句の最初の2文字とか3文字にくる場合もあるんです。それをイントロクイズばりに超反応で取りに行く。それが競技カルタです。そういう競技をたしなむうちに心が豊かになるとは、どういうことなのでしょう。この超発展版として、このエントリーで仮定した百万人一首というものが、考えれれるでしょうか。どうでしょうか。

現代社会のITの使い方は、様々なエンターテイメントを百万人一首にしようとしているということに、私はもの凄い憤りを感じているわけなんです。だって、クソつまらないから。

続く

EthereumのContractと通信する(2) ABI Definition

前回、Contractのデプロイまで行きました。今回は、実際にContractに実装したコードを実行させてみます。

デプロイのときと同じように、eth_sendTransactionメソッドでトランザクションを実行します。パラメータのfromとtoはもちろん、トランザクションの送信元のアカウントと受信先であるContractのアドレスです。

公式にも書いてありますけど、dataパラメータは少し面倒なものです。このパラメータは、呼び出すメソッドとパラメータを定義するバイトコードを持ちます。ここに、今回調べるといったABIというのが関わっているらしいです。ちょっとドキュメントを参照してみます。

Ethereum Contract ABI

冒頭の”Basic design”によると、Contractの外部とのインターフェース定義はコンパイル時に決まってしまい、静的であると。Introspectionメカニズムは存在しませんとも書いてある。Introspectionとは何ぞや?調べると、内省とか内観と出てきますね。東洋かぶれのあちらの人が作った単語か?と思ってしまいますが。

つまりは、Contractの内部仕様を外から調べるすべは用意されていないということのようです。仕様を知っているアカウントしか、Contractを実行できないということです。ABIとは、Application Binary Interfaceのことで、Contractを使用する側は、呼び出し時にこの定義をバイトコードとして渡してやる必要があるということのようですね。コンパイル時に返ってきたのは、ABIの文字列表現のようです。

ABIは、以下二つをエンコードした値を含みます。

  1. 呼び出そうとするメソッドの名前と、引数の型
  2. メソッドに渡す実引数

1.については、Keccak hash(SHA-3)をかけた結果の最初の4バイトをエンコード結果とします。gethをインストールしてあるなら、この値は次のように得ることができます。

2.については、Argument encodingに各データ型のエンコード方法が書いてあります。たくさんあります。とりあえず、今回のようにuintのパラメータひとつだけで、6を与えるとすると32バイトの6ですので以下のようになります。

dataパラメータに渡す値は、2つを結合した次の値になります。

よって、Contract Multiply7のmultiplyメソッドを呼び出すトランザクションは、再掲しますが以下のようになります。

しばらく待ち、マイニングが成功してトランザクションがブロックに登録されたら、結果をeth_getTransactionReceiptで取得できます。

resultのlogsの中にあるdataが結果のようですね。

これは10進数では42ですので、6*7=42 ですから正しい結果が返ってきています。

ちはやぶる 神代も聞かず 人工知能 シンギュラリティ 人智超えるとは(1)

他とは違う視点で人工知能について考えてみる、このコーナー。今回は、富士山近辺の村にある中国人経営の中華料理屋で、食事をしながらテレビを見ていて考えたことです。

ちはやぶ・る・う♪

テレビでやっていたのは、Perfumeが主題歌を担当しました「ちはやふる」という映画について。百人一首の競技カルタの映画です。私は映画を見てないですが、まあ、それは重要でないので。

番組で競技カルタの説明をするときに、「カルタのイントロクイズみたいなもんですね」という、うまい例えをしてました。私は、中学生のときに学校で百人一首大会が行われたことを覚えています。いちおう、100首全部暗記したような気がしますね。でまあ、本番では暗記の成果を披露するなどできず、普通のカルタ状取り態になったわけですが。

トップクラスの選手だと、「決まり字」が読まれた瞬間に手が出ると聞いて、中学生ながらに疑問を持ったんですよね。最初の数文字でどの札がターゲットか決まってしまう。「それって、百人一首の和歌の意味はどうなるんだろうか?」

 

百万人一首

映画をきっかけに百人一首なり競技カルタに興味を持つ人が増えていると、番組の中でいってました。始めた人によれば、「心が豊かになった」という「決まり字」が読まれるのですが。さて、ここで思考実験をしてみます。

  1. 1,000,000種類の記号の中からランダムに31の記号を選択する(重複を許す)
  2. 選んだ31の記号を、これまたランダムに並べる
  3. 1と2を1,000,000回繰り返す

以上を行いますと、100万枚のハナモゲラ語のカルタがが出来上がります。

karuta

まあ適当に作りましたが、こんなのが100万枚あるわけです。このカルタは例えば、決まり字が「◇」だったり「A」だったりするわけです。このカルタを使って百万人一首大会を行ったとします。選手は全員コンピュータ(AI)とします。

勘のいい方は、「中国語の部屋」を思い出したことと思います。

中国語の部屋

百人一首を題材に中国語の部屋問題を扱う意図については、次回で。

EthereumのContractと通信する

前回、Truffleのサンプルを動かしてみました。Truffleのインストールから進めながら途中で出るエラーの対処をしていて、結局Ethereumの理解が半端なままでは効率が悪いとなりました。TruffleではEthereumのContractと通信をするアプリを作りますので、Contractについて公式を見ながら勉強してみることにしました。

Contractのコードは高級言語で書いてEVMバイトコードにコンパイルします。言語は複数あるようですが、初心者はSolidityを選ぶのが自然のようです。

 

JSON-RPC

Contractとは(正確にはEthereumノードとは)、JSON-RPCで通信することになります。

通信をするため、EthereumのGo言語製のクライアントgethを使います。コマンドラインインターフェースが提供されます。

これで、EthereumとRPC通信が行えるようになります。gethのコマンドラインオプションの説明はここにあります。

以下では、curlコマンドにJSONパラメータを渡してEthereumと通信をします。パラメータのmethodの項目にEthereumのメソッドを記述します。

 

コンパイルからデプロイまで

コンパイル

Solidityで記述したContractのコンパイルにも、複数の手段が用意されているようです。

Compiling a contract

コンパイラの存在確認をします。

resultとしてSolidityが返ってくれば、次に進めます。

Accessing Contracts and Transactionsのページを見て、順に進めてみます。ここにある簡単なContractを、コンパイルしてEthereumネットワークにデプロイしてみます。整数を7倍するだけです。

 コンパイル

コンパイルを実行して、Contractのバイトコードを得ます。paramsにContractのコードを渡します。長いコードの場合は?IDEを使えば、何か良い手段が提供されるのかもしれません。戻り値のcodeのところにEVMバイトコードが返ってくるようです。

戻り値のinfoにあるabi定義というのが、PHPerにはなじみがない単語ですね。コンパイル言語に付き物のような雰囲気です。abiについては、次回Contractとの通信をしてみるときに詳しく調べます。

Gas消費量の計算

Contractの処理を実行するには、Gasという”燃料”を消費します。その消費量を計算します。paramsのfromにトランザクションの送信元アドレス、gasに上で計算したgas消費量、dataにバイトコードを渡します。

デプロイ

Ethereumネットワークにデプロイします。paramsはgas消費量の計算と同じです。トランザクションハッシュが返されます。

Contractの情報を取得

トランザクションは、実行されるとReceiptを発行するので、それを取得します。paramsは上で取得したトランザクションハッシュです。Receiptの中にはContractのアドレスやそのトランザクションが格納されたブロックのハッシュ、gas消費量などが含まれます。Nullが返されたときは、まだトランザクションがマイニングによってブロックに登録されていません。

以上のような手順でデプロイが完了すれば、Contractと通信をすることができます。次回は実際にContractに処理をさせてみます。