Search in sources :

Example 11 with Deposit

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

the class PocConsensusResource method queryDepositListByAgentAddress.

@GET
@Path("/deposit/agent/{agentHash}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "查询共识节点受托列表信息 [3.6.9]", notes = "result.data.page.list: List<Map<String, Object>>")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = Page.class) })
public RpcClientResult queryDepositListByAgentAddress(@ApiParam(name = "agentHash", value = "指定代理节点标识", required = true) @PathParam("agentHash") String agentHash, @ApiParam(name = "pageNumber", value = "页码") @QueryParam("pageNumber") Integer pageNumber, @ApiParam(name = "pageSize", value = "每页条数") @QueryParam("pageSize") Integer pageSize) throws NulsException {
    AssertUtil.canNotEmpty(agentHash);
    if (null == pageNumber || pageNumber == 0) {
        pageNumber = 1;
    }
    if (null == pageSize || pageSize == 0) {
        pageSize = 10;
    }
    if (pageNumber < 0 || pageSize < 0 || pageSize > 100) {
        return Result.getFailed(KernelErrorCode.PARAMETER_ERROR).toRpcClientResult();
    }
    Result result = Result.getSuccess();
    List<Deposit> allList = PocConsensusContext.getChainManager().getMasterChain().getChain().getDepositList();
    List<Deposit> depositList = new ArrayList<>();
    long startBlockHeight = NulsContext.getInstance().getBestHeight();
    NulsDigestData agentDigestData = NulsDigestData.fromDigestHex(agentHash);
    for (Deposit deposit : allList) {
        if (deposit.getDelHeight() != -1L && deposit.getDelHeight() <= startBlockHeight) {
            continue;
        }
        if (deposit.getBlockHeight() > startBlockHeight || deposit.getBlockHeight() < 0L) {
            continue;
        }
        if (!deposit.getAgentHash().equals(agentDigestData)) {
            continue;
        }
        depositList.add(deposit);
    }
    int start = pageNumber * pageSize - pageSize;
    Page<DepositDTO> page = new Page<>(pageNumber, pageSize, depositList.size());
    if (start >= depositList.size()) {
        result.setData(page);
        return result.toRpcClientResult();
    }
    Map<NulsDigestData, Integer> map = new HashMap<>();
    for (MeetingMember member : PocConsensusContext.getChainManager().getMasterChain().getCurrentRound().getMemberList()) {
        if (null != member.getAgent()) {
            map.put(member.getAgent().getTxHash(), 1);
        }
    }
    List<DepositDTO> resultList = new ArrayList<>();
    for (int i = start; i < depositList.size() && i < (start + pageSize); i++) {
        Deposit deposit = depositList.get(i);
        deposit.setStatus(map.get(deposit.getAgentHash()) == null ? 0 : 1);
        resultList.add(new DepositDTO(deposit));
    }
    page.setList(resultList);
    result.setData(page);
    return result.toRpcClientResult();
}
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) Page(io.nuls.core.tools.page.Page) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 12 with Deposit

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

the class PocConsensusResource method depositToAgent.

@POST
@Path("/deposit")
@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 depositToAgent(@ApiParam(name = "form", value = "申请参与共识表单数据", required = true) DepositForm form) throws NulsException {
    AssertUtil.canNotEmpty(form);
    AssertUtil.canNotEmpty(form.getAddress());
    AssertUtil.canNotEmpty(form.getAgentHash());
    if (!NulsDigestData.validHash(form.getAgentHash())) {
        return Result.getFailed(PocConsensusErrorCode.AGENT_NOT_EXIST).toRpcClientResult();
    }
    AssertUtil.canNotEmpty(form.getDeposit());
    if (!AddressTool.validAddress(form.getAddress())) {
        throw new NulsRuntimeException(KernelErrorCode.PARAMETER_ERROR);
    }
    Account account = accountService.getAccount(form.getAddress()).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();
        }
    }
    if (!account.isOk()) {
        return Result.getFailed(AccountErrorCode.IMPORTING_ACCOUNT).toRpcClientResult();
    }
    DepositTransaction tx = new DepositTransaction();
    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<>();
    toList.add(new Coin(deposit.getAddress(), deposit.getDeposit(), PocConsensusConstant.CONSENSUS_LOCK_TIME));
    coinData.setTo(toList);
    tx.setCoinData(coinData);
    CoinDataResult result = accountLedgerService.getCoinData(deposit.getAddress(), deposit.getDeposit(), tx.size(), TransactionFeeCalculator.OTHER_PRICE_PRE_1024_BYTES);
    RpcClientResult result1 = this.txProcessing(tx, result, account, form.getPassword());
    if (!result1.isSuccess()) {
        return result1;
    }
    Map<String, String> valueMap = new HashMap<>();
    valueMap.put("value", tx.getHash().getDigestHex());
    return Result.getSuccess().setData(valueMap).toRpcClientResult();
}
Also used : 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) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 13 with Deposit

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

the class PocConsensusResource method getMultiDepositFee.

@GET
@Path("/multiAccount/deposit/fee")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "get the fee of create agent! 获取加入共识的手续费", notes = "返回加入共识交易手续费")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = String.class) })
public RpcClientResult getMultiDepositFee(@BeanParam() GetDepositFeeForm form) throws Exception {
    AssertUtil.canNotEmpty(form);
    AssertUtil.canNotEmpty(form.getAddress(), "address can not be null");
    AssertUtil.canNotEmpty(form.getAgentHash(), "agent hash can not be null");
    AssertUtil.canNotEmpty(form.getDeposit(), "deposit can not be null");
    DepositTransaction tx = new DepositTransaction();
    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);
    Result<MultiSigAccount> sigAccountResult = accountService.getMultiSigAccount(form.getAddress());
    MultiSigAccount multiSigAccount = sigAccountResult.getData();
    Script redeemScript = accountLedgerService.getRedeemScript(multiSigAccount);
    if (redeemScript == null) {
        return Result.getFailed(AccountErrorCode.ACCOUNT_NOT_EXIST).toRpcClientResult();
    }
    CoinData coinData = new CoinData();
    List<Coin> toList = new ArrayList<>();
    toList.add(new Coin(deposit.getAddress(), deposit.getDeposit(), -1));
    coinData.setTo(toList);
    tx.setCoinData(coinData);
    CoinDataResult result = accountLedgerService.getCoinData(deposit.getAddress(), deposit.getDeposit(), tx.size(), TransactionFeeCalculator.OTHER_PRICE_PRE_1024_BYTES);
    tx.getCoinData().setFrom(result.getCoinList());
    if (null != result.getChange()) {
        tx.getCoinData().getTo().add(result.getChange());
    }
    Na fee = TransactionFeeCalculator.getMaxFee(108 + tx.size());
    // 交易签名的长度为m*单个签名长度+赎回脚本长度
    int scriptSignLenth = redeemScript.getProgram().length + ((int) multiSigAccount.getM()) * 72;
    Result rs = accountLedgerService.getMultiMaxAmountOfOnce(AddressTool.getAddress(form.getAddress()), tx, TransactionFeeCalculator.OTHER_PRICE_PRE_1024_BYTES, scriptSignLenth);
    Map<String, Long> map = new HashMap<>();
    Long maxAmount = null;
    if (rs.isSuccess()) {
        maxAmount = ((Na) rs.getData()).getValue();
    }
    map.put("fee", fee.getValue());
    map.put("maxAmount", maxAmount);
    rs.setData(map);
    return Result.getSuccess().setData(rs).toRpcClientResult();
}
Also used : 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 14 with Deposit

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

the class PocConsensusResource method getDepositListByAddress.

@GET
@Path("/deposit/address/{address}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "查询指定地址参与的所有委托信息列表 [3.6.8]", notes = "result.data.page.list: List<Map<String, Object>>")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = Page.class) })
public RpcClientResult getDepositListByAddress(@ApiParam(name = "address", value = "账户地址", required = true) @PathParam("address") String address, @ApiParam(name = "pageNumber", value = "页码") @QueryParam("pageNumber") Integer pageNumber, @ApiParam(name = "pageSize", value = "每页条数") @QueryParam("pageSize") Integer pageSize, @ApiParam(name = "agentHash", value = "指定代理节点标识(不传查所有)") @QueryParam("agentHash") String agentHash) {
    AssertUtil.canNotEmpty(address);
    if (!AddressTool.validAddress(address)) {
        return Result.getFailed(AccountErrorCode.ADDRESS_ERROR).toRpcClientResult();
    }
    if (null == pageNumber || pageNumber == 0) {
        pageNumber = 1;
    }
    if (null == pageSize || pageSize == 0) {
        pageSize = 10;
    }
    if (pageNumber < 0 || pageSize < 0 || pageSize > 100) {
        return Result.getFailed(KernelErrorCode.PARAMETER_ERROR).toRpcClientResult();
    }
    if (null != agentHash && !NulsDigestData.validHash(agentHash)) {
        return Result.getFailed(PocConsensusErrorCode.AGENT_NOT_EXIST).toRpcClientResult();
    }
    Result result = Result.getSuccess();
    List<Deposit> allList = PocConsensusContext.getChainManager().getMasterChain().getChain().getDepositList();
    List<Deposit> depositList = new ArrayList<>();
    long startBlockHeight = NulsContext.getInstance().getBestHeight();
    byte[] addressBytes = AddressTool.getAddress(address);
    for (Deposit deposit : allList) {
        if (deposit.getDelHeight() != -1L && deposit.getDelHeight() <= startBlockHeight) {
            continue;
        }
        if (deposit.getBlockHeight() > startBlockHeight || deposit.getBlockHeight() < 0L) {
            continue;
        }
        if (!Arrays.equals(deposit.getAddress(), addressBytes)) {
            continue;
        }
        if (agentHash != null && !deposit.getAgentHash().getDigestHex().equals(agentHash)) {
            continue;
        }
        depositList.add(deposit);
    }
    int start = pageNumber * pageSize - pageSize;
    Page<DepositDTO> page = new Page<>(pageNumber, pageSize, depositList.size());
    if (start >= depositList.size()) {
        result.setData(page);
        return result.toRpcClientResult();
    }
    Map<NulsDigestData, Agent> map = new HashMap<>();
    for (MeetingMember member : PocConsensusContext.getChainManager().getMasterChain().getCurrentRound().getMemberList()) {
        if (null != member.getAgent()) {
            map.put(member.getAgent().getTxHash(), member.getAgent());
        }
    }
    List<DepositDTO> resultList = new ArrayList<>();
    for (int i = start; i < depositList.size() && i < (start + pageSize); i++) {
        Deposit deposit = depositList.get(i);
        List<Agent> agentList = PocConsensusContext.getChainManager().getMasterChain().getChain().getAgentList();
        Agent agent = null;
        for (Agent a : agentList) {
            if (a.getTxHash().equals(deposit.getAgentHash())) {
                agent = a;
                break;
            }
        }
        deposit.setStatus(agent == null ? 0 : agent.getStatus());
        resultList.add(new DepositDTO(deposit, agent));
    }
    page.setList(resultList);
    result.setData(page);
    return result.toRpcClientResult();
}
Also used : Deposit(io.nuls.consensus.poc.protocol.entity.Deposit) CancelDeposit(io.nuls.consensus.poc.protocol.entity.CancelDeposit) StopAgent(io.nuls.consensus.poc.protocol.entity.StopAgent) Agent(io.nuls.consensus.poc.protocol.entity.Agent) MeetingMember(io.nuls.consensus.poc.model.MeetingMember) Page(io.nuls.core.tools.page.Page) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 15 with Deposit

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

the class PocConsensusResource method getDepositFee.

@GET
@Path("/deposit/fee")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "get the fee of create agent! 获取加入共识的手续费", notes = "返回加入共识交易手续费")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = String.class) })
public RpcClientResult getDepositFee(@BeanParam() GetDepositFeeForm form) throws NulsException {
    AssertUtil.canNotEmpty(form);
    AssertUtil.canNotEmpty(form.getAddress(), "address can not be null");
    AssertUtil.canNotEmpty(form.getAgentHash(), "agent hash can not be null");
    AssertUtil.canNotEmpty(form.getDeposit(), "deposit can not be null");
    Account account = accountService.getAccount(form.getAddress()).getData();
    if (null == account) {
        return Result.getFailed(AccountErrorCode.ACCOUNT_NOT_EXIST).toRpcClientResult();
    }
    if (!account.isOk()) {
        return Result.getFailed(AccountErrorCode.IMPORTING_ACCOUNT).toRpcClientResult();
    }
    DepositTransaction tx = new DepositTransaction();
    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<>();
    toList.add(new Coin(deposit.getAddress(), deposit.getDeposit(), -1));
    coinData.setTo(toList);
    tx.setCoinData(coinData);
    CoinDataResult result = accountLedgerService.getCoinData(deposit.getAddress(), deposit.getDeposit(), tx.size(), TransactionFeeCalculator.OTHER_PRICE_PRE_1024_BYTES);
    tx.getCoinData().setFrom(result.getCoinList());
    if (null != result.getChange()) {
        tx.getCoinData().getTo().add(result.getChange());
    }
    Na fee = TransactionFeeCalculator.getMaxFee(108 + tx.size());
    Map<String, Long> map = new HashMap<>();
    map.put("fee", fee.getValue());
    map.put("maxAmount", getMaxAmount(fee, form.getAddress(), tx));
    return Result.getSuccess().setData(map).toRpcClientResult();
}
Also used : 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)

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