java 代付gas费用和遍历区块链 笔记

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费用时,发送交易的账户是有余额的(这个是前提),才能进行代付,否则是不行的。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值