Easiest Blockchain~簡単 ブロックチェーン・Cloudの勉強ブログ~

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

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

今回も前回に引き続きブロックチェーンアプリケーション匿名投票Dappsプログラムの解説をしていきます。

その前にモナコインのブロックチェーンへの攻撃が行われました。
簡単に言うと、事前にブロックチェーンをある程度生成しておいて、本丸のブロックチェーンに載せる、そこでコンセンサスにより長いチェーンが採用されるため悪意のあるブロックチェーンのほうが採用されてしまう。これによって取引が改ざんされてしまいました。
このようなことは今後も少なからず起きてしまうと思います。
しかしネガティブな側面をとらえることはとても大事なことですので、今後も注目していきたいと思います。

では本題の投票プログラムの続きに入りましょう。
前回Solidityを使用したコーディングを行いました、今回はコンパイル編です。
3:コンパイル
※事前にcdコマンドでvoting_appフォルダに移動しておきましょう、また別ウインドウでganache-cliを起動しておきましょう。

まず初めにSolidityのコードをコンパイルするためにnpmモジュールのsolcをインストールしましょう。

npm install solc

次にnodeを起動します。node内でweb3、solcライブラリを使用します。
ここではweb3、solcオブジェクトを初期化します。

node
>Web3 = require("web3")
>web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

今回はlocalhostポート8545を使用します。
※他のサイトや教材でほとんどが8545ポートを利用しています。

次にweb3の初期化+ブロックチェーンとの関連付けの確認のためにethereumアカウントを確認しておきましょう。

>web3.eth.accounts
[ '0x4dcd2e673fe1c920c45de581b9347614640575f0',
  '0x5a209645aac68435603257c74146d5d90fd6169d',
  '0xd34db156bf746766de85066ce658ccdddf489c4f',
  '0x40cb7f6830d049981a0e74c3595b6eb3b12a0969',
  '0x5260f537c3cca4f502f70473b3414f91f3f38c00',
  '0x425f7db511183848b99143b20d02aecf1358a976',
  '0x43567eb9c530e7c2c2b50889dc0d4b69ba3b01f3',
  '0xa47b2f3a661e741e9e0674ca28661a367ba837cf',
  '0x5136fadac75c2aba4d5d2688aed7ae494ff138ab',
  '0x6eb4e6ce52de4605d869edbf258f63c16349184e' ]

手順が間違っていなければ上記のようにethのテストアカウントが表示されます。
※テストアカウントはそれぞれ異なります。
最後にコードをString型で読み取ってコンパイルしていきましょう。

>code = fs.readFileSync("Voting.sol").toString()
>solc = require("solc")
>compiledCode = solc.compile(code)

code変数にはnode.jsのfsを利用しVoting.solをString型で読み取ります。
compiledCodeにコンパイルされたデータをストアします。
これでコンパイルができました。
無事にコンパイルが成功するとダーッとコードが表示されます。
コード内のcontractオブジェクト内に2つ大切な個所があります
1.[bytecode]
Voting.solをコンパイルしたときにできるソースコードです。
のちにブロックチェーンにデプロイされるのはこのbytecodeです。
2.[interface]
ユーザーになんのメゾッドが利用可能であるかを知らせるテンプレートです。abiとも呼ばれます。コントラクトと関わる際に今後このabi定義が重要となってきます。

ひとまずこれでコンパイルができました。
ブロックチェーンへのデプロイはこのプログラムのメインともいえるので、ブロックチェーンへのデプロイは次回の記事で解説します!

今回も最後までおつきありいただきありがとうございました!

p.s.この記事を書いている際にブラウザがクラッシュして、ほぼ完成した記事が消滅しました。皆さんも気を付けてください。下書き保存やなどをはこまめに!