Skip to content

Latest commit

 

History

History
189 lines (121 loc) · 4.16 KB

以太坊私有链搭建.md

File metadata and controls

189 lines (121 loc) · 4.16 KB

操作系统:CentOS 6.5

安装依赖组件

sudo yum install git gcc gcc-c++ ntp epel-release nodejs -y

安装golang

下载并解压:

wget https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz tar zxvf go1.13.4.linux-amd64.tar.gz mv go /usr/local/

配置环境变量:

vi /etc/profile

添加:

GOROOT=/usr/local/go
PATH=$GOROOT/bin:$PATH

配置生效:

source /etc/profile

查看 golang 版本:

go version

编译go-ethereum

下载并编译以太坊:

git clone https://github.com/ethereum/go-ethereum.git cd go-ethereum make all

添加环境变量:

vi /etc/profile

PATH=$GOROOT/bin:/root/ethereum/go-ethereum/build/bin:$PATH

配置生效:

source /etc/profile

账户管理

进入控制台:

geth --datadir data --nodiscover console

创建账户:

personal.newAccount("123456")

参数为私钥密码,返回账户的公钥。

查询账户列表:

eth.accounts

搭建私有链

vim genesis.json

创建创世区块,输入并保存以下内容:

{
  "nonce": "0x0000000000000042",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x00",
  "gasLimit": "0x80000000",
  "difficulty": "0x400",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": {  
      "0x4f4db5c14123474b1b173a8d25e676f388202010": {  
        "balance": "1000"
      }  
   },
  "config": {
    "chainId": 15,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0
  }
}
参数 说明
chainId 区块链网络ID,以太坊公网网络 ID 是 1,私有链节点的时候要指定不同的网络 ID
HomesteadBlock 设置为 0 表示使用 Homestead 发布该链
nonce 一个 64 位随机数,用于挖矿
timestamp 设置创世块的时间戳
parentHash 上一个区块的hash,创世块就为0
mixhash 与 nonce 配合用于挖矿,由上一个区块的一部分生成的hash
difficulty 设置设置当前区块的难度,越大挖矿就越难
alloc 用来预置账号以及账号的以太币数量
coinbase 矿工账号
extraData 附加信息
gasLimit 用来限制区块能包含的交易信息总和

初始化区块链:

geth --datadir data init genesis.json

初始化成功后,会在数据目录 data 中生成 geth 和 keystore 两个文件夹。

如果出现错误,可以移除原来的创世块,再次初始化区块链。

geth removedb --datadir data

挖矿

进入控制台:

geth --datadir data --networkid 15 console

启动挖矿:

miner.start(5)

线程数:5,第一次启动会先生成 DAG 文件,等进度达到 100% 后就开始挖矿,挖到一个区块奖励 5 个以太币,挖矿所得的奖励会进入矿工的账户,默认是本地账户中的第一个账户。

设置挖矿账户(默认第1个):

miner.setEtherbase(eth.accounts[0])

查询账户余额:

eth.getBalance(eth.accounts[0])

返回值的单位是wei,即以太币的最小单位,1个以太币 = 10的18次方个wei。

要查看有多少个以太币,可以换算成以太币:

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

停止挖矿:

miner.stop()

交易转账:

// 转账 10 个以太币

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

报错了,原因是账户每隔一段时间就会被锁住,要发送交易,必须先解锁账户,由于我们要从账户0发送交易,所以要解锁账户0:

personal.unlockAccount(eth.accounts[0])

如果发现金额还到账,此时交易已经提交到区块链,但还未被处理,这可以通过 txpool 来查看交易池中的状态:

txpool.status

{
  pending: 1,
  queued: 0
}

其中 pending: 1 表示还未被处理,要启动挖矿,然后等挖到一个区块之后就停止挖矿:

miner.start(1); admin.sleepBlocks(1); miner.stop()

查看区块数:

eth.blockNumber

退出控制台:

exit