主页 > imtoken国际版 > 区块链开发笔记-Windows搭建私链最简单详细教程
区块链开发笔记-Windows搭建私链最简单详细教程
1.安装go-ethereum客户端
go-ethereum 客户端,通常称为 Geth,是一个命令行界面,可执行在 Go 中实现的完整以太坊节点。
附上客户端下载链接
获取下载链接
下载安装后需要设置系统的环境变量,然后在cmd中测试geth -h。 如果出现版本信息,则证明安装成功。
安装成功截图:
二、私有链的搭建过程 1. 创世块配置信息的初始化
首先,如果要运行私有链,必须定义一个创世块,创世块的信息写在json配置文件中,比如下面的genesis.json文件。
{ "config": { "chainId": 8, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x1", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000066", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }
2.初始化区块链
创建配置信息后,需要新建一个目录data0来存放区块链数据。
文件结构如下图所示:
接下来进入privatechain目录,执行初始化命令:
cd privatechain geth --datadir data0 init genesis.json
上面命令的主体是geth init,意思是初始化区块链。 该命令可以有选项和参数,其中-datadir选项后跟一个目录名,这里是data0,表示指定的数据存储目录为data0,genesis.json是init命令的参数。
运行上述命令会读取genesis.json文件,并根据其内容将创世块写入区块链。 如果在日志信息中看到Successfully written genesis state字样,说明初始化成功。
3.启动私链节点
初始化完成后,你就会拥有自己的私有链,然后就可以启动自己的私有链节点,进行一些操作了。 在终端中输入以下命令启动节点:
geth --datadir data0 --networkid 1108 console
上面命令的主体是geth console,意思是启动节点,进入交互式控制台。 --datadir 选项指定使用 data0 作为数据目录。 --networkid 选项后跟一个数字,这里是1108,表示指定私有链的network id为1108。 连接到其他节点时将使用网络 ID。 以太坊公网network id为1,为了不和公链网络冲突,运行私有链节点时必须指定自己的network id
运行上述命令后,区块链节点启动,进入Javascript控制台:
这是一个交互式 Javascript 执行环境搭建私有以太坊节点,可以在其中执行 Javascript 代码,其中 > 是命令提示符。 在这个环境中,还内置了一些操作以太坊的Javascript对象,可以直接使用这些对象。 这些对象主要包括:
4.创建一个帐户
我们之前只是建了一条私链,没有自己的账号。 可以在js控制台输入eth.accounts验证:
> eth.accounts []
此时没有账号,再使用个人对象创建账号:
> personal.newAccount() > Passphrase: > Repeat passphrase:
Passphrase其实就是密码的意思。 输入密码两次后搭建私有以太坊节点,创建一个帐户。
实验结果截图如下:
5. 查看账户余额和挖矿进程
eth 对象提供了查看账户余额的方法:
> eth.getBalance(eth.accounts[0]) 0
当前账户的以太币余额为0,要使账户有余额,可以从其他账户转账,或者通过挖矿获得以太币奖励。
通过 miner.start() 开始挖矿:
> miner.start(10)
start参数表示用于挖矿的线程数。 第一次开始挖矿,首先会生成挖矿所需的DAG文件。 这个过程有点慢。 进度达到100%后开始挖矿,屏幕上会刷新挖矿信息。
如果进度达到100%后想停止挖矿,可以在js控制台中输入
miner.stop():
注意:输入的字符会被挖矿刷新画面信息冲掉,没关系,输入完整的miner.stop()回车即可停止挖矿。
挖出一个区块将奖励5 ETH,挖矿获得的奖励将进入矿工账户。 这个账户叫做 coinbase。 默认情况下,coinbase 是本地账户中的第一个账户:
> eth.coinbase
挖矿后余额
getBalance()返回值的单位是wei,是ether的最小单位,1 ether = 10的wei的18次方。 要查看您有多少以太币,您可以使用 web3.fromWei() 将返回值转换为以太币:
> web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
6.查看区块信息
eth对象封装了查看区块信息的方法。
查看当前区块总数:
> eth.blockNumber
按块号查看块:
> eth.getBlock(66) { difficulty: 131968, extraData: "0xda83010811846765746888676f312e31312e318777696e646f7773", gasLimit: 3191015, gasUsed: 0, hash: "0x17f2dec76f0f29a3be561b2f566050e10bbd01f8ba5fd615929afe562b6a1c64", logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", miner: "0x8c37647b237292624f3ca0b354ce7a0e0198abff", mixHash: "0x0330c76f9a7a25ae8d70b463c4875cc15bc8ac8272e4ac503d965b0a9340dec0", nonce: "0x02169cf41ce684ea", number: 16, parentHash: "0xf76aeff9759517700003e2c2bd093ec3529039208b321eaa627fa42276ee602c", receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", size: 538, stateRoot: "0xe311c49f95ea4fc6304a9e3c2646e2f332e83fc05b0107ff1176e0e97c6fa9c5", timestamp: 1541153734, totalDifficulty: 2103873, transactions: [], transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", uncles: [] }