プラスプラス開発者ブログ

岩手県盛岡市のシステム開発会社「株式会社プラスプラス」の開発者ブログです。

Ethereumのプライベートネットを操作する(geth console)

こんにちは。

前回、Ethereumのプライベートネットを作りましたので、今回はプライベートネットを geth console から操作して動かしてみましょう。

plusplus-jp.hateblo.jp

ETHアドレス(イーサリアムのアカウント)は、最初に一つだけ作っただけでした。 コマンドで確認してみましょう。

> eth.accounts
["0xd61a98***************************deb3826"]

まだ、マイニングをしていませんでしたので、早速やってみましょう。 (プライベートネットなので、これで得られたETHにお金の価値は無いです)

最初に止まっていることを確認し、マイニングをスタートさせます。

> eth.mining
false
> miner.start(1)
null

このとき、ログファイル(geth.log)を見ていると絵文字付きでログが記録されて行きます。

INFO [04-23|17:43:32] 🔗 block reached canonical chain          number=6  hash=3308e2…8561d2
INFO [04-23|17:43:32] 🔨 mined potential block                  number=11 hash=0ad27a…b97d6e

上記のようなログが出たらマイニングを止めてみます。

> miner.stop()
true
> eth.mining
false
> eth.blockNumber
26

ブロックナンバーが26になっています。(止めたタイミングにより異なります)

このような形で、コマンドでマイニングを行ったり、ETHのコインを送金をコマンドから操作することが出来ます。

こちらのウェブページに詳細なコマンドが書かれていますので、参考になさってください。

github.com

プライベートネットを使用した簡単な動作確認はここまでです。

Ethereumのプライベートネットを作ってみる

こんにちは。

前回の記事でEthereumの環境の準備ができましたので、早速プライベートネットを作ってみましょう。

plusplus-jp.hateblo.jp

初期化する

プライベートネットのデータフォルダを作成します。

ホームディレクトリに private-net というフォルダを作り、その中に作成します。

$ cd
$ mkdir private-net
$ cd ~/eth-private-net/

初期化のためのファイル genesis.json を書きます。(vimじゃなくてもOKです)

$ vim genesis.json

↓そのファイルの中身

{
    "config": {},
    "nonce": "0x0000000000000042",
    "timestamp": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "gasLimit": "0x8000000",
    "difficulty": "0x4000",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "alloc": {}
}

つなげてみる

ブロックチェーンを初期化します。

geth --datadir ~/eth-private-net/ init ~/eth-private-net/genesis.json

初期化が終わりましたら、コインベース(マイニングの際の受け取りアカウント)を作ります。

$ geth --datadir ~/eth-private-net/ account new
INFO [04-23|16:17:56] Maximum peer count                       ETH=25 LES=0 total=25
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {d61a98***************************deb3826}

プライベートネットを起動します。

$ nohup geth --networkid 1234567890 --nodiscover --maxpeers 0 --datadir ~/eth-private-net/ \
    --rpc --rpcaddr "0.0.0.0" --rpcport=8545 --rpccorsdomain "*" \
    --ws  --wsaddr "0.0.0.0"  --wsport=8546  --wsorigins="*" \
    --port 60303 \
    --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" \
    --verbosity 6 2>> ~/eth-private-net/geth.log &

※開発するにあたって必要そうなオプションを全部つけてます。

動作しているかな・・・?

gethのJavascriptコンソールの立ち上げで動かしてみましょう。

$ geth attach ~/eth-private-net/geth.ipc

このような形でプロンプトが表示されます。

$ geth attach ~/eth-private-net/geth.ipc
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.3-unstable/darwin-amd64/go1.9.2
coinbase: 0xd61a98***************************deb3826
at block: 0 (Thu, 01 Jan 1970 09:00:00 JST)
 datadir: /Users/*******/eth-private-net
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 shh:1.0 txpool:1.0 web3:1.0

>

止め方

$ ps aux | grep [g]eth

プロセスIDを確認し、kill コマンドで停止させます。

$ kill 12345

再開するときは、もう一度起動させます。初期化するとリセットされてしまいますので、注意が必要ですね。

次回は、プライベートネットでいろいろな操作をする方法を書きたいと思います。

JPToken.org プロジェクトに技術参加しています

弊社は JPToken Project を通して最先端の暗号化通貨の世界を技術面でサポートしております。 発展中のBlockchainやSmart Contractの開発に積極的に取り組んでおります。

www.jptoken.org

f:id:plusplus-jp:20180517120531p:plain
JPToken.orgのウェブサイト

JPToken.org プロジェクトについて

暗号化通貨を活用し、日本を活性化することをVisionとする、非営利活動のプロジェクトです。

このプロジェクトは、まずは3年間をロードマップとして、大学生や若者を中心としたチーム構成で進めていきます。

JPTokenを使ってどのようなシステムやサービスを作っていくのかは、このプロジェクトに参加していただけるチームが考えながら決めていきます。毎年チームを募集し、1年毎のプロジェクトとして完結します。

ブロックチェーンというキーワードを聞いたことがあるにしても、どんなものなのか、どんな技術を学んでいけばよいのか、いろいろわからないことだらけだと思います。 こういったプロジェクトで実際に経験することで、各自が新しい可能性にチャレンジできるようになると面白いかなと思います。

プラスプラスではこのようなプロジェクトにも技術参加しております。

ご興味の有る方はぜひ参加をしてみてください。

Ethereum の環境構築(gethをインストールする)

こんにちは。

概要は前回の記事で書きましたので、具体的にどんなことができるのか、 プライベートネットを使って試してみたいと思います。

plusplus-jp.hateblo.jp

・・・がその前に環境を作りましょう。

※プライベートネット・・・使用できる技術はメインネットと同じですが、パラメータを変えて動作できるため、マイニングも簡単に行うことが出来ます。 本番ではありませんので、マイニングして得られたETHには価値はありません。

色々インストール

必要なものをインストールします。

geth・・・go言語で作られたEthereumクライアントです。(クライアントに対するサーバーがあるわけではないですが、クライアントと表現しています)

mist・・・公式のウォレットソフト。公式サイトからダウンロードできます。(画像を参照)

Ethereum Project

f:id:plusplus-jp:20180517120258p:plain
イーサリアムのウォレット・ダウンロードボタン


ちなみに、弊社ではMacを使用していますので、基本的にMacでの動作について書いていきます。

gethのインストールですが、まずはgoをインストールします。

$ brew install go

$ go version
go version go1.9.2 darwin/amd64

その後、gethをソースからインストールします。パッケージですと期待する動作にならなかったので、ソースから入れます。(難しくないです)

$ GOPATH="$HOME/go" 
$ mkdir -p $GOPATH/src/github.com/ethereum
$ cd $GOPATH/src/github.com/ethereum
$ git clone https://github.com/ethereum/go-ethereum
$ cd go-ethereum
$ git checkout master
$ go get github.com/ethereum/go-ethereum

準備が整ったらインストール。

$ go install -v ./cmd/geth

インストールした geth にパスを通してあげます。

$ vim ~/.bash_profile [ENTER]
export GOPATH="$HOME/go"
export PATH="/opt/local/bin:/opt/local/sbin:$PATH:$GOPATH/bin"

ファイルの再読込を行います。

$ . ~/.bash_profile

以下のように which コマンドでgethの場所が返ってくればパスの追加は成功。

$ which geth

バージョンも確かめておきます。

$ geth version
Geth
Version: 1.7.3-unstable
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9.2
Operating System: darwin
GOPATH=/Users/o.sawada/go
GOROOT=/usr/local/Cellar/go/1.9.2/libexec

これで環境の準備はOKです。

次回は、プライベートネットを作るところを書きたいと思います。

Ethereumの技術について

こんにちは。

Ethereumの技術について、ざっと概要を書きたいと思います。

Ethereum Solidity

Ethereumネットワーク上のEVM(Ethereum Virtual Machine:Ethereum仮想マシン)で動作するスマートコントラクトを記述するためのプログラミング言語です。

JavaScriptにフォーマットが似ていますが、クラスがある。また、変数の型がJavascriptとは違い、静的な型付けとなっている。

ほかにも、 他の言語で言うところの Class に相当する Contract を定義でき、継承もできます。

スマートコントラクト

www.bibitpost.com

いろいろ定義があるようです。

今までの技術でも同じことが機能的には実現できるのですが、以下の点が絶対的に違います。

  1. プログラムやデータがブロックチェーンに記録されてるので、改ざんできない(変更することが出来ない)
  2. そもそもプラットフォームが管理者不在でも問題ないブロックチェーンで動作する(インフラについて気にする必要がない)

Web3.js

Ethereum を制御する JavaScript のライブラリ。 制御には直接関連しないが、Ethereum に関連するユーティリティモジュールも含まれる。

Ethereum の概要

Web3.js から見た Ethereum の要素

Ethereum は以下のような構成になっているそうです。

Ethereum が動作する環境の種別

プライベートネット : 自分または自分の知るノードのみが参加するEthereumネットワーク。 開発用などはこちらで作業する。 普段はこれでOK。

テストネット : テスト用に運用されている開かれたネットワーク。

ライブネット : Ethereumの本番ネットワーク。

技術情報

一次情報

本家サイトはこちら。 ethereum.org

ソースはこちら。 github.com

メインネットのトランザクションを見たり出来ます。 https://etherscan.io/

学習に役立つサイト

ブロックチェーンEthereum入門 1 | NTTデータ先端技術株式会社

Solidity — Solidity 0.5.8 documentation

JavaScript API · ethereum/wiki Wiki · GitHub

Ethereum Stack Exchange

Create a cryptocurrency contract in Ethereum

リンク集のようになってしまいましたが、次回より具体的な内容を書いていけたらと思います。

開発者ブログを始めることになりました

はじめまして。

弊社も開発者ブログを始めることになりました。どうぞ宜しくお願い致します。

初めてになりますので、今私の方で担当している技術について簡単に書きたいと思います。

今、私の方で担当しているのはEthereumのスマートコントラクト関連技術で、 仮想通貨(暗号通貨)に関する技術です。

主に、

他のメンバーは、

  • ROS (Robot Operating System)を試している

ですとか、そういった事柄についてやっています。

具体的なお仕事の内容については、ここで全て書いていくわけにはいかないのですが、 社内で技術研究したことについて、少しずつ書いていきたいと思います。

それでは今後共、宜しくお願い致します。


www.plusplus.jp