ETH 001 私有链的搭建

最近想给同事做一次以太坊智能合约编写的分享,PPT写着写着越来越多。想想还算是把它弄成文章。

1.1 ETH介绍

     ETH 是我们的V神发起的一个开源的去中心化的数字货币项目。ETH在比特币的基础上提出了“智能合约”(Smart Contract)的概念。ETH更像是一个底层的操作系统。就像IOS 和安卓一样,提供丰富的API接口。 学习ETH 的相关的地址如下:

    白皮书:https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-White-Paper
    官方网站:https://www.ethereum.org
    区块查询:https://etherscan.io/   https://etherchain.org/

1.2 ETC 介绍

    老有朋友问ETC 和ETH是什么关系。其实他们就是亲兄弟。ETH 是ETC出现了一次BUG,导致有人损失了资产以后分裂出来的项目。但是有一些认为数字货币就是去中心化,是民主的,BUG的产生本身也是系统规则本身。 于是他们坚持在了ETC社区。

2.2 私有链搭建

  • 代码安装方式
  • 创世块配置
  • 编译代码

2.2.1 代码安装方式

初学者我们推荐使用 Installing from PPA 安装

本人的安装目录 : ~/Library/Ethereum/geth

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum

2.2.2 机器环境

localhost:~ lei$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.2
BuildVersion:   17C88

2.2.3 GO 环境安装

这里先不介绍GO的环境配置,请自行查询。

版本需求为: version 1.7+ 本人使用的GO版本

localhost:~ lei$ go version
go version go1.9.3 darwin/amd64

2.3 私有链数据准备

2.3.1 初始化文件 genesis.json

{
 “config”: {“
    chainId”: 88888,
    “homesteadBlock”: 0,
    “eip155Block”: 0,
    “eip158Block”: 0
  },
  “coinbase”: “0x0000000000000000000000000000000000000000”,
  “difficulty”: “0x1”,
  “extraData”: “0x00”,
  “gasLimit”: “0x47e7c5”,
  “nonce”: “0x0000000000000042”,
  “mixhash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
  “parentHash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
  “timestamp”: “0x00”,
  “alloc”: {
   “430e986e0cca10a174baad96871ec9cb308c6d05”: {
      “balance”: “111111”
    }
  }
}

2.3.2参数说明

参数 解释说明
mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity,(44)章节所描述的条件。.
nonce nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
coinbase 矿工的账号,(可以随便填写)
timestamp 设置创世块的时间戳
parentHash 上一个区块的hash值,因为是创世块,所以这个值是0
Data 附加信息,随便填,可以填你的个性信息
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

3启动步骤

初始化数据

geth --datadir "./" init genesis.json
运行以后会出现两个目录
geth中保存的是区块链的相关数据
keystore中保存的是该链条中的用户信息
ETH 001 私有链的搭建_第1张图片
image.png

启动控制台

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

在这个环境里也内置了一些用来操作以太坊的Javascript对象,可以直接使用这些对象。这些对象主要包括:

  1. eth:包含一些跟操作区块链相关的方法
  2. net:包含以下查看p2p网络状态的方法
  3. admin:包含一些与管理节点相关的方法
  4. miner:包含启动&停止挖矿的一些方法
  5. personal:主要包含一些管理账户的方法
  6. txpool:包含一些查看交易内存池的方法
  7. web3:包含了以上对象,还包含一些单位换算的方法

你可能感兴趣的:(ETH 001 私有链的搭建)