Repository: eth-brownie/brownie
Issue: Confirmation output is not shown on an automatically replaced transaction

### What was wrong?
When using a gas strategy for automatic tx replacement, if the original transaction is replaced, there is no console output upon confirmation of the replacement transaction.

### How can it be fixed?
I think the replacement tx is being marked as silent? Need to take a look at this.  The fix should be fairly straightforward.

Changed files:
brownie/network/state.py, brownie/network/transaction.py, brownie/network/gas/bases.py, brownie/network/account.py

diff --git a/brownie/network/account.py b/brownie/network/account.py
index faa976eb..e7e5660e 100644
--- a/brownie/network/account.py
+++ b/brownie/network/account.py
@@ -661,6 +661,7 @@ class _PrivateKeyAccount(PublicKeyAccount):
             gas_strategy.run(receipt, gas_iter)  # type: ignore
 
         if required_confs == 0:
+            # set 0-conf tx's as silent to hide the confirmation output
             receipt._silent = True
             return receipt
 
diff --git a/brownie/network/gas/bases.py b/brownie/network/gas/bases.py
index e83a57ca..7286ba75 100644
--- a/brownie/network/gas/bases.py
+++ b/brownie/network/gas/bases.py
@@ -47,6 +47,11 @@ class ScalingGasABC(GasABC):
         raise NotImplementedError
 
     def _loop(self, receipt: Any, gas_iter: Iterator) -> None:
+        # retain the initial `silent` setting - tx's with required_confs=0 are set to
+        # silent prior to confirmation, so if we don't do this the console output is
+        # silenced by the 2nd replacement
+        silent = receipt._silent
+
         while web3.eth.getTransactionCount(str(receipt.sender)) < receipt.nonce:
             # do not run scaling strategy while prior tx's are still pending
             time.sleep(5)
@@ -60,7 +65,7 @@ class ScalingGasABC(GasABC):
                 gas_price = next(gas_iter)
                 if gas_price >= int(receipt.gas_price * 1.1):
                     try:
-                        receipt = receipt.replace(gas_price=gas_price)
+                        receipt = receipt.replace(gas_price=gas_price, silent=silent)
                         latest_interval = self.interval()
                     except ValueError:
                         pass
diff --git a/brownie/network/state.py b/brownie/network/state.py
index f92ed08f..199daf0d 100644
--- a/brownie/network/state.py
+++ b/brownie/network/state.py
@@ -74,7 +74,8 @@ class TxHistory(metaclass=_Singleton):
         self._list = [i for i in self._list if i.block_number <= height]
 
     def _add_tx(self, tx: TransactionReceipt) -> None:
-        self._list.append(tx)
+        if tx not in self._list:
+            self._list.append(tx)
 
     def clear(self) -> None:
         self._list.clear()
diff --git a/brownie/network/transaction.py b/brownie/network/transaction.py
index 78de51a6..93c2a478 100644
--- a/brownie/network/transaction.py
+++ b/brownie/network/transaction.py
@@ -315,7 +315,7 @@ class TransactionReceipt:
             raise ValueError("Transaction has already confirmed")
 
         if increment is not None:
-            gas_price = Wei(self.gas_price * 1.1)
+            gas_price = Wei(self.gas_price * increment)
 
         if silent is None:
             silent = self._silent