一、下载并安装Geth客户端
下载地址:https://geth.ethereum.org/downloads/*
下载最新版本的geth(win10版本Stable releases)(选择自己电脑对应的版本)
选第3个,下载并安装(安装时选择一个自己方便操作的路径即可):
注意:如果电脑开了代理可能无法下载,如遇到下面提示关闭代理即可。
下载完成后打开文件夹:
验证是否安装成功:
打开cmd,输入以下指令(查看帮助文档):geth -help
出现以下内容即为安装成功
至此以太坊客户端已经安装完毕
测试geth同步主网络(配置私链的话这步不做也可)
直接打开geth.exe
geth会自动运行同步,在一开始的提示中也有说明区块的存储路径在哪里
我的路径是:C:\\Users\\Edward\\AppData\\Roaming\\Ethereum (一般为管理员账户路径里)
注意:要查看AppData,需要在查看里勾选查看隐藏的项目
二、创世区块配置文件(开始搭建私链:注意关闭正在同步主网的geth)
新建创世区块文件
在geth安装目录下新建*genesis.json*(此为文件名)文件,输入以下内容(并保存):
{ \"config\": { \"chainId\": 8434, \"homesteadBlock\": 1, \"eip150Block\": 2, \"eip150Hash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"eip155Block\": 3, \"eip158Block\": 3, \"byzantiumBlock\": 4, \"alien\": { \"period\": 2, \"epoch\": 300, \"maxSignersCount\": 5, \"minVoterBalance\": 100000000000000000000, \"genesisTimestamp\": 1536136198, \"signers\": [ \"0x393faea80893ba357db03c03ee73ad3e31257469\", \"0x30d342865deef24ac6b3ec2f3f8dba5109351571\", \"0xd410f95ede1d2da66b1870ac671cc18b66a97778\" ] } }, \"nonce\": \"0x0\", \"timestamp\": \"0x5b8f92c2\", \"extraData\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"gasLimit\": \"0x47b760\", \"difficulty\": \"0x1\", \"mixHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { \"cbfc29c31a31c869f9eb59a084d9019965978a7e\": { \"balance\": \"0x31d450f18af132720000000\" }, \"393faea80893ba357db03c03ee73ad3e31257469\": { \"balance\": \"0xd3c21bcecceda1000000\" }, \"30d342865deef24ac6b3ec2f3f8dba5109351571\": { \"balance\": \"0xd3c21bcecceda1000000\" }, \"d410f95ede1d2da66b1870ac671cc18b66a97778\": { \"balance\": \"0xd3c21bcecceda1000000\" }, \"a25dc63609ea7ea999033e062f2ace42231c0b69\": { \"balance\": \"0xd3c21bcecceda1000000\" } }, \"number\": \"0x0\", \"gasUsed\": \"0x0\", \"parentHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\"}
重要参数说明
参数名 | 描述 |
---|---|
chainID | 指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接 |
homesteadBlock |
取值为0表示正在使用homesteadBlock版本。以太坊的发展分成了四个阶段:(每个阶段进步到下一个阶段都是通过硬分叉的方式实现的)1.Frontier(前沿):2015年7月30日,以太坊发布了Frontier阶段,此时的软件还不太成熟,但可以进行基本的挖矿测试去中心化应用(Dapps),该阶段参与者主要为开发者。 2.HomesteadBlock(家园):在2016年3月14日(圆周率节),以太坊发布了HomesteadBlock阶段。以太坊开始平稳运行,提供了图形界面的钱包,普通用户也可以体验和使用以太坊。 3.Metropolis(大都会):Metropolis被分成了两个阶段:Byzantium(拜占庭)和Constantinople (居士坦丁堡)。 2017.10.16,以太坊拜占庭硬分叉成功,引入了包括:zk-SNARKs(简明非交互零知识证明)、revert功能、return和抽象账户。 2019年2月底,以太坊区块链的第7,080,000区块作为激活点正式开启君士坦丁堡硬分叉,点在于将以太坊的共识机制由PoW向PoW+PoS混合机制过渡,从而使整个以太坊网络更加的轻盈、快捷与安全。按官方说法,具体在现有以太坊PoW主网上进行升级的有以下5个方面:1).EIP 145:给EVM增加移位相关指令,包括左移SHL,逻辑右移SHR,算术右移SAR(2).EIP 1014:产生合约地址的一种新规则,与状态通道有关。规则为keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:](3).EIP 1052:为EVM增加EXTCODEHASH指令,这个指令可以获得一个合约bytecode的keccak256的hash值;(4).EIP 1283:修改EVM的SSTORE指令gas计算方式,预计会减少许多合约的gas消耗,需要硬分叉支持;(5).EIP 1234:将是潜在最有争议的提案,也需要硬分叉支持,它包括难度炸弹(Difficulty Bomb)协议推迟12个月和挖矿奖励调整,难度炸弹使挖矿难度随时间推移越来越高,挖矿奖励调整将挖矿奖励从3个降低到2个;4.Serenity(宁静) |
eip155Block | eip是ethereum improvement proposal的缩写,你的链不会因为因为这些提议分叉,故设置为“0”即可 |
mixhash | 一个 256 位的哈希证明,与 nonce 结合使用,证明已经对该块进行了足够的计算:工作量证明(PoW)。 |
nonce | 一个64位的哈希证明,与mixhash结合使用,证明在该块上进行了足够的计算:工作量证明(PoW)。 |
difficulty | 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度 |
alloc | 以太坊账户信息,可以留空,等待部署完成后再启动以太坊创建账户;也可以预先配置好以太坊账户及其余额。这里的账户余额以wei为单位。 |
coinbase | 矿工的账号,随便填 |
timestamp | 设置创世块的时间戳 |
parentHash | 上一个区块的hash值,因为是创世块,所以这个值是0 |
extraData | 附加信息,随便填,可以填你的个性信息 |
gasLimit | 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。 |
三、初始化
在genesis.json文件夹路径下打开cmd,执行命令:geth –datadir .\\db init genesis.json
执行完这条命令后会在geth安装目录下出现一个db文件夹,其中chaindata存放区块数据,keystore存放账户数据
四、启动节点
命令:geth –http –http.api db,eth,net,web3,personal –datadir .\\db –networkid 1997 console 2>> log2020526.log
注意:搭建过程中我的geth一直是处于未关闭状态
重要参数解释:
port:指定以太坊网络监听端口,默认为30303
http:开启HTTP-RPC服务,可以进行智能合约的部署和测试
http.api:基于HTTP-RPC提供的API
http.addr:指定HTTP-RPC服务监听地址,默认为localhost
http.port:指定HTTP-RPC服务监听端口号,默认为8545
networkid:指定以太坊网络id,默认启动id为1,代表公有链,我们搭建的是私有链,因此指定为chainId(在genesis.json配置)
console:启动命令行模式
2>> log2020526.log:重定向,记录日志
启动成功后如下图所示:
可以验证节点信息
命令:admin.nodeInfo
五、新建账户
输入eth.accounts查看已存在账号:
[]说明暂无账号
输入以下指令创建账号:personal.newAccount()
会提示你输入密码,需要自己记住,测试不要太复杂
双引号内是自己的地址
执行成功后会产生账户的公钥(地址),然后在keystore文件夹下就会产生相应的账户文件:
可以通过以下命令来查看对应账户的余额:
eth.accounts[0] //查看第一个账号地址
eth.getBalance(eth.accounts[0])
eth.getBalance(“0x7326bc89fe5a1d593afb5fa02479974be776a081”) //括号内也可以直接填地址
发现账户余额是0,因此需要通过挖矿获取以太币
六、下载钱包MetaMask并导入创建的账户
MetaMask是一个chrome插件,下载需要翻墙,算是个可视化钱包吧
下载完成之后,在右上角会出现一个小狐狸标志,点开,点击网络使其显示隐藏的网络localhost 8545(并连接)
这里有一个问题就是导入自己本地的账户小狐狸会崩掉,一直未响应(我暂时未解决)
所以我们采取向我们本地私链导入metamask上已创建的账号
参考:https://blog.csdn.net/weixin_43988498/article/details/108394012
导出私钥
复制私钥到本地一个txt文件中保存
然后输入
geth account import +你的私钥文件路径
会提示你输入密码,这个密码是在geth控制台使用的密码
发现生成的账户就是在MetaMask上的账户。
此时查看当前生成密钥文件位置:
geth account list
找到对应账户后面的存储位置,把文件放到我们创建私链项目中的keystore文件夹中即可。
在geth中输入eth.accounts查看新导入的账号
七、挖矿
挖矿所得的奖励会进入矿工的账户,这个账户叫做coinbase,默认情况下coinbase是本地账户中的第一个账户,如下图所示:指令:eth.coinbase
可以输入 miner.setEtherbase(账号) 设置挖矿账号
我现在设置刚刚导入的账号为挖矿地址
查看余额 eth.getBalance(账号) :
通过以下命令开启挖矿,参数是线程数,这里设置为1**(提示null不必理会)**
miner.start(1)
输入指令和打开小狐狸都可以看到账号余额在增加
通过以下指令停止挖矿miner.stop()
到此我们的私链搭建就大功告成啦
参考链接
https://blog.csdn.net/cjm083121/article/details/106319518
https://blog.csdn.net/weixin_43988498/article/details/108394012