主页 > imtoken官网地址在哪里 > Ubuntu下用Geth搭建自己的以太坊私链
Ubuntu下用Geth搭建自己的以太坊私链
原文链接:
] 最近开始学习区块链,开始学习以太坊。以太坊不是我们简单理解的可以交易以太坊的平台,它是一个具有智能合约功能的开源公链平台。在这个平台上以太坊哈希值进度查询,它提供了一个去中心化的以太坊虚拟机环境,借助其专用的加密货币以太(ETH)来处理点对点合约。
作为初学者,如果想快速进入以太坊的学习门槛,搭建以太坊私链是个不错的方法。通过在私链上创建账户、部署合约和进行交易以太坊哈希值进度查询,完成这一系列操作后,您可以初步了解以太坊的理解和基于以太坊的开发方式。
一、环境准备
为了以后更多地了解区块链相关技术,避免在搭建私链的过程中出现各种莫名其妙的问题,当然也是为了让它看起来更高:),我选择完成私链下Linux系统。的建设。具体环境如下:
主机系统:Windows 10 专业版
虚拟机:VMware Workstation Pro 12.5.4
操作系统:Ubuntu 18.4.1 64 位
二、安装 Geth
Geth 是以太坊的一个客户,它的全称是 go-ethereum。以太坊客户端用于接入以太坊网络进行账户管理、交易、挖矿、智能合约部署开发等相关操作。目前有以多种语言实现的客户端。Geth 是用 Go 语言编写的,支持访问以太坊网络,成为一个全节点。它还可以提供 JSON-RPC 接口作为 HTTP-RPC 服务器。其他常用的以太坊客户端如下:
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
执行上述命令后,执行以下命令:
geth --帮助
会显示Geth版本和命令参数等信息
附上Geth的Git项目地址和wiki地址
吉特:
维基:
三、定义创世区块
1、创建工作目录
##尽量不要在需要管理员权限的路径下创建工作目录,避免权限问题带来的麻烦 mkdir ~/privatechain ##数据目录用于存放账户信息和区块数据 mkdir ~/privatechain/data
2、创建创世块配置文件
在 privatechain 目录中创建一个新的 genesis.json 文件,内容如下:
{“config”:{“chainId”:10,“homesteadBlock”:0,“eip155Block”:0,“eip158Block”:0},“coinbase”:“0x0000000000000000000000000000000000000000”,“难度”:“0x2000”,“extraData” :“”,“ gaslimit”:“ 0xffffffff”,“ nonce”:“ 0x000000000000000042”,“ MixHash”:“0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090099998天”, 08a58f09194e403d02a1928a7bf78646cfc260b0": { "余额": "0x200000000000000000000000000000000000000000000000000000000000000" }, "87366ef81db496edd0ea2055ca605e8686eec1e6”:{“余额”:“0x20000000000000000000000000000000000000000000000000000000000000”}}}
如果你是以太坊的新手,不知道文件内容也没关系。当我们完成了整个私有链的创建,完成了链上账户、合约和交易相关的操作,我们就会明白其中的大部分含义。下表提供了配置文件的简要说明:
参数名称描述chainId指定独立的区块链网络ID。连接到其他节点时将使用网络 ID。以太坊公网的网络ID为1。为了不与公链网络冲突,运行私链节点时必须指定自己的网络ID。不同 ID 网络的节点不能相互连接 homesteadBlock 设置为 0 时,表示使用 homestead 发布链 noncenonce 是用于挖矿的 64 位随机数。注意it和mixhash的设置需要满足以太坊黄皮书4.3.4.Block Header Validity,(第4章中描述的条件mixhash4)是与nonce一起用于挖矿,前一个区块的一部分产生的hash。用于限制区块可以包含的交易信息的总和。我们正在创建一个私有链,它可以填充最大
3、创建一个创世块
cd ~/privatechain geth --datadir ./data init genesis.json
执行上述命令后,会在privatechain下的data目录下生成两个目录,结构如下:
在:
geth目录用于保存我们搭建的私链的区块数据
keystore 目录用于存储用户帐户数据
四、启动私链
执行以下命令启动私链:
## --datadir 表示当前区块链网络数据存放的位置 ## --nodiscover 表示禁止该链被其他节点发现 ## console 2>>geth.log 表示日志输出到geth 。日志。可以打开另一个控制台执行tail -f查看日志 geth --datadir ./data --nodiscover console 2>>geth.log
启动成功后如下图所示:
还有一种启动方法,其作用是启动PRC通讯。启动命令如下:
geth --nodiscover --identity "my etherum" --rpc --rpccorsdomain "*" --datadir ./data --port "30303" --rpcapi "db,eth,net,web3" --networkid 10 控制台 2 >>geth.log
PRC启动命令参数含义如下表所示:
参数名称描述了身份区块链的身份,用于表示当前网络的名称。Nodiscover 关闭 p2p 网络的自动发现。您需要手动添加节点,这有助于我们隐藏私网init的位置并指定创世块文件的位置并创建创世。block datadir 当前区块数据存放的位置 port 网络监听端口,默认 30303rpc 启动 rpc 通信 rpcapi 设置允许客户端连接 rpc,一般 db, eth, net, web3rpccorsdomain 指定什么url可以连接到你的节点执行rpc自定义任务,如果输入的是“*”,任何url都可以连接你的rpc实例的地址rpcaddr连接rpc,默认是localhostrpcport连接rpc的端口,
如果您在创建创世块之前已经启动了私有链,则在创建创世块配置文件后,您可以使用以下命令重新进入geth控制台并使用配置文件更新区块:
geth --datadir 数据 --networkid 10 控制台
提示:--networkid 参数是创世块配置文件中的chainId
五、创建一个帐户
为了方便后面的测试,我们创建了两个账户来演示账户之间的转账操作。
启动私链后,在控制台输入如下命令:
## newAccount的参数是账号密码,这里新账号的密码是123456和000000 > personal.newAccount("123456") > personal.newAccount("000000")
账户创建后,会返回遗传哈希码,代表新账户的地址
此时在私链上查询账户和账户余额信息,会返回相应的结果。
私链上的账户信息如下图所示
由于尚未开始挖矿,账户余额为0
六、挖矿
新创建的账户没有余额。只有通过挖矿赚钱,账户才能有收入。下面介绍如何开始挖矿。
1、开始挖矿
## start参数表示用于挖矿的线程数。如果不写,则表示要使用的最大线程数。成功执行返回 true 或 null > miner.start()
当百分比 = 100 时,开始挖矿
暗示:
2、停止挖矿
执行以下命令停止挖矿
矿工.stop()
挖矿结束后再次查看账户余额
挖一个区块会奖励5个以太币,挖矿的奖励会进入矿工的账户,这个账户叫做coinbase。默认情况下,coinbase 是本地账户中的第一个账户。
此时第二个账户的余额还是0
我们可以通过 miner.setEtherbase() 将其他账户设置为 coinbase
重新开始挖矿。一段时间后,查看第二个账户下的余额。此时,账户已经有余额。
此时显示的账户余额单位是魏。如果要将其转换为以太币,可以执行以下操作:
可以看到,第一个和第二个账户的以太币余额分别为5和15,表示他们分别挖了1个区块和3个区块。
提示:wei是ether的最小单位,1Eth(以太)=1,000,000,000,000,000,000 Wei(10的18次方)。通常,人们也使用 Gwei 作为显示单元。比较常用的是Eth、Gwei和Wei。以太坊中还有其他单位,它们的换算关系如下:
七、转移
在本节中,我们将演示传输操作。在转账之前,我们先来看看两个账户的余额:
执行以下转账命令将 2 个以太币从第一个账户转移到第二个账户:
> amount = web3.toWei(2,'ether') > eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:amount})
执行后显示如下:
从提示中可以看出,账户没有解锁,需要解锁后才能进行转账操作。解锁命令如下:
##第一个参数为解锁账号,第二个参数为账号密码personal.unlockAccount(eth.accounts[0],'123456')
返回true表示解锁成功
下面重新执行上面的转账操作,返回结果如下:
转账成功后,输出的是交易的哈希码。
此时查看账户信息,发现账户余额没有变化。
这是因为它当前不处于挖矿状态,打包的交易只有在挖矿状态下才能被确认。但是此时我们可以看到交易池中有一个待处理的交易。执行以下命令查看交易池信息:
> txpool.status
从返回的结果中,我们可以看到有一个待处理的交易。
执行以下命令查看待处理事务的详细信息:
> eth.getBlock("待处理", true).transactions
返回的交易信息如下:
至此,我们重启挖矿,稍后查看账户信息如下:
您可以看到第二个帐户还有 2 个 ETH。如果使用挖矿时间段,如果此时看第一个账户,应该比之前少了2个ETH。如果挖矿时间长,账户余额应该会有很大的变化,比以前更多。
八、查看区块和交易信息
1、查看区块信息
> eth.blockNumber
> eth.getBlock(1)
2、查看交易信息
查看上面转账交易成功后的交易hash输出,通过它我们可以查看交易详情
> eth.getTransaction("0x5372d5d4580c5cd2055e13e31d81079ffe64fa151930cc5c70f8c1659d527249")
返回结果如下:
九、 Geth 控制台常用对象和命令
Geth 控制台内置了用于操作以太坊的 Javascript 对象,用户可以直接使用这些对象。主要包括:
这些对象的常用命令是: