主页 > imtoken最新版官网 > Geth --- 搭建以太坊本地私有链
Geth --- 搭建以太坊本地私有链
Geth是以太坊基金会提供的客户端,可以通过客户端的交互式命令控制台使用以太坊的API。
下面记录一下使用Geth搭建以太坊本地私链的过程。
1.下载geth
官方链接:
个人环境:MacOS
图片-20220215224607052.png
下载成功后,解压即可。 解压后的文件包括 COPYING 和一个二进制文件 geth. 您可以将 geth 放在系统 PATH 中。
图片.png
2.准备创世块的配置文件
先创建一个文件夹,存放区块链的相关数据。 比如我的存放位置是~/Documents/Data/Geth/test
图片.png
然后在~/Documents/Data/Geth/test目录下添加一个genesis.json文件,文件内容如下:(文件名可以任意)
{
"config": {
"chainId": 66, //该链的ID。在用geth 启动区块链时,还需要指定一个network 参数。只有当network、chainID、创世区块配置都相同时,才是同一条链。
"homesteadBlock": 0, //相关协议机制的升级区块所在的高度,签名算法是homestead ->eip155 -> eip158,所以从homesteadBlock 之前区块都通过homestead 相关算法机制来验证,homesteadBlock 到eip155Block 之间的用eip155 算法来验证,依次类推。
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000", //每挖出一个区块,都会获得奖励。该值指定默认情况下把奖励给到哪个账户。实际上,我们每次挖矿开始之前,都会自己指定miner.setEtherbase(UserAddress),一般都会把奖励给自己
"difficulty" : "0x40000", //定义了每次挖矿时,最终确定nonce 的难度
"extraData" : "",
"gasLimit" : "0xffffffff", //规定该区块链中,gas 的上限
"nonce" : "0x0000000000000042", //预定一个随机数,这是一个与PoW 机制有关的值
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", //一个与PoW 机制有关的值
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", //在区块链中,区块是相连的,parentHash 指定了本区块的上一个区块Hash。对于创世区块来说,parentHash 为0
"timestamp" : "0x00", // 时间戳,规定创世区块开始的时间
"alloc": { } //代表初始资产配置,在该区块链产生时,就预先赋予这些账户一定数额的WEI(不是ETH)
}
可配置的参数不止这些,更多配置可以查看。
3.初始化区块链
我在环境变量里加了geth,所以可以直接用,不加也可以用绝对路径运行。
geth --datadir .init genesis.json
--datadir 是存储区块链数据的位置。 我目前在测试目录中,所以使用 . , init genesis.json是用我们刚才写的genesis.json进行初始化,注意genesis.json的路径位置。
图片.png
如果看到 Successfully written genesis 状态启动以太坊私有链,则初始化成功。
图片.png
初始化成功后会生成geth和keystore目录启动以太坊私有链,其中块数据存放在geth/chaindata,账户数据存放在keystore。
4.启动私链节点
geth --datadir 。 --networkid 666 控制台
--networkid 666中的666是创世块配置文件中的chainId
图片.png
请参阅欢迎使用 Geth JavaScript 控制台! 说明没问题
在此处插入图像描述
5.创建一个新帐户
可以通过eth.accounts查看当前账户,当前账户列表为空
eth.accounts
通过personal.newAccount("1024")可以创建一个账户,"1024"是账户的密码,创建成功后会返回账户的公钥。 如下所示:
personal.newAccount("1024")
图片.png
创建账户后执行eth.accounts,可以看到账户列表中已经存在新建账户的公钥。
6.开始挖矿
您可以通过eth.getBalance()查看指定账户的余额。 参数可以是账户的公钥,也可以是账户在账户列表中的位置
eth.getBalance("0x28b8c8effbb60999c05380de8b84353176cf3780")
或者
伦理。 getBalance(eth.accounts[0])
图片.png
此时第一个账户余额为0
开始挖矿并在挖出一个区块后停止
miner.start(1);admin.sleepBlocks(1);miner.stop();
图片.png
图片.png
当百分比达到 100 时,挖矿完成。
使用eth.blockNumber查看当前有多少块,使用eth.getBlock()查看指定块的信息
图片.png
第一个账户挖出创世块,获得挖矿奖励。
图片.png
参考链接: