From 815f38e1d71ab4b339b30b3b535b9d8bffd28998 Mon Sep 17 00:00:00 2001 From: chadlagore Date: Tue, 25 Jul 2017 22:57:41 -0700 Subject: [PATCH] handle double spend within pool --- pool/pool.go | 5 +++++ pool/pool_test.go | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/pool/pool.go b/pool/pool.go index 66129b6..6ba7ac9 100644 --- a/pool/pool.go +++ b/pool/pool.go @@ -86,7 +86,12 @@ func (p *Pool) SetUnsafe(t *blockchain.Transaction) { } // Silently adds a transaction to the pool. +// Deletes a transaction if it exists from the same +// input hash. func (p *Pool) set(t *blockchain.Transaction) { + if txn, ok := p.ValidTransactions[t.Input.Hash]; ok { + p.Delete(txn.Transaction) + } vt := &PooledTransaction{ Transaction: t, Time: time.Now(), diff --git a/pool/pool_test.go b/pool/pool_test.go index 6710deb..5a9740f 100644 --- a/pool/pool_test.go +++ b/pool/pool_test.go @@ -121,3 +121,14 @@ func TestPop(t *testing.T) { p := New() assert.Nil(t, p.Pop()) } + +func TestSetDedupes(t *testing.T) { + p := New() + t1 := blockchain.NewTestTransaction() + t2 := blockchain.NewTestTransaction() + t1.Input.Hash = t2.Input.Hash + p.SetUnsafe(t1) + p.SetUnsafe(t2) + assert.Equal(t, p.Peek(), t2) + assert.Equal(t, p.Len(), 1) +}