Skip to content

Commit 8f24548

Browse files
committed
[independentreserve] Added accountService.getFundingHistory support
1 parent cf18707 commit 8f24548

File tree

11 files changed

+402
-40
lines changed

11 files changed

+402
-40
lines changed

xchange-independentreserve/src/main/java/org/knowm/xchange/independentreserve/IndependentReserve.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,4 @@ IndependentReserveTicker getMarketSummary(
2727
@QueryParam("primaryCurrencyCode") String primaryCurrencyCode,
2828
@QueryParam("secondaryCurrencyCode") String secondaryCurrencyCode)
2929
throws IOException;
30-
31-
// @GET
32-
// @Path("ticker/")
33-
// public IndependentReserveTicker getTicker() throws IOException;
34-
//
35-
// /**
36-
// * Returns descending list of transactions.
37-
// */
38-
// @GET
39-
// @Path("transactions/")
40-
// public IndependentReserveTransaction[] getTransactions() throws IOException;
41-
//
42-
// /**
43-
// * Returns descending list of transactions.
44-
// */
45-
// @GET
46-
// @Path("transactions/")
47-
// public IndependentReserveTransaction[] getTransactions(@QueryParam("time") String time)
48-
// throws IOException;
4930
}

xchange-independentreserve/src/main/java/org/knowm/xchange/independentreserve/IndependentReserveAdapters.java

Lines changed: 65 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.knowm.xchange.currency.CurrencyPair;
99
import org.knowm.xchange.dto.Order;
1010
import org.knowm.xchange.dto.account.Balance;
11+
import org.knowm.xchange.dto.account.FundingRecord;
1112
import org.knowm.xchange.dto.account.Wallet;
1213
import org.knowm.xchange.dto.marketdata.OrderBook;
1314
import org.knowm.xchange.dto.marketdata.Ticker;
@@ -120,19 +121,21 @@ private static List<LimitOrder> adaptOrders(
120121
return orders;
121122
}
122123

123-
public static Wallet adaptWallet(IndependentReserveBalance independentReserveBalance) {
124-
List<Balance> balances = new ArrayList<>();
124+
public static List<Wallet> adaptWallets(IndependentReserveBalance independentReserveBalance) {
125+
List<Wallet> wallets = new ArrayList<>();
125126

126127
for (IndependentReserveAccount balanceAccount :
127128
independentReserveBalance.getIndependentReserveAccounts()) {
128129
Currency currency = Currency.getInstance(balanceAccount.getCurrencyCode().toUpperCase());
129-
balances.add(
130-
new Balance(
131-
currency.getCommonlyUsedCurrency(),
132-
balanceAccount.getTotalBalance(),
133-
balanceAccount.getAvailableBalance()));
130+
wallets.add(
131+
new Wallet(
132+
balanceAccount.getAccountGuid(),
133+
new Balance(
134+
currency.getCommonlyUsedCurrency(),
135+
balanceAccount.getTotalBalance(),
136+
balanceAccount.getAvailableBalance())));
134137
}
135-
return new Wallet(balances);
138+
return wallets;
136139
}
137140

138141
public static OpenOrders adaptOpenOrders(
@@ -228,4 +231,58 @@ public static Order adaptOrderDetails(IndependentReserveOrderDetailsResponse det
228231
throw new IllegalStateException(
229232
"Unknown order type found in Independent Reserve : " + details.getOrderType());
230233
}
234+
235+
public static FundingRecord.Status adaptTransactionStatusToFundingRecordStatus(String status) {
236+
switch (status) {
237+
case "Open":
238+
case "PartiallyFilled":
239+
return FundingRecord.Status.PROCESSING;
240+
case "Filled":
241+
return FundingRecord.Status.COMPLETE;
242+
default:
243+
return null;
244+
}
245+
}
246+
247+
public static FundingRecord.Type adaptTransactionTypeToFundingRecordType(
248+
IndependentReserveTransaction.Type transctionType) {
249+
switch (transctionType) {
250+
case Withdrawal:
251+
return FundingRecord.Type.WITHDRAWAL;
252+
case Deposit:
253+
return FundingRecord.Type.DEPOSIT;
254+
default:
255+
return null;
256+
}
257+
}
258+
259+
public static FundingRecord adaptTransaction(IndependentReserveTransaction transaction) {
260+
BigDecimal amount = null;
261+
if (transaction.getDebit() != null) {
262+
amount = transaction.getDebit();
263+
} else if (transaction.getCredit() != null) {
264+
amount = transaction.getCredit();
265+
}
266+
return new FundingRecord(
267+
null,
268+
transaction.getCreatedTimestamp(),
269+
new Currency(transaction.getCurrencyCode()),
270+
amount,
271+
null,
272+
transaction.getBitcoinTransactionId(),
273+
adaptTransactionTypeToFundingRecordType(transaction.getType()),
274+
adaptTransactionStatusToFundingRecordStatus(transaction.getStatus()),
275+
transaction.getBalance(),
276+
null,
277+
transaction.getComment());
278+
}
279+
280+
public static List<FundingRecord> adaptTransaction(
281+
IndependentReserveTransactionsResponse response) {
282+
List<FundingRecord> result = new ArrayList<>();
283+
for (IndependentReserveTransaction tx : response.getIndependentReserveTranasactions()) {
284+
result.add(adaptTransaction(tx));
285+
}
286+
return result;
287+
}
231288
}

xchange-independentreserve/src/main/java/org/knowm/xchange/independentreserve/IndependentReserveAuthenticated.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public interface IndependentReserveAuthenticated {
1919

2020
public static final String SynchDigitalCurrencyDepositAddressWithBlockchain =
2121
"SynchDigitalCurrencyDepositAddressWithBlockchain";
22-
public static final String WithdrawDigitalCurrency = "WithdrawDigitalCurrency";
22+
public static final String WithdrawDigitalCurrency = "WITHDRAW_DIGITAL_CURRENCY";
2323

2424
@POST
2525
@Path("GetAccounts")

xchange-independentreserve/src/main/java/org/knowm/xchange/independentreserve/dto/trade/IndependentReserveTransaction.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public class IndependentReserveTransaction {
99
private final BigDecimal balance;
1010
private final String bitcoinTransactionId;
1111
private final String bitcoinTransactionOutputIndex;
12+
private final String ethereumTransactionId;
1213
private final String comment;
1314
private final Date createdTimestamp;
1415
private final BigDecimal credit;
@@ -21,7 +22,8 @@ public class IndependentReserveTransaction {
2122
public IndependentReserveTransaction(
2223
@JsonProperty("Balance") BigDecimal balance,
2324
@JsonProperty("BitcoinTransactionId") String bitcoinTransactionId,
24-
@JsonProperty("bitcoinTransactionOutputIndex") String bitcoinTransactionOutputIndex,
25+
@JsonProperty("BitcoinTransactionOutputIndex") String bitcoinTransactionOutputIndex,
26+
@JsonProperty("EthereumTransactionId") String ethereumTransactionId,
2527
@JsonProperty("Comment") String comment,
2628
@JsonProperty("CreatedTimestampUtc") String createdTimestampUtc,
2729
@JsonProperty("Credit") BigDecimal credit,
@@ -35,6 +37,7 @@ public IndependentReserveTransaction(
3537
this.balance = balance;
3638
this.bitcoinTransactionId = bitcoinTransactionId;
3739
this.bitcoinTransactionOutputIndex = bitcoinTransactionOutputIndex;
40+
this.ethereumTransactionId = ethereumTransactionId;
3841
this.comment = comment;
3942
this.createdTimestamp =
4043
createdTimestampUtc == null
@@ -95,6 +98,10 @@ public Type getType() {
9598
return type;
9699
}
97100

101+
public String getEthereumTransactionId() {
102+
return ethereumTransactionId;
103+
}
104+
98105
@Override
99106
public String toString() {
100107
return "IndependentReserveTransaction [balance="
@@ -126,6 +133,14 @@ public enum Type {
126133
Deposit,
127134
Withdrawal,
128135
Brokerage,
129-
Trade
136+
Trade,
137+
BitcoinNetworkFee,
138+
Commission,
139+
DepositFee,
140+
Error,
141+
GST,
142+
Transfer,
143+
Unclaimed,
144+
WithdrawalFee
130145
}
131146
}

xchange-independentreserve/src/main/java/org/knowm/xchange/independentreserve/service/IndependentReserveAccountService.java

Lines changed: 106 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@
22

33
import java.io.IOException;
44
import java.math.BigDecimal;
5+
import java.util.*;
56
import org.knowm.xchange.Exchange;
67
import org.knowm.xchange.currency.Currency;
78
import org.knowm.xchange.dto.account.AccountInfo;
8-
import org.knowm.xchange.exceptions.NotAvailableFromExchangeException;
9+
import org.knowm.xchange.dto.account.Balance;
10+
import org.knowm.xchange.dto.account.FundingRecord;
11+
import org.knowm.xchange.dto.account.Wallet;
912
import org.knowm.xchange.independentreserve.IndependentReserveAdapters;
13+
import org.knowm.xchange.independentreserve.dto.trade.IndependentReserveTransaction;
1014
import org.knowm.xchange.service.account.AccountService;
11-
import org.knowm.xchange.service.trade.params.DefaultWithdrawFundsParams;
12-
import org.knowm.xchange.service.trade.params.TradeHistoryParams;
13-
import org.knowm.xchange.service.trade.params.WithdrawFundsParams;
15+
import org.knowm.xchange.service.trade.params.*;
1416

1517
/** Author: Kamil Zbikowski Date: 4/10/15 */
1618
public class IndependentReserveAccountService extends IndependentReserveAccountServiceRaw
@@ -29,7 +31,7 @@ public IndependentReserveAccountService(Exchange exchange) {
2931
public AccountInfo getAccountInfo() throws IOException {
3032
return new AccountInfo(
3133
exchange.getExchangeSpecification().getUserName(),
32-
IndependentReserveAdapters.adaptWallet(getIndependentReserveBalance()));
34+
IndependentReserveAdapters.adaptWallets(getIndependentReserveBalance()));
3335
}
3436

3537
@Override
@@ -51,6 +53,104 @@ public String withdrawFunds(WithdrawFundsParams params) throws IOException {
5153

5254
@Override
5355
public TradeHistoryParams createFundingHistoryParams() {
54-
throw new NotAvailableFromExchangeException();
56+
return new IndependentReserveTradeHistoryParams();
57+
}
58+
59+
@Override
60+
public List<FundingRecord> getFundingHistory(TradeHistoryParams params) throws IOException {
61+
if (params instanceof IndependentReserveTradeHistoryParams) {
62+
IndependentReserveTradeHistoryParams historyParams =
63+
(IndependentReserveTradeHistoryParams) params;
64+
AccountInfo accountInfo = this.getAccountInfo();
65+
66+
Set<Currency> currencies = new HashSet<>();
67+
if (historyParams.getCurrency() == null) {
68+
for (Wallet wallet : accountInfo.getWallets().values()) {
69+
currencies.addAll(wallet.getBalances().keySet());
70+
}
71+
} else {
72+
currencies.add(historyParams.getCurrency());
73+
}
74+
List<FundingRecord> fundingRecords = new ArrayList<>();
75+
76+
for (Wallet wallet : accountInfo.getWallets().values()) {
77+
for (Map.Entry<Currency, Balance> e : wallet.getBalances().entrySet()) {
78+
if (currencies.contains(e.getKey())) {
79+
fundingRecords.addAll(
80+
IndependentReserveAdapters.adaptTransaction(
81+
super.getTransactions(
82+
wallet.getId(),
83+
historyParams.startTime,
84+
historyParams.endTime,
85+
historyParams.transactionTypes,
86+
historyParams.getPageNumber(),
87+
historyParams.getPageLength())));
88+
}
89+
}
90+
}
91+
return fundingRecords;
92+
} else {
93+
throw new IllegalArgumentException(
94+
"Invalid TradeHistoryParams used as argument of getFundingHistory");
95+
}
96+
}
97+
98+
public static class IndependentReserveTradeHistoryParams extends DefaultTradeHistoryParamPaging
99+
implements TradeHistoryParams, TradeHistoryParamCurrency, TradeHistoryParamsTimeSpan {
100+
101+
private Currency currency;
102+
private Date startTime;
103+
private Date endTime;
104+
private IndependentReserveTransaction.Type[] transactionTypes;
105+
106+
public IndependentReserveTradeHistoryParams() {
107+
transactionTypes =
108+
new IndependentReserveTransaction.Type[] {
109+
IndependentReserveTransaction.Type.Brokerage,
110+
IndependentReserveTransaction.Type.Deposit,
111+
IndependentReserveTransaction.Type.Withdrawal,
112+
IndependentReserveTransaction.Type.Trade
113+
};
114+
setPageLength(50);
115+
setPageNumber(1);
116+
}
117+
118+
@Override
119+
public Currency getCurrency() {
120+
return currency;
121+
}
122+
123+
@Override
124+
public void setCurrency(Currency currency) {
125+
this.currency = currency;
126+
}
127+
128+
@Override
129+
public Date getStartTime() {
130+
return startTime;
131+
}
132+
133+
@Override
134+
public void setStartTime(Date startTime) {
135+
this.startTime = startTime;
136+
}
137+
138+
@Override
139+
public Date getEndTime() {
140+
return endTime;
141+
}
142+
143+
@Override
144+
public void setEndTime(Date endTime) {
145+
this.endTime = endTime;
146+
}
147+
148+
public IndependentReserveTransaction.Type[] getTransactionTypes() {
149+
return transactionTypes;
150+
}
151+
152+
public void setTransactionTypes(IndependentReserveTransaction.Type[] transactionTypes) {
153+
this.transactionTypes = transactionTypes;
154+
}
55155
}
56156
}

xchange-independentreserve/src/main/java/org/knowm/xchange/independentreserve/service/IndependentReserveAccountServiceRaw.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
import java.io.IOException;
44
import java.math.BigDecimal;
5+
import java.util.Date;
56
import org.knowm.xchange.Exchange;
67
import org.knowm.xchange.exceptions.ExchangeException;
78
import org.knowm.xchange.independentreserve.IndependentReserveAuthenticated;
89
import org.knowm.xchange.independentreserve.dto.IndependentReserveHttpStatusException;
910
import org.knowm.xchange.independentreserve.dto.account.IndependentReserveBalance;
1011
import org.knowm.xchange.independentreserve.dto.account.IndependentReserveWithdrawDigitalCurrencyRequest;
1112
import org.knowm.xchange.independentreserve.dto.auth.AuthAggregate;
12-
import org.knowm.xchange.independentreserve.dto.trade.IndependentReserveSynchDigitalCurrencyDepositAddressWithBlockchainRequest;
13-
import org.knowm.xchange.independentreserve.dto.trade.IndependentReserveSynchDigitalCurrencyDepositAddressWithBlockchainResponse;
13+
import org.knowm.xchange.independentreserve.dto.trade.*;
1414
import org.knowm.xchange.independentreserve.util.ExchangeEndpoint;
1515
import si.mazi.rescu.RestProxyFactory;
1616

@@ -84,7 +84,34 @@ public void withdrawDigitalCurrency(BigDecimal amount, String withdrawalAddress,
8484
comment);
8585
req.setSignature(
8686
signatureCreator.digestParamsToString(
87-
ExchangeEndpoint.WithdrawDigitalCurrency, nonce, req.getParameters()));
87+
ExchangeEndpoint.WITHDRAW_DIGITAL_CURRENCY, nonce, req.getParameters()));
8888
Object withdrawDigitalCurrency = independentReserveAuthenticated.withdrawDigitalCurrency(req);
8989
}
90+
91+
IndependentReserveTransactionsResponse getTransactions(
92+
String account,
93+
Date fromTimestampUtc,
94+
Date toTimestampUt,
95+
IndependentReserveTransaction.Type[] txTypes,
96+
Integer pageIndex,
97+
Integer pageSize)
98+
throws IndependentReserveHttpStatusException, IOException {
99+
Long nonce = exchange.getNonceFactory().createValue();
100+
101+
IndependentReserveTransactionsRequest req =
102+
new IndependentReserveTransactionsRequest(
103+
exchange.getExchangeSpecification().getApiKey(),
104+
nonce,
105+
account,
106+
fromTimestampUtc,
107+
toTimestampUt,
108+
txTypes,
109+
pageIndex,
110+
pageSize);
111+
req.setSignature(
112+
signatureCreator.digestParamsToString(
113+
ExchangeEndpoint.GET_TRANSACTIONS, nonce, req.getParameters()));
114+
115+
return independentReserveAuthenticated.getTransactions(req);
116+
}
90117
}

xchange-independentreserve/src/main/java/org/knowm/xchange/independentreserve/util/ExchangeEndpoint.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public enum ExchangeEndpoint {
1313
GET_ORDER_DETAILS("GetOrderDetails"),
1414
SYNCH_DIGITAL_CURRENCY_DEPOSIT_ADDRESS_WITH_BLOCKCHAIN(
1515
IndependentReserveAuthenticated.SynchDigitalCurrencyDepositAddressWithBlockchain),
16-
WithdrawDigitalCurrency(IndependentReserveAuthenticated.WithdrawDigitalCurrency);
16+
WITHDRAW_DIGITAL_CURRENCY(IndependentReserveAuthenticated.WithdrawDigitalCurrency);
1717

1818
private String endpointName;
1919

0 commit comments

Comments
 (0)