Search in sources :

Example 1 with AliasPo

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

the class AccountServiceImpl method getMultiSigAccountList.

/**
 * 获取所有账户集合
 * Query all account collections.
 *
 * @return account list of all accounts.
 */
@Override
public Result<List<MultiSigAccount>> getMultiSigAccountList() {
    List<byte[]> list = this.multiSigAccountStorageService.getAccountList().getData();
    if (null == list) {
        return Result.getFailed(KernelErrorCode.DATA_NOT_FOUND);
    }
    List<MultiSigAccount> accountList = new ArrayList<>();
    for (byte[] bytes : list) {
        MultiSigAccount account = new MultiSigAccount();
        try {
            account.parse(new NulsByteBuffer(bytes, 0));
        } catch (NulsException e) {
            Log.error(e);
        }
        accountList.add(account);
    }
    List<AliasPo> aliasList = aliasStorageService.getAliasList().getData();
    for (AliasPo aliasPo : aliasList) {
        if (aliasPo.getAddress()[2] != NulsContext.P2SH_ADDRESS_TYPE) {
            continue;
        }
        for (MultiSigAccount multiSigAccount : accountList) {
            if (Arrays.equals(aliasPo.getAddress(), multiSigAccount.getAddress().getAddressBytes())) {
                multiSigAccount.setAlias(aliasPo.getAlias());
                break;
            }
        }
    }
    return new Result<List<MultiSigAccount>>().setData(accountList);
}
Also used : NulsException(io.nuls.kernel.exception.NulsException) AliasPo(io.nuls.account.storage.po.AliasPo) NulsByteBuffer(io.nuls.kernel.utils.NulsByteBuffer)

Example 2 with AliasPo

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

the class AccountServiceImpl method getMultiSigAccount.

/**
 * 根据地址获取本地存储的多签账户的详细信息
 * Get the details of the locally stored multi-sign account based on the address
 *
 * @param address 多签地址
 * @return 多签账户的详细信息
 */
@Override
public Result<MultiSigAccount> getMultiSigAccount(String address) throws Exception {
    byte[] bytes = this.multiSigAccountStorageService.getAccount(Address.fromHashs(address)).getData();
    if (null == bytes) {
        return Result.getFailed(KernelErrorCode.DATA_NOT_FOUND);
    }
    MultiSigAccount account = new MultiSigAccount();
    account.parse(new NulsByteBuffer(bytes, 0));
    List<AliasPo> list = aliasStorageService.getAliasList().getData();
    for (AliasPo aliasPo : list) {
        if (aliasPo.getAddress()[2] != NulsContext.P2SH_ADDRESS_TYPE) {
            continue;
        }
        if (Arrays.equals(aliasPo.getAddress(), account.getAddress().getAddressBytes())) {
            account.setAlias(aliasPo.getAlias());
            break;
        }
    }
    return Result.getSuccess().setData(account);
}
Also used : AliasPo(io.nuls.account.storage.po.AliasPo) NulsByteBuffer(io.nuls.kernel.utils.NulsByteBuffer)

Example 3 with AliasPo

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

the class AccountServiceImpl method importAccountFormKeyStore.

@Override
public Result<Account> importAccountFormKeyStore(AccountKeyStore keyStore, String password) {
    if (null == keyStore || StringUtils.isBlank(keyStore.getAddress())) {
        return Result.getFailed(AccountErrorCode.PARAMETER_ERROR);
    }
    if (!AddressTool.validAddress(keyStore.getAddress())) {
        return Result.getFailed(AccountErrorCode.ADDRESS_ERROR);
    }
    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(e.getErrorCode());
        }
        // 如果私钥生成的地址和keystore的地址不相符,说明私钥错误
        if (!account.getAddress().getBase58().equals(keyStore.getAddress())) {
            return Result.getFailed(AccountErrorCode.PRIVATE_KEY_WRONG);
        }
    } else if (null == keyStore.getPrikey() && null != keyStore.getEncryptedPrivateKey()) {
        if (!StringUtils.validPassword(password)) {
            return Result.getFailed(AccountErrorCode.PASSWORD_IS_WRONG);
        }
        try {
            priKey = AESEncrypt.decrypt(Hex.decode(keyStore.getEncryptedPrivateKey()), password);
            account = AccountTool.createAccount(Hex.encode(priKey));
        } catch (CryptoException e) {
            return Result.getFailed(AccountErrorCode.PASSWORD_IS_WRONG);
        } catch (NulsException e) {
            return Result.getFailed(e.getErrorCode());
        }
        // 如果私钥生成的地址和keystore的地址不相符,说明密码错误
        if (!account.getAddress().getBase58().equals(keyStore.getAddress())) {
            return Result.getFailed(AccountErrorCode.PASSWORD_IS_WRONG);
        }
    } else {
        return Result.getFailed(AccountErrorCode.PARAMETER_ERROR);
    }
    Alias aliasDb = null;
    if (StringUtils.isNotBlank(keyStore.getAlias())) {
        aliasDb = aliasService.getAlias(keyStore.getAlias());
    }
    if (null != aliasDb && AddressTool.getStringAddressByBytes(aliasDb.getAddress()).equals(account.getAddress().toString())) {
        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;
            }
        }
    }
    if (StringUtils.validPassword(password)) {
        try {
            account.encrypt(password);
        } catch (NulsException e) {
            Log.error(e);
            return Result.getFailed(e.getErrorCode());
        }
    }
    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 : NulsException(io.nuls.kernel.exception.NulsException) AccountPo(io.nuls.account.storage.po.AccountPo) AliasPo(io.nuls.account.storage.po.AliasPo) CryptoException(io.nuls.core.tools.crypto.Exception.CryptoException) Result(io.nuls.kernel.model.Result)

Example 4 with AliasPo

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

the class AccountServiceImpl method getAlias.

@Override
public Result<String> getAlias(String address) {
    Account account = getAccountByAddress(address);
    if (null != account) {
        return Result.getSuccess().setData(account.getAlias());
    }
    String alias = null;
    List<AliasPo> list = aliasStorageService.getAliasList().getData();
    for (AliasPo aliasPo : list) {
        if (AddressTool.getStringAddressByBytes(aliasPo.getAddress()).equals(address)) {
            alias = aliasPo.getAlias();
            break;
        }
    }
    return Result.getSuccess().setData(alias);
}
Also used : AliasPo(io.nuls.account.storage.po.AliasPo)

Example 5 with AliasPo

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

the class AccountServiceImpl method importAccount.

@Override
public Result<Account> importAccount(String prikey, String password) {
    if (!ECKey.isValidPrivteHex(prikey)) {
        return Result.getFailed(AccountErrorCode.PARAMETER_ERROR);
    }
    Account account;
    try {
        account = AccountTool.createAccount(prikey);
    } catch (NulsException e) {
        return Result.getFailed(AccountErrorCode.PRIVATE_KEY_WRONG);
    }
    if (StringUtils.validPassword(password)) {
        try {
            account.encrypt(password);
        } catch (NulsException e) {
            Log.error(e);
            return Result.getFailed(e.getErrorCode());
        }
    }
    // 扫所全网别名对比地址符合就设置
    // String alias = null;
    Account acc = getAccountByAddress(account.getAddress().toString());
    if (null == acc) {
        List<AliasPo> list = aliasStorageService.getAliasList().getData();
        for (AliasPo aliasPo : list) {
            // 如果全网别名中的地址有和当前导入的账户地址相同,则赋值别名到账户中
            if (AddressTool.getStringAddressByBytes(aliasPo.getAddress()).equals(account.getAddress().toString())) {
                account.setAlias(aliasPo.getAlias());
                break;
            }
        }
    } else {
        account.setAlias(acc.getAlias());
    }
    // Result res = accountLedgerService.importLedgerByAddress(account.getAddress().getBase58());
    // if (res.isFailed()) {
    // return res;
    // }
    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 : 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)

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