diff --git a/docs/source/cli.rst b/docs/source/cli.rst index 7cea0a3fe7d..14f62f290f1 100644 --- a/docs/source/cli.rst +++ b/docs/source/cli.rst @@ -1,9 +1,13 @@ CLI *** +CLI access is not currently included in the Nethermind launcher but will be added very soon. + clique ^^^^^^ + - clique.discard(address) - + - clique.getSigners() - - clique.getSignersAnnotated() - @@ -20,22 +24,26 @@ clique - clique.propose(address, vote) - - - clique.discard(address) - - debug ^^^^^ + - debug.getBlockRlp(number) - + + - debug.getBlockRlpByHash(hash) - + - debug.config(category, name) - - - debug.traceBlock(hash) - + - debug.traceBlock(hash, options) - + + - debug.traceBlockByHash(hash, options) - - - debug.traceBlockByHash(hash) - + - debug.traceBlockByNumber(number, options) - - - debug.traceBlockByNumber(number) - + - debug.traceTransaction(hash, options) - - - debug.traceTransactionByBlockAndIndex(hash) - + - debug.traceTransactionByBlockAndIndex(hash, options) - - - debug.traceTransactionByBlockhashAndIndex(hash) - + - debug.traceTransactionByBlockhashAndIndex(hash, options) - diag ^^^^ @@ -59,6 +67,8 @@ eth - eth.getCode(address, blockParameter) - + - eth.getStorageAt(address, positionIndex, blockParameter) - + - eth.getTransactionByBlockNumberAndIndex(blockParameter, index) - - eth.getTransactionReceipt(txHash) - @@ -95,12 +105,10 @@ node - node.uri - -trace -^^^^^ - - - trace.replayBlockTransactions(blockNumber, traceTypes) - +parity +^^^^^^ - - trace.replayTransaction(txHash, traceTypes) - + - parity.pendingTransactions() - Returns the pending transactions using Parity format personal ^^^^^^^^ @@ -120,6 +128,17 @@ system - system.memory - +trace +^^^^^ + + - trace.replayBlockTransactions(blockNumber, traceTypes) - Replays all transactions in a block returning the requested traces for each transaction. + + - trace.replayTransaction(txHash, traceTypes) - Replays a transaction, returning the traces. + + - trace.block(blockNumber) - Returns traces created at given block. + + - trace.transaction(txHash) - Returns all traces of given transaction + web3 ^^^^ diff --git a/docs/source/configuration.rst b/docs/source/configuration.rst index 643c645a48b..1ab635eeb90 100644 --- a/docs/source/configuration.rst +++ b/docs/source/configuration.rst @@ -229,6 +229,8 @@ InitConfig UDP port number for incoming discovery connections. default value: 30303 + EnableRc7Fix + EnableUnsecuredDevWallet If 'true' then it enables the wallet / key store in the application. default value: false @@ -579,6 +581,7 @@ Sample configuration (mainnet) "ChainSpecPath" : null, "DiscoveryEnabled" : true, "DiscoveryPort" : 30303, + "EnableRc7Fix" : [MISSING_DOCS], "EnableUnsecuredDevWallet" : false, "GenesisHash" : null, "HttpHost" : "127.0.0.1", diff --git a/docs/source/jsonrpc.rst b/docs/source/jsonrpc.rst index d236fe47a52..23f14c9c30d 100644 --- a/docs/source/jsonrpc.rst +++ b/docs/source/jsonrpc.rst @@ -52,11 +52,13 @@ debug - [NOT IMPLEMENTED]debug_gcStats() - - debug_getBlockRlp(blockParameter) + - debug_getBlockRlp(number) + + - debug_getBlockRlpByHash(hash) - debug_getConfigValue(category, name) - - debug_getFromDb(dbName, key) + - [NOT IMPLEMENTED]debug_getFromDb(dbName, key) - [NOT IMPLEMENTED]debug_memStats(blockParameter) @@ -64,19 +66,19 @@ debug - [NOT IMPLEMENTED]debug_setHead(blockParameter) - - debug_traceBlock(blockRlp) + - debug_traceBlock(blockRlp, options) - - debug_traceBlockByHash(blockHash) + - debug_traceBlockByHash(blockHash, options) - - debug_traceBlockByNumber(number) + - debug_traceBlockByNumber(number, options) - - [NOT IMPLEMENTED]debug_traceBlockFromFile(fileName) + - [NOT IMPLEMENTED]debug_traceBlockFromFile(fileName, options) - - debug_traceTransaction(transactionHash, traceOptions) + - debug_traceTransaction(transactionHash, options) - - debug_traceTransactionByBlockAndIndex(blockParameter, txIndex) + - debug_traceTransactionByBlockAndIndex(blockParameter, txIndex, options) - - debug_traceTransactionByBlockhashAndIndex(blockHash, txIndex) + - debug_traceTransactionByBlockhashAndIndex(blockHash, txIndex, options) eth ^^^ @@ -174,6 +176,11 @@ net - net_version() +parity +^^^^^^ + + - parity_pendingTransactions() + personal ^^^^^^^^ diff --git a/src/Nethermind/Nethermind.Cli/Modules/DebugCliModule.cs b/src/Nethermind/Nethermind.Cli/Modules/DebugCliModule.cs index 953b2186558..2a1e8c4c36f 100644 --- a/src/Nethermind/Nethermind.Cli/Modules/DebugCliModule.cs +++ b/src/Nethermind/Nethermind.Cli/Modules/DebugCliModule.cs @@ -66,6 +66,18 @@ public JsValue GetConfigValue(string category, string name) { return NodeManager.PostJint("debug_getConfigValue", category, name).Result; } + + [CliFunction("debug", "getBlockRlpByHash")] + public string GetBlockRlpByHash(string hash) + { + return NodeManager.Post("debug_getBlockRlpByHash", CliParseHash(hash)).Result; + } + + [CliFunction("debug", "getBlockRlp")] + public string GetBlockRlp(long number) + { + return NodeManager.Post("debug_getBlockRlp", number).Result; + } public DebugCliModule(ICliEngine cliEngine, INodeManager nodeManager) : base(cliEngine, nodeManager) { diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs index 2107d54ac74..6498f1844d2 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs @@ -19,6 +19,7 @@ using System.Collections.Generic; using Nethermind.Config; using Nethermind.Core.Crypto; +using Nethermind.Core.Encoding; using Nethermind.Core.Extensions; using Nethermind.Core.Test.Builders; using Nethermind.Evm.Tracing; @@ -63,6 +64,64 @@ public void Get_from_db_null_value() Assert.IsNull(response.Result, "result"); } + [Test] + public void Get_block_rlp_by_hash() + { + BlockDecoder decoder = new BlockDecoder(); + IDebugBridge debugBridge = Substitute.For(); + byte[] rlp = decoder.Encode(Build.A.Block.WithNumber(1).TestObject).Bytes; + debugBridge.GetBlockRlp(Keccak.Zero).Returns(rlp); + + DebugModule module = new DebugModule(NullLogManager.Instance, debugBridge); + JsonRpcResponse response = RpcTest.TestRequest(module, "debug_getBlockRlpByHash", $"{Keccak.Zero.Bytes.ToHexString()}"); + + Assert.IsNull(response.Error, response.Error?.Message); + Assert.AreEqual(rlp, (byte[])response.Result); + } + + [Test] + public void Get_block_rlp() + { + BlockDecoder decoder = new BlockDecoder(); + IDebugBridge debugBridge = Substitute.For(); + byte[] rlp = decoder.Encode(Build.A.Block.WithNumber(1).TestObject).Bytes; + debugBridge.GetBlockRlp(1).Returns(rlp); + + DebugModule module = new DebugModule(NullLogManager.Instance, debugBridge); + JsonRpcResponse response = RpcTest.TestRequest(module, "debug_getBlockRlp", "1"); + + Assert.IsNull(response.Error, response.Error?.Message); + Assert.AreEqual(rlp, (byte[])response.Result); + } + + [Test] + public void Get_block_rlp_when_missing() + { + BlockDecoder decoder = new BlockDecoder(); + IDebugBridge debugBridge = Substitute.For(); + byte[] rlp = decoder.Encode(Build.A.Block.WithNumber(1).TestObject).Bytes; + debugBridge.GetBlockRlp(1).Returns((byte[])null); + + DebugModule module = new DebugModule(NullLogManager.Instance, debugBridge); + JsonRpcResponse response = RpcTest.TestRequest(module, "debug_getBlockRlp", "1"); + + Assert.AreEqual(-32601, response.Error.Code); + } + + [Test] + public void Get_block_rlp_by_hash_when_missing() + { + BlockDecoder decoder = new BlockDecoder(); + IDebugBridge debugBridge = Substitute.For(); + byte[] rlp = decoder.Encode(Build.A.Block.WithNumber(1).TestObject).Bytes; + debugBridge.GetBlockRlp(Keccak.Zero).Returns((byte[])null); + + DebugModule module = new DebugModule(NullLogManager.Instance, debugBridge); + JsonRpcResponse response = RpcTest.TestRequest(module, "debug_getBlockRlpByHash", $"{Keccak.Zero.Bytes.ToHexString()}"); + + Assert.AreEqual(-32601, response.Error.Code); + } + [Test] public void Get_trace() { diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugBridge.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugBridge.cs index 34cdfe74998..eebbef09a05 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugBridge.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugBridge.cs @@ -21,6 +21,7 @@ using System.Threading; using Nethermind.Blockchain; using Nethermind.Config; +using Nethermind.Core; using Nethermind.Core.Crypto; using Nethermind.Core.Encoding; using Nethermind.Dirichlet.Numerics; @@ -34,14 +35,15 @@ public class DebugBridge : IDebugBridge { private readonly IConfigProvider _configProvider; private readonly ITracer _tracer; + private readonly IBlockTree _blockTree; private Dictionary _dbMappings; - public DebugBridge(IConfigProvider configProvider, IReadOnlyDbProvider dbProvider, ITracer tracer, IBlockchainProcessor receiptsProcessor) + public DebugBridge(IConfigProvider configProvider, IReadOnlyDbProvider dbProvider, ITracer tracer, IBlockchainProcessor receiptsProcessor, IBlockTree blockTree) { - IBlockchainProcessor receiptsProcessor1 = receiptsProcessor ?? throw new ArgumentNullException(nameof(receiptsProcessor)); - receiptsProcessor1.ProcessingQueueEmpty += (sender, args) => _receiptProcessedEvent.Set(); - _configProvider = configProvider ?? throw new ArgumentNullException(nameof(configProvider)); + receiptsProcessor.ProcessingQueueEmpty += (sender, args) => _receiptProcessedEvent.Set(); + _configProvider = configProvider ?? throw new ArgumentNullException(nameof(configProvider)); _tracer = tracer ?? throw new ArgumentNullException(nameof(tracer)); + _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); dbProvider = dbProvider ?? throw new ArgumentNullException(nameof(dbProvider)); IDb blockInfosDb = dbProvider.BlockInfosDb ?? throw new ArgumentNullException(nameof(dbProvider.BlockInfosDb)); IDb blocksDb = dbProvider.BlocksDb ?? throw new ArgumentNullException(nameof(dbProvider.BlocksDb)); @@ -50,7 +52,7 @@ public DebugBridge(IConfigProvider configProvider, IReadOnlyDbProvider dbProvide IDb codeDb = dbProvider.CodeDb ?? throw new ArgumentNullException(nameof(dbProvider.CodeDb)); IDb pendingTxsDb = dbProvider.PendingTxsDb ?? throw new ArgumentNullException(nameof(dbProvider.PendingTxsDb)); IDb traceDb = dbProvider.TraceDb ?? throw new ArgumentNullException(nameof(dbProvider.TraceDb)); - + _dbMappings = new Dictionary(StringComparer.InvariantCultureIgnoreCase) { {DbNames.State, dbProvider.StateDb}, @@ -62,14 +64,14 @@ public DebugBridge(IConfigProvider configProvider, IReadOnlyDbProvider dbProvide {DbNames.Receipts, receiptsDb}, {DbNames.PendingTxs, pendingTxsDb}, {DbNames.Trace, traceDb} - }; + }; } - + public byte[] GetDbValue(string dbName, byte[] key) { return _dbMappings[dbName][key]; } - + public GethLikeTxTrace GetTransactionTrace(Keccak transactionHash, GethTraceOptions gethTraceOptions = null) { return _tracer.Trace(transactionHash, gethTraceOptions ?? GethTraceOptions.Default); @@ -94,18 +96,33 @@ public GethLikeTxTrace[] GetBlockTrace(long blockNumber, GethTraceOptions gethTr { return _tracer.TraceBlock(blockNumber, gethTraceOptions ?? GethTraceOptions.Default); } - + public GethLikeTxTrace[] GetBlockTrace(Rlp blockRlp, GethTraceOptions gethTraceOptions = null) { return _tracer.TraceBlock(blockRlp, gethTraceOptions ?? GethTraceOptions.Default); } - + + public byte[] GetBlockRlp(Keccak blockHash) + { + return _dbMappings[DbNames.Blocks].Get(blockHash); + } + + public byte[] GetBlockRlp(long number) + { + BlockHeader header = _blockTree.FindHeader(number); + if (header == null) + { + return null; + } + + return _dbMappings[DbNames.Blocks].Get(header.Hash); + } + public string GetConfigValue(string category, string name) { return _configProvider.GetRawValue(category, name); } - + private AutoResetEvent _receiptProcessedEvent = new AutoResetEvent(false); - } } \ No newline at end of file diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugModule.cs index 940f02fbd85..cc1a1a04b4b 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugModule.cs @@ -138,9 +138,26 @@ public ResultWrapper debug_gcStats() throw new NotImplementedException(); } - public ResultWrapper debug_getBlockRlp(BlockParameter blockParameter) + public ResultWrapper debug_getBlockRlp(long blockNumber) { - throw new NotImplementedException(); + byte[] rlp = _debugBridge.GetBlockRlp(blockNumber); + if (rlp == null) + { + return ResultWrapper.Fail($"Block {blockNumber} was not found", ErrorType.NotFound); + } + + return ResultWrapper.Success(rlp); + } + + public ResultWrapper debug_getBlockRlpByHash(Keccak hash) + { + byte[] rlp = _debugBridge.GetBlockRlp(hash); + if (rlp == null) + { + return ResultWrapper.Fail($"Block {hash} was not found", ErrorType.NotFound); + } + + return ResultWrapper.Success(rlp); } public ResultWrapper debug_memStats(BlockParameter blockParameter) diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugBridge.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugBridge.cs index 5b01d757a17..e7562348122 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugBridge.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugBridge.cs @@ -31,6 +31,8 @@ public interface IDebugBridge GethLikeTxTrace[] GetBlockTrace(Keccak blockHash, GethTraceOptions gethTraceOptions = null); GethLikeTxTrace[] GetBlockTrace(long blockNumber, GethTraceOptions gethTraceOptions = null); GethLikeTxTrace[] GetBlockTrace(Rlp blockRlp, GethTraceOptions gethTraceOptions = null); + byte[] GetBlockRlp(Keccak blockHash); + byte[] GetBlockRlp(long number); byte[] GetDbValue(string dbName, byte[] key); string GetConfigValue(string category, string name); } diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugModule.cs index cd24def00c0..7d002336a02 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugModule.cs @@ -26,11 +26,22 @@ namespace Nethermind.JsonRpc.Modules.DebugModule { public interface IDebugModule : IModule { + [JsonRpcMethod(Description = "")] ResultWrapper debug_traceTransaction(Keccak transactionHash, GethTraceOptions options = null); + + [JsonRpcMethod(Description = "")] ResultWrapper debug_traceTransactionByBlockAndIndex(BlockParameter blockParameter, int txIndex, GethTraceOptions options = null); + + [JsonRpcMethod(Description = "")] ResultWrapper debug_traceTransactionByBlockhashAndIndex(Keccak blockHash, int txIndex, GethTraceOptions options = null); + + [JsonRpcMethod(Description = "")] ResultWrapper debug_traceBlock(byte[] blockRlp, GethTraceOptions options = null); + + [JsonRpcMethod(Description = "")] ResultWrapper debug_traceBlockByNumber(BigInteger number, GethTraceOptions options = null); + + [JsonRpcMethod(Description = "")] ResultWrapper debug_traceBlockByHash(Keccak blockHash, GethTraceOptions options = null); [JsonRpcMethod(Description = "", IsImplemented = false)] @@ -41,19 +52,26 @@ public interface IDebugModule : IModule [JsonRpcMethod(Description = "", IsImplemented = false)] ResultWrapper debug_gcStats(); - ResultWrapper debug_getBlockRlp(BlockParameter blockParameter); + + [JsonRpcMethod(Description = "Retrieves a block in the RLP-serialized form.")] + ResultWrapper debug_getBlockRlp(long number); + + [JsonRpcMethod(Description = "Retrieves a block in the RLP-serialized form.")] + ResultWrapper debug_getBlockRlpByHash(Keccak hash); [JsonRpcMethod(Description = "", IsImplemented = false)] ResultWrapper debug_memStats(BlockParameter blockParameter); [JsonRpcMethod(Description = "", IsImplemented = false)] - ResultWrapper debug_seedHash(BlockParameter blockParameter); - - [JsonRpcMethod(Description = "", IsImplemented = false)] + [JsonRpcMethod(Description = "", IsImplemented = false)] ResultWrapper debug_setHead(BlockParameter blockParameter); + + [JsonRpcMethod(Description = "", IsImplemented = false)] ResultWrapper debug_getFromDb(string dbName, byte[] key); + + [JsonRpcMethod(Description = "Retrieves the Nethermind configuration value, e.g. InitConfig.JsonRpcEnabled")] ResultWrapper debug_getConfigValue(string category, string name); } } \ No newline at end of file diff --git a/src/Nethermind/Nethermind.Runner/Runners/EthereumRunner.cs b/src/Nethermind/Nethermind.Runner/Runners/EthereumRunner.cs index bf259fc33f0..e62622e16bb 100644 --- a/src/Nethermind/Nethermind.Runner/Runners/EthereumRunner.cs +++ b/src/Nethermind/Nethermind.Runner/Runners/EthereumRunner.cs @@ -283,7 +283,7 @@ private void RegisterJsonRpcModules() AlternativeChain debugChain = new AlternativeChain(_blockTree, _blockValidator, _rewardCalculator, _specProvider, rpcDbProvider, _recoveryStep, _logManager, NullTxPool.Instance, NullReceiptStorage.Instance); IReadOnlyDbProvider debugDbProvider = new ReadOnlyDbProvider(_dbProvider, false); - var debugBridge = new DebugBridge(_configProvider, debugDbProvider, tracer, debugChain.Processor); + var debugBridge = new DebugBridge(_configProvider, debugDbProvider, tracer, debugChain.Processor, _blockTree); EthModule module = new EthModule(_logManager, blockchainBridge); _rpcModuleProvider.Register(module); diff --git a/src/Nethermind/Nethermind.WriteTheDocs/cli.rst b/src/Nethermind/Nethermind.WriteTheDocs/cli.rst index 0b3b00cbdad..14f62f290f1 100644 --- a/src/Nethermind/Nethermind.WriteTheDocs/cli.rst +++ b/src/Nethermind/Nethermind.WriteTheDocs/cli.rst @@ -6,6 +6,8 @@ CLI access is not currently included in the Nethermind launcher but will be adde clique ^^^^^^ + - clique.discard(address) - + - clique.getSigners() - - clique.getSignersAnnotated() - @@ -22,22 +24,26 @@ clique - clique.propose(address, vote) - - - clique.discard(address) - - debug ^^^^^ + - debug.getBlockRlp(number) - + + - debug.getBlockRlpByHash(hash) - + - debug.config(category, name) - - - debug.traceBlock(hash) - + - debug.traceBlock(hash, options) - + + - debug.traceBlockByHash(hash, options) - - - debug.traceBlockByHash(hash) - + - debug.traceBlockByNumber(number, options) - - - debug.traceBlockByNumber(number) - + - debug.traceTransaction(hash, options) - - - debug.traceTransactionByBlockAndIndex(hash) - + - debug.traceTransactionByBlockAndIndex(hash, options) - - - debug.traceTransactionByBlockhashAndIndex(hash) - + - debug.traceTransactionByBlockhashAndIndex(hash, options) - diag ^^^^ @@ -61,6 +67,8 @@ eth - eth.getCode(address, blockParameter) - + - eth.getStorageAt(address, positionIndex, blockParameter) - + - eth.getTransactionByBlockNumberAndIndex(blockParameter, index) - - eth.getTransactionReceipt(txHash) - @@ -97,12 +105,10 @@ node - node.uri - -trace -^^^^^ - - - trace.replayBlockTransactions(blockNumber, traceTypes) - +parity +^^^^^^ - - trace.replayTransaction(txHash, traceTypes) - + - parity.pendingTransactions() - Returns the pending transactions using Parity format personal ^^^^^^^^ @@ -122,6 +128,17 @@ system - system.memory - +trace +^^^^^ + + - trace.replayBlockTransactions(blockNumber, traceTypes) - Replays all transactions in a block returning the requested traces for each transaction. + + - trace.replayTransaction(txHash, traceTypes) - Replays a transaction, returning the traces. + + - trace.block(blockNumber) - Returns traces created at given block. + + - trace.transaction(txHash) - Returns all traces of given transaction + web3 ^^^^ diff --git a/src/Nethermind/Nethermind.WriteTheDocs/configuration.rst b/src/Nethermind/Nethermind.WriteTheDocs/configuration.rst index 643c645a48b..1ab635eeb90 100644 --- a/src/Nethermind/Nethermind.WriteTheDocs/configuration.rst +++ b/src/Nethermind/Nethermind.WriteTheDocs/configuration.rst @@ -229,6 +229,8 @@ InitConfig UDP port number for incoming discovery connections. default value: 30303 + EnableRc7Fix + EnableUnsecuredDevWallet If 'true' then it enables the wallet / key store in the application. default value: false @@ -579,6 +581,7 @@ Sample configuration (mainnet) "ChainSpecPath" : null, "DiscoveryEnabled" : true, "DiscoveryPort" : 30303, + "EnableRc7Fix" : [MISSING_DOCS], "EnableUnsecuredDevWallet" : false, "GenesisHash" : null, "HttpHost" : "127.0.0.1", diff --git a/src/Nethermind/Nethermind.WriteTheDocs/jsonrpc.rst b/src/Nethermind/Nethermind.WriteTheDocs/jsonrpc.rst index d236fe47a52..23f14c9c30d 100644 --- a/src/Nethermind/Nethermind.WriteTheDocs/jsonrpc.rst +++ b/src/Nethermind/Nethermind.WriteTheDocs/jsonrpc.rst @@ -52,11 +52,13 @@ debug - [NOT IMPLEMENTED]debug_gcStats() - - debug_getBlockRlp(blockParameter) + - debug_getBlockRlp(number) + + - debug_getBlockRlpByHash(hash) - debug_getConfigValue(category, name) - - debug_getFromDb(dbName, key) + - [NOT IMPLEMENTED]debug_getFromDb(dbName, key) - [NOT IMPLEMENTED]debug_memStats(blockParameter) @@ -64,19 +66,19 @@ debug - [NOT IMPLEMENTED]debug_setHead(blockParameter) - - debug_traceBlock(blockRlp) + - debug_traceBlock(blockRlp, options) - - debug_traceBlockByHash(blockHash) + - debug_traceBlockByHash(blockHash, options) - - debug_traceBlockByNumber(number) + - debug_traceBlockByNumber(number, options) - - [NOT IMPLEMENTED]debug_traceBlockFromFile(fileName) + - [NOT IMPLEMENTED]debug_traceBlockFromFile(fileName, options) - - debug_traceTransaction(transactionHash, traceOptions) + - debug_traceTransaction(transactionHash, options) - - debug_traceTransactionByBlockAndIndex(blockParameter, txIndex) + - debug_traceTransactionByBlockAndIndex(blockParameter, txIndex, options) - - debug_traceTransactionByBlockhashAndIndex(blockHash, txIndex) + - debug_traceTransactionByBlockhashAndIndex(blockHash, txIndex, options) eth ^^^ @@ -174,6 +176,11 @@ net - net_version() +parity +^^^^^^ + + - parity_pendingTransactions() + personal ^^^^^^^^