区块链学堂(第三课):以太坊生产网络/测试网络/私有网络+Geth 搭建私有网络实战

陈琳 发布在 竞争币 6 13512

要理解以太坊 PrivateNetwork 先要理解以太坊的两种官方网络,目前以太坊官方提供了两种网络:

  1. 生产环境网络
  2. 测试网络 TestNet

下面将分别简单讲解下这两种网络。

以太坊生产网络

以太坊的生产网络顾名思义,也就是产生真正有价值的 的以太币的网络。 目前生产网络目前已经生成了300万以上的区块,还在持续生成中。挖矿挖出来的每个以台币在10美金以上。 生产环境下的以太坊状态时如此的(截图自2017-02-17)

p1

生产环境网络优点

  1. 全球化的,部署在Internet环境上的,
  2. 智能合约的代码,执行,区块的调用,都可以清晰的查看到。
  3. 部署在生产环境上的智能合约,全世界任何应用都可以调用

缺点:

  1. 任何合约执行都会消耗真实的以太币,也就是真实的现金。不适合开发、调试和测试,
  2. 所有节点是全球化的,速度较慢
  3. 且对于部分商业应用来说,只需要一部分节点,例如分布式部署的10-20台服务器即可。而不需要遍布全球的网络。

 

以太坊测试网络 TestNet

 

以太坊的测试网络也是官方提供的,顾名思义就是专供用户来开发、调试和测试的。 上面的合约执行不消耗真实的以太币。也就是不花钱

所以如果开发简单的智能合约的话,用测试网络也就足够了,用户可以把更多的精力集中在智能合约的编写上。

但因为网络是官方提供的,因此对于以太坊技术的底层实现、Geth的各种参数接口、整个以太坊的技术真实性能的理解就会弱很多。所以从开发的角度来说,一个更好的选择是Private Network,可以从技术的底层去深入理解以太坊。

测试环境网络优点

  1. 合约执行不消耗真实货币
  2. 全球化的,部署在Internet环境上的,
  3. 智能合约的代码,执行,区块的调用,都可以清晰的查看到。
  4. 部署在测试环境上的智能合约,全世界任何应用都可以调用

缺点:

  1. 所有节点是全球化的,速度较慢
  2. 测试网络不可能作为商业应用的实际落地环境

 

以太坊私有网络 PrivateNetwork

 

以太坊的私有网络,顾名思义就是由用户自己通过Geth创建的私有网络,是一个非常适合开发、调试和测试的网络

优点

  1. 方便开发者深入理解以太坊的技术底层
  2. 因为节点相对较少,速度较快
  3. 用户可以随时创建,随时销毁,随时重建一个以太坊网络
  4. 随意的增加节点数目,或者删除节点,
  5. 既可以在服务器上建立,也可以在自己的windows或者Mac机器上建立,
  6. 甚至一台机器可以建立多个节点,在一台机器上实现多节点的私有网络。

缺点

  1. 因为不是全球化的,只有在私有网络内的节点才能查看智能合约的执行、调用等。

下一章讲解:实战搭建私有网络!

在本章中我们将实战如何使用Geth,如何搭建以太坊的私有网络。

之前说过Geth是三种实现以太坊协议的工具之一,由于Geth是官方推崇的以及个人精力有限,对于另外两种工具的搭建私有网络,请参考网上资料。
下面的Geth实战,在MacBook上实现,对于Windows方面,比较类似。

 

Step 1: 建立目录和genesis.json

 

  • 在命令行模式创建一个目录,例如tmpPrivate

p2

  • 创建文件genesis.json, 并填入如下内容。
    {
      "nonce": "0x0000000000000042",
      "timestamp": "0x0",
      "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "extraData": "0x0",
      "gasLimit": "0x80000000",
      "difficulty": "0x1",
      "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "coinbase": "0x3333333333333333333333333333333333333333",
      "alloc": {     }
    }
    

    用户可以vim,也可以用其他编辑器如sublime等,个人推荐使用Atom
    Atom 官网地址: https://atom.io/
    Atom 是一个由谷歌支持发布的文本编辑器, 一个你可以自定义做任何事情的现代编辑器,后面涉及文件和代码演示会主要在Atom上执行。

创建完成后,在Atom中,本文件夹下应该只有一个genesis.json

p3

 

Step 2: 执行命令,创建创世区块

 

  • 切换回命令行,执行命令,制造创世区块
    geth --datadir "./" init genesis.json
    

执行结果如下:

p4

  • 这时候可以注意一下,此时当前目录下面会新增出两个文件夹geth和keystore
geth中保存的是区块链的相关数据
keystore中保存的是该链条中的用户信息

此时从Atom中看到的目录结构是这样的:

p5

 

Step 3:创建自己的私有链条

 

  • 执行一条最简单的geth命令,来创建自己的私有链条
    geth --datadir "./" --nodiscover console 2>>geth.log
    

    geth的参数项目很多,有兴趣的可以打geth –help 来获得详细信息,我们也会在之后的章节中对关键参数项进行说明。

  • 此时的命令行应该是这样的:

p6

 

Step 4:在自己的私有链条上创建用户

 

  • 输入命令eth.accounts, 我们会发现返回值为[]

这是因为此时虽然以太坊的私有链已经被创造出来,但还没有任何账户。

  • 输入命令personal.newAccount("xxx"), 该命令将创造一个新的用户,该用户的密码是xxx. 当然用户也可以将xxx 改为123,或者123456,或者任意密码
  • 再次输入命令 eth.accounts, 我们会发现一个新的用户被创建了出来,这就代表我们已经创建了一个账户,重复personal.newAccount() & eth.accounts 我们可以创建若干个账户出来

整个命令截图如下:

p7

 

Step 5: 输出区块链的Log

 

  • 在Step 3中,我们执行的代码
    geth --datadir "./" --nodiscover console 2>>geth.log
    

    其中的代码 console 2>> geth.log 代表将控制台的一部分输出,输出到文件geth.log上去。

  • 打开另一个终端,找到geth.log的所在目录,执行命令 tail -f geth.log 从而持续的输出以太坊的日志

整个过程如下图所示:

p8

 

Step 6: 最重要的一步来了,开始挖矿!

 

  • 在命令行中执行命令 miner.start(), 开始在我们的区块链上进行挖矿

p9

  • 此时Geth.log的输出应该是这样的

p10

一直等到100%。这个以太坊私有链就会正式启动,并持续不断的生成出以太坊来。

注意点:

1. 挖矿挖到的ether币会默认保在第一个账户中,即eth.acccounts[0]中。
2. 挖矿是执行智能合约的基础。如果停止挖矿的话,不仅以太币会停止生成,所有智能合约的调用也会不起作用。
3. 如果真的要停止挖矿,可以执行命令miner.stop()来停止挖矿
4. 按上面的命令,应该是可以实现以太坊挖矿的。如果不行的话,有可能就是之前有存在的链,此时应该删除之前的数据。在Mac下即删除~/.ethash文件夹和里面的文件即可

Step 7: 最终当挖矿启动的时候的日志是这样的

p11

Step 8: 挖矿启动后,查看主账户的以太币数量

acc0 = eth.accounts[0]
eth.getBalance(acc0)

结果只要不为0,那就说明挖矿成功!

p12

下一章,将讲解geth中的若干概念,以及一些基本命令

发文时比特币标准价格 买价:¥8321.00 卖价:¥8195.00
作者:星云 (以太中文网创始人) 版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。

评论:6

您需要登录后才可以回复 登录|注册
    Author Image
    injor_chen 104 天前

    执行一步失败一步,无语

    +1
    +1
    我要点评
    Author Image
    wangcmoming 205 天前

    miner.start()返回值是null是为什么呢?

    +1
    +1
    我要点评
      Author Image
      Lee_Lee 184 天前

      我也出现了这样的问题,请问您是怎么解决的呢?

      +1
      +1
      我要点评
    Author Image
    lijun53562498 243 天前

    你好,我用miner.start()启动并初始化100%之后就报错了,没有正常挖矿,请问是哪里有问题
    I0324 13:51:02.196690 vendor/github.com/ethereum/ethash/ethash.go:291] Generating DAG: 100%
    I0324 13:51:02.226578 vendor/github.com/ethereum/ethash/ethash.go:276] Done generating DAG for epoch 0, it took 12m4.941168295s
    I0324 13:54:41.408799 usb.go:93] handle_events: error: libusb: interrupted [code -10]

    +1
    +1
    我要点评
    Author Image
    qq1973180132 260 天前

    以太坊的生产网络顾名思义,也就是产生真正有价值的 的以太币的网络。数字货币交易系统定制开发qq1973180132

    +1
    +1
    我要点评

    挖矿是执行智能合约的基础。如果停止挖矿的话,不仅以太币会停止生成,所有智能合约的调用也会不起作用。

    +1
    +1
    我要点评