Geth搭建私链(最新)

10 篇文章 0 订阅
1 篇文章 0 订阅

Geth搭建私链

puppeth 是 Geth 中一个非常有用的命令,它允许您使用一个交互式的命令行界面来创建、配置和管理您的私有链。但是在最新版本的Geth中已经删除了用于以动开发的库和puppeth工具,这也就给我们搭建私链增加了负担。

前提条件

1、Geth正确安装,并且配置了环境变量等
2、Go安装正确,并且环境变量等配置正确
3、有时候注意有些文件的执行普通cmd没有用,需要以管理员启动cmd。
大家可以使用命令:geth version查看自己的配置信息是否正确,一下是我的配置信息。

C:\Users\HAO>geth version
Geth
Version: 1.11.5-unstable
Architecture: amd64
Go Version: go1.20.1
Operating System: windows
GOPATH=D:\GoApiTool
GOROOT=E:\SoftWare\Go

1、创建geth.json

直接创建一个json文件,名字自己定,在json内写入:

{
    "config": {
          "chainId": 1234,
          "homesteadBlock": 0,
          "eip150Block": 0,
          "eip155Block": 0,
          "eip158Block": 0
      },
    "alloc"      : {},
    "coinbase"   : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x20000",
    "extraData"  : "",
    "gasLimit"   : "0x2fefd8",
    "nonce"      : "0x0000000000000042",
    "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp"  : "0x00"
  }

chainId可以选择一个相对来说大一点的数字。

2、创建一个nodedata文件夹

在geth.json文件的同级目录下创建一个nodedata文件夹,用于存放keystore等文件。
nodedata文件

3、指定json生成keystore

使用命令:geth --datadir nodedata --networkid 776211 --rpc init ./geth.json生成keystore等文件,networkid自己设置,避免节点碰撞即可。
成功以后就会在指定的文件中生成相关文件,geth是用于存放数据的,keystore是用于存放私钥的
生成geth和keystore

4、创建账号

执行命令: geth --datadir “nodedata” account new生成账号,这时候需要输入密码。请一定要记住这个密码,不要弄错了,后面马上用的上。这时候就会在keystore里面生成一个UTC开头的文件,文件不大。
在这里插入图片描述

5、创建passwd文件

注意先打开文件扩展名可见,具体打开方式可见下图:
显示文件扩展名
在geth.json文件的同级目录下创建一个passwd文件,不需要任何后缀,并且对这个文件进行编辑,输入自己创建账号时设置的密码,千万别输入错误了。(这个文件名和文件格式不是强制的,可以自己定义,后面要用,请记住文件名称)
创建passwd文件

6、创建nodestart一键启动文件

在json文件中创建一个nodestart.bat文件,是一个太坊 Geth 客户端的启动命令,用于启动一个具有完整同步模式的私有区块链,并在 HTTP 和 WebSocket 协议上开启 API。里面的具体内容是:

geth  --ethash.cachedir "D:\BlockChain\Ethash" --ethash.dagdir  "D:\BlockChain\Ethash"  --allow-insecure-unlock  --unlock=0  --password  ./passwd  --networkid  776211  --datadir  "nodedata"  --http --http.api "admin,debug,web3,eth,txpool,personal,ethash,miner,net" --http.corsdomain="*" --http.port=8545 --http.addr="0.0.0.0"  --ws --ws.addr "0.0.0.0" --ws.port=8546 --ws.origins "*" --ws.api "admin,debug,web3,eth,txpool,personal,ethash,miner,net" --syncmode full console

参数说明:
1、--ethash.cachedir "D:\BlockChain\Ethash":指定 Ethash 缓存目录的路径。
2、--ethash.dagdir "D:\BlockChain\Ethash":指定 Ethash DAG 目录的路径。
3、--allow-insecure-unlock:允许不安全的账户解锁方式。
4、--unlock=0:解锁账户的索引,这里是解锁第一个账户。
5、--password ./passwd:指定解锁账户的密码文件路径,这里是使用了名为 passwd 的文件。
6、--networkid 776211:指定节点所在的网络 ID。
7、--datadir "nodedata":指定节点数据存储目录的路径。
8、--http:启用 HTTP-RPC 服务。
9、--http.api "admin,debug,web3,eth,txpool,personal,ethash,miner,net":指定 HTTP-RPC 服务要开放的 API。
10、--http.corsdomain="*":允许所有的来源访问 HTTP-RPC 服务。
11、--http.port=8545:指定 HTTP-RPC 服务的端口号。
12、--http.addr="0.0.0.0":指定 HTTP-RPC 服务绑定的 IP 地址。
13、--ws:启用 WebSocket-RPC 服务。
14、--ws.addr "0.0.0.0":指定 WebSocket-RPC 服务绑定的 IP 地址。
15、--ws.port=8546:指定 WebSocket-RPC 服务的端口号。
16、--ws.origins "*":允许所有来源访问 WebSocket-RPC 服务。
17、--ws.api "admin,debug,web3,eth,txpool,personal,ethash,miner,net":指定 WebSocket-RPC 服务要开放的 API。
18、--syncmode full:指定节点同步模式为完整模式,即下载所有区块。
19、console:启动控制台模式,可以在控制台中输入 Geth 命令与节点进行交互。
上述参数大家也可以据自己的需求和环境来适当地修改这些参数和选项,确保节点的启动和运行是正确的和安全的。

注意:上述代码之间的间隔,一定给要小心,如果在下一步双击启动的时候,直接闪过就说明可能是存在应该有空格的位置没有空格情况。

到这就基本完成了,这时候双击nodestart.bat文件进行初始化,第一次启动可能需要稍微久一点,会在刚才指定的Ethash 缓存目录中加载缓存,好像文件还挺大的,有个几个G。

补充:关于ChatGPT

创世纪块json文件我们可以通过百度,谷歌等浏览器进行搜索,反正还是挺多的,我们也可以借助最近超火的ChatGPT,让它生成一个创世纪json文件。

问题回答说明: 请将 <address> 替换为您想要设置为预先分配的地址,可以有多个地址,每个地址的初始余额也可以不同。这里给出的创世纪 JSON 文件包含了一些基本的参数设置,您可以根据需要进行修改。另外,需要注意的是,如果您选择的网络 ID 与公共以太坊网络的网络 ID 相同,那么您在启动私有链时需要加上 --networkid <your_network_id> 参数来指定您的私有链网络 ID。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
以太坊是一个平台,它上面提供各种模块让用户来搭建应用,如果将搭建应用比作造房子,那么以太坊就提供了墙面、屋顶、地板等模块,用户只需像搭积木一样把房子搭起来,因此在以太坊上建立应用的成本和速度都大大改善。具体来说,以太坊通过一套图灵完备的脚本语言(Ethereum Virtual Machinecode,简称EVM语言)来建立应用,它类似于汇编语言。我们知道,直接用汇编语言编程是非常痛苦的,但以太坊里的编程并不需要直接使用EVM语言,而是类似C语言、python、Lisp等高级语言,再通过编译器转成Evm语言。上面所说的平台之上的应用,其实就是合约,这是以太坊的核心。合约是一个活在以太坊系统里的自动代理人,他有一个自己的以太币地址,当用户向合约的地址里发送一笔交易后,该合约就被激活,然后根据交易中的额外信息,合约会运行自身的代码,最后返回一个结果,这个结果可能是从合约的地址发出另外一笔交易。需要指出的是,以太坊中的交易,不单只是发送以太币而已,它还可以嵌入相当多的额外信息。如果一笔交易是发送给合约的,那么这些信息就非常重要,因为合约将根据这些信息来完成自身的业务逻辑。合约所能提供的业务,几乎是无穷无尽的,它的边界就是你的想象力,因为图灵完备的语言提供了完整的自由度,让用户搭建各种应用。白皮书举了几个例子,如储蓄账户、用户自定义的子货币等。 2013年年末,以太坊创始人Vitalik Buterin发布了以太坊初版白皮书,启动了项目。2014年7月24日起,以太坊进行了为期42天的以太币预售。2016年初,以太坊的技术得到市场认可,价格开始暴涨,吸引了大量开发者以外的人进入以太坊的世界。中国三大比特币交易所之二的火币网及OKCoin币行都于2017年5月31日正式上线以太坊。 [1] 自从进入2016年以来,那些密切关注数字货币产业的人都急切地观察着第二代加密货币平台以太坊的发展动向。作为一种比较新的利用比特币技术的开发项目,以太坊致力于实施全球去中心化且无所有权的的数字技术计算机来执行点对点合约。简单来说就是,以太坊是一个你无法关闭的世界计算机。加密架构与图灵完整性的创新型结合可以促进大量的新产业的出现。反过来,传统行业的创新压力越来越大,甚至面临淘汰的风险。比特币网络事实上是一套分布式的数据库,而以太坊则更进一步,她可以看作是一台分布式的计算机:区块链是计算机的ROM,合约是程序,而以太坊的矿工们则负责计算,担任CPU的角色。这台计算机不是、也不可能是免费使用的,不然任何人都可以往里面存储各种垃圾信息和执行各种鸡毛蒜皮的计算,使用它至少需要支付计算费和存储费,当然还有其它一些费用。最为知名的是2017年初以摩根大通、芝加哥交易所集团、纽约梅隆银行、汤森路透、微软、英特尔、埃森哲等20多家全球top金融机构和科技公司成立的企业以太坊联盟。而以太坊催生的加密货币以太币近期又成了继比特币之后受追捧的资产。  智能合约的潜在应用很多。彭博社商业周刊称它是“所有人共享但无法篡改的软件”。更高级的软件有可能用以太坊创建网络商店。  以太坊是一个平台,它上面提供各种模块让用户来搭建应用,如果将搭建应用比作造房子,那么以太坊就提供了墙面、屋顶、地板等模块,用户只需像搭积木一样把房子搭起来,因此在以太坊上建立应用的成本和速度都大大改善。具体来说,以太坊通过一套图灵完备的脚本语言(Ethereum Virtual Machinecode,简称EVM语言)来建立应用,它类似于汇编语言。我们知道,直接用汇编语言编程是非常痛苦的,但以太坊里的编程并不需要直接使用EVM语言,而是类似C语言、python、Lisp等高级语言,再通过编译器转成Evm语言。上面所说的平台之上的应用,其实就是合约,这是以太坊的核心。合约是一个活在以太坊系统里的自动代理人,他有一个自己的以太币地址,当用户向合约的地址里发送一笔交易后,该合约就被激活,然后根据交易中的额外信息,合约会运行自身的代码,最后返回一个结果,这个结果可能是从合约的地址发出另外一笔交易。需要指出的是,以太坊中的交易,不单只是发送以太币而已,它还可以嵌入相当多的额外信息。如果一笔交易是发送给合约的,那么这些信息就非常重要,因为合约将根据这些信息来完成自身的业务逻辑。合约所能提供的业务,几乎是无穷无尽的,它的边界就是你的想象力,因为图灵完备的语言提供了完整的自由度,让用户搭建各种应用。白皮书举了几个例子,如储蓄账户、用户自定义的子货币等。 2013年年末,以太坊创始人Vitalik Buterin发布了以太坊初版白皮书,启动了项目。2014年7月24日起,以太坊进行了为期42天的以太币预售。2016年初,以太坊的技术得到市场认可,价格开始暴涨,吸引了大量开发者以外的人进入以太坊的世界。中国三大比特币交易所之二的火币网及OKCoin币行都于2017年5月31日正式上线以太坊。 [1] 
进行geth私链的硬分叉需要以下步骤: 1. 编写分叉代码:编写一个智能合约,其中包括原始代码以及要执行的新代码。 2. 执行分叉代码:在私链上运行分叉代码,以使节点能够识别新的规则。 3. 更新节点:更新参与私链的节点,以便它们能够识别新规则并执行新代码。 4. 启动分叉:启动私链以执行硬分叉。 以下是更详细的步骤: 1. 编写分叉代码 首先,你需要编写一个智能合约,其中包括原始代码以及要执行的新代码。在新代码中,你需要指定要执行的新规则。 例如,如果你要创建一个新的代币,你需要指定代币的名称、符号和总量。在这个过程中,你还需要指定新规则的实现方式。 以下是一个创建新代币的示例代码: ``` pragma solidity ^0.4.16; contract MyToken { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; function MyToken() public { name = "MyToken"; symbol = "MT"; decimals = 18; totalSupply = 1000000 * 10**uint256(decimals); balanceOf[msg.sender] = totalSupply; } event Transfer(address indexed from, address indexed to, uint256 value); function transfer(address _to, uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } } ``` 在这个示例中,我们创建了一个名为 "MyToken" 的代币,符号为 "MT",小数点为 18,总量为 1000000。 2. 执行分叉代码 接下来,你需要在私链上运行分叉代码,以使节点能够识别新规则。 在这个过程中,你需要将新代码添加到私链中。你可以使用 Remix 或 Truffle 等工具来编译和部署智能合约。 例如,你可以使用以下命令在私链上部署 MyToken 合约: ``` var myToken = web3.eth.contract(abi).new({from:web3.eth.accounts[0], data:bytecode, gas: 3000000}, function(e, contract){ if(!e) { if(!contract.address) { console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined..."); } else { console.log("Contract mined! Address: " + contract.address); console.log(contract); } } }); ``` 执行以上命令后,你应该可以在私链上看到新的代币合约地址。 3. 更新节点 接下来,你需要更新参与私链的节点,以便它们能够识别新规则并执行新代码。 在这个过程中,你需要将新代码添加到节点中。你可以使用以下命令将新合约添加到节点中: ``` geth attach ipc:/path/to/geth.ipc var myTokenContract = eth.contract(abi); var myToken = myTokenContract.at("0x123456..."); ``` 在以上命令中,你需要将 abi 和地址替换为你自己的值。 4. 启动分叉 最后,你需要启动私链以执行硬分叉。 你可以使用以下命令启动私链以执行硬分叉: ``` geth -- datadir /path/to/chaindata --networkid 1234 --port 30303 --rpc --rpcport 8545 --rpcaddr 127.0.0.1 --rpcapi "eth,net,web3,personal" --gasprice 0 --nodiscover --maxpeers 0 --unlock 0 --password /path/to/passwordfile.txt --mine --targetgaslimit 4700000 --fork "0x1234567890abcdef" --cache 1024 ``` 在以上命令中,你需要将 datadir、networkid、port、rpcport、rpcaddr、password 和 fork 替换为你自己的值。 这个命令将启动私链并执行硬分叉。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贴瓷砖的小钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值