From 21c7021ec053c718ebf2c0504f7394a4d3573289 Mon Sep 17 00:00:00 2001 From: fireduck64 Date: Fri, 18 May 2018 23:00:06 -0700 Subject: [PATCH] trickle from mempool --- src/MemPool.java | 35 ++++++++++++++++++++++++++++++++++- src/SnowBlossomNode.java | 2 ++ src/SnowUserService.java | 2 +- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/MemPool.java b/src/MemPool.java index 2d1e5fb6..a45df404 100644 --- a/src/MemPool.java +++ b/src/MemPool.java @@ -80,6 +80,17 @@ public MemPool(HashedTrie utxo_hashed_trie) new Tickler().start(); } + public synchronized TransactionMempoolInfo getRandomPoolTransaction() + { + ArrayList list = new ArrayList<>(); + list.addAll(known_transactions.values()); + if (list.size() == 0) return null; + Random rnd = new Random(); + + return list.get(rnd.nextInt(list.size())); + + } + public synchronized List getTransactionsForBlock(ChainHash last_utxo, int max_size) { List block_list = new ArrayList(); @@ -240,6 +251,7 @@ public synchronized void rebuildPriorityMap(ChainHash new_utxo_root) known_transactions.remove(h); } + logger.log(Level.INFO, String.format("Remaining in mempool: %d", known_transactions.size())); } @@ -425,6 +437,13 @@ public void tickleBlocks(ChainHash utxo_root_hash) } } + private Peerage peerage = null; + + public void setPeerage(Peerage peerage) + { + this.peerage = peerage; + } + public class Tickler extends Thread { public Tickler() @@ -441,12 +460,26 @@ public void run() { synchronized(tickle_trigger) { - tickle_trigger.wait(60000); + tickle_trigger.wait(1000); } if (tickle_hash != null) { rebuildPriorityMap(tickle_hash); + tickle_hash = null; + } + else + { + if (peerage!=null) + { + TransactionMempoolInfo info = getRandomPoolTransaction(); + if (info != null) + { + peerage.broadcastTransaction(info.getTx()); + } + } + } + } catch(Throwable t) { diff --git a/src/SnowBlossomNode.java b/src/SnowBlossomNode.java index d326ed86..71f4d3c1 100644 --- a/src/SnowBlossomNode.java +++ b/src/SnowBlossomNode.java @@ -85,6 +85,8 @@ private void loadWidgets() mem_pool = new MemPool(utxo_hashed_trie); peerage = new Peerage(this); + mem_pool.setPeerage(peerage); + } private void startWidgets() diff --git a/src/SnowUserService.java b/src/SnowUserService.java index fbb38b45..bcda0e8e 100644 --- a/src/SnowUserService.java +++ b/src/SnowUserService.java @@ -223,7 +223,7 @@ public void run() { synchronized(tickle_trigger) { - tickle_trigger.wait(60000); + tickle_trigger.wait(30000); } sendNewBlocks(); }