主页 > imtoken安卓版下载app > 【干货】在Mac上搭建以太坊私网

【干货】在Mac上搭建以太坊私网

imtoken安卓版下载app 2023-07-09 05:13:43

文章目录

一、环境搭建 1、安装go语言

brew install go

2. 安装 Geth

方法一:官网下载最新版本

注意:网站可能有加载问题

正在从发布服务器检索包...

解决方法:F12开发此模式查看下载链接

附上最新的下载链接:

Linux:

视窗:

苹果系统:

tar -zxvf geth-darwin-amd64-1.9.9-01744997.tar.gz
cd geth-darwin-amd64-1.9.9-01744997.tar.gz

方法二:使用 Homebrew 安装

brew install ethereum

在这里插入图片描述

3、使用geth的help命令查看使用指南(可跳过)

geth help

在这里插入图片描述

4. Geth简介

Geth 是一个用 Go 语言编写的命令行工具,可用于在私有网络上创建节点和矿工。 可以作为连接公网和测试网的客户端,也可以在私网上运行挖矿和EVM(交易节点)。

Geth 是一个基于 JASON RPC 的协议。 它以 JSON 格式定义了代码远程处理规范。 Geth 可以使用以下三种 JSON RPC 协议进行连接:

配置 Geth 的命令、开关参数和选项有很多,例如:

在不同的网络上,链ID是不同的:

使用 Geth --testnet 连接到 Ropsten 网络,使用 Geth --rinkeby 连接到 Rinkeby 网络。

二、搭建私有网络 1、创建创世块配置文件

搭建私有以太坊节点_以太坊私有链案例_以太坊节点赚钱吗

Geth需要使用genesis.json文件来生成创世块搭建私有以太坊节点,还需要提供一个目录来保存块数据和账户私钥(keystore)。

mkdir myeth
cd myeth
vim genesis.json

{
  "config": {
    "chainId": 15,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "nonce": "0x0000000000000042",
  "maxhash":
  "0x0000000000000000000000000000000000000000000000000000000000000000",
  "difficulty": "0x200",
  "gasLimit": "0xffffffff",
  "coinbase": "0000000000000000000000000000000000000000",
  "stmestamp": "0x00",
  "parentHash":
  "0x0000000000000000000000000000000000000000000000000000000000000000",
  "alloc": {}
}

各参数作用说明:

在这里插入图片描述

2.网络初始化

输入geth init命令,genesis.json文件,以及block data和keystore存放的文件夹进行初始化。

搭建私有以太坊节点_以太坊私有链案例_以太坊节点赚钱吗

geth init "/Users/andrewfeng/Documents/Ethereum/myeth/genesis.json" --datadir "/Users/andrewfeng/Documents/Ethereum/myeth/chaindata"

注意:路径需要换成自己的路径

在这里插入图片描述

创世块已经生成,可以启动Geth节点了。

Geth启动时默认使用IPC协议。 为了保证Geth节点可以通过PRC协议访问,命令中需要包含RPC参数

3.搭建节点运行环境

geth --datadir "/Users/andrewfeng/Documents/Ethereum/myeth/chaindata" --rpc --rpcapi "eth,web3,miner,admin,personal,net" --rpccorsdomain "*" --nodiscover --networkid 15

常用参数选项含义如下:

在这里插入图片描述

enode的信息是节点在网络上的身份标识。 如果其他节点要加入这个网络,他们需要提供自己的 enode 值。

RPC访问可以通过:8545或:8545,IPC访问可以通过**\.\pipe\geth.ipc**命令。

该命令以服务的形式持续运行。 需要再打开一个命令行窗口,输入

Geth attach rpc:http://localhost:8545

使用IPC协议连接到节点,以便执行其他命令。

在这里插入图片描述

这是一个交互式 JavaScript 执行环境,可以在其中执行 JavaScript 代码,其中 > 是命令提示符。 在这个环境中,还内置了一些操作以太坊的JavaScript对象,可以直接使用这些对象。 这些对象主要包括:

进入以太坊Javascript控制台后,可以使用内置对象进行一些操作。 这些内置对象提供了丰富的功能,例如查看区块和交易、创建账户、挖矿、发送交易和部署智能合约。

常用命令:

4. 设置一个帐户

连接到 Geth 节点后,下一步是设置 coinbase 或 etherbase 帐户。 创建一个账户,可以使用个人对象的newAccout方法,并设置一个密码(密码是不可见的)。

personal.newAccount()

在这里插入图片描述

如果需要更改原coinbase账户地址,可以通过address.miner对象的setEtherBase函数来实现。 此操作会将原来的 coinbase 帐户替换为新帐户。

miner.setEtherbase("0x19b4029dad20824db6dc201437f9cac2a7e1fc5c")

搭建私有以太坊节点_以太坊节点赚钱吗_以太坊私有链案例

在这里插入图片描述

执行查询命令,可以看到设置的地址已经生效。 此时可以开始挖矿。 由于只有一个矿工,所有的挖矿奖励都会获得,coinbase账户中的以太币会逐渐增加。

eth.coinbase

在这里插入图片描述

以同样的方式创建另一个帐户

在这里插入图片描述

查看当前帐户

eth.accounts

在这里插入图片描述

5.开始挖矿

miner.start(8)

start中的参数表示用于挖矿的线程数。

在这里插入图片描述

这时候,切换到之前创建私链的命令行窗口,就可以看到挖矿过程的输出了。

在这里插入图片描述

在这里插入图片描述

注意:使用log输入法时,可以输入命令tail -f geth.log来跟踪挖矿进度

可以看到正在挖矿的账户0获得的ETH余额和未挖矿的账户1的ETH余额。

在这里插入图片描述

挖出一个区块将奖励5 ETH,挖矿获得的奖励将进入矿工账户。 这个账户叫做 coinbase。 默认情况下,coinbase 是本地账户中的第一个账户。

getBalance()返回值的单位是wei,是ether的最小单位,1 ether = 10的wei的18次方。 要查看您有多少以太币,您可以使用 web3.fromWei() 将返回值转换为以太币:

web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')

6.停止挖矿

miner.stop()

以太坊节点赚钱吗_搭建私有以太坊节点_以太坊私有链案例

7.打开以太坊钱包

在线地址:以太坊钱包

下载链接:

在这里插入图片描述

如您所见,主账户有 6400 ETH。 上面红色字体“PRIVATE-NET”表示你的区块链网络正常。

8.进行交易

如果我们要从0号账户转账到1号账户,转账前需要先解锁账户,否则会报错。

personal.unlockAccount(eth.accounts[0])

在这里插入图片描述

发现错误 Error: account unlock with HTTP access is forbidden

事实证明,出于安全原因,默认情况下禁用 HTTP 通道以解锁帐户。 相关问题请参考:

如果你已经了解开启该功能的风险,可以在启动命令中加入参数:--allow-insecure-unlock

在这里插入图片描述

还发现报错 Fatal: Error starting protocol stack: datadir already used by another process

需要强行关闭正在运行的geth进程:

ps aux | grep "geth"
kill -9 54148

在这里插入图片描述

再次添加参数--allow-insecure-unlock,重启g私有链。

geth --datadir "/Users/andrewfeng/Documents/Ethereum/myeth/chaindata" --rpc --rpcapi "eth,web3,miner,admin,personal,net" --rpccorsdomain "*" --nodiscover --networkid 15 --allow-insecure-unlock

现在执行解锁账户命令即可成功。

在这里插入图片描述

可悲的是,之前挖到的以太币重启后都清空了。 . . 需要挖掘一段时间。 查看两个账户的当前余额:

在这里插入图片描述

可以通过发送交易将 200 个以太币从账户 0 转移到账户 1。 其中0号账号需要解锁。

personal.unlockAccount(eth.accounts[0])

以太坊节点赚钱吗_搭建私有以太坊节点_以太坊私有链案例

amount = web3.toWei(200,'ether') eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})

在这里插入图片描述

此时交易已经提交到区块链,交易的哈希已经返回,但还没有处理。 本地交易池中有待处理的交易。 您可以使用 eth.getBlock(“pending”, true).transactions 查看当前待处理的交易。 确认交易。

eth.getBlock("pending", true).transactions

在这里插入图片描述

处理交易需要挖矿。 这里开始挖矿,等待挖出一个区块后停止挖矿:

miner.start(1);admin.sleepBlocks(1);miner.stop();
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')

在这里插入图片描述

此时搭建私有以太坊节点,交易已经生效,Account 1 应该收到了 200 ETH。

三、常见错误总结

1.Fatal: invalid genesis file: invalid character '"' after object key:value 对

Json 键值对行末尾缺少逗号

2. 致命:无效的创世文件:json:无法将没有 0x 前缀的十六进制字符串解组到类型为 common.Address 的 Go struct 字段 Genesis.coinbase

在json文件中,对于16进制数据,需要加上0x前缀

3.致命:写入创世块失败:不支持的分叉顺序:未启用eip150Block,但在0启用eip155Block

在配置部分添加“eip150Block”:0,

4. Fatal: failed to write genesis block: genesis没有链配置

在 json 文件中,缺少配置部分

5.错误:发件人无效未定义

这个错误不会导致初始化失败,但是会在以后转账(eth.sendTransaction),或者部署智能合约的时候出现。 解决方法是chainId不能设置为0。

6.错误:禁止使用HTTP访问的帐户解锁

出于安全考虑,HTTP通道解锁账号默认是关闭的,请参考相关问题。 如果你已经了解开启该功能的风险,可以在启动命令中加入参数:--allow-insecure-unlock

7. Fatal: Error starting protocol stack: datadir already used by another 进程

需要强行关闭正在运行的geth进程:

ps aux | grep "geth"
kill -9 [PID]