use of io.nuls.kernel.model.Address 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);
}
use of io.nuls.kernel.model.Address in project nuls by nuls-io.
the class AccountServiceImpl method createMultiAccount.
@Override
public Result<Address> createMultiAccount(List<String> pubkeys, int m) {
locker.lock();
try {
Script redeemScript = ScriptBuilder.createNulsRedeemScript(m, pubkeys);
Address address = new Address(NulsContext.getInstance().getDefaultChainId(), NulsContext.P2SH_ADDRESS_TYPE, SerializeUtils.sha256hash160(redeemScript.getProgram()));
MultiSigAccount account = new MultiSigAccount();
account.setAddress(address);
account.setM(m);
account.addPubkeys(pubkeys);
Result result = this.multiSigAccountStorageService.saveAccount(account.getAddress(), account.serialize());
if (result.isFailed()) {
return result;
}
return result.setData(account);
} catch (Exception e) {
Log.error(e);
throw new NulsRuntimeException(KernelErrorCode.FAILED);
} finally {
locker.unlock();
}
}
use of io.nuls.kernel.model.Address 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);
}
use of io.nuls.kernel.model.Address in project nuls by nuls-io.
the class AccountTool method createAccount.
public static Account createAccount(String prikey) throws NulsException {
ECKey key = null;
if (StringUtils.isBlank(prikey)) {
key = new ECKey();
} else {
try {
key = ECKey.fromPrivate(new BigInteger(1, Hex.decode(prikey)));
} catch (Exception e) {
throw new NulsException(AccountErrorCode.PRIVATE_KEY_WRONG, e);
}
}
Address address = new Address(NulsContext.getInstance().getDefaultChainId(), NulsContext.DEFAULT_ADDRESS_TYPE, SerializeUtils.sha256hash160(key.getPubKey()));
Account account = new Account();
account.setEncryptedPriKey(new byte[0]);
account.setAddress(address);
account.setPubKey(key.getPubKey());
account.setEcKey(key);
account.setPriKey(key.getPrivKeyBytes());
account.setCreateTime(TimeService.currentTimeMillis());
return account;
}
use of io.nuls.kernel.model.Address in project nuls by nuls-io.
the class ScriptBuilder method createP2SHOutputScript.
/**
* Creates a scriptPubKey for the given redeem script.
* 根据赎回脚本创建P2SH的锁定脚本
*/
public static Script createP2SHOutputScript(Script redeemScript) {
Address address = new Address(NulsContext.getInstance().getDefaultChainId(), NulsContext.P2SH_ADDRESS_TYPE, SerializeUtils.sha256hash160(redeemScript.getProgram()));
// byte[] hash = Utils.sha256hash160(redeemScript.getProgram());
byte[] hash = address.getAddressBytes();
return ScriptBuilder.createP2SHOutputScript(hash);
}
Aggregations