概要
GETHは直感的にイーサネット広場の動作を理解し、さらにGETHを使用してチェーンをブロックすることができる公式golangスクエアイーサネットクライアントです。
次に、アカウント、鉱業、プロセスのトランザクションを作成し、プライベートチェーンを構築するためにGETHで設定します。
プライベートチェーンを構築
プライベートチェーンを構築するために、実験には直接ETH公共チェーン上の実験は、それが本当のイーサネット通貨を消費する場合は、最初のステップであるが、実際の公共チェーン上で、パソコンは鉱山を掘ることはほとんど不可能です。
シンプルなチェーンGETH民間の建物では、最初の作成ブロックを定義する必要があり、参照:https://github.com/ethereum/go-ethereum/wiki/Private-network
genesis.json:
{
"config": {
"chainId": 100,
"homesteadBlock":0,
"eip155Block":0,
"eip158Block":0
},
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x80000000",
"difficulty": "0x1",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": { }
}
一度設定、スタート
mkdir geth-test
cd geth-test
geth --datadri ./data init genesis.json
アカウントを作成します。
アカウントの作成は簡単ですが、JavaScriptコンソールのGETHログイン
geth --datadir ./data --networkid 100 console
どのたnetworkIDに構成されてgenesis.json chainId
ログインした後:
> personal.newAccount() # 创建新的账户
> eth.accounts # 查看目前有哪些账户
採掘
鉱業は非常に簡単です起動し、上記の操作コンソール
> miner.start()
数分間待機した後、その後、
> miner.stop()
次のように私のテストマシン2CPU 8Gメモリ、掘る約5分、ETH掘っ:
> acc0 = eth.accounts[0] # 这个私链上目前只有一个测试账号
> eth.getBalance(acc0) # 这里使用 wei 作为单位
2.46e+21
> web3.fromWei(eth.getBalance(acc0), 'ether') # 相当于 2460 个以太币
2460
注プライベートチェーンイーサネット通貨に掘らこれはテスト目的であり、公共のチェーンで取引されているか、あるいは行われていません:)
トランザクション
鉱業は、あまりにもシンプルな取引は非常に簡単です、対処するために、我々はまだアカウントを作成する必要があります
> personal.newAccount()
> eth.accounts
["0xd4b42869954689395e502daa6dd9a02aa34dbaff", "0x500aaa5b196741a4c768fa972b5f16a7e0c9c1e5"]
> acc0 = eth.accounts[0]
> acc1 = eth.accounts[1]
> web3.fromWei(eth.getBalance(acc0), 'ether') # acc0 的余额
2460
> web3.fromWei(eth.getBalance(acc1), 'ether') # acc1 的余额
0
> val = web3.toWei(1) # 准备转账的金额 1 eth
"1000000000000000000"
> eth.sendTransaction({from: acc0, to: acc1, value: val}) # 执行转账, 如果这里出现错误, 提示账户被锁定的话, 解锁账户
> personal.unlockAccount(acc0) # 解锁时, 输入创建账户时的密码
Unlock account 0xd4b42869954689395e502daa6dd9a02aa34dbaff
Password:
true
> eth.sendTransaction({from: acc0, to: acc1, value: val}) # 再次转账, 这次应该能够成功, 如果第一次就成功的话, 不需要这步
# 再次查看余额, 发现2个账户的余额没变
> web3.fromWei(eth.getBalance(acc0), 'ether')
2460
> web3.fromWei(eth.getBalance(acc1), 'ether')
0
# 余额没变, 是因为我们前面已经停止挖矿(miner.stop()), 没有矿工来确认这笔交易了
> miner.start()
> miner.stop() # 启动10来秒左右再 stop
# 再次查看余额, acc1 账户上多了 1 个以太币, 但是 acc0的以太币不减反增, 这是因为刚才的挖矿产生的以太币以及交易手续费都给了 acc0
# 这里的挖矿时如果不指定账号, 默认会把挖到的以太币给 eth.accounts 中的第一个账号
> web3.fromWei(eth.getBalance(acc0), 'ether')
2494
> web3.fromWei(eth.getBalance(acc1), 'ether')
1