(三)波場幣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包,這里僅插入部分代碼,如有需要請加入我的qq群獲取代碼:

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM