zoukankan      html  css  js  c++  java
  • 10分钟完成阿里云环境搭建以太坊私有链

    概述

    本文主要介绍在阿里云的服务器上搭建一条以太坊私有链
    为了避免因为环境因素造成的异常,如果是老的机器,所以这里建议重新格式化,选择公共镜像里面的系统版本

    系统版本是:公共镜像,Ubuntu,16.04 64位
    Geth的版本号是:1.7.3-stable

    如果你执行的过程和下面有差异,先确认上面两个版本是否一致

    一.阿里云服务器的准备

    机器配置:我的机器配置是,CPU 1核,网络1M, 内存2G
    镜像选择:公共镜像,Ubuntu,16.04 64位
    等待系统重启

    内存至少2G,如果不够,可以通过映射虚拟内存来扩充

    二.安装ethereum

    登录系统后,依次执行

    apt-get update有的时候会很慢,耐心等待...

    #更新软件包信息
    apt-get update
    
    #添加 ppa 到当前的库中并且自动导入公钥
    apt-get install software-properties-common
    add-apt-repository -y ppa:ethereum/ethereum
    add-apt-repository -y ppa:ethereum/ethereum-dev
    apt-get update
    
    #安装ethereum
    apt-get install ethereum
    
    #安装完成后,查看版本号
    geth version
    

    这里大家再次确认下geth version 返回的版本号是否是1.7.3-stable,如果不一致后面的操作可能有不一致的地方

    三.启动ethereum

    3.1 创始区块信息准备

    在工作目录(我的是/root/eth)下新建一个文件test_genesis.json,把下面内容复制进去

    {
      "nonce":"0x0000000000000042",
      "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
      "difficulty": "0x1",
      "coinbase":"0x0000000000000000000000000000000000000000",
      "timestamp": "0x00",
      "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
      "extraData": "0x20180112",
      "gasLimit":"0x0000ffff",
      "coinbase": "0x660a107ee034Cb54bb05a22B5ecDdF050C8A2c90",
      "alloc": {},
      "config": {
        "chainId": 20180113,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
      }
    }

    3.2 创始区块初始化

    执行下面命令,忽略WARN,如果打印Fatal,确认是否复制的时候有特殊字符插入

    geth init /root/eth/test_genesis.json

    3.3 启动测试链

    geth --identity "test etherum" --rpc --rpccorsdomain "*" --datadir "/root/eth/data" --port "30303" --rpcapi "db,eth,net,web3" --networkid 20181013 console --dev

    启动之后会打印启动信息,胡月,WARN,然后停留在命令行输入的地方

    注意,如果一直在刷屏,显示在连接节点并同步区块,ctrl+c中断,回去确认3.2是否执行成功,出现节点不停在同步区块,是因为测试创始区块创建失败,导致连接到ETH网络上了

    这里可以注意下最后一个WARN的信息

    WARN [01-13|16:10:50] Block sealing failed                     err="waiting for transactions"

    Geth启动后,自动开启挖矿,但是因为没有交易所以执行失败,这个时候执行miner.start()会一直返回null,这是正常的。

    3.4 Geth命令测试

    用户命令测试

    #返回钱包管理的账户地址列表  
    #返回示例:["0x3138e3722fb4280cb67f6e858108136bfa1c9160"]
    eth.accounts
    
    #创建账户地址,参数为账户锁定密码,在转账前需要先解锁账户
    #我们把这个命令运行两次,创建两个地址,加上默认的,一共有了三个账户地址
    personal.newAccount('111111')
    personal.newAccount('111111')
    
    #为账户设置别名,方便命令输入
    user1=eth.accounts[0]
    user2=eth.accounts[1]
    user3=eth.accounts[2]
    
    #查看地址user1余额,这个地址是测试链默认开通的一个地址,里面初始化有很多币
    #我们创建的另外两个地址余额未0
    eth.getBalance(user1)
    
    #查看区块高度,现在为0
    eth.blockNumber
    
    #转账测试,首先解锁账号user1
    #命令运行后要求输入解锁密码,直接回车,默认账号锁定密码为空,返回true成功
    personal.unlockAccount(user1)
    
    #从user1向user2转账3个以太币
    #命令运行后,提交交易立马回出发挖矿
    eth.sendTransaction({from:user1,to:user2,value:web3.toWei(3,"ether")})
    
    #查看区块高度,这时高度为1
    eth.blockNumber

    挖矿测试

    geth启动后,自动启动挖矿,这时运行miner.start(),返回为null
    无交易的时候不挖矿,当有交易时自动会触发挖矿流程

    #我们可以先停止挖矿
    miner.stop()
    
    #提交交易,这时候只提交,查看账户余额,但是未确认
    eth.sendTransaction({from:user1,to:user2,value:web3.toWei(3,"ether")})
    
    #启动挖矿,确认交易,再次查看账户余额
    miner.start()
    
    #那么挖矿奖励去哪儿了?查看矿工地址
    eth.coinbase
    
    #设置矿工地址
    miner.setEtherbase(eth.coinbase)
    
  • 相关阅读:
    Eclipse + Gradle + TestNG environment setup troubleshooting
    石家庄市教育局人才市场
    js技巧小记
    转 Browserhacks – 史上最全 CSS & JS Hack 手册
    【聊聊并发】【转】
    【深入理解Java内存模型】【转】
    Awk基本入门[1] Awk Syntax and Basic Commands
    Sed基本入门[6] Sed MultiLine Commands and loops
    Awk基本入门[2] Awk Builtin Variables
    SuperMap IS.NET 如何发布数据库型工作空间
  • 原文地址:https://www.cnblogs.com/twodog/p/12137705.html
Copyright © 2011-2022 走看看