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();
}
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();
}
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();
}
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();
}
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();
}
Aggregations