以太坊学习(二)--geth入门命令和miner.start返回null的问题

本文介绍使用Geth客户端搭建私有以太坊区块链的过程,包括配置参数、创建账户、挖矿操作及转账方法。此外,还讲解了如何解决挖矿过程中遇到的问题,并提供了账户解锁、以太币单位转换等实用技巧。
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 period to use in developer mode ( 0 = mine only if transaction 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

这个错误: ``` touch: /var/log/quorum/geth-172.16.239.13.log: Permission denied ``` 表示当前用户 **没有权限在 `/var/log/quorum/` 目录下创建或访问日志文件**。这是在部署运行 Quorum 节点(如使用 `geth`)时常见的权限问题,尤其是在容器化或手动启动节点脚本中。 --- ## ✅ 错误原因分析 - `/var/log/quorum/` 是一个系统级日志目录,通常只有 `root` 或特定用户(如 `quorum` 用户)有写权限。 - 当前执行命令的用户(例如普通用户或 Docker 容器中的非特权用户)试图通过 `touch` 创建日志文件失败。 - 常见于: - 手动运行启动脚本(如 `start-node.sh`) - 使用 Ansible、Docker Compose 启动 Geth 时重定向输出到 `/var/log/quorum/*.log` - 没有提前创建目录或设置正确所有权 --- ## ✅ 解决方案 ### ✅ 方案 1:以 root 权限运行 或 使用 `sudo` 如果你是在本地测试环境,最简单的方式是加 `sudo`: ```bash sudo touch /var/log/quorum/geth-172.16.239.13.log sudo chown $(whoami) /var/log/quorum/geth-172.16.239.13.log ``` > 这样可以让你拥有该文件的所有权,后续 `geth` 可以写入。 但不推荐长期用 `sudo`,存在安全风险。 --- ### ✅ 方案 2:创建目录并设置正确的权限(推荐) #### 1. 创建目录(如果不存在) ```bash sudo mkdir -p /var/log/quorum ``` #### 2. 将目录所有者改为当前用户(比如 `quorum` 用户或你的用户名) ```bash # 假设你有一个专用用户 'quorum' sudo useradd quorum -m || true # 或者使用当前登录用户 sudo chown -R $USER:$USER /var/log/quorum ``` #### 3. 设置合适的权限 ```bash sudo chmod 755 /var/log/quorum ``` #### 4. 再次尝试创建文件 ```bash touch /var/log/quorum/geth-172.16.239.13.log ``` ✅ 成功! --- ### ✅ 方案 3:修改启动脚本,避免写入 `/var/log` 很多情况下,你并不真的需要把日志写到 `/var/log/quorum`。你可以改用当前项目目录下的 `logs/` 子目录。 #### 修改原命令(示例): 将: ```bash geth --datadir node-1 ... 2>> /var/log/quorum/geth-172.16.239.13.log ``` 改为: ```bash geth --datadir node-1 ... 2>> logs/geth.log ``` #### 创建本地日志目录: ```bash mkdir -p logs touch logs/geth.log ``` 这样完全绕过系统保护目录,适合开发测试。 --- ### ✅ 方案 4:使用 Docker 时正确挂载日志卷(适用于容器部署) 如果你用 Docker,不要直接映射宿主机 `/var/log/quorum` 到容器内,除非明确授权。 推荐做法: ```yaml # docker-compose.yml services: geth-node1: image: quorumengineering/quorum volumes: - ./logs:/var/log/quorum # 映射本地 logs 目录 command: > sh -c " mkdir -p /var/log/quorum && geth --datadir=/data ... 2>> /var/log/quorum/geth.log " ``` 并在宿主机上: ```bash mkdir -p ./logs chmod 777 ./logs # 或更精细控制 ``` --- ### ✅ 方案 5:使用 systemd 管理服务(生产环境推荐) 创建 systemd 服务文件,统一管理日志输出: ```ini # /etc/systemd/system/quorum-geth.service [Unit] Description=Quorum Geth Node After=network.target [Service] Type=simple User=quorum ExecStart=/usr/bin/geth --datadir=/home/quorum/data ... StandardOutput=journal StandardError=journal Restart=always [Install] WantedBy=multi-user.target ``` 然后用 `journalctl -u quorum-geth` 查看日志,无需手动管理 `.log` 文件。 --- ## 🔒 最佳实践建议 | 建议 | 说明 | |------|------| | ❌ 不要随意 `chmod 777 /var/log` | 安全隐患大 | | ✅ 使用专用用户运行 Quorum 节点 | 如 `quorum` 用户 | | ✅ 日志写入项目目录或通过 `journalctl` 管理 | 更安全可控 | | ✅ 自动化部署时预创建日志目录并赋权 | Ansible 示例: ```yaml - name: Ensure log directory exists file: path: /var/log/quorum state: directory owner: quorum group: quorum mode: '0755' ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值