Ejemplo n.º 1
0
        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
        }
Ejemplo n.º 2
0
        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")));
        }
Ejemplo n.º 3
0
        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"));
        }