一步步教程:使用Geth在本地搭建私有以太坊区块链

区块链技术正以惊人的速度改变着我们的世界,从数字货币到智能合约,无处不在的变革正在发生。但是,当我们尝试在真实环境中测试这些创新时,常常面临着风险和不确定性。如果有一种方式能够在安全的环境中测试智能合约,不会影响到主网,那将是多么方便和有益。幸运的是,私有链为我们提供了这样的机会。在本文中,我们将引导您一步步搭建自己的私有以太坊区块链,为您展示如何在一个受控的环境中探索区块链技术的奥秘。让我们开始吧,探索这个令人着迷的领域!
1、下载客户端
https://geth.ethereum.org/downloads

这里选择的是geth1.11.6版本
2、准备创世块的配置文件(新建文件,genesis.json)
config:这个部分包含了一系列的网络配置参数,用于定义您的私有链的行为和规则。
chainId:私有链的唯一标识符。在这个示例中,chainId 设置为 10。
homesteadBlock:切换到 Homestead 协议版本的块高度。在这个示例中,设置为 0,表示从创世块就采用 Homestead 协议。
byzantiumBlock、constantinopleBlock、eip155Block、eip158Block、eip150Block:类似于 homesteadBlock,分别指定了切换到对应协议版本的块高度。
eip150Hash:一个用于安全性的哈希值,与 EIP-150 相关。
coinbase:矿工的账户地址,用于接收挖矿奖励。在这个示例中,设置为一个全零的地址。
difficulty:难度目标值,它控制了挖矿的难度。在这个示例中,设置为 0x20000。
extraData:附加的数据,通常在挖矿过程中包含一些附加信息。
gasLimit:每个区块所允许的最大燃料消耗量。在这个示例中,设置为 0xffffffff,表示最大值。
nonce:一个随机数,用于标识区块的唯一性。在这个示例中,设置为一个非零的值。
mixhash:一个用于工作量证明的哈希值,与挖矿相关。
parentHash:前一个区块的哈希值,用于构建区块链。
timestamp:区块的时间戳,表示区块创建的时间。在这个示例中,设置为 0x00,表示创世块的时间戳。
alloc:初始分配的以太币和其他代币。在这个示例中,设置为空对象,表示没有初始分配。
3、初始化写入创世区块
--datadir 指定初始化的目录

出现 Successfully wrote genesis state 表示成功初始化
4、启动geth
./geth:这是执行 Geth 客户端的命令。
--datadir data1:这个选项指定了数据目录的路径,Geth 将在这个目录中存储区块链数据和相关文件。
--networkid 10:指定私有链的网络标识符,这个值用于在不同私有链之间进行区分。
--http:启用 HTTP-RPC 通信接口,允许通过 HTTP 请求与 Geth 进行交互。
--http.addr 0.0.0.0:设置 HTTP-RPC 服务监听的地址,0.0.0.0 表示允许来自任何 IP 地址的连接。
--http.port 8545:指定 HTTP-RPC 服务的端口号,一般是 8545。
--http.corsdomain "*":配置允许跨域请求的域名,设置为 "*" 表示允许任何域名进行跨域请求。
--http.api "db,eth,net,web3,personal,web3":指定启用的 HTTP-RPC 接口,这里列出了一些常用的接口,包括数据库、以太坊操作、网络信息、Web3 功能和个人账户操作。
--port 30305:设置 Geth 节点的 P2P 网络端口,用于节点间的通信。
-allow-insecure-unlock:允许以不安全的方式解锁账户。这在测试环境中使用,允许在 HTTP-RPC 上发送解锁账户的请求,但在生产环境中不建议使用。

出现这个界面表示运行成功!
在终端中查看账户

现在的账户是空的,使用geth创建一个新的账户
需要指定你的datadir文件加,否则会创建在默认的文件夹下

输入两次密码,就会创建一个账户,再次查询账户

使用miner命令进行挖矿
需要先设置挖矿账户

执行挖矿开始
停止挖矿
查询挖矿余额

在本文中,我们详细介绍了如何使用Geth搭建私有链的步骤。通过配置创世块、启动节点并与区块链进行交互,您现在已经掌握了在本地创建自己的区块链网络的基本技能。私有链为您提供了一个安全的环境,让您能够实验智能合约和其他区块链功能,而无需担心影响主网。我们鼓励您在未来的项目中应用这些知识,并根据您的需求进行定制。如果您在实践中遇到任何问题或有任何想法,都可以随时与我们联系。感谢您的阅读,希望您能够在区块链领域取得令人瞩目的成就!
