Geth 全称是go-ethereum,是一个以太坊客户端,由go语言编写,是目前以太坊最常用的客户端。以太坊还有用C++、Ruby、Python、Java 等其他多种语言编写的客户端,不同类型的客户端是为了满足不同的需求场景。官方地址:https://github.com/ethereum/go-ethereum
参数详解:https://learnblockchain.cn/2017/11/29/geth_cmd_options/
创建目录 ./chainwork/private ,用来存放以太坊节点的数据。
// 创建chainwork目录
mkdir ~/chainwork/private
创世块文件genesis.json
创建配置文件 genesis.json 用于创建创世块和设置网络。
// genesis.json
{
"config": {
"chainId": 4224,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {
"0x0000000000000000000000000000000000000001": {"balance": "111111111"},
"0x0000000000000000000000000000000000000002": {"balance": "222222222"}
}
}
创世块参数详解
// nonce和mixhash是作为输入,让每个节点都可以通过计算来做
// difficulty 就是制定了本链一开始的挖矿难度,在我们的私有测试节点中, 这个值设得很低,这样就比较容易挖到矿
// alloc 可以预分配一些以太币给某些地址,这里我们不做预分配
// coinbase 就是当成功挖出 genesis 区块后,接收奖金的地址
// timestamp 本区块挖出来的时间戳,全网将依据前后 两个区块的时间戳之差来调整挖矿的难度
// parentHash 指向前一个区块的哈希指针,创世纪区块中的 parentHash 接地
// extraData 可用于存储任何信息
// gasLimit 规定了每一个区块中能够消耗的最大的 gas 值,也就事实上限制了区块的大小
// config 用来为这个私有网络确立一系列参数
// chainId 是本私有链的 ID
// homesteadBlock 指明 Homestead 版本的兼容的区块开始编号
// EIP155 兼容的区块开始编号,EIP155 - "Simple Relay Attack Protection
// EIP158 兼容的区块开始编号
启动Geth服务节点
// 以下操作创建了一个以太坊节点,这个节点并没有接入主网,而是一个私有网络。
// 目前在该网络中,只有一个节点,并且没有任何的账户。用户可以通过命令行来对以太坊网络进行交互。
cd ~/chainwork/private
geth init genesis.json --datadir ./data0
geth --datadir ./data0 --networkid 4224 --port 30303 --rpc --rpcport 8545 --rpcapi "eth,web3,personal,net,debug" --rpccorsdomain "*" console 2> log.txt
参数解析
// –datadir 代表文件夹地址,这里存储在当前目录下data0中,请自行修改。
// –nodiscover 代表该链条不希望被其他节点发现,
// console >> geth.log 代表将控制台输出到文件geth.log中去
// 当然从命令行模式退出,也很简单,只要打入exit, 即可退出
查看,创建账户
// 查看当前该区块链中共有几个账号,以及每个账号的公钥地址。
> eth.accounts
[]
//ubuntu为密码,账号是自动生成的
> personal.newAccount("ubuntu")
"0xb27cdf1f4b331eb2a1aa0f9a3a7076c65a915e41"
> eth.accounts
["0xb27cdf1f4b331eb2a1aa0f9a3a7076c65a915e41"]
账户解析
在以太坊系统中,状态是由被称为“账户”(每个账户由一个20字节的地址)的对象和在两个账户之间转移价值和信息的状态转换构成的。以太坊的账户包含四个部分:
随机数,用于确定每笔交易只能被处理一次的计数器
账户目前的以太币余额
账户的合约代码,如果有的话
账户的存储(默认为空)
账户解锁
> personal.unlockAccount(eth.accounts[0])
Unlock account 0x6bc56dbd2e99957c7906772a7cfdd923c155b270
Passphrase:
true
开启挖矿
> miner.start();
null
查看挖矿情况
//获取挖矿状态,true表示正在挖矿,false反之
> eth.mining()
true
获取账户余额
> eth.getBalance(eth.accounts[0])
585000000000000000000
> eth.getBalance(eth.accounts[0])
590000000000000000000
> eth.getBalance(eth.accounts[0])
590000000000000000000
跟踪挖矿日志
ubuntu@ubuntu:~/chainwork/private$ tail -f 10000 log.txt
tail: cannot open ‘10000’ for reading: No such file or directory
==> log.txt <==
INFO [09-08|04:19:45.389]
//windows10 Powershell下跟踪日志
Get-Content log.txt -Wait
停止挖矿
> miner.stop()
null