区块链,使用 Go-Ethereum 搭建以太坊私有链

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

  每一笔交易需要支付一定的gasgas price是由创建者设置的,调用合约的发送账户需要交易费用 = gas price * gas amount。

1.3、以太坊周边的常用工具

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.gitcd  go-ethereumgit checkout v1.7.2make gethmake all

  查看安装好的geth版本号

? /Users/lion >geth versionGethVersion: 1.7.2-stableGit Commit: 1db4ecdc0b9e828ff65777fb466fc7c1d04e0de9Architecture: amd64Protocol Versions: [63 62]Network Id: 1Go Version: go1.9.1Operating System: darwinGOPATH=/Users/lion/my_project/_golangGOROOT=/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 blockINFO [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.logWelcome 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 [1022|14:50:04] RLPx listener up                         self="enode://bcc414219b7423f56da261857508771c229a5ee370e2d5bee7a9d1a3886ae9c20[email protected][::]:30303?discport=0"
INFO [10-22|14:50:04] IPC endpoint opened: /Users/lion/my_project/_eth/test/chain/geth.ipc
INFO [1022|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 搭建以太坊私有链

原文地址:http://blog.51cto.com/iceman123/2089534

时间: 2024-10-29 10:46:29

区块链,使用 Go-Ethereum 搭建以太坊私有链的相关文章

使用 Go-Ethereum 1.7.2搭建以太坊私有链

1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太坊应用诞生.以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用. 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产. 以太坊的白皮书:https://github.com/ethe

如何搭建以太坊私有链

在开发以太坊时,很多时候需要搭建一条以太坊私有链,通过本文一起看看如何在Mac上进行搭建. 写在前面 阅读本文前,你应该对以太坊语言有所了解,如果你还不了解,建议你先看以太坊是什么 go-ethereum客户端安装 Go-ethereum客户端通常被称为Geth,它是个命令行界面,执行在Go上实现的完整以太坊节点.Geth得益于Go语言的多平台特性,支持在多个平台上使用(比如Windows.Linux.Mac).Geth是以太坊协议的具体落地实现,通过Geth,你可以实现以太坊的各种功能,如账户

区块链入门(2):搭建以太坊私有链(private network of ethereum),以及挖矿的操作..

在做一些测试工作的时候, 为了方便控制以及更快的进入真正的测试工作,可能需要搭建一个私有的以太坊网络. 而以太坊节点之间能够互相链接需要满足1)相同的协议版本2)相同的networkid,所以搭建私有网络最方便的方法就是通过geth命令中的--networkid选项,设置一个与主网不同的networkid(主网的networkid为1),这也是官方推荐的方法. 下面开始建立私有以太坊网络: mkdir private-geth cd private-geth 建立创世纪区块文件,是一个json格

Windows 10下搭建以太坊私有链环境

通过网上的资料,结合自己的搭建的eth环境,希望能对大家搭建区块链环境有所帮助了解.下面开始进入准备. 本次是windows环境下的私有链环境搭建,所以需要做以下准备: 1.win10系统(家庭版),64位 2.以太坊钱包Ethereum-Wallet-win64-0-10-0(我用的版本0.10.0) 3.以太坊geth客户端(我用的是1.4.11版) 1.1 安装geth Windows要求必须是64位系统,从官方网站下载编译好的win64客户端,下载解压后只有一个Geth.exe,运行安装

CentOS7搭建以太坊私有链

1. 环境准备:Win10 64位安装 VM VirtualBox,操作系统版本: CentOS-7-x86_64-Everything-1611.iso(7.71G). 切换root账号,方便安装程序 2. 安装Golang 1.9以上版本,yum安装的可以是1.8.3,所以要手动下载安装 国内镜像:https://studygolang.com/dl #cd /usr #wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64.t

ubuntu系统搭建以太坊私有链

1.安装curl.git apt-get update apt-get install git apt-get install curl 2.安装go curl -O https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz Unpack it to the /usr/local (might require sudo) tar -C /usr/local -xzf go1.5.1.linux-amd64.tar.gz 3.

以太坊私有链挖矿操作指南

先总体说一下步骤: 1.操作系统准备 linux(centos6.7) 2. golang安装 3.下载以太坊 4. 安装以太坊 5. 创世区块文件的准备 6. 创世区块初始化 7. 以太坊启动 ===================================== 1.最好是centos6.5以上的操作系统 2. 使用yum命令安装golang语言 [[email protected] src]# yum install golang 3. 下载以太坊源码,演示用的链接是 https://

区块链学习--win10下构建以太坊私链

构建以太坊私链1.环境是win10,下载对应的最新版本Ethereum-Wallet-win64-0-10-0.ziphttps://github.com/ethereum/mist/releases 2.解压到指定目录即可,运行Ethereum-Wallet初始化数据,私链搭建无需同步 3.初始化的相关数据,如用户为:administrator,则在系统生成目录:C:\Users\administror\AppData\Roaming\Ethereum WalletC:\Users\hehei

搭建以太坊私链完整版

可以直接下载程序进行安装,也可以下载源码自己进行编译安装,本文介绍源码编译方式. 源码编译 环境需求 正确安装Go语言环境 正确安装GCC:安装GCC方法 从github下载源码 go get github.com/ethereum/go-ethereum 编译 Ubuntu和Mac下编译 cd go-ethereum make geth 或者 make all Windows下编译 按以下目录结构才能正确编译,需要下载的包请自行下载 $GOPATH$/src ├── github.com │