A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【转载】        https://blog.csdn.net/loy_184548/article/details/77989092
搭建基于ethereum以太坊环境的私有链

安装geth在之前的博客有提到,所以本篇默认已经安装成功

geth -h   //能成功显示输出帮助,则表示已经成功安装
  • 1
  • 2
一、创世块

现在通过配置创世块来创建私有链。同一个网络中,创世块必须是一样的,否则无法联通。

创建一个private的根目录,新建创世块json文件genesis.json, 并把该文件放置于peivate目录下。内容如下:

ps: 其中详细内容可参考:here

{  "config": {        "chainId": 10,         "homesteadBlock": 0,        "eip155Block": 0,        "eip158Block": 0    },  "alloc"      : {},  "coinbase"   : "0x0000000000000000000000000000000000000000",  "difficulty" : "0x20000",  "extraData"  : "",  "gasLimit"   : "0x2fefd8",  "nonce"      : "0x0000000000000042",  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",  "timestamp"  : "0x00"}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

ps: 直接从官网复制,chainId 为 0, 但是会在合约部署出现问题,所以在这里改为10.

参数解释:

二、 创建

1 、 查看private存放目录

输入:pwd显示结果: /Users/pro/private
  • 1
  • 2
  • 3

2 、执行命令,创建私有链

geth --datadir "./" init genesis.json
  • 1

3、 结果

目录结构: private├── chain│   ├── geth│   │   └── chaindata│   │   │    ├── 000055.log│   │   │    ├── CURRENT│   │   │    ├── LOCK│   │   │    ├── LOG│   │   │    └── MANIFEST-000000│   │   ├── lightchaindata│   │   ├── LOCK│   │   └── nodekey│   └── keystore└── genesis.json
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
三、 启动geth --datadir "./" --nodiscover console 2>>geth.log
  • 1
  • 2

参数解释:

--nodiscover 使用这个参数,你的节点就不会被其他人发现,除非手动添加你的节点。否则,就只有一个被无意添加到一个陌生区块链上的机会,那就是跟你有相同的genesis文件和networkID。--maxpeers 0 如果你不想有人连上你的测试链,就用maxpeers 0。或者,你可以调整参数,当你确切的知道有几个节点要连接上来的时候。--rpc 允许RPC操作你的节点。这个参数在Geth上是默认的。--rpcapi "db,eth,net,web3" 这个命令指示了允许通过RPC访问的命令。默认情况下,Geth允许web3。--rpcport "8080"--rpccorsdomain "http://chriseth.github.io/browser-solidity/"--datadir "/home/TestChain1" 私有链存放路径(最好跟公有链路径不同)--port "30303" 网络监听端口,用来和其他节点手动连接--identity “TestnetMainNode" 用来标识你的节点的,方便在一大群节点中识别出自己的节点
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

查看输出(进入到private目录):

tail -f geth.log
  • 1
  • 2
四、使用

1、 查看区块信息

etheth.getBlock(0) //查看创始区块信息
  • 1
  • 2
  • 3

2、 查看节点信息

admin.nodeInfo //查看当前节点信息
  • 1
  • 2
> admin.nodeInfo{  enode: "enode://160e220dda023b7307de009791be621a2857195f062a6a1d9002276e95604f07481fca352a31bb6e1219edb5760ccdec65cad37310be578c2ad503ccd301a762@[::]:30303",  id: "160e220dda023b7307de009791be621a2857195f062a6a1d9002276e95604f07481fca352a31bb6e1219edb5760ccdec65cad37310be578c2ad503ccd301a762",  ip: "::",  listenAddr: "[::]:30303",  name: "Geth/v1.6.5-stable-cf87713d/darwin-amd64/go1.8.3",  ports: {    discovery: 30303,    listener: 30303  },  protocols: {    eth: {      difficulty: 17179869184,      genesis: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",      head: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",      network: 1    }  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

ps: 注意enode节点,这是当前节点的标识。

五、配置第二台私链服务器

要求: 两台电脑网络相通,并且要指定相同的networkid

按照同样的步骤在B电脑上搭建私链。

搭建完成后在B电脑上输入:

admin.addPeer("节点信息@A电脑ip地址:30303");例如: admin.addPeer("enode://160e220dda023b7307de009791be621a2857195f062a6a1d9002276e95604f07481fca352a31bb6e1219edb5760ccdec65cad37310be578c2ad503ccd301a762@127.0.0.1:30303")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

验证是否和其他节点成功建立连接,输入admin,查看是否连接上了节点,很多时候回连接不上,这时候就可以从另外一个节点尝试添加本节点,这样就会成功了。



2 个回复

倒序浏览
回复 使用道具 举报
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马