public async Task <BlockTemplate> GetBlockTemplate() { var httpClient = _httpClientFactory.BuildClient(); var jObj = new JObject(); jObj.Add("id", Guid.NewGuid().ToString()); jObj.Add("method", Constants.RpcOperations.Getblocktemplate); var content = new StringContent(jObj.ToString(), System.Text.Encoding.UTF8, ContentType); var request = new HttpRequestMessage { Method = HttpMethod.Post, Content = content, RequestUri = GetUri() }; var response = await httpClient.SendAsync(request).ConfigureAwait(false); var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false); string errorCode = null; var jsonObj = JObject.Parse(json); if (TryGetError(jsonObj, out errorCode)) { throw new RpcException(errorCode); } var resultObj = jsonObj.GetValue("result") as JObject; if (resultObj == null) { return(null); } return(BlockTemplate.Deserialize(resultObj)); }
public static BlockTemplate Deserialize(JObject jObj) { if (jObj == null) { throw new ArgumentNullException(nameof(jObj)); } var result = new BlockTemplate(); var coinBaseTxn = jObj.SelectToken("coinbasetxn"); if (coinBaseTxn != null) { var coinBaseTxnDataObj = coinBaseTxn as JObject; if (coinBaseTxnDataObj != null) { JToken coinBaseTxnDataToken = null; if (coinBaseTxnDataObj.TryGetValue("data", out coinBaseTxnDataToken)) { var data = coinBaseTxnDataToken.ToString().FromHexString(); result.CoinBaseTx = BaseTransaction.Deserialize(data).Key as BcBaseTransaction; } } } JToken previousBlockHashToken = null; if (jObj.TryGetValue("previousblockhash", out previousBlockHashToken)) { result.PreviousBlockHash = previousBlockHashToken.ToString().FromHexString(); } JToken transactionsToken = null; if (jObj.TryGetValue("transactions", out transactionsToken)) { var transactionsArr = transactionsToken as JArray; if (transactionsArr != null) { var transactions = new List <BaseTransaction>(); foreach (var transactionObj in transactionsArr) { transactions.Add(BaseTransaction.Deserialize(transactionObj.ToString().FromHexString()).Key); } result.Transactions = transactions; } } JToken heightToken = null; if (jObj.TryGetValue("height", out heightToken)) { result.Height = int.Parse(heightToken.ToString()); } JToken versionToken = null; if (jObj.TryGetValue("version", out versionToken)) { result.Version = int.Parse(versionToken.ToString()); } JToken curTimeToken = null; if (jObj.TryGetValue("curtime", out curTimeToken)) { result.CurrentTime = uint.Parse(curTimeToken.ToString()); } JToken bitsToken = null; if (jObj.TryGetValue("bits", out bitsToken)) { result.Bits = uint.Parse(bitsToken.ToString()); } JToken targetToken = null; if (jObj.TryGetValue("target", out targetToken)) { result.Target = targetToken.ToString().FromHexString().ToArray(); } JToken expiresToken = null; if (jObj.TryGetValue("expires", out expiresToken)) { result.Expires = double.Parse(expiresToken.ToString()); } return(result); }