首页 > golang > 如何创建自己的私有以太坊区块链
2024
02-10

如何创建自己的私有以太坊区块链

以太坊(英文Ethereum)

一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币提供去中心化的虚拟机来处理点对点合约。本文是在自己的电脑上启动自定义以太坊区块链的指南。

请不要与在主要的以太坊区块链上启动节点相混淆,在这里,我们开始一个全新的独立区块链,这个区块链无法与太坊主网进行交互。

启动您自己的以太坊区块链比公共测试网络更有用,更有教育意义,也更安全。学习建立私有测试网可以提供其他抽象概念的有形性,例如挖掘,网络对等,甚至geth datadir。


在玩以太坊之前,首先要搭建以太坊的开发环境。第一步就是安装geth。那么geth是什么呢?geth(或称为go-ethereum)是以太坊节点的一个实现。也就是说,geth是一个客户端,用于连接以太坊网络。从geth的名 字可以看出,geth是用go语言实现的一个以太坊节点。那么为什么需要这个节点呢?

这是因为以太坊网络由多个节点组成,这些节点可能是用不同技术实现的。如geth就是官方的以太坊节点。通过这些节点可以用命令行方式直接访问区块链网络,如广播交易,发布智能合约等,但对于大多数用户来说,都是非程序员出身,让他们通过命令行方式去操作以太坊网络是不可能的,所以就要求有图形化的操作界面来操作以太坊网络。但geth这样的节点是做不到的,因此,就需要像web3.js,web3.py这样的程序库,再配合JavaScript、Python实现可视化的以太坊客户端,但这些库是无法直接连接进以太坊网络的,他们只能连接像geth这样的以太坊节点,然后通过一塔发节点访问以太坊网络,所以geth其实同时起到客户端和服务端的作用。也就是说,geth是以太坊网络的客户端,是web3.js的服务端。


开始的第一步

第一步你需要安装Geth,这是一个通过go语言书写的以太坊客户端。本文使用的是ubuntu系统,其他系统请参考官方主页:

https://geth.ethereum.org/install/

首先添加版本库

sudo add-apt-repository -y ppa:ethereum/ethereum

之后,您可以安装Go Ethereum的稳定版本:

sudo apt-get update
sudo apt-get install ethereum


创建创世块

Genesis 块是链中的第一个块,Genesis 文件是一个JSON文件,它定义了该初始块的特征,随后定义了区块链的其余部分。

1.创建一个目录来保存您的网络文件

mkdir my-eth-chain
cd my-eth-chain

2.创建创世块文件

vi myGenesis.json

3.复制一下内容到你的创世块中

{
	"config": {
		"chainId": 1994,
		"homesteadBlock": 0,
		"eip155Block": 0,
		"eip158Block": 0,
		"byzantiumBlock": 0
	},
	"difficulty": "400",
	"gasLimit": "2000000",
	"alloc": {
		"7b684d27167d208c66584ece7f09d8bc8f86ffff": {
			"balance": "100000000000000000000000"
		},
		"ae13d41d66af28380c7af6d825ab557eb271ffff": {
			"balance": "120000000000000000000000"
		}
	}
}

其中:

chainId - 这是您链的标识符,用于重放保护。

homesteadBlock,eip155Block,eip158Block,byzantiumBlock - 这些与链式分叉和版本控制有关,所以在我们的例子中,让我们从0开始新的区块链。

difficulty:这决定了挖掘区块的难度。将此值设置为低(~10-10000)对于私有区块链很有用,因为它可以让您快速挖掘块,这等同于快速交易,以及大量要测试的ETH。为了比较,以太坊主网Genesis文件定义了难度17179869184。

gasLimit:这是每个区块中可以使用的总气体量。如此低的挖掘难度,块将移动得非常快,但您仍应将此值设置得相当高,以避免达到限制并减慢网络速度。

alloc:在这里,您可以将ETH分配给特定地址。这不会为您创建帐户,因此请确保您已经控制了该帐户。您需要将帐户添加到您的专用链才能使用它,为此,您需要访问keystore / utc文件。例如,Geth和MyEtherWallet允许您在创建帐户时访问此文件,但Metamask和Coinbase不允许。提供的地址不是真实地址,它们只是示例。这里我们分别分配100,000和120,000 ETH。

现在开始你的节点

现在开始,真正的乐趣开始了,让我们开启我们新的以太坊区块链

1.实例化你的数据目录

geth --dadadir ./myDataDir init ./myGenesis.json

2.启动你的对等节点

geth --datadir ./myDataDir --networkid 1114 console 2 >> myEth.log

输出应如下所示:

这是geth JavaScript控制台。任何带符号的命令>都应在此处键入。

3.显示您的以太坊日志

打开另一个终端窗口

cd到 my-eth-chain

输入 tail -f myEth.log

4.导入/创建帐户

如果您在Genesis文件中分配了ETH,请通过将UTC文件拖到myDataDir/keystore目录中导入相应的帐户并跳到步骤5。

在geth JavaScript控制台中,创建一个帐户:

> personal.newAccount("")

不要忘记这个密码!您将输入很多内容,因此对于此测试网络,您可以保持简单。

5.开始采矿

检查你的余额

> eth.getBalance(eth.coinbase)

跑开始挖矿

> miner.start()

查看您的其他终端窗口,您应该在日志中看到一些挖掘操作。再次检查你的余额,它应该更高。

要结束采矿,请输入

> miner.stop()

转一笔账把

首先通过命令查询一下当前账号的钱:账户1和账户2

转一笔钱,1500,先解锁账户,输入账户和钱数,可以看到生成了交易的摘要(绿字所示)

通过完成一个区块后进行在进行查询

可以看到1500+441=1941不等于1935

相差6

这个是由于对账户1挖出的这个区块,所以有它的奖励在里面。

本次教程到此结束。更多信息请查询

以太坊user guide

https://ethereum.gitbooks.io/frontier-guide/content/


本文》有 0 条评论

留下一个回复