         }
     }
 
-    private func stopWaitingForSend() {
+    private func stopWaitingForSend(completion: (() -> Void)? = nil) {
         DispatchQueue.main.async {
             self.pendingGasEstimate = nil
             self.pendingSend = nil
             self.sendTimeoutTimer = nil
+            completion?()
         }
     }
 }

    func handleTransferEvent(ewm: EthereumWalletManager, wallet: EthereumWallet, transfer: EthereumTransfer, event: EthereumTransferEvent) {
        print("[EWM] \(transfer.currency.code) transfer \(transfer.hash) event: \(event)")

        if let pendingGasEstimate = pendingGasEstimate, pendingGasEstimate.tx.identifier == transfer.identifier, event == .gasEstimateUpdated {
            //print("  ↳ gas estimate updated: \(transfer.gasLimit)")
            stopWaitingForSend()
            pendingGasEstimate.completion(.success)
            return
        }

        if let pendingSend = pendingSend, transfer.hash == pendingSend.tx.hash {

        if let gasLimit = pendingGasEstimate?.gasEstimate {
            print("[EWM] using specified gas estimate for \(transfer.currency.code) transfer (\(transfer.hash)): \(gasLimit.string(decimals: 10))")
            completion(gasLimit.hexString)
            return
        }

