想跟以太坊区块链打交道,Geth是绕不开的工具。它是用Go语言写的以太坊官方客户端,全名叫Go Ethereum。简单说,装上Geth,你的电脑就变成了以太坊网络里的一个节点,可以同步区块链数据、管理钱包账户、发起转账,甚至搭建自己的私链做开发测试。这篇文章就用大白话,带你把Geth从安装到日常使用走一遍。
Geth说白了就是一个软件,运行之后它会连上以太坊网络,帮你下载和验证链上的每一笔数据。你可以把它当成以太坊世界的“官方客户端”,功能很全:一是同步全链数据,做一个真正的全节点;二是管理账户和私钥,相当于一个本地钱包;三是通过JSON-RPC接口,让别的程序调用你的节点查询数据、发送交易;四是开发者可以用它搭建测试用的私链,不用花钱就能练习合约部署。对于做区块链开发或者想自己掌握数据的人来说,Geth是最基础也最重要的工具。
安装方式看你的系统。用Linux的话,推荐走官方源,Ubuntu系统先添加以太坊的PPA仓库,然后执行apt install ethereum一条命令搞定。Mac用户最省事,直接brew install ethereum就行。Windows用户去官网下载安装包,双击安装即可。装完之后打开终端或命令行窗口,输入geth version,能显示出版本号就说明装好了。建议隔一段时间升级一下版本,以太坊网络更新比较频繁,老版本可能会遇到兼容问题。
直接在命令行输入geth回车,节点就开始运行了。它会自动连接其他节点,然后开始同步数据。这里要注意,以太坊主网的数据量非常大,完整同步可能要几百个G的硬盘空间,而且耗时很长。所以Geth提供几种同步模式可以选择。用geth --syncmode snap是快照同步,目前速度最快的默认方式;--syncmode full是全量同步,保存所有历史数据,适合对数据要求严格的场景;--syncmode light是轻节点,只下载区块头,占用空间小,但功能受限。普通用户用默认的snap模式就行,再加上--http参数开启HTTP接口,方便后续调用。
Geth自带账户管理功能。在Geth的控制台里输入eth.accounts可以查看现有账户。创建新账户用personal.newAccount(),然后设置一个密码,系统会生成一个地址。这里有个重点:账户文件保存在keystore目录里,是一个JSON格式的文件,里面加密存放着你的私钥。备份钱包就是备份这个文件加上你的密码。一旦keystore文件丢了或者密码忘了,里面的资产就永远找不回来了,所以一定要多存几个地方,别只放在电脑里。
节点运行的时候,可以打开一个交互式控制台,方法是运行geth attach或者启动时加上console参数。进入控制台后有几个高频命令值得记住:eth.blockNumber查看当前同步到了第几个区块;eth.getBalance("地址")查询某个地址的余额;eth.syncing查看同步进度,返回false说明已经同步到最新;net.peerCount显示当前连接了多少个节点,数字太小说明网络状况不佳;miner.start和miner.stop用来开启和停止挖矿,不过以太坊转成PoS之后,个人挖矿已经成为历史,现在验证者需要质押32个ETH才能参与出块。退出控制台输入exit即可。
很多应用需要通过接口访问节点,比如DApp后端、交易机器人等。启动Geth时加上--http --http.addr 0.0.0.0 --http.port 8545 --http.api eth,net,web3,就开启了HTTP的RPC服务。这样其他程序可以通过http://你的IP:8545这个地址调用节点功能。要注意安全问题,如果是放在公网服务器上,一定要限制访问来源,用--http.vhosts和防火墙规则控制,不然节点可能被别人白嫖甚至攻击。也可以用--ws参数开启WebSocket接口,适合需要实时推送的场景。
开发者经常需要一条自己的链来测试,Geth可以轻松做到。先写一个创世块的配置文件,指定链ID、初始账户和难度等参数,然后用geth init 创世文件.json初始化,再启动节点时指定一个单独的data目录和网络ID,一条属于你的私链就诞生了。在这条链上,你可以随便转币、部署合约、测试各种功能,不用花一分钱真金白银。测试满意了再把代码搬到测试网或主网上去。
第一,数据目录默认在用户目录下的.ethereum文件夹,硬盘空间不够的话可以用--datadir参数指定到其他盘。第二,同步过程很吃硬盘性能,最好用SSD固态硬盘,机械硬盘同步起来会非常慢。第三,遇到同步卡住,可以试试删除链数据重新同步,或者升级到最新版本。第四,跑主网节点对配置有要求,内存建议16G以上,硬盘留足2T空间,不然很难长期稳定运行。第五,涉及主网资产操作时,务必确认命令和地址无误,链上交易不可撤销。
总的来说,Geth的功能覆盖了以太坊节点的大部分使用场景,从个人用户管理资产,到开发者搭建测试环境,都能用它搞定。刚上手建议先在测试网或私链上练手,熟悉了各项命令和参数之后,再去操作主网节点就会踏实很多。多用、多试、多看官方文档,Geth很快就能变成你顺手的生产力工具。