use of io.nuls.kernel.model.Result in project nuls by nuls-io.
the class LevelDBManager method destroyArea.
public static Result destroyArea(String areaName) {
if (!baseCheckArea(areaName)) {
return Result.getFailed(DBErrorCode.DB_AREA_NOT_EXIST);
}
if (StringUtils.isBlank(dataPath) || !checkPathLegal(areaName)) {
return Result.getFailed(DBErrorCode.DB_AREA_CREATE_PATH_ERROR);
}
Result result;
try {
DB db = AREAS.remove(areaName);
db.close();
File dir = new File(dataPath + File.separator + areaName);
if (!dir.exists()) {
return Result.getFailed(DBErrorCode.DB_AREA_NOT_EXIST);
}
String filePath = dataPath + File.separator + areaName + File.separator + BASE_DB_NAME;
destroyDB(filePath);
AREAS_COMPARATOR.remove(areaName);
delete(BASE_AREA_NAME, bytes(areaName + "-comparator"));
delete(BASE_AREA_NAME, bytes(areaName + "-cacheSize"));
result = Result.getSuccess();
} catch (Exception e) {
Log.error("error destroy area: " + areaName, e);
result = Result.getFailed(DBErrorCode.DB_AREA_DESTROY_ERROR);
}
return result;
}
use of io.nuls.kernel.model.Result in project nuls by nuls-io.
the class LevelDBManager method createArea.
public static Result createArea(String areaName, Long cacheSize, Comparator<byte[]> comparator) {
lock.lock();
try {
if (StringUtils.isBlank(areaName)) {
return Result.getFailed(KernelErrorCode.NULL_PARAMETER);
}
if (AREAS.containsKey(areaName)) {
return Result.getFailed(DBErrorCode.DB_AREA_EXIST);
}
// prevent too many areas
if (AREAS.size() > (max - 1)) {
return Result.getFailed(DBErrorCode.DB_AREA_CREATE_EXCEED_LIMIT);
}
if (StringUtils.isBlank(dataPath) || !checkPathLegal(areaName)) {
return Result.getFailed(DBErrorCode.DB_AREA_CREATE_PATH_ERROR);
}
Result result;
try {
File dir = new File(dataPath + File.separator + areaName);
if (!dir.exists()) {
dir.mkdir();
}
String filePath = dataPath + File.separator + areaName + File.separator + BASE_DB_NAME;
DB db = openDB(filePath, true, cacheSize, comparator);
AREAS.put(areaName, db);
result = Result.getSuccess();
} catch (Exception e) {
Log.error("error create area: " + areaName, e);
result = Result.getFailed(DBErrorCode.DB_AREA_CREATE_ERROR);
}
return result;
} finally {
lock.unlock();
}
}
use of io.nuls.kernel.model.Result in project nuls by nuls-io.
the class UtxoResource method getUtxoByAddressAndAmount.
@GET
@Path("/amount/{address}/{amount}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "根据address和amount查询UTXO")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = AccountUtxoDto.class) })
public RpcClientResult getUtxoByAddressAndAmount(@ApiParam(name = "address", value = "地址", required = true) @PathParam("address") String address, @ApiParam(name = "amount", value = "金额", required = true) @PathParam("amount") Long amount) {
if (StringUtils.isBlank(address) || amount == null) {
return Result.getFailed(LedgerErrorCode.NULL_PARAMETER).toRpcClientResult();
}
if (!AddressTool.validAddress(address)) {
return Result.getFailed(LedgerErrorCode.PARAMETER_ERROR).toRpcClientResult();
}
Result result = null;
try {
List<Coin> coinList = getAllUtxoByAddress(address);
Na amountNa = Na.valueOf(amount.longValue());
AccountUtxoDto accountUtxoDto = new AccountUtxoDto();
List<UtxoDto> list = new LinkedList<>();
Na values = Na.ZERO;
for (Coin coin : coinList) {
if (!coin.usable()) {
continue;
}
if (coin.getNa().equals(Na.ZERO)) {
continue;
}
list.add(new UtxoDto(coin));
values = values.add(coin.getNa());
if (values.isGreaterOrEquals(amountNa)) {
break;
}
}
accountUtxoDto.setUtxoDtoList(list);
result = Result.getSuccess().setData(accountUtxoDto);
return result.toRpcClientResult();
} catch (Exception e) {
Log.error(e);
result = Result.getFailed(LedgerErrorCode.SYS_UNKOWN_EXCEPTION);
return result.toRpcClientResult();
}
}
use of io.nuls.kernel.model.Result in project nuls by nuls-io.
the class LevelDBServiceImpl method createWriteBatch.
@Override
public BatchOperation createWriteBatch(String area) {
if (StringUtils.isBlank(area)) {
return null;
}
BatchOperationImpl batchOperation = new BatchOperationImpl(area);
Result result = batchOperation.checkBatch();
if (result.isFailed()) {
Log.error("DB batch create error: " + result.getMsg());
return null;
}
return batchOperation;
}
use of io.nuls.kernel.model.Result in project nuls by nuls-io.
the class AccountServiceImpl method saveMultiSigAccount.
/**
* 导入一个跟本地地址相关的多签账户
*
* @param addressStr 多签地址
* @param pubkeys 多签组成公钥列表
* @param m 最小签名数
* @return 是否成功
*/
@Override
public Result<Boolean> saveMultiSigAccount(String addressStr, List<String> pubkeys, int m) {
Script redeemScript = ScriptBuilder.createNulsRedeemScript(m, pubkeys);
Address address = new Address(NulsContext.getInstance().getDefaultChainId(), NulsContext.P2SH_ADDRESS_TYPE, SerializeUtils.sha256hash160(redeemScript.getProgram()));
if (!AddressTool.getStringAddressByBytes(address.getAddressBytes()).equals(addressStr)) {
return Result.getFailed(AccountErrorCode.ADDRESS_ERROR);
}
MultiSigAccount account = new MultiSigAccount();
account.setAddress(address);
account.setM(m);
account.addPubkeys(pubkeys);
Result result = null;
try {
result = this.multiSigAccountStorageService.saveAccount(account.getAddress(), account.serialize());
} catch (IOException e) {
Log.error(e);
return Result.getFailed(KernelErrorCode.SERIALIZE_ERROR);
}
if (result.isFailed()) {
return result;
}
return result.setData(addressStr);
}
Aggregations