基于ubuntu16.04 Geth 1.7.2构建以太坊私链

1,243 阅读4分钟

前言

通常使用开发的服务器都是Linux,我们这里选择使用ubuntu 16.04来构建,其中可能出现一些知识点不一定会做出详细的介绍,请看后面章节做出的解释,各位同学,可以按照我们给出的参数做出一个demo,再根据我们的提示尝试着修改一些参数,达到不同的效果。

环境准备

  • Oracle VM VirtualBox (可选)
  • ubuntu 16.04
  • geth 1.7.2

geth下载地址:

1.安装geth

为什么选择使用geth客户端?因为这里geth是目前对web3api支持最好,完整的客户端。同时支持作为客户端,节点,挖矿等功能,当然你们也可以使用其他的客户端,他们都有类似的功能。这里我们选择使用geth 1.7.2作为教程的演示使用,请确保你在和我演示的功能相近的版本来学习,截止(2017-12-05)目前最新版本为1.7.3。

  1. 将下载的geth解压并复制到/usr/bin 路径下
  2. 新启动一个控制台 输入 geth version 显示出当前的版本信息

图片

2.初始化geth节点

在启动节点前,我们需要准备私链所需要的创世文件init.json,其中描述了私链的初始信息。

{
"nonce": "0x0000000000000075",
    "config": {
        "chainId": 1123,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x00",
  "gasLimit": "0xffffffff",
  "difficulty": "0x400",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {     }
}

然后我们创建一个目录来存放我们的私链数据,并初始化私链。

mkdir qkl

geth init init.json --datadir "./qkl"

完成後會出現

successfully wrote genesis block and/or chain rule set: …

3.启动节点

启动节点我们提供了一条示例命令来启动。

geth --identity "test" --rpc --rpccorsdomain "*" --datadir ./qkl --port "30301" --nodiscover --rpcport 8101 --rpcapi "personal,db,eth,net,web3" --networkid 1998 console 2>> ./geth.log

解释下每个参数的意思:

--identity "test" 表示在该私链中的标识符为test,这个主要是在多节点时用到来标明节点

--rpc 表示启动文件方式的rpc调用

--rpccorsdomain "*" 表示后面的jsonapi允许被跨域调用,这里的*是指所有域,正式发布不建议使用这个配置或改成真正的调用域

--datadir ./qkl 表示私链的文件夹位置,没有这个参数geth默认会访问到主网mainnet

--port "30301" 表示geth的通信端口,主要用来和各个节点通信使用(建议每个节点不一样)

--nodiscover 表示该节点不会被其他节点主动扫描到,也不会去主动扫描其他节点,可以使用addPerss来手工加入节点,私链必备

--rpcport 8101 表示jsonAPI的对外端口是8101这个端口在每一个私链上最好不一样(主要是都在同一个系统上会端口冲突)

--rpcapi "personal,db,eth,net,web3" 表示在rpc对外服务中启动personal,db,eth,net,web3服务,需要什么加什么,不需要去之

--networkid 1998 表示私链的id,如果两个私链的networkid不一致是会导致无法相连的,并且不指定该参数会连接到主链

console 启动geth后启动一个js的控制台,里面可以访问上面提到的api

>> ./geth.log 表示把日志输出到./geth.log文件中

更多的命令行参数可以参考我后面的文章或者直接查看英文文档

4.创建账户与挖矿

ok现在节点已经启动了,下面讲讲使用最基础的功能:

刚刚上面提到了我们使用的console是一个提供了全功能的api,并且运行环境是一个js的控制台,我们可以使用personal对象来创建账户

personal.newAccount("密码")

命令执行后会得到一个16进制的钱包地址,通过这个地址,我们可以在私链中进行转账,创建合约的操作。注意是私链中

图片

创建了第一个账户之后,我们可以通过执行挖矿指令来开始挖矿。

miner.start()

启动该命令后系统会运行变慢,然后过一段时间我们去观察geth.log可以发现已经挖到了数据

图片

然后查看下第一个账户下的资金余额,因为默认的挖矿都是将币挖到第一个账户下

eth.getBalance(eth.account[0])

图片

完.