极速搭建以太坊geth私有链

1、安装go

下载地址:
	https://golang.org/dl/
解压:
	tar -zxvf xxx.tar.gz
配置环境变量:
	vim /etc/profile
文件最后添加一行:
	export PATH=$PATH:/usr/local/go/bin          
让环境变量生效:
	source /etc/profile         
查看go环境信息:
	go env

2、安装gcc编译器

	yum -y install gcc gcc-c++ kernel-devel

3、安装geth

下载地址(github下载太慢,gitee码云每天同步一次,下载更快):
	https://gitee.com/mirrors/go-ethereum#operating-a-private-network
安装zip解压工具:
	yum install -y unzip
解压geth:
	unzip xxx.zip

4、编译geth

修改go代理,否则会被墙:
	go env -w GOPROXY=https://goproxy.cn
编译:
	make geth     
配置环境变量:
	vim /etc/profile
文件最后添加一行:                                                 
	export PATH=$PATH:/usr/local/go-ethereum/build/bin      
让环境变量生效:
	source /etc/profile 
查看geth版本:
	geth version   

5、编辑genesis.json创世区块头部

创建一个目录:
	mkdir privatechain
新建genesis.json文件:
	cd privatechain
	vi genesis.json
添加以下内容:
{                                                                                                           
  "config": {                                                                                               
        "chainId": 10,                                                                                      
        "homesteadBlock": 0,
	    "eip150Block": 0,
	    "eip155Block": 0,
	    "eip158Block": 0,
	    "byzantiumBlock": 0,
	    "constantinopleBlock": 0,
	    "petersburgBlock": 0,
	    "istanbulBlock": 0                                                                              
    },                                                                                                      
  "coinbase"   : "0x0000000000000000000000000000000000000000",                                              
  "difficulty" : "0x01000",                                                                                 
  "extraData"  : "",                                                                                        
  "gasLimit"   : "0xffffffff",                                                                              
  "nonce"      : "0x0000000000000042",                                                                      
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",                      
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",                      
  "timestamp"  : "0x00",                                                                                    
  "alloc"      : {}                                                                                         
}     
降低挖矿难度,官方的为0x20000:
	"difficulty" : "0x01000"
报错:
	eip150Block not enabled, but eip155Block enabled at 0
解决,添加缺了的eip150Block配置:
	"eip150Block": 0

6、启动私链节点

初始化创世区块:
	geth --datadir chaindata init genesis.json
启动节点:
	geth --datadir chaindata \
	--port 30303 \
	--networkid 1108 \
	--identity "node1" \
	--rpc \
	--rpcport 9545 \
	--rpccorsdomain "*" \
	--allow-insecure-unlock \
	console
成功后可进入命令行交互环境,有信息如下:
	Welcome to the Geth JavaScript console!
交互:
	> eth.accounts     (枚举系统中的账户)	                                                                                         					 
	[]	(目前系统中的账户为空)

7、创建两个外部账户A0、A1

创建外部账户:
	> personal.newAccount()
设置密码,确认密码后,就会生成私钥并保存在keystore目录中了。
创建两个外部账户后,再次查看系统中的账户,可以看到系统中已经存在两个账户地址了:
	> eth.accounts                                                                                              
	["0x910d79ab518252254842f0f223186945e4891f13", "0x2a9792be1f205975992de8dd4e2b18dfc5cb367a"]
根据账户地址查看余额,都为0:
	> eth.getBalance(eth.accounts[0])                                                                           
	0
	> eth.getBalance("0x2a9792be1f205975992de8dd4e2b18dfc5cb367a")                                              
	0

8、挖矿,默认挖矿奖励给本地的第一个账户A0

开始挖矿:
	miner.start()
一分钟后停止挖矿:
	miner.stop()
查询余额,可以看到通过刚才的挖矿工作,获得了55以太币:
	> web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')                                                     
	55

9、A0发起交易,转账给A1

发起交易,报错,需要先通过刚才设置的密码解锁账户
	> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(5,'ether')})                                    
WARN [07-09|11:41:36.700] Served eth_sendTransaction               reqid=32 t=3.380321ms  err="authentication needed: password or unlock"
Error: authentication needed: password or unlock
        at web3.js:6347:37(47)
        at web3.js:5081:62(37)
        at <eval>:1:20(16)
解锁:
	> personal.unlockAccount(eth.accounts[0])
再次发起交易:
	> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(5,'ether')})
可以查看交易池的情况,可以看到有一笔交易在等待打包:
	> txpool.status                                                                                             
	{
	  pending: 1,
	  queued: 0
	}
此时查看A1的余额,依然为0,因为还没挖矿打包成功,再次进行挖矿:
	> miner.start()
然后再次查看A1的余额,增加为5,交易成功:
	> web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')                                                     
	5

10、连接第二个节点

1、步骤同上1~5,在第2台机器上搭建geth环境。
2、使用一致的genesis.json,初始化创世区块:
	geth --datadir chaindata init genesis.json
3、启动节点2:
	geth --datadir chaindata \
	--port 30304 \
	--networkid 1108 \
	--identity "node2" \
	--rpc \
	--rpcport 9545 \
	--rpccorsdomain "*" \
	--allow-insecure-unlock \
	console
4、查看节点2的encode url:
	> admin.nodeInfo.enode                                                                                      
	"enode://97de4e1b6d5bfce802c5c43500f086724d4311ef873299ebc8125d381679143c646ed82e7c3b779a4587bbc635c35379e986d7930eb1f3819d6e9ea6fa3388f3@127.0.0.1:30304?discport=0"
5、使用节点1连接节点2,注意ip改成节点2的ip,而不是127.0.0.1:
	> admin.addPeer("enode://97de4e1b6d5bfce802c5c43500f086724d4311ef873299ebc8125d381679143c646ed82e7c3b779a4587bbc635c35379e986d7930eb1f3819d6e9ea6fa3388f3@192.168.78.103:30304?discport=0")
6、查看是否连接成功,观察到两个节点的ip互相发现了,说明连接已经成功:
	> admin.peers
	localAddress: "192.168.78.102:39310",
    remoteAddress: "192.168.78.103:30304",
7、查看区块是否正在同步,返回false则表示没在同步,返回以下信息则表示正在同步
	> eth.syncing                                                                                               
	{
	  currentBlock: 0,
	  highestBlock: 6,
	  knownStates: 1,
	  pulledStates: 1,
	  startingBlock: 0
	}
8、节点2同步成功,区块高度与节点1一致:
	> eth.blockNumber                                                                                           
	6

PS:遇到同步失败,只重新初始化一个节点依然无法同步;最后两个节点都重新初始化,再次进行addPeer就成功同步了。

11、使用MetaMash连接私链,进行交易

启动节点时需要指明--rpcaddr 192.168.78.102
并且希望后台运行,启动的完整命令如下:
	nohup geth --datadir chaindata --port 30303 --networkid 1108 --identity "node1" --rpc --rpcaddr 192.168.78.102 --rpcport 9545 --allow-insecure-unlock --rpccorsdomain "*"  > out.log &
不想看到不停的日志输出,可以使用以下命令进入console:
	geth attach ./chaindata/geth.ipc
添加网络,配置如下:

在这里插入图片描述

顺利连接,就可以和私链的账户互相发起交易了:

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要连接Metamask到Geth私有链,你需要按照以下步骤进行操作: 1. 首先,在Metamask钱包中点击右上角的网络切换按钮,选择“Custom RPC”(自定义RPC)选项。 2. 在“Custom RPC”页面中,填写私有链的网络名称,可以根据需要自行设置。RPC URL的格式为http://服务器地址:http端口号,例如:http://81.72.166.130:8545。链ID即为私有链中定义的networkid。 3. 点击“Save”(保存)按钮,保存配置。 4. 确保你已经启动了Geth私有链。你可以使用以下命令启动私有链: ``` geth --datadir data --networkid 15 --http --http.addr 0.0.0.0 --http.port 8545 --http.corsdomain "*" --port 30305 --allow-insecure-unlock console 2>>geth.log ``` 5. 如果你使用的是云服务器,需要在服务器管理界面开启对应的端口,特别是http.port对应的端口,以便Metamask钱包能够连接到私有链节点。 6. 现在,你可以在Metamask钱包中选择你配置的私有链网络,并使用你在私有链上的账户进行操作了。 请注意,以上步骤中的具体配置和命令可能会根据你的私有链设置而有所不同。确保按照你的私有链的要求进行配置和启动。 #### 引用[.reference_title] - *1* *2* *3* [以太坊私链搭建(一)——环境配置和metamask连接](https://blog.csdn.net/llslinliansheng/article/details/123596009)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值