成功在以太坊搭建私有链挖矿并转账

最近老师布置了一个任务,让我学习区块链的知识。刚开始乖乖的拿一本书看概念,有时候看书真的很无聊,我都睡过去好几回了。前几天老师说,你要是感觉看概念太无聊,就先尝试着搭一个以太坊私有链试一试。哇,这可比看书有意思多了。立马开始试,网上找了各种方法,看了好多博主的文章。但是自己上手后总是失败。就在今天,终于弄成了,心情无比激动。

刚开始自己弄的时候,miner.start()后,INFO就一直停留在commit new mining work。然后就没有反应了,一直都没有Generating DAG in progress的信息产生。在网上查了很多资料,都没有一个准确的答案。最后,我想会不会是版本和源的问题。于是又新建了一个虚拟机,安装Ubuntu18.04从头开始搭,如果这都失败的话,那就真的凉了。

 

1.使用刚安装好的Ubuntu,第一件事就是设置下载源

进入Ubuntu系统的软件与更新

点击关闭后就可以了。

2.依次输入以下命令

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum

 

3.输入geth -h检查以下版本

 

4.接下来是创建创世块

创世名称命名为genesis.json(挖矿难度设置低一点),内容如下:

{
    "config": {
      "chainId": 10,
      "homesteadBlock": 0,
      "eip155Block": 0,
      "eip158Block": 0
  },
    "alloc": {
    "bc9a3ece02d7cb31cf63dfdfc48db0b82770d014": {
      "balance": "1000000000000000000000000000000"
    },
    "457e7d69fd3ac576aa744228e6b3319cde768473": {
      "balance": "2000000000000000000000000000000"
    },
    "926ef6011f7c852d30a01c7a4aaa5cbc460588fc": {
      "balance": "3000000000000000000000000000000"
    }
  },
    "nonce": "0x0000000000000056",
    "difficulty": "0x0200",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
    "gasLimit": "0x4c4b40"
}

参数说明:

mixhash:与nonce配合用于挖矿,由上一个区块的一部分生成的hash。

nonce:nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper。

difficulty:设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度。

alloc:用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。

coinbase:矿工的账号,随便填。

timestamp:设置创世块的时间戳。

parentHash:上一个区块的hash值,因为是创世块,所以这个值是0。

extraData:附加信息,随便填,可以填你的个性信息。

gasLimit:该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

将这个genesis.json文件放到一个新建文件夹中,例如:放到privateblock中。

然后在终端输入

geth --datadir data --networkid 20140628 --rpc --rpccorsdomain "*" init ./genesis.json

--networkid 20140628,为私链id(没有太多限制),以太坊主网id为1,如果还要要搭建私链下的其他节点,networkid必须相同。

--datadir data 中data是文件夹的名称,私链数据会存储在这个文件夹内。若存在其他节点,文件名要不同。
可以通过"--datadir 文件名"来区分不同的私链节点。如果未设置--datadir,则会读取以太坊主网的数据,
默认位置在/root/.ethereum中。

 

出现以上信息,说明创世块创建完成。

5.打开客户端

在终端键入:

geth --datadir data --networkid 20140628 --rpc --rpccorsdomain "*" --nodiscover --port 16333 --rpcport 8546 console

-port 16333 系统默认是30303
--rpcport 8546 系统默认是8545
如果启用第二个测试节点,port以及rpcport应与第一个节点不同。

 

成功打开,注意下版本就可以了。

6.创建账户

可以使用eth.accounts查看有多少个账户。

输入personal.newAccount(123)创建账户,这个“123”是密码,给你返回的是账户。此时你可以输入eth.accounts[0]来查看第一个账户,这里和数组一样,再创建账户就是eth.accounts[1]了。

eth.coinbase可以查看矿工账户,因为挖矿默认的是第一个账户,所以一次创建多个账户,返回的都是eth.accounts[0]

 

7.挖矿

终端键入:miner.start(1),括号里不填的话是默认全力挖矿,电脑可能受不了。产生的INFO如下:

 

进行到这里都很顺利,速度也很快,但是接下来就要等很长时间了。这是因为第一次挖矿需要初始化挖矿线程。大家可以看到这中间经历了快6个小时(我等的快崩溃了)。到了下面这一步,等就完事了。

 

输入miner.stop()就可以停止挖矿

 

8.接下来就可以输入eth.blockNumber命令查看区块的高度。

输入eth.getBlock()可以查看区块信息。

 

9.转账

web3.fromWei(web3.eth.getBalance(web3.eth.accounts[0]),"ether")
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[1]),"ether")

用上面的方式也可以查询到账户的余额,后面的ether是单位,ether=wei*10^18

如果直接转账会报错,提示需要密码或解锁。

此时需要输入:personal.unlockAccount(web3.eth.accounts[0])解锁账户并输入密码

 

解锁成功后再次转账:

web3.eth.sendTransaction({from:web3.eth.accounts[0] , to: web3.eth.accounts[1],value: web3.toWei(1, "ether")})

 

此时转账只是提交成功而已交易成功需要等到矿工挖新的区块

再次输入miner.star(1)进行挖矿,这时可以看到,等待时间已经缩短到了7分钟。

 

其实挖到一个矿就可以了,输入miner.stop()停止挖矿。

再次查询账户余额显式如下:

 

至此,以太坊搭建私有链挖矿和转账都完成了。

猜你喜欢

转载自blog.csdn.net/qq_38289815/article/details/81782113
今日推荐