以太坊私链搭建

安装Geth

通过PPA在Ubuntu上安装

在基于Ubuntu的发行版上安装go-ethereum的最简单方法是使用内置的启动板PPA(个人软件包档案)。我们提供的是包含了我们的稳定和开发版本的Ubuntu版本的单PPA仓库trusty,xenial,zesty和artful。

要启用我们的启动板存储库,请运行:

sudo add-apt-repository -y ppa:ethereum/ethereum

然后安装稳定版的go-ethereum:

sudo apt-get update
sudo apt-get install ethereum

 

安装golang

sudo apt-get install golang

 

搭建私链

创建创世区块文件genesis.json

{
  "config": {
    "chainId": <arbitrary positive integer>,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0
  },
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x20000",
  "extraData": "",
  "gasLimit": "0x2fefd8",
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

 这里可以先创建新账户,会生成一个以太坊地址

# data为指定的文件夹
geth account new --datadir data

# 可以在创世区块中的 "alloc": {} 字段中预设一些地址中默认拥有多少以太币

 

启动私链节点

初始化节点0的创世区块

# data0 节点所在文件目录
geth --datadir data0 init genesis.json

下面命令的主体是geth console,表示启动节点并进入交互式控制台,–datadir选项指定使用data0作为数据目录;–networkid选项后面跟一个数字,这里是1997,表示指定这个私有链的网络id为1997。网络id在连接到其他节点的时候会用到,以太坊公网的网络id是1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络id;console 2>> ./data0/01.log 的作用是将日志写入文件中,以免在控制台中刷屏;

这两个参数不需要添加,可能会无法同步: --netrestrict 127.0.0.1/16 表示限制网络,只能与给定的IP网络(CIDR掩码)通信; --nodiscover 表示禁用对等发现机制(手动对等添加)。

geth --datadir data0 --networkid 1997 --port 30301 --netrestrict 127.0.0.1/16 --nodiscover console 2>> ./data0/01.log

运行上面的命令后,就启动了区块链节点并进入了Javascript Console:

这是一个交互式的Javascript执行环境,在这里面可以执行Javascript代码,其中>是命令提示符。在这个环境里也内置了一些用来操作以太坊的Javascript对象,可以直接使用这些对象。这些对象主要包括:

eth:包含一些跟操作区块链相关的方法 
net:包含以下查看p2p网络状态的方法 
admin:包含一些与管理节点相关的方法 
miner:包含启动&停止挖矿的一些方法 
personal:主要包含一些管理账户的方法 
txpool:包含一些查看交易内存池的方法 
web3:包含了以上对象,还包含一些单位换算的方法

 

新增其他节点

geth --datadir data1 init genesis.json

geth --datadir data1 --networkid 1997 --port 30302 --netrestrict 127.0.0.1/16 --nodiscover console 2>> ./data1/01.log

 

创建账户

账户默认会保存在数据目录的keystore文件夹中。

# 查看账户
eth.accounts
# 创建新账户
personal.newAccount('你的密码1')
# 可以创建多个账户
personal.newAccount('你的密码2')

 

查看账户余额(此时单位是wei)

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

 将余额转换成以太币(ether),1个以太币=10的18次方个wei

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

 

启动/停止挖矿

# 括号中的参数为挖矿的线程数,可以不设置,默认全力挖矿
miner.start(10)
# 第一次启动挖矿会先生成挖矿所需的DAG文件,这个过程有点慢,等进度达到100%后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。

# 停止挖矿
miner.stop()
# 输入的字符会被挖矿刷屏信息冲掉,没有关系,只要输入完整的miner.stop()之后回车,即可停止挖矿

 

矿工的账户,叫做coinbase,默认情况下coinbase是本地账户中的第一个账户

# 查看账户
eth.coinbase

# 修改账户
miner.setEtherbase(eth.accounts[1])

 

 转账(账户每隔一段时间就会被锁定,需要先解锁)

# 解锁
personal.unlockAccount(eth.accounts[0])

# 这里也可以使用web3.toWei(10,'ether')代替10000000000000000000
eth.sendTransaction({from:"0x3e89eb888b8e98bfaeed304a4b71513ca1b17cac", to:"0x15c80a97e22ac48fdca0ef82c23eb2dd74ffc8d2",value:"10000000000000000000"})

此时交易已经提交但还未被处理,使用 txpool.status 命令查看交易状态,miner.start(1)开始挖矿后即可处理

# 查看交易池
txpool.status

启动挖矿,然后等待挖到一个区块之后就停止挖矿

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

注意交易中会收取gas费

 

查看区块

# 查看区块数量
eth.blockNumber

# 根据区块编号
eth.getBlock(48)

# 根据交易哈希查看交易 eth.getTransaction(
"0x31f2ce696a7de72e2d7d633c1926a7753ff36e38aba3b94e3670a7ca256405ba")

 

手动连接其他节点

# 参数为要连接节点的enode,在该节点使用命令admin.nodeInfo.enode
获取
admin.addPeer()

 

posted @ 2020-11-19 17:31  mhly  阅读(304)  评论(0编辑  收藏  举报