以太坊作为全球领先的智能合约平台和去中心化应用(DApp)生态系统,其学习和实践离不开与区块链网络的直接交互,而命令行工具(如Geth、Nethermind等以太坊客户端)为我们提供了强大而灵活的方式来执行各种操作,对于初学者而言,掌握一些常用命令是迈出以太坊开发、测试和交互的第一步,也是理解其底层运作机制的关键,本文将介绍一些以太坊学习中常用的命令,主要基于最流行的以太坊客户端之一——Geth。
环境准备:启动Geth节点
在执行命令之前,你需要先安装Geth客户端,安装完成后,通常需要启动一个节点来连接到以太坊网络(主网、测试网如Goerli,或私有网络)。
-
连接到以太坊主网:
geth --syncmode "fast" --http
--syncmode "fast":使用快速同步模式,只下载区块头和相关的状态数据,同步速度较快。--http:启用HTTP-RPC服务,默认端口8545,方便与其他工具(如MetaMask、Truffle)或自定义脚本交互。
-
连接到测试网(以Goerli为例):
geth --goerli --syncmode "fast" --http
--goerli:指定连接到Goerli测试网。
-
创建并启动私有网络:
geth --datadir "./my-private-chain" init genesis.json geth --datadir "./my-private-chain" --networkid "12345" --http --mine --miner.threads "1"
init genesis.json:使用指定的创世块文件(genesis.json)初始化私有链数据目录。--networkid "12345":设置私有网络的网络ID,确保唯一性。--mine:开启挖矿。--miner.threads "1":设置挖矿使用的线程数。
节点与网络信息查询
了解节点状态和网络信息是排查和学习的重要环节。
-
查看节点信息:
geth attach > admin.nodeInfo
- 进入Geth的交互式控制台(REPL),执行
admin.nodeInfo可以获取节点的详细信息,包括节点ID、名称、版本、网络监听地址、 peers等。
- 进入Geth的交互式控制台(REPL),执行
-
查看已连接的对等节点(Peers):
geth attach > admin.peers
查看当前节点连接的其他节点信息。
-
查看同步状态:
geth attach > eth.syncing
- 如果返回
false,表示节点已同步完成;如果返回一个对象,则表示正在同步,其中包含当前已同步的区块号(currentBlock)、最高区块号(highestBlock)等。
- 如果返回
-
查看网络ID:
geth attach > net.version
返回当前连接的网络ID。
账户管理
以太坊中的一切操作都通过账户发起。
-
列出所有账户:
geth attach > eth.accounts
显示节点数据目录中创建的所有账户地址列表。
-
创建新账户:
geth attach > personal.newAccount("your_password")创建一个新账户,并设置密码,返回新账户的地址。
-
解锁账户:
geth attach > personal.unlockAccount(eth.accounts[0], "your_password")
- 在执行交易(如发送ETH、部署合约)前,通常需要先解锁账户。
eth.accounts[0]是第一个账户的地址。
- 在执行交易(如发送ETH、部署合约)前,通常需要先解锁账户。
-
锁定账户:
geth attach > personal.lockAccount(eth.accounts[0])
-
查看账户余额:
geth attach > eth.getBalance(eth.accounts[0])
- 查看指定账户的余额,返回以Wei为单位的数值,可转换为ETH:
eth.getBalance(eth.accounts[0]) / 1e18。
- 查看指定账户的余额,返回以Wei为单位的数值,可转换为ETH:
区块与交易查询
-
查看最新区块号:
geth attach > eth.blockNumber
-
查看特定区块信息:
geth attach > eth.getBlock(0) // 查看创世块 > eth.getBlock(latest) // 查看最新区块
返回区块的详细信息,包括区块号、哈希、时间戳、交易列表、难度等。
-
查看交易详情:
geth attach > eth.getTransaction("transaction_hash")通过交易哈希查询交易的详细信息,包括发送方、接收方、金额、区块号、gas使用情况等。
-
查看交易收据:
geth attach > eth.getTransactionReceipt("transaction_hash")获取交易执行后的收据,包含交易状态(成功/失败)、gas使用量、合约地址(如果是合约创建交易)等。
交易与合约交互(基础)
-
发送ETH转账:
geth attach > eth.sendTransaction({from: eth.accounts[0], to: "recipient_address", value: web3.toWei(1, "ether"), gas: 21000})from:发送方账户地址(需先解锁)。to:接收方账户地址。value:转账金额,使用web3.toWei将ETH转换为Wei。gas:指定gas限制,简单转账通常21000 gas。
-
部署合约(需编译合约后得到ABI和字节码):
geth attach > var contractABI = [...]; // 合约ABI数组 > var contractBytecode = "0x..."; // 合约字节码 > var myContract = new web3.eth.Contract(contractABI); > myContract.deploy({ data: contractBytecode, arguments: [arg1, arg2] // 合约构造函数参数 }).send({ from: eth.accounts[0], gas: 4700000, gasPrice: web3.toWei("20", "gwei") }).then(function(newContractInstance){ console.log(newContractInstance.options.address); // 部署后的合约地址 }); -
调用合约方法(读操作,不消耗gas):
geth attach > myContract.methods.myMethod().call({from: eth.accounts[0]}); -
发送交易调用合约方法(写操作,消耗gas):
geth attach > myContract.methods.myMethod(param1, param2).send({ from: eth.accounts[0], gas: 1000000, gasPrice: web3.toWei("20", "gwei") });
挖矿(私有网络/测试网)
在测试网或私有网络中,你可能需要手动挖矿来获得测试ETH或确认交易。
-
开始挖矿:
geth attach > miner.start(1) // 参数为挖矿线程数
-
停止挖矿:
geth attach > miner.stop()
辅助工具命令
-
单位转换:
geth attach > web3.fromWei(1000000000000000000, "ether") // 将Wei转换为ETH > web3.toWei(1, "ether")
// 将ETH转换为Wei
-
退出控制台:
geth attach > exit
列举的命令是学习以太坊过程中最常用的一些基础操作,熟练掌握它们,将帮助你更好地理解以太坊的工作原理,进行账户管理、交易处理、节点同步以及简单的合约交互,需要注意的是,以太坊生态系统发展迅速,命令和参数可能会有细微变化,建议查阅Geth等客户端的最新官方文档,理论学习与动手实践相结合,才能真正掌握以太坊的精髓,为后续更深入的DApp开发打下坚实基础,祝你学习顺利!