1 Geth 是什么
Go-Ethereum简称Geth,用golang语言实现。Geth是以太坊协议的官方实现。
-
Geth可以当客户端来使用
打开Geth,用户可以创建自己的以太坊私有链、管理账户、挖矿、交易、部署执行智能合约等,用户还可以下载以太坊主链、解析主链上任意交易数据等。 -
Geth可以当服务器来使用 Geth提供很多服务和丰富的API,用户可以开发程序通过调用Geth服务,实现自己想要的功能,比如获取一段时间内以太币的所有交易账户。
2 Geth 搭建及账户管理
我目前测试搭建的是基于 mac 操作系统,目标实现一个多节点集群,并且可以互相发现和互相交易。
- 启动第一个节点
geth --datadir data0 --rpc --dev console
- --dev 启用开发者网络(模式),使用此模式后启动的node就不会去同步公有链上的区块,公有链的数据量几十个G太大了,共识速度也比较慢。开发者网络会使用 POA 共识,默认预分配一个开发者账户并且会自动开启挖矿。
- --datadir 后面的参数是区块数据及秘钥存放目录。
- 第一次输入命令后,它会放在当前目录下新建一个 data0 目录来存放数据。
- --rpc 启用HTTP-RPC服务器
- console 进入控制台
// 获取节点实例
admin.nodeInfo.enode
- 账户
// 查看账户,默认分配了一个开发者账户
eth.accounts
// 创建账户,‘mumu’是新账户的密码
personal.newAccount('mumu')
// 通过以下命令可以分别查看默认开发账户和新创建账户的账户余额
eth.getBalance(eth.accounts[0])
eth.getBalance(eth.accounts[1])
可以看到默认开发账户分配有很多余额。
- 转账
我们将从默认开发者账户中转入1个以太币给新账户
eth.sendTransaction({from:'0xb479c7bfe4fac4e191c345a3916859730320d3aa', to:'0xdac7beb12af3139f4b07b3727ac1787f1d039b84', value: web3.toWei(1,'ether')})
转账成功!
- 解锁账户
在部署合约前需要先解锁账户
personal.unlockAccount(eth.accounts[1])
解锁成功后,账户准备好了,接下来可以编写合约代码了。
3. 与 metamask 连接
- metamask 先选择连接 localhost 8545,连接的前置条件是 Geth 的启动必须已经开启的 rpc 连接。
- 创建好账户后,点击账户详情,导出私钥。
- 将私钥复制到一个 txt 文件中,例如 slash.txt
- 在 Geth 中输入命令
geth account import <私钥文件路径>
提示输入密码,这个密码是 metamask 上的账户密码。
// 查看 geth 账户列表
geth account list
账户导入成功!
这种方法同样适用于任何已知私钥的外部账户导入geth
- 这时候在 metamask 账户之间进行交易,在 Geth 中都可以通过命令查看到了,反之亦然。