zoukankan      html  css  js  c++  java
  • centos 以太坊多节点私链搭建

    环境  centos 7   搭建 3 个节点的 私链.

    第一步 安装 一些依赖的 工具 

    yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs cmake -y

    第二步 安装 Go  ,以太坊的区块链是GO写的

    下载go:   wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz
    解压:     tar -C /usr/local -xzf go1.10.linux-amd64.tar.gz

    然后配置环境变量
    echo 'export GOROOT=/usr/local/go' >> /etc/profile
    echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/profile
    echo 'export GOPATH=/root/go' >> /etc/profile
    echo 'export PATH=$PATH:$GOPATH/bin' >> /etc/profile
    source /etc/profile

    检查 go 是否正确安装 : go version

    第三步: 下载 geth 源码 ,并且编译安装.

      下载源码:  git clone https://github.com/ethereum/go-ethereum.git

      进入源码根路径 cd go-ethereum

      编译源码: make all

      备注编译 后的文件在 源文件的 根目录下面的 build 目录下面.

      配置 geth 的环境变量 :echo 'export PATH=$PATH:/你源码的路径/go-ethereum/build/bin' >> /etc/profile

      刷新配置文件: source /etc/profile

      检查:geth version 

    安装工具完成,下面开始创建节点.

    1 在 每台机子上都 创建初始化创世区块的文件 genesis.json

        

    {
      "config": {
            "chainId": 22,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
      "alloc"      : {},
      "coinbase"   : "0x0000000000000000000000000000000000000000",
      "difficulty" : "0x400",
      "extraData"  : "",
      "gasLimit"   : "0x2fefd8",
      "nonce"      : "0x0000000000000032",
      "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp"  : "0x00"
    }
    

      

    备注:因为后面节点要相互连接,所以创世区块配置文件要相同,不让无法连接.

    2 关闭防火墙,并且设置时间为同一时区,然后把时间和网络时间对对齐,并且设置为自动和网络时间同步.

      上面这部 很重要.不然节点无法同步,不管是防火墙,还是 时间不同步,都不能同步区块,时间差异不大,会同步,但是会不停的跑异常.

    3 初始化

      geth --datadir  放区块的文件夹路径 init  genesis.json(创世区块配置文件)

      

      初始成功以后启动节点: geth --networkid 1234 --nodiscover --datadir d1  --rpc --rpcaddr 192.168.1.111 --rpcport 9001 --port 30001  console 2    --dev.period 1 --allow-insecure-unlock

      备注上面定义了 网络id 是  1234 ,必须一样,并且不能是1 .

      --datadir d1  放区块的文件夹路径 d1

       --rpc --rpcaddr 192.168.1.111 --rpcport 9001  指定启动 rpc 服务,端口  9001 ,这个是给 java 通过  web3j 来 调用链数据的接口.不写不会开启.

      -port 30001 是 指定 账本数据节点之间 数据同步的端口.

      console  会一命令的方式启动,不带,启动以后只能看,不能交互式的敲命令.

      --dev.period 和生成区块有关,有了它 miner.start() 再回挖矿.没有不会

      --nodiscover  关闭自用发现

    4 三个节点都启动以后  查看他们的连接码: admin.nodeInfo.enode 

      备注:上面连接码 使用的时候需要把127.0.0.1 改成真实的ip 

    5 然后通过 admin.addPeer("连接码"); 来连接 

    6 通过 admin.peers 查看 当前节点连接了那些节点.

      

        备注: abc 三节点 ,只要 要 a 连接 b,a连接 c,然后 b连接c ,就可实现三节点的互联,并且 geth 或记住上次连接的 节点,下次 启动会自动连接.  公链上 应该是通过相互自动发现的机制.

    7 私链搭建完成,但是 eth.accounts 只能看到本地创建的钱包, 但是这个钱包的余额 ,在别的节点上依旧可以查到. 挖矿产区块的 信息也会同步到别的节点.

    8 如果 节点挖矿 太慢,并且修改挖矿难度无效,这时候可能是 网络 id 的问题,换个  networkid  就可以了.

        

       挖矿难度的最小值 是  16进制的  0x20000 ,也就是  13 W 多 ,只能 币这个大,不能比这个小,小于这个值会用默认值. 0x20000

    9 启动时指定矿工账号

         --etherbase 0xad27e0a42831ee84700f612035da59826041abf9 

      备注:据说加上 --mine 或自动挖矿 ,但是实测无效.

  • 相关阅读:
    bzoj1015星球大战(并查集+离线)
    bzoj1085骑士精神(搜索)
    bzoj1051受欢迎的牛(Tarjan)
    左偏树学习
    hdu1512 Monkey King(并查集,左偏堆)
    左偏树(模板)
    PAT (Basic Level) Practice (中文) 1079 延迟的回文数 (20分) (大数加法)
    PAT (Basic Level) Practice (中文) 1078 字符串压缩与解压 (20分) (字符转数字——栈存放)
    PAT (Basic Level) Practice (中文) 1077 互评成绩计算 (20分) (四舍五入保留整数)
    PAT (Basic Level) Practice (中文) 1076 Wifi密码 (15分)
  • 原文地址:https://www.cnblogs.com/cxygg/p/11507274.html
Copyright © 2011-2022 走看看