Exemple #1
0
 public DebugRpcModule(ILogManager logManager, IDebugBridge debugBridge, IJsonRpcConfig jsonRpcConfig)
 {
     _debugBridge   = debugBridge ?? throw new ArgumentNullException(nameof(debugBridge));
     _jsonRpcConfig = jsonRpcConfig ?? throw new ArgumentNullException(nameof(jsonRpcConfig));
     _logger        = logManager.GetClassLogger();
     _traceTimeout  = TimeSpan.FromMilliseconds(_jsonRpcConfig.Timeout);
 }
Exemple #2
0
        public void Get_block_rlp_when_missing()
        {
            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();

            debugBridge.GetBlockRlp(1).Returns((byte[])null);

            DebugModule          module   = new DebugModule(NullLogManager.Instance, debugBridge);
            JsonRpcErrorResponse response = RpcTest.TestRequest <IDebugModule>(module, "debug_getBlockRlp", "1") as JsonRpcErrorResponse;

            Assert.AreEqual(-32601, response.Error.Code);
        }
Exemple #3
0
        public void Get_block_rlp()
        {
            BlockDecoder decoder     = new BlockDecoder();
            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();
            Rlp          rlp         = decoder.Encode(Build.A.Block.WithNumber(1).TestObject);

            debugBridge.GetBlockRlp(1).Returns(rlp.Bytes);

            DebugRpcModule         rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig);
            JsonRpcSuccessResponse response  = RpcTest.TestRequest <IDebugRpcModule>(rpcModule, "debug_getBlockRlp", "1") as JsonRpcSuccessResponse;

            Assert.AreEqual(rlp.Bytes, (byte[])response?.Result);
        }
Exemple #4
0
        public void Get_block_rlp_by_hash_when_missing()
        {
            BlockDecoder decoder     = new BlockDecoder();
            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();
            Rlp          rlp         = decoder.Encode(Build.A.Block.WithNumber(1).TestObject);

            debugBridge.GetBlockRlp(Keccak.Zero).Returns((byte[])null);

            DebugModule          module   = new DebugModule(NullLogManager.Instance, debugBridge);
            JsonRpcErrorResponse response = RpcTest.TestRequest <IDebugModule>(module, "debug_getBlockRlpByHash", $"{Keccak.Zero.Bytes.ToHexString()}") as JsonRpcErrorResponse;

            Assert.AreEqual(-32601, response.Error.Code);
        }
        public void Get_block_rlp_by_hash()
        {
            BlockDecoder decoder     = new BlockDecoder();
            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();
            Rlp          rlp         = decoder.Encode(Build.A.Block.WithNumber(1).TestObject);

            debugBridge.GetBlockRlp(Keccak.Zero).Returns(rlp.Bytes);

            DebugModule            module   = new DebugModule(LimboLogs.Instance, debugBridge);
            JsonRpcSuccessResponse response = RpcTest.TestRequest <IDebugModule>(module, "debug_getBlockRlpByHash", $"{Keccak.Zero.Bytes.ToHexString()}") as JsonRpcSuccessResponse;

            Assert.AreEqual(rlp.Bytes, (byte[])response?.Result);
        }
        public void Get_from_db_null_value()
        {
            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();

            byte[] key = new byte[] { 1, 2, 3 };
            debugBridge.GetDbValue(Arg.Any <string>(), Arg.Any <byte[]>()).Returns((byte[])null);

            IConfigProvider        configProvider = Substitute.For <IConfigProvider>();
            DebugModule            module         = new DebugModule(LimboLogs.Instance, debugBridge);
            JsonRpcSuccessResponse response       = RpcTest.TestRequest <IDebugModule>(module, "debug_getFromDb", "STATE", key.ToHexString(true)) as JsonRpcSuccessResponse;

            Assert.NotNull(response);
        }
Exemple #7
0
        public void Get_block_rlp()
        {
            BlockDecoder decoder     = new BlockDecoder();
            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();
            Rlp          rlp         = decoder.Encode(Build.A.Block.WithNumber(1).TestObject);

            debugBridge.GetBlockRlp(1).Returns(rlp.Bytes);

            DebugModule     module   = new DebugModule(NullLogManager.Instance, debugBridge);
            JsonRpcResponse response = RpcTest.TestRequest <IDebugModule>(module, "debug_getBlockRlp", "1");

            Assert.IsNotInstanceOf <JsonRpcErrorResponse>(response);
            Assert.AreEqual(rlp.Bytes, (byte[])response.Result);
        }
        public void Get_from_db_null_value()
        {
            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();

            byte[] key = new byte[] { 1, 2, 3 };
            debugBridge.GetDbValue(Arg.Any <string>(), Arg.Any <byte[]>()).Returns((byte[])null);

            IConfigProvider configProvider = Substitute.For <IConfigProvider>();
            DebugModule     module         = new DebugModule(NullLogManager.Instance, debugBridge);
            JsonRpcResponse response       = RpcTest.TestRequest <IDebugModule>(module, "debug_getFromDb", "STATE", key.ToHexString(true));

            Assert.IsNull(response.Error, response.Error?.Message);
            Assert.IsNull(response.Result, "result");
        }
Exemple #9
0
        public void Get_from_db()
        {
            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();

            byte[] key   = new byte[] { 1, 2, 3 };
            byte[] value = new byte[] { 4, 5, 6 };
            debugBridge.GetDbValue(Arg.Any <string>(), Arg.Any <byte[]>()).Returns(value);

            IConfigProvider        configProvider = Substitute.For <IConfigProvider>();
            DebugModule            module         = new DebugModule(NullLogManager.Instance, debugBridge);
            JsonRpcSuccessResponse response       = RpcTest.TestRequest <IDebugModule>(module, "debug_getFromDb", "STATE", key.ToHexString(true)) as JsonRpcSuccessResponse;

            byte[] result = response.Result as byte[];
        }
Exemple #10
0
        public void Get_from_db()
        {
            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();

            byte[] key   = new byte[] { 1, 2, 3 };
            byte[] value = new byte[] { 4, 5, 6 };
            debugBridge.GetDbValue(Arg.Any <string>(), Arg.Any <byte[]>()).Returns(value);

            IConfigProvider configProvider = Substitute.For <IConfigProvider>();
            DebugModule     module         = new DebugModule(configProvider, NullLogManager.Instance, debugBridge, new UnforgivingJsonSerializer());
            JsonRpcResponse response       = RpcTest.TestRequest <IDebugModule>(module, "debug_getFromDb", "STATE", key.ToHexString(true));

            byte[] result = response.Result as byte[];
            Assert.AreEqual(value, result, response.Error?.Message);
        }
Exemple #11
0
        public void Get_trace()
        {
            GethTxTraceEntry entry = new GethTxTraceEntry();

            entry.Storage = new Dictionary <string, string>
            {
                { "1".PadLeft(64, '0'), "2".PadLeft(64, '0') },
                { "3".PadLeft(64, '0'), "4".PadLeft(64, '0') },
            };

            entry.Memory = new List <string>
            {
                "5".PadLeft(64, '0'),
                "6".PadLeft(64, '0')
            };

            entry.Stack = new List <string>
            {
                "7".PadLeft(64, '0'),
                "8".PadLeft(64, '0')
            };

            entry.Operation = "STOP";
            entry.Gas       = 22000;
            entry.GasCost   = 1;
            entry.Depth     = 1;

            var trace = new GethLikeTxTrace();

            trace.ReturnValue = Bytes.FromHexString("a2");
            trace.Entries.Add(entry);

            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();

            debugBridge.GetTransactionTrace(Arg.Any <Keccak>()).Returns(trace);

            IConfigProvider configProvider = Substitute.For <IConfigProvider>();
            DebugModule     module         = new DebugModule(configProvider, NullLogManager.Instance, debugBridge, new UnforgivingJsonSerializer());
            string          response       = RpcTest.TestSerializedRequest <IDebugModule>(module, "debug_traceTransaction", TestObject.KeccakA.ToString(true));

            Assert.AreEqual("{\"id\":67,\"jsonrpc\":\"2.0\",\"result\":{\"gas\":\"0x0\",\"failed\":false,\"returnValue\":\"0xa2\",\"structLogs\":[{\"pc\":0,\"op\":\"STOP\",\"gas\":22000,\"gasCost\":1,\"depth\":1,\"error\":null,\"stack\":[\"0000000000000000000000000000000000000000000000000000000000000007\",\"0000000000000000000000000000000000000000000000000000000000000008\"],\"memory\":[\"0000000000000000000000000000000000000000000000000000000000000005\",\"0000000000000000000000000000000000000000000000000000000000000006\"],\"storage\":{\"0000000000000000000000000000000000000000000000000000000000000001\":\"0000000000000000000000000000000000000000000000000000000000000002\",\"0000000000000000000000000000000000000000000000000000000000000003\":\"0000000000000000000000000000000000000000000000000000000000000004\"}}]}}", response);
        }
        public void Get_chain_level(string parameter)
        {
            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();

            debugBridge.GetLevelInfo(1).Returns(
                new ChainLevelInfo(
                    true,
                    new[]
            {
                new BlockInfo(TestItem.KeccakA, 1000),
                new BlockInfo(TestItem.KeccakB, 1001),
            }));

            DebugModule            module     = new DebugModule(LimboLogs.Instance, debugBridge);
            JsonRpcSuccessResponse response   = RpcTest.TestRequest <IDebugModule>(module, "debug_getChainLevel", parameter) as JsonRpcSuccessResponse;
            ChainLevelForRpc       chainLevel = response?.Result as ChainLevelForRpc;

            Assert.NotNull(chainLevel);
            Assert.AreEqual(true, chainLevel.HasBlockOnMainChain);
            Assert.AreEqual(2, chainLevel.BlockInfos.Length);
        }
        public void Get_trace_with_options()
        {
            GethTxTraceEntry entry = new GethTxTraceEntry();

            entry.Storage = new Dictionary <string, string>
            {
                { "1".PadLeft(64, '0'), "2".PadLeft(64, '0') },
                { "3".PadLeft(64, '0'), "4".PadLeft(64, '0') },
            };

            entry.Memory = new List <string>
            {
                "5".PadLeft(64, '0'),
                "6".PadLeft(64, '0')
            };

            entry.Stack = new List <string>
            {
            };

            entry.Operation = "STOP";
            entry.Gas       = 22000;
            entry.GasCost   = 1;
            entry.Depth     = 1;

            var trace = new GethLikeTxTrace();

            trace.ReturnValue = Bytes.FromHexString("a2");
            trace.Entries.Add(entry);

            IDebugBridge debugBridge = Substitute.For <IDebugBridge>();

            debugBridge.GetTransactionTrace(Arg.Any <Keccak>(), Arg.Any <GethTraceOptions>()).Returns(trace);

            DebugModule module   = new DebugModule(LimboLogs.Instance, debugBridge);
            string      response = RpcTest.TestSerializedRequest <IDebugModule>(DebugModuleFactory.Converters, module, "debug_traceTransaction", TestItem.KeccakA.ToString(true), "{disableStack : true}");

            Assert.AreEqual("{\"jsonrpc\":\"2.0\",\"result\":{\"gas\":\"0x0\",\"failed\":false,\"returnValue\":\"0xa2\",\"structLogs\":[{\"pc\":0,\"op\":\"STOP\",\"gas\":22000,\"gasCost\":1,\"depth\":1,\"error\":null,\"stack\":[],\"memory\":[\"0000000000000000000000000000000000000000000000000000000000000005\",\"0000000000000000000000000000000000000000000000000000000000000006\"],\"storage\":{\"0000000000000000000000000000000000000000000000000000000000000001\":\"0000000000000000000000000000000000000000000000000000000000000002\",\"0000000000000000000000000000000000000000000000000000000000000003\":\"0000000000000000000000000000000000000000000000000000000000000004\"}}]},\"id\":67}", response);
        }
Exemple #14
0
 public DebugModule(ILogManager logManager, IDebugBridge debugBridge)
 {
     _debugBridge = debugBridge ?? throw new ArgumentNullException(nameof(debugBridge));
     _logger      = logManager.GetClassLogger();
 }
Exemple #15
0
 public DebugModule(ILogManager logManager, IDebugBridge debugBridge)
     : base(logManager)
 {
     _debugBridge = debugBridge;
 }
Exemple #16
0
 public DebugModule(IConfigProvider configProvider, ILogManager logManager, IDebugBridge debugBridge, IJsonSerializer jsonSerializer)
     : base(configProvider, logManager, jsonSerializer)
 {
     _debugBridge = debugBridge;
 }
Exemple #17
0
 public DebugModule(IConfigProvider configurationProvider, ILogManager logManager, IDebugBridge debugBridge, IJsonRpcModelMapper modelMapper, IJsonSerializer jsonSerializer)
     : base(configurationProvider, logManager, jsonSerializer)
 {
     _debugBridge = debugBridge;
     _modelMapper = modelMapper;
 }