Skip to content

Commit c9fed3b

Browse files
authored
Uncomment & rework debug json-rpc endpoints (#3929)
1 parent aa6b6cb commit c9fed3b

File tree

3 files changed

+68
-76
lines changed

3 files changed

+68
-76
lines changed

execution_chain/rpc/debug.nim

Lines changed: 32 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,6 @@ ExecutionWitness.useDefaultSerializationIn JrpcConv
5757
# if opts.disableState.isTrue : result.incl TracerFlags.DisableState
5858
# if opts.disableStateDiff.isTrue: result.incl TracerFlags.DisableStateDiff
5959

60-
proc headerFromTag(chain: ForkedChainRef, blockTag: BlockTag): Result[Header, string] =
61-
if blockTag.kind == bidAlias:
62-
let tag = blockTag.alias.toLowerAscii
63-
case tag
64-
of "latest":
65-
return ok(chain.latestHeader)
66-
of "finalized":
67-
return ok(chain.finalizedHeader)
68-
of "safe":
69-
return ok(chain.safeHeader)
70-
else:
71-
return err("Unsupported block tag " & tag)
72-
else:
73-
let blockNum = base.BlockNumber blockTag.number
74-
return chain.headerByNumber(blockNum)
75-
7660
proc getExecutionWitness*(chain: ForkedChainRef, blockHash: Hash32): Result[ExecutionWitness, string] =
7761
let txFrame = chain.txFrame(blockHash).txFrameBegin()
7862
defer:
@@ -183,43 +167,45 @@ proc setupDebugRpc*(com: CommonRef, txPool: TxPoolRef, server: RpcServer) =
183167
# header = chainDB.headerFromTag(quantityTag)
184168
# chainDB.setHead(header)
185169

186-
# server.rpc("debug_getRawBlock") do(quantityTag: BlockTag) -> seq[byte]:
187-
# ## Returns an RLP-encoded block.
188-
# var
189-
# header = chainDB.headerFromTag(quantityTag)
190-
# blockHash = chainDB.getBlockHash(header.number)
191-
# body = chainDB.getBlockBody(blockHash)
170+
server.rpc("debug_getRawBlock") do(blockTag: BlockTag) -> seq[byte]:
171+
## Returns an RLP-encoded block.
172+
let blockFromTag = chain.blockFromTag(blockTag).valueOr:
173+
raise newException(ValueError, error)
192174

193-
# rlp.encode(EthBlock.init(move(header), move(body)))
175+
rlp.encode(blockFromTag)
194176

195-
# server.rpc("debug_getRawHeader") do(quantityTag: BlockTag) -> seq[byte]:
196-
# ## Returns an RLP-encoded header.
197-
# let header = chainDB.headerFromTag(quantityTag)
198-
# rlp.encode(header)
177+
server.rpc("debug_getRawHeader") do(blockTag: BlockTag) -> seq[byte]:
178+
## Returns an RLP-encoded header.
179+
let header = chain.headerFromTag(blockTag).valueOr:
180+
raise newException(ValueError, error)
181+
rlp.encode(header)
182+
183+
server.rpc("debug_getRawReceipts") do(blockTag: BlockTag) -> seq[seq[byte]]:
184+
## Returns an array of EIP-2718 binary-encoded receipts.
185+
let header = chain.headerFromTag(blockTag).valueOr:
186+
raise newException(ValueError, error)
187+
var res: seq[seq[byte]]
188+
for receipt in chain.baseTxFrame.getReceipts(header.receiptsRoot):
189+
res.add rlp.encode(receipt)
199190

200-
# server.rpc("debug_getRawReceipts") do(quantityTag: BlockTag) -> seq[seq[byte]]:
201-
# ## Returns an array of EIP-2718 binary-encoded receipts.
202-
# let header = chainDB.headerFromTag(quantityTag)
203-
# for receipt in chainDB.getReceipts(header.receiptsRoot):
204-
# result.add rlp.encode(receipt)
191+
res
205192

206-
# server.rpc("debug_getRawTransaction") do(data: Hash32) -> seq[byte]:
207-
# ## Returns an EIP-2718 binary-encoded transaction.
208-
# let txHash = data
209-
# let res = txPool.getItem(txHash)
210-
# if res.isOk:
211-
# return rlp.encode(res.get().tx)
193+
server.rpc("debug_getRawTransaction") do(txHash: Hash32) -> seq[byte]:
194+
## Returns an EIP-2718 binary-encoded transaction.
195+
let res = txPool.getItem(txHash)
196+
if res.isOk:
197+
return rlp.encode(res.get().tx)
212198

213-
# let txDetails = chainDB.getTransactionKey(txHash)
214-
# if txDetails.index < 0:
215-
# raise newException(ValueError, "Transaction not found " & data.toHex)
199+
let
200+
(blockHash, txId) = chain.txDetailsByTxHash(txHash).valueOr:
201+
raise newException(ValueError, "Transaction not found")
202+
blk = chain.blockByHash(blockHash).valueOr:
203+
raise newException(ValueError, "Block not found")
216204

217-
# let header = chainDB.getBlockHeader(txDetails.blockNumber)
218-
# var tx: Transaction
219-
# if chainDB.getTransaction(header.txRoot, txDetails.index, tx):
220-
# return rlp.encode(tx)
205+
if blk.transactions.len <= int(txId):
206+
raise newException(ValueError, "Transaction not found")
221207

222-
# raise newException(ValueError, "Transaction not found " & data.toHex)
208+
rlp.encode(blk.transactions[txId])
223209

224210
server.rpc("debug_executionWitness") do(quantityTag: BlockTag) -> ExecutionWitness:
225211
## Returns an execution witness for the given block number.

execution_chain/rpc/rpc_utils.nim

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
{.push raises: [].}
1111

1212
import
13-
std/[sequtils, algorithm],
13+
std/[sequtils, algorithm, strutils],
1414
./rpc_types,
1515
./params,
1616
../db/ledger,
@@ -399,3 +399,35 @@ proc getTotalDifficulty*(chain: ForkedChainRef, blockHash: Hash32, header: Heade
399399
else:
400400
# Note: It's ok to use baseTxFrame for TD as this is for historical blocks
401401
chain.baseTxFrame().getScore(blockHash)
402+
403+
proc headerFromTag*(chain: ForkedChainRef, blockTag: BlockTag): Result[Header, string] =
404+
if blockTag.kind == bidAlias:
405+
let tag = blockTag.alias.toLowerAscii
406+
case tag
407+
of "latest":
408+
ok(chain.latestHeader)
409+
of "finalized":
410+
ok(chain.finalizedHeader)
411+
of "safe":
412+
ok(chain.safeHeader)
413+
else:
414+
err("Unsupported block tag " & tag)
415+
else:
416+
let blockNum = base.BlockNumber blockTag.number
417+
chain.headerByNumber(blockNum)
418+
419+
proc blockFromTag*(chain: ForkedChainRef, blockTag: BlockTag): Result[Block, string] =
420+
if blockTag.kind == bidAlias:
421+
let tag = blockTag.alias.toLowerAscii
422+
case tag
423+
of "latest":
424+
ok(chain.latestBlock)
425+
of "finalized":
426+
ok(chain.finalizedBlock)
427+
of "safe":
428+
ok(chain.safeBlock)
429+
else:
430+
err("Unsupported block tag " & tag)
431+
else:
432+
let blockNum = base.BlockNumber blockTag.number
433+
chain.blockByNumber(blockNum)

execution_chain/rpc/server_api.nim

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
import
1313
chronicles,
14-
std/[sequtils, strutils],
14+
std/sequtils,
1515
stint,
1616
web3/[conversions, eth_api_types],
1717
eth/common/[base, transaction_utils],
@@ -88,20 +88,7 @@ proc getProof*(
8888
)
8989

9090
proc headerFromTag(api: ServerAPIRef, blockTag: BlockTag): Result[Header, string] =
91-
if blockTag.kind == bidAlias:
92-
let tag = blockTag.alias.toLowerAscii
93-
case tag
94-
of "latest":
95-
return ok(api.chain.latestHeader)
96-
of "finalized":
97-
return ok(api.chain.finalizedHeader)
98-
of "safe":
99-
return ok(api.chain.safeHeader)
100-
else:
101-
return err("Unsupported block tag " & tag)
102-
else:
103-
let blockNum = base.BlockNumber blockTag.number
104-
return api.chain.headerByNumber(blockNum)
91+
api.chain.headerFromTag(blockTag)
10592

10693
proc headerFromTag(api: ServerAPIRef, blockTag: Opt[BlockTag]): Result[Header, string] =
10794
let blockId = blockTag.get(defaultTag)
@@ -117,20 +104,7 @@ proc ledgerFromTag(api: ServerAPIRef, blockTag: BlockTag): Result[LedgerRef, str
117104
ok(LedgerRef.init(txFrame))
118105

119106
proc blockFromTag(api: ServerAPIRef, blockTag: BlockTag): Result[Block, string] =
120-
if blockTag.kind == bidAlias:
121-
let tag = blockTag.alias.toLowerAscii
122-
case tag
123-
of "latest":
124-
return ok(api.chain.latestBlock)
125-
of "finalized":
126-
return ok(api.chain.finalizedBlock)
127-
of "safe":
128-
return ok(api.chain.safeBlock)
129-
else:
130-
return err("Unsupported block tag " & tag)
131-
else:
132-
let blockNum = base.BlockNumber blockTag.number
133-
return api.chain.blockByNumber(blockNum)
107+
api.chain.blockFromTag(blockTag)
134108

135109
proc setupServerAPI*(api: ServerAPIRef, server: RpcServer, am: ref AccountsManager) =
136110
server.rpc("eth_getBalance") do(data: Address, blockTag: BlockTag) -> UInt256:

0 commit comments

Comments
 (0)