-
区块链-以太坊开发教程04-以太坊Geth使用
2019-09-19 20:31:01一、Geth创建私链 1.创建一个genesis.json文件 内容如下: { "config": { "chainId": 110, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" ...一、Geth创建私链
1.创建一个genesis.json文件
内容如下:{ "config": { "chainId": 110, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x07000", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }
关于JSON文件参数的解释
参数 描述 mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的黄皮书描述条件 nonce nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的黄皮书描述的条件 difficulty 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度 alloc 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。 coinbase 矿工的账号,随便填 timestamp 设置创世块的时间戳 parentHash 上一个区块的hash值,因为是创世块,所以这个值是0 extraData 附加信息,随便填,可以填你的个性信息 gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和。 2.将genesis.json拷贝至任意目录
3.命令行环境执行初始化命令
4.创建私有链geth --datadir .\persondata\ init .\persondata\genesis.json
5.登录私有链geth --datadir .\persondata\ --networkid 110 console
init 是初始化创世区块的,如果已经初始化了,这个命令不需要执行,只需要执行第二条。
datadir是表示当前区块链网络存储的位置。
networkId:表示目前私链网络Id,这个ID是唯一标识,需要注意。
如上图,当执行完以上命令后,会出现两个目录:
Geth目录:用于保存该链上geth保存的该链上的区块数据
keystore目录:保存的该链上的用户信息二、账户操作
创建一个账户personal.newAccount("123456") ,输入参数就是密码,账户地址保存在keystore目录下 。
注意:一定要输入字符串,否则会报错!查询账户信息
personal.listAccounts ,读取的是本地keystore目录下的账户地址信息
三、检查连接信息和Enode
查看连接状态:net.listening ,查看当前连接状态信息
查看对等节点连接数量net.peerCount
查看所连接的私有链net.version
查看自己的Enodeadmin.nodeInfo ,把自己的Enode暴露出去,可以让别人添加你的节点,让别人连入你搭建的私有链网络
查看自己连接的节点admin.peers ,这个命令可以查看自己连接了那些对端节点,这里仅仅是网络自发现的节点。
添加别人的节点admin.addPeer("enode://xxx@ip:port") , admin.nodeInfo可以看字enode信息格式
四、挖矿
启动挖矿 miner.start(x) ,x是启动几个核心来挖矿 第一次挖矿的话,时间稍微有点长,如下图会先生成DAG文件,等DAG文件下载到百分之百后,就会开始挖矿。
如下图,说明你已经挖到以太币了。
停止挖矿 miner.stop() ,另外一种方法就是直接关掉当前geth的进程 查看挖矿账户余额 eth.getBalance(eth.accounts[0]) ,默认的挖矿账户是当前账户列表中的第一个
账户中以太币余额默认以最小单位显示:1个以太币=10的18次方个wei,将wei转为以太币:余额转换 web3.fromWei(eth.getBalance(eth.accounts[0]),‘ether’) 设置挖矿账户 miner.setEtherbase(eth.accounts[1]) ,设置挖矿账户 成功挖到一次矿后就停止 miner.start(1);admin.sleepBlocks(1);miner.stop() 五、转账
在第四步我们已经进行了挖矿,我们在创建一个账户就可以进行转账了。
从上图可以看到第一个账户通过挖矿获得了105个以太币,第二个账户没有以太币。那么执行转账交易。
上图中在执行过程中首先第一步是解锁转账人账户也就是第一个账户,然后在发送交易。发送完交易后,可以查看第二个账户上并没有转过来的5个以太币,这是为什么呢?因为没人挖矿,所以这笔交易并没有计入区块链,当有矿工挖矿计入区块链后,第二个账户才真正拿到这笔交易。如下图,说明这笔交易提交了,但是还在处理中。挖矿后,pending就为0了。
查看转账交易 eth.getTransaction(“xxxx”),参数为交易返回hash 下图是两笔转账交易,第一笔是提交了,还没有记入区块的,第二笔是已经被矿工挖到的,所以块是有hash的。从下图参数中可以看到区块号,可以通过区块号查看这个块信息:
查看区块信息 eth.getBlock(22) ,入参是区块号 下图就是一个典型的区块的数据结构,我们可以看到transactions字段中得知看当前块记录了几笔交易。
六、智能合约的部署和调用
关于转账和智能合约的部署以及调用,后期会通过以太坊钱包来操作,这样可以简化命令行操作繁杂操作,更好入门。不过命令行操作能够更好的理解以太坊客户端运行的流程和部分信息,后期还会在讲解以太坊的过程中使用Geth。七、配置静态节点
Geth支持一个叫静态节点的特征,如果你有特定的端点,你会一直想与静态节点连接。如果断开连接,静态节点会再次连接。你可以配置永久性静态节点,方法是将如下所说的放进/personData/Geth/static-nodes.json(这应该是和chaindata以及keystone在同一个文件夹),下边的数据是demo。
-
以太坊Geth使用教程
2018-03-23 16:56:29一、Geth创建私链1.创建一个genesis.json文件内容如下:{ "config": { "chainId": 110, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, &...一、Geth创建私链
1.创建一个genesis.json文件
内容如下:
{
"config": {
"chainId": 110,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x07000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"}
关于JSON文件参数的解释
参数
描述
mixhash
与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的黄皮书描述条件
nonce
nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的黄皮书描述的条件
difficulty
设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc
用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
coinbase
矿工的账号,随便填
timestamp
设置创世块的时间戳
parentHash
上一个区块的hash值,因为是创世块,所以这个值是0
extraData
附加信息,随便填,可以填你的个性信息
gasLimit
该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和。
2.将genesis.json拷贝至任意目录
3.命令行环境执行初始化命令创建私有链 geth --datadir .\persondata\ init .\persondata\genesis.json 登录私有链 geth --datadir .\persondata\ --networkid 110 console
init 是初始化创世区块的,如果已经初始化了,这个命令不需要执行,只需要执行第二条。
datadir是表示当前区块链网络存储的位置。
networkId:表示目前私链网络Id,这个ID是唯一标识,需要注意。如上图,当执行完以上命令后,会出现两个目录:
Geth目录:用于保存该链上geth保存的该链上的区块数据
keystore目录:保存的该链上的用户信息二、账户操作
创建一个账户 personal.newAccount("123456") ,输入参数就是密码,账户地址保存在keystore目录下 。 注意:一定要输入字符串,否则会报错!
查询账户信息 personal.listAccounts ,读取的是本地keystore目录下的账户地址信息 三、检查连接信息和Enode
查看连接状态 net.listening ,查看当前连接状态信息 查看对等节点连接数量 net.peerCount 查看所连接的私有链 net.version 查看自己的Enode admin.nodeInfo ,把自己的Enode暴露出去,可以让别人添加你的节点,让别人连入你搭建的私有链网络 查看自己连接的节点 admin.peers ,这个命令可以查看自己连接了那些对端节点,这里仅仅是网络自发现的节点。
添加别人的节点 admin.addPeer("enode://xxx@ip:port") , admin.nodeInfo可以看字enode信息格式 四、挖矿
启动挖矿 miner.start(x) ,x是启动几个核心来挖矿
第一次挖矿的话,时间稍微有点长,如下图会先生成DAG文件,等DAG文件下载到百分之百后,就会开始挖矿。
如下图,说明你已经挖到以太币了。停止挖矿 miner.stop() ,另外一种方法就是直接关掉当前geth的进程 查看挖矿账户余额 eth.getBalance(eth.accounts[0]) ,默认的挖矿账户是当前账户列表中的第一个 账户中以太币余额默认以最小单位显示:1个以太币=10的18次方个
wei,将wei转为以太币:
余额转换 web3.fromWei(eth.getBalance(eth.accounts[0]),'ether') 设置挖矿账户 miner.setEtherbase(eth.accounts[1]) ,设置挖矿账户 eth.coinbase 成功挖到一次矿后就停止 miner.start(1);admin.sleepBlocks(1);miner.stop() 五、转账
在第四步我们已经进行了挖矿,我们在创建一个账户就可以进行转账了。
从上图可以看到第一个账户通过挖矿获得了105个以太币,第二个账户没有以太币。那么执行转账交易。
上图中在执行过程中首先第一步是解锁转账人账户也就是第一个账户,然后在发送交易。发送完交易后,可以查看第二个账户上并没有转过来的5个以太币,这是为什么呢?因为没人挖矿,所以这笔交易并没有计入区块链,当有矿工挖矿计入区块链后,第二个账户才真正拿到这笔交易。如下图,说明这笔交易提交了,但是还在处理中。挖矿后,pending就为0了。
查看转账交易 eth.getTransaction("xxxx"),参数为交易返回hash 下图是两笔转账交易,第一笔是提交了,还没有记入区块的,第二笔是已经被矿工挖到的,所以块是有hash的。从下图参数中可以看到区块号,可以通过区块号查看这个块信息:
查看区块信息 eth.getBlock(22) ,入参是区块号 下图就是一个典型的区块的数据结构,我们可以看到transactions字段中得知看当前块记录了几笔交易。
六、智能合约的部署和调用
关于转账和智能合约的部署以及调用,后期会通过以太坊钱包来操作,这样可以简化命令行操作繁杂操作,更好入门。不过命令行操作能够更好的理解以太坊客户端运行的流程和部分信息,后期还会在讲解以太坊的过程中使用Geth。
七、配置静态节点
Geth支持一个叫静态节点的特征,如果你有特定的端点,你会一直想与静态节点连接。如果断开连接,静态节点会再次连接。你可以配置永久性静态节点,方法是将如下所说的放进/personData/Geth/static-nodes.json(这应该是和chaindata以及keystone在同一个文件夹),下边的数据是demo。
-
以太坊Geth
2019-03-09 12:52:04在搜集资料后,发现了以太坊。就去了解了一下用法,虽然网上的教程很多,但在自己操作的过程中还是遇到了很多的问题。在这里记录一下。 0x01 Windows下的Geth安装 首先给下下载地址,提取码:xk3x 网上都是关于在...之前用python实现了区块链的基本构造,但是想要部署智能合约的话并没有找到很好的解决方案。在搜集资料后,发现了以太坊。就去了解了一下用法,虽然网上的教程很多,但在自己操作的过程中还是遇到了很多的问题。在这里记录一下。
0x01 Windows下的Geth安装
首先给下下载地址,提取码:xk3x
网上都是关于在Ubuntu下的安装过程,安装十分方便,在Windows下找了好久的安装包,最后翻墙出去才下下来。双击安装即可。Windows下会自动将路径添加到环境变量中。安装完毕后直接终端下输入 geth -help,出现如下的界面即代表安装完成。
0x02 Geth创建创世区块
首先创建自己的私有链。
首先创建一个新的文件夹,在该目录下创建文件 genesis.json 并写入以下内容。
{ "nonce":"0x0000000000000042", "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x4000", "alloc": {}, "coinbase":"0x0000000000000000000000000000000000000000", "timestamp": "0x00", "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x00000000", "gasLimit":"0xffffffff", "config":{ "chainId": 666, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 } }
这里网上有很多的版本,最终这个成功。如果遇到错误:Fatal1,就是没有添加如上的 “config” 参数。
在命令行中cd到该目录下,输入指令:
geth --datadir "./" init genesis.json
出现如下的界面,证明成功。
0x03 创建私有链
接着输入命令:
geth --datadir "./" --nodiscover console 2>>geth.log
以上的参数含义分别为
datadir:数据的存放目录 ./代表当前目录
--nodiscover:不对外公开,即在自己的私有网络进行测试
console 2:进入到Geth的命令行模式,可以通过命令对Geth进行操作
>>geth.log: 将Geth的活动存储到日志
出现如下界面代表成功:
接下来就可以写入Geth命令进行操作了。想要退出可以输入 exit
0x04 创建用户
输入命令,eth.accounts 查看当前用户列表。此时为空 []
接着使用 personal.newAccount("xxxx")来创建用户 其中xxxx为该用户的密码
0x05 挖矿开始
在命令行中执行命令
miner.start()
, 开始在我们的区块链上进行挖矿0x06 挖矿结果
acc0 = eth.accounts[0] eth.getBalance(acc0)
通过以上两条命令查看结果,不为0即成功
关于Geth的使用就先介绍到这里,接下来打算学习智能合约的平台 Remix。
-
以太坊搭建私链(一):CentOS 安装以太坊 geth 客户端的方法
2019-11-11 17:15:04安装以太坊源码,即安装Go Ethereum(安装Geth) 在不同操作系统上安装以太坊源码(Geth)的步骤有些不同,具体安装步骤的方法查看[Building Ethereum]...安装以太坊源码,即安装Go Ethereum(安装Geth)
在不同操作系统上安装以太坊源码(Geth)的步骤有些不同,具体安装步骤的方法查看[Building Ethereum](https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum)。
本教程的安装主要以CentOS7.5 为例
下载源代码之前,应该先安装好Go语言环境,因为 Go Ethereum 需要用Go 和C 语言编译。
安装Golang
可以直接使用 yum 这个包管理器安装Golang
yum install golang
下载以太坊源码(Go Ethereum)
首先下载geth源码 go-ethereum,这里以 go-ethereum-1.9.7.tar.gz 为例:
安装以太坊源码(安装Geth)
接下来解压缩源码:
tar -xzf go-ethereum-1.9.7.tar.gz
用下面的命令编译:
cd go-ethereum-1.9.7 make geth
make geth 也可以用make all 进行替代,make all 还会编译一些其他的程序套件
编译完成后,此时会在 go-ethereum-1.9.7/build/bin 中生成geth可执行文件。
输入 geth help 命令,会显示geth所有的命令和选项:
cd build/bin ./geth help
配置geth
直接使用geth命令可能出现:
-bash: geth: command not found
- 解决方法一:可以为其的安装路径建立软连接
ln -s /data/go-ethereum-1.9.7/build/bin/geth /usr/local/bin/geth
- 解决方法二:也可以为其创建全局配置(对所有系统用户生效,永久生效,推荐)
通过vim 打开编辑器
vim /etc/profile
在最后一行追加以下内容:
export PATH=$PATH:/data/go-ethereum-1.9.7/build/bin/
然后让配置立即生效:
source /etc/profile
用 geth version 测试一下:
geth version
参考:
-
以太坊Geth第一部分——小米手机的区块链环境搭建
2020-02-07 19:39:28本文档为混合教程,为 Geth 的私链搭建教程,目标为构建 windows 电脑,linux 服务器,安卓手机,树莓派的混合私链集群,有疑问请在 github 上的 issues 中提出或者在下方评论区回复,或者加群 457053357 ... -
geth 以太坊钱包_以太坊钱包使用教程
2021-01-13 07:55:59在本阶段,以太坊只有命令行界面,所以许多人觉得它易用性“不够好”,如果你非技术爱好者,可以不参与这个阶段,等待下一个阶段发布的图形界面客户端。其实,常用的操作使用命令行很容易搞定,一点也不繁琐。安装... -
Mac OS 安装以太坊钱包——Geth入门教程
2018-01-17 22:54:32一、安装Homebrew在终端中输入命令行:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"等待安装完成即可使用...安装以太坊(Ethereum)运行环境 在终端中输入以下命令:br -
以太坊开发实战详解:geth客户端安装教程
2018-08-15 13:40:01geth的全称是go-ethereum,是一个以太坊客户端,用go语言编写,应该是目前最常用的客户端。当然以太坊客户端还有用C++,Ruby,Python,Java等其他多种语言编写的,不同类型的客户端是为了满足不同的需求场景。主要来介绍... -
Mac OS 安装以太坊钱包——Geth入门教程(转载)
2018-01-31 08:13:49https://my.oschina.net/wtsoftware/blog/782057 博文地址:... 在MAC环境下之以太坊(ethereum)开发环境安装:http://blog.csdn.net/ziyuzhiye/article/details/54614288 -
兄弟连区块链入门教程以太坊源码分析geth启动流程分析
2018-10-23 14:22:44区块链入门教程以太坊源码分析geth启动流程分析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了... -
以太坊实战视频教程
2018-06-12 21:43:24Geth的安装 以太坊开发、测试环境搭建 单节点以太坊私有链搭建 多节点以太坊私有链搭建 Geth常用命令操作 以太坊账户详解 以太坊RPC API详解(一) 以太坊RPC API详解(二) 以太币 以太坊转账 以太坊块... -
使用geth同步以太坊数据
2018-07-30 10:49:05geth同步以太坊数据 Tips:此处仅讨论测试网络,如果大家想要私有网络,可以参考网上大家的教程,这里推荐一个有界面的私有网络工具:Ganache。默认端口:127.0.0.1:7545,也可以选择自定义。 命令 geth --datadir ... -
Linux使用Geth创建以太坊私链
2019-11-29 21:59:41最近在帮助一位博士师姐跑区块链实验,要搭建一条以太坊私链,在网上找的教程不知道什么原因,用genesis.json文件生成创世区块总是会出下图所示问题,于是请教了另一位博士学长,学长教了另外一种创建私链的方法,... -
以太坊代币智能合约底层开发教程Geth基本命令
2017-11-12 09:33:15区块链爱好者(QQ:53016353) ...geth --datadir "./" --nodiscover console 2>>geth.log 进入命令行模式,其中参数 –datadir 代表文件夹地址, –nodiscover 代表该链条不希望被其他节点发现, console >> -
以太坊教程1-搭建以太坊私有链,执行挖矿
2018-08-10 09:25:02开始建立私有以太坊网络: 1 2 mkdir private-geth cd private-geth 建立创世纪区块文件,是一个json格式的文件: 1 vim genesis.json 在创世纪区块的json文件... -
【以太坊傻瓜教程】在私链上发布第一个合约
2017-09-29 17:16:30【以太坊傻瓜教程】在私链上发布第一个合约教程简介:本教程将介绍如何编写合约,编译合约以及如何将合约发布到自己的私链上并调用。开发环境:本教程开发环境: 操作系统:Windows10 Ethereum客户端:Windows版Geth... -
以太坊搭建联盟链详细教程
2018-09-21 17:38:07安装以太坊geth客户端 需要先安装go环境 安装教程 下载以太坊源码 github.com/ethereum/go-ethereum 进入 go-ethereum 目录 cd go-ethereum make geth 然后执行make all, 顺便安装一下其他一些命令。 创建组织 在... -
使用Geth使用以太坊搭建私有链
2020-05-08 21:15:37参考教程: ...以太坊是一个开源的有智能合约功能的公共区块链平台。在这个平台上,使用它专用的加密货币——以太币(ETH)提供去中心化的以太虚拟环境处理点对点的合约。 一、环境准备 ... -
Quorum企业以太坊环境搭建教程
2019-11-13 09:13:50Quorum企业以太坊环境搭建教程 Quorum是一个许可制的以太坊联盟区块链实现,包含了金融巨头JP摩根开发的一个GETH分支版本, 可以在节点之间实现私有和快速的交易。Quorum为保证隐私对节点之间的私有交易进行了专门... -
以太坊学习(一)---以太坊环境搭建--Go语言和geth客户端安装
2018-02-27 16:57:00由于编译安装geth需要先安装go:需要安装的Go语言版本被要求在1.7或之上版本。sudo apt-get install -y build-essential golang但是这样安装的Go为1.6。Go 安装教程:... -
linux搭建以太坊私有链之go、geth的安装
2021-01-20 13:30:22从github下载go-ethereum后开始编译,走到make geth时,给我提示: 查了资料后发现这个错误是因为go的版本太低了,于是我去官网下载了go1.13.8.linux-amd64.tar.gz 安装go过程: (1)解压 tar -xzf go1.13.8.... -
使用geth在以太坊私链中部署合约并调用智能合约的函数
2020-08-01 19:02:19使用geth在以太坊私链中部署合约并调用智能合约的函数 在上一个教程中我们已经创建了一个私链了,接下来我们将在这个私链上创建用户并挖矿,再使用此用户来部署智能合约,并调用其中的函数 环境:linux操作系统 ...