• 实战以太坊搭建联盟链


    1 安装前的准备

    1.1 配置Linux系统

    本文配置的为windows下的VMware软件下搭建的Linux下的cent0S-7系统,推荐系统有CentOS 7和Ubuntu 16.04有条件的可以用云服务器上的Linux系统,好处是可以搭建广域网联盟链。

    本文默认你已经对以太坊和docker技术有一定的掌握和了解,并部署好相应的环境。如果你还未准备好,请参考芯链公众号前期发布的环境搭建和部署文章。

    1.2 安装Docker

    请使用管理员权限进行安装,

    # su root

    安装Docker(请参考芯链公众号发布的安装指导文章):

    CentOS: yum -y install docker-io

    Ubuntu: apt-get install docker-engine

    安装完毕如图:

    然后启动Docker服务:

    #service docker start

    校验docker是否安装成功:

    #docker run hello-world

    这个命令会下载一个测试镜像,并且运行在一个容器中。当容器运行时,他会打印一些信息,并且退出。下图表示Docker已经安装完成。

    2 安装bootnode

    2.1 下载bootnode镜像

    运行命令如下命令:

    #docker pull docker.io/hawyasunaga/ethereum-bootnode

    查看镜像:docker images

    2.2 Docker创建bootnode容器节点

    生成引导节点:

    1
    
    #docker run -itd -m 512M --privileged=true --memory-swap -1 --net=host -p 30301:30301/udp -p 30301:30301/tcp -v /path/docker/bootnode:/root/bootnode --name genbootnode docker.io/hawyasunaga/ethereum-bootnode bootnode --genkey=/root/bootnode/boot.key

    运行引导节点:

    1
    
    #docker run -itd -m 512M --privileged=true --memory-swap -1 --net=host -p 30301:30301/udp -p 30301:30301/tcp -v /path/docker/bootnode:/root/bootnode --name bootnode docker.io/hawyasunaga/ethereum-bootnode bootnode --nodekey=/root/bootnode/boot.key

    注意:这两个命令参数中,-v /path/docker/bootnode:/root/bootnode为映射路径,在docker的这个bootnode容器中,出现容器内/root/bootnode路径都映射为外部路径/path/docker/bootnode。下方以太坊容器搭建节点命令同理。

    2.3 查看bootnode日志得到节点

    1
    
    #docker logs -f bootnode 

    得到节点如下:

    将[::]替换为本机IP地址

    好了,用于连接的根节点运行完毕。

    3 安装以太坊节点

    可以找台Linux进行节点联盟链的搭建了,这里继续以centos7继续演示了。

    3.1 创建以太坊的创世文件

    新建创世文件genesis.json,内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    {
    
      "config": {
    
            "chainId": 90,
    
            "homesteadBlock": 0,
    
            "eip155Block": 0,
    
            "eip158Block": 0
    
        },
    
      "alloc": {"0x5f38056f45091ee992298e53681b0a60c999ff95":{"balance": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7"}},
    
      "coinbase"   : "0x5f38056f45091ee992298e53681b0a60c999ff95",
    
      "extraData"  : "0x2017",
    
      "nonce"      : "0xdeadbeefdeadbeeF",
    
      "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    
      "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    
      "timestamp"  : "0x00",
    
      "gasLimit": "0xffffffff",
    
      "difficulty": "0x20000"
    
    }

    3.2 初始化创世文件

    首先新建一个准备放置以太坊目录的文件,将genesis.json文件放入该地址,本文为/home/admin下:

    运行如下命令

    1
    
    #docker run -itd --privileged=true -v /home/admin:/root/ethdev --name gethDev1 ethereum/client-go --datadir /root/ethdev --networkid 8765639736937780 init /root/ethdev/genesis.json

    请记住—networkid 8765639736937780,这是当前搭建联盟链的ID。

    查看日志文件:docker logs -f gethDev1

    初始化成功。

    3.3 Docker创建以太坊容器节点

    运行如下命令

    1
    
    #docker rm -f gethDev1

    1
    
    #docker run -itd -m 512M --privileged=true --network=host --memory-swap -1 --net=host -p 8545:8545 -p 40303:40303 -v /home/admin:/root/ethdev --name gethDev1 ethereum/client-go --ipcdisable --port 40303 --bootnodes "enode://ad6aff917c6e8bd40cb20af4eac6ce05c16d285125b46f17fc9b5c3b0a833bd21667231215949c6ff771ba512eb8f87f138ac6679852997c3eaec1d349561d20@120.25.162.110:30301" --bootnodesv4 "enode://ad6aff917c6e8bd40cb20af4eac6ce05c16d285125b46f17fc9b5c3b0a833bd21667231215949c6ff771ba512eb8f87f138ac6679852997c3eaec1d349561d20@120.25.162.110:30301" --bootnodesv5 "enode://ad6aff917c6e8bd40cb20af4eac6ce05c16d285125b46f17fc9b5c3b0a833bd21667231215949c6ff771ba512eb8f87f138ac6679852997c3eaec1d349561d20@120.25.162.110:30301" --debug --rpcapi "db,eth,net,web3,personal,admin,miner,txpool" --datadir /root/ethdev --networkid 8765639736937780 --wsapi "db,eth,net,web3,personal,admin,miner,txpool" --ws --wsaddr "0.0.0.0" --rpc --rpcaddr "0.0.0.0" --cache=512 --verbosity 3 console

    //enode为上面运行bootnode得到的节点,并将预备的私钥文件放入keystore中,并且—networkid 8765639736937780为联盟链的标识ID。

    查看控制台日志:docker logs -f gethDev1

    Ok,节点搭建成功。

    3.4 验证联盟链的连接

    在上一步搭建好节点后,等待一段时间,让节点自动连接根节点bootnode。

    进入以太坊容器中:

    1
    
    #docker attach gethDev1

    输入命令:admin

    查看peer是否连接:

    OK,连接完成,联盟链搭建完成。

    连接完成后,开始同步区块:

    注意:这里连接的是之前已经加入bootnode根节点的其他节点,与根节点的连接并不会显示在peers中。如果是第一个连接bootnode的节点,连接了bootnode的时候输入admin,peers是空的,需要继续搭建一个节点来测试他们互相连接。

  • 相关阅读:
    HIVE源码(5):HQL 转换为 MR 源码详细解读(4)
    HIVE源码(4):HQL 转换为 MR 源码详细解读(3)HQL 生成 AST(抽象语法树)
    HIVE源码(3):HQL 转换为 MR 源码详细解读(2)
    HIVE源码(2):HQL 转换为 MR 源码详细解读(1)
    HIVE源码(1):HQL 是如何转换为 MR 任务的
    FLINK基础(103): DS算子与窗口(14)多流转换算子(5) Interval Join
    FLINK基础(93): DS算子与窗口(7)单流算子(6) 窗口算子 Window/WindowAll/Window Apply/WindowReduce
    FLINK基础(92): DS算子与窗口(6)单流算子(5)KeyBy(1)
    FLINK基础(85):DS状态机制(11) 总结
    1822. Sign of the Product of an Array
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313391.html
Copyright © 2020-2023  润新知