Search in sources :

Example 6 with UtxoAccountsBalancePo

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);
}
Also used : UtxoAccountsBalancePo(io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo) NulsException(io.nuls.kernel.exception.NulsException) LocalCacheBlockBalance(io.nuls.utxo.accounts.storage.po.LocalCacheBlockBalance)

Example 7 with UtxoAccountsBalancePo

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;
}
Also used : UtxoAccountsBalancePo(io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo)

Example 8 with UtxoAccountsBalancePo

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();
}
Also used : UtxoAccountsBalancePo(io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo) LockedBalance(io.nuls.utxo.accounts.storage.po.LockedBalance) AccountBalanceDto(io.nuls.utxo.accounts.rpc.dto.AccountBalanceDto) NulsException(io.nuls.kernel.exception.NulsException) BigDecimal(java.math.BigDecimal) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 9 with UtxoAccountsBalancePo

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);
}
Also used : Script(io.nuls.kernel.script.Script) UtxoAccountsBalancePo(io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo)

Example 10 with UtxoAccountsBalancePo

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);
}
Also used : UtxoAccountsBalancePo(io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo) LockedBalance(io.nuls.utxo.accounts.storage.po.LockedBalance) NulsException(io.nuls.kernel.exception.NulsException) UtxoAccountsBalance(io.nuls.utxo.accounts.model.UtxoAccountsBalance)

Aggregations

UtxoAccountsBalancePo (io.nuls.utxo.accounts.storage.po.UtxoAccountsBalancePo)10 NulsException (io.nuls.kernel.exception.NulsException)5 LockedBalance (io.nuls.utxo.accounts.storage.po.LockedBalance)4 LocalCacheBlockBalance (io.nuls.utxo.accounts.storage.po.LocalCacheBlockBalance)3 AccountBalanceDto (io.nuls.utxo.accounts.rpc.dto.AccountBalanceDto)2 BigDecimal (java.math.BigDecimal)2 GET (javax.ws.rs.GET)2 Path (javax.ws.rs.Path)2 Produces (javax.ws.rs.Produces)2 ContractTransfer (io.nuls.contract.dto.ContractTransfer)1 Block (io.nuls.kernel.model.Block)1 Script (io.nuls.kernel.script.Script)1 UtxoAccountsBalance (io.nuls.utxo.accounts.model.UtxoAccountsBalance)1