Ubuntu18.04搭建自己的以太坊私有链(一)

1. 创建创世区块文件

  • 创建私有链专门的data目录:
$ mkdir /home/hadoop/private_eth1
  • 创世区块文件是一个json格式的文件,一般命名为genesis.json。本人将其存放在/home/hadoop/private_eth1目录下,其内容如下:
{
  "config": {
        "chainId": 230, 
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000330",
  "difficulty" : "0x20000",
  "extraData"  : "0x1234567890",
  "gasLimit"   :"0xffffffff",
  "nonce"      : "0x0000000000000024",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}
  • 创世区块文件中各个参数含义的介绍,如下:
参数名称 参数含义
chainId 指定了独立的区块链网络id,网络id在连接到其它节点的时候会用到,以太坊公网id是1,不同的id网络的节点无法相互连接
homesteadBlock HomesteadBlock是以太坊的第二个主要版本,第一个是Frontier,这个值设置为“0”表示目前正在使用Homestead版本
eip155Bloc eip是ethereum improvement proposal的缩写,我们的链不会提议分叉,所以设置为“0”即可
eip158Block 同上
mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash,注意它和nonce的设置需要满足以太坊的yellow paper,4.3.4. Block Header Validity, (44)章节所描述的条件。
nonce 一个用于挖矿的64位随机数,可以随便填写。和mixhash的设置一样,需要满足以太坊的Yellow paper, 4.3.4.Block Header Validity (44)章节所描述的条件。
difficulty 设置当前区块的难度,如果数值过大,挖矿时间较长,在测试环境为节省算力和等带时间可设置较小值。
alloc 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以不需要预置有币的账号,需要的时候再创建即可
coinbase 矿工的账号,随便填写
timestamp 设置创世区块的时间戳
parentHash 上一个区块的哈希值,因为是创世区块,所以这个值是0
extraDat 可以写入32byte大小的任意数据,每个block都会有,由挖出block的miner来决定要不要写点什么。该参数可以填你的个性信息,但必须为十六进制的字符串。
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为是私有链,所以填最大。
  • 如果想在创世区块中一开始就预置一些账户,可以将alloc参数的内容修改如下:
"alloc":{
        "0xeb680f30715f347d4eb5cd03ac5eced297ac5040":{
        	"balance":"12000"
        },
        "0xeb680f30715f347d4eb5cd03ac5eced2创世区块97ac5041":{
        	"balance":"1000000"
        },
        "0xeb680f30715f347d4eb5cd03ac5eced297ac5042":{
        	"balance":"150000"
        }
 },

2. 创世区块初始化

  • 使用以下命令初始化创世区块,指定私有链数据的存放目录、创世区块文件genesis.json目录.
/* 
 * --datadir:指定私链数据的存放目录.当要在同一计算机中创建其他私链节点时,可创建另外的文件夹,例如data2。
 * 然后通过--datadir data2区分不同的私链节点,如果未设置--datadir,则会读取以太坊主网的数据,
 * 默认位置在/root/.ethereum中。
 * */
$ geth --datadir /home/hadoop/eth/private_eth1/ init genesis.json

初始化的信息截图如下:
Ubuntu18.04搭建自己的以太坊私有链(一)_第1张图片

  • 使用tree 命令以树形结构显示datadir的目录结构
# 使用之前可以先检查自己的系统已经安装tree命令
$ tree --version
# 如果没有,使用如下命令进行安装
$ sudo apt-get install tree
# 安装完成以后,查看数据目录的树形结构
$ tree

Ubuntu18.04搭建自己的以太坊私有链(一)_第2张图片
注意: 其中的/geth/chaindata存放区块数据,/keysotre存放账户数据。

3. 启动私有链节点

  • 启动命令如下:
$ geth --networkid 230 --datadir /home/hadoop/eth/private_eth1/ --identity "lucy" --rpc --rpcport "8545"  --port "30303" --rpcaddr "192.168.1.120" --nodiscover --rpcapi "eth,net,web3,personal,admin,shh,txpool,debug,miner" console
  • 启动命令的参数说明:
参数名称 参数含义
identity 指定节点 ID
rpc 表示开启 HTTP-RPC 服务,可以进行智能合约的部署和调试
rpcaddr HTTP-RPC 服务ip地址,默认为"localhost"
rpcport 指定 HTTP-RPC 服务监听端口号,默认为 8545
datadir 指定区块链数据的存储位置
port 指定和其他节点连接所用的端口号(默认为 30303)
nodiscover 关闭节点发现机制,防止加入有同样初始配置的陌生节点
networkid 网络ID,具有同一网络标识的区块原则上可以互通,id为1为以太坊主网络,1-4网络已经被以太坊自行占用,因此不能使用1-4作为自己的私有链网络ID
rpcapi 设置允许连接的rpc的客户端,一般为db,eth,net,web3
  • 启动结果截图:
    Ubuntu18.04搭建自己的以太坊私有链(一)_第3张图片

4. 简单的操作测试

  • 创建新账户,创建成功将返回账户地址
> personal.newAccount("123456")   # “123456”是账户密码

其实账户地址表示的是该账户公钥的后20字节,通常会以0x开头,例如,0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826,该地址使用的是16进制表示法。
在这里插入图片描述
使用该命令连续创建两个账户,再使用tree命令查看数据目录的结构,发现keystore目录下有新的文件生成。
在这里插入图片描述
参考链接:
【Ethereum基础】:账户、地址、私钥和公钥

  • 查询账户列表
//该命令返回刚刚创建两个账户的地址
> eth.accounts
["0x99bcfb3127a4181ee5b1ac0a32ffa016cdc10829", "0x5036cb8a89d0cc7885be3cdd06e6c717ec1588f2"]

返回的账户地址是一个数组,可以使用以下方式查看指定账户的地址:

 > eth.accounts[0]
"0x99bcfb3127a4181ee5b1ac0a32ffa016cdc10829"

也可以使用如下命令查询账户列表:

> personal.listAccounts
["0x99bcfb3127a4181ee5b1ac0a32ffa016cdc10829", "0x5036cb8a89d0cc7885be3cdd06e6c717ec1588f2"]
//查看指定账户的地址
> personal.listAccounts[1]
"0x5036cb8a89d0cc7885be3cdd06e6c717ec1588f2"
未完,请看下一篇博客: Ubuntu18.04搭建自己的以太坊私有链(二)

你可能感兴趣的:(区块链)