前回は、コントラクト名とアドレスを管理するスマートコントラクトの動作確認をMist Walletを使って実施しましたがうまくいきませんでした。
今回は、gethコンソールを使って動作確認を行ってみます。
事前準備
動作確認を行うために、下記のような準備をしておきます。
- geth起動
- マイニング開始
- スマートコントラクトをデプロイ
コンストラクト名の登録
まずはコントラクト名の登録を行います。登録するコントラクト名はcon1です。
登録する前に、アドレスのロックを解除する必要があります。
[コントラクト名の登録]
1 | > personal.unlockAccount(eth.accounts[0]) |
問題なくトランザクションを発行できました。
ブロックに取り込まれるまで少し待って登録内容を確認します。
[登録内容の確認]
1 | > nr.numContracts() |
コントラクト名が1つ登録され、登録されたコントラクト名のオーナーアドレス(eth.accounts[0])であることが分かります。
アドレスの登録
次にコンストラクタ名にアドレスを結びつけます。
登録するアドレス情報はダミーです。
[アドレスの登録]
1 | > nr.setAddr.sendTransaction("con1", "0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",{from:eth.accounts[0], gas:5000000}) |
問題なくトランザクションを発行できました。
ブロックに取り込まれるまで少し待って登録内容を確認します。
[登録内容の確認]
1 | > nr.getAddr("con1") |
問題なくアドレスが登録されています。
説明の登録
コントラクト名に対応する説明を登録します。
[説明の登録]
1 | > nr.setDescription.sendTransaction("con1", "This is description of con1.",{from:eth.accounts[0], gas:5000000}) |
問題なくトランザクションを発行できました。
ブロックに取り込まれるまで少し待って登録内容を確認します。
[登録内容の確認]
1 | > nr.getDescription("con1") |
こちらも問題なく登録されていることを確認できました。
オーナーの変更
オーナーの変更を行います。
accounts[0]からaccounts[1]へ変更します。
[オーナーの変更]
1 | > nr.changeOwner.sendTransaction("con1", eth.accounts[1],{from:eth.accounts[0], gas:5000000}) |
問題なくトランザクションを発行できました。
ブロックに取り込まれるまで少し待って変更内容を確認します。
[オーナーの変更]
1 | > nr.getOwner("con1") |
オーナー情報がeth.accounts[1]のアドレスに変更されていることを確認できました。
登録内容の解除
最後に登録内容の解除を行います。
オーナーがeth.accounts[1]に変更されているので、そのアドレスのロックを解除しておく必要があります。
[登録解除]
1 | > personal.unlockAccount(eth.accounts[1]) |
問題なくトランザクションを発行できました。
ブロックに取り込まれるまで少し待って内容を確認します。
[解除内容確認]
1 | > nr.numContracts() |
登録されているコントラクトがなくなっていることを確認できます。
前回Mist Walletでうまくいかなかった理由
gethコンソールでの動作確認では全く問題がありませんでした。
ではどうしてMist Walletでは同じコントラクタの動作確認ができなかったのでしょうか?
gethコンソールで正常に動作確認している最中に、Mist Walletでもコントラクト情報を参照してみたのですが、情報が全く反映されていませんでした・・・いやNum Contractsだけはきちんと反映されてました。
また、Mist Walletで各登録処理を行ってみたところ、Mist Wallet画面では登録内容が確認できませんでしたが、gethコンソール上では登録内容の確認ができました。
つまりMist Walletだと構造体のステートや引数のある関数の情報は表示できないということになります。
まとめて情報を参照できるMist Walletは大変便利だと思っていたのですが、ちょっと残念です。
次回は、また別のスマートコントラクトを作成していきたいと思います。