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);
}
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);
}
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);
}
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);
}
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);
}
Aggregations