public override async Task BroadcastTransactionAsync(Transaction tx) { var json = JToken.Parse(await SendRPCAsync("blockchain.transaction.broadcast", tx.ToHex())); var result = json["result"].Value <string>(); int?errorCode = null; try { // TODO: Handle Python string literals properly var resultError = JToken.Parse(Regex.Replace(result, "u'(?<text>[^']*)'", "\"${text}\"")); errorCode = resultError["code"].Value <int>(); Debug.WriteLine(String.Format("There was an error: {0} ({1})\n{2}", errorCode, resultError["message"], result)); } catch { } switch (errorCode) { case -22: Debug.WriteLine("Transaction not accepted by Electrum server"); await NextProtocol.BroadcastTransactionAsync(tx); break; default: if (json["result"].Value <string>() != tx.Hash) { throw new Exception("Wat"); } break; } // TODO: Cache the transaction }
public async override Task <decimal> GetExchangeRateAsync(Money.CurrencyType c1, Money.CurrencyType c2) { if (c2 != Money.CurrencyType.FindByCode("BTC")) { return(await NextProtocol.GetExchangeRateAsync(c1, c2)); } return(GetExchangeRate(c1, c2, await GetJsonAsync("/ticker"))); }
public override async Task <Money> GetAddressBalanceAsync(Address address, ulong startHeight = 0) { if (startHeight > 0) { return(await NextProtocol.GetAddressBalanceAsync(address, startHeight)); } JToken data = await GetJsonAsync(String.Format("/address/{0}?format=json", address)); return(new Money(data["final_balance"].Value <long>(), "BTC")); }