use of io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo in project nuls by nuls-io.
the class UtxoAccountsServiceImpl method validateIntegrityBootstrap.
@Override
public boolean validateIntegrityBootstrap(long hadSynBlockHeight) throws NulsException {
Log.info("utxoAccountsModule validateIntegrityBootstrap hadSynBlockHeight:" + hadSynBlockHeight);
LocalCacheBlockBalance localCacheNextBlock = null;
try {
localCacheNextBlock = utxoAccountsStorageService.getLocalCacheBlock(hadSynBlockHeight + 1).getData();
} catch (NulsException e) {
Log.error(e);
return false;
}
if (localCacheNextBlock == null) {
// 无不一致数据
return true;
}
List<UtxoAccountsBalancePo> utxoAccountsBalances = localCacheNextBlock.getBalanceList();
if (utxoAccountsBalances == null) {
// 无交易数据
return true;
}
return rollbackBlock(localCacheNextBlock);
}
use of io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo in project nuls by nuls-io.
the class UtxoAccountsServiceImpl method utxoAccountsMapToList.
/**
* build utxoAccounts to list
*
* @param utxoAccountsMap
* @return
* @throws NulsException
*/
private List<UtxoAccountsBalancePo> utxoAccountsMapToList(Map<String, UtxoAccountsBalancePo> utxoAccountsMap, LocalCacheBlockBalance preSnapshot) throws NulsException {
List<UtxoAccountsBalancePo> list = new ArrayList<>();
List<UtxoAccountsBalancePo> preList = new ArrayList<>();
preSnapshot.setBalanceList(preList);
Collection<UtxoAccountsBalancePo> utxoAccountsBalances = utxoAccountsMap.values();
for (UtxoAccountsBalancePo balance : utxoAccountsBalances) {
UtxoAccountsBalancePo localBalance = utxoAccountsStorageService.getUtxoAccountsBalanceByAddress(balance.getOwner()).getData();
if (localBalance == null) {
list.add(balance);
UtxoAccountsBalancePo preBalance = new UtxoAccountsBalancePo();
preBalance.setOwner(balance.getOwner());
preList.add(preBalance);
} else {
preList.add(localBalance);
UtxoAccountsBalancePo newBalance = new UtxoAccountsBalancePo();
newBalance.setOwner(localBalance.getOwner());
newBalance.setBlockHeight(balance.getBlockHeight());
newBalance.setTxIndex(balance.getTxIndex());
newBalance.setOutputBalance(localBalance.getOutputBalance() + (balance.getOutputBalance()));
newBalance.setInputBalance(localBalance.getInputBalance() + (balance.getInputBalance()));
newBalance.setContractFromBalance(localBalance.getContractFromBalance() + (balance.getContractFromBalance()));
newBalance.setContractToBalance(localBalance.getContractToBalance() + (balance.getContractToBalance()));
newBalance.setLockedPermanentBalance(localBalance.getLockedPermanentBalance() + (balance.getLockedPermanentBalance()));
newBalance.setUnLockedPermanentBalance(localBalance.getUnLockedPermanentBalance() + (balance.getUnLockedPermanentBalance()));
clearLockedBalance(localBalance, balance, newBalance);
list.add(newBalance);
}
}
return list;
}
use of io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo in project nuls by nuls-io.
the class UtxoAccountsResource method getBalance.
@GET
@Path("/balance/{address}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation("[查询] 查询账户余额信息")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = RpcClientResult.class) })
public RpcClientResult getBalance(@ApiParam(name = "address", value = "账户地址", required = true) @PathParam("address") String address) {
if (!AddressTool.validAddress(address)) {
return Result.getFailed(AccountErrorCode.ADDRESS_ERROR).toRpcClientResult();
}
try {
Result<UtxoAccountsBalancePo> utxoAccountsBalance = utxoAccountsStorageService.getUtxoAccountsBalanceByAddress(AddressTool.getAddress(address));
long synBlockHeight = utxoAccountsStorageService.getHadSynBlockHeight();
if (null == utxoAccountsBalance || null == utxoAccountsBalance.getData()) {
return Result.getFailed(UtxoAccountsErrorCode.DATA_NOT_FOUND).toRpcClientResult();
}
UtxoAccountsBalancePo dbAccountsBalance = utxoAccountsBalance.getData();
AccountBalanceDto accountBalance = new AccountBalanceDto();
accountBalance.setAddress(address);
long totalNa = dbAccountsBalance.getOutputBalance() - (dbAccountsBalance.getInputBalance());
totalNa += dbAccountsBalance.getContractToBalance();
totalNa -= dbAccountsBalance.getContractFromBalance();
accountBalance.setNuls(new BigDecimal(totalNa).toPlainString());
long permanentLockedNa = dbAccountsBalance.getLockedPermanentBalance() - (dbAccountsBalance.getUnLockedPermanentBalance());
long lockedNa = permanentLockedNa;
List<LockedBalance> timeLockedBalance = dbAccountsBalance.getLockedTimeList();
long currentTime = TimeService.currentTimeMillis();
for (LockedBalance balance : timeLockedBalance) {
if (balance.getLockedTime() > currentTime) {
lockedNa += balance.getLockedBalance();
} else {
break;
}
}
List<LockedBalance> heightLockedBalance = dbAccountsBalance.getLockedHeightList();
for (LockedBalance balance : heightLockedBalance) {
if (balance.getLockedTime() > synBlockHeight) {
lockedNa += balance.getLockedBalance();
} else {
break;
}
}
accountBalance.setLocked(new BigDecimal(lockedNa).toPlainString());
accountBalance.setSynBlockHeight(String.valueOf(synBlockHeight));
long netHeight = NulsContext.getInstance().getNetBestBlockHeight();
accountBalance.setNetBlockHeight(String.valueOf(netHeight));
return Result.getSuccess().setData(accountBalance).toRpcClientResult();
} catch (NulsException e) {
Log.error(e);
}
return Result.getFailed(UtxoAccountsErrorCode.SYS_UNKOWN_EXCEPTION).toRpcClientResult();
}
use of io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo in project nuls by nuls-io.
the class UtxoAccountsStorageServiceImpl method getUtxoAccountsBalanceByAddress.
@Override
public Result<UtxoAccountsBalancePo> getUtxoAccountsBalanceByAddress(byte[] addressBytes) throws NulsException {
// 获取账号信息
if (addressBytes == null) {
return Result.getFailed(KernelErrorCode.NULL_PARAMETER);
}
byte[] bytes = null;
if (addressBytes[2] == 3) {
Script scriptPubkey = SignatureUtil.createOutputScript(addressBytes);
bytes = scriptPubkey.getProgram();
} else {
bytes = addressBytes;
}
byte[] balance = dbService.get(UtxoAccountsStorageConstant.DB_NAME_UTXO_ACCOUNTS_CONFIRMED_BALANCE, bytes);
UtxoAccountsBalancePo b = new UtxoAccountsBalancePo();
b.parse(balance, 0);
if (b.getOwner() == null) {
return Result.getSuccess().setData(null);
}
return Result.getSuccess().setData(b);
}
use of io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo in project nuls by nuls-io.
the class UtxoAccountsBalanceServiceImpl method getUtxoAccountsBalance.
@Override
public Result<UtxoAccountsBalance> getUtxoAccountsBalance(byte[] owner) {
if (!AddressTool.validAddress(AddressTool.getStringAddressByBytes(owner))) {
return Result.getFailed(AccountErrorCode.ADDRESS_ERROR);
}
try {
Result<UtxoAccountsBalancePo> utxoAccountsBalance = utxoAccountsStorageService.getUtxoAccountsBalanceByAddress(owner);
long synBlockHeight = utxoAccountsStorageService.getHadSynBlockHeight();
if (null == utxoAccountsBalance || null == utxoAccountsBalance.getData()) {
return Result.getFailed(UtxoAccountsErrorCode.DATA_NOT_FOUND);
}
UtxoAccountsBalancePo dbAccountsBalance = utxoAccountsBalance.getData();
UtxoAccountsBalance accountBalance = new UtxoAccountsBalance();
accountBalance.setOwner(dbAccountsBalance.getOwner());
long totalNa = dbAccountsBalance.getOutputBalance() - (dbAccountsBalance.getInputBalance());
totalNa += dbAccountsBalance.getContractToBalance();
totalNa -= dbAccountsBalance.getContractFromBalance();
accountBalance.setBalance(Na.valueOf(totalNa));
long permanentLockedNa = dbAccountsBalance.getLockedPermanentBalance() - (dbAccountsBalance.getUnLockedPermanentBalance());
long lockedNa = permanentLockedNa;
List<LockedBalance> timeLockedBalance = dbAccountsBalance.getLockedTimeList();
long currentTime = TimeService.currentTimeMillis();
for (LockedBalance balance : timeLockedBalance) {
if (balance.getLockedTime() > currentTime) {
lockedNa += balance.getLockedBalance();
} else {
break;
}
}
List<LockedBalance> heightLockedBalance = dbAccountsBalance.getLockedHeightList();
for (LockedBalance balance : heightLockedBalance) {
if (balance.getLockedTime() > synBlockHeight) {
lockedNa += balance.getLockedBalance();
} else {
break;
}
}
accountBalance.setHadLocked(Na.valueOf(lockedNa));
return Result.getSuccess().setData(accountBalance);
} catch (NulsException e) {
Log.error(e);
}
return Result.getFailed(UtxoAccountsErrorCode.SYS_UNKOWN_EXCEPTION);
}
Aggregations