Search in sources :

Example 6 with Alias

use of io.nuls.account.model.Alias in project nuls by nuls-io.

the class AliasServiceTest method saveAlias.

@Test
public void saveAlias() {
    List<Account> accounts = accountService.createAccount(1, "nuls123456").getData();
    Account account = accounts.get(0);
    Alias alias = new Alias(account.getAddress().getAddressBytes(), "lichao");
    try {
        assertTrue(aliasService.saveAlias(new AliasPo(alias)).isSuccess());
    } catch (NulsException e) {
        e.printStackTrace();
    }
}
Also used : Account(io.nuls.account.model.Account) Alias(io.nuls.account.model.Alias) NulsException(io.nuls.kernel.exception.NulsException) AliasPo(io.nuls.account.storage.po.AliasPo) Test(org.junit.Test)

Example 7 with Alias

use of io.nuls.account.model.Alias in project nuls by nuls-io.

the class AliasService method getAliasFee.

/**
 * 获取设置别名交易手续费
 * Gets to set the alias transaction fee
 *
 * @param address
 * @param aliasName
 * @return
 */
public Result<Na> getAliasFee(String address, String aliasName) {
    if (!AddressTool.validAddress(address)) {
        Result.getFailed(AccountErrorCode.ADDRESS_ERROR);
    }
    Account account = accountService.getAccount(address).getData();
    if (null == account) {
        return Result.getFailed(AccountErrorCode.ACCOUNT_NOT_EXIST);
    }
    if (!account.isOk()) {
        return Result.getFailed(AccountErrorCode.IMPORTING_ACCOUNT);
    }
    byte[] addressBytes = account.getAddress().getAddressBytes();
    try {
        // 创建一笔设置别名的交易
        AliasTransaction tx = new AliasTransaction();
        tx.setTime(TimeService.currentTimeMillis());
        Alias alias = new Alias(addressBytes, aliasName);
        tx.setTxData(alias);
        CoinDataResult coinDataResult = accountLedgerService.getCoinData(addressBytes, AccountConstant.ALIAS_NA, tx.size(), TransactionFeeCalculator.OTHER_PRICE_PRE_1024_BYTES);
        if (!coinDataResult.isEnough()) {
            return Result.getFailed(AccountErrorCode.INSUFFICIENT_BALANCE);
        }
        CoinData coinData = new CoinData();
        coinData.setFrom(coinDataResult.getCoinList());
        Coin change = coinDataResult.getChange();
        if (null != change) {
            // 创建toList
            List<Coin> toList = new ArrayList<>();
            toList.add(change);
            coinData.setTo(toList);
        }
        Coin coin = new Coin(NulsConstant.BLACK_HOLE_ADDRESS, Na.parseNuls(1), 0);
        coinData.addTo(coin);
        tx.setCoinData(coinData);
        Na fee = TransactionFeeCalculator.getMaxFee(tx.size());
        return Result.getSuccess().setData(fee);
    } catch (Exception e) {
        Log.error(e);
        return Result.getFailed(KernelErrorCode.SYS_UNKOWN_EXCEPTION);
    }
}
Also used : Account(io.nuls.account.model.Account) MultiSigAccount(io.nuls.account.model.MultiSigAccount) AliasTransaction(io.nuls.account.tx.AliasTransaction) Alias(io.nuls.account.model.Alias) ArrayList(java.util.ArrayList) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult) IOException(java.io.IOException) NulsException(io.nuls.kernel.exception.NulsException)

Example 8 with Alias

use of io.nuls.account.model.Alias in project nuls by nuls-io.

the class AliasTxProcessor method conflictDetect.

/**
 * 冲突检测
 * 1.检测一个acount只能设置一个别名
 * 2.检查是否多个交易设置了同样的别名
 * conflictDetect
 * 1.Detecting an acount can only set one alias.
 * 2.Check if multiple aliasTransaction have the same alias.
 *
 * @param txList 需要检查的交易列表/A list of transactions to be checked.
 */
@Override
public ValidateResult conflictDetect(List<Transaction> txList) {
    if (null == txList || txList.isEmpty()) {
        return ValidateResult.getSuccessResult();
    }
    Set<String> aliasNames = new HashSet<>();
    Set<String> accountAddress = new HashSet<>();
    List<AliasPo> polist = this.aliasService.getAllAlias();
    for (AliasPo po : polist) {
        aliasNames.add(po.getAlias());
        accountAddress.add(Hex.encode(po.getAddress()));
    }
    for (Transaction transaction : txList) {
        if (transaction.getType() == AccountConstant.TX_TYPE_ACCOUNT_ALIAS) {
            AliasTransaction aliasTransaction = (AliasTransaction) transaction;
            Alias alias = aliasTransaction.getTxData();
            if (!aliasNames.add(alias.getAlias())) {
                return (ValidateResult) ValidateResult.getFailedResult(getClass().getName(), AccountErrorCode.ALIAS_CONFLICT).setData(aliasTransaction);
            }
            if (!accountAddress.add(Hex.encode(alias.getAddress()))) {
                return (ValidateResult) ValidateResult.getFailedResult(getClass().getName(), AccountErrorCode.ACCOUNT_ALREADY_SET_ALIAS).setData(aliasTransaction);
            }
        }
    }
    return ValidateResult.getSuccessResult();
}
Also used : AliasTransaction(io.nuls.account.tx.AliasTransaction) Transaction(io.nuls.kernel.model.Transaction) AliasTransaction(io.nuls.account.tx.AliasTransaction) Alias(io.nuls.account.model.Alias) ValidateResult(io.nuls.kernel.validate.ValidateResult) AliasPo(io.nuls.account.storage.po.AliasPo) HashSet(java.util.HashSet)

Aggregations

Alias (io.nuls.account.model.Alias)8 NulsException (io.nuls.kernel.exception.NulsException)7 AliasTransaction (io.nuls.account.tx.AliasTransaction)6 CoinDataResult (io.nuls.account.ledger.model.CoinDataResult)5 Account (io.nuls.account.model.Account)5 IOException (java.io.IOException)5 ArrayList (java.util.ArrayList)5 MultiSigAccount (io.nuls.account.model.MultiSigAccount)4 AliasPo (io.nuls.account.storage.po.AliasPo)3 ECKey (io.nuls.core.tools.crypto.ECKey)3 ValidateResult (io.nuls.kernel.validate.ValidateResult)2 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 NulsByteBuffer (io.nuls.kernel.utils.NulsByteBuffer)1 HashSet (java.util.HashSet)1 Test (org.junit.Test)1