LoginSignup
4
6

More than 5 years have passed since last update.

Macでethereumを動かしてみる

Posted at

mac上でgo-ethereumのソースコードをビルドし、マイニング、送金までを動かしてみます.

環境

  • macOS High Sierra
  • Xcode インストール済み
  • homebrew インストール済み

Ethereumのビルド

go言語環境のインストール

$ brew install go

ソースコード取得

$ git clone -b release/1.3.6 https://github.com/ethereum/go-ethereum.git

gethのビルド

$ make -C go-ethereum geth

ビルド確認

$  ./go-ethereum/build/bin/geth version
Geth
Version: 1.3.6
Git Commit: bf324bd24be9036046e36c6248b2d7c31cce9eca
Protocol Versions: [63 62 61]
Network Id: 1
Go Version: go1.9.2
OS: darwin
GOPATH=
GOROOT=/usr/local/Cellar/go/1.9.2/libexec
$

gethにパスを通しておく

テストネットワークの構築

gethの起動

$ mkdir eth_data
$ geth --networkid "123" --datadir "eth_data" --olympic console
I1118 18:06:25.569527   83720 flags.go:425] WARNING: No etherbase set and no accounts found as default
I1118 18:06:25.569874   83720 database.go:71] Alloted 16MB cache to eth_data/chaindata
I1118 18:06:25.573234   83720 database.go:71] Alloted 16MB cache to eth_data/dapp
I1118 18:06:25.575204   83720 backend.go:314] Protocol Versions: [63 62 61], Network Id: 123
I1118 18:06:25.575485   83720 backend.go:332] Starting Olympic network
I1118 18:06:25.576533   83720 backend.go:362] Blockchain DB Version: 3
I1118 18:06:25.577099   83720 blockchain.go:214] Last header: #0 [fd4af92a…] TD=131072
I1118 18:06:25.577113   83720 blockchain.go:215] Last block: #0 [fd4af92a…] TD=131072
I1118 18:06:25.577119   83720 blockchain.go:216] Fast block: #0 [fd4af92a…] TD=131072
I1118 18:06:25.581048   83720 cmd.go:115] Starting Geth/v1.3.6-bf324bd2/darwin/go1.9.2
I1118 18:06:25.581197   83720 server.go:311] Starting Server
I1118 18:06:27.679335   83720 udp.go:212] Listening, enode://7425e50f0b94ee0552fb814272cea682e80e4ba05ab6d3cc40507b366dc5e275ab0219f06006d6fa4a0da409e41dd64f1d126de3061301f80f1c6310f3a5635a@[::]:30303
I1118 18:06:27.679612   83720 server.go:552] Listening on [::]:30303
I1118 18:06:27.679659   83720 backend.go:526] Server started
I1118 18:06:27.680075   83720 ipc.go:112] IPC service started (eth_data/geth.ipc)
instance: Geth/v1.3.6-bf324bd2/darwin/go1.9.2
 datadir: eth_data
coinbase: null
at block: 0 (Thu, 01 Jan 1970 09:00:00 JST)
modules: admin:1.0 db:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 shh:1.0 txpool:1.0 web3:1.0
>

アカウント作成

アカウント作成(送受信するため2つ作成)

> personal.newAccount("testuser1")
"0xe3b88b800ba2494219824863c96cf7c36e2903f5"
> personal.newAccount("testuser2")
"0x8f25b1d49fa60936b1b0b35d5d337a6966163b5c"

アカウントの確認

> eth.accounts
["0xe3b88b800ba2494219824863c96cf7c36e2903f5", "0x8f25b1d49fa60936b1b0b35d5d337a6966163b5c"]

残高の確認

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

マイニング

ブロック数の確認

> eth.blockNumber
0

マイニング

> miner.start()
I1118 18:10:04.793788   83720 backend.go:584] Automatic pregeneration of ethash DAG ON (ethash dir: /Users/hashizume/.ethash)
I1118 18:10:04.793843   83720 backend.go:591] checking DAG (ethash dir: /Users/hashizume/.ethash)
I1118 18:10:04.793922   83720 miner.go:119] Starting mining operation (CPU=4 TOT=5)
true
> I1118 18:10:04.796171   83720 worker.go:569] commit new work on block 1 with 0 txs & 0 uncles. Took 2.216442ms
I1118 18:10:04.796271   83720 ethash.go:220] Generating DAG for epoch 0 (size 1073739904) (0000000000000000000000000000000000000000000000000000000000000000)
I1118 18:10:05.528098   83720 ethash.go:252] Generating DAG: 0%
I1118 18:10:09.470387   83720 ethash.go:252] Generating DAG: 1%
...
I1118 18:16:43.767504   83720 ethash.go:252] Generating DAG: 98%
I1118 18:16:48.587833   83720 ethash.go:252] Generating DAG: 99%
I1118 18:16:52.545269   83720 ethash.go:252] Generating DAG: 100%
I1118 18:16:52.547874   83720 ethash.go:237] Done generating DAG for epoch 0, it took 6m47.752030111s
I1118 18:16:55.442401   83720 worker.go:348] 🔨  Mined block (#1 / 9a5b753e). Wait 5 blocks for confirmation
I1118 18:16:55.444259   83720 worker.go:569] commit new work on block 2 with 0 txs & 0 uncles. Took 1.823975ms

...

ずっとマイニングし続けるので適当なところでminer.stop()と打って止める

I1118 18:20:49.618426   83720 worker.go:569] commit new work on block 223 with 0 txs & 0 uncles. Took 316.812µs
I1118 18:20:49.618450   83720 worker.go:447] 🔨 🔗  Mined 5 blocks back: block #217
I1118 18:20:49.620637   83720 worker.go:569] commit new work on block 223 with 0 txs & 0 uncles. Took 365.96µs
I1118 18:20:49.805888   83720 worker.go:348] 🔨  Mined block (#223 / cc113f58). Wait 5 blocks for confirmation
I1118 18:20:49.806210   83720 worker.go:569] commit new work on block 224 with 0 txs & 0 uncles. Took 285.018µs
I1118 18:20:49.806234   83720 worker.go:447] 🔨 🔗  Mined 5 blocks back: block #218
I1118 18:20:49.808358   83720 worker.go:569] commit new work on block 224 with 0 txs & 0 uncles. Took 215.045µs

true
>

送金

残高確認

> eth.getBalance(eth.accounts[0])
334500000000000000000

大金持ち!

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

貧乏!

送金

> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(1, "ether")})
Please unlock account e3b88b800ba2494219824863c96cf7c36e2903f5.
Passphrase:

パスフレーズを求められるので適当な文字列を入力. ここでは"testuser1"とした.

Account is now unlocked for this session.
I1118 18:28:07.461451   83720 xeth.go:1028] Tx(0x13298e3e6904a874690ee5cb0e76cafa8bd141998070b8114289699f2e87bd36) to: 0x8f25b1d49fa60936b1b0b35d5d337a6966163b5c
"0x13298e3e6904a874690ee5cb0e76cafa8bd141998070b8114289699f2e87bd36"
>

未確定トランザクションの確認

> eth.pendingTransactions
[{
    data: "0x",
    from: "0xe3b88b800ba2494219824863c96cf7c36e2903f5",
    gas: "90000",
    gasPrice: "20000000000",
    hash: "0x13298e3e6904a874690ee5cb0e76cafa8bd141998070b8114289699f2e87bd36",
    nonce: "0",
    to: "0x8f25b1d49fa60936b1b0b35d5d337a6966163b5c",
    value: "1000000000000000000"
}]

マイニングの開始

> miner.start()

miner.stop()で止める.

未確定トランザクションが消えていることを確認.

> eth.pendingTransactions
null

送金の確認

> eth.getBalance(eth.accounts[1])
1000000000000000000
>

増えてる!送金成功!

gethの停止

> exit
4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6