Search in sources :

Example 21 with Transaction

use of io.nuls.kernel.model.Transaction in project nuls by nuls-io.

the class UtxoAccountsServiceImpl method getInputAddress.

private byte[] getInputAddress(Coin from) {
    byte[] fromHash;
    int fromIndex;
    byte[] owner = from.getOwner();
    // owner拆分出txHash和index
    fromHash = UtxoAccountsUtil.getTxHashBytes(owner);
    fromIndex = UtxoAccountsUtil.getIndex(owner);
    NulsDigestData fromHashObj = new NulsDigestData();
    try {
        fromHashObj.parse(fromHash, 0);
        Transaction outPutTx = utxoAccountsStorageService.getTx(fromHashObj);
        return outPutTx.getCoinData().getTo().get(fromIndex).getOwner();
    } catch (NulsException e) {
        Log.error(e);
        return null;
    }
}
Also used : Transaction(io.nuls.kernel.model.Transaction) NulsException(io.nuls.kernel.exception.NulsException) NulsDigestData(io.nuls.kernel.model.NulsDigestData)

Example 22 with Transaction

use of io.nuls.kernel.model.Transaction in project nuls by nuls-io.

the class UtxoAccountsServiceImpl method buildUtxoAccountsMap.

private boolean buildUtxoAccountsMap(Map<String, UtxoAccountsBalancePo> utxoAccountsMap, Block block) {
    List<Transaction> txs = block.getTxs();
    int txIndex = 0;
    for (Transaction tx : txs) {
        try {
            if (tx.getCoinData() == null) {
                continue;
            }
            List<Coin> from = tx.getCoinData().getFrom();
            List<Coin> to = tx.getCoinData().getTo();
            for (Coin inputCoin : from) {
                byte[] inputOwner = getInputAddress(inputCoin);
                inputCoin.setOwner(inputOwner);
                buildUtxoAccountsBalance(utxoAccountsMap, inputCoin, tx, txIndex, true);
            }
            for (Coin outputCoin : to) {
                buildUtxoAccountsBalance(utxoAccountsMap, outputCoin, tx, txIndex, false);
            }
            // 若区块中得到合约转账(从合约转出)交易,这段代码应该去掉
            // 增加智能合约内部交易逻辑
            // if (tx.getType() == UtxoAccountsConstant.TX_TYPE_CALL_CONTRACT) {
            // ContractResult contractExecuteResult = contractService.getContractExecuteResult(tx.getHash());
            // List<ContractTransfer> transferList = contractExecuteResult.getTransfers();
            // buildContractTranfersBalance(utxoAccountsMap, transferList, block.getHeader().getHeight(), txIndex);
            // }
            txIndex++;
        } catch (Exception e) {
            Log.error(e);
        }
    }
    return true;
}
Also used : Coin(io.nuls.kernel.model.Coin) Transaction(io.nuls.kernel.model.Transaction) NulsException(io.nuls.kernel.exception.NulsException)

Example 23 with Transaction

use of io.nuls.kernel.model.Transaction in project nuls by nuls-io.

the class RegisterAgentProcessTest method testConflictDetect.

@Test
public void testConflictDetect() {
    assertNotNull(tx);
    assertNotNull(registerAgentProcess);
    List<Transaction> list = new ArrayList<>();
    ValidateResult result = registerAgentProcess.conflictDetect(list);
    assertTrue(result.isSuccess());
    list.add(tx);
    result = registerAgentProcess.conflictDetect(list);
    assertTrue(result.isSuccess());
    list.add(newTx());
    result = registerAgentProcess.conflictDetect(list);
    assertTrue(result.isSuccess());
    list.add(tx);
    result = registerAgentProcess.conflictDetect(list);
    assertFalse(result.isSuccess());
}
Also used : Transaction(io.nuls.kernel.model.Transaction) CreateAgentTransaction(io.nuls.consensus.poc.protocol.tx.CreateAgentTransaction) ValidateResult(io.nuls.kernel.validate.ValidateResult) ArrayList(java.util.ArrayList) Test(org.junit.Test) BaseTest(io.nuls.consensus.poc.BaseTest)

Example 24 with Transaction

use of io.nuls.kernel.model.Transaction in project nuls by nuls-io.

the class TransactionCacheStorageServiceImpl method pollTx.

@Override
public Transaction pollTx() {
    byte[] startIndexBytes = Util.intToBytes(startIndex.get());
    byte[] hashBytes = dbService.get(TRANSACTION_CACHE_KEY_NAME, startIndexBytes);
    if (hashBytes == null) {
        return null;
    }
    byte[] txBytes = dbService.get(TRANSACTION_CACHE_KEY_NAME, hashBytes);
    Transaction tx = null;
    if (null != txBytes) {
        try {
            tx = TransactionManager.getInstance(new NulsByteBuffer(txBytes, 0));
        } catch (Exception e) {
            Log.error(e);
            return null;
        }
    }
    startIndex.incrementAndGet();
    return tx;
}
Also used : Transaction(io.nuls.kernel.model.Transaction) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException) IOException(java.io.IOException) NulsException(io.nuls.kernel.exception.NulsException) NulsByteBuffer(io.nuls.kernel.utils.NulsByteBuffer)

Example 25 with Transaction

use of io.nuls.kernel.model.Transaction in project nuls by nuls-io.

the class LimitHashMapTest method test.

@Test
public void test() throws IOException {
    LimitHashMap<NulsDigestData, Transaction> map = new LimitHashMap<>(200000);
    long use = 0;
    List<NulsDigestData> hashList = new ArrayList<>();
    for (int i = 0; i < 200000; i++) {
        Transaction transaction = new TransferTransaction();
        transaction.setTime(System.currentTimeMillis());
        transaction.setHash(NulsDigestData.calcDigestData(transaction.serializeForHash()));
        hashList.add(transaction.getHash());
        long start = System.nanoTime();
        map.put(transaction.getHash(), transaction);
        use += (System.nanoTime() - start);
    }
    System.out.println("插入20万条累计用时:" + use + "纳秒");
    long start = System.currentTimeMillis();
    for (int i = 0; i < 100000; i++) {
        map.getQueue().size();
    }
    System.out.println("queue size 100000次用时:" + (System.currentTimeMillis() - start) + "ms");
    start = System.currentTimeMillis();
    for (int i = 0; i < 100000; i++) {
        map.getMap().size();
    }
    System.out.println("map size 100000次用时:" + (System.currentTimeMillis() - start) + "ms");
    start = System.currentTimeMillis();
    for (NulsDigestData key : hashList) {
        map.get(key);
    }
    System.out.println("查询200000次用时:" + (System.currentTimeMillis() - start) + "ms");
    start = System.currentTimeMillis();
    for (NulsDigestData key : hashList) {
        map.containsKey(key);
    }
    System.out.println("判断是否包含200000次用时:" + (System.currentTimeMillis() - start) + "ms");
    start = System.currentTimeMillis();
    for (NulsDigestData key : hashList) {
        map.remove(key);
    }
    System.out.println("删除200000次用时:" + (System.currentTimeMillis() - start) + "ms");
    assertTrue(true);
}
Also used : Transaction(io.nuls.kernel.model.Transaction) TransferTransaction(io.nuls.protocol.model.tx.TransferTransaction) LimitHashMap(io.nuls.cache.LimitHashMap) ArrayList(java.util.ArrayList) NulsDigestData(io.nuls.kernel.model.NulsDigestData) TransferTransaction(io.nuls.protocol.model.tx.TransferTransaction) Test(org.junit.Test)

Aggregations

Transaction (io.nuls.kernel.model.Transaction)38 NulsDigestData (io.nuls.kernel.model.NulsDigestData)12 ArrayList (java.util.ArrayList)11 Test (org.junit.Test)8 NulsException (io.nuls.kernel.exception.NulsException)7 ValidateResult (io.nuls.kernel.validate.ValidateResult)7 NulsRuntimeException (io.nuls.kernel.exception.NulsRuntimeException)6 IOException (java.io.IOException)5 HashSet (java.util.HashSet)5 Result (io.nuls.kernel.model.Result)4 TransferTransaction (io.nuls.protocol.model.tx.TransferTransaction)4 CreateAgentTransaction (io.nuls.consensus.poc.protocol.tx.CreateAgentTransaction)3 RedPunishTransaction (io.nuls.consensus.poc.protocol.tx.RedPunishTransaction)3 NulsByteBuffer (io.nuls.kernel.utils.NulsByteBuffer)3 UnconfirmedTxPo (io.nuls.account.ledger.storage.po.UnconfirmedTxPo)2 StopAgentTransaction (io.nuls.consensus.poc.protocol.tx.StopAgentTransaction)2 AgentPo (io.nuls.consensus.poc.storage.po.AgentPo)2 Coin (io.nuls.kernel.model.Coin)2 TransactionProcessor (io.nuls.kernel.processor.TransactionProcessor)2 Alias (io.nuls.account.model.Alias)1