1.遍历区块链获取区块交易信息
依据:http://cw.hubwiz.com/card/c/web3.js-1.0/1/2/11/ js中文手册
DefaultBlockParameter var1 = DefaultBlockParameter.valueOf(new BigInteger("251150", 10));
HashSet<String> objects = new HashSet<>();
web3j.replayPastAndFutureTransactionsFlowable(var1).subscribe(
transaction -> {
objects.add(transaction.getBlockHash());
System.out.println(transaction.getHash());
});
通过调用web3j的接口函数进行区块遍历,此函数是一个回调函数,当出现新的块,就会输出对应(自己所需要)的数据;
获取数据的接口在 class Transaction中;
作用:去判断每一笔交易是否成功或者失败,(交易并不是同时的,是需要时间进行上链的);
例:调用合约接口后得到txid,此时通过txid去eth_getTransactionReceipt()接口,拿回的状态是不确定的(交易成功,可能还没上链),只有出块了,交易才是上链了的可以确定的。
2.代付gas费用
依据:https://docs.hecochain.com/#/dev/meta_tx 元交易
//参数:签名数据 代付地址私钥
public static String daiko(String signdata, String withholdprivateKey) throws IOException {
int blockNumber = web3j.ethBlockNumber().send().getBlockNumber().intValue();
Integer feePercent = 10000;//1000/10000 //百分比
int chainId = 111;//mainnet 128; testnet chain id
int blockExp = blockNumber + 30; // set a expire block
org.ethereum.core.Transaction metaTransaction = MetaTxService.getMetaSignedRawTx(signdata, feePercent, withholdprivateKey, chainId, blockExp);
String metaRawTx = "0x" + Hex.toHexString(metaTransaction.getEncoded());
return metaRawTx;
}
返回的就是一个新的代付的签名数据
这里面需要用到https://github.com/HuobiGroup/metatx-Java-demo的java文件(metaTxService),
以及下面几个jar包
进行配置pom.xml文件 添加依赖
<dependency>
<groupId>com.madgag.spongycastle</groupId>
<artifactId>prov</artifactId>
<version>1.58.0.0</version>
</dependency>
<dependency>
<groupId>com.madgag.spongycastle</groupId>
<artifactId>core</artifactId>
<version>1.58.0.0</version>
</dependency>
<dependency>
<groupId>com.typesafe</groupId>
<artifactId>config</artifactId>
<version>1.4.1</version>
</dependency>
此处被注释的原因是maven里面存在此jar包,本身我自己也导入了这个包会冲突报错
<!-- <dependency>-->
<!-- <groupId>org.ethereum</groupId>-->
<!-- <artifactId>ethereumj-core</artifactId>-->
<!-- <version>1.10.1-RELEASE</version>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
还需进行配置(maven包的setting文件)
<repository>
<id>ethereum</id>
<url>https://dl.bintray.com/ethereum/maven</url>
</repository>
即可。
注意事项:代付gas费用时,发送交易的账户是有余额的(这个是前提),才能进行代付,否则是不行的。