在Ubuntu平台搭建以太坊私有链

要求:

在Ubuntu平台搭建以太坊私有链,并进行挖矿

 1、安装go语言环境

(1)下载Linux下go的安装包

wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz

 (2)下载完后,进入到下载目录,将其解压到 /usr/local 文件夹下

sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz

 在HOME下创建文件夹go

(3)配置环境变量

使用sudo vi ~/.bashrc命令编辑bashrc文件。

 将以下命令放入到bashrc文件中

export G0ROOT=/usr/1ocal/go
export GOBIN=$GOROOT/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOBIN

 

 使得环境变量生效

 此时go语言环境已经安装完成,输入go version查看安装成功

 安装geth环境

依次输入以下代码

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

 

 

  

 

 输入geth -h检查以下版本,说明geth客户端安装成功!

 2、安装以太坊客户端Ethereum

(1)新建一个文件夹,例如mydata,用来保存私有链的数据。创建一个初始化的创世块文件genesis.json

 

 然后将如下的配置信息写入到创世块文件genesis.json中

{
  "nonce": "0x0000000000000042",
  "difficulty": "0x40000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
  "gasLimit": "0xffffffff",
  "alloc": {
    "3282791d6fd713f1e94f4bfd565eaa78b3a0599d": {
      "balance": "1337000000000000000000"
    },
    "17961d633bcf20a7b029a7d94b7df4da2ec5427f": {
      "balance": "229427000000000000000"
    }
  },
  "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    }
}

 保存退出

 (2)初始化创世区块,并指定数据存放路径

 

 这里我用的老师给的创世区块发现是错误的。

这里我将创世区块换成以下内容:

{

  "config": {

    "chainId": 666,

    "homesteadBlock": 0,

    "eip150Block": 0,

    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",

    "eip155Block": 0,

    "eip158Block": 0,

    "byzantiumBlock": 0,

    "constantinopleBlock": 0,

    "petersburgBlock": 0,

    "istanbulBlock": 0,

    "ethash": {}

  },

  "nonce": "0x0",

  "timestamp": "0x5ddf8f3e",

  "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",

  "gasLimit": "0x47b760",

  "difficulty": "0x00002",

  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",

  "coinbase": "0x0000000000000000000000000000000000000000",

  "alloc": { },

  "number": "0x0",

  "gasUsed": "0x0",

  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"

}

编辑genesis.json保存并退出

现在正式开始初始化创世区块,并指定数据存放路径,这里放在我们刚刚建的文件夹mydata下

 (3)启动私有链节点,并将日志输入到mychain.log

geth --networkid 3 --datadir mydata --identity "mychain" --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpcapi "admin,debug,eth,miner,net,personal,shh,txpool,web3" --port 30303 --rpccorsdomain "*" --nodiscover console 2>>mychain.log

 以太坊私有链环境已经搭好,接下在进行简单测试。

首先这里说一下,其实我这是第二次挖矿了,第一次开始挖矿都会返回null,其实是因为节点版本问题。
所以接下来我重新启动私有链节点,在启动geth命令行的时候需要添加这两个参数:
geth
--datadir "./ethdev" --nodiscover console 2>>get.log --dev --dev. period 1 #添加--dev 参数,启动的时候便产生了一个账户,并且已经挖矿有余额。

 

 4、测试

(1)创建新账户

创建新用户之前查看当前账户

 这里是因为我们添加-dev参数后就会自动添加一个账户,并且这个账户是有挖矿余额的。

接下来开始创建我们需要挖矿的账户

personal.newAccount("xixi1")      #这里的xixi1是账户的密码

创建成功将返回账户的地址

(2)查找已创建的账户

> eth.accounts

> personal.listAccounts #两者都可以查询到已经创建的账户

(3)查询账户余额

eth.getBalance("账户地址")

 这里查找我创建的第一个账户的余额,引号内输入密码为xixi1对应的账户地址0xc0fac76bfe99f3e68cdd630bd02e180560b6c7ba。

 可以看到显示的是0,是因为我们还没有开始挖矿,所以没有余额。

#这里我将第一个用户设置成user1,第二个用户设置成user2,以便于后面好操作,不然老是去输入用户的地址很麻烦。

接下来直接可查询user1和user2账户余额

(4)开始挖矿

在挖矿前,先设置挖矿奖励地址(如果不设置的话默认奖励地址为第一个用户)

miner.setEtherbase(eth.accounts[0])    #这里的0是指的第一个账户,那么第二个账户就是1

 可以看到显示true,说明第二个账户存在。

再查询一下奖励的地址

eth.coinbase

 可以看到正是我们第二个账户。

设置成功后,我们就开始挖矿,调大虚拟机内存,我这里设置的是4g。

其实在这之前我每次开始挖矿都会返回null,其实是因为节点版本问题。在启动geth命令行的时候需要添加这两个参数。
在dev环境下验证发现,当执行miner.start()时,返回null。但其实miner已经执行,只不过它在等待你发送交易之后才会生成新的区块。也就是说执行了miner.start(),它一直在等待,这是发送一笔交易,再查看区块高度发现已经增加一块。

 虽然miner.start 还是返回null,但是 eth.blockNumber 却增长了,因此说明可以挖矿了。

(5)转移以太币

目的:将0.01以太币从 user1 转移到user2   转移数量为0.01以太币

amount = web3.toWei(0.01)                                  #首先需要设置转移的以太币数量amount

eth.sendTransaction({from:user1,to:user2,value:amount}) #将0.01以太币从 user1 转移到user2   转移数量为0.01以太币

 现在查询user2的余额,发现不是0了!

注意:如果这里查询到user2还是没有余额,就说明没有进行挖矿操作,以致于交易未成功。需要miner.start()开始挖矿,再查询下区块高度即可。挖矿之后就会有余额啦。

 再次转移,可以看到user2余额发生变化

原文地址:https://www.cnblogs.com/xixi3/p/12496694.html