             self.listener?.handleSystemEvent(system: self, event: SystemEvent.configured)
         }
     }
+
+    ///
+    /// Create a BlockChainDB.Model.Currency to be used in the event that the BlockChainDB does
+    /// not provide its own currency model.
+    ///
+    public static func asBlockChainDBModelCurrency (uids: String, name: String, code: String, type: String, decimals: UInt8) -> BlockChainDB.Model.Currency? {
+        guard "ERC20" == type || "NATIVE" == type else { return nil }
+        return uids.firstIndex(of: ":")
+            .map {
+                let code         = code.uppercased()
+                let blockchainID = uids.prefix(upTo: $0).description
+                let address      = uids.suffix(from: $0).description
+
+                return (id:   uids,
+                        name: name,
+                        code: code,
+                        type: type,
+                        blockchainID: blockchainID,
+                        address: (address != "__native__" ? address : nil),
+                        verified: true,
+                        demoninations: [
+                            (name: "\(code)_INTEGER",
+                                code: "\(code)_INTEGER",
+                                decimals: 0,
+                                symbol: "\(code)I"),   // BRDI -> BaseUnit
+
+                            (name: code,
+                             code: code,
+                             decimals: decimals,
+                             symbol: code)])       //  BRD -> DefaultUnit
+        }
+    }
+
 
     //
     // Static Weak System References

                            let defaults = System.defaultCurrencies
                                .filter { $0.blockchainID == blockchainModel.id }

                            let currencyModels = try! currencyResult
                                // On success, always merge `defaultCurrencies`
                                .map { $0.unionOf (defaults) { $0.id }}
                                // On error, use `defaults`
                                .recover { (error: BlockChainDB.QueryError) -> [BlockChainDB.Model.Currency] in
                                    return defaults
                                }.get()

                            var associations: [Currency : Network.Association] = [:]


        managers.forEach { $0.disconnect() }
    }

    private func configureMergeBlockchains (builtin: [BlockChainDB.Model.Blockchain],
                                            remote:  [BlockChainDB.Model.Blockchain]) -> [BlockChainDB.Model.Blockchain] {
        // Both `builtin` and `remote` have a non-null blockHeight -> supported.

        // For existing remotes:
