@@ -17,75 +17,76 @@ import
1717 chronicles
1818
1919proc setupEngineAPI * (server: RpcServer ) =
20- # https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_newpayloadv1
21- # cannot use `params` as param name. see https:#github.com/status-im/nim-json-rpc/issues/128
22- server.rpc (" engine_newPayloadV1" ) do (payload: ExecutionPayloadV1 ) -> PayloadStatusV1 :
23- info " engine_newPayloadV1" ,
24- number = $ (distinctBase payload.blockNumber), hash = payload.blockHash
25-
26- return PayloadStatusV1 (
27- status: PayloadExecutionStatus .syncing,
28- )
29-
30- # https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/shanghai.md#engine_newpayloadv2
31- server.rpc (" engine_newPayloadV2" ) do (payload: ExecutionPayloadV2 ) -> PayloadStatusV1 :
32- info " engine_newPayloadV2" , payload
33-
34- return PayloadStatusV1 (
35- status: PayloadExecutionStatus .syncing,
36- )
37-
38- # https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_getpayloadv1
39- server.rpc (" engine_getPayloadV1" ) do (payloadId: Bytes8 ) -> ExecutionPayloadV1 :
40- info " engine_getPayloadV1" ,
41- id = payloadId.toHex
42-
43- raise (ref ApplicationError )(
44- code: engineApiUnknownPayload,
45- msg: " Unknown payload"
46- )
47-
48- # https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_forkchoiceupdatedv1
49- server.rpc (" engine_forkchoiceUpdatedV1" ) do (
50- update: ForkchoiceStateV1 ,
51- payloadAttributes: Opt [PayloadAttributesV1 ]) -> ForkchoiceUpdatedResponse :
52- info " engine_forkchoiceUpdatedV1" ,
53- update,
54- payloadAttributes
55-
56- return ForkchoiceUpdatedResponse (
57- payloadStatus: PayloadStatusV1 (
58- status: PayloadExecutionStatus .syncing))
59-
60- # https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/shanghai.md#engine_forkchoiceupdatedv2
61- server.rpc (" engine_forkchoiceUpdatedV2" ) do (
62- forkchoiceState: ForkchoiceStateV1 , payloadAttributes: Opt [PayloadAttributesV2 ]) -> ForkchoiceUpdatedResponse :
63- info " engine_forkchoiceUpdatedV2" ,
64- forkchoiceState, payloadAttributes
65-
66- return ForkchoiceUpdatedResponse (
67- payloadStatus: PayloadStatusV1 (
68- status: PayloadExecutionStatus .syncing))
69-
70- server.rpc (" eth_getBlockByNumber" ) do (
71- quantityTag: string , fullTransactions: bool ) -> JsonString :
72- info " eth_getBlockByNumber" , quantityTag, fullTransactions
73-
74- return if quantityTag == " latest" :
75- JrpcConv .encode (BlockObject (number: 1000 .Quantity )).JsonString
76- else :
77- " {}" .JsonString
78-
79- server.rpc (" eth_getBlockByHash" ) do (
80- data: string , fullTransactions: bool ) -> BlockObject :
81- info " eth_getBlockByHash" , data = toHex (data), fullTransactions
82-
83- return BlockObject (number: 1000 .Quantity )
84-
85- server.rpc (" eth_chainId" ) do () -> UInt256 :
86- info " eth_chainId"
87-
88- return 1 .u256
20+ server.rpc (EthJson ):
21+ # https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_newpayloadv1
22+ # cannot use `params` as param name. see https:#github.com/status-im/nim-json-rpc/issues/128
23+ proc engine_newPayloadV1 (payload: ExecutionPayloadV1 ): PayloadStatusV1 =
24+ info " engine_newPayloadV1" ,
25+ number = $ (distinctBase payload.blockNumber), hash = payload.blockHash
26+
27+ return PayloadStatusV1 (
28+ status: PayloadExecutionStatus .syncing,
29+ )
30+
31+ # https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/shanghai.md#engine_newpayloadv2
32+ proc engine_newPayloadV2 (payload: ExecutionPayloadV2 ): PayloadStatusV1 =
33+ info " engine_newPayloadV2" , payload
34+
35+ return PayloadStatusV1 (
36+ status: PayloadExecutionStatus .syncing,
37+ )
38+
39+ # https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_getpayloadv1
40+ proc engine_getPayloadV1 (payloadId: Bytes8 ): ExecutionPayloadV1 =
41+ info " engine_getPayloadV1" ,
42+ id = payloadId.toHex
43+
44+ raise (ref ApplicationError )(
45+ code: engineApiUnknownPayload,
46+ msg: " Unknown payload"
47+ )
48+
49+ # https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/paris.md#engine_forkchoiceupdatedv1
50+ proc engine_forkchoiceUpdatedV1 (
51+ update: ForkchoiceStateV1 ,
52+ payloadAttributes: Opt [PayloadAttributesV1 ]): ForkchoiceUpdatedResponse =
53+ info " engine_forkchoiceUpdatedV1" ,
54+ update,
55+ payloadAttributes
56+
57+ return ForkchoiceUpdatedResponse (
58+ payloadStatus: PayloadStatusV1 (
59+ status: PayloadExecutionStatus .syncing))
60+
61+ # https://github.com/ethereum/execution-apis/blob/v1.0.0-beta.4/src/engine/shanghai.md#engine_forkchoiceupdatedv2
62+ proc engine_forkchoiceUpdatedV2 (
63+ forkchoiceState: ForkchoiceStateV1 , payloadAttributes: Opt [PayloadAttributesV2 ]): ForkchoiceUpdatedResponse =
64+ info " engine_forkchoiceUpdatedV2" ,
65+ forkchoiceState, payloadAttributes
66+
67+ return ForkchoiceUpdatedResponse (
68+ payloadStatus: PayloadStatusV1 (
69+ status: PayloadExecutionStatus .syncing))
70+
71+ proc eth_getBlockByNumber (
72+ quantityTag: string , fullTransactions: bool ): JsonString =
73+ info " eth_getBlockByNumber" , quantityTag, fullTransactions
74+
75+ return if quantityTag == " latest" :
76+ EthJson .encode (BlockObject (number: 1000 .Quantity )).JsonString
77+ else :
78+ " {}" .JsonString
79+
80+ proc eth_getBlockByHash (
81+ data: string , fullTransactions: bool ): BlockObject =
82+ info " eth_getBlockByHash" , data = toHex (data), fullTransactions
83+
84+ return BlockObject (number: 1000 .Quantity )
85+
86+ proc eth_chainId (): UInt256 =
87+ info " eth_chainId"
88+
89+ return 1 .u256
8990
9091when isMainModule :
9192 let server = newRpcHttpServer (
0 commit comments