本篇的主题是:将多个节点添加到私链中,并完成交易。(相于构建完整的私有链集群,好刺激、好激动、好好玩~~~~~)

    写在前面: 

    要在私有网络中建立多个node组成的集群,并互相发现,产生交易。为了在本地网络运行多个以太坊节点的实例,必须确保以下几点:

    1. 每个实例都有独立的数据目录。(--datadir)
    2. 每个实例运行都有独立的端口。(eth和rpc两者都是)(--port 和 --rpcprot)
    3. 在集群的情况下,实例之间都必须要知道彼此。
    4. 唯一的ipc通信端点,或者禁用ipc。

    如果还不知道如何建私链的,请先去参考第一篇和第二篇。

 

    注:这一篇也是在windows下实验的,linux下大致相同。因为第二篇的问题,所以流程性的实验,暂时和linux说后会有期了。

    实验步骤:

    1、启动节点A,并禁用IPC:

    geth --datadir data init genesis.json

    geth --datadir data --networkid 314590 --ipcdisable --port 61910 --rpcport 8200 --rpccorsdomain "*" console

    2、查看节点A的enode url:

    admin.nodeInfo.enode

    这时会显示出:enode://5aea6a6586859526da998e20e11e589a5d3dae71c64af115937adddfb16b4ff73d2c41e6a12417b610a87bba521b65ac4c2d2065bc77c0954657a409727bad13@0.0.0.0:61910

    因为我的局域网IP是192.168.0.103,所以encode url需要改成:enode://5aea6a6586859526da998e20e11e589a5d3dae71c64af115937adddfb16b4ff73d2c41e6a12417b610a87bba521b65ac4c2d2065bc77c0954657a409727bad13@192.168.0.103:61910

    3、初始化节点B,并启动:

    geth --datadir data init genesis.json

    geth --datadir data --networkid 314590 --ipcdisable --port 61911 --rpcport 8201 --rpccorsdomain "*" console --bootnodes "enode://5aea6a6586859526da998e20e11e589a5d3dae71c64af115937adddfb16b4ff73d2c41e6a12417b610a87bba521b65ac4c2d2065bc77c0954657a409727bad13@192.168.0.103:61910"

    这里,需要注意以下几点:

    FIRST:--bootnodes 是设置当前节点启动后,直接通过设置--bootndoes 的值来链接第一个节点。也可以不设置 --bootnodes,直接启动,启动后进入命令行,通过命令admin.addPeer(enodeUrlOfFirst Instance)把它作为一个peer添加进来。

    例:admin.addPeer("enode://5aea6a6586859526da998e20e11e589a5d3dae71c64af115937adddfb16b4ff73d2c41e6a12417b610a87bba521b65ac4c2d2065bc77c0954657a409727bad13@192.168.0.103:61910")

    SECOND:如果用--bootnode选项链接第一个节点,在节点启动后,可能需要延迟5秒左右,节点A才能认出新添加进来的节点(这点要注意,很坑啊,打命令手速太快会误认为链接失败)。如果用admin.addPeer(),链接瞬间成功。

    4、确认两节点是否链接成功:

    net.peerCount    //这里显示为1,则说明发现并链接成功

    admin.peers

    5、相互交易:

    到了这一步,节点相互发现并链接就实验成功了。接下来进行相互交易,整个流程与第二篇类似:

    假设,节点A有个用户A“0x3c834728d0994a64806cbafa96c713f6e8c3bff3”;节点B有个用户B“0xdf59d6e9b6f465b8c5bc0093608922f46e95403”。从用户A转3个以太币到用户B:

    eth.sendTransaction({from:"0x3c834728d0994a64806cbafa96c713f6e8c3bff3",to: "0xccf0c1592124dc05db1f5d19c33150e7198dc216",value: web3.toWei(3,"ether")})

    运行完成之后,执行miner.start(),之后便可以查看用户A的账户减少了3个以太币,用户B的账户余额增加了3个以太币。(再次重申,挖矿的过程是各个节点在相互进行协议确认的过程,所以发生交易后需要进行挖矿余额才会发生变化)。

 

    到这里,节点接入与相互交易就实验完成了,第四篇将讲述智能合约的布署入门,敬请期待。

 

    参考资料:

    http://www.cnblogs.com/zl03jsj/p/6876064.html    区块链入门(3):在以太坊私有网络中建立节点集群,并发生交易

分类:

技术点:

相关文章: