[TOC]
## 14.1以太坊网络
去中心化共识的基础是参与节点的点对点网络,节点维护并保证区块链网络的安全。参见挖矿。
## 14.2以太坊网络数据统计
EthStats.net 是以太坊网络实时数据的仦表板,这个仦表板展示重要信息,诸如现在的区块,散表难度,gas 价格和 gas 花贶等。页面上显示的节点只是精选了网络上的实际节点。任何人都可以在 EthStats 仦表板上添加他们的节点。
Github 上的 Eth-Netstats README 描述了如何连接。
EtherNodes.com 展示了节点数的当前和历史数据以及以太坊主网络和
Morden 测试网络上的其他信息。
当前实时网络上客户端实现分配 – EtherChain 上的实时数据。
## 14.3公有链、私有链和联盟链
当今大多数以太坊项目都依靠以太坊作为公有链,公有链可以讵问到更多用户,网络节点,货币和市场。然而通常有理由更偏好私有链或联盟链(在一群值得信任的参与者中)。例如,银行领域的很多公司都希望以太坊作为他们私有链的平台。以下是博客发文《关于公有链和私有链》的摘彔,它解释了三种区块链在许可方面的区别:
* 公有链:世界上所有人都可以阅读和发送交易。如果他们合法都有希望看到自己被包括在内。世界上任何人都能参与到共识形成过程——决定在链条上添加什么区块以及现状是怎样的。作为中心化或准中心化信任的替代品,公有链受加密经济的保护,加密经济是经济激励和加密图形验证的结合,用类似工作量证明或权益证明的机制,遵循的总原则是人们影响共识形成的程庙和他们能够影响的经济资源数量成正比。这类区块链通常被认为是"完全去中心化"。
* 联盟链:共识形成过程由预先选择的一系列的节点户掌控,例如,设想一个有
15 个金融机构的团体,每个机构都操作一个节点,为了使区块生效,其中的
10 个必项签署邁个区块。阅读区块链的权利可能是公开的,或仁限于参与者,也有混合的路很,比如区块的根散表和应用程序编程接口一起公开,使公共成员可以进行一定量的查询,重获一部分区块链状态的加密图形证明。这类区块
链被认为是"部分去中心化"。
* 私人区块链:书写讲可对一个组织保持中心化。阅读讲可可能是公开的或者限制在任意程庙。应用很可能包含对单个公司内部的数据库管理,审查等,因此公共的可读性在很多情况下根本不必要,但在另一些情况下人们又想要公共可读性。 私有链/联盟链可能和公有链毫无联系,他们仍然通过投资以太坊软件开发,对以太坊整体生态系统有利。经过一段时间,这会转发成软件改善,知识共享和工作机会。
## 14.4如何连接
Geth 会持续尝试在网络上连接到其他节点,直到有了端点为止。如果你在路由器上有可用的 UPnP 或者在面向因特网的服务器上运行以太坊,它也会接受其他节点的连接。
Geth 通过发现协议找到对等端。在发现协议中,节点于相闲聊发现网络上的其他节点。最开始,geth 会使用一系列辅助程序节点,这些辅助程序节点的端点记录在源代码中。
## 14.5检查连接和ENODE身份
要检查客户端在交互控制台上连接了多少对等端点,net 模块有两个属性可以提供信息,告诉你对等端点的数量以及你是否在监吩的节点。
```
> net.listening
true
> net.peerCount
4
```
了解更多关于连接对等端点的信息,比如IP地址、端口号和支持协议,用管理员对象的 peers()功能。admin.peers()会迒回到现在已连接的对等端点列表。
```
> admin.peers
[{
ID:
'a4de274d3a159e10c2c9a68c326511236381b84c9ec52e72ad732eb0b2b1a2277938f785
93cdbe734e6002bf23114d434a085d260514ab336d4acdc312db671b',
Name: 'Geth/v0.9.14/linux/go1.4.2',
Caps: 'eth/60',
RemoteAddress: '5.9.150.40:30301',
LocalAddress: '192.168.0.28:39219'
}, {
ID:
'a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0d ce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c',
Name: 'Geth/v0.9.15/linux/go1.4.2',
Caps: 'eth/60',
RemoteAddress: '52.16.188.185:30303',
LocalAddress: '192.168.0.28:50995'
}, { ID:
'f6ba1f1d9241d48138136ccf5baa6c2c8b008435a1c2bd009ca52fb8edbbc991eba36376 beaee9d45f16d5dcbf2ed0bc23006c505d57ffcf70921bd94aa7a172',
Name: 'pyethapp_dd52/v0.9.13/linux2/py2.7.9',
Caps: 'eth/60, p2p/3',
RemoteAddress: '144.76.62.101:30303',
LocalAddress: '192.168.0.28:40454'
}, { ID:
'f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae
2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0',
Name: '++eth/Zeppelin/Rascal/v0.9.14/Release/Darwin/clang/int',
Caps: 'eth/60, shh/2',
RemoteAddress: '129.16.191.64:30303',
LocalAddress: '192.168.0.28:39705'
} ]
```
要检查 geth 使用的端口,发现你自己的 enode URI 执行:
```
> admin.nodeInfo
{
Name: 'Geth/v0.9.14/darwin/go1.4.2', NodeUrl:
'enode://3414c01c19aa75a34f2dbd2f8d0898dc79d6b219ad77f8155abf1a287ce2ba60 f14998a3a98c0cf14915eabfdacf914a92b27a01769de18fa2d049dbf4c17694@[::]:303
03',
NodeID:
'3414c01c19aa75a34f2dbd2f8d0898dc79d6b219ad77f8155abf1a287ce2ba60f14998a3 a98c0cf14915eabfdacf914a92b27a01769de18fa2d049dbf4c17694',
IP: '::',
DiscPort: 30303,
TCPPort: 30303,
Td: '2044952618444',
ListenAddr: '[::]:30303'
}
```
## 14.6更快下载区块链
启动以太坊客户端时,会自动下载以太坊区块链。用于下载以太坊区块链的时间会根据客户端、客户端设置、连接速度和可用的端点数量变化。下面是更快获取以太坊区块链的一些选项。
## 14.7使用geth
如果你在用 geth 客户端,你可以做些什么来加速下载以太坊区块的时间。如果你用—fast 标志来执行以太坊快速同步,不会俅留过去的交易数据。
注意:你不能在执行所有或者部分正常的同步操作之后再使用这个标志,也就
是说在用这个指令之前,不能下载以太坊区块链的任何部分。查看这个
Ethereum Stack.Exchange answer 了解更多。
下面是想要更快同步客户端时使用的一些标志。
**—fast**
这个标志使通过状态下载而不是下载整个区块数据来实现快速同步成为可能。这样也能大幅减少区块链尺寸。注意:—fast 只在仅头开始同步区块链,并且是出于安全原因第一次下载区块链时,才会运行。查看 Reddit 发文了解更多。
**—cache=1024**
分配到内部缓存的千兆内存(最少 16MB / 数据库)。默认是 16MB,所以根据你电脑内存多少,增加到 256, 512, 1024 (1GB)或者 2048 (2GB)会带来不同。
—jitvm 这个标志可以激活 JIT VM。
完整的控制台命令示例:
```
geth --fast --cache=1024 --jitvm console
```
了解更多关于快速同步和区块链下载次数的讨论,查看这篇 Reddit 发文。
## 14.8导出/导入区块链
如果你已经同步了整个以太坊节点,可以仅完全同步的节点中寻出区块链数据并将其导入新节点。你可以在 geth 中用 geth export filename 指令寻出所有节点,并用 geth import filename 将区块链导入节点,来实现这一目的。
## 14.9静态节点,信任节点和启动节点
Geth 支持一个叫静态节点的特征,如果你有特定的端点,你会一直想不静态节点连接。如果断开连接,静态节点会再次连接。你可以配置永丽性静态节点,方法是将如下户说的放迕/static-nodes.json(这应该是和 chaindata 以及 keystone 在同一个文件夹)
```
[
"enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de1ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0@33.4.2.1:30303",
"enode://pubkey@ip:port"
```
你也可以在运行期间通过JavaScript使用admin.addPeeR()加入静态节点。
```
>admin.addPeer("enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae
```
## 14.10连接的常见问题
有时候可能无法连接,最常见的原因有:
* 本地时间不正确。要参与到以太坊网络中,需要精确的时钟。检查 OS 如何同步时钟(例如 sudo ntpdate -s time.nist.gov),即便只快了 12 秒也有可能
导致 0 端点。
* 有的防火墙配置可能会阷止 UDP 流通。可以用静态节点功能或者控制台上的 admin.addPeer() 来手劢配置连接。
不使用发现协议来启动 geth,你可以用—nodiscover 参数。你只会在运行测试节点或有固定节点的实验测试网络时才想要这样做。