Search in sources :

Example 16 with Deposit

use of io.nuls.consensus.poc.protocol.entity.Deposit in project nuls by nuls-io.

the class PocConsensusResource method createMutilDeposit.

@POST
@Path("/multiAccount/createMultiDeposit")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "deposit nuls to a bank! 多签账户申请参与共识 ", notes = "返回申请成功交易hash")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = String.class) })
public RpcClientResult createMutilDeposit(@ApiParam(name = "form", value = "多签账户申请参与共识表单数据", required = true) CreateMultiDepositForm form) throws Exception {
    if (NulsContext.MAIN_NET_VERSION <= 1) {
        return Result.getFailed(KernelErrorCode.VERSION_TOO_LOW).toRpcClientResult();
    }
    AssertUtil.canNotEmpty(form);
    AssertUtil.canNotEmpty(form.getDeposit());
    AssertUtil.canNotEmpty(form.getAgentHash());
    AssertUtil.canNotEmpty(form.getAddress());
    AssertUtil.canNotEmpty(form.getSignAddress());
    if (form == null) {
        return Result.getFailed(AccountErrorCode.ADDRESS_ERROR).toRpcClientResult();
    }
    if (!NulsDigestData.validHash(form.getAgentHash())) {
        return Result.getFailed(PocConsensusErrorCode.AGENT_NOT_EXIST).toRpcClientResult();
    }
    if (!AddressTool.validAddress(form.getSignAddress()) || !AddressTool.validAddress(form.getAddress())) {
        return Result.getFailed(AccountErrorCode.ADDRESS_ERROR).toRpcClientResult();
    }
    Account account = accountService.getAccount(form.getSignAddress()).getData();
    if (null == account) {
        return Result.getFailed(AccountErrorCode.ACCOUNT_NOT_EXIST).toRpcClientResult();
    }
    if (account.isEncrypted() && account.isLocked()) {
        AssertUtil.canNotEmpty(form.getPassword(), "password is wrong");
        if (!account.validatePassword(form.getPassword())) {
            return Result.getFailed(AccountErrorCode.PASSWORD_IS_WRONG).toRpcClientResult();
        }
    }
    Result<MultiSigAccount> sigAccountResult = accountService.getMultiSigAccount(form.getAddress());
    MultiSigAccount multiSigAccount = sigAccountResult.getData();
    // 验证签名账户是否属于多签账户,如果不是多签账户下的地址则提示错误
    if (!AddressTool.validSignAddress(multiSigAccount.getPubKeyList(), account.getPubKey())) {
        return Result.getFailed(AccountErrorCode.SIGN_ADDRESS_NOT_MATCH).toRpcClientResult();
    }
    Script redeemScript = accountLedgerService.getRedeemScript(multiSigAccount);
    if (redeemScript == null) {
        return Result.getFailed(AccountErrorCode.ACCOUNT_NOT_EXIST).toRpcClientResult();
    }
    DepositTransaction tx = new DepositTransaction();
    TransactionSignature transactionSignature = new TransactionSignature();
    List<Script> scripts = new ArrayList<>();
    Deposit deposit = new Deposit();
    deposit.setAddress(AddressTool.getAddress(form.getAddress()));
    deposit.setAgentHash(NulsDigestData.fromDigestHex(form.getAgentHash()));
    deposit.setDeposit(Na.valueOf(form.getDeposit()));
    tx.setTxData(deposit);
    CoinData coinData = new CoinData();
    List<Coin> toList = new ArrayList<>();
    // AddressTool.getAddress(addr)
    if (deposit.getAddress()[2] == NulsContext.P2SH_ADDRESS_TYPE) {
        Script scriptPubkey = SignatureUtil.createOutputScript(deposit.getAddress());
        toList.add(new Coin(scriptPubkey.getProgram(), deposit.getDeposit(), PocConsensusConstant.CONSENSUS_LOCK_TIME));
    } else {
        toList.add(new Coin(deposit.getAddress(), deposit.getDeposit(), PocConsensusConstant.CONSENSUS_LOCK_TIME));
    }
    coinData.setTo(toList);
    tx.setCoinData(coinData);
    // 交易签名的长度为m*单个签名长度+赎回脚本长度
    int scriptSignLenth = redeemScript.getProgram().length + ((int) multiSigAccount.getM()) * 72;
    CoinDataResult result = accountLedgerService.getMutilCoinData(deposit.getAddress(), deposit.getDeposit(), tx.size() + scriptSignLenth, TransactionFeeCalculator.OTHER_PRICE_PRE_1024_BYTES);
    if (null != result) {
        if (result.isEnough()) {
            tx.getCoinData().setFrom(result.getCoinList());
            if (null != result.getChange()) {
                tx.getCoinData().getTo().add(result.getChange());
            }
        } else {
            return Result.getFailed(TransactionErrorCode.INSUFFICIENT_BALANCE).toRpcClientResult();
        }
    }
    tx.setHash(NulsDigestData.calcDigestData(tx.serializeForHash()));
    // 将赎回脚本先存储在签名脚本中
    scripts.add(redeemScript);
    transactionSignature.setScripts(scripts);
    Result resultData = accountLedgerService.txMultiProcess(tx, transactionSignature, account, form.getPassword());
    if (resultData.isSuccess()) {
        Map<String, String> valueMap = new HashMap<>();
        valueMap.put("txData", (String) resultData.getData());
        return Result.getSuccess().setData(valueMap).toRpcClientResult();
    }
    return resultData.toRpcClientResult();
}
Also used : MultiSigAccount(io.nuls.account.model.MultiSigAccount) Account(io.nuls.account.model.Account) MultiSigAccount(io.nuls.account.model.MultiSigAccount) CancelDepositTransaction(io.nuls.consensus.poc.protocol.tx.CancelDepositTransaction) DepositTransaction(io.nuls.consensus.poc.protocol.tx.DepositTransaction) Deposit(io.nuls.consensus.poc.protocol.entity.Deposit) CancelDeposit(io.nuls.consensus.poc.protocol.entity.CancelDeposit) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 17 with Deposit

use of io.nuls.consensus.poc.protocol.entity.Deposit in project nuls by nuls-io.

the class PocConsensusResource method getWholeInfo.

@GET
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation("Get the whole network consensus infomation! 查询全网共识总体信息 [3.6.1]")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = WholeNetConsensusInfoDTO.class) })
public RpcClientResult getWholeInfo() {
    Result result = Result.getSuccess();
    WholeNetConsensusInfoDTO dto = new WholeNetConsensusInfoDTO();
    if (null == PocConsensusContext.getChainManager() || null == PocConsensusContext.getChainManager().getMasterChain()) {
        return Result.getFailed(KernelErrorCode.DATA_NOT_FOUND).toRpcClientResult();
    }
    List<Agent> allAgentList = PocConsensusContext.getChainManager().getMasterChain().getChain().getAgentList();
    long startBlockHeight = NulsContext.getInstance().getBestHeight();
    List<Agent> agentList = new ArrayList<>();
    long totalDeposit = 0;
    for (int i = allAgentList.size() - 1; i >= 0; i--) {
        Agent agent = allAgentList.get(i);
        if (agent.getDelHeight() != -1L && agent.getDelHeight() <= startBlockHeight) {
            continue;
        } else if (agent.getBlockHeight() > startBlockHeight || agent.getBlockHeight() < 0L) {
            continue;
        }
        totalDeposit += agent.getDeposit().getValue();
        agentList.add(agent);
    }
    List<Deposit> deposits = PocConsensusContext.getChainManager().getMasterChain().getChain().getDepositList();
    for (Deposit deposit : deposits) {
        if (deposit.getDelHeight() > 0 && deposit.getDelHeight() <= startBlockHeight) {
            continue;
        } else if (deposit.getBlockHeight() > startBlockHeight || deposit.getBlockHeight() < 0L) {
            continue;
        }
        totalDeposit += deposit.getDeposit().getValue();
    }
    MeetingRound round = PocConsensusContext.getChainManager().getMasterChain().getCurrentRound();
    int packingAgentCount = 0;
    if (null != round) {
        for (MeetingMember member : round.getMemberList()) {
            if (member.getAgent() != null) {
                packingAgentCount++;
            }
        }
    }
    dto.setAgentCount(agentList.size());
    dto.setTotalDeposit(totalDeposit);
    dto.setConsensusAccountNumber(agentList.size());
    dto.setPackingAgentCount(packingAgentCount);
    result.setData(dto);
    return result.toRpcClientResult();
}
Also used : StopAgent(io.nuls.consensus.poc.protocol.entity.StopAgent) Agent(io.nuls.consensus.poc.protocol.entity.Agent) Deposit(io.nuls.consensus.poc.protocol.entity.Deposit) CancelDeposit(io.nuls.consensus.poc.protocol.entity.CancelDeposit) MeetingMember(io.nuls.consensus.poc.model.MeetingMember) MeetingRound(io.nuls.consensus.poc.model.MeetingRound) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 18 with Deposit

use of io.nuls.consensus.poc.protocol.entity.Deposit in project nuls by nuls-io.

the class PocConsensusResource method fillAgent.

private void fillAgent(Agent agent, MeetingRound round, List<Deposit> depositList) {
    if (null == depositList || depositList.isEmpty()) {
        depositList = PocConsensusContext.getChainManager().getMasterChain().getChain().getDepositList();
    }
    Set<String> memberSet = new HashSet<>();
    Na total = Na.ZERO;
    for (int i = 0; i < depositList.size(); i++) {
        Deposit deposit = depositList.get(i);
        if (!agent.getTxHash().equals(deposit.getAgentHash())) {
            continue;
        }
        if (deposit.getDelHeight() >= 0) {
            continue;
        }
        total = total.add(deposit.getDeposit());
        memberSet.add(AddressTool.getStringAddressByBytes(deposit.getAddress()));
    }
    agent.setMemberCount(memberSet.size());
    agent.setTotalDeposit(total.getValue());
    if (round == null) {
        return;
    }
    MeetingMember member = round.getMember(agent.getPackingAddress());
    if (null == member) {
        agent.setStatus(0);
        agent.setCreditVal(0);
        return;
    }
    agent.setStatus(1);
    agent.setCreditVal(member.getCreditVal());
}
Also used : Deposit(io.nuls.consensus.poc.protocol.entity.Deposit) CancelDeposit(io.nuls.consensus.poc.protocol.entity.CancelDeposit) MeetingMember(io.nuls.consensus.poc.model.MeetingMember)

Example 19 with Deposit

use of io.nuls.consensus.poc.protocol.entity.Deposit in project nuls by nuls-io.

the class DepositTransaction method clone.

@Override
public DepositTransaction clone() {
    DepositTransaction tx = new DepositTransaction();
    try {
        tx.parse(serialize(), 0);
    } catch (Exception e) {
        throw new NulsRuntimeException(e);
    }
    tx.setBlockHeight(blockHeight);
    tx.setStatus(status);
    tx.setHash(hash);
    tx.setSize(size);
    Deposit deposit = tx.getTxData();
    deposit.setBlockHeight(txData.getBlockHeight());
    deposit.setDelHeight(txData.getDelHeight());
    deposit.setTime(txData.getTime());
    deposit.setTxHash(txData.getTxHash());
    deposit.setStatus(txData.getStatus());
    return tx;
}
Also used : Deposit(io.nuls.consensus.poc.protocol.entity.Deposit) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException) NulsException(io.nuls.kernel.exception.NulsException) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException)

Example 20 with Deposit

use of io.nuls.consensus.poc.protocol.entity.Deposit in project nuls by nuls-io.

the class PoConvertUtil method poToDeposit.

public static Deposit poToDeposit(DepositPo po) {
    Deposit deposit = new Deposit();
    deposit.setDeposit(po.getDeposit());
    deposit.setAgentHash(po.getAgentHash());
    deposit.setTime(po.getTime());
    deposit.setDelHeight(po.getDelHeight());
    deposit.setBlockHeight(po.getBlockHeight());
    deposit.setAddress(po.getAddress());
    deposit.setTxHash(po.getTxHash());
    return deposit;
}
Also used : Deposit(io.nuls.consensus.poc.protocol.entity.Deposit)

Aggregations

Deposit (io.nuls.consensus.poc.protocol.entity.Deposit)27 Agent (io.nuls.consensus.poc.protocol.entity.Agent)12 CancelDeposit (io.nuls.consensus.poc.protocol.entity.CancelDeposit)10 CoinDataResult (io.nuls.account.ledger.model.CoinDataResult)9 DepositTransaction (io.nuls.consensus.poc.protocol.tx.DepositTransaction)8 NulsRuntimeException (io.nuls.kernel.exception.NulsRuntimeException)6 MultiSigAccount (io.nuls.account.model.MultiSigAccount)4 MeetingMember (io.nuls.consensus.poc.model.MeetingMember)4 StopAgent (io.nuls.consensus.poc.protocol.entity.StopAgent)4 CancelDepositTransaction (io.nuls.consensus.poc.protocol.tx.CancelDepositTransaction)4 CreateAgentTransaction (io.nuls.consensus.poc.protocol.tx.CreateAgentTransaction)4 PunishLogPo (io.nuls.consensus.poc.storage.po.PunishLogPo)4 Account (io.nuls.account.model.Account)3 DepositPo (io.nuls.consensus.poc.storage.po.DepositPo)3 Page (io.nuls.core.tools.page.Page)3 NulsException (io.nuls.kernel.exception.NulsException)3 ValidateResult (io.nuls.kernel.validate.ValidateResult)3 ChainContainer (io.nuls.consensus.poc.container.ChainContainer)2 Chain (io.nuls.consensus.poc.model.Chain)2 NulsDigestData (io.nuls.kernel.model.NulsDigestData)2