From d7fbf2a40761c617b656e687d8d122b7d2ee63e4 Mon Sep 17 00:00:00 2001 From: David Katz <15Dkatz@shcp.edu> Date: Wed, 28 Sep 2022 12:47:00 -0700 Subject: [PATCH] Clear Blockchain Transactions --- wallet/transaction-pool.js | 16 ++++++++++++++++ wallet/transaction-pool.test.js | 34 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/wallet/transaction-pool.js b/wallet/transaction-pool.js index 4e546fb..73a3c48 100644 --- a/wallet/transaction-pool.js +++ b/wallet/transaction-pool.js @@ -5,6 +5,10 @@ class TransactionPool { this.transactionMap = {}; } + clear() { + this.transactionMap = {}; + } + setTransaction(transaction) { this.transactionMap[transaction.id] = transaction; } @@ -24,6 +28,18 @@ class TransactionPool { transaction => Transaction.validTransaction(transaction) ); } + + clearBlockchainTransactions({ chain }) { + for (let i=1; i { let transactionPool, transaction, senderWallet; @@ -70,4 +71,37 @@ describe('TransactionPool', () => { expect(errorMock).toHaveBeenCalled(); }); }); + + describe('clear()', () => { + it('clears the transactions', () => { + transactionPool.clear(); + + expect(transactionPool.transactionMap).toEqual({}); + }); + }); + + describe('clearBlockchainTransactions()', () => { + it('clears the pool of any existing blockchain transactions', () => { + const blockchain = new Blockchain(); + const expectedTransactionMap = {}; + + for (let i=0; i<6; i++) { + const transaction = new Wallet().createTransaction({ + recipient: 'foo', amount: 20 + }); + + transactionPool.setTransaction(transaction); + + if (i%2===0) { + blockchain.addBlock({ data: [transaction] }); + } else { + expectedTransactionMap[transaction.id] = transaction; + } + } + + transactionPool.clearBlockchainTransactions({ chain: blockchain.chain }); + + expect(transactionPool.transactionMap).toEqual(expectedTransactionMap); + }); + }); });