public void Can_encode_decode_sample2()
        {
            System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(ParityTraceDecoder).TypeHandle);

            ParityTraceAction reward = new ParityTraceAction();

            reward.CallType     = "reward";
            reward.Author       = TestItem.AddressA;
            reward.RewardType   = "block";
            reward.Value        = 2.Ether();
            reward.TraceAddress = new int[] { };

            ParityLikeTxTrace txTrace = new ParityLikeTxTrace();

            txTrace.Action = reward;

            txTrace.BlockHash           = TestItem.KeccakB;
            txTrace.BlockNumber         = 123456;
            txTrace.TransactionHash     = null;
            txTrace.TransactionPosition = null;

            ParityAccountStateChange stateChange = new ParityAccountStateChange();

            stateChange.Balance = new ParityStateChange <UInt256>(0, 2.Ether());

            txTrace.StateChanges = new Dictionary <Address, ParityAccountStateChange>();
            txTrace.StateChanges.Add(TestItem.AddressA, stateChange);

            Rlp rlp = Rlp.Encode(txTrace);
            ParityLikeTxTrace deserialized = Rlp.Decode <ParityLikeTxTrace>(rlp);

            deserialized.Should().BeEquivalentTo(txTrace);
        }
        public void Can_encode_decode_sample1()
        {
            System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(ParityTraceDecoder).TypeHandle);

            ParityTraceAction subtrace = new ParityTraceAction();

            subtrace.Value          = 67890;
            subtrace.CallType       = "call";
            subtrace.From           = TestItem.AddressC;
            subtrace.To             = TestItem.AddressD;
            subtrace.Input          = Bytes.Empty;
            subtrace.Gas            = 10000;
            subtrace.TraceAddress   = new int[] { 0, 0 };
            subtrace.Result.Output  = Bytes.Empty;
            subtrace.Result.GasUsed = 15000;

            ParityLikeTxTrace txTrace = new ParityLikeTxTrace();

            txTrace.Action              = new ParityTraceAction();
            txTrace.Action.Value        = 12345;
            txTrace.Action.CallType     = "init";
            txTrace.Action.From         = TestItem.AddressA;
            txTrace.Action.To           = TestItem.AddressB;
            txTrace.Action.Input        = new byte[] { 1, 2, 3, 4, 5, 6 };
            txTrace.Action.Gas          = 40000;
            txTrace.Action.TraceAddress = new int[] { 0 };
            txTrace.Action.Subtraces.Add(subtrace);
            txTrace.Action.Result.Output  = Bytes.Empty;
            txTrace.Action.Result.GasUsed = 30000;

            txTrace.BlockHash           = TestItem.KeccakB;
            txTrace.BlockNumber         = 123456;
            txTrace.TransactionHash     = TestItem.KeccakC;
            txTrace.TransactionPosition = 5;
            txTrace.Action.TraceAddress = new int[] { 1, 2, 3 };

            ParityAccountStateChange stateChange = new ParityAccountStateChange();

            stateChange.Balance    = new ParityStateChange <UInt256>(1, 2);
            stateChange.Nonce      = new ParityStateChange <UInt256>(0, 1);
            stateChange.Storage    = new Dictionary <UInt256, ParityStateChange <byte[]> >();
            stateChange.Storage[1] = new ParityStateChange <byte[]>(new byte[] { 1 }, new byte[] { 2 });

            txTrace.StateChanges = new Dictionary <Address, ParityAccountStateChange>();
            txTrace.StateChanges.Add(TestItem.AddressC, stateChange);

            Rlp rlp = Rlp.Encode(txTrace);
            ParityLikeTxTrace deserialized = Rlp.Decode <ParityLikeTxTrace>(rlp);

            deserialized.Should().BeEquivalentTo(txTrace);
        }
        public void Can_encode_decode_sample3()
        {
            System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(ParityTraceDecoder).TypeHandle);

            ParityTraceAction subtrace001 = new ParityTraceAction();

            subtrace001.Value          = 67890;
            subtrace001.CallType       = "call";
            subtrace001.From           = TestItem.AddressC;
            subtrace001.To             = TestItem.AddressD;
            subtrace001.Input          = Bytes.Empty;
            subtrace001.Gas            = 10000;
            subtrace001.TraceAddress   = new int[] { 0, 0, 1 };
            subtrace001.Result.Output  = Bytes.Empty;
            subtrace001.Result.GasUsed = 15000;

            ParityTraceAction subtrace000 = new ParityTraceAction();

            subtrace000.Value          = 67890;
            subtrace000.CallType       = "create";
            subtrace000.From           = TestItem.AddressC;
            subtrace000.To             = TestItem.AddressD;
            subtrace000.Input          = Bytes.Empty;
            subtrace000.Gas            = 10000;
            subtrace000.TraceAddress   = new int[] { 0, 0, 2 };
            subtrace000.Result.Output  = Bytes.Empty;
            subtrace000.Result.GasUsed = 15000;

            ParityTraceAction subtrace00 = new ParityTraceAction();

            subtrace00.Value          = 67890;
            subtrace00.CallType       = "call";
            subtrace00.From           = TestItem.AddressC;
            subtrace00.To             = TestItem.AddressD;
            subtrace00.Input          = Bytes.Empty;
            subtrace00.Gas            = 10000;
            subtrace00.TraceAddress   = new int[] { 0, 0 };
            subtrace00.Result.Output  = Bytes.Empty;
            subtrace00.Result.GasUsed = 15000;
            subtrace00.Subtraces.Add(subtrace000);
            subtrace00.Subtraces.Add(subtrace001);

            ParityTraceAction subtrace01 = new ParityTraceAction();

            subtrace01.Value          = 67890;
            subtrace01.CallType       = "call";
            subtrace01.From           = TestItem.AddressC;
            subtrace01.To             = TestItem.AddressD;
            subtrace01.Input          = Bytes.Empty;
            subtrace01.Gas            = 10000;
            subtrace01.TraceAddress   = new int[] { 0, 1 };
            subtrace01.Result.Output  = Bytes.Empty;
            subtrace01.Result.GasUsed = 15000;

            ParityLikeTxTrace txTrace = new ParityLikeTxTrace();

            txTrace.Action              = new ParityTraceAction();
            txTrace.Action.Value        = 12345;
            txTrace.Action.CallType     = "init";
            txTrace.Action.From         = TestItem.AddressA;
            txTrace.Action.To           = TestItem.AddressB;
            txTrace.Action.Input        = new byte[] { 1, 2, 3, 4, 5, 6 };
            txTrace.Action.Gas          = 40000;
            txTrace.Action.TraceAddress = new int[] { 0 };
            txTrace.Action.Subtraces.Add(subtrace00);
            txTrace.Action.Subtraces.Add(subtrace01);
            txTrace.Action.Result.Output  = Bytes.Empty;
            txTrace.Action.Result.GasUsed = 30000;

            txTrace.BlockHash           = TestItem.KeccakB;
            txTrace.BlockNumber         = 123456;
            txTrace.TransactionHash     = TestItem.KeccakC;
            txTrace.TransactionPosition = 5;
            txTrace.Action.TraceAddress = new int[] { 1, 2, 3 };

            Rlp rlp = Rlp.Encode(txTrace);
            ParityLikeTxTrace deserialized = Rlp.Decode <ParityLikeTxTrace>(rlp);

            deserialized.Should().BeEquivalentTo(txTrace);
        }