ETH 基础篇 JAVA Web3j 智能合约

架构springboot  

这里使用web3j当前eth官方推荐的集成jdk来做说明!当然你也可以使用它最底层的rpc方案来编写(官网也有说明)!
这里做个总结

第一步:先引入jdk [maven]

[html]  view plain  copy
  1. <dependency>  
  2.     <groupId>org.web3j</groupId>  
  3.     <artifactId>core</artifactId>  
  4.     <version>3.2.0</version>  
  5. </dependency>  
连接钱包节点【后续所有操作都需要钱包节点广播出去】

[java]  view plain  copy
  1. Web3j web3 = Web3j.build(new HttpService("http://localhost:5201314/"));  
非常简单,测试节点是否链接成功

[java]  view plain  copy
  1. Web3ClientVersion web3ClientVersion;  
  2. try {  
  3.     web3ClientVersion = web3.web3ClientVersion().send();  
  4.     String clientVersion = web3ClientVersion.getWeb3ClientVersion();  
  5.     System.out.println(clientVersion);  
  6. catch (IOException e) {  
  7.     e.printStackTrace();  
  8. }  
使用钱包关键的是,创建钱包地址与密钥

[java]  view plain  copy
  1. String filePath = "E:/pictures";  
  2. String fileName;  
  3. // 创建钱包地址  
[java]  view plain  copy
  1. //eth-密码需要自己管理,自己设置哦!  
  2. fileName = WalletUtils.generateNewWalletFile("设置你的密码"new File(filePath), false);  
  3. System.out.println(fileName);//保存你的加密文件信息  
  4. System.out.println(ALICE.getAddress());//钱包地址  
  5. System.out.println(ALICE.getEcKeyPair().getPrivateKey());//私钥  
  6. System.out.println(ALICE.getEcKeyPair().getPublicKey());//公钥  
基础操作!非常简单吧- 。 -

现在当然是最重要的是交易啦。

产生交易需要加载私钥和钱包地址。这里用引用文件的方式来加载钱包地址!

[java]  view plain  copy
  1. String path='钱包加密文件地址';  
[java]  view plain  copy
  1. Credentials ALICE = WalletUtils.loadCredentials("你的密码", path);  
这样就请求到一个钱包信息对象!

[java]  view plain  copy
  1. BigInteger nonce = getNonce("发送钱包地址");  
[java]  view plain  copy
  1. private static BigInteger getNonce(String address) throws Exception {  
  2. EthGetTransactionCount ethGetTransactionCount =   
[java]  view plain  copy
  1. web3.ethGetTransactionCount(address,DefaultBlockParameterName.LATEST).sendAsync().get();  
  2. return ethGetTransactionCount.getTransactionCount();  
  3. }  
[java]  view plain  copy
  1. //发送金额  
[java]  view plain  copy
  1. RawTransaction rawTransaction = createEtherTransaction(nonce, "mubia钱包地址");  
[java]  view plain  copy
  1. private static RawTransaction createEtherTransaction(BigInteger nonce, String toAddress) {  
  2. BigInteger value = Convert.toWei("数量", Convert.Unit.ETHER).toBigInteger();  
[java]  view plain  copy
  1. //交易手续费由price*limit来决定,所有这两个值你可以自定义,也可以使用系统参数获取当前两个值  
[java]  view plain  copy
  1.   
影响的结果就是自定义手续费会影响到账时间,手续费过低矿机会最后才处理你的!使用系统的话,手续费可能会很高,系统
是获取当前最新成交的一笔手续来计算的。可能一笔需要几百人民币
return RawTransaction.createEtherTransaction(nonce, price,limit , toAddress, value);}
[java]  view plain  copy
  1. //返回对象  
[java]  view plain  copy
  1. byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, ALICE);  
[java]  view plain  copy
  1. //交易订单号  
  2. String hexValue = Numeric.toHexString(signedMessage);  
好吧最后是查询账户余额了哦
[html]  view plain  copy
  1. // //获取余额  
  2. EthGetBalance ethGetBalance1 = web3.ethGetBalance("0xb86d57174bf8c53f1084be7f565f9fd9dabd87d0", DefaultBlockParameter.valueOf("latest")).send();  
[html]  view plain  copy
  1. //eth默认会部18个0这里处理比较随意,大家可以随便处理哈  
  2. BigDecimal balance = new BigDecimal(ethGetBalance1.getBalance().divide(new BigInteger("10000000000000")).toString());  
  3. BigDecimal nbalance = balance.divide(new BigDecimal("100000"), 8, BigDecimal.ROUND_DOWN);  
  4. System.out.println(nbalance);  
后续的再补吧,今天到这里了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值