开发环境:

windows

java 17.0.1

maven 3.8.3

node 14.17.0

实验步骤:

1.启动以太坊客户端节点

安装ganache-cli(用于搭建以太坊私链),并启动ganache-cli

npm install -g ganache-cli
ganache-cli

启动后可以看到如下信息

2.测试以太坊通用的RPC接口,获取区块,交易,余额什么的

新建一个maven项目,加上下面两个依赖

<dependency>

<groupId>org.web3j</groupId>

<artifactId>core</artifactId>

<version>4.8.7</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-simple</artifactId>

<version>1.6.6</version>

</dependency>

代码如下(暂时没有智能合约,只是简单的获取区块链信息和普通交易):

package com.example;
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.*;
import org.web3j.protocol.core.methods.response.EthBlock.Block;
import org.web3j.protocol.core.methods.response.EthBlock.TransactionResult;
import org.web3j.protocol.http.HttpService;
import org.web3j.tx.Transfer;
import org.web3j.utils.Convert;
import org.web3j.utils.Convert.Unit;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;/*** Hello world!**/
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:8545"));//获取客户端版本号,通常用来判断是否连接上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), 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);//获取当前最新区块,并获取它上面的所有交易Block latestBlock = web3j.ethGetBlockByNumber(DefaultBlockParameterName.LATEST, false).send().getBlock();System.out.println("latestBlock: " + latestBlock.getHash());//获取区块上的所有交易List<TransactionResult> txlist = latestBlock.getTransactions();System.out.println("get TransactionBy Block :" );for (TransactionResult transactionResult : txlist) {System.out.println(transactionResult.get());}} 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:8545"));//通常情况下,以太坊节点是不会让其他人用它上面的账户,我们要自己创建钱包,用自己的私钥对交易签名,//下面的私钥是ganache上第一个账户的私钥,虽然交易发起者和上面的交易一样,但两者本质是不同的。Credentials mysigner = Credentials.create("0xfd468e650d82240e739c18ea1aaa0a7316febec3e7bb056ff1437bd3d0ede99b");List<String> addressList = web3j.ethAccounts().send().getAccounts();String txhash = Transfer.sendFunds(web3j, mysigner, addressList.get(1),BigDecimal.valueOf(1.0), 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();}}
}

App中main执行结果:

Cpp中main执行结果:

Web3j使用教程(1)相关推荐

  1. java web3j示例教程

    最近在用java开发区块链项目,妥妥的菜鸟选手一枚,碰到问题,翻牌各种资源查询,百度,谷歌,GitHub,脑细胞死了不知道多少了,今天,发现了一个非常棒的网站,特地向大家推荐,可以说涵盖了web3j在 ...

  2. Web3j使用教程(2)

    3.加入智能合约 首先安装solc(用于编译智能合约)和web3j命令行工具(用于打包智能合约) npm install -g solc web3j安装地址: Releases · web3j/web ...

  3. java调用区块链智能合约

    背景: 笔者学习了一段时间区块链,打算做一个区块链去中心化应用(DAPP).智能合约已经通过remix部署到了kovan测试链上,这篇文章介绍用Java版本的web3j框架与链上合约进行交互. 1.导 ...

  4. java计步器算法_区块链+计步运动项目,主要采用以太坊、智能合约、springboot以及小程序等技术...

    runlife_api 项目介绍 区块链+计步运动项目,主要采用以太坊.智能合约.springboot以及小程序等技术 兑换步数算法 按照每总量剩余一半的时候兑换难度增加一倍,如目前按照平均步数511 ...

  5. 以太坊应用开发JSON-PRC接口

    以太坊应用开发接口指的是以太坊节点软件提供的API接口,去中心化应用可以利用这个接口访问以太坊上的智能合约.以太坊应用开发接口采用JSON-PRC标准,通常是通过HTTP或websocket提供给应用 ...

  6. java开源库web3j的以太坊过滤器(filter)和智能合约事件(event)教程

    2019独角兽企业重金招聘Python工程师标准>>> web3j过滤器提供以太坊网络发生的某些事件的通知,对java和安卓程序员来说很有用.在Ethereum以太坊中支持三类过滤器 ...

  7. java 以太坊 智能合约_web3j教程:java使用web3j开发以太坊智能合约交易

    从广义上讲,有web3j支持三种类型的以太坊交易: 1.以太币从一方交易到另一方 2.创建一个智能合约 3.与智能合约交易 为了进行这些交易,必须有以太币(以太坊区块链的代币)存在于交易发生的以太坊账 ...

  8. java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)

    目录 前言 一.准备工作 二.智能合约的编写 三.用java完成web3j调用 (一)定义为生成对应合约的bin 以及 abi 文件 (二).利用abi,bin文件生成solidity的java代码 ...

  9. web3j官网的完整中文翻译(java开发区块链以太坊应用的开源类库)

    2019独角兽企业重金招聘Python工程师标准>>> web3j是一个轻量级.高度模块化.响应式.类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以 ...

最新文章

  1. 2个RecyclerView 联动
  2. 用maven profile实现环境配置切换
  3. java 快速排序 递归_Java递归快速入门
  4. linux 常用SHELL
  5. java doget 和dopost_Servlet中的doGet和doPost
  6. jQuery EasyUI 使用笔记
  7. 衍射受限透镜成像_成像专题 | 基于孔径阵列的数字全息重建 (AIP APL)
  8. win10鼎信诺为什么安装不了_两个方法教你彻底解决win10系统更新补丁安装失败的问题-系统操作与应用 -亦是美网络...
  9. Linux系统内核升级
  10. 第九届河南省程序设计大赛 1273-宣传墙(java)
  11. 量子信息技术(QIT)
  12. 无线室内定位系统和技术在地下采矿中的应用综述2021Applications of Wireless Indoor Positioning Systems and Technologies in U
  13. CentOS系列的绑定MAC(物理网卡地址)
  14. element-ui 表格多选框 按条件禁用部分选项
  15. 计算机基础:今天一次把 Unicode 和 UTF-8 说清楚
  16. Qt文件QFile 和文件夹QDir
  17. c语言补码计算方法,探讨C语言学习中补码计算方法.doc
  18. Web从入门到放弃-web的基本介绍(一)
  19. 面试中如何才能拿到阿里 P7 的职级
  20. 2021年高压电工考试资料及高压电工证考试

热门文章

  1. Excel-资产负债表-模板
  2. segmentation fault(core dump);Run-Time Check Failure #3 -The variable 'p' is being used without bein
  3. 柠檬班软件测试靠谱吗 全程班毕业后7天就拿到了offer
  4. csgo调出参数_CSGO控制台全方位使用教程 控制台常用命令及参数说明
  5. 在微信公众号上下载视频音频的办法
  6. mac软件推荐(适用m1)
  7. LoRa:SX1278
  8. 阿里IOT用AMQP在服务端订阅消息,踩坑
  9. win10 任务栏通知区图标不见了
  10. 唐巧的iOS技术博客选摘