 class OKExExchange: Exchange {
     
     private struct Constants {
-        static let ProductListAPIPath = "https://www.okex.com/v2/markets/products"
-        static let TickerAPIPathFormat = "https://www.okex.com/v2/markets/%@/ticker"
+        static let ProductListAPIPath = "https://www.okex.com/api/spot/v3/instruments"
+        static let TickerAPIPathFormat = "https://www.okex.com/api/spot/v3/instruments/%@/ticker"
     }
     
     init(delegate: ExchangeDelegate? = nil) {

                switch result {
                case .fulfilled(let value):
                    if let currencyPair = value.representedObject as? CurrencyPair {
                        let price = value.json["data"]["last"].doubleValue
                        self?.setPrice(price, for: currencyPair)
                    }
                default: break

    
    override func load() {
        super.load(from: Constants.ProductListAPIPath) {
            $0.json.arrayValue.compactMap { result in
                return CurrencyPair(
                    baseCurrency: result["base_currency"].stringValue,
                    quoteCurrency: result["quote_currency"].stringValue,
                    customCode: result["instrument_id"].stringValue
                )
            }
        }
