/// <summary>Gets the deposit history for a symbol</summary> /// <param name="symbol">The symbol to check. Null for all symbols.</param> /// <returns>Collection of ExchangeCoinTransfers</returns> protected override async Task <IEnumerable <ExchangeTransaction> > OnGetDepositHistoryAsync(string symbol) { // TODO: API supports searching on status, startTime, endTime Dictionary <string, object> payload = await OnGetNoncePayloadAsync(); if (!string.IsNullOrWhiteSpace(symbol)) { payload["asset"] = NormalizeSymbol(symbol); } JToken response = await MakeJsonRequestAsync <JToken>("/depositHistory.html", WithdrawalUrlPrivate, payload); var transactions = new List <ExchangeTransaction>(); foreach (JToken token in response["depositList"]) { var transaction = new ExchangeTransaction { Timestamp = token["insertTime"].ConvertInvariant <double>().UnixTimeStampToDateTimeMilliseconds(), Amount = token["amount"].ConvertInvariant <decimal>(), Symbol = token["asset"].ToStringUpperInvariant(), Address = token["address"].ToStringInvariant(), AddressTag = token["addressTag"].ToStringInvariant(), BlockchainTxId = token["txId"].ToStringInvariant() }; int status = token["status"].ConvertInvariant <int>(); switch (status) { case 0: transaction.Status = TransactionStatus.Processing; break; case 1: transaction.Status = TransactionStatus.Complete; break; default: // If new states are added, see https://github.com/binance-exchange/binance-official-api-docs/blob/master/wapi-api.md transaction.Status = TransactionStatus.Unknown; transaction.Notes = "Unknown transaction status: " + status; break; } transactions.Add(transaction); } return(transactions); }
/// <summary> /// This returns both Deposit and Withdawl history for the Bank and Trading Accounts. Currently returning everything and not filtering. /// There is no support for retrieving by Symbol, so we'll filter that after reteiving all symbols /// </summary> /// <param name="symbol"></param> /// <returns></returns> protected override async Task <IEnumerable <ExchangeTransaction> > OnGetDepositHistoryAsync(string symbol) { List <ExchangeTransaction> transactions = new List <ExchangeTransaction>(); // [ {"id": "6a2fb54d-7466-490c-b3a6-95d8c882f7f7","index": 20400458,"currency": "ETH","amount": "38.616700000000000000000000","fee": "0.000880000000000000000000", "address": "0xfaEF4bE10dDF50B68c220c9ab19381e20B8EEB2B", "hash": "eece4c17994798939cea9f6a72ee12faa55a7ce44860cfb95c7ed71c89522fe8","status": "pending","type": "payout", "createdAt": "2017-05-18T18:05:36.957Z", "updatedAt": "2017-05-18T19:21:05.370Z" }, ... ] JToken result = await MakeJsonRequestAsync <JToken>("/account/transactions", null, await OnGetNoncePayloadAsync()); if (result != null && result.HasValues) { foreach (JToken token in result) { if (token["currency"].ToStringInvariant().Equals(symbol)) { ExchangeTransaction transaction = new ExchangeTransaction { PaymentId = token["id"].ToStringInvariant(), Symbol = token["currency"].ToStringInvariant(), Address = token["address"].ToStringInvariant(), // Address Tag isn't returned BlockchainTxId = token["hash"].ToStringInvariant(), // not sure about this Amount = token["amount"].ConvertInvariant <decimal>(), Notes = token["type"].ToStringInvariant(), // since no notes are returned, we'll use this to show the transaction type TxFee = token["fee"].ConvertInvariant <decimal>(), Timestamp = ConvertDateTimeInvariant(token["createdAt"]) }; string status = token["status"].ToStringInvariant(); if (status.Equals("pending")) { transaction.Status = TransactionStatus.Processing; } else if (status.Equals("success")) { transaction.Status = TransactionStatus.Complete; } else if (status.Equals("failed")) { transaction.Status = TransactionStatus.Failure; } else { transaction.Status = TransactionStatus.Unknown; } transactions.Add(transaction); } } } return(transactions); }
/// <summary> /// Cryptopia does support filtering by Transaction Type (deposits and withdraws), but here we're returning both. The Tx Type will be returned in the Message field /// By Symbol isn't supported, so we'll filter. Also, the default limit is 100 transactions, we could possibly increase this to support the extra data we have to return for Symbol /// </summary> /// <param name="symbol"></param> /// <returns></returns> protected override async Task <IEnumerable <ExchangeTransaction> > OnGetDepositHistoryAsync(string symbol) { List <ExchangeTransaction> deposits = new List <ExchangeTransaction>(); var payload = await OnGetNoncePayloadAsync(); // Uncomment as desired //payload["Type"] = "Deposit"; //payload["Type"] = "Withdraw"; //payload["Count"] = 100; // [ {"Id": 23467,"Currency": "DOT", "TxId": "6ddbaca454c97ba4e8a87a1cb49fa5ceace80b89eaced84b46a8f52c2b8c8ca3", "Type": "Deposit", "Amount": 145.98000000, "Fee": "0.00000000", "Status": "Confirmed", "Confirmations": "20", "TimeStamp":"2014-12-07T20:04:05.3947572", "Address": "" }, ... ] JToken token = await MakeJsonRequestAsync <JToken>("/GetTransactions", null, payload, "POST"); foreach (JToken data in token) { if (data["Currency"].ToStringInvariant().Equals(symbol)) { ExchangeTransaction tx = new ExchangeTransaction() { Address = data["Address"].ToStringInvariant(), Amount = data["Amount"].ConvertInvariant <decimal>(), BlockchainTxId = data["TxId"].ToStringInvariant(), Notes = data["Type"].ToStringInvariant(), PaymentId = data["Id"].ToStringInvariant(), Timestamp = ConvertDateTimeInvariant(data["TimeStamp"]), Symbol = data["Currency"].ToStringInvariant(), TxFee = data["Fee"].ConvertInvariant <decimal>() }; // They may support more status types, but it's not documented switch ((string)data["Status"]) { case "Confirmed": tx.Status = TransactionStatus.Complete; break; case "Pending": tx.Status = TransactionStatus.Processing; break; default: tx.Status = TransactionStatus.Unknown; break; } deposits.Add(tx); } } return(deposits); }
protected override async Task <IEnumerable <ExchangeTransaction> > OnGetDepositHistoryAsync(string symbol) { List <ExchangeTransaction> deposits = new List <ExchangeTransaction>(); var payload = await OnGetNoncePayloadAsync(); payload["limit"] = 1000; // History by symbol is not supported, so we'll get max and filter the results // response fields = deposit_id currency date amount fee status (awaiting-email-confirmation pending complete) url JArray token = await MakeJsonRequestAsync <JArray>("/deposits/history", null, payload); if (token != null && token.HasValues) { ExchangeTransaction deposit = new ExchangeTransaction() { Symbol = token["currency"].ToStringInvariant(), Amount = token["amount"].ConvertInvariant <decimal>(), Timestamp = ConvertDateTimeInvariant(token["date"]), PaymentId = token["deposit_id"].ToStringInvariant(), TxFee = token["fee"].ConvertInvariant <decimal>() }; switch (token["status"].ToStringInvariant()) { case "complete": deposit.Status = TransactionStatus.Complete; break; case "pending": deposit.Status = TransactionStatus.Processing; break; default: deposit.Status = TransactionStatus.AwaitingApproval; break; } if (deposit.Symbol == symbol) { deposits.Add(deposit); } } return(deposits); }