当前位置:首页 » 以太坊知识 » 以太坊私有链测试图

以太坊私有链测试图

发布时间: 2023-02-07 00:25:46

1. CentOS 6.5上搭建以太坊私有链,编译时报错: make: *** [geth] Error 1,请各位大神指教

build/env.sh go run build/ci.go install ./cmd/geth
make: *** [geth] Error 1
没有这个目录,或者这个目录权限不够

2. Docker 搭建以太坊私有链

首先需要安装 Docker,Docker 的安装和使用可以参看阮一峰老师的 《Docker 入门教程》 。
Ethereum 官方是支持 docker 的,可以参看 官方文档 。

centOS

其中 -v /home/linshan/works/block-chain/ethereum:/root 是把我们当前的 ethereum 目录,挂到了docker 的 /root 下。
在 Windows 环境下使用 -v /home/linshan/works/block-chain/ethereum:/root 不能启动容器,原因不明,所以在 Windows 下先不要使用目录挂载。

各字段具体用途参看 官方文档 。
Windows
Windows 不必创建 start-ethereum.sh 文件, genesis.json 也可以在 Docker 容器启动后创建。

centOS

Windows

运行成功后执行

进入 docker 容器命令行
因为 Windows 没有挂载共享目录,所以 root 目录下没有 genesis.json 文件,我们要在这里手动创建 genesis.json 文件,内容要和 centOS 的一致。

data 用来存放区块数据

geth 的参数参看 以太坊客户端Geth命令用法-参数详解

启动私有节点后进入 geth 命令行执行:

输出的内容就是节点信息,我们在手动连接节点是会用到,注意要把“0.0.0.0“换成你自己的IP,然后将这个信息发送给其他节点。手动连接节点有两种方式:

当然不管使用哪种方法连接节点都要保证创世区块文件 genesis.json 一致,还有在启动时 networkid 也要一致。

至此以太坊私有链已搭建完毕。

geth命令

docker命令

3. 以太坊私有链搭建(2)--修改挖矿难度

官放解释就不多说了,Difficulty值越大,越难出区块,意味着交易不容易确认,默认的机制是难度越来越大,对私有链一般是不可接受的,当然这个值也不是越小越好,这样的话也会让机器的很卡,所以这个值要根据项目自己确定。

创世区块中的的难度能影响整体的挖矿速度,但是并不能改变难度上升这个趋势,所以在自己的项目中,仅仅在创世区块中指定难度是不够的。

当前geth版本 1.7 unstable
源文件 consensus/ethash/consensus.go 行290

好了,这里也不多想怎么实现了,我也看不懂,简单改下返回难度为恒定值就会~~
将这个函数改为

重新make geth,试试看出块难度是不是恒定了。

4. 以太坊多节点私有链部署

假设两台电脑A和B
要求:
1、两台电脑要在一个网络中,能ping通
2、两个节点使用相同的创世区块文件
3、禁用ipc;同时使用参数--nodiscover
4、networkid要相同,端口号可以不同

1.4 搭建私有链
1.4.1 创建目录和genesis.json文件
创建私有链根目录./testnet
创建数据存储目录./testnet/data0
创建创世区块配置文件./testnet/genesis.json

1.4.2 初始化操作
cd ./eth_test
geth --datadir data0 init genesis.json

1.4.3 启动私有节点

1.4.4 创建账号
personal.newAccount()
1.4.5 查看账号
eth.accounts
1.4.6 查看账号余额
eth.getBalance(eth.accounts[0])
1.4.7 启动&停止挖矿
启动挖矿:
miner.start(1)
其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。
停止挖矿,在 console 中输入:
miner.stop()
挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。

1.4.8 转账
目前,账户 0 已经挖到了 3 个块的奖励,账户 1 的余额还是0:

我们要从账户 0 向账户 1 转账,所以要先解锁账户 0,才能发起交易:

发送交易,账户 0 -> 账户 1:

需要输入密码 123456

此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions 查看当前待确认交易。

使用 miner.start() 命令开始挖矿:
miner.start(1);admin.sleepBlocks(1);miner.stop();

新区块挖出后,挖矿结束,查看账户 1 的余额,已经收到了账户 0 的以太币:
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')

用同样的genesis.json初始化操作
cd ./eth_test
geth --datadir data1 init genesis.json

启动私有节点一,修改 rpcport 和port

可以通过 admin.addPeer() 方法连接到其他节点,两个节点要要指定相同的 chainID。

假设有两个节点:节点一和节点二,chainID 都是 1024,通过下面的步骤就可以从节点二连接到节点一。

首先要知道节点一的 enode 信息,在节点一的 JavaScript console 中执行下面的命令查看 enode 信息:

admin.nodeInfo.enode
" enode://@[::]:30303 "

然后在节点二的 JavaScript console 中执行 admin.addPeer(),就可以连接到节点一:

addPeer() 的参数就是节点一的 enode 信息,注意要把 enode 中的 [::] 替换成节点一的 IP 地址。连接成功后,节点一就会开始同步节点二的区块,同步完成后,任意一个节点开始挖矿,另一个节点会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该笔交易。

通过 admin.peers 可以查看连接到的其他节点信息,通过 net.peerCount 可以查看已连接到的节点数量。

除了上面的方法,也可以在启动节点的时候指定 --bootnodes 选项连接到其他节点。 bootnode 是一个轻量级的引导节点,方便联盟链的搭建 下一节讲 通过 bootnode 自动找到节点

参考: https://cloud.tencent.com/developer/article/1332424

5. 以太坊私有链,创建了钱包之后里面没钱怎么给其它转账

这个需要充值,但是一定要注意风险,这个链并不是特别主流,有可能是资金盘或是山寨币。

6. 搭建geth私有链和联盟链网络

操作系统:linux或Mac OS
安装geth执行以下命令:
linux:sudo apt-get install ethereum
Mac OS:brew install ethereum

直接创建两个geth的工作目录,用于之后的组建联盟链的使用:
mkdir eth-private1
mkdir eth-private2

首先 cd eth-private1 进入节点1的工作目录该目录下执行下面命令
geth --datadir data --nodiscover console (data是之后geth节点的数据目录,可自行修改)

使用geth自带的工具 puppeth 用于生成创世区块,过程如下:
puppeth
+-----------------------------------------------------------+
| Welcome to puppeth, your Ethereum private network manager |
| |
| This tool lets you create a new Ethereum network down to |
| the genesis block, bootnodes, miners and ethstats servers |
| without the hassle that it would normally entail. |
| |
| Puppeth uses SSH to dial in to remote servers, and builds |
| its network components out of Docker containers using the |
| docker-compose toolset. |
+-----------------------------------------------------------+

Please specify a network name to administer (no spaces, please)

输入私链名称后,会出现二级菜单,现在2:配置一个新的创世快
What would you like to do? (default = stats)

再次出现二级菜单,让你选择共识机制(这里采用poa共识)
Which consensus engine to use? (default = clique)

Ethash - proof-of-work(PoW) :工作量证明,通过算力达成共识 (以太坊就是使用这种方式)
Clique - proof-of-authority(PoA): 权威证明、通过预先设定的权威节点来负责达成共识 (不消耗算力,一般用于私有链测试开发)
如果选择Pow的共识方法,直接输入1,回车即可。
如果选择PoA的共识方法,输入2后会提示让你选择处快的间隔时间,一般测试开发使用可以设置相对的将处快时间设置较少5秒即可,然后会让你选择哪个账户来作为权威生成区块(至少有一个,输入刚才创建的账户,若只是单节点就输入那个节点目录生成的地址,若想组建联盟链就填写生成的两个地址)

How many seconds should blocks take? (default = 15)

选择好共识机制后会让你指定给那些账号初始化ether(至少有一个),输入我们刚才创建的账户地址回车即可。
Which accounts should be pre-funded? (advisable at least one)

选择输入私有链的网络ID,任意数字即可(不能为1,1是公链),也可以不输入会给定一个随机数作为私有链的网络ID
Specify your chain/network ID if you want an explicit one (default = random)

选择导出创世区块配置文件

选择导出创世区块配置文件的保存路径,可以保存到当前目录,直接按回车即可
Which file to save the genesis into? (default = my-private-chain.json)

INFO [02-09|14:56:33] Exported existing genesis block

这样就完成了创世区块文件的配置了,直接退出puppeth即可。

输入命令 geth --datadir data init private.json 其中data自己制定,private.json就是刚才生成的创世区块
若出现如图错误:

输入命令:
geth --datadir data --syncmode full --port 2001 --networkid 1234 --rpc --rpcport "8545" --rpccorsdomain "*" --rpcaddr "0.0.0.0" --rpcapi "db,eth,net,web3,personal,admin,clique" --nodiscover console 进入控制台
--datadir data:节点的数据目录
--syncmode full:块同步的方式(若只是单节点可不填)
--port 2001: 网卡监听端口
--networkid 1234:网络标识符
--rpc:开启rpc服务
--rpcport "8545":rpc服务的端口
--rpccorsdomain "*":允许跨域请求的域名列表(逗号分隔)(浏览器强制)
--rpcaddr "0.0.0.0" :HTTP-RPC服务器接口地址(默认值:“localhost”)
--rpcapi "db,eth,net,web3,personal,admin,clique":基于HTTP-RPC接口提供的API(私有链可以任意开发,公有链需要谨慎)
--nodiscover:不允许节点自动加入

若想搭建联盟链,必须保证创世区块一致,进入到刚才创建的eth-private2的目录
将之前生成的创世区块拷贝过来,初始化创世区块,然后使用启动命令启动分别启动两个节点,进入控制台,使用 admin.nodeInfo 命令获取节点的信息

总结:
两个服务器部署两个节点是可以联通的,但是只能使用两个节点对应的地址进行挖矿,所以只能是两个节点对应两个地址进行挖矿,使用poa共识,当一个节点挂掉,挖矿停止,因为poa共识挖矿必须超过50%的节点进行钱增,现在只是两个节点,挂掉一个节点挖矿就会停止等待另一个节点的确认,停掉的节点可以通过正常运作的节点信息重新连接到网络中。
问题:
同步块有可能报错情况:
1:Synchronisation failed "retrieved hash chain is invalid" 解决目前找到的方法是removedb 数据目录 ,重新init创世区块
2:内存溢出初步确认为开启rpc服务造成的,有可能服务器恶意被黑,暴力破解密码,占有内存,解决,将服务器的ip设置一条防火墙

若存在问题可给本人留言或访问本人的github: https://github.com/qi-shuo/geth-document 记录了一些本人搭建使用的命令

7. 以太坊私有链如何更新版本

以太坊私有链更新版本的方法:
1、获取以太坊私有链系统的当前版本对应的当前版本号;
2、基于所述当前版本号,确定所述以太坊私有链系统的升级版本的升级版本号;
3、将所述以太坊私有链系统升级为所述升级版本号对应的升级版本。

8. 以太坊开发(2):在以太坊私有链上的基本操作

在上一讲 如何使用geth搭建以太坊私有链 完成了私有链的搭建,下面介绍在私有链上的基本操作。

启动私有链后在命令行输入:

执行完之后可以查看到生成的账户地址为

查询账户余额:

刚刚创建的私有链账户都是没有余额的,需要通过挖矿才会产生eth,下面介绍如何在私有链上挖矿。

在geth环境下执行:

这时候查看日志geth.log可以看到以太坊私有链有个启动的百分比,到100就正式启动了:

挖矿开始:

这时候有个疑问,挖矿挖到的eth到哪了,其实默认到了eth.account[0],就是第一个账户上:

如何修改挖矿所得的账户:

命令如下:

下面开始进行转账:

这时候出现报错,原因是转账的账户没有解锁,需要输入密码解锁转账的账户才能完成转账操作:

9. 以太坊获取测试链代币

发起以太坊交易时需要消耗以太币,开发智能合约做测试时如果在主网做测试成本会很高,并且主网的速度也比较慢,以太坊官方考虑到大家的这个需求提供了几条测试链供大家使用,比较知名的有以下这几个

以太坊的主测试网,环境最接近主网环境,有实际的雷锋矿工在挖矿,只不过难度会比主网低很多,不过由于 Ropsten 采用与主网完全一样的 PoW 共识,有时也就会和主网一样拥堵,在这条链上做测试更容易测试出智能合约或者dapp里潜在的问题

用的是 PoA 机制,无需挖矿,所以出块很快而且很稳定

和Rinkeby同样使用的是 PoA 机制

打开这个网址 https://faucet.metamask.io/

点击 request 1 ether from faucet 按钮会通过web3连接钱包,获取到钱包当前账户的以太坊地址,这个我使用的钱包是MetaMask,如果你没有装支持web3访问的钱包,可以参考这篇文章安装
https://www.jianshu.com/p/a84fe16f1af7

点击连接

连接成功后底部会生成一笔交易,hash值

等交易确认后一个以太坊就到账了

Rinkeby获取测试币相对麻烦些,需要注册twitter账号(需要翻墙)

打开这个网址 https://twitter.com/intent/tweet?text=Requesting%20faucet%20funds%20into%%20on%20the%20%23Rinkeby%20%23Ethereum%20test%20network

把推文中替换成你的地址点击TWEET,发送成功后点击分享图标选择Copy link to Tweet,把推文的链接复制下来

然后打开Rinkeby测试币水龙头网页 https://www.rinkeby.io/#faucet

把刚才那个推文链接复制进输入框,点击Give me Ether

根据你的需要选择要多少个代币,要的越多到账越慢😓,到账时间相对其它的测试链很慢,如果着急就用别的链做测试

打开这个网址 https://faucet.kovan.network/ ,需要使用github账号登陆

登陆成功后输入以太坊地址,点击发送就好了,转账交易就提交到链上了

同样的等待交易确认就能收到一个以太币了

10. 以太坊测试网络testNet汇总

在以太坊的交易过程中需要使用到以太币,我们想要获得以太坊主网上的代币,只能通过GPU矿机挖矿或者交易所购买。然而在测试环境中获取eth就容易多了。你可以在 私有链 中自己挖矿,或者公共测试链( testnet )中直接获得。下面就和大家讲讲常用的几种以太坊测试网络。

测试网络(简称testnet) 用于模拟以太网主网的行为。拥有几乎和以太坊等效的功能。因此可以在Testnets上开发和测试自己的智能合约,测试发币等等,作为上链前的评估环境。当主网(简称mainnet)即将包含对以太坊协议的任何重大改变时,其测试主要在这些测试网络上完成。注意:这些网络上的代币只能在测试环境(开发环境)中使用。

Ethereum以太坊有许多专用测试网络,他们由各种客户端支持,最常用的3种分别是Ropsten、Kovan、Rinkeby。

以上3个是不需要在本地搭建任何服务就可以直接使用的。

对于开发中的测试环境,建议你使用 Rinkeby 或 KoVan 测试链。这是因为他们使用的工作量证明 POA 共识机制,确保交易和块能够一致并及时的创建。 Ropsten 测试链,虽然最接近公有链( Mainnet ),但是因为它使用的工作量证明是POW共识机制,过去已受到垃圾攻击,对以太坊开发人员来说往往有更多的问题。

推荐:
以太坊测试网络Rinkeby使用教程

Rospten 以太坊测试网络的使用

热点内容
btc提现地址怎么填 发布:2025-02-25 08:22:43 浏览:801
矿机挖矿有哪些币 发布:2025-02-25 07:55:11 浏览:122
比特币能买半个吗 发布:2025-02-25 07:38:41 浏览:928
激战2挖矿脚本 发布:2025-02-25 07:37:17 浏览:296
比特币奖励减半时间 发布:2025-02-25 07:35:09 浏览:412
比特币矿池下载有哪些软件 发布:2025-02-25 07:17:39 浏览:269
trx练胸做几组合适 发布:2025-02-25 06:50:58 浏览:631
gtx660挖矿算力 发布:2025-02-25 06:37:45 浏览:17
独立中心矿池搭建 发布:2025-02-25 06:23:24 浏览:814
解放碑去武隆游客中心的车 发布:2025-02-25 06:09:40 浏览:220