Geth介绍
Geth 又名 go-ethereum,是 ethereum 协议的具体落地实现,通过 geth,可以实现 ethereum 的各种功能
Geth 可以被安装在很多操作系统上,包括 Windows、Linux、Mac 的 OSX、Android 或者 iOS 系统。
MacOS下安装ethereum
brew update
brew upgrade
brew tap ethereum/ethereum
brew install ethereum
生产创世区块文件
将如下内容保存为genesis.json文件
{
"config": {
"chainId": 1008,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"ethash": {}
},
"difficulty": "1",
"gasLimit": "8000000",
"alloc": {
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
}
}
创世块文件的部分内容,我们可以简单了解一下:
coinbase 挖矿后获得奖励的账户地址
difficulty 挖矿难度
gasLimit 一个区块所能容纳gas的上限
nonce 随机值
mixhash 一个256位的哈希证明,与nonce相结合,验证本块的有效性
extraData 附加信息,随意填写
parentHash 前一块的hash值,由于是创世块,所以为0
Geth搭建私网
步骤01:利用创世块文件初始化
geth init --datadir ./data genesis.json
在此步骤,主要是利用创世块进行文件初始化,指定一个数据目录,当看到类似下面的结果代表初始化成功。
INFO [02-14|16:42:36.647] Maximum peer count ETH=50 LES=0 total=50
INFO [02-14|16:42:36.796] Allocated cache and file handles database=/Users/yk/ethdev/yekai1003/rungeth/data/geth/chaindata cache=16.00MiB handles=16
INFO [02-14|16:42:36.861] Writing custom genesis block
INFO [02-14|16:42:36.862] Persisted trie from memory database nodes=0 size=0.00B time=13.579µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [02-14|16:42:36.866] Successfully wrote genesis state database=chaindata hash=c1d47d…d9ea3e
INFO [02-14|16:42:36.872] Allocated cache and file handles database=/Users/yk/ethdev/yekai1003/rungeth/data/geth/lightchaindata cache=16.00MiB handles=16
INFO [02-14|16:42:36.899] Writing custom genesis block
INFO [02-14|16:42:36.899] Persisted trie from memory database nodes=0 size=0.00B time=5.75µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [02-14|16:42:36.900] Successfully wrote genesis state database=lightchaindata hash=c1d47d…d9ea3e
步骤02:创建挖矿账户
geth account new --datadir data
创建时需要输入口令,并再次确认口令,不要忘记!!不要忘记!!不要忘记!!
步骤03:启动Geth节点
geth --datadir ./data --networkid 10086 --rpc.enabledeprecatedpersonal --http --http.addr 0.0.0.0 --http.vhosts "*" --http.api "net,eth,web3,personal" --http.corsdomain "*" --snapshot --allow-insecure-unlock console 2> 1.log
这个命令的启动参数比较长,我们也需要针对参数进行介绍:
-
datadir 指定之前初始化的数据目录文件
-
networkid 配置成与配置文件config内的chainId相同值,代表加入哪个网络,私链就自己随意编号即可
-
http 代表开启远程调用服务,这对我们很重要
-
http.port 远程服务的端口,默认是8545
-
http.api 远程服务提供的远程调用函数集
-
http.corsdomain 指定可以接收请求来源的域名列表(浏览器访问,必须开启)
-
allow-insecure-unlock 新版本增加的选项,允许在Geth命令窗口解锁账户
-
mine 开启挖矿
-
miner.threads 设置挖矿的线程数量
-
console 进入管理台
-
2> 1.log Unix系统下的重定向,将Geth产生的日志输出都重定向到1.log中,以免刷日志影响操作
Geth启动后操作说明
01:查看当前存在的账户
> eth.accounts
[]
默认不会有账户信息,需要创建后才能有
02:创建账户,注意传入的123是密码,密钥要牢记
> personal.newAccount("123")
"0x70aea0aea5bf9568a650598dfef44d6d3cca209a"
> eth.accounts
["0x70aea0aea5bf9568a650598dfef44d6d3cca209a"]
03:启动挖矿,start内的1是代表1个线程挖矿,null并非代表错误
> miner.start(1)
null
04:查看账户余额,都是挖矿所得
> eth.getBalance(eth.accounts[0])
95000000000000000000
05:再创建一个账户,密码456
> personal.newAccount("456")
"0xd56f07dc185c32f0367469b353c6cae711fa4a46"
06:给两个账户起别名acc0,acc1
> acc0=eth.accounts[0]
"0x70aea0aea5bf9568a650598dfef44d6d3cca209a"
> acc1=eth.accounts[1]
"0xd56f07dc185c32f0367469b353c6cae711fa4a46"
07:解锁账户1, 发起转账交易之前,都需要先解锁账户
> personal.unlockAccount(acc0)
Unlock account 0x70aea0aea5bf9568a650598dfef44d6d3cca209a
Password:
true
08:转账给账户2,10个ether
> eth.sendTransaction({from:acc0,to:acc1,value:web3.toWei(10)})
"0x0ccfda6137ca5c9095f03498404223ae08910d811ab7b1a7497abe3834f9fae9"
# wei和eth代币的单位换算是:1eth=10**18wei
09:查看账户2余额
> eth.getBalance(acc1)
10000000000000000000
10:退出geth
> exit