Ethereum スマートコントラクト開発日記(2)
前回でテスト用ネットワークとその上での送金を確認できたので、今回からスマートコントラクトの開発を始めていきます。
Solidity で開発するには大別して
- solidity のコンパイラをインストールする
- Browser - Solidity(SolidityのWebIDE)を使用する
とりあえずここではお手軽に Browser-Solidity を使用していく。
Remix を接続
先に geth を RPC接続可能な設定で起動する。
$ geth --networkid 4649 --nodiscover --maxpeers 0 --rpc --rpccorsdomain "*" --datadir ~/eth/data console 2>> ~/eth/data/eth.log
あと、miner.start() でマイニングを開始しておくこと(もう起動オプションでマイニングは走らせっぱなしでも良い)。
Browser-Solidity を開き、右上「Run」のタブを開いて Environment を Web3 Provider に変更。接続先を入力するダイアログが出てくるのでそのままOKを押す。
エラー等が出ず、Account に作成したアカウントの一覧が表示されていれば成功。
コントラクト作成・実行
Browser-Solidity 左上の + ボタンを押して新規ファイルを作成、Hello.sol という名前でコントラクトを作ってみる。
pragma solidity ^0.4.8;
contract Hello {
string public greeting;
function Hello(string _greeting) public {
greeting = _greeting;
}
function setGreeting(string _greeting) public {
greeting = _greeting;
}
function say() public constant returns (string) {
return greeting;
}
}
「Run]タブに移動し、適当な _greeting を指定して 「Create」 を押す。先にアカウントを unlockAccount しておかないとエラーになるので unlock しておきます。
Create後、トランザクションが実行されたタイミングでコントラクトが実行され実行ログが表示されます。
別アカウントでの実行
前回記事の手数料と同じく、EtherBaseのアカウントから発行されたトランザクションはマイニング時の手数料報酬として同アカウントに戻ってくるので残高に変化は出ません。
別のアカウントからトランザクションを発生させてみましょう。
- 実行用アカウントに sendTransaction で ether を送金
- 実行用アカウントを unlock
- Browser-Solidity の Account を実行用アカウントに切り替え
- setGreeting に別のテキストを設定し、実行
実行すると Hello.greeting の内容が変更される事、実行用アカウントの残高から手数料が引かれている事が確認できます。
まとめ
なんとなくコントラクトの実行方法が掴めた。これから本来なら自分でトークンを作ってみて受け渡しして〜 というのが学習フローなのですが流石にそっちはもっと良い記事がたくさんあるので何か違う事できないか考え中です(もしかしたら永遠に考えるだけかもしれない)。