zoukankan      html  css  js  c++  java
  • 以太坊私链与智能合约部署学习(博主修正篇)—— 第三篇

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

        写在前面: 

        要在私有网络中建立多个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):在以太坊私有网络中建立节点集群,并发生交易

  • 相关阅读:
    Notepad++编写Markdown
    解决Unable to create new native thread
    Outlook2016 新装进阶操作指南
    卷积神经网络
    反向传播算法
    神经网络的基本组成
    cs231n课程索引
    快速入门特征工程
    快速入门Sklearn
    快速入门Matplotlib
  • 原文地址:https://www.cnblogs.com/ddcoder/p/7866711.html
Copyright © 2011-2022 走看看