private void VerifyProof(byte[][] proof, Keccak receiptRoot) { TrieNode node = new TrieNode(NodeType.Unknown, proof.Last()); node.ResolveNode(null); TxReceipt receipt = new ReceiptMessageDecoder().Decode(node.Value.AsRlpStream()); Assert.NotNull(receipt.Bloom); for (int i = proof.Length; i > 0; i--) { Keccak proofHash = Keccak.Compute(proof[i - 1]); if (i > 1) { if (!new Rlp(proof[i - 2]).ToString(false).Contains(proofHash.ToString(false))) { throw new InvalidDataException(); } } else { if (proofHash != receiptRoot) { throw new InvalidDataException(); } } } }
public void Can_do_roundtrip_none_rlp_stream() { TxReceipt txReceipt = Build.A.Receipt.TestObject; txReceipt.Bloom = new Bloom(); txReceipt.Bloom.Set(Keccak.EmptyTreeHash.Bytes); txReceipt.GasUsedTotal = 1000; txReceipt.PostTransactionState = TestItem.KeccakH; ReceiptMessageDecoder decoder = new ReceiptMessageDecoder(); byte[] rlpStreamResult = decoder.EncodeNew(txReceipt, RlpBehaviors.None); TxReceipt deserialized = Rlp.Decode <TxReceipt>(rlpStreamResult, RlpBehaviors.None); AssertMessageReceipt(txReceipt, deserialized); }
public void Can_do_roundtrip_with_receipt_message_and_tx_type_access_list() { TxReceipt txReceipt = Build.A.Receipt.TestObject; txReceipt.Bloom = new Bloom(); txReceipt.Bloom.Set(Keccak.EmptyTreeHash.Bytes); txReceipt.GasUsedTotal = 1000; txReceipt.PostTransactionState = TestItem.KeccakH; txReceipt.TxType = TxType.AccessList; ReceiptMessageDecoder decoder = new ReceiptMessageDecoder(); byte[] rlpStreamResult = decoder.Encode(txReceipt).Bytes; TxReceipt deserialized = decoder.Decode(new RlpStream(rlpStreamResult)); AssertMessageReceipt(txReceipt, deserialized); }
public void Can_do_roundtrip_with_receipt_message_and_tx_type_access_list() { TxReceipt txReceipt = Build.A.Receipt.TestObject; txReceipt.Bloom = new Bloom(); txReceipt.Bloom.Set(Keccak.EmptyTreeHash.Bytes); txReceipt.GasUsedTotal = 1000; txReceipt.PostTransactionState = TestItem.KeccakH; txReceipt.TxType = TxType.AccessList; ReceiptMessageDecoder decoder = new ReceiptMessageDecoder(); byte[] rlpStreamResult = decoder.Encode(txReceipt).Bytes; TxReceipt deserialized = decoder.Decode(new RlpStream(rlpStreamResult)); Assert.AreEqual(txReceipt.Bloom, deserialized.Bloom, "bloom"); Assert.AreEqual(txReceipt.GasUsedTotal, deserialized.GasUsedTotal, "gas used total"); Assert.AreEqual(txReceipt.PostTransactionState, deserialized.PostTransactionState, "post transaction state"); Assert.AreEqual(txReceipt.StatusCode, deserialized.StatusCode, "status"); Assert.AreEqual(txReceipt.TxType, deserialized.TxType, "type"); }