東工大ブロックチェーン 研究会 勉強会#2
今回(2018年4月28日 10時~@渋谷)は、コアメンバー4名とゲスト4名での開催でした。前回の勉強会でMastering Ethereumにそってブロックチェーンについて広く学ぶとともにそれぞれが持ち寄ったトピックについて議論すると言う形式をとることになりました。
今回は、
1) 導入としてなぜイーサリアムを学ぶのか
2) イーサリウムの鍵とアドレス
3) Gasについて
について話しました。以下に今日の議事録を纏めます。
会場を貸して下さったEast Ventures様、ありがとうございました。
当団体に興味のある方は以下からお願いします。https://www.facebook.com/groups/110665056418236/
議事録
1) イーサリアムの特徴
イーサリアムはオープンソースで分散化された計算インフラ、ブロックチェーンであり、そのブロックチェーン上で柔軟なスマートコントラクトを作成し実行できると言う所にある。また、ブロックチェーン上の仮想通貨Etherはスマートコントラクトの実行に使われる。
(質問)なぜオープンソースで分散型なのか?
(意見)分散型なのは改竄困難性が高く、システム全体が落ちる可能性が低いから。オープンソースなのは営利目的ではないから、ユーザーの信頼を得るため、開発を早めるため。
イーサリアムの誕生
イーサリアムが誕生する前にMastercoinと言うビットコインブロックチェーン上の独自トークンが存在し、スマートコントラクトを書くとことができた。しかし、Mastercoinのスマートコントラクトはチューリング不完全な言語Bitcoin scriptによって書かれておりforループなどが実装されておらず、シンプルな処理しか実行できなかった。(処理に必要な計算コストが完全に予測可能と言う利点もありますが)
イーサリアムの創設者であるVitalikはお金以外の価値経済、ブロックチェーンの機能拡大のためにあらゆる種類の処理ができるチューリング完全なSolidityと言う言語とそれによって記述され、柔軟なスマートコントラクトを実行できるブロックチェーンイーサリアムを作った。
チューリング完全は次回のトピック。
なお、イーサリアムは開発当時から4つの開発ステージが設定されており現在は第3ステージのMetropolisの第一段階Byzantiumまで開発が進んでいる。
このようにイーサリアムは現在も活発に開発が行われており、ブロックチェーン技術に最前線と言える。また、スマートコントラクトを使ったDecentraized Application(Dapps)の開発も事例(1000件弱)が多く、失敗例やその対応策、アイデアを参考にできる。
このような点から我々はイーサリアムを学ぶのだ!
2) イーサリアムの鍵、アドレス
前回の勉強会で学んだ通り、イーサリアムでは公開鍵暗号方式をとっているが、公開鍵はランダムに生成された秘密鍵から楕円曲線を用いて計算し求められる。
楕円曲線暗号はBitcoinでも使われている。
楕円曲線上では加算が定義可能で、加算から自然な積算を用いてある固定点と秘密鍵の積を公開鍵としている。
256bitのバイナリデータ(秘密鍵)をランダムに生成→楕円曲線暗号で公開鍵を生成→公開鍵をKeccak256(ハッシュ関数)にかける→最後の20バイトをイーサリアムアドレスとする。
ハッシュ値は入力に対して同じ長さで確率的に一意な出力を出す。
(質問)なんで楕円曲線暗号なのか?
(意見)Bitcoinがそうだったから。他のものに比べ計算量が8分の1と少なくて済む。
イーサリアムアドレスの表示形式
イーサリアムアドレスにチェックサム(間違いチェック方法に一つ、ビットコインはコレを導入)は導入されていない。
この代わりにICAPとENSと言う仕組みがある。
ICAP(Inter exchange Client Address Protocol)
銀行間の国際送金規格IBANに準拠した形式でイーサリアムアドレスを表示する方法。
XE(無国籍X+Ethreum)+チェックサム+アドレスor Indirectアドレス
誤り訂正のためにIndirectアドレスとしてCBC(Capital Based Checksum)アドレスが使われている。
16進数表示でのローマ字を一定のルールに基づいて大文字に置き換えることで誤り訂正を導入する。CBCアドレスはコレを導入していなくても大文字小文字の違いを無視するので普通に読み込む。導入した場合、誤りを99.986%(約1/10000)の精度で検出できる。
ルールは以下である。
16進数表記にしたアドレスとそのハッシュ値を並べ、アドレスのアルファベットでハッシュ値の同じ桁の値が8以上のものを大文字にする。
ENS(Ethereum Name Service)
アドレスにアルファベットをマッピングすることで可読性を確保する。
3) gasについて
gasは送金やコントラクト生成のトランザクションをマイニングするためにマイナーに支払う手数料
gas= gasprice(ガソリンの単価) * gasused(ガソリンの使用量)
コントラクト生成者がコントラクトをつくり、アセンブラしてガスの概算を算出=gasused(それぞれの処理の計算量はイーサリアム共通)
無限ループに陥っても脱出できるようにgaslimit(手数料の最大値≒計算量の限界)がトランザクションに設定される。gaslimitが十分でない場合コントラクトは実行されずに手数料は取られる
gaslimitとgaspriceはトランザクション生成者が設定する。
マイナーはgaspriceの高い方が計算量に対する報酬が多いから早くブロック上に載せて欲しい人はgaspriceを大きな値にする。安いものはいつまでたってもマイニングされないが、変更は可能である。
特定のトランザクションをマイニングしても他のマイナーに勝てないからブロックは承認されないだろう。
トランザクションにはmessagecall(送金など)とコントラクト生成がある。
Messagecallの種類は
UserToUser ,UserToContract ,ContractToUser ,ContractToContract