private void AddResult(GetBlockResults result) { lock (_container) { Parse(_container, result); _blockIds.Add(result.BlockNum); } }
public static BaseAction ToActionOrNull(this JToken action, GetBlockResults blockResults, string id, StatusEnum status, int actionNum, System.DateTime expiration) { try { var account = action.Value <string>("account"); var name = action.Value <string>("name"); var data = action.Value <JToken>("data"); BaseAction a; switch (name) { case TransferAction.ActionKey when data.Type == JTokenType.Object: { var transfer = data.ToTransferAction(); if (transfer == null || !IsValid(transfer)) { goto default; } if (status == StatusEnum.Executed) { transfer.Timestamp = blockResults.Timestamp.Value; } a = transfer; break; } case TokenAction.ActionKey when data.Type == JTokenType.Object: { a = data.ToTokenAction(); if (a == null || !IsValid(a)) { goto default; } break; } default: { return(null); } } a.TransactionStatus = status; a.ActionNum = actionNum; a.BlockNum = blockResults.BlockNum; a.ActionContract = account; a.ActionName = name; a.TransactionId = Hex.HexToBytes(id); a.TransactionExpiration = expiration; return(a); } catch { return(null); } }
private void Parse(ScraperCashContainer container, GetBlockResults result) { if (result.Transactions.Any()) { foreach (var t in result.Transactions) { if (t.Trx is JObject jObj) { var id = jObj.Value <string>("id"); var trx = jObj.Value <JObject>("transaction"); var expiration = trx.Value <DateTime>("expiration"); var actions = trx.Value <JArray>("actions"); for (var i = 0; i < actions.Count; i++) { var action = actions[i]; var a = action.ToActionOrNull(result, id, t.Status, i, expiration); if (a != null) { container.AddToBuffer(a); } } } else { var trx = t.Trx as string; var ts = new DelayedTransaction { BlockNum = result.BlockNum, TransactionId = Hex.HexToBytes(trx), TransactionStatus = t.Status, Timestamp = result.Timestamp.Value }; container.AddToBuffer(ts); } } container.FlushBuffer(); } }