public bool Accepts(ref LogEntryStructRef entry) { if (entry.Topics != null) { return(Accepts(entry.Topics)); } var iterator = new KeccaksIterator(entry.TopicsRlp); for (int i = 0; i < _expressions.Length; i++) { if (iterator.TryGetNext(out var keccak)) { if (!_expressions[i].Accepts(ref keccak)) { return(false); } } else { return(false); } } return(true); }
public void Can_do_roundtrip_ref_struct() { LogEntry logEntry = new LogEntry(TestItem.AddressA, new byte[] { 1, 2, 3 }, new[] { TestItem.KeccakA, TestItem.KeccakB }); Rlp rlp = Rlp.Encode(logEntry); Rlp.ValueDecoderContext valueDecoderContext = new Rlp.ValueDecoderContext(rlp.Bytes); LogEntryDecoder.DecodeStructRef(ref valueDecoderContext, RlpBehaviors.None, out var decoded); Assert.That(Bytes.AreEqual(logEntry.Data, decoded.Data), "data"); Assert.That(logEntry.LoggersAddress == decoded.LoggersAddress, "address"); KeccaksIterator iterator = new KeccaksIterator(decoded.TopicsRlp); for (int i = 0; i < logEntry.Topics.Length; i++) { iterator.TryGetNext(out var keccak); Assert.That(logEntry.Topics[i] == keccak, $"topics[{i}]"); } }