以太坊私链入门


声明:本文转载自https://my.oschina.net/neochen/blog/1610165,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

以太坊私链入门

本文作者最近我在找工作,有意向致电 13113668890

Mr. Neo Chen (陈景峯), netkiller, BG7NYT


中国广东省深圳市龙华新区民治街道溪山美地
518131
+86 13113668890

<netkiller@msn.com>

版权声明

转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。

文档出处:
http://netkiller.github.io
http://netkiller.sourceforge.net

微信扫描二维码进入 Netkiller 微信订阅号 

QQ群:128659835 请注明“读者”

 

2018-01-20

摘要

本文采用碎片化写作,原文会不定期更新,请尽量阅读原文。

http://www.netkiller.cn/journal/ethereum.html

目录

1. 背景

区块链是什么?一句话,它是一种特殊的(非关系型)分布式数据库,这种数据库只能做插入和查找操作,并且没有管理员。

首先,区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库。

其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。

2. 软件安装与配置

2.1. Ubuntu

2.1.1. 安装 geth

安装环境



Ubuntu 17.10
 

sudo apt upgrade -y				 sudo apt install software-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt update sudo apt install ethereum
neo@netkiller ~ % geth version Geth Version: 1.7.3-stable Git Commit: 4bb3c89d44e372e6a9ab85a8be0c9345265c763a Architecture: amd64 Protocol Versions: [63 62] Network Id: 1 Go Version: go1.9.1 Operating System: linux GOPATH= GOROOT=/usr/lib/go-1.9

2.1.2. 安装 solc

sudo apt install solc -y
neo@netkiller ~ % solc --version solc, the solidity compiler commandline interface Version: 0.4.19+commit.c4cbbb05.Linux.g++

2.2. Windows

访问 https://geth.ethereum.org/downloads/ 下载并安装 Geth for Windows

2.3. Mac OS

brew tap ethereum/ethereum brew install ethereum

2.4. 编译安装

git clone https://github.com/ethereum/go-ethereum sudo apt-get install -y build-essential golang cd go-ethereum make geth

3. 创世区块

cd ~ mkdir -p ethereum cd ethereum

3.1. 初始化创世区块

创建文件 genesis.json

{   "nonce": "0x0000000000000042",   "difficulty": "0x020000",   "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",   "coinbase": "0x0000000000000000000000000000000000000000",   "timestamp": "0x00",   "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",   "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",   "gasLimit": "0x4c4b40",   "config": {       "chainId": 15,       "homesteadBlock": 0,       "eip155Block": 0,       "eip158Block": 0   },   "alloc": { } }



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

extraData: 附加信息,随便填,可以填你的个性信息

gasLimit: 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。
 

初始化创世区块

neo@netkiller ~/ethereum % geth init genesis.json  WARN [01-19|17:35:17] No etherbase set and no accounts found as default  INFO [01-19|17:35:17] Allocated cache and file handles         database=/home/neo/.ethereum/geth/chaindata cache=16 handles=16 INFO [01-19|17:35:17] Writing custom genesis block  INFO [01-19|17:35:17] Successfully wrote genesis state         database=chaindata                          hash=611596…424d04 INFO [01-19|17:35:17] Allocated cache and file handles         database=/home/neo/.ethereum/geth/lightchaindata cache=16 handles=16 INFO [01-19|17:35:18] Writing custom genesis block  INFO [01-19|17:35:18] Successfully wrote genesis state         database=lightchaindata                          hash=611596…424d04

默认目录是 /home/neo/.ethereum/ 你可以通过 --datadir 参数指定目录

neo@netkiller ~/ethereum % geth --datadir data init genesis.json WARN [01-19|17:38:16] No etherbase set and no accounts found as default  INFO [01-19|17:38:16] Allocated cache and file handles         database=/home/neo/ethereum/data/geth/chaindata cache=16 handles=16 INFO [01-19|17:38:17] Writing custom genesis block  INFO [01-19|17:38:17] Successfully wrote genesis state         database=chaindata                              hash=611596…424d04 INFO [01-19|17:38:17] Allocated cache and file handles         database=/home/neo/ethereum/data/geth/lightchaindata cache=16 handles=16 INFO [01-19|17:38:17] Writing custom genesis block  INFO [01-19|17:38:17] Successfully wrote genesis state         database=lightchaindata                              hash=611596…424d04		  neo@netkiller ~/ethereum % find data  data data/keystore data/geth data/geth/chaindata data/geth/chaindata/LOCK data/geth/chaindata/LOG data/geth/chaindata/MANIFEST-000000 data/geth/chaindata/CURRENT data/geth/chaindata/000001.log data/geth/lightchaindata data/geth/lightchaindata/LOCK data/geth/lightchaindata/LOG data/geth/lightchaindata/MANIFEST-000000 data/geth/lightchaindata/CURRENT data/geth/lightchaindata/000001.log

目录结构

data ├── geth │  ├── chaindata │  │  ├── 000001.log │  │  ├── CURRENT │  │  ├── LOCK │  │  ├── LOG │  │  └── MANIFEST-000000 │  └── lightchaindata │      ├── 000001.log │      ├── CURRENT │      ├── LOCK │      ├── LOG │      └── MANIFEST-000000 └── keystore

3.2. 启动节点

neo@netkiller ~/ethereum % geth --networkid 123456 --rpc --rpccorsdomain "*" --nodiscover console  WARN [01-19|17:47:06] No etherbase set and no accounts found as default  INFO [01-19|17:47:06] Starting peer-to-peer node               instance=Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.1 INFO [01-19|17:47:06] Allocated cache and file handles         database=/home/neo/.ethereum/geth/chaindata cache=128 handles=1024 INFO [01-19|17:47:06] Initialised chain configuration          config="{ChainID: 15 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: 0 EIP158: 0 Byzantium: <nil> Engine: unknown}" INFO [01-19|17:47:06] Disk storage enabled for ethash caches   dir=/home/neo/.ethereum/geth/ethash count=3 INFO [01-19|17:47:06] Disk storage enabled for ethash DAGs     dir=/home/neo/.ethash               count=2 INFO [01-19|17:47:06] Initialising Ethereum protocol           versions="[63 62]" network=123456 INFO [01-19|17:47:06] Loaded most recent local header          number=0 hash=611596…424d04 td=131072 INFO [01-19|17:47:06] Loaded most recent local full block      number=0 hash=611596…424d04 td=131072 INFO [01-19|17:47:06] Loaded most recent local fast block      number=0 hash=611596…424d04 td=131072 INFO [01-19|17:47:06] Loaded local transaction journal         transactions=0 dropped=0 INFO [01-19|17:47:06] Regenerated local transaction journal    transactions=0 accounts=0 INFO [01-19|17:47:06] Starting P2P networking  INFO [01-19|17:47:06] RLPx listener up                         self="enode://9f6490ffb5236f2ddc5710ae73d47c740e0a3644bbd2d67029cf4a6c4693d2f470b642fd2cc3507f7e851df60aaeb730a1270b7a477f91ec5b6b17a8a4b40527@[::]:30303?discport=0" INFO [01-19|17:47:06] IPC endpoint opened: /home/neo/.ethereum/geth.ipc  INFO [01-19|17:47:06] HTTP endpoint opened: http://127.0.0.1:8545  Welcome to the Geth JavaScript console!  instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.1  modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0  > INFO [01-19|17:47:09] Mapped network port                      proto=tcp extport=30303 intport=30303 interface="UPNP IGDv1-IP1"



identity: 区块链的标示,随便填写,用于标示目前网络的名字

init: 指定创世块文件的位置,并创建初始块

datadir: 设置当前区块链网络数据存放的位置

port: 网络监听端口

rpc: 启动rpc通信,可以进行智能合约的部署和调试

rpcapi: 设置允许连接的rpc的客户端,一般为db,eth,net,web3

networkid: 设置当前区块链的网络ID,用于区分不同的网络,是一个数字

console: 启动命令行模式,可以在Geth中执行命令
 

3.2.1. rpcaddr

默认是 127.0.0.1 

HTTP endpoint closed: http://127.0.0.1:8545

通过 --rpcaddr="0.0.0.0" 指定监听地址

HTTP endpoint opened: http://0.0.0.0:8545

neo@netkiller ~/ethereum % geth --networkid 123456 --rpc --rpcaddr="0.0.0.0" --rpccorsdomain "*" --nodiscover console   INFO [01-20|01:41:33] Starting peer-to-peer node               instance=Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.1 INFO [01-20|01:41:33] Allocated cache and file handles         database=/home/neo/.ethereum/geth/chaindata cache=128 handles=1024 INFO [01-20|01:41:34] Initialised chain configuration          config="{ChainID: 15 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: 0 EIP158: 0 Byzantium: <nil> Engine: unknown}" INFO [01-20|01:41:34] Disk storage enabled for ethash caches   dir=/home/neo/.ethereum/geth/ethash count=3 INFO [01-20|01:41:34] Disk storage enabled for ethash DAGs     dir=/home/neo/.ethash               count=2 INFO [01-20|01:41:34] Initialising Ethereum protocol           versions="[63 62]" network=123456 INFO [01-20|01:41:34] Loaded most recent local header          number=531 hash=1a2707…3a27bc td=79083846 INFO [01-20|01:41:34] Loaded most recent local full block      number=531 hash=1a2707…3a27bc td=79083846 INFO [01-20|01:41:34] Loaded most recent local fast block      number=531 hash=1a2707…3a27bc td=79083846 INFO [01-20|01:41:34] Loaded local transaction journal         transactions=0 dropped=0 INFO [01-20|01:41:34] Regenerated local transaction journal    transactions=0 accounts=0 WARN [01-20|01:41:34] Blockchain not empty, fast sync disabled  INFO [01-20|01:41:34] Starting P2P networking  INFO [01-20|01:41:34] RLPx listener up                         self="enode://9f6490ffb5236f2ddc5710ae73d47c740e0a3644bbd2d67029cf4a6c4693d2f470b642fd2cc3507f7e851df60aaeb730a1270b7a477f91ec5b6b17a8a4b40527@[::]:30303?discport=0" INFO [01-20|01:41:34] IPC endpoint opened: /home/neo/.ethereum/geth.ipc  INFO [01-20|01:41:34] HTTP endpoint opened: http://0.0.0.0:8545  Welcome to the Geth JavaScript console!  instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.1 coinbase: 0x83fda0ba7e6cfa8d7319d78fa0e6b753a2bcb5a6 at block: 531 (Tue, 14 Nov 2017 17:36:05 HST)  datadir: /home/neo/.ethereum  modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0  > INFO [01-20|01:41:40] Mapped network port                      proto=tcp extport=30303 intport=30303 interface="UPNP IGDv1-IP1"

3.3. 使用节点进行挖矿

3.3.1. 启动矿工开始挖矿

> miner.start(1)

这里的1表示只使用一个线程运行,第一次运行时将开始创建DAG文件,只需等待进度条到100,则将开始挖矿。 实际你看到的挖矿速度很快,这是因为我们已经在初始化创世区块时配置为:"nonce": "0x0000000000000042"。 “0x42”难度能让你在私有测试网链上快速挖以太币。

提示

挖矿时必然有矿工账户,而系统默认使用创建的第一个账号。

> miner.start(1) INFO [01-19|21:06:43] Updated mining threads                   threads=1 INFO [01-19|21:06:43] Transaction pool price threshold updated price=18000000000 INFO [01-19|21:06:43] Starting mining operation  null > INFO [01-19|21:06:43] Commit new mining work                   number=1 txs=0 uncles=0 elapsed=717.552µs INFO [01-19|21:06:46] Generating ethash verification cache     epoch=0 percentage=91 elapsed=3.000s INFO [01-19|21:06:46] Generated ethash verification cache      epoch=0 elapsed=3.273s INFO [01-19|21:06:51] Generating DAG in progress               epoch=0 percentage=0  elapsed=5.056s INFO [01-19|21:06:56] Generating DAG in progress               epoch=0 percentage=1  elapsed=10.140s INFO [01-19|21:07:01] Generating DAG in progress               epoch=0 percentage=2  elapsed=15.119s INFO [01-19|21:07:06] Generating DAG in progress               epoch=0 percentage=3  elapsed=19.924s INFO [01-19|21:07:11] Generating DAG in progress               epoch=0 percentage=4  elapsed=24.739s INFO [01-19|21:07:16] Generating DAG in progress               epoch=0 percentage=5  elapsed=29.473s INFO [01-19|21:07:22] Generating DAG in progress               epoch=0 percentage=6  elapsed=35.641s INFO [01-19|21:07:26] Generating DAG in progress               epoch=0 percentage=7  elapsed=40.374s INFO [01-19|21:07:31] Generating DAG in progress               epoch=0 percentage=8  elapsed=45.134s INFO [01-19|21:07:36] Generating DAG in progress               epoch=0 percentage=9  elapsed=49.908s INFO [01-19|21:07:41] Generating DAG in progress               epoch=0 percentage=10 elapsed=54.633s	 ...... ...... ...... INFO [01-19|21:22:43] Generated ethash verification cache      epoch=0 elapsed=15m57.328s INFO [01-19|21:22:47] Generating ethash verification cache     epoch=1 percentage=17 elapsed=3.031s INFO [01-19|21:22:50] Generating ethash verification cache     epoch=1 percentage=34 elapsed=6.056s INFO [01-19|21:22:53] Generating ethash verification cache     epoch=1 percentage=49 elapsed=9.562s INFO [01-19|21:22:57] Generating ethash verification cache     epoch=1 percentage=70 elapsed=13.115s INFO [01-19|21:23:00] Generating ethash verification cache     epoch=1 percentage=90 elapsed=16.123s INFO [01-19|21:23:01] Generated ethash verification cache      epoch=1 elapsed=17.576s INFO [01-19|21:23:19] Generating DAG in progress               epoch=1 percentage=0  elapsed=18.198s INFO [01-19|21:23:32] Successfully sealed new block            number=1 hash=e2b5b9…9b1bfe INFO [01-19|21:23:32] 

本文发表于2018年01月21日 08:32
(c)注:本文转载自https://my.oschina.net/neochen/blog/1610165,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1969 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1