Repository: ccxt/ccxt
Pull request: gemini - fetchMarketsFromApi
fixes: #16036

- Change nonce to use seconds. Even though docs recommend using milliseconds it was returning in the following error: `gemini Nonce '1669661118488' is not within 30 seconds of server time '1669661120''` 
- Change default fetchMarkets to use API, web version was failing to fetch.
- Add calls for fetchMarkets to get market details, needed to createOrders.
```
  id |    symbol |  base | quote | settle | baseId | quoteId | settleId | type | spot | margin |  swap | future | option | active | contract | linear | inverse | contractSize | expiry | expiryDatetime | strike | optionType |                            precision |                                                           limits
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1INCHUSD | 1INCH/USD | 1INCH |   USD |        |  1INCH |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
 AAVEUSD |  AAVE/USD |  AAVE |   USD |        |   AAVE |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
 ALCXUSD |  ALCX/USD |  ALCX |   USD |        |   ALCX |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |    {"leverage":{},"amount":{"min":0.00001},"price":{},"cost":{}}
  ALIUSD |   ALI/USD |   ALI |   USD |        |    ALI |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            | {"price":0.000001,"amount":0.000001} |          {"leverage":{},"amount":{"min":2},"price":{},"cost":{}}
  AMPUSD |   AMP/USD |   AMP |   USD |        |    AMP |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |         {"leverage":{},"amount":{"min":10},"price":{},"cost":{}}
 ANKRUSD |  ANKR/USD |  ANKR |   USD |        |   ANKR |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  APEUSD |   APE/USD |   APE |   USD |        |    APE |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.02},"price":{},"cost":{}}
 API3USD |  API3/USD |  API3 |   USD |        |   API3 |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.03},"price":{},"cost":{}}
  ASHUSD |   ASH/USD |   ASH |   USD |        |    ASH |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.005},"price":{},"cost":{}}
AUDIOUSD | AUDIO/USD | AUDIO |   USD |        |  AUDIO |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} | {"leverage":{},"amount":{"min":0.04999999},"price":{},"cost":{}}
 AVAXUSD |  AVAX/USD |  AVAX |   USD |        |   AVAX |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} | {"leverage":{},"amount":{"min":0.00499999},"price":{},"cost":{}}
  AXSUSD |   AXS/USD |   AXS |   USD |        |    AXS |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.003},"price":{},"cost":{}}
  BALUSD |   BAL/USD |   BAL |   USD |        |    BAL |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
  BATBTC |   BAT/BTC |   BAT |   BTC |        |    BAT |     BTC |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-8,"amount":0.000001} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
  BATETH |   BAT/ETH |   BAT |   ETH |        |    BAT |     ETH |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-7,"amount":0.000001} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
  BATUSD |   BAT/USD |   BAT |   USD |        |    BAT |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
  BCHBTC |   BCH/BTC |   BCH |   BTC |        |    BCH |     BTC |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  BCHETH |   BCH/ETH |   BCH |   ETH |        |    BCH |     ETH |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  BCHUSD |   BCH/USD |   BCH |   USD |        |    BCH |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
 BICOUSD |  BICO/USD |  BICO |   USD |        |   BICO |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.2},"price":{},"cost":{}}
  BNTUSD |   BNT/USD |   BNT |   USD |        |    BNT |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
 BONDUSD |  BOND/USD |  BOND |   USD |        |   BOND |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  BTCDAI |   BTC/DAI |   BTC |   DAI |        |    BTC |     DAI |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |         {"price":0.01,"amount":1e-8} |    {"leverage":{},"amount":{"min":0.00001},"price":{},"cost":{}}
  BTCEUR |   BTC/EUR |   BTC |   EUR |        |    BTC |     EUR |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |         {"price":0.01,"amount":1e-8} |    {"leverage":{},"amount":{"min":0.00001},"price":{},"cost":{}}
  BTCGBP |   BTC/GBP |   BTC |   GBP |        |    BTC |     GBP |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |         {"price":0.01,"amount":1e-8} |    {"leverage":{},"amount":{"min":0.00001},"price":{},"cost":{}}
 BTCGUSD |  BTC/GUSD |   BTC |  GUSD |        |    BTC |    GUSD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |         {"price":0.01,"amount":1e-8} |    {"leverage":{},"amount":{"min":0.00001},"price":{},"cost":{}}
  BTCSGD |   BTC/SGD |   BTC |   SGD |        |    BTC |     SGD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |         {"price":0.01,"amount":1e-8} |    {"leverage":{},"amount":{"min":0.00001},"price":{},"cost":{}}
  BTCUSD |   BTC/USD |   BTC |   USD |        |    BTC |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |         {"price":0.01,"amount":1e-8} |    {"leverage":{},"amount":{"min":0.00001},"price":{},"cost":{}}
 BUSDUSD |  BUSD/USD |  BUSD |   USD |        |   BUSD |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  CHZUSD |   CHZ/USD |   CHZ |   USD |        |    CHZ |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.5},"price":{},"cost":{}}
 COMPUSD |  COMP/USD |  COMP |   USD |        |   COMP |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  CRVUSD |   CRV/USD |   CRV |   USD |        |    CRV |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  CTXUSD |   CTX/USD |   CTX |   USD |        |    CTX |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.002},"price":{},"cost":{}}
 CUBEUSD |  CUBE/USD |  CUBE |   USD |        |   CUBE |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
  CVCUSD |   CVC/USD |   CVC |   USD |        |    CVC |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.2},"price":{},"cost":{}}
  DAIUSD |   DAI/USD |   DAI |   USD |        |    DAI |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 DOGEBTC |  DOGE/BTC |  DOGE |   BTC |        |   DOGE |     BTC |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |         {"price":1e-8,"amount":1e-8} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
 DOGEETH |  DOGE/ETH |  DOGE |   ETH |        |   DOGE |     ETH |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |         {"price":1e-8,"amount":1e-8} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
 DOGEUSD |  DOGE/USD |  DOGE |   USD |        |   DOGE |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  DOTUSD |   DOT/USD |   DOT |   USD |        |    DOT |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
  DPIUSD |   DPI/USD |   DPI |   USD |        |    DPI |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |     {"leverage":{},"amount":{"min":0.0006},"price":{},"cost":{}}
 EFILFIL |  EFIL/FIL |  EFIL |   FIL |        |   EFIL |     FIL |          | spot | true |  false | false |  false |  false |  false |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 ELONUSD |  ELON/USD |  ELON |   USD |        |   ELON |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-9,"amount":0.000001} |      {"leverage":{},"amount":{"min":60000},"price":{},"cost":{}}
  ENJUSD |   ENJ/USD |   ENJ |   USD |        |    ENJ |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  ENSUSD |   ENS/USD |   ENS |   USD |        |    ENS |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.002},"price":{},"cost":{}}
  ERNUSD |   ERN/USD |   ERN |   USD |        |    ERN |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.05},"price":{},"cost":{}}
  ETHBTC |   ETH/BTC |   ETH |   BTC |        |    ETH |     BTC |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  ETHDAI |   ETH/DAI |   ETH |   DAI |        |    ETH |     DAI |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  ETHEUR |   ETH/EUR |   ETH |   EUR |        |    ETH |     EUR |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  ETHGBP |   ETH/GBP |   ETH |   GBP |        |    ETH |     GBP |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
 ETHGUSD |  ETH/GUSD |   ETH |  GUSD |        |    ETH |    GUSD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  ETHSGD |   ETH/SGD |   ETH |   SGD |        |    ETH |     SGD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  ETHUSD |   ETH/USD |   ETH |   USD |        |    ETH |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  EULUSD |   EUL/USD |   EUL |   USD |        |    EUL |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.03},"price":{},"cost":{}}
  FETUSD |   FET/USD |   FET |   USD |        |    FET |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 FIDAUSD |  FIDA/USD |  FIDA |   USD |        |   FIDA |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.06},"price":{},"cost":{}}
  FILUSD |   FIL/USD |   FIL |   USD |        |    FIL |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 FRAXUSD |  FRAX/USD |  FRAX |   USD |        |   FRAX |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  FTMUSD |   FTM/USD |   FTM |   USD |        |    FTM |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.03},"price":{},"cost":{}}
  FXSUSD |   FXS/USD |   FXS |   USD |        |    FXS |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.006},"price":{},"cost":{}}
 GALAUSD |  GALA/USD |  GALA |   USD |        |   GALA |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.4},"price":{},"cost":{}}
  GALUSD |   GAL/USD |   GAL |   USD |        |    GAL |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.04},"price":{},"cost":{}}
  GFIUSD |   GFI/USD |   GFI |   USD |        |    GFI |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.04},"price":{},"cost":{}}
  GMTUSD |   GMT/USD |   GMT |   USD |        |    GMT |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  GRTUSD |   GRT/USD |   GRT |   USD |        |    GRT |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 GUSDGBP |  GUSD/GBP |  GUSD |   GBP |        |   GUSD |     GBP |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |      {"price":0.001,"amount":0.0001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 GUSDSGD |  GUSD/SGD |  GUSD |   SGD |        |   GUSD |     SGD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 GUSDUSD |  GUSD/USD |  GUSD |   USD |        |   GUSD |     USD |          | spot | true |  false | false |  false |  false |  false |    false |        |         |              |        |                |        |            |         {"price":0.01,"amount":0.01} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
  IMXUSD |   IMX/USD |   IMX |   USD |        |    IMX |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
INDEXUSD | INDEX/USD | INDEX |   USD |        |  INDEX |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.02},"price":{},"cost":{}}
  INJUSD |   INJ/USD |   INJ |   USD |        |    INJ |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
 IOTXUSD |  IOTX/USD |  IOTX |   USD |        |   IOTX |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            | {"price":0.000001,"amount":0.000001} |          {"leverage":{},"amount":{"min":3},"price":{},"cost":{}}
  JAMUSD |   JAM/USD |   JAM |   USD |        |    JAM |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-7,"amount":0.000001} |         {"leverage":{},"amount":{"min":10},"price":{},"cost":{}}
  KNCUSD |   KNC/USD |   KNC |   USD |        |    KNC |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 KP3RUSD |  KP3R/USD |  KP3R |   USD |        |   KP3R |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |     {"leverage":{},"amount":{"min":0.0001},"price":{},"cost":{}}
  LDOUSD |   LDO/USD |   LDO |   USD |        |    LDO |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.02},"price":{},"cost":{}}
 LINKBTC |  LINK/BTC |  LINK |   BTC |        |   LINK |     BTC |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-8,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 LINKETH |  LINK/ETH |  LINK |   ETH |        |   LINK |     ETH |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-7,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 LINKUSD |  LINK/USD |  LINK |   USD |        |   LINK |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  LPTUSD |   LPT/USD |   LPT |   USD |        |    LPT |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
 LQTYUSD |  LQTY/USD |  LQTY |   USD |        |   LQTY |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.03},"price":{},"cost":{}}
  LRCUSD |   LRC/USD |   LRC |   USD |        |    LRC |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  LTCBCH |   LTC/BCH |   LTC |   BCH |        |    LTC |     BCH |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.0001,"amount":0.00001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
  LTCBTC |   LTC/BTC |   LTC |   BTC |        |    LTC |     BTC |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |      {"price":1e-7,"amount":0.00001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
  LTCETH |   LTC/ETH |   LTC |   ETH |        |    LTC |     ETH |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.00001,"amount":0.00001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
  LTCUSD |   LTC/USD |   LTC |   USD |        |    LTC |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |      {"price":0.01,"amount":0.00001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
 LUNAUSD |  LUNA/USD |  LUNA |   USD |        |   LUNA |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-8,"amount":0.000001} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
 LUSDUSD |  LUSD/USD |  LUSD |   USD |        |   LUSD |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 MANAUSD |  MANA/USD |  MANA |   USD |        |   MANA |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
 MASKUSD |  MASK/USD |  MASK |   USD |        |   MASK |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
MATICUSD | MATIC/USD | MATIC |   USD |        |  MATIC |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 MCO2USD |  MCO2/USD |  MCO2 |   USD |        |   MCO2 |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.02},"price":{},"cost":{}}
   MCUSD |    MC/USD |    MC |   USD |        |     MC |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
METISUSD | METIS/USD | METIS |   USD |        |  METIS |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |     {"leverage":{},"amount":{"min":0.0007},"price":{},"cost":{}}
  MIMUSD |   MIM/USD |   MIM |   USD |        |    MIM |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  MIRUSD |   MIR/USD |   MIR |   USD |        |    MIR |     USD |          | spot | true |  false | false |  false |  false |  false |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  MKRUSD |   MKR/USD |   MKR |   USD |        |    MKR |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  MPLUSD |   MPL/USD |   MPL |   USD |        |    MPL |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.007},"price":{},"cost":{}}
  NMRUSD |   NMR/USD |   NMR |   USD |        |    NMR |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.003},"price":{},"cost":{}}
 ORCAUSD |  ORCA/USD |  ORCA |   USD |        |   ORCA |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.05},"price":{},"cost":{}}
  OXTBTC |   OXT/BTC |   OXT |   BTC |        |    OXT |     BTC |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-8,"amount":0.000001} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
  OXTETH |   OXT/ETH |   OXT |   ETH |        |    OXT |     ETH |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-7,"amount":0.000001} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
  OXTUSD |   OXT/USD |   OXT |   USD |        |    OXT |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
 PAXGUSD |  PAXG/USD |  PAXG |   USD |        |   PAXG |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |         {"price":0.01,"amount":1e-8} |     {"leverage":{},"amount":{"min":0.0001},"price":{},"cost":{}}
  PLAUSD |   PLA/USD |   PLA |   USD |        |    PLA |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.3},"price":{},"cost":{}}
  QNTUSD |   QNT/USD |   QNT |   USD |        |    QNT |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |     {"leverage":{},"amount":{"min":0.0004},"price":{},"cost":{}}
 QRDOUSD |  QRDO/USD |  QRDO |   USD |        |   QRDO |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.04},"price":{},"cost":{}}
  RADUSD |   RAD/USD |   RAD |   USD |        |    RAD |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
 RAREUSD |  RARE/USD |  RARE |   USD |        |   RARE |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  RAYUSD |   RAY/USD |   RAY |   USD |        |    RAY |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.03},"price":{},"cost":{}}
  RBNUSD |   RBN/USD |   RBN |   USD |        |    RBN |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.07},"price":{},"cost":{}}
  RENUSD |   REN/USD |   REN |   USD |        |    REN |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 REVVUSD |  REVV/USD |  REVV |   USD |        |   REVV |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
  RLYUSD |   RLY/USD |   RLY |   USD |        |    RLY |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.2},"price":{},"cost":{}}
 RNDRUSD |  RNDR/USD |  RNDR |   USD |        |   RNDR |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.02},"price":{},"cost":{}}
 SAMOUSD |  SAMO/USD |  SAMO |   USD |        |   SAMO |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-7,"amount":0.000001} |         {"leverage":{},"amount":{"min":10},"price":{},"cost":{}}
 SANDUSD |  SAND/USD |  SAND |   USD |        |   SAND |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  SBRUSD |   SBR/USD |   SBR |   USD |        |    SBR |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            | {"price":0.000001,"amount":0.000001} |          {"leverage":{},"amount":{"min":1},"price":{},"cost":{}}
 SHIBUSD |  SHIB/USD |  SHIB |   USD |        |   SHIB |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-9,"amount":0.000001} |       {"leverage":{},"amount":{"min":1000},"price":{},"cost":{}}
  SKLUSD |   SKL/USD |   SKL |   USD |        |    SKL |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  SLPUSD |   SLP/USD |   SLP |   USD |        |    SLP |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.5},"price":{},"cost":{}}
  SNXUSD |   SNX/USD |   SNX |   USD |        |    SNX |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
  SOLUSD |   SOL/USD |   SOL |   USD |        |    SOL |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
SPELLUSD | SPELL/USD | SPELL |   USD |        |  SPELL |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-7,"amount":0.000001} |          {"leverage":{},"amount":{"min":5},"price":{},"cost":{}}
STORJUSD | STORJ/USD | STORJ |   USD |        |  STORJ |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
SUSHIUSD | SUSHI/USD | SUSHI |   USD |        |  SUSHI |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
 TOKEUSD |  TOKE/USD |  TOKE |   USD |        |   TOKE |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.002},"price":{},"cost":{}}
  TRUUSD |   TRU/USD |   TRU |   USD |        |    TRU |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.8},"price":{},"cost":{}}
  UMAUSD |   UMA/USD |   UMA |   USD |        |    UMA |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
  UNIUSD |   UNI/USD |   UNI |   USD |        |    UNI |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.01},"price":{},"cost":{}}
 USDCUSD |  USDC/USD |  USDC |   USD |        |   USDC |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
  USTUSD |   UST/USD |   UST |   USD |        |    UST |     USD |          | spot | true |  false | false |  false |  false |  false |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
 WCFGUSD |  WCFG/USD |  WCFG |   USD |        |   WCFG |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} | {"leverage":{},"amount":{"min":0.04999999},"price":{},"cost":{}}
  XTZUSD |   XTZ/USD |   XTZ |   USD |        |    XTZ |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |       {"leverage":{},"amount":{"min":0.02},"price":{},"cost":{}}
  YFIUSD |   YFI/USD |   YFI |   USD |        |    YFI |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |    {"leverage":{},"amount":{"min":0.00001},"price":{},"cost":{}}
  ZBCUSD |   ZBC/USD |   ZBC |   USD |        |    ZBC |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |          {"leverage":{},"amount":{"min":3},"price":{},"cost":{}}
  ZECBCH |   ZEC/BCH |   ZEC |   BCH |        |    ZEC |     BCH |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |   {"price":0.0001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  ZECBTC |   ZEC/BTC |   ZEC |   BTC |        |    ZEC |     BTC |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":1e-7,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  ZECETH |   ZEC/ETH |   ZEC |   ETH |        |    ZEC |     ETH |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  ZECLTC |   ZEC/LTC |   ZEC |   LTC |        |    ZEC |     LTC |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |    {"price":0.001,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  ZECUSD |   ZEC/USD |   ZEC |   USD |        |    ZEC |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |     {"price":0.01,"amount":0.000001} |      {"leverage":{},"amount":{"min":0.001},"price":{},"cost":{}}
  ZRXUSD |   ZRX/USD |   ZRX |   USD |        |    ZRX |     USD |          | spot | true |  false | false |  false |  false |   true |    false |        |         |              |        |                |        |            |  {"price":0.00001,"amount":0.000001} |        {"leverage":{},"amount":{"min":0.1},"price":{},"cost":{}}
142 objects
```
Test createOrder
```python
gemini.createOrder(LTC/BTC,limit,sell,0.1,0.005)
{'amount': 0.1,
 'average': None,
 'clientOrderId': '1669660894305',
 'cost': 0.0,
 'datetime': '2022-11-28T18:41:36.614Z',
 'fee': None,
 'fees': [],
 'filled': 0.0,
 'id': '154364294857',
 'info': {'avg_execution_price': '0',
          'client_order_id': '1669660894305',
          'exchange': 'gemini',
          'executed_amount': '0',
          'id': '154364294857',
          'is_cancelled': False,
          'is_hidden': False,
          'is_live': True,
          'options': [],
          'order_id': '154364294857',
          'original_amount': '0.1',
          'price': '0.005',
          'remaining_amount': '0.1',
          'side': 'sell',
          'symbol': 'ltcbtc',
          'timestamp': '1669660896',
          'timestampms': '1669660896614',
          'type': 'exchange limit',
          'was_forced': False},
 'lastTradeTimestamp': None,
 'postOnly': False,
 'price': 0.005,
 'remaining': 0.1,
 'side': 'sell',
 'status': 'open',
 'stopPrice': None,
 'symbol': 'ltcbtc',
 'timeInForce': 'GTC',
 'timestamp': 1669660896614,
 'trades': [],
 'type': 'limit'}
 ```

Problem statement:
Gemini get exchange balance got errors
- OS: Windows 10 PRO (22H2)
- Programming Language version: Node.js (Ver 19.2.0)
- CCXT version: 2.2.91

```js
const ccxt = require('ccxt');
console.log(ccxt.version);

let exchange = new ccxt.gemini({
    apiKey: 'My_Account_API_Key',
    secret: 'My_Account_Secret_Key',
    'options': {
        'adjustForTimeDifference': true,
        'fetchCurrencies': true,
        'verbose': true,
    }
});

async function getExchangeBalance() {
    try {
        const balance = await exchange.fetchBalance();
        console.log(balance);
    } catch (err) {
        console.error(err)
    }
};
getExchangeBalance();
```

```
C:\ArbitApps\CCXT\CCXTNodeByFunctions>node gemini_getExchangeBalance.js
2.2.91
InvalidNonce: gemini Nonce '1670623439828' is not within 30 seconds of server time '1670623440''
    at gemini.throwExactlyMatchedException (C:\ArbitApps\CCXT\CCXTNodeByFunctions\node_modules\ccxt\js\base\Exchange.js:2351:19)
    at gemini.handleErrors (C:\ArbitApps\CCXT\CCXTNodeByFunctions\node_modules\ccxt\js\gemini.js:1503:18)
    at C:\ArbitApps\CCXT\CCXTNodeByFunctions\node_modules\ccxt\js\base\Exchange.js:600:51
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async timeout (C:\ArbitApps\CCXT\CCXTNodeByFunctions\node_modules\ccxt\js\base\functions\time.js:181:20)
    at async gemini.fetch2 (C:\ArbitApps\CCXT\CCXTNodeByFunctions\node_modules\ccxt\js\base\Exchange.js:1995:16)
    at async gemini.request (C:\ArbitApps\CCXT\CCXTNodeByFunctions\node_modules\ccxt\js\base\Exchange.js:1999:16)
    at async gemini.fetchBalance (C:\ArbitApps\CCXT\CCXTNodeByFunctions\node_modules\ccxt\js\gemini.js:847:26)
    at async getExchangeBalance (C:\ArbitApps\CCXT\CCXTNodeByFunctions\gemini_getExchangeBalance.js:18:17) {
  constructor: [class InvalidNonce extends NetworkError]
```

Hello,
I just open an account with gemini and create my account API keys.
I did some testing, to get exchange account balance for all tokens, I got some errors.
I synchronize my PC clock with NTP time server.
But I still got the same error.
Any idea on how to fix this?

Thanks

Hints from issue discussion:

Commit message: gemini - fetchMarketsFromApi

Patch to review:
diff --git a/js/gemini.js b/js/gemini.js
index 7fe6229d81250..a7c23fe828ba4 100644
--- a/js/gemini.js
+++ b/js/gemini.js
@@ -232,7 +232,7 @@ module.exports = class gemini extends Exchange {
                 },
             },
             'options': {
-                'fetchMarketsMethod': 'fetch_markets_from_web',
+                'fetchMarketsMethod': 'fetch_markets_from_api',
                 'fetchTickerMethod': 'fetchTickerV1', // fetchTickerV1, fetchTickerV2, fetchTickerV1AndV2
                 'networkIds': {
                     'bitcoin': 'BTC',
@@ -371,6 +371,17 @@ module.exports = class gemini extends Exchange {
         return result;
     }
 
+    parseMarketActive (status) {
+        const statuses = {
+            'open': true,
+            'closed': false,
+            'cancel_only': true,
+            'post_only': true,
+            'limit_only': true,
+        };
+        return this.safeValue (statuses, status, true);
+    }
+
     async fetchMarketsFromAPI (params = {}) {
         const response = await this.publicGetV1Symbols (params);
         //
@@ -381,14 +392,37 @@ module.exports = class gemini extends Exchange {
         //     ]
         //
         const result = [];
+        let promises = [];
         for (let i = 0; i < response.length; i++) {
-            const marketId = response[i];
-            const market = marketId;
-            const idLength = marketId.length - 0;
-            const baseId = marketId.slice (0, idLength - 3);
-            const quoteId = marketId.slice (idLength - 3, idLength);
+            let marketId = response[i];
+            marketId = marketId.toUpperCase ();
+            const method = 'publicGetV1SymbolsDetailsSymbol';
+            const request = {
+                'symbol': marketId,
+            };
+            //
+            //     {
+            //         "symbol": "BTCUSD",
+            //         "base_currency": "BTC",
+            //         "quote_currency": "USD",
+            //         "tick_size": 1E-8,
+            //         "quote_increment": 0.01,
+            //         "min_order_size": "0.00001",
+            //         "status": "open",
+            //         "wrap_enabled": false
+            //     }
+            //
+            promises.push (this[method] (this.extend (request, params)));
+        }
+        promises = await Promise.all (promises);
+        for (let i = 0; i < promises.length; i++) {
+            const response = promises[i];
+            const marketId = this.safeString (response, 'symbol');
+            const baseId = this.safeString (response, 'base_currency');
             const base = this.safeCurrencyCode (baseId);
+            const quoteId = this.safeString (response, 'quote_currency');
             const quote = this.safeCurrencyCode (quoteId);
+            const status = this.safeString (response, 'status');
             result.push ({
                 'id': marketId,
                 'symbol': base + '/' + quote,
@@ -404,7 +438,7 @@ module.exports = class gemini extends Exchange {
                 'swap': false,
                 'future': false,
                 'option': false,
-                'active': undefined,
+                'active': this.parseMarketActive (status),
                 'contract': false,
                 'linear': undefined,
                 'inverse': undefined,
@@ -414,8 +448,8 @@ module.exports = class gemini extends Exchange {
                 'strike': undefined,
                 'optionType': undefined,
                 'precision': {
-                    'price': undefined,
-                    'amount': undefined,
+                    'price': this.safeNumber (response, 'quote_increment'),
+                    'amount': this.safeNumber (response, 'tick_size'),
                 },
                 'limits': {
                     'leverage': {
@@ -423,7 +457,7 @@ module.exports = class gemini extends Exchange {
                         'max': undefined,
                     },
                     'amount': {
-                        'min': undefined,
+                        'min': this.safeNumber (response, 'min_order_size'),
                         'max': undefined,
                     },
                     'price': {
@@ -435,7 +469,7 @@ module.exports = class gemini extends Exchange {
                         'max': undefined,
                     },
                 },
-                'info': market,
+                'info': response,
             });
         }
         return result;
@@ -1317,7 +1351,7 @@ module.exports = class gemini extends Exchange {
     }
 
     nonce () {
-        return this.milliseconds ();
+        return this.seconds ();
     }
 
     async fetchTransactions (code = undefined, since = undefined, limit = undefined, params = {}) {


Code review comments:
diff_hunk: @@ -381,14 +392,37 @@ module.exports = class gemini extends Exchange {
         //     ]
         //
         const result = [];
+        let promises = [];
         for (let i = 0; i < response.length; i++) {
-            const marketId = response[i];
-            const market = marketId;
-            const idLength = marketId.length - 0;
-            const baseId = marketId.slice (0, idLength - 3);
-            const quoteId = marketId.slice (idLength - 3, idLength);
+            let marketId = response[i];
+            marketId = marketId.toUpperCase ();
+            const method = 'publicGetV1SymbolsDetailsSymbol';
+            const request = {
+                'symbol': marketId,
+            };
+            //
+            //     {
+            //         "symbol": "BTCUSD",
+            //         "base_currency": "BTC",
+            //         "quote_currency": "USD",
+            //         "tick_size": 1E-8,
+            //         "quote_increment": 0.01,
+            //         "min_order_size": "0.00001",
+            //         "status": "open",
+            //         "wrap_enabled": false
+            //     }
+            //
+            promises.push (this[method] (this.extend (request, params)));
+        }
+        promises = await Promise.all (promises);
+        for (let i = 0; i < promises.length; i++) {
path: js/gemini.js
text: @user1:
@author Unfortunately I don't think we can afford 142 requests in a single call, it is too much. We should either load only the symbols  (base + quote) using `publicGetV1Symbols` or hardcode the values in options and use it. 

@author:
@user1 hehe I had a feeling you might say that. However we do need the details like the precision to do things like create an order. In my opinion I think it's better having a heavier call than introducing another option that the user has to be aware of, but let me know if you think it's the way to go and I can add it.


@user1:
@author the thing is, some users might be using paid proxies and stuff like that and we don't want to bust their limits just to load markets. Btw, how does this related to the `watchOrders` problem? We were scraping the markets, right? it's not pretty I know but I don't understand why it impacts the WS functionality 

@author:
@user1 The watchOrders I was getting a Network error when using the scrapper to fetchMarkets, that's what made me look into this. I'll look more into why the scrapper wasn't working and allow the passing the symbols as an option when using the API

@author:
@user1, I added the option to fetchDetails for all symbols or to select them by marketId.
Also the web scrapper does seem to work for me, it's just not very realiable, leading to failed fetch of the url around half of the times.

@user1:
@author, what is the reason behind the failure? If it fails 50% of the time, what if we added a retry mechanism?

@author:
I'm not too sure, fetch throws an internal `fetch failed` due to `TypeError` by nodejs/undici. I tried to search a little about it and seems to disappear when I switch to node v16

@user1:
@author but just in case, can we add the retry mechanism? I mean, if it works after 2 tries still offsets the alternative by 140 requests

@user1:
@author can you check this comment plssss ⬆️ 

@author:
Hi @user1 , I looked more into this, because I wanted to see if there was a cleaner solution to the retry.
It looks like it only happens in the latest 19 version of node due to a bug in undici. And a fix will be released very soon (https://github.com/nodejs/undici/issues/1776)
In node  v16 and v18 LTS it works fine, also in php and python. So not sure it's worth adding the retry, thoughts?


@user1:
Hey @author, thanks for checking it out,

I still think we should add the re-try because people might stick with buggy versions for a long time, and I don't think it's hard to do just a while loop and a try catch.