Easiest Blockchain~超簡単 大学生に向けたブロックチェーン技術の勉強ブログ~

ブロックチェーン技術の勉強のために学んだことをシェアしていきます。ブロックチェーン技術の基礎から応用まで幅広く勉強していきます。

超簡易 ブロックチェーン(Ethereum)上での匿名投票プログラム解説 ”Easiest voting app with blockchain”Part4

今回はついにコントラクトをブロックチェーンにデプロイしていきます!
これまでの記事は下準備+コーディング+コンパイルでした。
区切りをつけて理解していくと簡単に感じますよね。
今後もこのようなスタイルで行こうかと思います。
では早速本題に入っていきましょう!

※1、cdコマンドでvoting_appフォルダに移動してから、さらに別ウィンドウのシェルでganache-cliを起動してから行ってください。
※2、前回の記事と続いています、Part2で書いたコードPart3でコンパイルしてから今回のデプロイを行ってください。

4:デプロイ
デプロイといっても難しいことはありません。ただ変数に重要な個所をストアしていき、ブロックチェーンに組み込む際に必要なデータを指定してあげるだけです、

>abiDefinition = JSON.parse(compiledCode.contracts[":Voting"].interface)
>VotingContract = web3.eth.contract(abiDefinition)
>byteCode = compiledCode.contracts[":Voting"].bytecode
>deployedContract = VotingContract.new(["Taro","Kenji","Naoko"],{data: bytecode, from: web3.eth.accounts[0], gas: 4700000})
>deployedContract.address
>contractInstance = VotingContract.at(deployedContract.address)

①abiDefinition:JSON.perseオブジェクトを使用し、。JSONとして前回のコンパイルしたコードをストアします。
②VotingContract:コントラクトオブジェクトを作成します。これはブロックチェーンにデプロイする際、初期化する際に使用します。
③byteCode:ここに前回重要だといったbytecodeをストアしていきます。
④deployedContract:ここのVotingContract.new部分でブロックチェーン上にデプロイします。最初の["Taro","Kenji","Naoko"]は選挙での立候補者をそのまま記述します。その次に来る引数がブロックチェーンにデプロイする際に重要になります。
1.data:コンパイルされてできたバイトコードです。以前から数回出てきていますが、この部分がブロックチェーン上にデプロイされてハッシュ内に入ります。
2、from:ブロックチェーンでは誰がコントラクトをデプロイしたかをトラックし続けます。ここではganacheが生成したテストアカウントの一つ目(インデックス番号0番目)を指定しています。
※実際のブロックチェーン上でアカウントを利用する場合はアカウントのロックを解除できませんので注意してください、今回のテストアカウントは既にアンロック済みなので気にしなくで大丈夫です。
3、gas:Ethereumを知っている方、勉強している方はわかると思いますが。Ethereumではブロックチェーン上でコントラクトを実行する際にEtherを消費します。ここで指定したgasはマイニングを行うマイナーに報酬として支払われます。ここではその報酬金をgasで指定します。
※1.gasが低すぎるとマイナーへの報酬が少なくなり、マイナーは進んでマイニングしません。よってgasを高く指定すると比較的迅速にマイニングされます。またこの限度額はfor、whileの無限ループを利用したgasの異常消費を制限します。
※2.実際にはgasPrice(ETH) x Total Gas Usage = 支払われたETHとなりますので、厳密にはここでのガスはマイナーへ支払われるETHではありません。
⑤deployedContract.address:④でブロックチェーンにデプロイはできました。しかしブロックチェーン上にはたくさんのコントラクトが実行されています。その中から特定のコントラクトを探す際にここで指定するdeployedContract.addressで識別します。つまりアドレスを利用します。
⑥contractInstance:⑤でコントラクトのアドレスを取得したので、それをインスタンスとしてストアします。

次回は実際にデプロイしたコントラクトをを使って投票していきますが、今回出てきたAddressとabiDefinitionが大切な値なので覚えておいてください。

以上でデプロイ編は終了です。
どうでしょうか、思ったより簡単ですよね!
次回はブロックチェーン上に流したコントラクトにメゾッドを利用して、実際に投票を行ってみましょう。
今回も最後までお付き合いいただきありがとうございました。