diff --git a/common/nuls-base-api-provider/src/main/java/io/nuls/base/api/provider/crosschain/CrossChainProvider.java b/common/nuls-base-api-provider/src/main/java/io/nuls/base/api/provider/crosschain/CrossChainProvider.java index 3c1bbb43ce..fc1c16128e 100644 --- a/common/nuls-base-api-provider/src/main/java/io/nuls/base/api/provider/crosschain/CrossChainProvider.java +++ b/common/nuls-base-api-provider/src/main/java/io/nuls/base/api/provider/crosschain/CrossChainProvider.java @@ -2,6 +2,7 @@ import io.nuls.base.api.provider.Result; import io.nuls.base.api.provider.crosschain.facade.*; +import io.nuls.base.data.Transaction; /** * @Author: zhoulijun @@ -25,6 +26,14 @@ public interface CrossChainProvider { */ Result getCrossTxState(GetCrossTxStateReq req); + + /** + * 查询跨链交易在其他链的处理状态 + * @param req + * @return + */ + Result getCrossTx(GetCrossTxStateReq req); + /** * 给全网发信号,对指定跨链交易重新进行拜赞庭验证 * @param req diff --git a/common/nuls-base-api-provider/src/main/java/io/nuls/base/api/provider/crosschain/CrossChainProviderForRpc.java b/common/nuls-base-api-provider/src/main/java/io/nuls/base/api/provider/crosschain/CrossChainProviderForRpc.java index 21dac493cc..ec19b70036 100644 --- a/common/nuls-base-api-provider/src/main/java/io/nuls/base/api/provider/crosschain/CrossChainProviderForRpc.java +++ b/common/nuls-base-api-provider/src/main/java/io/nuls/base/api/provider/crosschain/CrossChainProviderForRpc.java @@ -1,9 +1,17 @@ package io.nuls.base.api.provider.crosschain; +import io.nuls.base.RPCUtil; import io.nuls.base.api.provider.BaseRpcService; import io.nuls.base.api.provider.Provider; import io.nuls.base.api.provider.Result; import io.nuls.base.api.provider.crosschain.facade.*; +import io.nuls.base.basic.NulsByteBuffer; +import io.nuls.base.data.Transaction; +import io.nuls.core.constant.CommonCodeConstanst; +import io.nuls.core.constant.TxStatusEnum; +import io.nuls.core.exception.NulsException; +import io.nuls.core.log.Log; +import io.nuls.core.model.StringUtils; import io.nuls.core.parse.MapUtils; import io.nuls.core.rpc.model.ModuleE; @@ -41,6 +49,11 @@ public Result getCrossTxState(GetCrossTxStateReq req) { }); } + @Override + public Result getCrossTx(GetCrossTxStateReq req) { + return call("getCrossChainTxInfoForCtxStatusPO",req,(Function)this::tranderTransaction); + } + @Override public Result rehandleCtx(RehandleCtxReq req) { return callReturnString("ctxRehandle",req,"msg"); @@ -56,4 +69,19 @@ private Result _call(String method, Object req, Function cal return call(method,req,callback); } + private Result tranderTransaction(String hexString){ + try { + if(StringUtils.isNull(hexString)){ + return fail(CommonCodeConstanst.DATA_NOT_FOUND,"not found tx"); + } + Transaction transaction = new Transaction(); + transaction.parse(new NulsByteBuffer(RPCUtil.decode(hexString))); + return success(transaction); + } catch (NulsException e) { + Log.error("反序列化transaction发生异常",e); + return fail(CommonCodeConstanst.DESERIALIZE_ERROR); + } + } + + } diff --git a/module/nuls-cmd-client/src/main/java/io/nuls/cmd/client/Tools.java b/module/nuls-cmd-client/src/main/java/io/nuls/cmd/client/Tools.java index 52145eadea..cd467623b2 100644 --- a/module/nuls-cmd-client/src/main/java/io/nuls/cmd/client/Tools.java +++ b/module/nuls-cmd-client/src/main/java/io/nuls/cmd/client/Tools.java @@ -6,6 +6,7 @@ import io.nuls.core.constant.BaseConstant; import io.nuls.core.core.ioc.SpringLiteContext; import io.nuls.core.crypto.ECKey; +import io.nuls.core.crypto.HexUtil; import io.nuls.core.parse.SerializeUtils; /** @@ -58,4 +59,6 @@ public static void main(String[] args) { } } + + } diff --git a/module/nuls-cmd-client/src/main/java/io/nuls/cmd/client/processor/crosschain/GetCrossTxStateProcessor.java b/module/nuls-cmd-client/src/main/java/io/nuls/cmd/client/processor/crosschain/GetCrossTxStateProcessor.java index 1d6d2bfc83..5c99be4aa6 100644 --- a/module/nuls-cmd-client/src/main/java/io/nuls/cmd/client/processor/crosschain/GetCrossTxStateProcessor.java +++ b/module/nuls-cmd-client/src/main/java/io/nuls/cmd/client/processor/crosschain/GetCrossTxStateProcessor.java @@ -2,9 +2,20 @@ import io.nuls.base.api.provider.Result; import io.nuls.base.api.provider.crosschain.facade.GetCrossTxStateReq; +import io.nuls.base.data.Address; +import io.nuls.base.data.Transaction; +import io.nuls.base.signture.TransactionSignature; import io.nuls.cmd.client.CommandBuilder; import io.nuls.cmd.client.CommandResult; +import io.nuls.core.constant.BaseConstant; import io.nuls.core.core.annotation.Component; +import io.nuls.core.crypto.HexUtil; +import io.nuls.core.log.Log; +import io.nuls.core.parse.SerializeUtils; +import io.nuls.core.rockdb.service.RocksDBService; + +import java.util.HashSet; +import java.util.Set; /** * @Author: zhoulijun @@ -14,6 +25,8 @@ @Component public class GetCrossTxStateProcessor extends CrossChainBaseProcessor { + + @Override public String getCommand() { return "getcrosstxstate"; @@ -42,11 +55,35 @@ public boolean argsValidate(String[] args) { public CommandResult execute(String[] args) { Integer chainId = config.getChainId(); String txHash = args[1]; - Result result = crossChainProvider.getCrossTxState(new GetCrossTxStateReq(chainId,txHash)); + GetCrossTxStateReq req = new GetCrossTxStateReq(chainId,txHash); + Result result = crossChainProvider.getCrossTxState(req); + Result resultTxInfo = crossChainProvider.getCrossTx(req); + signList(resultTxInfo.getData()); if (result.isFailed()) { return CommandResult.getFailed(result); } String state = result.getData() + "(0:Unconfirmed 1:MainNetConfirmed 2:Confirmed)"; return CommandResult.getSuccess(state); } + + public void signList(Transaction tx) { + try{ + TransactionSignature signature = new TransactionSignature(); + signature.parse(tx.getTransactionSignature(), 0); + Log.debug("txHex:{}", HexUtil.encode(tx.serialize())); + Log.debug("txType:{}",tx.getType()); + Log.debug("txSignCount:{}", signature.getSignersCount()); + Set addressSets = new HashSet<>(); + Log.debug("signer:"); + signature.getP2PHKSignatures().forEach(sign -> { + Address address = new Address(config.getChainId(), config.getAddressPrefix(), BaseConstant.DEFAULT_ADDRESS_TYPE, SerializeUtils.sha256hash160(sign.getPublicKey())); + addressSets.add(address.getBase58()); + }); + addressSets.forEach((addr)->Log.debug("{}",addr)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + } diff --git a/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/ConsensusBootStrap.java b/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/ConsensusBootStrap.java index 7f7196ac23..efde0d5dfc 100644 --- a/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/ConsensusBootStrap.java +++ b/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/ConsensusBootStrap.java @@ -18,12 +18,14 @@ import io.nuls.poc.constant.ConsensusConfig; import io.nuls.poc.constant.ConsensusConstant; import io.nuls.poc.model.bo.Chain; +import io.nuls.poc.model.po.AgentPo; import io.nuls.poc.rpc.call.CallMethodUtils; import io.nuls.poc.utils.enumeration.ConsensusStatus; import io.nuls.poc.utils.manager.ChainManager; import java.lang.reflect.Field; import java.nio.charset.Charset; +import java.util.List; import java.util.Set; import static java.nio.charset.StandardCharsets.UTF_8; @@ -172,5 +174,25 @@ private void initSys() throws Exception { private void initDB() throws Exception { RocksDBService.init(consensusConfig.getDataFolder()); RocksDBService.createTable(ConsensusConstant.DB_NAME_CONSUME_CONGIF); + if (consensusConfig.getMainChainId() != 1) { + return; + } + +// List list2 = RocksDBService.valueList("consensus_agent1"); +// for (byte[] arr : list2) { +// AgentPo po = new AgentPo(); +// po.parse(arr, 0); +// boolean up = false; +// if (po.getHash().toHex().equals("44fd2f9ab6d0833024a4f77d601ff34c19b7a01490dcf01659034f7013c980f1") && po.getDelHeight() < 7865610L) { +// po.setDelHeight(30L); +// up = true; +// } +// if (up) { +// byte[] key = po.getHash().getBytes(); +// byte[] value = po.serialize(); +// RocksDBService.put("consensus_agent1", key, value); +// } +// } + } -} +} \ No newline at end of file diff --git a/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/service/impl/BlockServiceImpl.java b/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/service/impl/BlockServiceImpl.java index 49057606c5..604bd448c8 100644 --- a/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/service/impl/BlockServiceImpl.java +++ b/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/service/impl/BlockServiceImpl.java @@ -178,4 +178,4 @@ public Result validBlock(Map params) { } return Result.getFailed(ConsensusErrorCode.FAILED).setData(validResult); } -} +} \ No newline at end of file diff --git a/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/utils/validator/BlockValidator.java b/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/utils/validator/BlockValidator.java index 6d6c1c8340..f872dd6394 100644 --- a/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/utils/validator/BlockValidator.java +++ b/module/nuls-consensus/nuls-consensus-poc/src/main/java/io/nuls/poc/utils/validator/BlockValidator.java @@ -434,4 +434,4 @@ private boolean coinDataValidate(Chain chain, Transaction tx) throws NulsExcepti } return true; } -} +} \ No newline at end of file diff --git a/module/nuls-cross-chain/cross-chain/src/main/java/io/nuls/crosschain/nuls/rpc/cmd/CrossChainTxCmd.java b/module/nuls-cross-chain/cross-chain/src/main/java/io/nuls/crosschain/nuls/rpc/cmd/CrossChainTxCmd.java index 8dd86bab35..85e8daaa1b 100644 --- a/module/nuls-cross-chain/cross-chain/src/main/java/io/nuls/crosschain/nuls/rpc/cmd/CrossChainTxCmd.java +++ b/module/nuls-cross-chain/cross-chain/src/main/java/io/nuls/crosschain/nuls/rpc/cmd/CrossChainTxCmd.java @@ -106,6 +106,7 @@ public Response crossTxRehandle(Map params) throws IOException { crossTxRehandleMessage.setBlockHeight(height); crossTxRehandleMsgHandler.process(chainId,crossTxRehandleMessage); boolean res = NetWorkCall.broadcast(chainId,crossTxRehandleMessage,CommandConstant.CROSS_TX_REHANDLE_MESSAGE,false); + if(res){ return success(Map.of("msg","broadcast success")); }else{ diff --git a/module/nuls-cross-chain/cross-chain/src/main/java/io/nuls/crosschain/nuls/servive/impl/ResetLocalVerifierServiceImpl.java b/module/nuls-cross-chain/cross-chain/src/main/java/io/nuls/crosschain/nuls/servive/impl/ResetLocalVerifierServiceImpl.java index 60db0b5767..98646350a3 100644 --- a/module/nuls-cross-chain/cross-chain/src/main/java/io/nuls/crosschain/nuls/servive/impl/ResetLocalVerifierServiceImpl.java +++ b/module/nuls-cross-chain/cross-chain/src/main/java/io/nuls/crosschain/nuls/servive/impl/ResetLocalVerifierServiceImpl.java @@ -244,7 +244,7 @@ public boolean commitTx(int chainId, List txs, BlockHeader blockHea } chain.getLogger().info("重置本链验证人列表完成:{}",chain.getVerifierList()); int syncStatus = BlockCall.getBlockStatus(chain); - List otherChainInfoList = chainManager.getRegisteredCrossChainList().stream().filter(d->d.getChainId() != chainId).collect(Collectors.toList()); ; + List otherChainInfoList = chainManager.getRegisteredCrossChainList().stream().filter(d->d.getChainId() != chainId).collect(Collectors.toList()); List newTxList = Lists.newArrayList(); otherChainInfoList.forEach(chainInfo -> { try { diff --git a/pom.xml b/pom.xml index 9987a2fe09..cbef15ed40 100644 --- a/pom.xml +++ b/pom.xml @@ -139,11 +139,11 @@ maven-releases - http://nexus.nuls.center/nexus/content/repositories/releases/ + http://nexus.nuls.io/repository/nuls-release/ maven-snapshots - http://nexus.nuls.center/nexus/content/repositories/snapshots/ + http://nexus.nuls.io/repository/nuls-snapshot/