观前提示:
©版权所有:本教程由先圣编写,如需转载,请标明出处。
本文受众:Web3从业人员、程序员
浏览推荐:为了最佳观感,本文地址为:https://blog.120.show/2023/7
正文开始:
思路解析:
请先阅读完参考资料第二篇内容,再阅读本文。
一般来说,想要学习某个技术,正确的流程是:
先在本地安装环境、等本地测试结束后,再进行线上测试,最后进行生产部署。
以太坊的本地客户端有多种语言编写的,其中以Go语言的客户端较为出名。
当然,也有傻瓜式的软件客户端,如Ganache之类的产品。
本文,删繁就简,直接从线上的测试网环境开始,跳过了本地私有链的阶段(繁琐)。
产品选择:
目前还在服役的测试网有:Goerli、Sepolia
我选择了目前更为广泛使用的Goerli,当然你也可以用Sepolia操作,他们是等同的。
在连接测试网上面,我没有选择公共的节点,而是选择可以提供私人服务的infura,当然alchemy也提供该服务。
https://app.infura.io/
点击上面的网站,注册账号、创建项目、你会得到一个API Key
bc809e6905c34cb1b7e3536a0934ce06
如果你想要使用,请将下面的链接后面的key换成自己的:
https://goerli.infura.io/v3/bc809e6905c34cb1b7e3536a0934ce06
连接节点:
我默认你已经看完了我的上一篇文章,我们还是在该项目的环境下开始吧。
新建一个LinkGoerli类,当然你也可以起其他名字。
1 2 3 4 5 6 7 8 9 10 11
| import org.web3j.protocol.Web3j; import org.web3j.protocol.http.HttpService; public class LinkGoerli { public static void main(String[] args) { String url = "https://goerli.infura.io/v3/bc809e6905c34cb1b7e3536a0934ce06"; Web3j web3 = Web3j.build(new HttpService(url)); } }
|
这样你就获得了一个web3j对象,然后就可以用它来完成你想做的事情了。
我在下面将举例说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| try { Web3ClientVersion clientVersion = web3.web3ClientVersion().send(); EthBlockNumber blockNumber = web3.ethBlockNumber().send(); EthGasPrice gasPrice = web3.ethGasPrice().send(); System.out.println("客户端版本: " + clientVersion.getWeb3ClientVersion()); System.out.println("区块高度: " + blockNumber.getBlockNumber()); System.out.println("Gas价格: " + gasPrice.getGasPrice());
} catch (IOException ex) { throw new RuntimeException("请求异常", ex); }
|
当你运行后,如果无误,控制台应该显示如下:
客户端版本: Geth/v1.11.6-omnibus-f83e1598/linux-amd64/go1.20.3
区块高度: 9328235
Gas价格: 349196119
查询余额:
新建一个GetEtherBalance类,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import java.math.BigDecimal; import java.util.concurrent.ExecutionException; import org.web3j.protocol.Web3j; import org.web3j.protocol.core.DefaultBlockParameterName; import org.web3j.protocol.core.methods.response.EthGetBalance; import org.web3j.protocol.http.HttpService; import org.web3j.utils.Convert;
public class GetEtherBalance { public static void main(String[] args) throws ExecutionException, InterruptedException { String url = "https://goerli.infura.io/v3/bc809e6905c34cb1b7e3536a0934ce06"; Web3j web3 = Web3j.build(new HttpService(url)); String address = "0x17a04150123b23cfb2c21b599e68d2a0d35dbf6b"; EthGetBalance balance = web3.ethGetBalance(address, DefaultBlockParameterName.LATEST).sendAsync().get(); BigDecimal etherBalance = Convert.fromWei(balance.getBalance().toString(), Convert.Unit.ETHER); System.out.println("余额:" + etherBalance); } }
|
查询余额只需要地址即可,不需要私钥,但是转账需要(下一篇内容)。
正常情况下,刚创建的钱包是没有余额的,所以余额为0是对的。
你可以从其他地方获取一点GETH。比如水龙头,或者其他的钱包里面转账一点。
如果只是学习,其实我更加推荐使用Sepolia,毕竟Goerli的水实在太难领取了,但是买的话还是非常简单的。
我开始认同那句话了,与其花上几个小时来寻找水龙头,还不如花一杯咖啡/奶茶的价格买上足够测试的代币。
参考资料:
AI-ChatGPT问答
Java×以太坊 1批量生成以太坊钱包
Connecting to an Ethereum client with Java, Eclipse and Web3j