编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

基于以太坊的私有链搭建,mist+geth实现

wxchong 2024-09-16 07:07:34 开源技术 18 ℃ 0 评论

以前让学生做毕业设计,今天有人问起来,就写一个小教程,说一说基于eth的私有链如何搭建。非常简单。

一、geth,mist 客户端下载

1.这里我给大家介绍下,以太坊客户端,以太坊客户端主要分成两类。一个是后台命令行客户端,如:geth(go语言),parity(Rust语言),他们是一个与以太坊网络交互的命令行客户端。其余的命令行客户还有 ethereumjs-lib(javascript),pyethapp(python),ruby-ethereum(ruby) ....主要 geth 使用的比较普遍,这里我就使用geth作为命令行客户端。

2.mist 是属于可视化钱包,这么说吧,你在geth 客户端中生成的用户,以太坊币数量可以通过mist 钱包可视化展示。当然mist 不只有这些简单的功能,最重要的是能部署智能合约,发布,调用。其他还有很多轻钱包,如 lightWallet,metamask...

下面是geth和mist下载地址,这里我使用的是windows系统安装。

Geth : https://geth.ethereum.org/downloads/ ## 本篇使用1.9.1,免安装zip

Mist : https://github.com/ethereum/mist/releases ## 本篇使用0.11.1,免安装zip(如今的mist已经停止更新,但是还可以用)

二、创建以太坊初始区块文件 genesis.json

{
 "config": {
 "chainId": 101,
 "homesteadBlock": 0,
 "eip155Block": 0,
 "eip158Block": 0
 },
 "alloc": {},
 "coinbase": "0x0000000000000000000000000000000000000000",
 "difficulty": "0x400",
 "extraData": "",
 "gasLimit": "0xffffffff",
 "nonce": "0x0000000000000042",
 "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "timestamp": "0x00"
}

代码解释如下:

chainId : 以太坊区块链网络Id,ethereum主链是1,私有链只用不要与主链冲突即可。
alloc : 预留账户,如下
 "alloc":{
 "0x0000000000000000000000000000000000000001":{"balance":"121312321"},
 "0x0000000000000000000000000000000000000002":{"balance":"121312321"},
 }
Coinbase: 旷工账户
Difficulty: 挖矿难度,0x400,这个是简单。
extraData:相当于备注
gasLimit:最小消耗gas
nonce : 64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊黄皮书中的要求
parentHash : 上一个区块的Hash值,因为是创世块,石头里蹦出来的,没有在它前面的,所以是0
Timestamp : 时间戳

三、初始化节点

geth --datadir data0 init genesis.json

这里data0 就是节点将来保存区块链的地方

四、启动geth客户端节点

注意:在geth安装目录下执行

geth --identity "TestNode1" --datadir "data0" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --rpcport "8486" --port "30304" --networkid "29382" console

使用命令 geth -h 可以查看geth 相关的帮助文档。这里我说几个常用的属性。

代码解释如下:

--Identity : 节点身份标识,起个名字

--datadir : 指定节点存在位置,“data0”

--rpc : 启用http-rpc服务器

--rpcapi : 基于http-rpc提供的api接口。eth,net,web3,db...

--rpcaddr : http-rpc服务器接口地址:默认“127.0.0.1”

--rpcport : http-rpc 端口(多节点时,不要重复)

--port : 节点端口号(多节点时,不要重复)

--networkid : 网络标识符 随便指定一个id(确保多节点是统一网络,保持一致)

五、geth基本命令

#创建账户
personal.newAccount("123456")
 #获取账户数组
 eth.accounts 
 #解锁账户,转账时可使用
 personal.unlockAccount(eth.accounts[0], "123456")
 #节点主账户
 eth.coinbase
 #查看账户余额
 eth.getBalance(eth.accounts[0])
 #启动,结束挖矿,写区块
 miner.start(), miner.stop() 

六、增加新的节点

单个节点运行太霸道,不能成为中心化,咱们给私有的以太坊网络在添加一个节点

1.再初始化一个节点

geth --datadir data1 init genesis.json

“data1”作为新节点的存储目录,同样使用 genesis.json作为初始化文件

2. 启动新节点

geth --identity "TestNode2" --datadir "data1" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --ipcpath "data1\geth\geth.ipc" --rpcport "8487" --port "30305" --networkid "29382" console

3. 给新节点创建一个账户,否则无法启动挖矿

personal.newAccout(“123”)

4.查看:新节点enode信息,使用你本机ip替换[::]

5.重要:主节点添加新节点,使两节点连上同一个私有链上

admin.addpeer("enode://d4f64272de882d2e2ccefc6466c6580ddecd253f5c9d87f977ac3881cbea7b141c07681ea605c53af5815cbfc25b5138b9ddb07be61b757850a55b7197939ba4@192.168.1.175:30304")

这里"enode://......." 填写你节点 admin.nodeInfo.enode 的信息

6. 如何确保两节点已连接

首先使用命令admin.nodeInfo,查看结果是否为空[],另外在其中一个节点启动挖矿命令 miner.start()。

综上所述,把步骤简化一下,如果只允许单节点,需要以下几个步骤:

下载geth,mist。

在所在目录建一个文件。genesis.json,如下图。文件内容如上文所示。

进行初始化,geth --datadir data0 init genesis.json

启动节点

geth --identity "TestNode2" --datadir "data1" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --ipcpath "data1\geth\geth.ipc" --rpcport "8487" --port "30305" --networkid "29382" console

开始挖矿: miner.start()

关闭挖矿: miner.stop()

如图所示:

这时候打开Mist客户端。

私有链就运行起来了。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表