Geth是Go Ethereum开源项目的简称,它是使用Go语言编写且实现了Ethereum协议的客户端软件,也是目前用户最多,使用最广泛的客户端。通过Geth客户端与以太坊网络进行连接和交互可以实现账户管理、合约部署、挖矿等众多有趣且实用的功能。
ganache也是客户端,两个都可以用来协助开发DAPP
下载地址:https://geth.ethereum.org/downloads/ 下载后安装即可
1. 在某个磁盘创建一个数据存储目录如D:\testGeth,新建创世区块描述文件genesis.json,内容如下:
{
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x8000000",
"alloc": {},
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
genesis.json是创世区块配置文件,通过此配置让我们很容易挖矿以方便测试,具体每个字段的含义可暂时忽略!
2. 在命令行窗口进入到D:\testGeth目录下,执行创世区块的初始化,命令如下:
geth --datadir data init genesis.json
此时在testGeth目录下会生成data目录,data目录又包含geth和keystore目录,geth目录存储区块数据,keystore目录则保存账户信息。命令执行结果如下:
目录如下:password中存储的是两个测试账户的密码和private_blockchain_start.sh用于启动geth客户端,可以暂时不用管
3. 启动节点连接私有测试网络,命令行下输入:
geth --datadir data --networkid 123 --nodiscover console
--networkid 123参数表示区块链网络ID标识,--nodiscover参数表示节点私有,console参数表示进入geth控制台。
连接测试网进入控制台,此时我们已经进入geth测试网的交互式控制台,窗口也显示「Welcome to the Geth JavaScript console」成功提示!
4. Geth使用
在以太坊网络中,账户是其重要的组成部分,下面我们以查询链上账户列表开始常用的指令功能。
含义:意思是无账户地址,因为我们什么也没做,所以当然是不会凭空出现账户了。
含义:表明账户新建成功,返回账户地址,123为账户密码。此时我们再次查询账户列表会发现已有刚创建的地址了。
含义:表明这个账户的余额是0。
输入指令: eth.getBalance(eth.accounts[0])
输出结果:5000000000000000000
含义:这三条指令意思是启动挖矿程序,当挖到1个区块时停止挖矿,挖矿所得默认进入第一个账户里。耐心等待成功挖出1个块,此时我们的节点就是矿工节点!再次查询账户余额,输出5的18方wei。
前提条件:解锁账户一
输入指令: eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(2,"ether")})
含义:在发起交易前先解锁第一个账户,使用eth.sendTransaction指令发起交易,结果返回交易哈希存根,此时我们这笔交易并没有生效,可以使用txpool.status指令查看交易池的情况pedding为1表明这笔交易还款打包进区块。因为打包区块是由矿工做的工作,所以我们启动矿工。耐心等待一会再次查看第一个账户余额显示8000000000000000000,而第二个账户显示2000000000000000000,说明我们的转账交易成功啦!为什么第一个账户是8个ETH呢?这是因为矿工节点又挖出5个ETH了,加上之前的3个刚好正确!
输入指令:eth.getTransaction("0x9216e836a292a90d85684015c01144600a80024424ba9585199aaea05a0a3ea4")
输出结果:该笔交易详情
5. 脚本启动geth客户端
进行两次挖矿后,账户1余额变成10以太币
geth --rpc --rpcaddr="0.0.0.0" --rpccorsdomain="*" --unlock '0,1' --password password --nodiscover --maxpeers '5' --networkid '123' --datadir 'data' console
password中存储的是两个测试账户的密码,内容如下:
在命令行中运行脚本,会自动开启git bash,启动geth客户端,可以输入eth.accounts测试查看两个以太坊账户