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