Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions beacon_chain/libnimbus_lc/libnimbus_lc.nim
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import
eth/p2p/discoveryv5/random2,
eth/rlp,
eth/trie/ordered_trie,
json_rpc/jsonmarshal,
secp256k1,
web3/[engine_api_types, eth_api_types, conversions],
../el/engine_api_conversions,
Expand Down Expand Up @@ -1215,10 +1214,10 @@ proc ETHExecutionBlockHeaderCreateFromJson(
## See:
## * https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash
let data = try:
# a direct parameter like JrpcConv.decode($blockHeaderJson, BlockObject)
# a direct parameter like EthJson.decode($blockHeaderJson, BlockObject)
# will cause premature garbage collector kick in.
let jsonBytes = $blockHeaderJson
JrpcConv.decode(jsonBytes, BlockObject)
EthJson.decode(jsonBytes, BlockObject)
except SerializationError:
return nil
if data == nil:
Expand Down Expand Up @@ -1474,10 +1473,10 @@ proc ETHTransactionsCreateFromJson(
## See:
## * https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash
var datas = try:
# a direct parameter like JrpcConv.decode($transactionsJson, seq[TransactionObject])
# a direct parameter like EthJson.decode($transactionsJson, seq[TransactionObject])
# will cause premature garbage collector kick in.
let jsonBytes = $transactionsJson
JrpcConv.decode(jsonBytes, seq[TransactionObject])
EthJson.decode(jsonBytes, seq[TransactionObject])
except SerializationError:
return nil

Expand Down Expand Up @@ -2283,10 +2282,10 @@ proc ETHReceiptsCreateFromJson(
## See:
## * https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactionreceipt
var datas = try:
# a direct parameter like JrpcConv.decode($receiptsJson, seq[ReceiptObject])
# a direct parameter like EthJson.decode($receiptsJson, seq[ReceiptObject])
# will cause premature garbage collector kick in.
let jsonBytes = $receiptsJson
JrpcConv.decode(jsonBytes, seq[ReceiptObject])
EthJson.decode(jsonBytes, seq[ReceiptObject])
except SerializationError:
return nil
if datas.len != ETHTransactionsGetCount(transactions):
Expand Down
4 changes: 2 additions & 2 deletions ncli/ncli_testnet.nim
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import
std/[json, options, times],
chronos, bearssl/rand, chronicles, confutils, stint, json_serialization,
web3, eth/common/keys, eth/p2p/discoveryv5/random2,
stew/[io2, byteutils], json_rpc/jsonmarshal,
stew/[io2, byteutils],
../beacon_chain/conf,
../beacon_chain/el/el_manager,
../beacon_chain/networking/eth2_network,
Expand Down Expand Up @@ -399,7 +399,7 @@ proc doCreateTestnet*(config: CliConfig,

try:
let blockAsJson = genesisBlockContents.get
genesisBlock = JrpcConv.decode(blockAsJson, BlockObject)
genesisBlock = EthJson.decode(blockAsJson, BlockObject)
except CatchableError as err:
error "Failed to load the genesis block from json",
err = err.msg
Expand Down
139 changes: 70 additions & 69 deletions research/fakeee.nim
Original file line number Diff line number Diff line change
Expand Up @@ -17,75 +17,76 @@ import
chronicles

proc setupEngineAPI*(server: RpcServer) =
# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_newpayloadv1
# cannot use `params` as param name. see https:#github.com/status-im/nim-json-rpc/issues/128
server.rpc("engine_newPayloadV1") do(payload: ExecutionPayloadV1) -> PayloadStatusV1:
info "engine_newPayloadV1",
number = $(distinctBase payload.blockNumber), hash = payload.blockHash

return PayloadStatusV1(
status: PayloadExecutionStatus.syncing,
)

# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/shanghai.md#engine_newpayloadv2
server.rpc("engine_newPayloadV2") do(payload: ExecutionPayloadV2) -> PayloadStatusV1:
info "engine_newPayloadV2", payload

return PayloadStatusV1(
status: PayloadExecutionStatus.syncing,
)

# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_getpayloadv1
server.rpc("engine_getPayloadV1") do(payloadId: Bytes8) -> ExecutionPayloadV1:
info "engine_getPayloadV1",
id = payloadId.toHex

raise (ref ApplicationError)(
code: engineApiUnknownPayload,
msg: "Unknown payload"
)

# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_forkchoiceupdatedv1
server.rpc("engine_forkchoiceUpdatedV1") do(
update: ForkchoiceStateV1,
payloadAttributes: Opt[PayloadAttributesV1]) -> ForkchoiceUpdatedResponse:
info "engine_forkchoiceUpdatedV1",
update,
payloadAttributes

return ForkchoiceUpdatedResponse(
payloadStatus: PayloadStatusV1(
status: PayloadExecutionStatus.syncing))

# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/shanghai.md#engine_forkchoiceupdatedv2
server.rpc("engine_forkchoiceUpdatedV2") do(
forkchoiceState: ForkchoiceStateV1, payloadAttributes: Opt[PayloadAttributesV2]) -> ForkchoiceUpdatedResponse:
info "engine_forkchoiceUpdatedV2",
forkchoiceState, payloadAttributes

return ForkchoiceUpdatedResponse(
payloadStatus: PayloadStatusV1(
status: PayloadExecutionStatus.syncing))

server.rpc("eth_getBlockByNumber") do(
quantityTag: string, fullTransactions: bool) -> JsonString:
info "eth_getBlockByNumber", quantityTag, fullTransactions

return if quantityTag == "latest":
JrpcConv.encode(BlockObject(number: 1000.Quantity)).JsonString
else:
"{}".JsonString

server.rpc("eth_getBlockByHash") do(
data: string, fullTransactions: bool) -> BlockObject:
info "eth_getBlockByHash", data = toHex(data), fullTransactions

return BlockObject(number: 1000.Quantity)

server.rpc("eth_chainId") do() -> UInt256:
info "eth_chainId"

return 1.u256
server.rpc(EthJson):
# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_newpayloadv1
# cannot use `params` as param name. see https:#github.com/status-im/nim-json-rpc/issues/128
proc engine_newPayloadV1(payload: ExecutionPayloadV1): PayloadStatusV1 =
info "engine_newPayloadV1",
number = $(distinctBase payload.blockNumber), hash = payload.blockHash

return PayloadStatusV1(
status: PayloadExecutionStatus.syncing,
)

# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/shanghai.md#engine_newpayloadv2
proc engine_newPayloadV2(payload: ExecutionPayloadV2): PayloadStatusV1 =
info "engine_newPayloadV2", payload

return PayloadStatusV1(
status: PayloadExecutionStatus.syncing,
)

# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_getpayloadv1
proc engine_getPayloadV1(payloadId: Bytes8): ExecutionPayloadV1 =
info "engine_getPayloadV1",
id = payloadId.toHex

raise (ref ApplicationError)(
code: engineApiUnknownPayload,
msg: "Unknown payload"
)

# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_forkchoiceupdatedv1
proc engine_forkchoiceUpdatedV1(
update: ForkchoiceStateV1,
payloadAttributes: Opt[PayloadAttributesV1]): ForkchoiceUpdatedResponse =
info "engine_forkchoiceUpdatedV1",
update,
payloadAttributes

return ForkchoiceUpdatedResponse(
payloadStatus: PayloadStatusV1(
status: PayloadExecutionStatus.syncing))

# https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/shanghai.md#engine_forkchoiceupdatedv2
proc engine_forkchoiceUpdatedV2(
forkchoiceState: ForkchoiceStateV1, payloadAttributes: Opt[PayloadAttributesV2]): ForkchoiceUpdatedResponse =
info "engine_forkchoiceUpdatedV2",
forkchoiceState, payloadAttributes

return ForkchoiceUpdatedResponse(
payloadStatus: PayloadStatusV1(
status: PayloadExecutionStatus.syncing))

proc eth_getBlockByNumber(
quantityTag: string, fullTransactions: bool): JsonString =
info "eth_getBlockByNumber", quantityTag, fullTransactions

return if quantityTag == "latest":
EthJson.encode(BlockObject(number: 1000.Quantity)).JsonString
else:
"{}".JsonString

proc eth_getBlockByHash(
data: string, fullTransactions: bool): BlockObject =
info "eth_getBlockByHash", data = toHex(data), fullTransactions

return BlockObject(number: 1000.Quantity)

proc eth_chainId(): UInt256 =
info "eth_chainId"

return 1.u256

when isMainModule:
let server = newRpcHttpServer(
Expand Down
Loading