Macにイーサリアムをインスールして、送金してみる(テストネットワーク)

2018年1月30日

 

 

イーサリアムでのアプリケーション開発を
入りの部分だけ勉強したのでまとめます。

また、
タイトルに送金とあるので、
「え、お金使うの??」と不安になってしまう部分がある
かと思いますが、
安心してください、この記事では、
テストネットワークと言う自分しか存在しないチェーン上
での作業になるので、
実際にお金を動かしたりすることはありません。

それでは、
まずはイーサリアムって何という人へ

 

 

Ethereum – イーサリアム – とは

 

ビットコインと同じような中央の管理組織を持たない仮想通貨で、
時価総額は3兆3913億円(2017年11月13日時点)にものぼり
ビットコインの次に時価総額の大きな通貨となっています。

ビットコインとは違いイーサリアムブロックチェーン上にコントラクトを
保存できると言うことです。
コントラクトはSolidityと言うjavascriptライクな言語で記述することができ、
アプリケーションをブロックチェーン上に登録することが可能です。

そのコントラクトの実行には、
手数料が発生し、それらがイーサリアムのマイナーの
収入になります。

イーサリアムブロックチェーン上には、
すでに複数の分散型のアプリケーションが構築されており、
それらはこちらのサイトに公開されてあります。
State of the ÐApps — 821 Projects Built on Ethereum

ちなみに、
中央の管理組織を持たないことを生かしたソーシャルメディアである
Akasha

音楽業界の著作権管理と印税の支払いを自動化するプラットフォームである
Ujomusic
などのプロジェクトが紹介されています。

 

 

イーサリアム自体に興味が湧いて、
今のうちに買っておきたいと言う方には、
こちらの記事を紹介しておきます。

まだ知らない?仮想通貨の買い方 ビットコイン、イーサリアム、ネム、リップルetc…


 

 

 

ブロックチェーンの仕組みがいまいちと言う方は、
こちらの記事が参考になると思います。

ブロックチェーンの仕組みがわかる記事”How does blockchain really work? I built an app to show you.”を訳してみた

 

 

Etheriumクライアントをインストール

 

それでは早速Ethereumに接続する
クライアントツールが必要なので
インストールをしていきます。

クライアントツールもいくつか種類はあるのですが、
今回は一番よく使われているであろう、
go-ethereumを利用します。

通称gethです。
読み方はそのままゲスで大丈夫です。
躊躇せず読んじゃってください。

Macにインストールする場合のコマンドは
こちらになります。

 

brew tap ethereum/ethereum
brew install ethereum

 

エラーがなくインストールできていれば完了です。
インストールできるているかは下記のように
確認しましょう。

 

$geth version
Geth
Version: 1.7.2-stable
Git Commit: 1db4ecdc0b9e828ff65777fb466fc7c1d04e0de9
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9.2
Operating System: darwin
GOPATH=
GOROOT=/usr/local/Cellar/go/1.9.2/libexec

 

 

Gethを起動してテストネットワークに接続する

 

今回接続するのはローカルプライベートテストネットなので、
冒頭で説明したように、
お金の心配だったり他の方に迷惑をかける恐れは
ないので、そのまま安心してお進みください。

 

データディレクトリを作成

送受信したブロックのデータやアカウント情報を格納するための、
ディレクトリを作成します。

mkdir my-first-eth

 

Genesisファイルを作成

 

Genesisファイルは、
ブロックチェーンの一番最初のブロックチェーンの
情報をかいた設定ファイルのようなものです。
ローカルプライベートテストネットを利用する場合は、
ゼロからブロックチェーンを構築するため、
このファイルが必要となります。

 

myGenesis.json

{
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x400",
"alloc": {},
"coinbase": "0x3333333333333333333333333333333333333333",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x",
"gasLimit": "0x8000000",
"config": {}
}

 

Gethの初期化

作成したGenesisファイルで初期化をします。

geth --datadir /your/env/path/my-first-eth init /your/env/path/myGenesis.json

 

Gethの起動

起動のコマンドはこちらになります。

geth --networkid 10 --nodiscover --maxpeers 0 --datadir /your/env/path/my-first-eth console 2>> geth.log 

 

それぞれのオプションを説明すると

–networkid
ネットワーク識別子。0 ~ 3 は予約済みですので、
指定する際は他の値を指定します。

–nodiscover
起動したノードを他のノードから検出できないようにします。

–maxpeers
キドウシタノードに接続できるノードの数です。0を指定すると、
他のノードとは接続しなくなります。

console
対話型のJavaScriptコンソールを呼び出します。

問題なければ対話型のコンソールが表示され、
プロンプトが現れます。

ここまででgethの起動は完了です。

 

 

 

 

 

アカウントの作成

 

 

イーサリアムを送金する必要があるので、
アカウントを作成する必要があり、
作成するユーザーのことはEOA ( Externally Owned Account)と
呼ばれます。

コマンドは以下になります。
引数の文字列はパスワードになるので、
忘れないようにしましょう。

personal.newAccount("password")

 

送金を行うには、
送り手と受け手が必要ですので、
もう一つアカウントを作成します。

personal.newAccount("drowssap")

 

 

アカウントを作成した際に表示された文字列は、
作成したアカウントのアドレスになります。
送金を行う際はこのアドレスを利用して、送金を行うことになります。

作成したアカウントを確認します。

> personal.newAccount("password")
"0x73c935b7ade47b3a3efa29769e4db1cc91aa2e88"
> 
> 
> 
> personal.newAccount("drowssap")
"0x0c792c39d206ae2d2a0df7b7db7d365c3067a137"
> 
> 
> eth.accounts
["0x73c935b7ade47b3a3efa29769e4db1cc91aa2e88", "0x0c792c39d206ae2d2a0df7b7db7d365c3067a137"]

 

 

残高の確認・マイニング

下記のコマンドで残高を確認できますが、
まだマイニングを行なっていないため残高は0となっています。

< eth.getBalance(eth.accounts[0])
0

 

ブロックチェーンのブロック数も0になっています。

< eth.blockNumber
0

 

この状態では、
まだローカルのブロックチェーン上に一つのブロックも生成されて
いない状態なので、
マイニングでブロックを生成していきます。

< miner.start(1)
null

 

しばらくするとブロックが生成されてきます。

<  miner.stop()
true

 

そして残高を確認してみると

< eth.getBalance(eth.accounts[0])
195000000000000000000
> web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")
195

195ETHが最初に作成したアカウントに
入金されています。
これでマイニング成功です。
※もちろん、これはテスト環境でのみ使える通貨で金銭的な価値はありません。

ここまで準備ができたので最後は送金を行います。

 

 

 

 

送金

 

 

はじめにアカウントの残高を確認します。

> eth.getBalance(eth.accounts[0])
195000000000000000000
> 
> 
> eth.getBalance(eth.accounts[1])
0
> 

 

残高を確認すると、
account1には195ETH、
account2には0ETHであることがわかります。

また、送金を行うには
アカウントのロック解除が必要ですので、
コマンドでロックを解除します。

personal.unlockAccount(eth.accoutns[0],'password',0)

 

それでは、
account1からaccount2に100ETHを送ってみます。

> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(100,"ether") })
"0xd404f7d67c0df7c8388db84efe9f1523f6134b18b5b615121ee236281e5db9d8"
> 
> 
> 
> eth,getTransaction("0xd404f7d67c0df7c8388db84efe9f1523f6134b18b5b615121ee236281e5db9d8")
ReferenceError: 'getTransaction' is not defined
    at <anonymous>:1:5

> eth.getTransaction("0xd404f7d67c0df7c8388db84efe9f1523f6134b18b5b615121ee236281e5db9d8")
{
  blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  blockNumber: null,
  from: "0x73c935b7ade47b3a3efa29769e4db1cc91aa2e88",
  gas: 90000,
  gasPrice: 18000000000,
  hash: "0xd404f7d67c0df7c8388db84efe9f1523f6134b18b5b615121ee236281e5db9d8",
  input: "0x",
  nonce: 0,
  r: "0xc69cac899af8c2e914f3dda00379bd9c6df4478e465d96e5521042b0f6ce1120",
  s: "0x677930addcbeb8299e0ff52a1e7fe79cd4db2b10714b3706faf08b8aa2e84b9e",
  to: "0x0c792c39d206ae2d2a0df7b7db7d365c3067a137",
  transactionIndex: 0,
  v: "0x1b",
  value: 100000000000000000000
}
> 

 

これで送金は完了しました。

が、
残高を確認してみると
残高が移動していないように見えます。

> eth.getBalance(eth.accounts[0])
195000000000000000000
> 
> 
> 
> eth.accounts[1]
"0x0c792c39d206ae2d2a0df7b7db7d365c3067a137"
> eth.getBalance(eth.accounts[1])
0
> 

 

これは、
送金をしたあとにマイニングで取引が承認されていないためです。
再度マイニングを行い、
残高を確認してみると100ETHがaccount2の残高に
反映されていることが確認できます。

> miner.start(1)
null
> 
> miner.stop()
true
> 
> 
> eth.getBalance(eth.accounts[1])
100000000000000000000
> web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
100
> 

 

これでイーサリアムの送金はできました!

以上です!!