(三)Java与波场系列之trx开发java版本(基于尼罗河测试网)

本篇文章主要介绍波场币转账的java开发操作;前面咱们已经有了我们的测试账户,并且账户中已经有了我们的测试币;

为了方便测试,我们需要再申请一个账户,里边不需要获取测试币转入,只是作为我们java代码转账的目标账户;这里不在赘述申请账户的流程,请看上一篇文章;

废话不多说,直接上代码:

trx转账java实现目前一共有两种方法:

1.调用官方接口,实现转账,代码如下:

controller层:

复制代码

public String easytransferbyprivate(@RequestParam("toAddress") String toAddress,@RequestParam("privateKey") String privateKey,@RequestParam("amount") String amount) {
        Map<String, Object> map = new HashMap<>();
        map.put("标题", "直接转账trx");
        map.put("目标地址", toAddress);
        String result = trc20Service.easytransferbyprivate(toAddress,privateKey,amount);
        map.put("数量", amount);
        return result;
    }

复制代码

service层:

复制代码

public String easytransferbyprivate( String toAddress,String privateKey, String amount){
        EasyTransferByPrivate.Param param = new EasyTransferByPrivate.Param();
        param.setAmount(new BigDecimal(amount));
        param.setPrivateKey(privateKey);
        param.setToAddress(toAddress);
        JSONObject obj = feign.easyTransferByPrivate(param);
        System.out.println(obj);
        if (obj != null) {
            HttpRes httpRes = JSON.toJavaObject(obj, HttpRes.class);
            if (httpRes.getResult().getResult()) {
                return httpRes.getTransaction().getTxID();
            }
        }
        return null;

    }

复制代码

feign调用:

@PostMapping("/wallet/easytransferbyprivate")  ##host:https://api.nileex.io
    JSONObject easyTransferByPrivate(@RequestBody EasyTransferByPrivate.Param param);

注:该调用方法目前测试网还可以使用,主网已经关闭了该方法,主要原因是我们向接口中传递了私钥,有泄漏私钥的风险。但是如果我们想要以此方法进行转账的话,我们需要搭建我们的fullNode节点,用代码内网调用该节点即可;(这里以后在说明搭建fullNode节点方法)

2.本地写代码签名,给公共节点广播进行交易;

controller层:

复制代码

@GetMapping("/transferTrx")
public String transferTrx() throws IllegalException {
    ApiWrapper client = ApiWrapper.ofNile("42aa7174d122c27afee109e9e322e75475b8f7dc976e749a8c3e1a0e5758d298");//私钥
    Response.TransactionExtention result = client.transfer("TNZML2UDQ7N6WCPeWzyGVPWE6DxGfek1VE", "TXBkMPjX9YZcU2afVdRWKz9o9Z75ZPuNBb", 10000000);//fromAddress,toAddress,amount
    Chain.Transaction signedTransaction = client.signTransaction(result);//签名
    String txid = client.broadcastTransaction(signedTransaction);//广播签名
    return txid;//交易id
}

复制代码

复制代码

public TransactionExtention transfer(String fromAddress, String toAddress, long amount) throws IllegalException {

        ByteString rawFrom = parseAddress(fromAddress);
        ByteString rawTo = parseAddress(toAddress);

        TransferContract req = TransferContract.newBuilder()
                .setOwnerAddress(rawFrom)
                .setToAddress(rawTo)
                .setAmount(amount)
                .build();
        TransactionExtention txnExt = blockingStub.createTransaction2(req);

        if(SUCCESS != txnExt.getResult().getCode()){
            throw new IllegalException(txnExt.getResult().getMessage().toStringUtf8());
        }

        return txnExt;
    }

复制代码

复制代码

/**
     * broadcast a transaction with the binding account.
     * @return a TransactionReturn object contains the broadcasting result
     * @throws RuntimeException if broadcastin fails
     */
    public String broadcastTransaction(Transaction txn) throws RuntimeException{
        TransactionReturn ret = blockingStub.broadcastTransaction(txn);
        if (!ret.getResult()) {
            String message = resolveResultCode(ret.getCodeValue()) + ", " + ret.getMessage();
            throw new RuntimeException(message);
        } else {
            SHA256.Digest digest = new SHA256.Digest();
            digest.update(txn.getRawData().toByteArray());
            byte[] txid = digest.digest();
            return ByteString.copyFrom(Hex.encode(txid)).toStringUtf8();          
        }
    }

复制代码

这里由于使用了官方的jar包,这里仅插入部分代码;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值