Win10使用Geth搭建本地开发私有链(2021版)

Win10使用Geth搭建本地开发私有链(2021版)目录 1 下载 Geth2 验证是否安装成功 3 快速启动 1 下载 Geth 从官网下载 地址 下载完安装 2 验证是否安装成功打开 cmd 输入 gethversion 输出版本信息 安装成功 3 快速启动先获取本地 IP 地址 192 168 1 123 下面的命令里面的 IP 地址要改成自己的 然后创建个新文件夹 privateChain 打开 cmd 输入 gethnetworki 168 1 123

1. 下载Geth

从官网下载,地址,下载完安装

2. 验证是否安装成功

打开cmd,输入

geth version 

输出版本信息,安装成功

3. 两种方式启动和连接节点

先获取本地IP地址192.168.1.123,下面的命令里面的IP地址要改成自己的,然后创建个新文件夹privateChain,打开cmd,输入

3.1 attach方式(需2个cmd窗口)

3.1.1 启动

geth --networkid 123 --dev --datadir data1 --http --http.addr 192.168.1.123 --http.port 8989 --port 3000 --allow-insecure-unlock --ipcpath data1/geth1.ipc 
  • networkid 网络唯一标识id,测试用,随便输入个123,可以通过https://chainlist.org/这个网站查询真实的网络唯一标识
  • dev 指定开发者模式
  • datadir 指定本地数据存储目录
  • http 表示开启 HTTP-RPC 服务
  • http.addr 本地ip地址
  • http.port 指定 HTTP-RPC 服务监听端口号
  • port 指定和其他节点连接所用的端口号
  • allow-insecure-unlock 这个是因为出于安全考虑,默认会禁止HTTP通道解锁账户,也就是如果你在客户端操作对账户解锁的时候可能会 出现”unlock with HTTP access is forbidde” 的错误,后续通过代码而不是通过客户端发起交易时可以不用开启这一选项
  • ipcpath 指定ipc地址文件,特别重要

回车后输出日志,成功

3.1.2 连接

PS: 这里有个内外网都没找到解决方法的细节,其他教程都说直接用ipc连节点,连geth.ipc,但是永远找不到这个geth.ipc在哪里。所以这个到底在哪呢?

在日志输出里面有这个ipc地址,找这一行IPC endpoint opened,然后复制后面的url=\\.\pipe\data1/geth1.ipc,这就是ipc地址了

在文件夹privateChain下,重新打开一个cmd,输入命令

geth attach \\.\pipe\data1/geth1.ipc 

回车后进入交互命令行

3.2 console方式(只需1个cmd窗口)

geth --networkid 123 --dev --datadir data1 --http --http.addr 192.168.1.123 --http.port 8989 --port 3000 --allow-insecure-unlock --ipcpath data1/geth1.ipc console 

启动后直接连接进入交互命令行

5. 常用交互命令

5.1 查看账户列表

personal.listAccounts 

在这里插入图片描述
会发现已经存在一个账户了,默认创建的开发者账户,并且有一定余额

5.2 创建新账户

personal.newAccount("")// 是密码 

在这里插入图片描述

5.3 查看coinbase账户

eth.coinbase 

在这里插入图片描述
默认第一个账户就是coinbase账户

5.4 查看第2个账户

personal.listAccounts[1] 

在这里插入图片描述

5.5 查看某个账户的余额

eth.getBalance("0xa7ac1d344b619e7bee0eedb7c11") 或用下面的命令 eth.getBalance(personal.listAccounts[1]) 

在这里插入图片描述

5.6 查看区块高度

eth.blockNumber 

在这里插入图片描述

5.7 从第一个账户转账给第二个账户

5.7.1 先解锁第一个账户

PS: 第一个账户是自动生成的开发者账户,密码是空

personal.unlockAccount(personal.listAccounts[0],"输入密码") 

在这里插入图片描述

5.7.2 发送交易

从第一个账户给第二个账户转5个以太币

eth.sendTransaction({ 
   from:personal.listAccounts[0],to:personal.listAccounts[1],value:web3.toWei(5,'ether')}) 

在这里插入图片描述

5.7.3 查询交易hash内容

使用上一步发送交易输出的hash值

eth.getTransaction("0xb2f155b1cd90056fe7a6868eab62687aef9f4d7bd494f9fe24c8d") 

在这里插入图片描述

5.7.4 查看交易后区块高度

eth.blockNumber 

在这里插入图片描述
有交易,加了一个高度

5.7.5 查询第二个账户余额

eth.getBalance(personal.listAccounts[1]) 下面命令是单位转换,从Wei转成以太币 web3.fromWei(eth.getBalance(personal.listAccounts[1])) 

在这里插入图片描述在这里插入图片描述
发现已经有5个以太币,交易成功
PS: 在开发者模式下,会自动进行挖矿,所以交易立马就生效了




6. 多节点互联

PS: 搞了很久都没成功,最后被逼去看geth源码,然后看到这句注释,吐血
在这里插入图片描述

7. 部署合约

以之前的一个文章《Solidity的框架Truffle的简单使用(2021版)》里的项目来做例子。

7.1 修改合约项目配置文件

  • 在myProject合约项目根目录下找到truffle-config.js文件
    在这里插入图片描述

  • 打开后,搜索,development,根据文章上面的配置,修改成对应内容
    在这里插入图片描述

7.2 打开合约项目truffle交互命令行

  • 使用命令truffle console进入交互命令行,注意,这里只能用console模式,因为要用到修改的项目配置,如果用develop模式,就用的是默认的私链了
  • 使用命令compile编译
  • 使用命令migrate --reset部署,注意,geth的节点需要启动,观察这个命令执行后,节点cmd里会出现挖矿记录mined potential block,表示部署成功

7.3 打开geth节点交互命令行

  • 使用命令eth.blockNumber查看区块高度,可以观察到区块增加了,侧面说明部署成功
  • 在myProject合约项目目录下,进入build/contracts,打开HelloWorld.json文件
    在这里插入图片描述

  • 搜索abi,选中中括号(包括中括号)的内容,把内容复制出来,找个压缩json的工具进行压缩,结果如下
[{ 
   "constant":true,"inputs":[],"name":"test","outputs":[{ 
   "internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{ 
   "constant":false,"inputs":[],"name":"test1","outputs":[{ 
   "internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{ 
   "constant":true,"inputs":[{ 
   "internalType":"string","name":"name","type":"string"}],"name":"echo","outputs":[{ 
   "internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"}] 
  • 在geth节点交互命令行里,输入,abi等于刚刚压缩的内容,不需要双引号
var abi = [{ 
   "constant":true,"inputs":[],"name":"test","outputs":[{ 
   "internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{ 
   "constant":false,"inputs":[],"name":"test1","outputs":[{ 
   "internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{ 
   "constant":true,"inputs":[{ 
   "internalType":"string","name":"name","type":"string"}],"name":"echo","outputs":[{ 
   "internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"}] 
  • 在geth节点交互命令行里,输入 abi,输出json结构内容,说明ok
  • HelloWorld.json文件里,继续搜索,address,把对应的值复制
    在这里插入图片描述

  • 在geth节点交互命令行里,输入
var myContract=eth.contract(abi).at("上面搜到的address值") 
  • 验证结果,输入
myContract.test() 

在这里插入图片描述

  • 验证结果,输入
myContract.test1.call() 

在这里插入图片描述

  • 验证结果,输入
myContract.echo("读者老爷好帅") 

在这里插入图片描述
over,enjoy!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208262.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午11:59
下一篇 2026年3月19日 上午11:59


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号