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);
            }
        }
Ejemplo n.º 3
0
 public OPReturnMessage(GetBlockResult bd, GetRawTransactionVerboseResult tx, string asm)
 {
     blockdata   = bd;
     transaction = tx;
     message     = ProcessMessage(asm);
 }