1.搭建自己的以太坊网络
目前以太坊官方提供了两种网络:线上生产网络、测试网络。
以太坊生产网络就是真正有价值的 的以太币运行的网络。我们使用的以太币进行转账、支付都是在生产网络上进行,每一个操作都需要消耗实实在在的ETH。智能合约也是部署在生产网络上,智能合约代码的执行调用都清晰可查,并且可供所有开发者调用。
以太坊的测试网络也是官方提供专供用户来开发、调试和测试的。但是测试网络的节点也是全球化的,现在测试网络的区块数量也很大,执行速度较慢,不便于开发、调试。
---
> 开始
下面我们使用Geth安装自己的以太坊私有网络 PrivateNetwork。
下载对应 go-ethereum 使用go语言开发
Geth安装可以直接到官网下载对应的版本,进行安装:https://ethereum.github.io/go-ethereum/downloads/
版本1.8.1
> 配置创世币
配置创世块来创建私有链。同一个网络中,创世块必须是一样的,否则无法联通。创建eth目录,在该目录下新建创世块文件 gen.json
```
{
"config":{
"chainId":9999,
"homesteadBlock":0,
"eip155Black":0,
"eip158Black":0
},
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x4000",
"alloc": {},
"coinbase":"0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "",
"gasLimit":"0xffffffff"
}
```
| 字段名 | 类型 |
| :-: | :-: |
|mixhash|与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.||
|nonce|nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
|difficulty|设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
|alloc|用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
|coinbase|矿工的账号,随便填
|timestamp|设置创世块的时间戳
|parentHash|上一个区块的hash值,因为是创世块,所以这个值是0
|extraData|附加信息,随便填,可以填你的个性信息
|gasLimit|该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。
---
> init 执行
然后执行命令初始化节点
geth --datadir "./" init gen.json
可以看到将节点数据写入了对应的文件夹中,此时当前目录下面会新增出两个文件夹geth和keystore
geth中用以保存区块链的相关数据
keystore中保存的是用户数据
> 创建私有联
输入命令:
geth --datadir "./" --nodiscover console
当看到Welcome to the Geth JavaScript console!的提示,说明已经启动成功
> 在私有链上创建账户
输入命令:personal.newAccount("123456")
"123456"表示此账号的密码.
0x71e71645f6f999a5b723f862fd2d8a590ca961c3
输入命令eth.accounts可以查看新账户
这样,通过这两个命令可以创建出多个用户出来
若输入命令:personal.newAccount()
则系统会提示你输入账号密码,并确认,最后会显示一个新生成的账号
> 挖矿
输入命令:miner.start() 或者miner.start(1)
后者表示只使用一个线程工作,这样系统不会太卡
> 查看主账户中以太币的数量
输入命令: eth.getBalance(eth.accounts[0]) 结果不为0,说明挖矿成功
----
目前以太坊官方提供了两种网络:线上生产网络、测试网络。
以太坊生产网络就是真正有价值的 的以太币运行的网络。我们使用的以太币进行转账、支付都是在生产网络上进行,每一个操作都需要消耗实实在在的ETH。智能合约也是部署在生产网络上,智能合约代码的执行调用都清晰可查,并且可供所有开发者调用。
以太坊的测试网络也是官方提供专供用户来开发、调试和测试的。但是测试网络的节点也是全球化的,现在测试网络的区块数量也很大,执行速度较慢,不便于开发、调试。
---
> 开始
下面我们使用Geth安装自己的以太坊私有网络 PrivateNetwork。
下载对应 go-ethereum 使用go语言开发
Geth安装可以直接到官网下载对应的版本,进行安装:https://ethereum.github.io/go-ethereum/downloads/
版本1.8.1
> 配置创世币
配置创世块来创建私有链。同一个网络中,创世块必须是一样的,否则无法联通。创建eth目录,在该目录下新建创世块文件 gen.json
```
{
"config":{
"chainId":9999,
"homesteadBlock":0,
"eip155Black":0,
"eip158Black":0
},
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x4000",
"alloc": {},
"coinbase":"0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "",
"gasLimit":"0xffffffff"
}
```
| 字段名 | 类型 |
| :-: | :-: |
|mixhash|与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.||
|nonce|nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
|difficulty|设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
|alloc|用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
|coinbase|矿工的账号,随便填
|timestamp|设置创世块的时间戳
|parentHash|上一个区块的hash值,因为是创世块,所以这个值是0
|extraData|附加信息,随便填,可以填你的个性信息
|gasLimit|该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。
---
> init 执行
然后执行命令初始化节点
geth --datadir "./" init gen.json
可以看到将节点数据写入了对应的文件夹中,此时当前目录下面会新增出两个文件夹geth和keystore
geth中用以保存区块链的相关数据
keystore中保存的是用户数据
> 创建私有联
输入命令:
geth --datadir "./" --nodiscover console
当看到Welcome to the Geth JavaScript console!的提示,说明已经启动成功
> 在私有链上创建账户
输入命令:personal.newAccount("123456")
"123456"表示此账号的密码.
0x71e71645f6f999a5b723f862fd2d8a590ca961c3
输入命令eth.accounts可以查看新账户
这样,通过这两个命令可以创建出多个用户出来
若输入命令:personal.newAccount()
则系统会提示你输入账号密码,并确认,最后会显示一个新生成的账号
> 挖矿
输入命令:miner.start() 或者miner.start(1)
后者表示只使用一个线程工作,这样系统不会太卡
> 查看主账户中以太币的数量
输入命令: eth.getBalance(eth.accounts[0]) 结果不为0,说明挖矿成功
----