private List <OPReturnMessage> ProcessTx(GetBlockResult bd, GetRawTransactionVerboseResult transaction) { var foundMessages = new List <OPReturnMessage>(); if (transaction == null) { return(null); } if (!transaction.vin.Any() || transaction.vout == null) { return(null); } var vouts = transaction.vout.Where(a => a.scriptPubKey != null && a.scriptPubKey.asm.Contains("OP_RETURN")).ToList(); if (!vouts.Any()) { return(null); } foreach (var vout in vouts) { var message = new OPReturnMessage(bd, transaction, vout.scriptPubKey.asm); foundMessages.Add(message); Console.WriteLine($"{bd.height} - {transaction.txid} - {vout.n} - {message.message}"); } return(foundMessages.Any() ? foundMessages : null); }
public async Task SearchForMessagesAsync(RPCConnection rpcConnection, GetBlockResult bd) { this.blockHeight = bd.height; var transactions = Task.Run(() => GetTransactions(rpcConnection, bd.tx.ToList())); foreach (var tx in await transactions) { var res = ProcessTx(bd, tx); if (res == null || !res.Any()) { continue; } messages.AddRange(res); } }
public OPReturnMessage(GetBlockResult bd, GetRawTransactionVerboseResult tx, string asm) { blockdata = bd; transaction = tx; message = ProcessMessage(asm); }