java以太坊库web3j文档

入门介绍
入门开始 Maven Gradle 启动客户端 发送请求 IPC 通过java打包以太坊智能合约 Filters 交易 命令行工具 其他的细节
模块
模块简介
交易
交易简介 如何获得以太币Ether 以太坊测试链 在testnet测试链或者私有链上挖掘 gas 交易机制 通过以太坊ethereum客户端进行认证签名交易 离线交易签名认证 创建和使用钱包文件 签署以太坊交易 交易随机数 交易类型 以太币从一方交易到另一方 使用智能合约打包器 创建一个智能合约 与智能合约交易 查询智能合约状态
智能合约
智能合约简介 从solidity语言开始 编译solidity源代码 部署智能合约及与智能合约交互 智能合约示例demo EIP-20以太坊智能合约通证标准 智能合约封装包 构建与部署智能合约 智能合约有效性 交易管理器 在交易中指定链ID:EIP-155 交易收据处理器 调用交易和事件 调用常量方法 动态gas价格与限价 web3j实例
应用二进制接口即ABI简介
应用二进制接口即ABI简介 类型映射 ABI的进一步细节 依赖关系
递归长度前缀RLP编码方案
递归长度前缀RLP编码方案 RLP类型 交易编码 依赖关系
过滤器Filters和事件Events
过滤器Filters和事件Events 块和交易过滤器 再现过滤器 主题过滤器和EVM事件 操作组合注记 进一步的例子
命令行工具
命令行工具 web3j命令行工具作为钱包工具 智能合约封装包
如何管理APIs
如何管理APIs
如何在web3j中使用Infura
签名 Infura Http 客户端 交易
以太坊名称服务ENS
以太坊名称服务ENS ENS在web3j中的使用 web3j实现 Unicode技术标准UTS46 注册域名
web3j常见问题解决方案
你有一个使用web3j开发的项目吗? 我提交了一个交易,但没有被开采。 我想了解JSON-RPC请求和响应的详细信息。 我想在测试链上获得一些以太,又不想去开采。 如何从交易调用的智能合约方法中获取返回值? 是否可以用交易发送任意文本? 我已生成智能合约封装包但二进制文件是空的? 我的ENS查询失败了 以太坊常见问题集 web3j项目捐赠地址 我在哪里可以获得Web3J的商业支持?
在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤器和事件等,同时也详细说明如何使用web3j提供的API开发接口与以太坊进行交互,是java和android(安卓)工程师学习以太坊应用开发(DApp)的不二选择。

以太坊概述

以太坊是备受关注的区块链,它基于密码学技术和P2P通信技术 构建了一个去中心化的平台,所有的交易同步保存在每个节点中, 通过将区块单向级联成链,以太坊有效的保证了交易的不可篡改:

chain

智能合约平台

以太坊是第一个实现了虚拟机的区块链,因此为智能合约 - Smart Contract - 的运行提供了良好的支持环境。也正因为这个原因,以太坊被称为区块链 2.0,以区别于比特币代表的以数字加密货币为核心特征的区块链1.0。

可以将智能合约理解为机器之间的合同约定,在满足一定条件时自动 执行约定好的逻辑,例如在保险理赔流程中,如果理赔条件满足就自动 将赔偿金释放给出险人,这个流程就可以使用智能合约来实现。

有多种语言可以开发以太坊智能合约,但目前最常用的是类似于JavaScript的 Solidity语言。本课程中将采用Solidity讲解智能合约的开发。

JSON RPC与web3j

如果我们希望构造一个去中心化应用(DApp),除了智能合约的开发, 通常还需要使用其他开发语言为用户提供操作智能合约的用户接口,例如 开发一个网页、一个手机App或者一个桌面应用。这些代码都需要与以太坊进行交互。

以太坊规定了每个节点需要实现的JSON RPC API 应用开发接口,该接口是传输无关的,应用程序可以通过HTTP、websocket或IPC等多种 通信机制来使用该接口协议操作以太坊节点:

web3j network

理论上你可以使用任何语言基于JSON RPC接口开发出以太坊之上的 去中心化应用,不过为了提高开发效率,更好的办法是 使用特定语言的JSON RPC封装库,这些库封装了JSON RPC的协议细节, 有助于开发人员聚焦在业务逻辑的实现上。

web3j是一个轻量级的用于集成以太坊功能的Java开发库,它是Java版本的以太坊JSON RPC 接口协议封装实现,如果需要将你的Java应用或Android应用接入以太坊,用web3j就对了。

web3j体系概述

web3j的功能组织在不同的包中,下图展示了org.web3j主要包之间的依赖关系:

web3j packages

core:JSON RPC协议的封装主要由包org.web3j.core实现,它依赖于org.web3j.crypto包提供的密钥与签名相关的功能,以及org.web3j.abi包提供的java/solidity类型映射支持。

consoleorg.web3j.console包实现了一个可以单独运行的命令行程序web3j,我们将使用它来 生成solidity合约的Java封装类,其中,org.web3j.codegen包实现了从abi到java封装类的代码生成。

节点相关org.web3j.infura包封装了对Infura公共节点旳http访问服务接口, org.web3j.gethorg.web3j.parity则分别封装了这两种常用以太坊节点软件旳管理接口。

本课程的目的是帮助java工程师快速掌握使用web3j开发以太坊应用的技能,因此 主要以web3j的开发接口为主线来展开课程内容,同时穿插讲解以太坊的一些基本 概念,例如:账户、交易和智能合约的开发等。

课程内容概述

1.hello,web3j

将通过一个简单的java应用的开发来讲解使用web3j进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己的java应用中引入以太坊支持了。

2.账户管理

将详细介绍web3j提供的账户管理接口。如果你对开发钱包应用(中心化/去中心化)感兴趣,这部分内容会有很大的帮助。web3j创建账户,创建钱包,转账特别是代币转账等丰富的进行交易的功能。

3.状态与交易

主要讲解web3j提供的交易操作接口,同时也介绍一些重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清java应用与以太坊交互的大多数问题。

4.智能合约

将通过一个投票合约的开发、编译、代码生成、部署与交互的完整流程,讲解使用web3j操作solitiy智能合约的方法。

5.过滤器与事件

主要讲解以太坊的通知机制和web3j的响应式封装接口。