你可以在web3j库的帮助下使用 java 轻松监听以太坊交易,但此库无法监听Erc20 Token交易。

要监听Erc20Token交易,你必须使用在合约(token)创建时的 token

封装类。我假设你已经使用最少的功能部署了合约,因此你的封装类看起来像这样:

package com.bolenum.util;

import java.io.IOException;

import java.math.BigInteger;

import java.util.ArrayList;

import java.util...;

import org.web3j.abi.EventEncoder;

import org.web3j.abi...

import org.web3j.crypto.Credentials;

import org.web3j.protocol.Web3j;

import org.web3j.protocol...;

import org.web3j.tx.Contract;

import org.web3j.tx.TransactionManager;

import rx.Observable;

import rx.functions.Func1;

...

public final class Erc20TokenWrapper extends Contract {

private static final String BINARY = "contract binary key";

private Erc20TokenWrapper(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {

super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit);

}

private Erc20TokenWrapper(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {

super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit);

}

public List getTransferEvents(TransactionReceipt transactionReceipt) {

...

return responses;

}

public Observable transferEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {

...

}

...

public Uint256 balanceOf(Address _owner) throws IOException {

Function function = new Function("balanceOf",

Arrays.asList(_owner),

Arrays.>asList(new TypeReference() {}));

return executeCallSingleValueReturn(function);

}

...

public TransactionReceipt transfer(Address _to, Uint256 _amount) throws IOException, TransactionException {

Function function = new Function("transfer", Arrays.asList(_to, _amount), Collections.>emptyList());

return executeTransaction(function);

}

...

public static Erc20TokenWrapper load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {

return new Erc20TokenWrapper(contractAddress, web3j, transactionManager, gasPrice, gasLimit);

}

public static class TransferEventResponse {

public Address _from;

public Address _to;

public Uint256 _value;

public String _transactionHash;

}

...

}

现在你必须使用这个类函数来加载合约然后监听交易。使用下面的代码加载和监听交易:

Web3j web3j = Web3j.build(new HttpService("url of your ethereum blockchain"))

ClientTransactionManager transactionManager = new ClientTransactionManager(web3j,

"your deployed contract addess");

Erc20TokenWrapper token = Erc20TokenWrapper.load("your deployed contract addess", web3j, transactionManager,

Contract.GAS_PRICE, Contract.GAS_LIMIT);

token.transferEventObservable(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST)

.subscribe(tx -> {

String toAddress = tx._to.getValue();

String fromAddress = tx._from.getValue();

String txHash = tx._transactionHash.getValue();

}

如果你已经部署了合约,它由第三人部署,那么你可以直接使用我的包装类,只需更改你可以从 https://etherscan.io/tokens

很容易获得的二进制密钥。

结论:因此你可以将此代码用于任何token的监听交易。此代码为你提供 address

, fromAddress

和 transactionHash

。所以这些东西你可以根据你的要求使用,你可以将它们保存在你的 数据库 中,或者你只保存地址是你的钱包地址的交易。

谢谢,我希望这会有所帮助。

如果希望快速进行web3j、java、以太坊开发,那请看我们精心打造的教程:java以太坊开发教程,主要是针对java和 android 程序员进行区块链以太坊开发的web3j详解。

其他以太坊教程如下:

以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。

以太坊开发进阶教程,主要是介绍使用node.js、 mongodb 、区块链、ipfs实现去中心化电商DApp实战,适合进阶。

python以太坊,主要是针对 python 工程师使用web3.py进行区块链以太坊开发的详解。

php以太坊,主要是介绍使用 php 进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。

C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等。

汇智网原创翻译,转载请标明出处。这里是 原文

完整代码如下:

package com.bolenum.util;

import java.io.IOException;

import java.math.BigInteger;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Collections;

import java.util.List;

import java.util.concurrent.Future;

import org.web3j.abi.EventEncoder;

import org.web3j.abi.EventValues;

import org.web3j.abi.FunctionEncoder;

import org.web3j.abi.TypeReference;

import org.web3j.abi.datatypes.Address;

import org.web3j.abi.datatypes.Event;

import org.web3j.abi.datatypes.Function;

import org.web3j.abi.datatypes.Type;

import org.web3j.abi.datatypes.Utf8String;

import org.web3j.abi.datatypes.generated.Uint256;

import org.web3j.abi.datatypes.generated.Uint8;

import org.web3j.crypto.Credentials;

import org.web3j.protocol.Web3j;

import org.web3j.protocol.core.DefaultBlockParameter;

import org.web3j.protocol.core.RemoteCall;

import org.web3j.protocol.core.methods.request.EthFilter;

import org.web3j.protocol.core.methods.response.Log;

import org.web3j.protocol.core.methods.response.TransactionReceipt;

import org.web3j.protocol.exceptions.TransactionException;

import org.web3j.tx.Contract;

import org.web3j.tx.TransactionManager;

import rx.Observable;

import rx.functions.Func1;

/**

* Auto generated code.

* Do not modify!

* Please use the web3j command line tools, or {@link org.web3j.codegen.SolidityFunctionWrapperGenerator} to update.

*

*

Generated with web3j version 2.3.1.

*/

public final class Erc20TokenWrapper extends Contract {

private static final String BINARY = "contract binary key";

private Erc20TokenWrapper(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {

super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit);

}

private Erc20TokenWrapper(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {

super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit);

}

public List getTransferEvents(TransactionReceipt transactionReceipt) {

final Event event = new Event("Transfer",

Arrays.>asList(new TypeReference

() {}, new TypeReference
() {}),

Arrays.>asList(new TypeReference() {}));

List valueList = extractEventParameters(event, transactionReceipt);

ArrayList responses = new ArrayList(valueList.size());

for (EventValues eventValues : valueList) {

TransferEventResponse typedResponse = new TransferEventResponse();

typedResponse._from = (Address) eventValues.getIndexedValues().get(0);

typedResponse._to = (Address) eventValues.getIndexedValues().get(1);

typedResponse._value = (Uint256) eventValues.getNonIndexedValues().get(0);

responses.add(typedResponse);

}

return responses;

}

public Observable transferEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {

final Event event = new Event("Transfer",

Arrays.>asList(new TypeReference

() {}, new TypeReference
() {}),

Arrays.>asList(new TypeReference() {}));

EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());

filter.addSingleTopic(EventEncoder.encode(event));

return web3j.ethLogObservable(filter).map(new Func1() {

@Override

public TransferEventResponse call(Log log) {

EventValues eventValues = extractEventParameters(event, log);

TransferEventResponse typedResponse = new TransferEventResponse();

typedResponse._from = (Address) eventValues.getIndexedValues().get(0);

typedResponse._to = (Address) eventValues.getIndexedValues().get(1);

typedResponse._value = (Uint256) eventValues.getNonIndexedValues().get(0);

typedResponse._transactionHash = log.getTransactionHash();

return typedResponse;

}

});

}

public List getApprovalEvents(TransactionReceipt transactionReceipt) {

final Event event = new Event("Approval",

Arrays.>asList(new TypeReference

() {}, new TypeReference
() {}),

Arrays.>asList(new TypeReference() {}));

List valueList = extractEventParameters(event, transactionReceipt);

ArrayList responses = new ArrayList(valueList.size());

for (EventValues eventValues : valueList) {

ApprovalEventResponse typedResponse = new ApprovalEventResponse();

typedResponse._owner = (Address) eventValues.getIndexedValues().get(0);

typedResponse._spender = (Address) eventValues.getIndexedValues().get(1);

typedResponse._value = (Uint256) eventValues.getNonIndexedValues().get(0);

responses.add(typedResponse);

}

return responses;

}

public Observable approvalEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {

final Event event = new Event("Approval",

Arrays.>asList(new TypeReference

() {}, new TypeReference
() {}),

Arrays.>asList(new TypeReference() {}));

EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());

filter.addSingleTopic(EventEncoder.encode(event));

return web3j.ethLogObservable(filter).map(new Func1() {

@Override

public ApprovalEventResponse call(Log log) {

EventValues eventValues = extractEventParameters(event, log);

ApprovalEventResponse typedResponse = new ApprovalEventResponse();

typedResponse._owner = (Address) eventValues.getIndexedValues().get(0);

typedResponse._spender = (Address) eventValues.getIndexedValues().get(1);

typedResponse._value = (Uint256) eventValues.getNonIndexedValues().get(0);

typedResponse._transactionHash = log.getTransactionHash();

return typedResponse;

}

});

}

public Future name() throws IOException {

Function function = new Function("name",

Arrays.asList(),

Arrays.>asList(new TypeReference() {}));

return executeCallSingleValueReturn(function);

}

public TransactionReceipt approve(Address _spender, Uint256 _amount) throws IOException, TransactionException {

Function function = new Function("approve", Arrays.asList(_spender, _amount), Collections.>emptyList());

return executeTransaction(function);

}

public Future totalSupply() throws IOException {

Function function = new Function("totalSupply",

Arrays.asList(),

Arrays.>asList(new TypeReference() {}));

return executeCallSingleValueReturn(function);

}

public TransactionReceipt transferFrom(Address _from, Address _to, Uint256 _amount) throws IOException, TransactionException {

Function function = new Function("transferFrom", Arrays.asList(_from, _to, _amount), Collections.>emptyList());

return executeTransaction(function);

}

public Uint8 decimals() throws IOException {

Function function = new Function("decimals",

Arrays.asList(),

Arrays.>asList(new TypeReference() {}));

return executeCallSingleValueReturn(function);

}

public Uint256 balanceOf(Address _owner) throws IOException {

Function function = new Function("balanceOf",

Arrays.asList(_owner),

Arrays.>asList(new TypeReference() {}));

return executeCallSingleValueReturn(function);

}

public Future

owner() throws IOException {

Function function = new Function("owner",

Arrays.asList(),

Arrays.>asList(new TypeReference

() {}));

return executeCallSingleValueReturn(function);

}

public Future symbol() throws IOException {

Function function = new Function("symbol",

Arrays.asList(),

Arrays.>asList(new TypeReference() {}));

return executeCallSingleValueReturn(function);

}

public TransactionReceipt transfer(Address _to, Uint256 _amount) throws IOException, TransactionException {

Function function = new Function("transfer", Arrays.asList(_to, _amount), Collections.>emptyList());

return executeTransaction(function);

}

public Future allowance(Address _owner, Address _spender) throws IOException {

Function function = new Function("allowance",

Arrays.asList(_owner, _spender),

Arrays.>asList(new TypeReference() {}));

return executeCallSingleValueReturn(function);

}

public static RemoteCall deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, BigInteger initialWeiValue, Uint256 totalSupply, Utf8String tokenName, Uint8 decimalUnits, Utf8String tokenSymbol) {

String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.asList(totalSupply, tokenName, decimalUnits, tokenSymbol));

return deployRemoteCall(Erc20TokenWrapper.class, web3j, credentials, gasPrice, gasLimit, BINARY, encodedConstructor, initialWeiValue);

}

public static RemoteCall deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit, BigInteger initialWeiValue, Uint256 totalSupply, Utf8String tokenName, Uint8 decimalUnits, Utf8String tokenSymbol) {

String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.asList(totalSupply, tokenName, decimalUnits, tokenSymbol));

return deployRemoteCall(Erc20TokenWrapper.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, encodedConstructor, initialWeiValue);

}

public static Erc20TokenWrapper load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {

return new Erc20TokenWrapper(contractAddress, web3j, credentials, gasPrice, gasLimit);

}

public static Erc20TokenWrapper load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {

return new Erc20TokenWrapper(contractAddress, web3j, transactionManager, gasPrice, gasLimit);

}

public static class TransferEventResponse {

public Address _from;

public Address _to;

public Uint256 _value;

public String _transactionHash;

}

public static class ApprovalEventResponse {

public Address _owner;

public Address _spender;

public Uint256 _value;

public String _transactionHash;

}

}

java erc 2.0_如何使用java监听Erc20Token交易相关推荐

  1. java session 数量_java中使用session监听实现同帐号登录限制、登录人数限制

    本文主要介绍了java中使用session监听实现同帐号登录限制.登录人数限制,具体代码如下: 问题域: 1.同帐号登录:若此帐号已登录,不可再次登录(与QQ模式相反). 2.登录人数限制,超过.已达 ...

  2. ibm mq java 发布订阅,JMS调用IBM MQ 监听模式的点对点模式

    JMS调用IBM MQ 监听方式的点对点模式 前面三篇,第一篇讲了安装IBM MQ时遇到的一些问题.第二篇讲了点对点模式的调用.第三篇讲了发布订阅模式.本篇说一下监听模式. 监听模式只是在消费者端监听 ...

  3. Java语言学习--Swing中Button事件监听

    1 前言 今天在使用Java Swing中的JButton的事件触发机制时遇到了许多问题,简单的了解了一下. 2 事件监听机制 事件监听的机制如下图所示分析. 3 代码分析 3.1 分步解析 1.事件 ...

  4. java erc 2.0_如何使用Web3j库管理Java中的ERC20令牌

    ERC20是以太坊智能合约标准,用于以兼容的方式实现令牌,因此很容易与任何应用程序(DAPP.钱包.交换等)交互和集成令牌. 先决条件 要学习本教程,您需要在计算机上安装以下软件: ·Java编程语言 ...

  5. java mouseclicked_我用mouseClicked没办法被监听,求大神看看怎么回事

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java ...

  6. java监控activemq,ActiveMQ与Spring整合-监听消息

    本课程全程使用目前比较流行的开发工具idea进行开发,涉及到目前互联网项目中常用的高并发解决方案技术, 如  dubbo,redis,solr,freemarker,activeMQ,springBo ...

  7. java聊天室持续监听,[Java聊天室server]实战之二 监听类

    前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...

  8. java erc 2.0_java 监听 ERC20 Token 交易

    你可以在web3j库的帮助下使用java轻松监听以太坊交易,但此库无法监听Erc20 Token交易. 要监听Erc20Token交易,你必须使用在合约(token)创建时的token封装类.我假设你 ...

  9. java如何监听以太坊交易

    2019独角兽企业重金招聘Python工程师标准>>> 你可以在web3j库的帮助下使用java轻松监听以太坊交易,但此库无法监听Erc20 Token交易. 要监听Erc20Tok ...

最新文章

  1. 【CV】Python下载安装及环境变量配置教程
  2. Ubuntu 组态 Tomcat而每天的错误解决
  3. IOS上路_07-简单示例-电子书
  4. Firefox 将导入 Windows 根证书,避免与杀毒软件的冲突
  5. html5和响应式,35个响应式HTML5和CSS3模版
  6. mysql使用数据库_MySQL数据库的常用操作
  7. android intent 分发,Android分享操作
  8. 三年经验前端社招——丰巢科技
  9. java将生成数据写入文件_JAVA-将内容写入文件并导出到压缩包
  10. CSU 2151 集训难度(线段树)
  11. DPM2010 粒度恢复个人用户邮箱
  12. 【ANSYS命令流】Workbench中施加流体渗透压力载荷(超详细)
  13. ctrl+鼠标滚轮 设置pycharm字体大小
  14. 微信公众号授权登陆流程
  15. 计算机编程需要学哪些基础知识,学编程需要掌握哪些基础知识
  16. Java Swing中的下拉式菜单(menu)、弹出式菜单(JPopupMenu)、选项卡窗体(JTabbedPane),TextArea右键菜单 组件使用案例
  17. MySQL 数据库设计范式/优化
  18. Linux-常用快捷键
  19. 环境变量配置以mysql为例
  20. String中与获取相关的几个方法

热门文章

  1. BYOD是什么,云计算和BYOD之间,主要有什么关系?
  2. [i:]和[i]发音
  3. 应用拉氏变换分析线性电路
  4. 核高基专家许洪波:HTML5将赢得移动设备未来
  5. 为什么INT_MIN不是直接写成-2147483648
  6. QQ复读机java脚本怎么用_教你制作一个QQ复读机机器人【1】接收消息
  7. 悲壮!微软钦定的13部 Windows Phone 遗老
  8. 【安卓】【Dimens】适配文件创建
  9. ffmpeg硬件解码器的使用
  10. 机器学习(一) 机器学习概述