ethereum入門のwalletコードの写経して気になったことなどをまとめた

いつもお世話になっているethereum入門のwalletを写経によって作成したいと思い立ちました。

Meteor

作成するにあたりMeteorというフレームワークを使いますが、これがかなり便利です。
というかすごい。

初期設定

server ディレクトリ以下のファイルは、サーバサイドのみで実行されます。(今回作成するwalletでは全てクライアント(ブラウザ)側で処理を行い、サーバ側の処理を行わないためserverディレクトリごと削除しました。)


client ディレクトリ以下のファイルはクライアントサイド(ex.ブラウザ上)のみで実行されます。
プロジェクト直下のファイル、および、上記以外のディレクトリ以下のファイルはサーバサイドとクライアントサイドの両方で実行されます。


また、静的なコンテンツ、例えば画像データやフォントデータ等はpublicディレクトリに配置されるのが慣習です。


MeteorではプロジェクトRoot以下のファイルをロードする順序として、libという名称のディレクトリ以下のファイルを最初に読み込むというルールがある

サーバーサイドからクライアントサイドまで全てjavascriptで実装できます!
iOSからandroidまで全てjavascriptで実装できる!

ちょっとすごすぎないか…

さらに、もっともいいと思ったのは、開発環境が超簡単に構築できます。
Railsをやった人ならばすぐに順応できると思います。
公式サイトをご参考に。

applicationの起動は、

meteor

とルートディレクトリで打つだけ!
そして、localhost:3000へブラウザからアクセスすると表示されます。

Meteor

ですがもちろん、gethは別途起動しなくてはいけません。

デプロイ

Meteorの特徴として、「Meteorで開発したWebアプリケーションをコマンド一つで世界に公開できる」というものがあります。公開は作成したアプリケーションのディレクトリで例えば

$ meteor deploy hogehoge

すごい!

ここでhogehogeの部分で公開する際のURLのサブドメインを指定しています。この場合URL「http://hogehoege.meteor.com 」で開発したアプリケーションにアクセスできるようになります。

geth

コマンドは以下のものを使いました!

geth --networkid "10" --nodiscover --datadir "/Users/yoheitaonishi/block_chain/geth/" --mine --unlock 63c371ecebe2fde02c1158ca8aea640733acdf0a --rpc --rpcar "localhost" --rpcport "8545" --rpccorsdomain "*" console 2>> /Users/yoheitaonishi/block_chain/geth/geth_err.log

いつも意味を忘れてしまうのでメモします。
--datadirでgethのディレクトリを指定します。
--unlockではkeystoreのアドレスを指定します。
gethのディレクトリにkeystores/UTC--2018-03-27T09-54-28.045203416Z--63c371ecebe2fde02c1158ca8aea640733acdf0aみたいなのがあるはずなので、それを指定します。

疑問点の解消

写経している時に気になった点をメモ代わりに記しておきます。
本記事はこちらがメインとなります…

walletを開発するにあたり着手する部分はどこになるのか?

前掲の構成図には、Ethereum上のアプリケーション開発イメージを示した。 GUIフロントエンドをJavaScript +Web3.jsで、Solidityと呼ばれる言語でコントラクト(Ethereum上で実行する任意の計算)をそれぞれプログラミングするわけだ。

イーサリアムの開発対象はDappのUIと、contractだが、walletはどうすればいいのだろうか?

gethの自動起動

  • 上記コマンドのconsoleのオプションを外したコマンドを実行(普通にgethコマンドで起動するだけです)
  • プロンプト上でパスワードを聞かれたら、入力。
  • [Ctrl]+[Z]キーを押下しプロセスを一時停止
  • bgコマンドを実行し、プロセスをバックグラウンド実行に移行
    便利だけど、これどうやってとめるんだ…
    普通にpsしてkillしかないのだろうか。

gethでプライベートネットワークを構築するには?

こちらを参考にできそうです。

nodeって何だったか忘れてしまった

自分自身もnodeとなりネットワークに参加します。

peerとnodeの違いとは?

It’s a language thing about the relationship. It’s like “people” and “friends”. It’s not that friends aren’t also people. We might say that people are friends because they have a certain relationship to us.
(訳)関係による違いで、人々と友人のような違い。友人は人々ではないが、特別な関係の人々は友人となる。

Ethereum nodes are initially alone, and then they seek out other nodes to talk to. When nodes agree to talk, they become peers to each other.
(訳)イーサリアムのnodeは単体としてイニシャライズされる。そして、他のnodeを探し始める。そのnodeが他のnodeに受け入れられた時にpeersとなる。

プライベートネットワークでapplicationを作成するのはどうすればいいの?

以下を参考にしましょう。


Dappsの環境を構築するには何が必要か?

まず、Dappsを構築するにあたって、何が必要になるでしょうか?
まだまだ触りだしてから間もないですが、イーサリアムで開発するブラウザで表示するタイプのアプリケーションのときは以下の3つかと思っています。

  • プログラムのコード(コントラクトコードを含むアプリケーション全体のプログラミングコード)
  • ブラウザ表示させるためのapplicationを起動(truffleやMeteor)
  • nodeとの接続のためのapplicationを起動(geth)

gethの役割がイマイチわからない

By installing and running geth, you can take part in the ethereum frontier live network and
* mine real ether
* transfer funds between addresses
* create contracts and send transactions
* explore block history
* and much much more

gethを起動しnodeと接続することで、マイニングができたり、暗号通貨の取引ができたりします。

gethのコマンドが意味していることがイマイチわからない

gethのオプションはどんなものがあるのか?

--config value

TOML configuration file
指定されないことが多い。TOMLファイルを置いていない。

--datadir "/home/karalabe/.ethereum"

Data directory for the databases and keystore
gethでetheriamのアカウントを作成した時のものを指定。

--keystore

Directory for the keystore (default = inside the datadir)
--datadirオプションと異なる場合は指定。
keystore fileとは、

an encrypted version of your unique Ethereum private key that you will use to sign your transactions.

--nousb

Disables monitoring for and managing USB hardware wallets
usbを使えないようにするため。

--networkid value

Network identifier (integer, 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby) (default: 1)
ネットワークの指定。

  • Homestead (1) was the first major upgrade (1.1) of the Frontier network in March 2016. It did not replace Frontier but upgraded it.

パブリックなメインネットワーク。

  • Ropsten (3) is a new Homestead-equivalent testnet launched in late 2016 due to multiple issues in the old testnet; it finally replaced Morden. Ropsten was attacked in February 2016 and declared dead. But with great effort it has been revived on March 2017.

新しいテストネット

  • Kovan (4) is the first proof-of-authority (PoA) testnet issued by Ethcore, Melonport, and Digix after the Ropsten attacks.

POAのテストネット

networkid:”1″及びNetwork Listening Port:”30303″はパブリック用なので、それ以外の番号を指定する。

  • Rinkeby, another PoA testnet is currently being drafted.
    POAのテストネット

deployするときは、Homesteadにすればいいんでしょうか?
テストはRopstenで。コミュニティ内で情報を共有するときはKovanとかRinkebyでテストすればいいのかな?
なので、HomesteadとRopstenはPoW、KovanとRinkebyはPoAで証明。

--testnet

Ropsten network: pre-configured proof-of-work test network

--rinkeby

Rinkeby network: pre-configured proof-of-authority test network
このあたりはネットワークの指定ですね。

--syncmode "fast"

Blockchain sync mode ("fast", "full", or "light")

--ethstats value

Reporting URL of a ethstats service (nodename:secret@host:port)

--identity value

Custom node name

--lightserv value

Maximum percentage of time allowed for serving LES requests (0-90) (default: 0)

--lightpeers value

Maximum number of LES client peers (default: 20)

--lightkdf

Reduce key-derivation RAM & CPU usage at some expense of KDF strength
※ genesis.jsonに書いたchainIdがnetworkIdとなります。

nodeはマイニングされるのか?

//接続先ノードのマイニング状態の取得
//マイニング中であればtrue、そうでなければfalse
isMining: function(){
return web3.eth.mining;
},

計算処理を早く行ったノード(長期的観点に立てば、計算量の多いノード)に対して報酬が支払われます。

RPC接続とは


NEMのウォレットも簡単に作れるのか

簡単かはわかりませんが作れるみたいです。

今後

このチュートリアルをまねて簡単なwalletを本番環境にデプロイしたい。

コメントを残す

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