搭建测试用区块链(Ubuntu环境)

搭建测试用区块链(Ubuntu环境)

参考链接:https://github.com/ethereum/go-ethereum/wiki/Private-network
https://blog.csdn.net/dev_csdn/article/details/78893014
https://blog.csdn.net/scau_lth/article/details/79570886
建议给虚拟机分配个3G或者4G的内存吧,其次还要看电脑配置好不好,初始化挖矿线程生成DAG实在太慢了,我4G内存初始化了半个小时…加上这是内存困难型(PoW共识机制)挖矿,内存不够,挖矿也非常慢啊!!!
前提首先需要安装好geth和go:
各种安装方法的链接:https://blog.csdn.net/u012254277/article/details/61429199/
go安装代码如下:

apt install golang-go

查看go是否安装成功:

go version

在这里插入图片描述
geth安装代码如下

 apt-get install software-properties-common //安装开发工具
 add-apt-repository -y ppa:ethereum/ethereum  //添加源文件
 apt-get update  //更新源
 apt-get install ethereum  //安装源

查看geth的版本、查看geth是否安装成功:

geth version
geth --help

在这里插入图片描述
1、配置初始状态
首先配置私有区块链的初始状态,新建文件genesis.json,内容如下:

{
"config": {
    "chainId": 98,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
           },
"difficulty": "200000000",
"gasLimit": "2100000",
"alloc": {
    "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
    "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
         }
}

chainId指定了独立的区块链的网络ID,不同ID网络节点无法互相连接。配置文件还对当前挖矿难度difficulty、区块Gas消耗限制gasLimit等参数进行了设置
2、启动区块链
用一下命令初始化区块链,生成创世区块和初始状态:
/nychain/data指定了存放数据的位置

geth --datadir /mychain/data init genesis.json

在这里插入图片描述
生成的目录结构如下:

/mychain/data
├── data
│   ├── geth
│   │   ├── chaindata
│   │   │   ├── 000001.log
│   │   │   ├── CURRENT
│   │   │   ├── LOCK
│   │   │   ├── LOG
│   │   │   └── MANIFEST-000000
│   │   └── lightchaindata
│   │        ├── 000001.log
│   │        ├── CURRENT
│   │        ├── LOCK
│   │        ├── LOG
│   │        └── MANIFEST-000000
│   └── keystore
└── genesis.json

–datadir指定区块链数据的存储位置
接下来用一下命令启动节点,并进入Geth命令行界面:
98是当初的chainId

geth --datadir /mychain/data --networkid 98 console

在这里插入图片描述
–identity:指定节点ID
–rpc:表示开启HTTP-RPC服务
–rpcport:指定HTTP-RPC服务监听端口号(默认为8545)
–datadir:指定区块链数据的存储位置
–port:指定和其他节点连接所用的端口号(默认为30303)
–nodiscover:关闭节点发现机制,防止加入有同样初始配置的陌生节点
nodiscover告诉geth最初不要找peers。这一点在这个案例中确实很重要。这是一个私有网络。不希望节点在没有指定的情况下尝试连接到其它节点,不希望这些节点在没有告诉它们的情况下被发现。

下次再进入geth控制台输入:

geth --datadir /mychain/data --nodiscover console

代码解释:
–datadir /mychain/data:–datadir是指定目录,/mychain/data是你当初创建区块链的位置,如何不指定就好像是会去/home/wuyou/e-ethereum云云的文件里去了,然后你当初创建的账号都没有了,又要重新创建过。。。。。。。唉!~~新手入门,没人带,摸了很多坑才知道的
–nodiscover:单词意思就是不被发现,也就是我们的私有区块链了,否则单纯一个geth就是进入以太坊的公链,然后一直下载以前的交易区块了。。。。。(而且8G内存的电脑要下载一周呢,以后你每次进入geth,它都自动帮你下载,你想阻止都阻止不了…)
console:当然就是控制台了~
3、创建账号
用上述geth console命令进入的命令行采用JavaScript语法,用一下命令新建一个账号

personal.newAccount()

在这里插入图片描述
Passphrase输入密码,Repeat passphrase再次确认密码
之后才显示出账号的哈希后的结果是0x19f24e1401ba93b1a13b63aa97e594746ed17c96
查看账户余额:

myAddress="0x19f24e1401ba93b1a13b63aa97e594746ed17c96"
eth.getBalance(myAddress)

在这里插入图片描述
再创第二个账号;
查看所有账户:

eth.accounts

查看各账户余额:

eth.getBalance(eth.accounts[0])
eth.getBalance(eth.accounts[1])

在这里插入图片描述
开始挖矿
其中start的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的DAG文件,这个过程有点慢,等进度达到100%后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。
一定要一套流程一起做完,否则你退出去再进入挖矿好像是在公有链上进行初始化挖矿,然后下载好多好多下不完的区块(以太坊的所有区块,一个8G内存的电脑要下载一周)

miner.start(1)

停止上挖矿

miner.stop()

另一种挖矿的语句,不过居然报错了(这还是网课上的。。。)
开始在自己的私链上挖矿:

geth --datadir /mychain/data --networkid 98 --mine --minerthreads=1 --etherbase=0x19f24e1401ba93b1a13b63aa97e594746ed17c96

在这里插入图片描述
初始化结束后(但不知道为什么挖矿却返回null,只能又去查博客找原因了。。。):
在这里插入图片描述
退出以太坊客户端:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39905917/article/details/84373354
今日推荐