Ethereum でスマートコントラクトで簡単なアプリケーションを試す その1

技術メモ

今回は こちらの書籍を参考に、Ethereum でスマートコントラクトで簡単なアプリケーションを作ってみることにする。
著作権上、サンプルソースのコードは乗せてしまうのはまずそうなので、ざっくり手順のみ。

Browser SolidityをMacにインストール

Browser Solidity
ブラウザ上でContractのコーディングができる。

Browser-Solidityより mac上にインストールしていくことにした。npmはすでにインストールしているものとする。

$ git clone https://github.com/ethereum/browser-solidity.git
$ cd browser-solidity/
$ npm install

これでinstallが完了。
次に起動して、実際に動作するか確認。

$ npm start 

したあとに、ブラウザで http://127.0.0.1:8080/ にアクセスすると・・・

特につっかかることなく、確認できた。
じゃぁ、これで docker イメージの ethereum テストネットワークにつなげてみる。

docker イメージの ethereum テストネットワークにBrowser Solidityをつなげる

dockerコンテナからイメージつくりなおして run してポートフォーワーディングす流ことにした。
(iptablesでnat設定しようと思ったが、なぜかubuntuイメージ上だとうまくいかないのでやめた。作業メモを下方に残しておく)

$ docker commit ethereum todoroki:ethereum

その後、作ったイメージを起動する。

$ docker run -i -t -p 8545:8545 -d --name ethereum-todoroki todoroki:ethereum /bin/bash

Contractのデプロイ

ここからいよいよContractのデプロイを行う。

まず、gethの起動

$ docker exec -it ethereum-todoroki bash
# geth --datadir /root/ethereum/data --networkid 15 --rpc --rpcaddr "172.17.0.2" --rpcport 8545 --rpccorsdomain "*" --rpcapi "net,eth,web3,personal" --testnet console

そして、ブラウザ上のsolidityにコードを入れエンドポイント等設定をして

Createボタンを押したら

callback contain no result Error: authentication needed: password or unlock

というエラーが発生。
これ、ユーザーのアカウントまたアンロックしてやればよいだか?

こちらのトランザクションのアンロック??
うーん、わからん。

とおもったのだけど、ダメ元でアドレスをアンロック。

> personal.unlockAccount(eth.accounts[0], "testuser1")
true
> personal.unlockAccount(eth.accounts[1], "testuser2")
true

そのあと、もう1回createしたら

Waiting for transaction to be mined…

の文字が!?

と、gethのログに以下出力発生! やっとcontractをsubmitできたようだ。

> INFO [05-01|10:23:42] Submitted contract creation              fullhash=0xcefc3a599c7fab1f999dcb6a0d6eff1b5254726727de80ba7d0169c221b1da64 contract=0x0455e51ebe384308921b292048d5236b44b7c44a

submitできたので、そのあと「At Address」ボタンおしてみると以下画面が。

ここで、gethのログにでていた contract の文字を入れてみた・・・があってるのか?
入れてOK押すと

アドレスらしき文字がでてきた。
冒頭で紹介した本によるとこちら使うので、ちゃんとメモ。

ただ、画面に

Waiting for transaction to be mined…

って記載があるから、gethでmineもう1度実施してみるか。
次は、Contract動くところまでやるぞ。

一通り動かしたら1つずつ意味を理解していく。

[保留]docker内でiptablesを使いNAT設定

iptablesでポートフォーワーディングできるのでそれで対応する。

dockerコンテナの中にログインして、自分のipアドレス確認。

$ docker exec -it ethereum bash
# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 304f219a74bb

172.17.0.2 か。
ということは、おそらくホストは 172.17.0.1。

iptablesで設定する。
Dockerコンテナのポートを後から解放する方法 の記事を見て、早速iptablesで設定をしてみる。

# iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80
iptables v1.6.0: can't initialize iptables table `nat': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.

と、早速エラーがでた。
Pitfalls when debugging Netfilter にエラー説明が書いてあったのでいろいろ試してみたが、、、うまくいかないので、一旦保留。

Sponsored Link

ビットコイン(Bitcoin)、イーサリアム(Ethereum)、リップル(Ripple)、ネム(NEM)などの仮想通貨を買うならコインチェックがおすすめです。

※アプリは指値売買ができず手数料が高いので、アプリをダウンロードするのではなくメール&パスワード登録へ!まずは5万円ほど入金して仮想通貨とブロックチェーンの世界を楽しんでください!

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

コメントはまだありません

コメントを残す

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

CAPTCHA


miningpoolhub
miningpoolhubのAPIを使って自動スイッチングを試してみる in ethOS

* アイキャッチの男性は、Flicker上のライセンスフリーの画像ひっぱってきているだけで、本文とま …

NEM
[memo] NEMを送金しようとするとFAILURE_TIMESTAMP_TOO_FAR_IN_FUTUREが出る

Docker上のコンテナで、NEM-libraryを使ってmosaicの送金を試していたところ FA …

NEM
NEMのテストネットワークで独自通貨を試す

NEMアプリケーションを作る際にテストネットワークでのテスト非常に重要になってきます。 このため今回 …