/** * */ package com.fuzamei.util.blockchain; import java.util.HashMap; import java.util.Map; import org.springframework.stereotype.Component; import com.alibaba.fastjson.JSON; import com.fuzamei.http.HttpRequest; import com.fuzamei.util.HexStringUtil; import com.fuzamei.util.JSONUtil; import com.fuzamei.util.ReadConfUtil; /** * * Description:区块链的操作类
* @Note * Author:maamin * @version 1.0 * @Note * ProjectName: ccb_fund_trusteeship *
PackageName: com.fuzamei.util.blockchain *
ClassName: BlockChainUtil *
Date: 2018年1月10日 下午4:20:50 */ @Component public class BlockChainUtil { /** * * Description:将签名转发给区块链
* @param protobufBean * @return * @Note * Author:maamin *
Date: 2018年1月10日 下午4:21:20 *
Version: 1.0 */ public static String sendPostParam(ProtobufBean protobufBean){ HttpRequest httpRequest = new HttpRequest(); String blockUrl = ReadConfUtil.getProperty("url_prefix")+"://"+ReadConfUtil.getProperty("block_ip")+":"+ReadConfUtil.getProperty("block_port"); String result = ""; //存放最终区块链放回的结果 String signdata = protobufBean.getSignature(); String[] params = new String[1]; params[0] = signdata; String jsonstr = JSON.toJSONString(new RequestAccountBean("2.0", "broadcast_tx_commit", null, params)); try { result = httpRequest.sendPost(blockUrl, jsonstr); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } /** * * Description:验证区块链返回的结果是否成功,true:成功,false:失败
* @param jsonData * @return * @Note * Author:maamin *
Date: 2018年1月10日 下午4:22:37 *
Version: 1.0 */ public static boolean vilaResult(String jsonData){ boolean flag = false; Map map = JSONUtil.jsonToMap(jsonData); //总的map String result = map.get("result").toString(); //得到result节点 Map resultMap = JSONUtil.jsonToMap(result); String check_tx = resultMap.get("check_tx").toString(); Map check_txMap = JSONUtil.jsonToMap(check_tx); String code1 = check_txMap.get("code").toString(); String deliver_tx = resultMap.get("deliver_tx").toString(); Map deliver_txMap = JSONUtil.jsonToMap(deliver_tx); String code2 = deliver_txMap.get("code").toString(); if(("0".equals(code1))&&("0".equals(code2))){ //两个都等于0才等于成功 flag = true; } return flag; } /** * * @Title: sendBlockChain * @Description: TODO 发送签名直接转发到区块链 * @param @param qianming * @param @return * @return boolean * @author: Ma Amin * @date: 2017-10-15 下午1:44:43 */ public boolean sendBlockChain(String qianming){ boolean flag = false; //区块链成功返回true,失败返回false,默认返回false ProtobufBean protobufBean = new ProtobufBean(); //签名对象 Map mma = JSONUtil.jsonToMap(qianming); long instructionId = Long.parseLong(mma.get("sid").toString()); protobufBean.setInstructionId(instructionId); protobufBean.setSignature(mma.get("signdata").toString()); String result = sendPostParam(protobufBean); boolean flag2 = vilaResult(result); //区块链返回过来的结果 if(flag2){ flag = true; } return flag; } /** * * Description:通过sign拿到protobufBean
* @param sign * @return * @Note * Author:maamin *
Date: 2018年1月10日 下午4:19:21 *
Version: 1.0 */ public static ProtobufBean getProtobufBean(String sign){ ProtobufBean protobufBean = new ProtobufBean(); Map signMap = JSONUtil.jsonToMap(sign); long instructionId = Long.parseLong(signMap.get("sid").toString()); protobufBean.setInstructionId(instructionId); protobufBean.setSignature(signMap.get("signdata").toString()); return protobufBean; } /** * 解析错误信息 * @param qianming * @return */ public Map sendBlockChain2(String qianming){ Map map = new HashMap(); boolean flag = false; //区块链成功返回true,失败返回false,默认返回false String fruit = ""; ProtobufBean protobufBean = new ProtobufBean(); //签名对象 Map mma = JSONUtil.jsonToMap(qianming); long instructionId = Long .parseLong(mma.get("sid").toString()); protobufBean.setInstructionId(instructionId); protobufBean.setSignature(mma.get("signdata").toString()); String result = sendPostParam(protobufBean); System.out.println(result); flag = vilaResult(result); //区块链返回过来的结果 Map signMap = JSONUtil.jsonToMap(result); Map resultMap = JSONUtil.jsonToMap(signMap.get("result").toString()); Map check_tx = JSONUtil.jsonToMap(resultMap.get("check_tx").toString()); Map deliver_tx = JSONUtil.jsonToMap(resultMap.get("deliver_tx").toString()); if(check_tx.get("data") != null){ if(!"".equals(check_tx.get("data").toString())){ String hexStr = check_tx.get("data").toString(); fruit = HexStringUtil.hexStringToString(hexStr); } } if(deliver_tx.get("data") != null){ if(!"".equals(deliver_tx.get("data").toString())){ String hexStr = deliver_tx.get("data").toString(); fruit = HexStringUtil.hexStringToString(hexStr); } } map.put("flag", flag); map.put("data", fruit); return map; } }