電子投票アプリをつくる
まずは完コピから
Flutter大学とUNCHAINに所属していながら、ぜんぜん別のことをやっているというのも、だんだん気持ち悪くなってきたので、そろそろ二つを統合しようと思う。で、たまたまネットで見つけた電子投票アプリをつくってみることにした。まずは完コピで一回。次は少し頭を使っていく予定。
完コピのネタ元はこちら。
- 今話題の仮想通貨まわりに挑戦しよう
- スマートコントラクトってなに?
- MetaMaskを導入しよう
イーサリアムのウォレットです。Rinkeby Test Networkを選択します。 間違えると本物のイーサを使うはめになるかも? おもちゃのイーサを充当しておきましょう。これはUNCHINで毎日使ってるのでOK。
- Remix IDEに登録しよう。
環境構築いらずで使えるオンラインのプラットフォームです。初めて使うけど、なんとかなりそう。記事には画像がしっかり入っているので理解しやすいです。solidityで書いていきます。今回はシンプルな関数が四つだけなので、かんたん。初めての人でも問題ない。もちろん、貼り付けてもOKでしょう。
- solidityのバージョン 0.6.6になってますが、最新は0.8.4です。
- solidityでcompileボタンを押して、イーサリアムでdeployボタンを押す。
たった一枚、ファイル書いて、ボタン二回押すだけ? いつもの、インストールしたり、あっち書いたり、こっち書いたりはなんなんでしょう。らくっちゃ楽ですけど、見えない部分が増えてるわけで、勉強向きではないかな。初期設定いらずで初心者でも楽ですよ、と考えるか、ちゃんとわかるようになってから楽しましょうね、と考えるか。差が出ますかね。
- INFURAにプロジェクトを登録しましょう
UNCHAINではalchemy使っている部分でしょうか。正直、まだその役割をよく理解していないけど、毎回通るところ、ですね。
- flutter projectをつくりましょう。
やっと登場です。え、どこでつくるの、同じRimix? と思いましたが、関係なさそうです。いつもどおりAndroidstudioでつくりました。
- pubspec.yamlに二つ追記してpubgetします。
- web3dart: ^2.3.3 と書いてありますが、最新は^2.3.5です。
- http: ^0.13.4 これは変わらずでした。
ここから突然、飛び石説明になります。つまりこれ、flutterはわかってますよね前提の記事ですね。AとBと二つのボタンが表示された画面がぽんと出ていて、シンプルでしょ、自分で書いてね、ですよ。笑 でも記事の最後にGitHubのアドレスがありますから、こちらを完コピできます。main.dartとhomepage.dart2枚だけです。確かにシンプルですね。
- UIができたら、諸々、加えていきます。
- final String myAddress = "0x......
これ、たぶん、自分のウォレットのアドレスです。たぶん、で申し訳ありませんが。
- final String blockchainUrl = "https://rinkeby.infura.io/....
ここは、さっき登録したINFURAで表示された自分のprojectのアドレスです。
- Remixに戻って、もう一回deployして、ABI を取得。
- assetsフォルダをつくって、中にcontract.jsonというファイルをつくって、ABIをべたっと貼ります。
これ、githubのを貼ってはいけません。自分のdeployですから、唯一無二です。deployし直したら張り直しですって、UNCHAINで毎回言われる。
- homepageに戻ってCredentials key = EthPrivateKey.fromHex("....
これ、たぶん、ウォレットの秘密鍵です。たぶん、で申し訳ありませんが。
なんで、たぶん、が2カ所あるかというと、実は検証ができてないんです。記事完コピで、変えたのは要するに、「自分の」ウォレットや、「自分の」project、「自分の」deployに関わるところです。で、これでちゃんとsimulatorで走るんですが、問題が一つあります。
- 私のsimulatorはMetaMaskに繋がっていない。私のMetaMaskはGoogleChromeの拡張機能ですから。
なので、投票者として、一回だけ投票する、という身分確認を兼ねたウォレットに接続できてないんじゃないかと思うんです。投票ボタンは押せますが、ずっとペンディングで投票結果が表示されません。
UNCHAINの課題だと、MetaMask繋がってないと、繋がってませんよと警告が出て、繋ぐボタンを押す、みたいな設計なんですけどね。
ということで、いろいろ新しい経験をして、赤々しいエラーはなく、simulatorも走るけど、肝心の投票結果が出ません、というちょっと残念な結末で本日は終了です。
次回はこれを、UNCHAINで使い慣れたフォーマットのスマートコントラクトに変更しつつ、フロントはflutter、simulatorで走ってね、をやっていきたいと思います。
次はもう少し頭を使って苦しみます。
次の記事