geth入门命令和miner.start返回null的问题

本文介绍如何使用geth客户端配置私有以太坊网络,并解决miner.start返回null的问题,通过添加特定参数实现正常挖矿。同时,提供账户管理、转账及ether与Wei单位转换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:
https://blog.youkuaiyun.com/hpp24/article/details/79401298

以太坊学习(二)–geth入门命令和miner.start返回null的问题
2018年02月28日 15:35:47
阅读数:1735
geth –datadir “./ethdev” –nodiscover console 2>>geth.log //geth 进入控制台 –datadir 指定链的目录 与公有链区分开
进入命令行模式,其中参数
–datadir 代表文件夹地址,
–nodiscover 代表该链条不希望被其他节点发现,
console >> geth.log 代表将控制台输出到文件geth.log中去
当然从命令行模式退出,也很简单,只要打入exit, 即可退出

eth.accounts //查询账户
[]
这样创建的链中没有账户

personal.newAccount(“123456”) //创建一个账户 参数为私钥密码 返回值为账户的公钥

eth.getBalance(user1) //获取账户的余额
刚开始创建的账户余额都为0

这里写图片描述

eth.blockNumber //查看区块链数

miner.start() //开始挖矿

miner.stop() //停止挖矿

这里写图片描述
这里执行 miner.start() 却返回null 。并且eth.blockNumber 数没有发生变化,因此断定没有挖矿。

根据产生的问题解决方法: 参考链接 http://mp.weixin.qq.com/s/AB9vj1EzOgWT7JyryfQhDg 这种方法实际不能解决问题。

然后可以参考 http://blog.youkuaiyun.com/wo541075754/article/details/79260040 可以解决不能挖矿的问题。

–dev Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled
–dev.period value Block periodtouseindeveloper mode (0= mine onlyiftransaction pending) (default:0)

因为在启动geth命令行的时候需要添加这两个参数。

这里写图片描述
虽然miner.start 还是返回null,但是 eth.blockNumber 却增长了,因此说明可以挖矿了。

添加–dev 参数,启动的时候便产生了一个账户,并且已经挖矿有余额。

eth.sendTransaction({from: user1, to: user2, value: amount}) //将0.01以太币从 user1 转移到user2 转移数量为0.01以太币

执行eth.sendTransaction 之后 user2的余额还是0,那是因为没有进行挖矿,交易没有完成。 挖矿之后user2便有了余额.
这里写图片描述

补充:

Ether币的基本单位
Ether币最小的单位是Wei,也是命令行默认的单位, 然后每1000个进一个单位,依次是

  • kwei (1000 Wei)
  • mwei (1000 KWei)
  • gwei (1000 mwei)
  • szabo (1000 gwei)
  • finney (1000 szabo)
  • ether (1000 finney)
    简单地说就是就是1 以太币 = 1000000000000000000 Wei (这就是上一站章中为何我们转移0.01个以太币,结果却显示很长的原因)

如何进行ether 和 Wei之间的转换
Ether–> Wei:web3.toWei

web3.toWei(1)
“1000000000000000000”
web3.toWei(1.3423423)
“1342342300000000000”
web3.toWei(0.00034)
“340000000000000”

Wei –> Ether: web3.fromWei
web3.fromWei(10000000000000000)
“0.01”
web3.fromWei(1000000000000000000)
“1”

以太坊的一个保护机制,每隔一段时间账户就会自动锁定,这个时候任何以太币在账户之间的转换都会被拒绝,除非把该账户解锁.
personal.unlockAccount(user1) 并输入密码来解锁user1才可以.

参考文章链接:http://www.8btc.com/eth-geth

<think>好的,我现在需要解决用户遇到的Geth节点连接问题,具体错误是“Fatal error: unable to attach to remote geth node dial unix geth.ipc: no such file or directory”。首先,我要仔细分析可能的原因,然后逐步给出解决方案。 首先,用户提到错误信息是“no such file or directory”,这表明Geth的IPC文件(geth.ipc)不存在或者路径不正确。根据引用[3],在Windows 10上可能因为路径格式的问题,而Linux环境下可能涉及权限或路径问题。用户的情况看起来是在类Unix系统上,因为错误提到了Unix套接字(dial unix)。 接下来,我需要考虑几个可能的原因: 1. **Geth节点未正确运行**:如果Geth没有在后台运行,或者没有生成IPC文件,自然会导致连接失败。需要检查Geth的进程是否在运行。 2. **IPC文件路径错误**:用户可能指定了错误的IPC文件路径。默认情况下,Geth会在数据目录下生成geth.ipc,但不同的操作系统或自定义配置可能导致路径不同。 3. **权限问题**:IPC文件的访问权限可能不足,导致其他用户或进程无法连接,如引用[2]中提到的权限拒绝错误。 4. **跨服务器访问问题**:如果用户尝试从另一台服务器连接,而Geth节点只监听本地IPC,这时候需要使用RPC并配置跨域访问。 根据这些可能性,我需要分步骤给出解决方案。首先确保Geth正在运行,并生成IPC文件。然后检查IPC的路径是否正确,接着处理权限问题,最后考虑网络配置是否需要调整,比如启用RPC。 另外,用户可能在跨服务器访问时遇到问题,如引用[2]中的情况,这时候需要配置Geth的HTTP-RPC,并允许外部连接。同时,防火墙设置可能会阻止访问,需要检查端口是否开放。 最后,提醒用户检查命令的语法是否正确,尤其是在不同操作系统下的路径格式差异,比如Windows中使用反斜杠可能导致问题,如引用[3]所示。同时,确保使用正确的协议前缀,如使用IPC时路径前加上“ipc:”,或者HTTP时使用正确的URL。 总结解决方案步骤: 1. 确认Geth节点运行状态。 2. 检查IPC文件路径是否存在。 3. 修改文件权限或用户组。 4. 配置RPC选项允许远程连接。 5. 调整防火墙设置。 6. 检查命令格式是否正确。</think>### 逐步解决方案:Geth节点连接失败问题 #### 1. 确认Geth节点运行状态 - **现象**:IPC文件未生成通常是因为Geth未启动或未完成初始化。 - **验证方法**: ```bash ps aux | grep geth # 查看Geth进程是否存在 ls -la /home/ubuntu/.ethereum/testnet/geth.ipc # 检查IPC文件路径 ``` - **操作**: 若未运行,启动Geth并指定数据目录: ```bash geth --datadir /home/ubuntu/.ethereum/testnet --http --http.addr 0.0.0.0 --http.port 8545 --http.api "eth,net,web3" ``` - `--http`启用HTTP-RPC接口,`--http.addr 0.0.0.0`允许远程访问[^2] #### 2. 检查IPC文件路径 - **常见路径差异**: | 系统环境 | 默认IPC路径 | |----------|-------------| | Linux | `~/.ethereum/geth.ipc` | | Windows | `\\.\pipe\geth.ipc` | | 自定义目录 | `--datadir`参数指定路径下的`geth.ipc` | - **示例命令**: ```bash geth attach ipc:/home/ubuntu/.ethereum/testnet/geth.ipc # 显式指定完整路径 ``` #### 3. 权限配置 - **问题根源**:Unix域套接字文件权限不足(需用户/组匹配) - **解决方案**: ```bash chmod 660 /home/ubuntu/.ethereum/testnet/geth.ipc # 赋予读写权限 chown ubuntu:ubuntu /home/ubuntu/.ethereum/testnet/geth.ipc # 修改属主 ``` - **验证**: ```bash ls -l /home/ubuntu/.ethereum/testnet/geth.ipc # 期望输出:srw-rw---- 1 ubuntu ubuntu ... geth.ipc ``` #### 4. 启用HTTP-RPC跨服务器访问 - **适用场景**:从其他服务器通过HTTP协议连接(如引用[2]的PHP跨服务器调用) - **启动参数调整**: ```bash geth --http --http.addr 0.0.0.0 --http.port 8545 --http.corsdomain "*" --http.api "admin,eth,net,web3" ``` - `--http.corsdomain "*"`允许所有域跨域访问(生产环境应限制) - 连接方式改为HTTP: ```bash geth attach http://服务器IP:8545 ``` #### 5. 防火墙配置检查 - **关键端口**: | 协议 | 默认端口 | |------|----------| | IPC | 无端口(本地文件) | | HTTP | 8545 | | WS | 8546 | - **Ubuntu防火墙命令**: ```bash sudo ufw allow 8545/tcp # 开放HTTP-RPC端口 sudo ufw reload ``` #### 6. 命令格式修正 - **典型错误**: - Windows路径误用:`geth attach C:\path\to\geth.ipc`(正确应加`ipc:\\.\pipe\...`前缀)[^3] - Linux路径缺少协议声明:`geth attach /path/geth.ipc` → 应改为`geth attach ipc:/path/geth.ipc` - **正确格式对比**: ```bash # 错误示例(未声明协议): geth attach /home/ubuntu/geth.ipc # 正确格式: geth attach ipc:/home/ubuntu/geth.ipc ``` ### 扩展配置建议 ```mermaid graph TD A[连接失败] --> B{Geth运行?} B -- 是 --> C[IPC文件存在?] B -- 否 --> D[启动Geth] C -- 是 --> E[权限检查] C -- 否 --> F[检查--datadir参数] E --> G[用户组匹配?] G -- 否 --> H[chmod/chown] G -- 是 --> I[尝试HTTP连接] I --> J[防火墙放行] ``` ### 相关问题 1. 如何监控Geth节点的实时运行状态? 2. 在Docker容器中运行Geth时需要注意哪些IPC配置? 3. 如何通过HTTP-RPC安全地暴露Geth接口?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值