以太坊开发环境搭建

Geth安装

全称 Go Ethereum, 官网地址:https://github.com/ethereum/go-ethereum/wiki/geth

安装指令:

brew tap ethereum/ethereum

brew install ethereum

版本检测:

geth version

以太坊生产网络/测试网络/私有网络

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

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

优点

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

缺点

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

搭建私有网络

  1. 建立目录和 genesis.json
    • 创建一个目录,例如tmpPrivate
    • 创建文件genesis.json, 并填入如下内容
    { "nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0", "gasLimit": "0x80000000", "difficulty": "0x1", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { } }
  2. 执行命令,创建创世区块

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

    执行之后当前目录下面会新增出两个文件夹gethkeystore

    • geth中保存的是区块链的相关数据
    • keystore中保存的是该链条中的用户信息
  3. 创建自己的私有链条
  • 执行一条最简单的geth命令,来创建自己的私有链条
    geth --datadir "./" --nodiscover console 2>>geth.log
  1. 在自己的私有链条上创建用户
  • 输入命令 eth.accounts

    可以看到当前该区块链中共有几个账号,以及每个账号的公钥地址
  • 创建一个新用户,密码是xxx personal.newAccount("xxx")
  1. 输出区块链的Log
  • 执行如下命令

    geth --datadir "./" --nodiscover console 2>>geth.log

    进入命令行模式,其中参数
    • --datadir 代表文件夹地址
    • --nodiscover 代表该链条不希望被其他节点发现,
    • console >> geth.log 代表将控制台输出到文件geth.log中去
  • 打开另一个终端,找到geth.log的所在目录,执行命令tail -f geth.log 从而持续的输出以太坊的日志

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

注意点:

1. 挖矿挖到的ether币会默认保存在第一个账户中,即eth.acccounts[0]中。

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

3. 如果真的要停止挖矿,可以执行命令miner.stop()来停止挖矿

4. 按上面的命令,应该是可以实现以太坊挖矿的。如果不行的话,有可能就是之前有存在的链,此时应该删除之前的数据。在Mac下即删除~/.ethash文件夹和里面的文件即可。
  1. 挖矿启动后,查看主账户的以太币数量

acc0 = eth.accounts[0]

eth.getBalance(acc0)

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

猜你喜欢

转载自www.cnblogs.com/samniu/p/8657873.html