Search in sources :

Example 6 with AliasPo

use of io.nuls.account.storage.po.AliasPo in project nuls by nuls-io.

the class AccountServiceImpl method updatePasswordByAccountKeyStore.

@Override
public Result<Account> updatePasswordByAccountKeyStore(AccountKeyStore keyStore, String password) {
    AssertUtil.canNotEmpty(keyStore, AccountErrorCode.PARAMETER_ERROR.getMsg());
    AssertUtil.canNotEmpty(keyStore.getAddress(), AccountErrorCode.PARAMETER_ERROR.getMsg());
    AssertUtil.canNotEmpty(password, AccountErrorCode.PARAMETER_ERROR.getMsg());
    Account account;
    byte[] priKey = null;
    if (null != keyStore.getPrikey() && keyStore.getPrikey().length > 0) {
        if (!ECKey.isValidPrivteHex(Hex.encode(keyStore.getPrikey()))) {
            return Result.getFailed(AccountErrorCode.PARAMETER_ERROR);
        }
        priKey = keyStore.getPrikey();
        try {
            account = AccountTool.createAccount(Hex.encode(priKey));
        } catch (NulsException e) {
            return Result.getFailed(AccountErrorCode.FAILED);
        }
    } else {
        try {
            account = AccountTool.createAccount();
        } catch (NulsException e) {
            return Result.getFailed(AccountErrorCode.FAILED);
        }
        account.setAddress(new Address(keyStore.getAddress()));
    }
    try {
        account.encrypt(password);
    } catch (NulsException e) {
        Log.error(e);
        return Result.getFailed(e.getErrorCode());
    }
    if (StringUtils.isNotBlank(keyStore.getAlias())) {
        Alias aliasDb = aliasService.getAlias(keyStore.getAlias());
        if (null != aliasDb && account.getAddress().toString().equals(AddressTool.getStringAddressByBytes(aliasDb.getAddress()))) {
            account.setAlias(aliasDb.getAlias());
        } else {
            List<AliasPo> list = aliasStorageService.getAliasList().getData();
            for (AliasPo aliasPo : list) {
                // 如果全网别名中的地址有和当前导入的账户地址相同,则赋值别名到账户中
                if (AddressTool.getStringAddressByBytes(aliasPo.getAddress()).equals(account.getAddress().toString())) {
                    account.setAlias(aliasPo.getAlias());
                    break;
                }
            }
        }
    }
    account.setOk(false);
    AccountPo po = new AccountPo(account);
    Result result = accountStorageService.saveAccount(po);
    if (result.isFailed()) {
        return result;
    }
    accountCacheService.localAccountMaps.put(account.getAddress().getBase58(), account);
    TaskManager.asynExecuteRunnable(new Runnable() {

        @Override
        public void run() {
            String address = account.getAddress().getBase58();
            Result res = accountLedgerService.importLedger(address);
            if (res.isFailed()) {
                AccountServiceImpl.this.removeAccount(address, password);
            } else {
                AccountServiceImpl.this.finishImport(account);
            }
        }
    });
    return Result.getSuccess().setData(account);
}
Also used : Address(io.nuls.kernel.model.Address) NulsException(io.nuls.kernel.exception.NulsException) AccountPo(io.nuls.account.storage.po.AccountPo) AliasPo(io.nuls.account.storage.po.AliasPo) Result(io.nuls.kernel.model.Result)

Example 7 with AliasPo

use of io.nuls.account.storage.po.AliasPo in project nuls by nuls-io.

the class AliasStorageServiceImpl method getAlias.

@Override
public Result<AliasPo> getAlias(String alias) {
    try {
        byte[] aliasByte = alias.getBytes(NulsConfig.DEFAULT_ENCODING);
        AliasPo aliasPo = dbService.getModel(AccountStorageConstant.DB_NAME_ACCOUNT_ALIAS, aliasByte, AliasPo.class);
        return Result.getSuccess().setData(aliasPo);
    } catch (UnsupportedEncodingException e) {
        Log.error(e);
        return Result.getFailed();
    }
}
Also used : UnsupportedEncodingException(java.io.UnsupportedEncodingException) AliasPo(io.nuls.account.storage.po.AliasPo)

Example 8 with AliasPo

use of io.nuls.account.storage.po.AliasPo in project nuls by nuls-io.

the class AliasService method rollbackAlias.

/**
 * 回滚别名操作(删除别名(全网))
 * 1.从数据库删除别名对象数据
 * 2.取出对应的account将别名清除,重新存入数据库
 * 3.重新缓存account
 * rollbackAlias
 * 1.Delete the alias data from the database.
 * 2. Remove the corresponding account to clear the alias and restore it in the database.
 * 3. Recache the account.
 */
public Result rollbackAlias(AliasPo aliasPo) throws NulsException {
    try {
        AliasPo po = aliasStorageService.getAlias(aliasPo.getAlias()).getData();
        if (po != null && Arrays.equals(po.getAddress(), aliasPo.getAddress())) {
            aliasStorageService.removeAlias(aliasPo.getAlias());
            Result<AccountPo> rs = accountStorageService.getAccount(aliasPo.getAddress());
            if (rs.isSuccess()) {
                AccountPo accountPo = rs.getData();
                accountPo.setAlias("");
                Result result = accountStorageService.updateAccount(accountPo);
                if (result.isFailed()) {
                    return Result.getFailed(AccountErrorCode.FAILED);
                }
                Account account = accountPo.toAccount();
                accountCacheService.localAccountMaps.put(account.getAddress().getBase58(), account);
            }
        }
    } catch (Exception e) {
        Log.error(e);
        throw new NulsException(AccountErrorCode.ALIAS_ROLLBACK_ERROR);
    }
    return Result.getSuccess().setData(true);
}
Also used : Account(io.nuls.account.model.Account) MultiSigAccount(io.nuls.account.model.MultiSigAccount) NulsException(io.nuls.kernel.exception.NulsException) AccountPo(io.nuls.account.storage.po.AccountPo) AliasPo(io.nuls.account.storage.po.AliasPo) IOException(java.io.IOException) NulsException(io.nuls.kernel.exception.NulsException) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 9 with AliasPo

use of io.nuls.account.storage.po.AliasPo in project nuls by nuls-io.

the class AliasTransactionValidator method validate.

@Override
public ValidateResult validate(AliasTransaction tx) {
    Alias alias = tx.getTxData();
    if (tx.isSystemTx()) {
        return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_TYPE_ERROR);
    }
    if (NulsContext.CONTRACT_ADDRESS_TYPE == alias.getAddress()[2]) {
        return ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.ADDRESS_ERROR);
    }
    if (!StringUtils.validAlias(alias.getAlias())) {
        return ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.ALIAS_FORMAT_WRONG);
    }
    if (!aliasService.isAliasUsable(alias.getAlias())) {
        return ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.ALIAS_EXIST);
    }
    List<AliasPo> list = aliasStorageService.getAliasList().getData();
    for (AliasPo aliasPo : list) {
        if (Arrays.equals(aliasPo.getAddress(), alias.getAddress())) {
            return ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.ACCOUNT_ALREADY_SET_ALIAS);
        }
    }
    CoinData coinData = tx.getCoinData();
    if (null == coinData || null == coinData.getTo() || coinData.getTo().isEmpty()) {
        return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.COINDATA_NOT_FOUND);
    }
    boolean burned = false;
    for (Coin coin : coinData.getTo()) {
        if (ArraysTool.arrayEquals(coin.getOwner(), NulsConstant.BLACK_HOLE_ADDRESS) && coin.getNa().equals(Na.NA)) {
            burned = true;
            break;
        }
        if (!burned && !ArraysTool.arrayEquals(coin.getOwner(), NulsConstant.BLACK_HOLE_ADDRESS_TEST_NET) && coin.getNa().equals(Na.NA)) {
            burned = true;
            break;
        }
    }
    if (!burned) {
        return ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.MUST_BURN_A_NULS);
    }
    TransactionSignature sig = new TransactionSignature();
    try {
        sig.parse(tx.getTransactionSignature(), 0);
    } catch (NulsException e) {
        Log.error(e);
        return ValidateResult.getFailedResult(this.getClass().getName(), e.getErrorCode());
    }
    boolean sign;
    try {
        sign = SignatureUtil.containsAddress(tx, tx.getTxData().getAddress());
    } catch (NulsException e) {
        sign = false;
    }
    if (!sign) {
        ValidateResult result = ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.ADDRESS_ERROR);
        result.setLevel(SeverityLevelEnum.FLAGRANT_FOUL);
        return result;
    }
    return ValidateResult.getSuccessResult();
}
Also used : Coin(io.nuls.kernel.model.Coin) Alias(io.nuls.account.model.Alias) CoinData(io.nuls.kernel.model.CoinData) NulsException(io.nuls.kernel.exception.NulsException) ValidateResult(io.nuls.kernel.validate.ValidateResult) AliasPo(io.nuls.account.storage.po.AliasPo) TransactionSignature(io.nuls.kernel.script.TransactionSignature)

Example 10 with AliasPo

use of io.nuls.account.storage.po.AliasPo in project nuls by nuls-io.

the class AccountResource method getAliasList.

@GET
@Path("/allalias")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "[查询] 查询全部别名列表数据")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = RpcClientResult.class) })
public RpcClientResult getAliasList() throws Exception {
    List<AliasPo> result = aliasService.getAllAlias();
    Map<String, String> map = new HashMap<>();
    for (AliasPo po : result) {
        map.put(Hex.encode(po.getAddress()), po.getAlias());
    }
    return Result.getSuccess().setData(map).toRpcClientResult();
}
Also used : AliasPo(io.nuls.account.storage.po.AliasPo)

Aggregations

AliasPo (io.nuls.account.storage.po.AliasPo)12 NulsException (io.nuls.kernel.exception.NulsException)7 AccountPo (io.nuls.account.storage.po.AccountPo)4 Alias (io.nuls.account.model.Alias)3 Result (io.nuls.kernel.model.Result)3 Account (io.nuls.account.model.Account)2 NulsByteBuffer (io.nuls.kernel.utils.NulsByteBuffer)2 ValidateResult (io.nuls.kernel.validate.ValidateResult)2 CoinDataResult (io.nuls.account.ledger.model.CoinDataResult)1 MultiSigAccount (io.nuls.account.model.MultiSigAccount)1 AliasTransaction (io.nuls.account.tx.AliasTransaction)1 CryptoException (io.nuls.core.tools.crypto.Exception.CryptoException)1 Address (io.nuls.kernel.model.Address)1 Coin (io.nuls.kernel.model.Coin)1 CoinData (io.nuls.kernel.model.CoinData)1 Transaction (io.nuls.kernel.model.Transaction)1 TransactionSignature (io.nuls.kernel.script.TransactionSignature)1 IOException (java.io.IOException)1 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1 HashSet (java.util.HashSet)1