Ejemplo n.º 1
0
        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();
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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");
        }