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包。


目录
相关文章
|
3天前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
17 4
|
3天前
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
18 2
|
8天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
46 3
|
2天前
|
Java 关系型数据库 API
介绍一款Java开发的企业接口管理系统和开放平台
YesApi接口管理平台Java版,基于Spring Boot、Vue.js等技术,提供API接口的快速研发、管理、开放及收费等功能,支持多数据库、Docker部署,适用于企业级PaaS和SaaS平台的二次开发与搭建。
|
2天前
|
监控 Java 测试技术
Java开发现在比较缺少什么工具?
【10月更文挑战第15天】Java开发现在比较缺少什么工具?
13 1
|
4天前
|
Java
Java开发如何实现文件的移动,但是在移动结束后才进行读取?
【10月更文挑战第13天】Java开发如何实现文件的移动,但是在移动结束后才进行读取?
15 2
|
8天前
|
运维 Java Linux
【运维基础知识】掌握VI编辑器:提升你的Java开发效率
本文详细介绍了VI编辑器的常用命令,包括模式切换、文本编辑、搜索替换及退出操作,帮助Java开发者提高在Linux环境下的编码效率。掌握这些命令,将使你在开发过程中更加得心应手。
11 2
|
14天前
|
设计模式 测试技术 持续交付
开发复杂Web应用程序
【10月更文挑战第3天】开发复杂Web应用程序
28 2
|
16天前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
35 3
|
1月前
|
数据可视化 图形学 UED
只需四步,轻松开发三维模型Web应用
为了让用户更方便地应用三维模型,阿里云DataV提供了一套完整的三维模型Web模型开发方案,包括三维模型托管、应用开发、交互开发、应用分发等完整功能。只需69.3元/年,就能体验三维模型Web应用开发功能!
221 8
只需四步,轻松开发三维模型Web应用