版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/billwzf/article/details/83144682
前言
- 1.1 本文基于Ubuntu 操作系统。
- 1.2 geth的全称是go-ethereum,是一个以太坊客户端,用go语言编写,应该是目前最常用的客户geth。
- 1.3 ubuntu默认root用不启用的,终端下输入sudo passwd root(即修改root的密码)回车启用root。
准备工作
- 2.1 修改ubuntu的hostname
- #hostname ethserver --改变host名
- #hostname 查看修改后的名称
- 退出shell,重新进入就可以了
- 2.2 创建一个eth的根目录,命令: mkdir -p /root/data/eth
安装Geth
3.1 下载安装Geth,本文采用Geth的官方安装指令,我们采用从PPA中安装
sudo apt-get update
更新源列表
sudo apt-get install software-properties-common python-software-properties
安装包管理工具
sudo add-apt-repository -y ppa:ethereum/ethereum --[说明1]
这个源将安装ethereum最新的稳定版本
sudo add-apt-repository -y ppa:ethereum/ethereum-dev -[可选开发版本]
安装最新的开发版本,可能是不稳定版本,不建议使用
sudo apt-get update
更新源列表
sudo apt-get install ethereum
- 上述6条命令,第二条安装必要的工具包, 第三、四条是添加以太坊的源, 第六条 安装go-ethereum。
- 说明[1] 如果报Ubuntu的add-apt-repository: command not found 执行如下
sudo apt-get install software-properties-common python-software-properties 这个命令是安装包管理工具
3.2 测试geth
- 测试命令 geth --help,如果现实出命令行各种参数提示信息,则说明安装成功。
- geth更多命令参数选项见 https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
- 当然你也可以直接运行geth命令。但是这会连接到以太坊公有链。如下图所示。
- 本文是搭建私有链,这里就不进行同步公有链。若是你不小心打了这条命令,你可以关闭 终端,删除/home/ubuntu/.ethereum目录
搭建私有链
-
4.1 安装 Geth成功后。接下来你需要一下四步就可以搭建私有链
- 定制创世文件
- 定制数据目录
- 定制网络ID
- (建议)禁用节点发现
-
4.2 创世块
- 创世区块是整个区块链的开端——第一个区块,编号是0,也是唯一一个没有前驱指向的区块。协议必须确保没有其他节点会认同你的区块链版本,除非他们拥有同样的创世区块。因此你可以创造出任意多的私有测试网络。
- 首先创建私有网络的创世状态,这种状态是所有节点得认同的,这是由一个小小的JSON文件组成的.
- 现在通过配置创世块来创建私有链。同一个网络中,创世块必须是一样的,否则无法联通。
- 在eth根目录下新建创世块json文件piccgenesis.json - 命令# touch piccgenesis.json 内容如下
-
{ "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x100", "extraData" : "", "gasLimit" : "0xffffffff", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00", "alloc": { } }
PS 这里最好将难度设小一点,要是普通PC机的话,一两百就好。因为这样产生区块的时间短。
-
4.3 用上述创世文件初始化每一个Geth节点
- 进入 /root/data/eth目录下
- 初始化命令# geth --datadir /root/.ethereum init piccgenesis.json
- 初始化成功后,会在/root 下生成.ethereum文件夹,包含 geth和keystore两个文件夹,其中geth/chaindata中存放的是区块数据)。
4.4 启动一个私有链节点
- 命令方式启动一个geth节点
- geth --networkid 15 --dev --rpc --rpcapi "db,eth,net,web3,miner,personal" console 2>>log
-
命令说明 --networkid 设置区块链的网络ID,用来标识不同的网络 --dev.period value Block period to use in developer mode (0 = mine only if transaction pending) (default: 0) --dev 使用POA共识网络,默认预分配一个开发者账户并且会自动开启挖矿 console是启动一个交互式JavaScript环境,可以在Geth中执行命令 上述命令不会自动挖矿,如需自动挖矿按照下面命令 geth --networkid 15 --dev --dev.period 1 --rpc --rpcapi "db,eth,net,web3,miner,personal" console 2>>log
自动挖矿命令 geth --networkid 15 --dev --dev.period 1 --rpc --rpcapi "db,eth,net,web3,miner,personal" console 2>>log
-
启动后log如下
-
启动成功,看到Welcome to the Geth JavaScript console!的提示,说明启动成功。
自此私有链搭建完成,下一节讲如何创建账户,如何挖矿等。
-
启动命令详解
- identity :区块链的标示,随便填写,用于标示目前网络的名字
- init :指定创世块文件的位置,并创建初始块
- datadir :设置当前区块链网络数据存放的位置
- port:网络监听端口,默认是8080
- rpc:启动rpc通信,可以进行智能合约的部署和调试。它在geth中被默认激活。
- rpcapi: 设置允许连接的rpc的客户端,一般为db,eth,net,web3。
- 这个命令可以决定允许什么API通过RPC进入。在默认情况下,geth可以在RPC激活web3界面。请注意在RPC/IPC界面提供API,会使每个可以进入这个界面(例如dapp’s)的人都有权限访问这个API。注意你激活的是哪个API。Geth会默认激活IPC界面上所有的API,以及RPC界面上的db,eth,net和web3 API。
- networkid: 设置当前区块链的网络ID,用于区分不同的网络,是一个数字
- console:启动命令行模式,可以在Geth中执行命令
- nodiscover : 使用这个命令可以确保你的节点不会被非手动添加你的人发现。否则,你的节点可能被陌生人的区块链无意添加,如果他和你有相同的初始文件和网络ID。
- maxpeers : 如果你不希望其他人连接到你的测试链,可以使用maxpeers 0。反之,如果你确切知道希望多少人连接到你的节点可以通过调整数字来实现。
- rpccorsdomain : 这个可以指示什么URL能连接到你的节点来执行RPC定制端任务。务必谨慎,输入一个特定的URL而不是wildcard ( * ),后者会使所有的URL都能连接到你的RPC实例