环境  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 或自动挖矿 ,但是实测无效.

centos 以太坊多节点私链搭建的更多相关文章

  1. c#实战开发:以太坊钱包对接私链 (二)

    上一篇讲了 以太坊私链搭建 首先下载Ethereum Wallet 钱包 可以直接百度 下载如果直接打开它会默认连接公链 所以我们要通过命令打开 "F:\Program Files\Ethe ...

  2. c#实战开发:以太坊私链搭建(一)

    1.第一步环境搭建 运行环境:window  客户端版本:Go语言geth 下载地址https://ethereum.github.io/go-ethereum/downloads/ 以太坊API中文 ...

  3. 转:区块链开发(一)搭建基于以太坊go-ethereum的私有链环境

    区块链开发(一)搭建基于以太坊go-ethereum的私有链环境 wo541075754 · 2016-11-07 13:00:03 · 3730 次点击 · 预计阅读时间 3 分钟 · 约1小时前  ...

  4. 以太坊(Ethereum) - 节点时间未同步和区块同步失败案例分析

    背景 以太坊技术搭建的区块链网络,节点间需要保证时间一致,才能正常有序的发送交易和生成区块,使得众多节点共同维护分布式账本(区块数据+状态数据).但是,网络中节点的系统时间不一致回出现什么现象呢,我们 ...

  5. IPFS私链搭建及常用操作命令

    1. 共享密钥 同一个IPFS私链内的所有节点必须共享同一个密钥才能加入. 首先我们使用密钥创建工具,创建一个密钥. 下载地址:https://github.com/Kubuxu/go-ipfs-sw ...

  6. Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建

    原文地址:石匠的blog truffle是一个基于Javascript开发的一套智能合约开发框架,使用Solidity语言编写合约.truffle有一套自动的项目构建机制,集成了开发,测试和部署的各个 ...

  7. 【以太坊开发】区块链中的预言机:Oraclize原理介绍

    智能合约的作用很多,但是很多数据还是要基于互联网,那么如何在合约中获取互联网中的数据?Oraclize就是为了这个目的而诞生的. 工作原理: 智能合约通过对Oraclize发布一个合约之间的调用请求来 ...

  8. 以太坊国内节点大全(ropsten)

    admin.addPeer('enode://2d1e1f1242c3b54ea56046f74f15943f47ab410e3c0b82bffb501793ebb19e147f8f0e63d01c2 ...

  9. java与以太坊之web3j

    web3j:https://docs.web3j.io/index.html 如何使用Web3j生成私钥和地址,而不只是创建密钥存储JSON文件? https://blog.csdn.net/mong ...

随机推荐

  1. IOS中iframe的滚动条不启作用

    引自:https://www.cnblogs.com/weinan/archive/2013/01/05/2832800.html 问题描述: iframe设置了高度(例如500px).倘若ifram ...

  2. iOS开发系列-Shell脚本生成IPA

    概述 在公司开发到了测试阶段需要频繁打包交付给测试,看似简单的工作,重复的流程总是感觉不是那么好,我们可以借助苹果提供的编译指令编译项目. 自动化脚本编译打包IPA 常见的iOS项目就是基于xcode ...

  3. Python基础知识之5——函数基础

    函数 函数是一个独立且封闭完成特定功能的代码块,可以在任何地方被调用.Python内置了很多函数,我们可以直接调用,使用的时候,先查询下Python的官方文档即可: http://docs.pytho ...

  4. 新知道一个 端对端加密 Signal protocol

    看 socketio Sponsors 列表中的小蓝鸟,发现网站中有使用 x-jquery-tmpl [翻译]WhatsApp 加密概述(技术白皮书) 知道一个叫 Signal 协议 的端对端加密 端 ...

  5. xkl的各种沙雕低错

    13,特判判掉20分算不算? 12,linux用c++11编译: g++ -std=c++11 -o a a.cpp g++ a.cpp -std=c++11 -o a //g++ a.cpp -st ...

  6. linux中对EINTR错误的处理

    https://www.cnblogs.com/flyfish10000/articles/2576885.html EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函 ...

  7. Delphi让所有的窗口的标题和图标显示在任务栏上

    Delphi:让所有的窗口的标题和图标显示在任务栏上在Delphi中,除了主窗口之外,当其它的窗口显示或切换到焦点时.默认情况下,窗口标题和图标并不会显示在任务栏中,为了实现像主窗口一样,每当窗口显示 ...

  8. System.Web.Mvc.ActionResult.cs

    ylbtech-System.Web.Mvc.ActionResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Publi ...

  9. JS switch 分支语句

    描述:根据一个变量的不同取值,来执行不同的代码. 语法结构: switch(变量) { case 值1: 代码1; break; case 值2: 代码2; break; case 值3: 代码3; ...

  10. 夏令营501-511NOIP训练18——高三楼

    传送门:QAQQAQ 题意:定义矩阵A与矩阵B重复,当且仅当A可以通过任意次行列交换得到B,例如下图A,B即为合法矩阵 现求对于$n*n$的矩阵有多少个不重复的矩阵 数据范围: 对于10%的数据 N≤ ...