$ 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"
}
},
genesis.json
目录./*
* --datadir:指定私链数据的存放目录.当要在同一计算机中创建其他私链节点时,可创建另外的文件夹,例如data2。
* 然后通过--datadir data2区分不同的私链节点,如果未设置--datadir,则会读取以太坊主网的数据,
* 默认位置在/root/.ethereum中。
* */
$ geth --datadir /home/hadoop/eth/private_eth1/ init genesis.json
tree
命令以树形结构显示datadir
的目录结构# 使用之前可以先检查自己的系统已经安装tree命令
$ tree --version
# 如果没有,使用如下命令进行安装
$ sudo apt-get install tree
# 安装完成以后,查看数据目录的树形结构
$ tree
注意: 其中的/geth/chaindata存放区块数据,/keysotre存放账户数据。
$ 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 |
> 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"