Search in sources :

Example 1 with Address

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);
}
Also used : Script(io.nuls.kernel.script.Script) Address(io.nuls.kernel.model.Address) IOException(java.io.IOException) Result(io.nuls.kernel.model.Result)

Example 2 with Address

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();
    }
}
Also used : Script(io.nuls.kernel.script.Script) Address(io.nuls.kernel.model.Address) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException) CryptoException(io.nuls.core.tools.crypto.Exception.CryptoException) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException) SignatureException(java.security.SignatureException) IOException(java.io.IOException) NulsException(io.nuls.kernel.exception.NulsException) Result(io.nuls.kernel.model.Result)

Example 3 with Address

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);
}
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 4 with Address

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;
}
Also used : Account(io.nuls.account.model.Account) Address(io.nuls.kernel.model.Address) NulsException(io.nuls.kernel.exception.NulsException) BigInteger(java.math.BigInteger) ECKey(io.nuls.core.tools.crypto.ECKey) NulsException(io.nuls.kernel.exception.NulsException)

Example 5 with Address

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);
}
Also used : Address(io.nuls.kernel.model.Address)

Aggregations

Address (io.nuls.kernel.model.Address)10 NulsException (io.nuls.kernel.exception.NulsException)4 Result (io.nuls.kernel.model.Result)4 IOException (java.io.IOException)3 Account (io.nuls.account.model.Account)2 ECKey (io.nuls.core.tools.crypto.ECKey)2 CryptoException (io.nuls.core.tools.crypto.Exception.CryptoException)2 NulsRuntimeException (io.nuls.kernel.exception.NulsRuntimeException)2 Script (io.nuls.kernel.script.Script)2 BigInteger (java.math.BigInteger)2 SignatureException (java.security.SignatureException)2 AccountPo (io.nuls.account.storage.po.AccountPo)1 AliasPo (io.nuls.account.storage.po.AliasPo)1 ContractAddressInfoPo (io.nuls.contract.storage.po.ContractAddressInfoPo)1 LedgerUtil.asString (io.nuls.ledger.util.LedgerUtil.asString)1 Test (org.junit.Test)1