使用 Go-Ethereum 1.7.2搭建以太坊私有链
目录
1、什么是Ethereum(以太坊)
以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太坊应用诞生。以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用。 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产。
以太坊的白皮书:https://github.com/ethereum/wiki/wiki/White-Paper
1.2、以太坊的几个基本概念:
以太坊简单来说就是区块链与智能合约的结合,是基于solidity语言实现的。在以太坊中,智能合约也有一个帐户地址。
- EVM
以太坊虚拟机(EVM)是以太坊中智能合约的运行环境。它不仅被沙箱封装起来,事实上它被完全隔离,运行在EVM内部的代码不能接触到网络、文件系统或者其它进程。甚至智能合约之间也只有有限的调用。
- Accounts
以太坊中有两类账户,它们共用同一个地址空间。外部账户,该类账户被公钥-私钥对控制。合约账户,该类账户被存储在账户中的代码控制。 外部账户的地址是由公钥决定的,合约账户的地址是在创建合约时确定的。
每个账户都有一个以太币余额(单位是“Wei”),该账户余额可以通过向它发送带有以太币的交易来改变。
- Transactions
每一笔交易都是一条信息,可以通过交易,将余额从一个帐户发至另一个帐户。
- Gas
每一笔交易需要支付一定的gas。gas price是由创建者设置的,调用合约的发送账户需要交易费用 = gas price * gas amount。
1.3、以太坊周边的常用工具
- Go-Ethereum
- Browser-solidity
- Mist
- TestRPC
2、什么是 Go-Ethereum?
Go-Ethereum是由以太坊基金会提供的官方客户端软件。它是用Go编程语言编写的,简称Geth。其中以下几个组件是值得了解的:
- Geth 客户端
当你开始这个客户程序,它连接到其他客户端(也称为节点)的网络下载同步区块。它将不断地与其他节点进行通信来保持它的副本是最新的。它还具有挖掘区块并将交易添加到块链的能力,验证并执行区块中的交易。它还可以充当服务器,您可以通过RPC来访问暴露的API接口。

- Geth 终端
这是一个命令行工具,可以让您连接到正在运行的节点,并执行各种操作,如创建和管理帐户,查询区块链,签署并将交易提交给区块链等等。更多介绍 点击这里
3、Go-Ethereum的开源地址在哪里?
https://github.com/ethereum/go-ethereum
4、如何安装Go-Ethereum 1.7.2
本文中使用的方法是通过Git下载源码,本地编译Go-Ethereum 1.7.2
git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum
git checkout v1.7.2
make geth
make all
查看安装好的geth版本号
➜ /Users/lion >geth version
Geth
Version: 1.7.2-stable
Git Commit: 1db4ecdc0b9e828ff65777fb466fc7c1d04e0de9
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9.1
Operating System: darwin
GOPATH=/Users/lion/my_project/_golang
GOROOT=/usr/local/Cellar/go/1.9.1/libexec
5、开始创建以太坊私有链
5.1、初始化一个创世区块
初始化创世区块时,要先创建一个genesis.json文件,内容如下:
genesis.json:
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"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的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。 |
接下来,我们使用geth init ./genesis.json --datadir "./chain"命令,来进行创世区块的初始化,当前区块链网络数据存放的位置会保存在chain目录中:
➜ /Users/lion/my_project/_eth/test >geth init ./genesis.json --datadir "./chain"
WARN [10-22|14:49:09] No etherbase set and no accounts found as default
INFO [10-22|14:49:09] Allocated cache and file handles database=/Users/lion/my_project/_eth/test/chain/geth/chaindata cache=16 handles=16
INFO [10-22|14:49:09] Writing custom genesis block
INFO [10-22|14:49:09] Successfully wrote genesis state database=chaindata hash=5e1fc7…d790e0
INFO [10-22|14:49:09] Allocated cache and file handles database=/Users/lion/my_project/_eth/test/chain/geth/lightchaindata cache=16 handles=16
INFO [10-22|14:49:09] Writing custom genesis block
INFO [10-22|14:49:09] Successfully wrote genesis state database=lightchaindata hash=5e1fc7…d790e0
5.2、启用私有链
使用以下命令,启用私有链:
geth \
--datadir "./chain" \
--nodiscover \
console 2>>eth_output.log
启动后的效果如下:
➜ /Users/lion/my_project/_eth/test >geth \
--datadir "./chain" \
--nodiscover \
console 2>>eth_output.log
Welcome to the Geth JavaScript console!
instance: Geth/v1.6.7-stable-ab5646c5/darwin-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
>
| 参数名称 | 参数描述 |
|---|---|
| datadir | 设置当前区块链网络数据存放的位置 |
| console | 启动命令行模式,可以在Geth中执行命令 |
| nodiscover | 私有链地址,不会被网上看到 |
在当前目录执行tail -f eth_output.log,可以看到输出日志。
➜ /Users/lion/my_project/_eth/test >tail -f eth_output.log
INFO [10-22|14:50:04] Bloom-bin upgrade completed elapsed=149.285µs
INFO [10-22|14:50:04] Initialising Ethereum protocol versions="[63 62]" network=1
INFO [10-22|14:50:04] Database conversion successful
INFO [10-22|14:50:04] Loaded most recent local header number=0 hash=5e1fc7…d790e0 td=131072
INFO [10-22|14:50:04] Loaded most recent local full block number=0 hash=5e1fc7…d790e0 td=131072
INFO [10-22|14:50:04] Loaded most recent local fast block number=0 hash=5e1fc7…d790e0 td=131072
INFO [10-22|14:50:04] Starting P2P networking
INFO [10-22|14:50:04] RLPx listener up self="enode://bcc414219b7423f56da261857508771c229a5ee370e2d5bee7a9d1a3886ae9c207956a80e03f7ba44ed5f9f7777ac64db9b6939d18f3f44786dc6fc5690035b1@[::]:30303?discport=0"
INFO [10-22|14:50:04] IPC endpoint opened: /Users/lion/my_project/_eth/test/chain/geth.ipc
INFO [10-22|14:50:05] Mapped network port proto=tcp extport=30303 intport=30303 interface=NAT-PMP(10.0.0.1)
后面章节中的命令,都是在启动私有链后的
Geth javascript console中操作
5.2.1、帐户的添加和查看
查看帐户,可以看到当前帐户是空的
> web3.eth.accounts
[]
创建帐户的方式有两种,第一种创建帐户时直接初始化密码
> web3.personal.newAccount("123456")
"0xbe323cc4fde114269a9513a27d3e985f82b9e25d"
其中返回的
0xbe323cc4fde114269a9513a27d3e985f82b9e25d是帐户,123456是帐户的密码
第二种方法是先创建账户,然后输入密码
> web3.personal.newAccount()
Passphrase:
Repeat passphrase:
"0x3b0ec02b4193d14abdc9cc5b264b5e3f39624d70"
这时我们再查看帐户,能够看到刚才创建的两个帐户已经存在了
> web3.eth.accounts
["0xbe323cc4fde114269a9513a27d3e985f82b9e25d", "0x3b0ec02b4193d14abdc9cc5b264b5e3f39624d70"]
5.2.2、开始挖矿和停止挖矿
挖矿执行以下命令:
> miner.start(1)
执行以后,通过刚才查看日志的方法tail -f eth_output.log,能够看到类似下面的日志,说明挖矿已经在进行.
INFO [10-22|15:01:32] Commit new mining work number=70 txs=0 uncles=0 elapsed=2.000s
INFO [10-22|15:01:34] Successfully sealed new block number=70 hash=a0cfd2…f99c06
INFO [10-22|15:01:34]
使用 Go-Ethereum 1.7.2搭建以太坊私有链的更多相关文章
- 转:使用 Go-Ethereum 1.7.2搭建以太坊私有链
使用 Go-Ethereum 1.7.2搭建以太坊私有链 目录 [toc] 1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底 ...
- Mac环境搭建以太坊私有链
原文地址: 石匠的blog 为了测试以太坊智能合约,最方便的是在本地搭建一个以太坊私有链.在mac上搭建环境主要需要以下步骤. geth安装 geth是go-ethereum的简写,是一个用go语言编 ...
- 区块链--Ubuntu上搭建以太坊私有链
1.搭建私链所需环境 操作系统:ubuntu16.04,开虚拟机的话要至少4G,否则会影响测试挖矿时的速度 软件: geth客户端 Mist和Ethereum Wallet:https://githu ...
- 区块链入门(2):搭建以太坊私有链(private network of ethereum),以及挖矿的操作..
在做一些测试工作的时候, 为了方便控制以及更快的进入真正的测试工作,可能需要搭建一个私有的以太坊网络. 而以太坊节点之间能够互相链接需要满足1)相同的协议版本2)相同的networkid,所以搭建私有 ...
- docker 搭建以太坊私有链搭建
最近区块链,火得不行,身边也有朋友准备玩这个,说是搭了一个星期,没有把环境搭建起来,叫我帮忙看看环境怎么搭建 于是我找到了官方的地址 https://github.com/ethereum/go-et ...
- ubuntu系统搭建以太坊私有链
1.安装curl.git apt-get update apt-get install git apt-get install curl 2.安装go curl -O https://storage. ...
- CentOS7搭建以太坊私有链
1. 环境准备:Win10 64位安装 VM VirtualBox,操作系统版本: CentOS-7-x86_64-Everything-1611.iso(7.71G). 切换root账号,方便安装程 ...
- Mac搭建以太坊私有链
记录过程与问题 一.安装 以go版本的ethereum进行安装 brew tap ethereum/ethereum brew install ethereum # 如果希望基于ethereum的de ...
- 区块链学习:Windows下搭建以太坊私有链环境
一:安装geth客户端 Windows要求必须是64位系统,从官方网站下载编译好的win64客户端,下载解压后只有一个Geth.exe问价,运行安装即可,下载地址如下: https://github. ...
随机推荐
- Android 从ImageView中获取Bitmap对象方法
showImageView.setDrawingCacheEnabled(true); Bitmap bitmap=showImageView.getDrawingCache(); showImage ...
- 跨平台移动端APP开发---简单高效的MUI框架
MUI是dcloud(数字天堂)公司旗下的一款跨平台开发移动APP的框架产品,在学习MUI框架之前,最先接触了Hbuilder代码编辑器,它带给我的第一感觉是快,这是HBuilder的最大优势,通过完 ...
- 计蒜客 2017 NOIP 提高组模拟赛(四)Day1 T2 小X的密室
https://nanti.jisuanke.com/t/17323 小 X 正困在一个密室里,他希望尽快逃出密室. 密室中有 N 个房间,初始时,小 X 在 1号房间,而出口在 N号房间. 密室的每 ...
- java中属性,set get 以及如何学习类的一些用法
1,先来看一个例子 package com.tdq.java; public class Run { public static void main(String[]args){ Student st ...
- 教你ASP.NET中如何防止注入攻击
你应该在程序中验证所有的不信任输入.你应该假定所有的用户输入都是非法的.用户可以在应用程序中提供表单字段,查询字串,客户端cookies和浏览器环境值比如用户代理字串和IP地址等. 弱输入校验通常为注 ...
- 【微信小程序】调用wx.request接口需要注意的问题
写在前面 之前写了一篇<微信小程序实现各种特效实例>,上次的小程序的项目我负责大部分前端后台接口的对接,然后学长帮我改了一些问题.总的来说,收获了不少吧! 现在项目已经完成,还是要陆陆续续 ...
- NPOI导出WPF DataGrid控件显示数据
最近做个项目,需要导出DataGrid显示的数据,中间遇到了不少的坑,在此纪录一下,方便以后查看,也希望能给用到的人,一点帮助. 导出DataGrid显示的数据,并不是导出DataGrid的Items ...
- Docker入门系列(一):目标和安排
Docker入门系列(一) 这个系列的教程来源于docker的官方文档,此文档的目的在于一步一步学习docker的使用方法. 这一系列的教程有如下几篇文档: docker安装启动 构建第一个docke ...
- 奥利奥好吃吗?Android 8.0新特性适配测试报告来啦!
WeTest 导读 谷歌2017 I/O开发者大会上发布了Android 8.0的正式版, 其官方代号为Oreo(奥利奥).网上关于Android8.0新功能特性的介绍已铺天盖地,新功能特性会对程序应 ...
- eclipse+fileSyncPlugin+svn+jenkins+tomcat
实现一个想法,把项目部署在linux服务器上,在本地的eclipse代码更新后,通过svn+jenkins自动同步到服务器, 然后通过eclipse远程debug项目.这样是不是就解决了在本地跑项目, ...