Geth搭建以太坊私有网络

    xiaoxiao2022-07-07  192

    一、Geth介绍

    Geth是目前主流的以太坊客户端。它提供了部署Dapp应用的私有网络。而且,Geth也提供了一个交互式命令的控制台,可以很方便地使用一些命令去执行创建节点、访问节点等操作。 下载地址:https://ethfans.org/wikis/Ethereum-Geth-Mirror

    二、搭建私有网络

    本文重点介绍如何使用Geth搭建私有网络。

    1. 搭建私有网络的步骤

    首先,准备创世文件,并命名为genesis.json。文件内容如下所示:

    { "alloc": {}, "config": { "chainID": 72, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "nonce": "0x0000000000000000", "difficulty": "0x4000", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "timestamp": "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", "gasLimit": "0xffffffff" }

    接着,创建一个空的文件夹myPrivateNet,用于保存私有网络的数据。

    >> mkdir myPrivateNet >> cd myPrivateNet

    (这里为了方便,所以把创世文件存放在myPrivateNet目录下)

    创建完成后执行下面命令创建私有链。

    >> geth --datadir "./node1" init genesis.json

    创建完成后,在node1目录下会有两个文件夹。其中,geth目录存放私有链的数据;keystore目录用于存放助记词、私钥等帐号的信息。

    最后,执行命令启动私有链节点。

    >> geth --datadir "./node1" --networkid 72 --port 30301 console

    其中,datadir指定节点数据的存储位置;networkid指定当前网络的id;port指定网络的端口号;console表明同时启动一个交互的终端。 启动完成直接进入geth控制台。

    三、 基本命令

    (1)查看所有命令 在控制台输入eth,然后按3下Tab键查看所有命令。

    (2)创建账户

    >> personal.newAccount('密码')

    创建成功后,查看keystore目录的时候有一个文件,该文件保存了新创建的帐号信息。 (3)查看网络上的所有账户

    >> eth.accounts

    (4)查询账户余额

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

    (5)开始和停止挖矿

    >> miner.start() >> miner.stop()

    默认情况下,挖矿帐号为默认帐号coinbase。如果要修改挖矿帐号,可以执行命令:

    >> miner.setEtherbase(eth.accounts[1]) >> eth.coinbase

    运行结果如下所示: 从运行结果上看,coinbase已经修改了第2个帐号。

    注意:当节点中断的时候,挖矿人会被重置为第一个帐号,但是之前挖矿帐号的余额保持不变

    (6)检查节点

    >> admin.peers // 查询已连接的节点 >> admin.nodeInfo // 查询当前节点的信息

    (7)连接节点

    第一步:启动另外一个终端,然后进入到myPrivateNet目录下,并执行下面命令创建一个新的节点node2。

    >> geth --datadir "./node2" init genesis.json >> geth --datadir "./node2" --networkid 72 --port 30302 --ipcdisable console

    注意:1)node2节点的创世文件要与node1相同;2)node2和node1的networkid也要相同;

    第二步:创建两个帐号,用于与node1帐号进行通信。

    >> personal.newAccount('111') >> personal.newAccount('111')

    第三步:切换到node1节点,然后执行命令:

    >> admin.addPeer('连接节点的url')

    连接节点的url可以通过admin.nodeInfo查看。 enode是节点唯一的标识,它描述了该节点的位置、端口号等信息。

    (8)节点之间的交互

    例如:node1的帐号给node2的帐号进行转账操作。

    ···

    eth.sendTransaction({from : eth.accounts[1], to: eth.accounts[1], value: web3.toWei(‘2’, ‘ether’)}) ··· 执行上面命令,控制台输出: 出现该问题的原因是:转账人的账户被锁定,还没有被解锁。 解决办法:设置转账人的密码。 ···

    personal.unlockAccount(eth.accounts[1])···

    解锁完成后,重新执行eth.sendTransaction命令进行转账操作。转账完成后,可以查看到交易池中有一个未完成的交易。

    >> txpool.status

    执行效果如下图所示: 这时候我们需要执行挖矿操作去处理该交易。处理完成后,查看到node1和node2中账户余额的变化。

    至此,Geth搭建以太坊私有链的总结到这里为止,谢谢!

    最新回复(0)