class GeminiAccountServiceRaw extends GeminiBaseService {

  protected final List<Instrument> allCurrencyPairs;

  /**
   * Constructor
   *
   * @param exchange
   */
  public GeminiAccountServiceRaw(Exchange exchange) {
    super(exchange);
    this.allCurrencyPairs =
        new ArrayList<>(exchange.getExchangeMetaData().getInstruments().keySet());
  }

  public List<GeminiTransfer> transfers(Date from, Integer limit) throws IOException {
    SynchronizedValueFactory<Long> nonceFactory = exchange.getNonceFactory();
    GeminiTransfersRequest geminiTransfersRequest =
        GeminiTransfersRequest.create(from, limit, nonceFactory);
    return gemini.transfers(apiKey, payloadCreator, signatureCreator, geminiTransfersRequest);
  }

  public GeminiBalancesResponse[] getGeminiAccountInfo() throws IOException {
    try {
      GeminiBalancesRequest request =
          new GeminiBalancesRequest(String.valueOf(exchange.getNonceFactory().createValue()));
      return gemini.balances(apiKey, payloadCreator, signatureCreator, request);
    } catch (GeminiException e) {
      throw handleException(e);
    }
  }

  public String withdraw(Currency currency, BigDecimal amount, String address) throws IOException {

    try {
      String ccy = convertToGeminiCcyName(currency.getCurrencyCode());
      GeminiWithdrawalRequest request =
          new GeminiWithdrawalRequest(
              String.valueOf(exchange.getNonceFactory().createValue()), ccy, amount, address);

      GeminiWithdrawalResponse withdrawRepsonse =
          gemini.withdraw(apiKey, payloadCreator, signatureCreator, ccy, request);

      return withdrawRepsonse.txHash;
    } catch (GeminiException e) {
      throw handleException(e);
    }
  }

  public GeminiDepositAddressResponse requestDepositAddressRaw(Currency currency)
      throws IOException {<FILL_FUNCTION_BODY>}

  public GeminiTrailingVolumeResponse Get30DayTrailingVolumeDescription() throws IOException {
    try {
      GeminiTrailingVolumeRequest request =
          new GeminiTrailingVolumeRequest(String.valueOf(exchange.getNonceFactory().createValue()));

      return gemini.TrailingVolume(apiKey, payloadCreator, signatureCreator, request);
    } catch (GeminiException e) {
      throw handleException(e);
    }
  }
}

    try {
      String ccy = convertToGeminiCcyName(currency.getCurrencyCode());

      GeminiDepositAddressRequest exchange =
          new GeminiDepositAddressRequest(
              String.valueOf(this.exchange.getNonceFactory().createValue()), ccy, null);

      GeminiDepositAddressResponse requestDepositAddressResponse =
          gemini.requestNewAddress(apiKey, payloadCreator, signatureCreator, ccy, exchange);
      if (requestDepositAddressResponse != null) {
        return requestDepositAddressResponse;
      } else {
        return null;
      }
    } catch (GeminiException e) {
      throw handleException(e);
    }
  
<methods>public void <init>(org.knowm.xchange.Exchange) <variables>protected final non-sealed java.lang.String apiKey,protected final non-sealed org.knowm.xchange.gemini.v1.GeminiAuthenticated gemini,protected final non-sealed org.knowm.xchange.gemini.v2.Gemini2 gemini2,protected final non-sealed ParamsDigest payloadCreator,protected final non-sealed ParamsDigest signatureCreator