美文网首页区块链实战
2、快速搭建以太坊私链

2、快速搭建以太坊私链

作者: 冯学雷 | 来源:发表于2018-07-07 17:39 被阅读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
    
    • rpccorsdomain 这里配置 “ * ”是允许通过任意域名访问,也可以指定具体的域名。
    • verbosity 日志等级:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)。

    ==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控制台中内置了一些对象,通过这些对象我们可以很方便的和以太坊进行交互,这些内置对象包括:

    • eth:提供了操作区块链项目的方法*
    • net:提供了查看p2p网络状态的相关方法
    • admin:提供了管理节点相关方法
    • miner:提供了启动和停止挖矿的方法
    • personal:提供了管理账户的方法
    • txpool:提供了查看交易内存池的方法
    • web3:除了包含以上对象中有的方法外,还包含一些单位换算的方法。

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

    创建账户

    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== 查看状态。

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

    相关文章

      网友评论

      本文标题:2、快速搭建以太坊私链

      本文链接:https://www.haomeiwen.com/subject/bcdguftx.html