本篇文章主要介绍波场币转账的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包,这里仅插入部分代码,如有需要请加入我的qq群获取代码: