Ethereumのコントラクトをbrowser-solidityで開発する




どうも高妻です。Twitterでもプログラミングのことや暗号通貨のことをつぶやいているのでよかったら覗きにきてください。  

Solidity

Etgereumのスマートコントラクトを動かすためのコントラクトの実装にはSolidityという独自の言語を使用します。Solidityの詳細はこちらを。

特徴としては下記が挙げられます。

  • チューリング完全
  • Javascriptっぽいらしい

browser-solidity

コントラクトの開発にはbrowser-solidityという統合開発環境を使うのがおすすめです。コードをコマンドラインでコンパイルしてブロックチェーンにデプロイする等の作業がこのbrowser-solidityだけで完結します。

インストール方法は下記2つがあります。どちらも使用するツールは同じでできることも同じです。

  1. browser-solidityからクローンしてローカル環境で構築する
  2. すでに用意されたhttps://remix.ethereum.orgの開発環境を使用する

自分は1の方で環境構築しようとしたのですがプロセスを立ち上げてアクセスするとエラーになってしまいうまく構築できなかったので2番の方を使っています。2番の方だとなんの準備もいらずにすぐ使えるのでおすすめです。

コントラクトの実装からデプロイまで

https://remix.ethereum.orgを開くと最初から中央にSolidityのソースコードが書かれています。今回はこのソースコードをプライベート・ネット上にデプロイするのとソースコードの実行を試してみたいと思います。

gethのセットアップ

コントラクトのデプロイにはEthereumのCLIツールであるgethを使用します。gethのインストールは下記を参照してください。

Macのローカル環境でEthereumの送金を行う

https://remix.ethereum.orgを開くと最初からballot.solが開かれています。今回はこのデフォルトのコントラクトをプライベートネットにデプロイしてテストします。

プライベート・ネットへの接続

まずはじめに、プライベートネットを立ち上げます。

各オプションの説明は下記です。

  • networkid:0,1,2,3以外の任意の整数を設定します。
  • nodiscover:他のノードを探さないという設定です。プライベート・ネットでは探す必要がないのでこのオプションをつけます
  • unlock:アンロックするアカウントのアドレスを指定
  • rpc:JSON-RPCとして起動する
  • rpcddr:ドメインを指定
  • rpcport:ポートを指定
  • rpcapi:受け付けるapiインターフェースを指定
  • rpccorsdomain:クロスオリジン要求を受け入れるドメインのカンマ区切りリストを指定
  • testnet:これを指定しないとプライベート・ネットでの採掘ができません
  • console:gethのコンソールを起動するためのオプションです

次にbrowser-solidityの画面右のRunタブからWeb3 Providerを選択してローカル環境のプライベート・ネットに接続します。その際、localhostだと接続できなかったので自分は127.0.0.1で接続することができました。

コントラクトのデプロイ

次が実際のコントラクトのデプロイになります。デプロイは下記画像のCreateボタンを押します。

Createボタンを押すとbrowser-solidityのコンソールに下記が表示されます。

処理待ちの状態ですね。なのでgethでマイニングを開始してあげます。

マイニングが成功するとコントラクトがブロックチェーン上に記録されデプロイが完了します。

コントラクトのメソッドの実行

デプロイが完了するとコントラクに実装したメソッドに値を渡して実行することができるようになります。

giveRightToTokenは投票権を与える関数で引数にaddressを指定するみたいなので実行してみます。実行後もやはりマイニングの開始が必要です。

実行後は最初pendingされてマイニングが成功するとブロックチェーン上でメソッドが実行されます。

まだメソッドの中身まで理解できていないので説明を飛ばさせてもらいますが、すぐにでも追記していきたいと思います。

まとめ

browser-solidityとはEthereumのコントラクトの実装からブロックチェーンへのデプロイまでを完結できるツールです。

ローカルのフォルダともリンクできるみたいなのでGithubとも連携しながら開発を行うのが簡単そうでした。

今後はサンプルコードなどを交えながらさらに深く紹介していきたいと思います。







コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です