区块链实战

2、快速搭建以太坊私链

2018-07-07  本文已影响62人  冯学雷

搭建私链关键是 编写创始区块配置文件,主要包含以下几个步骤。

为了保持目录结构清晰,搭建过程中新建了工作目录以及存放区块数据和账户数据的目录。

1、创建工作目录

mkdir geth
cd geth
touch gensis.json

2、配置创世区块配置文件

{
    "config": {
          "chainId": 123123,
          "homesteadBlock": 0,
          "eip155Block": 0,
          "eip158Block": 0
      },
    "coinbase"   : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x40000",
    "extraData"  : "",
    "gasLimit"   : "0xffffffff",
    "nonce"      : "0x0000000000000042",
    "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp"  : "0x00",
    "alloc": {
    }
  }

注:chainid 为区块链网络id,对应启动时的networkid

3、创建存储目录及初始化创世区块

创建目录用于存放区块链数据
cd geth
mkdir blockdb
执行初始化命令
geth --datadir "./blockdb" init gensis.json

==error:==

Fatal: invalid genesis file: json: cannot unmarshal hex string without 0x prefix into Go struct field Genesis.extraData of type hexutil.Bytes

若执行过程中出现以上错误提示,请检查==gensis.json==文件。

其中 chaindata 中存放的时 区块数据keystore 中存放的是 账户数据

4、启动私链初始节点

执行以下命令启动私链

geth --datadir "./blockdb" --rpc --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,admin,shh,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 123123 --port 30303  --verbosity 4 console

==error==

Fatal: Failed to start mining: etherbase missing: etherbase must be explicitly specified

出现场景,gensis.json中节点alloc未配置账号,而启动私链时需指定一个矿工账号,否则回出现该错误。

Error: etherbase missing: etherbase address must be explicitly specified

原因是当前环境没有账户,需要建立一个账户

5、常用命令

以太坊的JavaScript控制台中内置了一些对象,通过这些对象我们可以很方便的和以太坊进行交互,这些内置对象包括:

下面几个步骤以一个完整的流程介绍一些常用命令,即创建用户->查看用户->挖矿->交易。

创建账户

personal.newAccount('123456')

查看账户

eth.accounts
eth.accounts[0]

查看余额

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

此时账户数据为0

挖矿

先启动(start)挖矿,待出现小🔨的图标(开始挖矿),过一分钟后,停止挖矿,然后查看余额,可以看到账户已存在数据 (在没有设置挖矿奖励地址时,系统默认第一个账户的地址为奖励地址)

挖矿命令:

miner.start()
miner.stop()

交易

首先交易需2个账户,所以使用newAccount命令再创建一个账户;
其次交易之前需先解锁,否则会报错。

解锁命令:

personal.unlockAccount(eth.accounts[0],'123456')

转账命令:

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

此时查看另一个账户,可以看到已存在1eth。
若转账时若未开启挖矿,此时交易处于待打包交易,所以另一个账户查不到转账的数据,可以通过==txpool.status== 查看状态。

至此一个私有链搭建完毕,是不是很简单:)。
上一篇下一篇

猜你喜欢

热点阅读