         // Compare the count; then compare the hash sets as equal.
         XCTAssertEqual (transfers.count, migratedTransfers.count)
         XCTAssertEqual (Set (transfers.map { $0.hash! }), Set (migratedTransfers.map { $0.hash! }))
+
+        //
+        // Produce an invalid transferBlobs and  check for a failure
+        //
+        let muckedTransferBlobs = [(bytes: [UInt8](arrayLiteral: 0, 1, 2), blockHeight: UInt32(0), timestamp: UInt32(0))]
+        let muckedListener = MigrateSystemListener (transactionBlobs: muckedTransferBlobs)
+        let muckedQuery    = system.query
+        let muckedPath     = system.path + "mucked"
+
+        let muckedSystem = System (listener: muckedListener,
+                                    account: system.account,
+                                    onMainnet: system.onMainnet,
+                                    path: muckedPath,
+                                    query: muckedQuery)
+
+        // transfers annonced on `configure`
+        muckedSystem.configure()
+        wait (for: [muckedListener.migratedManagerExpectation], timeout: 30)
+        XCTAssertTrue (muckedListener.migratedFailed)
     }
 }
 

    init (transactionBlobs: [System.TransactionBlob]) {
        self.transactionBlobs = transactionBlobs
    }

    func handleSystemEvent(system: System, event: SystemEvent) {
        switch event {


                // Migrate
                if (system.migrateRequired(network: network)) {
                    do {
                        try system.migrateStorage (network: network,
                                                   transactionBlobs: transactionBlobs,
                                                   blockBlobs: [],
                                                   peerBlobs: [])
                    }
                    catch { migratedFailed = true }
                }

                // Wallet Manager
