java 开发web3j java 开发以太坊

简介: java 开发web3j java 开发以太坊

8b5366afed704908bec45e3f03e7b9ed_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

java 开发web3j



java 开发以太坊



8c26ddd2c5c44ce49d9203f3bb706dd4_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

d462b1e821b547d59d1abc109292cf2e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

依赖jar:


1696d087614743dba6e30b5c349bbe0a_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

代码


package eth;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameterName;
import org.web3j.protocol.core.methods.request.Transaction;
import org.web3j.protocol.core.methods.response.EthBlock;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.protocol.core.methods.response.Web3ClientVersion;
import org.web3j.protocol.http.HttpService;
import org.web3j.tx.Transfer;
import org.web3j.utils.Convert;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
public class App
{
    public static void main( String[] args )
    {
        try {
            //连接以太坊客户端节点,可以是ganache,geth等,注意地址端口和RPC协议(ws ,http)
            Web3j web3j = Web3j.build(new HttpService("http://127.0.0.1:7545"));
            //获取客户端版本号,通常用来判断是否连接上
            Web3ClientVersion web3clientversion = web3j.web3ClientVersion().send();
            String clientVersion = web3clientversion.getWeb3ClientVersion();
            System.out.println("web3clientVersion : " + clientVersion);
            //获取节点上所有的账户,在ganache中,每个账户有100ETH,允许你用上面用户交易
            //注意绝大多数以太坊客户端节点不会允许你用它上面的账户交易,你要自己创建钱包(见后面的Cpp类main函数)
            List<String> addressList = web3j.ethAccounts().send().getAccounts();
            System.out.println("addressList : "+addressList);
            //交易前,获取前两个账户余额
            BigInteger balance0 = web3j.ethGetBalance(addressList.get(0), DefaultBlockParameterName.LATEST).send().getBalance();
            BigInteger balance1 = web3j.ethGetBalance(addressList.get(1), DefaultBlockParameterName.LATEST).send().getBalance();
            System.out.println("before Transaction:");
            System.out.println("balance0 : " + addressList.get(0) + " : " + balance0);
            System.out.println("balance1 : " + addressList.get(1) + " : " + balance1);
            //生成交易,参数包括谁发送,发给谁,发多少,给矿工的小费等等,由于ganache允许我们操作它上面的账户,所以不用签名。
            BigInteger mynounce = web3j.ethGetTransactionCount(addressList.get(0), DefaultBlockParameterName.LATEST).send().getTransactionCount();
            BigInteger gasPrice = web3j.ethGasPrice().send().getGasPrice();
            BigInteger gasLimit = BigInteger.valueOf(21000);
            BigInteger value = Convert.toWei(BigDecimal.valueOf(0.5), Convert.Unit.ETHER).toBigInteger() ;
            Transaction mytesttransaction= Transaction.createEtherTransaction(addressList.get(0),mynounce, gasPrice, gasLimit, addressList.get(1),value);
            System.out.println("mytesttransaction : ");
            printTransaction(mytesttransaction);
            //发送交易,获取交易哈希
            String txhash = web3j.ethSendTransaction(mytesttransaction).send().getTransactionHash();
            System.out.println("txhash : " + txhash);
            //交易对应的收据,这个对于智能合约交易非常有用,对普通交易没多大用
            TransactionReceipt transactionReceipt = web3j.ethGetTransactionReceipt(txhash).send().getTransactionReceipt().get();
            System.out.println("transactionReceipt : " + transactionReceipt);
            //交易后的余额
            balance0 = web3j.ethGetBalance(addressList.get(0), DefaultBlockParameterName.LATEST).send().getBalance();
            balance1 = web3j.ethGetBalance(addressList.get(1), DefaultBlockParameterName.LATEST).send().getBalance();
            System.out.println("after Transaction:");
            System.out.println("balance0 : " + addressList.get(0) + " : " + balance0);
            System.out.println("balance1 : " + addressList.get(1) + " : " + balance1);
            //获取当前最新区块,并获取它上面的所有交易
            EthBlock.Block latestBlock = web3j.ethGetBlockByNumber(DefaultBlockParameterName.LATEST, false).send().getBlock();
            System.out.println("latestBlock: " + latestBlock.getHash());
            //获取区块上的所有交易
            List<EthBlock.TransactionResult> txlist = latestBlock.getTransactions();
            System.out.println("get TransactionBy Block :" );
            for (EthBlock.TransactionResult transactionResult : txlist) {
                System.out.println(transactionResult.get());
            }
            System.out.println("===============");
            printTransaction(mytesttransaction);
            System.out.println("===============");
        } catch (Exception e) {
            System.out.println(e);
            e.printStackTrace();
        }
    }
    public static void printTransaction(Transaction x) {
        //打印交易信息
        System.out.println("From:"+x.getFrom());
        System.out.println("GasLimit:"+x.getGas());
        System.out.println("Nonce:"+x.getNonce());
        System.out.println("GasPrice:"+x.getGasPrice());
        System.out.println("To:"+x.getTo());
        System.out.println("Value:"+x.getValue());
    }
}
class Cpp {
    public static void main(String[] args) {
        try {
            Web3j web3j = Web3j.build(new HttpService("http://127.0.0.1:7545"));
            //通常情况下,以太坊节点是不会让其他人用它上面的账户,我们要自己创建钱包,用自己的私钥对交易签名,
            //下面的私钥是ganache上第一个账户的私钥,虽然交易发起者和上面的交易一样,但两者本质是不同的。
            Credentials mysigner = Credentials.create("f6b3f11ac120b04581d0273faeacbed5be08f4a0cdc3ddb82ed522f9a344b350");
            List<String> addressList = web3j.ethAccounts().send().getAccounts();
            String txhash = Transfer.sendFunds(web3j, mysigner, addressList.get(1), BigDecimal.valueOf(1.0), Convert.Unit.ETHER).send().getTransactionHash();
            System.out.println("txhash:"+txhash);
            TransactionReceipt receipt = web3j.ethGetTransactionReceipt(txhash).send().getTransactionReceipt().get();
            System.out.println(receipt);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


web3j.personalUnlockAccount 找不到



jar 包需要老版本的,现在是新的了


28af7b7ed93d42a0bd54b212648e9842_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

Maven plugins与dependencies的区别



plugins是插件


dependency引入jar包。


相关文章
|
23天前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
213 1
|
22天前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
155 0
|
23天前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
23天前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
42 0
|
2月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
111 2
|
2月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
192 1
|
5月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
7月前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
1250 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
7月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。

热门文章

最新文章